Compare commits
208 Commits
88f26ffba7
...
master
Author | SHA1 | Date | |
---|---|---|---|
53869b8fe4 | |||
6854093ee1 | |||
202f8d3d82 | |||
7afdd33c58 | |||
74e288d596 | |||
17636c13e3 | |||
7d0c5796e5 | |||
79c2e6f1dc | |||
2024aa86ba | |||
cb5c21c077 | |||
6b5d116743 | |||
6fc78c75b3 | |||
4a3394183f | |||
![]() |
e1db775b3b | ||
![]() |
42349a4701 | ||
![]() |
f6bbc530bb | ||
![]() |
c9e804b614 | ||
![]() |
4bf10a1d30 | ||
![]() |
f68cd75600 | ||
9ad7523e7c | |||
ea988f6b8d | |||
23de123a0b | |||
b287ee5551 | |||
dc9837b7c2 | |||
2caba8db1a | |||
299638b1f8 | |||
56e7168d8e | |||
b0a3292d9f | |||
93dd90e355 | |||
aff70dd8b7 | |||
dea2ff0023 | |||
6361043c25 | |||
4f8e7e306d | |||
b42977f416 | |||
78c5f3784b | |||
65c4213836 | |||
993c1f7e3e | |||
29bdac41fe | |||
ad3aac9b4b | |||
2e36bbc100 | |||
190ec5200f | |||
b495161d81 | |||
faeeef6048 | |||
8e496cb6bd | |||
cfb29d6038 | |||
6051f6821a | |||
![]() |
6f99707fd7 | ||
![]() |
d17aef0878 | ||
![]() |
397117e770 | ||
![]() |
09d8a06f9e | ||
72abc2b84f | |||
8bd48159d6 | |||
61f2bca699 | |||
55fe5c3023 | |||
d04d419548 | |||
bc56f02a35 | |||
791a4c59a3 | |||
f21e750967 | |||
![]() |
3ee60f48c3 | ||
![]() |
496514649a | ||
336a05cd61 | |||
![]() |
06c6205177 | ||
![]() |
6180a35718 | ||
0b92e4a1f0 | |||
87ae490b94 | |||
![]() |
005f832b7a | ||
![]() |
9b2477c954 | ||
![]() |
2328090962 | ||
![]() |
9d86d26b2b | ||
![]() |
a7af815ce4 | ||
![]() |
b6afcc4c5f | ||
![]() |
8de8ec16be | ||
![]() |
cb6cefd8ac | ||
![]() |
0fe4541dc0 | ||
![]() |
3467d6a89a | ||
![]() |
3bf3b80e38 | ||
![]() |
a1248f6941 | ||
![]() |
777eaa01e5 | ||
![]() |
2043a03c0b | ||
![]() |
d215c1ca25 | ||
![]() |
6f85de472a | ||
![]() |
c929e53803 | ||
![]() |
c738d496e6 | ||
![]() |
fa55ce53c6 | ||
![]() |
6327d45a5c | ||
![]() |
52a0edfec8 | ||
![]() |
5319c475d9 | ||
![]() |
f2926cd047 | ||
![]() |
84735e0dee | ||
![]() |
508933006e | ||
![]() |
28ceaf1c67 | ||
![]() |
cfae63d36a | ||
![]() |
fa0bda3c25 | ||
![]() |
8b294582f3 | ||
![]() |
b3ac2fb649 | ||
![]() |
64a4a35cc6 | ||
![]() |
5d07141ef1 | ||
![]() |
a2880d5dd6 | ||
![]() |
9099d4ad61 | ||
![]() |
dd22f2cf15 | ||
![]() |
0adea30af9 | ||
![]() |
c829ec1156 | ||
![]() |
3e3000de62 | ||
![]() |
fbb107f14a | ||
![]() |
b91790f756 | ||
![]() |
417fb9db23 | ||
![]() |
3b52b9af34 | ||
![]() |
47f6cc436a | ||
![]() |
6b71cfa4d0 | ||
![]() |
a21d7c58d3 | ||
![]() |
f422aa9d64 | ||
![]() |
c7fb966326 | ||
![]() |
64c9957991 | ||
![]() |
52a3e9a4ac | ||
![]() |
b10b1802a5 | ||
![]() |
37ab3e4a6b | ||
![]() |
2bd1b76981 | ||
![]() |
c50768ba56 | ||
![]() |
ef4a636623 | ||
![]() |
2dd866d8c4 | ||
![]() |
0cb58a43fb | ||
![]() |
f4ef40a5e7 | ||
![]() |
0fcc2a652f | ||
![]() |
167c374b9d | ||
![]() |
0d5832c84c | ||
![]() |
f8c268294a | ||
![]() |
edf2a5e86d | ||
![]() |
976aa30657 | ||
![]() |
8b8fd6fd5f | ||
![]() |
10dacdb058 | ||
![]() |
9bb25eb817 | ||
![]() |
dbb8c3f911 | ||
![]() |
8402409489 | ||
![]() |
c988843bf0 | ||
![]() |
15c9bd23af | ||
![]() |
eb2cbf99c6 | ||
![]() |
903747d8ab | ||
![]() |
83d9d8ea02 | ||
![]() |
0121f1ea8c | ||
![]() |
ab9ba18e62 | ||
![]() |
e94f046972 | ||
![]() |
84795cfb47 | ||
![]() |
24b7ed6693 | ||
![]() |
a5416807ee | ||
![]() |
39549ef6f7 | ||
![]() |
5c605d6907 | ||
![]() |
e7c1cbbbe1 | ||
![]() |
35874492b0 | ||
![]() |
39683d7439 | ||
![]() |
9ecc9d7301 | ||
![]() |
ac92335ba5 | ||
![]() |
f1ff64ef6a | ||
![]() |
ae1a1aaba7 | ||
![]() |
d70459970d | ||
![]() |
3b8dc3d6f5 | ||
![]() |
91fc22a121 | ||
![]() |
138dc7c247 | ||
![]() |
68769c7389 | ||
![]() |
7f15dc1453 | ||
![]() |
d5bf9486a4 | ||
![]() |
9712decbec | ||
![]() |
0582a20115 | ||
![]() |
779173d5d5 | ||
![]() |
19156c252b | ||
![]() |
276cc63097 | ||
![]() |
0b4d0dbf5c | ||
![]() |
47e4e4e128 | ||
![]() |
fdba263d3e | ||
![]() |
d6fc490a05 | ||
![]() |
970990bc54 | ||
![]() |
934c3b1e4d | ||
![]() |
049873d9ec | ||
![]() |
37aa0e47a7 | ||
![]() |
9a93d8fe26 | ||
![]() |
2cbd7df913 | ||
![]() |
3a792d7774 | ||
![]() |
3cbc7c1f48 | ||
![]() |
11c3dd2fb2 | ||
![]() |
6f45460f1f | ||
![]() |
796b0b73a0 | ||
![]() |
e03405dffb | ||
![]() |
66a047b419 | ||
![]() |
3042b1c1c1 | ||
![]() |
654819d192 | ||
![]() |
c379f6d70b | ||
![]() |
58f8e59236 | ||
![]() |
57b4e92e0f | ||
![]() |
35df6004e3 | ||
![]() |
b1f15ca15e | ||
![]() |
095434dc70 | ||
![]() |
0b8584d4f8 | ||
![]() |
2f5af66c5c | ||
![]() |
c9d827a5d8 | ||
![]() |
6541915bcc | ||
![]() |
bcfb9fb7df | ||
![]() |
a981fdea6d | ||
![]() |
b83313b9be | ||
![]() |
335d088344 | ||
![]() |
0a1699f294 | ||
![]() |
613912c235 | ||
![]() |
ccc75b2b18 | ||
![]() |
a3d9001cc8 | ||
![]() |
517a724780 | ||
![]() |
8cacfc30d4 | ||
![]() |
a89c0309ad | ||
![]() |
ea9902ef74 | ||
![]() |
f26067b24f | ||
![]() |
88df8e7d47 |
17
.gitea/workflows/build.yml
Normal file
17
.gitea/workflows/build.yml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
name: Gitea Actions Demo
|
||||||
|
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
|
||||||
|
on: [push]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
Explore-Gitea-Actions:
|
||||||
|
runs-on: tcl-tk-builder
|
||||||
|
steps:
|
||||||
|
- name: Build the packages
|
||||||
|
run: |
|
||||||
|
git clone ${{ vars.main_url }}${{ gitea.repository }}
|
||||||
|
pwd
|
||||||
|
cd projman/debian
|
||||||
|
./build-deb-projman.sh
|
||||||
|
cd ../../
|
||||||
|
curl --user ${{ vars.user}}:${{vars.api_token}} --upload-file "$(ls -1| grep projman | grep -E 'deb$')" ${{vars.main_url}}api/packages/${{vars.user}}/debian/pool/bookworm/main/upload
|
||||||
|
- run: echo "This job's status is ${{ job.status }}."
|
2
.gitignore
vendored
2
.gitignore
vendored
@@ -4,3 +4,5 @@ debian/update-desktop-database
|
|||||||
debian/projman.substvars
|
debian/projman.substvars
|
||||||
debian/files
|
debian/files
|
||||||
debian/projman.debhelper.log
|
debian/projman.debhelper.log
|
||||||
|
debian/*.tmp
|
||||||
|
*.tmp
|
422
CHANGELOG
422
CHANGELOG
@@ -1,120 +1,350 @@
|
|||||||
######################################################
|
projman (2.0.0-alfa16)
|
||||||
# Tcl/Tk Project manager 2.0
|
|
||||||
# Distributed under GNU Public License
|
|
||||||
# Author: Sergey Kalinin svk@nuk-svl.ru
|
|
||||||
# Home page: https://nuk-svk.ru
|
|
||||||
######################################################
|
|
||||||
|
|
||||||
20/06/2022
|
Sergey Kalinin <svk@nuk-svk.ru> Thu, 22 Aug 2024 15:09:19 +0300
|
||||||
- Beginning the project
|
- changelog-gen.tcl: Добавлена генерация текстового журнала изменений
|
||||||
|
- build-deb-projman.sh: добавлена генерация changelog из git log
|
||||||
|
- changelog-gen.tcl: Вывод в файл вынесен в отдельную процедуру
|
||||||
|
- changelog-gen.tcl: Добавлено создание резервной копии выходного файла. Исправлен вывод в файл.
|
||||||
|
- changelog-gen.tcl: Добавлены опции командной строки
|
||||||
|
- Добавлен запуск changelog-gen при сборке пакета
|
||||||
|
- Добавлено чстение журнала начиная с определенной даты
|
||||||
|
- Новая сборка
|
||||||
|
|
||||||
13/07/2022
|
Sergey Kalinin <svkalinin@samsonpost.ru> Tue, 20 Aug 2024 13:30:43 +0300
|
||||||
- Added open file dialog
|
- Генерация списка изменений для debian приведена к корректному виду
|
||||||
- Added open folder dialog
|
- Генерация списка изменений для debian приведена к корректному виду
|
||||||
- Added save file function
|
- Исправлен фокус при создании нового файла. #3
|
||||||
- Added a command line argument support (open file(s) or folder(s))
|
|
||||||
- Added TCL and BASH highlite
|
|
||||||
- Added a configuration file (progman.ini) and a procedure for reading/saving them
|
|
||||||
|
|
||||||
14/07/2022
|
Калинин Сергей Валерьевич <svkalinin@samsonpost.ru> Wed, 17 Jul 2024 12:28:30 +0300
|
||||||
- Added On/Off viewing toolbar
|
- Исправлена неправильная замена выражение при поиске
|
||||||
- Added On/Off viewing line numbers bar
|
- Исправлена неправильная замена выражение при поиске
|
||||||
- Added a Comment/Uncomment text support
|
- Реализовал базовые функции генератора журнала изменений
|
||||||
- Added text auto format
|
|
||||||
|
|
||||||
15/07/2022
|
svk <svkalinin@samsonpost.ru> Mon, 24 Jun 2024 10:15:38 +0300
|
||||||
- Added a close file (tab) function with Ctrl+w
|
- Добавлена иконка для jinja template
|
||||||
- Added a insert/remove the tabspace
|
- Исправил остатки слияния веток
|
||||||
- Fixed comment/uncomment selected text
|
- Исправлено некорректное определение типа файла при открытии.
|
||||||
|
|
||||||
20/07/2022
|
<svk@nuk-svk.ru> Mon, 30 Oct 2023 09:46:02 +0300
|
||||||
- Fixed indent text
|
- Gitea actions add
|
||||||
- Fixed insert " and '
|
|
||||||
- Added a main window geometry option into config, and autosave current geometry
|
|
||||||
|
|
||||||
21/07/2022
|
svk <svkalinin@samsonpost.ru> Thu, 27 Jul 2023 13:04:32 +0300
|
||||||
- Added Save file dialog before tab was closed
|
- Merge branch 'master' of https://git.nuk-svk.ru/svk/projman
|
||||||
- Added Save file dialog when exiting, if file was modify
|
- Исправил открытие файлов с разными путями (~/ ./ ../)
|
||||||
|
|
||||||
22/07/2022
|
svkalinin <svk@nuk-svk.ru> Thu, 23 Feb 2023 13:46:56 +0300
|
||||||
- Added GO highlight
|
- Добавил изображений программы
|
||||||
|
|
||||||
27/07/2022
|
svk <svkalinin@samsonpost.ru> Mon, 6 Feb 2023 09:27:38 +0300
|
||||||
- Fixed comment/uncomment procedure (last line in selected text)
|
- Исправлена ошибка при создании нового файла.
|
||||||
- Fixed error with save new (untitled) file
|
|
||||||
|
|
||||||
01/08/2022
|
svk <svkalinin@samsonpost.ru> Wed, 21 Dec 2022 16:53:44 +0300
|
||||||
- Added inserting base64 encoded image
|
- Добавил пиктограммы файлов
|
||||||
- Added read the file structure and inserting into tree
|
- Исправил процедуру Files::CloseAll ('Закрыть всё')
|
||||||
- Added GUI font, and GUI foreground color setting
|
- Добавлена поддержка Lua
|
||||||
- Added tcl and go files images
|
- Исправлена процедура (рас)комментирования
|
||||||
- Added image for file type (extention)
|
- Исправил ошибку при выходе в процедуре (Congig::Write)
|
||||||
|
- Добавил раскраски в ruby
|
||||||
|
- Добавлена возможность многострочных комментариев
|
||||||
|
- В Ruby lexer добавлен поиск переменных коде.
|
||||||
|
- Новая сборка
|
||||||
|
- Немного почистил. Добавлен поиск переменных по питоньим исходникам (lexer)
|
||||||
|
- Еще одно исправление подсветки для INI
|
||||||
|
- Новая сборка
|
||||||
|
- Исправлене подсветки комментариев в INI
|
||||||
|
- Новая сборка
|
||||||
|
- Изменения в подсветке для INI
|
||||||
|
- Добавил подсветку для Desktop и Spec файлов
|
||||||
|
- Добавил вывод отладочной инфы в процедуру
|
||||||
|
- Исправил подсветку комментариев в TCL
|
||||||
|
- Оптимизация процедур
|
||||||
|
- Добавлена подсветка и навигация по HTML. Исправлена подсветка XML
|
||||||
|
- Новая сборка
|
||||||
|
- Добавил иконку для изображений
|
||||||
|
- Добавил иконки для perl
|
||||||
|
- Исправлена подсветка и навигация по коду для Ruby
|
||||||
|
- Обновил список изменений
|
||||||
|
- Исправлено сохранение сессии в редакторе (открытие папки и файлов при следующем запуске)
|
||||||
|
- Добавлена новая секция UserSession
|
||||||
|
- Исправление ошибки при открытии файла
|
||||||
|
- Добавлена поддержка INI-файлов (подсветка
|
||||||
|
- Добавлена поддержка perl
|
||||||
|
- Добавил икогнку для файлов git
|
||||||
|
- Новая сборка
|
||||||
|
- Добавлены иконуи для ключей и сертификатов. Изменен поиск иконки (вощзвращает теерь с размером)
|
||||||
|
- Новая чборка
|
||||||
|
- Реализован двухпанельный режим работы (вертиикальное разделение)
|
||||||
|
- ДОбавил сборку в drone
|
||||||
|
- Исправлена ошибка при открытии ansible.cfg
|
||||||
|
- Добавил деактивацию кнопки 'Создать репу' если не выбран активный проект (не открыто ни одного каталога/папки)
|
||||||
|
- Добавлены команды git init и git config (зачаток). Изменен диалог клонирования репозитория (добавлена кнопка Создать репозиторий)
|
||||||
|
- Исправил ошибку git при открытии файла или каталога если репозиторий не инициализирован (нет .git каталога внутри проекта)
|
||||||
|
- Переименовал файл
|
||||||
|
- Добавил скриты сборки rpm
|
||||||
|
- Добавлено обрамление выделенного текста прии нажатии '_' в markdown
|
||||||
|
- Исправление подсветки
|
||||||
|
- Добавлена поддержка markdown (подсветка
|
||||||
|
- Обновил описание
|
||||||
|
- Новая сборка
|
||||||
|
- Исправлена ошибка с закрытием файлов в редакторе при закрытии папки
|
||||||
|
- Новая сборка
|
||||||
|
- Переделана процедура определения активного проекта. Исправлено определение ветки git. Теперь можно нормально работать в двух и более открытых проектах (каталогах/папках)
|
||||||
|
- Новая сборка
|
||||||
|
- Доделан вид диалога поиска по файлам
|
||||||
|
- Исправлен поиск имени функции
|
||||||
|
- Новая сборка
|
||||||
|
- Добавлен диалог клонирования репозитория
|
||||||
|
- Добавил разделитель
|
||||||
|
- Исправлено переключение вкладок при закрытии
|
||||||
|
- Исправлено закрытиие вкладки Git по нажатию соотв. кнопки в панели инструментов
|
||||||
|
- Добавлен пункт 'Закрыть всё'
|
||||||
|
- Новая сборка
|
||||||
|
- Исправлено соответствие открытого файла в редакторе и выделение этого файла в дереве
|
||||||
|
- Исправлено переключение отображения панели (лево/право) в без перезапуска программы.
|
||||||
|
- Украшательства интерфейса - Реакция на нажатие кнопки в панели инструментов теперь зависит от контекста
|
||||||
|
- Добавлено включение отключение отображения Меню
|
||||||
|
- Добавлено копирование текущей строки в буфер по Atl+Y
|
||||||
|
- Исправлена ошибка с отображением файловой панели
|
||||||
|
- Добавлены и исправлены функции отображения меню
|
||||||
|
- Фикс
|
||||||
|
- Добавлен параметр statusBarShow - показ строки статуса
|
||||||
|
- Добавлены переводы
|
||||||
|
- Добавлена проверка параметров вызова файл или просто строка
|
||||||
|
- Новая сборка
|
||||||
|
- Добавлен вывод сообщений об ошибке в диалоге
|
||||||
|
- Добавлено обновления списка файлов в дереве
|
||||||
|
- Добавлена процедура вывода информационного сообщения
|
||||||
|
- Добавлена команда Git::Reset (git reset _file_) на кнопке в диалоге. Для отмены 'git add'
|
||||||
|
- Добавлена кнопка Обновление в диалог работы с Git
|
||||||
|
- Исправление процедуры поиска наименования функции
|
||||||
|
- Фиксы диалога работы с Git (работа с выделенными файлами в списках)
|
||||||
|
- Фиксы и тесты работы с git
|
||||||
|
- Исправление выборанескольких файлов в диалоге Git
|
||||||
|
- Новая сборка
|
||||||
|
- Украшательства
|
||||||
|
- Новая сборка
|
||||||
|
- Исправление рег. выражения чтения файлов командой git status
|
||||||
|
- Настройки темы
|
||||||
|
- Исправлено рег. выпражение определения mime типа файла
|
||||||
|
- Ntvs
|
||||||
|
- Новая сборка
|
||||||
|
- Добавил очистку текстовых полей при добавлении файлов в коммит
|
||||||
|
- Исправрелдение Git::Commit (индексация всех файлов в проекте)
|
||||||
|
- Изменения
|
||||||
|
- Исправления глюков
|
||||||
|
- Украшательства строки статуса
|
||||||
|
- Добавлен просмотрщик изображений
|
||||||
|
- Добавил рамку кону ввода номера
|
||||||
|
- Добавлен диалог перехода по номеру строки Ctrl-G
|
||||||
|
- Добавлено определение типа файла
|
||||||
|
- Новая сборка
|
||||||
|
- Добавил удаление артефактов сборки пакета
|
||||||
|
- Новая сборка
|
||||||
|
- Добавлена подсветка имен файлов в выводе git show
|
||||||
|
- Новая сборка
|
||||||
|
- Допилдивание процедуры автоввода имен переменных
|
||||||
|
- Небольшие правки в подсказках по переменным
|
||||||
|
- Новая сборка
|
||||||
|
- Исправлена подсветка SHELL переменных а YAML файлах (ansible
|
||||||
|
- Новая сборка. Добавлена подсказка по переменным при вводе.
|
||||||
|
- Добавлено определение символа переменной
|
||||||
|
- Определение коррректного положения встроенного окна
|
||||||
|
- Новая сборка
|
||||||
|
- Добавлен вывод подсказки при вводе переменных
|
||||||
|
- Добавлены опции для включсения полджсказок по переменным и процедурам
|
||||||
|
- Новая сборка
|
||||||
|
- Исправления гуя
|
||||||
|
- Добавил диалог создания и переключения git-веток
|
||||||
|
- Создание ветки
|
||||||
|
- Новые иконки
|
||||||
|
- Косметические изменения
|
||||||
|
- Починил push
|
||||||
|
- Добавлены новые иконки
|
||||||
|
- Обработка ошибок
|
||||||
|
- Новая сборка
|
||||||
|
- Исправлена ошибка при клике на списке с файлами
|
||||||
|
- New build
|
||||||
|
- Сделал просмотр изменений из истории
|
||||||
|
- Добавлено обновление лога изменений
|
||||||
|
- Новый билд
|
||||||
|
- Исправление обновления диалога
|
||||||
|
- Добавлен перевод
|
||||||
|
- git reflog
|
||||||
|
- Добавлен интерфейс работы с Git
|
||||||
|
- Новый релиз
|
||||||
|
- Исправил ошибку если нет изменений
|
||||||
|
- Начало работ по поддержке git
|
||||||
|
- New build
|
||||||
|
- Bug fix
|
||||||
|
- Добавлен диалог поиска строки в файлах в текущем каталоге. Используется 'grep -r'.
|
||||||
|
- Добавлены настройки для системной команды поиска в фвайлах
|
||||||
|
- Добавлено рекурсивное чтение каталога при открытии. Диалог поиска теперь работает раздельно при разделении окна. Диалог навигации по функци так-же работает раздельно
|
||||||
|
- Добавлены ключевые слова для подстветки питона
|
||||||
|
- Добавлена проверка на отсутствие файла и удаление из дерева
|
||||||
|
|
||||||
03/08/2022
|
svkalinin <svk@nuk-svk.ru> Sun, 18 Sep 2022 10:46:59 +0300
|
||||||
- Added some files icon
|
- Добавлен поиск переменной в тексте после открытия файла где она указана
|
||||||
- Fix finded procedure (function) (tree click)
|
- Исправлена ошибка при запуске
|
||||||
- Fix showing position in statusbar
|
|
||||||
|
|
||||||
12/08/2022
|
Sergey Kalinin <svkalinin@samsonpost.ru> Fri, 16 Sep 2022 16:37:17 +0300
|
||||||
- Fixed comment/uncomment procedure depending on the file type
|
- Новая сборка
|
||||||
- Added About dialog
|
- Исправил сохранение открытого каталога в настройках
|
||||||
- Fixed read structure (procedure names like Proc:Name)
|
- Рефакторинг
|
||||||
|
- Переделал дилог навигации по переменным
|
||||||
|
- Добавлен еще один каталог с переменными - default
|
||||||
|
- Добавлено сохранение состояния редактора (открытые каталоги
|
||||||
|
- Изменения в диалоге поиска
|
||||||
|
- Отображение горизонтальной полосы прокрутки в зависимости от переноса строк в редакторе
|
||||||
|
- Установка фокуса на текст в редакторе при щелчке на заголовок вкладки
|
||||||
|
- Сделал перемещение курсора в такуюже позицию в тексте при разделении окна редактора
|
||||||
|
- Добавлено горизонтальное разделение окна редактора. Исправлено удаление строки по Alt+R - реперь строка удаляется полностью вместе с символами переноса. Исправлено сохранение нового файла (untitled) но всеравно как-то криво.
|
||||||
|
- Изменения по чтению и отображению переменных по файлам. Причесал диалог
|
||||||
|
|
||||||
15/08/2022
|
Sergey Kalinin <svkalinin@samsonpost.ru> Fri, 2 Sep 2022 17:01:53 +0300
|
||||||
- Added open/close braces highlight
|
- Добавил поддержку ruby
|
||||||
- Fixed GO structure reader
|
- Исправлен выход окна со списком функций за пределы экрана. Поиск и замена теперь работает. Добавлены некоторые иконки для файлов
|
||||||
|
- Начало реализации процедуры поиска и замены (поиск криво но работает)
|
||||||
|
- Исправлено закерытие вкладки по щелчку мыши. Добавлена настройка переноса строк в редакторе. Добавлены сочетания клавиш ctrl+pgup cntrl+pgdown для переключения между вкладками редактора. Добавлен диалог закрытия папки (каталога)
|
||||||
|
- Укоротил имя корневого каталога в дереве
|
||||||
|
- Добавлены ключиевые слова GO
|
||||||
|
- Исправлена подсветка ключевых слов tcl и добавлены виджеты
|
||||||
|
- Исправлена некорректная установка иконки на каталог
|
||||||
|
- Добавлены горячие клавиши для удаления слова
|
||||||
|
- Добавлены сочетания клавиш для удаления слова
|
||||||
|
|
||||||
16/08/2022
|
svkalinin <svk@nuk-svk.ru> Fri, 26 Aug 2022 12:36:14 +0300
|
||||||
- Added selection of all words in the text by clicking on the any word
|
- Изменил(а) на 'README.md'
|
||||||
|
|
||||||
17/08/2022
|
svk <svkalinin@samsonpost.ru> Fri, 26 Aug 2022 12:29:19 +0300
|
||||||
- Added "Vew Panel" menu and "Panel side" (left/right)
|
- Добавлена поддержка python. Обновлена библиотека иконок.
|
||||||
- Changed standard Tk menu on TTK::menu
|
- Исправлена установка фокуса на окно диалога GotoFunctionDialog и обратно на текст. Переделан механизм чтения структуры файла и добавлены команды для sh (bash)
|
||||||
- Added config options filesPanelPlace (left/right)
|
- Добавлены настройки темы для диалога навигации по функциям
|
||||||
- Fixed ViewFilesTree procedure with rigth variable filesPanelShow (true/false)
|
- Добавлена иконка shell (*.sh)
|
||||||
|
- Исправлено комментирование строк
|
||||||
|
- Добавлен диалог навигации по структуре (процедурам) по Ctrl+F. Исправлена ошибка при закрытии файлов (функции из дерева теперь удаляются).
|
||||||
|
- Добавил цвет фона для панели с номерами строк
|
||||||
|
|
||||||
22/08/2022
|
svkalinin <svk@nuk-svk.ru> Wed, 17 Aug 2022 21:37:06 +0300
|
||||||
- Fixed clicking on proc or func names into tree if file was closed
|
- Убрал доки по tcl
|
||||||
|
- Слегка поменял стиль оформления
|
||||||
|
|
||||||
23/08/2022
|
Sergey Kalinin <svkalinin@samsonpost.ru> Wed, 17 Aug 2022 16:52:22 +0300
|
||||||
- Added procedure and function navigation window by Ctrl+j pressed on editor
|
- Добавлен выбор расположения боковой панели
|
||||||
- Fixed correctly focused on editor text widget
|
- Добавлено выделение всех слов в тексте по двойному щелчку мышой на любом слове
|
||||||
|
- Исправлено чтение структуры GO файлов: корректное отображение в дереве функций возвращающих значения разных типов
|
||||||
|
- Добавлена подсветка скобок
|
||||||
|
- Новая сборка
|
||||||
|
- Исправлены процедуры comment/uncomment
|
||||||
|
- Изменены имена переенных
|
||||||
|
- Изменены имена переменных
|
||||||
|
- Добавлена запись номера сборки (build) в исходник
|
||||||
|
- Добавлено меню Помощь -> О программе. Добавлено окно 'О программе'
|
||||||
|
- Исправлен поиск процедуры в тексте по клику в дереве
|
||||||
|
- Исправлен поиск процедуры в тексте по клику в дереве. Исправлено отображение позиции курсора в строке статуса
|
||||||
|
- ДОбавлены иконки для некоторых типов файлов
|
||||||
|
- Добавлено отображение структуры исходника в дереве (функции (go) и процедуры (tcl))
|
||||||
|
- Добавлено кодирование изображения в base64 и вставка в редактируемый текст
|
||||||
|
- Добавлены шрифт и цвет шриыта для общего интерфейса
|
||||||
|
- Исправлено комментирование выделенного фрагмента (последняя строка) Исправлено закрытие untitled вкладок
|
||||||
|
- Исправлено комментирование выделенных строк
|
||||||
|
- Добавлена подсветка для GO
|
||||||
|
- Исправлено подключение требуемой процедуры подсветки
|
||||||
|
- Убрал вставку закрывающихся кавычек в пустой строке. Ибо пока глючит.
|
||||||
|
- Добавлен диалог сохранения файла при закрытии вкладки редактора и при выходе из программы если есть несохраненные файлы
|
||||||
|
- Исправлен рабочий каталог
|
||||||
|
- Добавлены переводы для диалога
|
||||||
|
- Исправлен скрипт сборки пакета для Debian
|
||||||
|
- Исправил скрипт сборки пакета. Добавил .gitignore
|
||||||
|
|
||||||
24/08/2022
|
svkalinin <svk@nuk-svk.ru> Thu, 21 Jul 2022 12:18:29 +0300
|
||||||
- Fixed ReadStructure procedure (added lexer)
|
- Изменил(а) на 'README.md'
|
||||||
|
|
||||||
25/08/2022
|
svk <svkalinin@samsonpost.ru> Thu, 21 Jul 2022 12:15:19 +0300
|
||||||
- Fixed focus on the editor window after clicking Escape in the function selection dialog
|
- Change readme
|
||||||
- Change color scheme for FindFunction dialog
|
- Added Dark theme
|
||||||
- Added sh icon (for shell scripts)
|
- New version of ProjMan
|
||||||
- Fixed lexers for find procedures and functions
|
- Some changes into GUI (tabs)
|
||||||
|
|
||||||
26/08/2022
|
svkalinin <banzaj28@yandex.ru> Thu, 5 Jul 2018 08:41:18 +0300
|
||||||
- Update image library (added some icons)
|
- Fixed error if file was not select
|
||||||
- Added hot keys:
|
- README.md отредактирован онлайн на Bitbucket
|
||||||
- Alt+p - Show/Hide additional panel
|
|
||||||
- Alt+w - delete word on the cursor below
|
|
||||||
- Alt+r - delete row
|
|
||||||
- Alt+b - delete text beetween line Begin and cursor
|
|
||||||
- Alt+e - delete text between cursor and line End
|
|
||||||
- Fix close braces indent
|
|
||||||
|
|
||||||
30/08/2022
|
Sergey Kalinin <banzaj28@yandex.ru> Sat, 24 Mar 2018 12:20:27 +0300
|
||||||
- Fix the clicked by the close button on a tab
|
- Rename readme
|
||||||
- Added "View"->"Editors word wrap" menu and procedure
|
|
||||||
- Added bindings "Ctrl+PgUp" and "Ctrl+PgDown" for next or prior tab selecting
|
|
||||||
- Added "Close file" dialog
|
|
||||||
|
|
||||||
01/09/2022
|
Sergey <banzaj28@yandex.ru> Sat, 24 Mar 2018 12:17:09 +0300
|
||||||
- Added search function name into Function navigation whem press key
|
- README отредактирован онлайн на Bitbucket
|
||||||
- Added find and replace dialog
|
- Added sort procedure for projects tree
|
||||||
- Fixed correct placement the Function dialog
|
- Added small toolbar into project tree
|
||||||
|
- Added insert base64 encoded image into source code
|
||||||
|
- Some GUI change
|
||||||
|
- Change messages files
|
||||||
|
- Added Menu button into tollbar and Hide/Show options into config
|
||||||
|
- Added procedure arguments into tree Change read config procedure (error fixed) Fixed error when project running
|
||||||
|
- Some Fix
|
||||||
|
- GoToNumber entry small change
|
||||||
|
- GoToLine procedure tuning
|
||||||
|
- Added GoTo line into toolbar Fixed fileinfo update when tree one click Fixed bug with opened files have extention is a upper case
|
||||||
|
- Critical fix again
|
||||||
|
|
||||||
14/09/2022
|
Sergey Kalinin <banzaj28@yandex.ru> Sat, 24 Feb 2018 18:16:01 +0300
|
||||||
- Added procedure for the horizontal split a text window
|
- Critical bug fixed with create project
|
||||||
- Fixed untitled file saved
|
- Refactoring all procedures is the Tree working
|
||||||
- Fixed Alt+R (delete row), now will are deleted row with a "\n\r" symbols
|
|
||||||
|
|
||||||
20/10/200
|
Sergey <svk@s.kalinin-nb> Sat, 24 Feb 2018 12:22:08 +0300
|
||||||
- Added Git support: add and commit changes, show git log, show each commit...
|
- Fixed Add new file if name was existing into tree
|
||||||
|
|
||||||
|
svk <banzaj28@yandex.ru> Fri, 23 Feb 2018 11:58:39 +0300
|
||||||
|
- Rename archive projman-latest
|
||||||
|
- Fixed AddToProj procedure for file browser tree Disable OpComplite procedure
|
||||||
|
- Refactoring Settigs procedure source code Some changes into messages files (localisation)
|
||||||
|
- Added option "constrainedwidth true" for ScrollableFrame
|
||||||
|
- Fix saving "Show dot files" option Fixed correctly highlightning procedure names
|
||||||
|
- Refactoring auto update file structure (tree). Now structure updated when file was saving Refactoring "Settings" dialog
|
||||||
|
- Fix "New file" proc ctrl+n hotkey
|
||||||
|
- - Fixed edit files into root node from file browser tree - Change "Delete project" dialog and procedure
|
||||||
|
- Refactoring "Add New Projects" "Project Settings" (e.t.c.) dialogs Added "Add as new project" dialog for file browser Add popup menu for file browser Fixed some highlight bug
|
||||||
|
- Fixed runing on Win7 without installation
|
||||||
|
- Added opening last active project when project run
|
||||||
|
- Fixed parsing procedure with names like ::proc::name or proc_na::me(aa) and parameters {{} {} {}}
|
||||||
|
- Put logo and icon images into source code
|
||||||
|
- Fixed AutoComplite precedure for TCL/TK-projects Added colored icon for main window Fixed "Close all" procedure if opened files from projects and file browser
|
||||||
|
- Added saving main window geometry into projman.conf file when close programm
|
||||||
|
- Merge branch 'master' of https://bitbucket.org/svk28/projman
|
||||||
|
- Delete temp file
|
||||||
|
- bitbucket-pipelines.yml отредактирован онлайн на Bitbucket
|
||||||
|
- change docker image
|
||||||
|
- add apt
|
||||||
|
- bitbucket-pipelines.yml отредактирован онлайн на Bitbucket
|
||||||
|
- Initial Bitbucket Pipelines configuration
|
||||||
|
- Add web site into Readme
|
||||||
|
- Added gray theme Fixed work with file from directory but not project.
|
||||||
|
- Some FileDialog fixes
|
||||||
|
- File Browser added
|
||||||
|
- Auto indent added for () [] braces
|
||||||
|
- Some changes
|
||||||
|
- Change hotkeys "Control+
|
||||||
|
- Add comment/uncomment selected text
|
||||||
|
- Tcl
|
||||||
|
- - Russian help files was conerting into utf-8 encode
|
||||||
|
- Change Logo and About dialog (added new homepage and git repo addresses)
|
||||||
|
- Added binding mouse button: click on notebook tab highlight opened file name in tree Change "Paste from Clipboard" function Change popup editor menu (undo
|
||||||
|
- Modules load procedure changes
|
||||||
|
- Remove some files
|
||||||
|
- GiTK running fixed
|
||||||
|
- Fixed paste text highlight Fixed setting edited flag when paste the text from buffer Change authors email and home page
|
||||||
|
|
||||||
|
Sergey Kalinin <svk@kalinin.carfix> Mon, 22 Jan 2018 17:54:18 +0300
|
||||||
|
- - Remove ctags support - Added gitk (gui for git) support
|
||||||
|
- Change version into Install.tcl script
|
||||||
|
|
||||||
|
svk <svk@l0001h.office> Fri, 12 Jan 2018 13:44:26 +0300
|
||||||
|
- README отредактирован онлайн на Bitbucket
|
||||||
|
- test.tcl deleted online with Bitbucket
|
||||||
|
|
||||||
|
Sergey Kalinin <banzaj28@gmail.com> Mon, 19 Oct 2015 14:22:09 +0300
|
||||||
|
- some bugs in install.tcl fixed
|
||||||
|
|
||||||
|
svk28 <ksv@L-AO-TEH1.DALS.local> Mon, 19 Oct 2015 13:37:21 +0300
|
||||||
|
- Initial commit with contributors
|
||||||
|
- Initial release
|
||||||
|
6
INSTALL
6
INSTALL
@@ -1,6 +0,0 @@
|
|||||||
######################################################
|
|
||||||
# Tcl/Tk Project manager 2.0
|
|
||||||
# Distributed under GNU Public License
|
|
||||||
# Author: Sergey Kalinin svk@nuk-svl.ru
|
|
||||||
# Home page: https://nuk-svk.ru
|
|
||||||
######################################################
|
|
151
README.md
151
README.md
@@ -1,27 +1,154 @@
|
|||||||
ABOUT
|
## About
|
||||||
|
|
||||||
ProjMan (aka "Tcl/Tk Project Manager") is a editor for programming in TCL/Tk (and other language).
|
ProjMan (aka "Tcl/Tk Project Manager") is a editor for programming in TCL/Tk (and other language).
|
||||||
It includes a file manager, a source editor with syntax highlighting and procedure navigation, a context-sensitive
|
It includes a file manager, a source editor with syntax highlighting and code navigation, a context-sensitive help system, Git support, and much more.
|
||||||
help system, and much more.
|
Working an Linux and Windows.
|
||||||
Working an Linux.
|
|
||||||
|
|
||||||
REQUIREMENTS
|
## Support languages
|
||||||
|
|
||||||
|
Highlightning and source code navigation:
|
||||||
|
|
||||||
|
* Tcl/Tk
|
||||||
|
* GO
|
||||||
|
* Perl
|
||||||
|
* Python
|
||||||
|
* Ruby
|
||||||
|
* Shell (BASH)
|
||||||
|
* Markdown
|
||||||
|
* YAML (Ansible support)
|
||||||
|
* Lua
|
||||||
|
|
||||||
|
Highlightning:
|
||||||
|
|
||||||
|
* HTML
|
||||||
|
* XML
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
For UNIX-like OS
|
For UNIX-like OS
|
||||||
Tcl/Tk >= 8.6 http://tcl.tk
|
Tcl/Tk >= 8.6 http://tcl.tk
|
||||||
tcllib, tklib
|
tcllib, tklib
|
||||||
|
|
||||||
CREDITS
|
## Screenshots
|
||||||
|
|
||||||
|
- Navigation the source code structure, and syntax highlighting
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
- Hints when entering names of variables and procedures
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Searching for a variable definition in ansible files
|
||||||
|
- Navigation the ansible source code structure
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Navigation the markdown source code structure
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Git dialog (commit history)
|
||||||
|
- Git dialog (changes)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Flexible interface configuration
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Find/Replace dialog
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Global searching dialog
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Getting source code
|
||||||
|
|
||||||
|
Download the source code https://git.nuk-svk.ru/svk/projman/
|
||||||
|
|
||||||
|
Or use git:
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://git.nuk-svk.ru/svk/projman.git
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build package
|
||||||
|
|
||||||
|
```
|
||||||
|
cd projman/debian/
|
||||||
|
./build-deb-projman.sh
|
||||||
|
|
||||||
|
cd projman/redhat/
|
||||||
|
./build-rpm-projman.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Use package manager for you system:
|
||||||
|
|
||||||
|
Debian ```sudo dpkg -i projman_2.0.0-alpha_amd64.deb```
|
||||||
|
|
||||||
|
Redhat ```sudo rpm -Uhv projman_2.0.0-alpha_amd64.rpm```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Running command (need full path to the each file or folder):
|
||||||
|
|
||||||
|
Open files
|
||||||
|
|
||||||
|
```
|
||||||
|
projman ~/tmp/test.tcl ~/tmp/2.go ...
|
||||||
|
```
|
||||||
|
|
||||||
|
Open folders
|
||||||
|
|
||||||
|
```
|
||||||
|
projman ~/projects/projman ...
|
||||||
|
```
|
||||||
|
|
||||||
|
Or type "projman" into terminal, Or choose the name of the program "Projman" on the Start menu.
|
||||||
|
|
||||||
|
### Keyboard shortcut
|
||||||
|
|
||||||
|
- Ctrl-N - Create new file
|
||||||
|
- Ctrl-O - Open file
|
||||||
|
- Ctrl-W - Close editor (file)
|
||||||
|
- Ctrl-K - Open folder
|
||||||
|
- Ctrl-Q - Quit from ProjMan
|
||||||
|
- Ctrl-J - Show procedures (functions) list for navigation in open editor
|
||||||
|
- Ctrl-L - Find and display files where the variable is defined, the name of which is located under the cursor in the editor
|
||||||
|
- Ctrl-F - Search text in open editor
|
||||||
|
|
||||||
|
- Ctrl-[ - Move the line (or selected lines) one position (see config tabSize=4) to the right
|
||||||
|
- Ctrl-] - Move the line (or selected lines) one position to the left
|
||||||
|
- Ctrl-, - Comment the line (or selected lines)
|
||||||
|
- Ctrl-. - Uncomment the line (or selected lines)
|
||||||
|
- Ctrl-I - Insert base64 encoded image into edited text
|
||||||
|
- Ctrl-G - Go to line dialog
|
||||||
|
- Ctrl-C - Copy selected text into buffer
|
||||||
|
- Ctrl-V - Paste text from buffer
|
||||||
|
|
||||||
|
- Alt-P - Show/Hide the file tree panel
|
||||||
|
- Alt-W - Delete the current word
|
||||||
|
- Alt-E - Delete text from current position to end of line
|
||||||
|
- Alt-B - Delete text from current position to begin of line
|
||||||
|
- Alt-R - Delete current line
|
||||||
|
- Alt-Y - Copy current line into buffer
|
||||||
|
- Alt-S - Split the edited window horizontally
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
Sergey Kalinin - author
|
||||||
svk@nuk-svk.ru
|
svk@nuk-svk.ru
|
||||||
http://nuk-svk.ru
|
http://nuk-svk.ru
|
||||||
|
|
||||||
Laurent Riesterer - VisualREGEXP and TkDIFF+ parts
|
Laurent Riesterer - VisualREGEXP and TkDIFF+ parts
|
||||||
laurent.riesterer@free.fr
|
laurent.riesterer@free.fr
|
||||||
http://laurent.riesterer.free.fr
|
http://laurent.riesterer.free.fr
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
3
TODO
3
TODO
@@ -5,8 +5,6 @@
|
|||||||
# Home page: https://nuk-svk.ru
|
# Home page: https://nuk-svk.ru
|
||||||
######################################################
|
######################################################
|
||||||
|
|
||||||
2. Подстветку текущей вкладки и элемента в дереве
|
|
||||||
|
|
||||||
--- Ansible ---
|
--- Ansible ---
|
||||||
1. Определение всех переменных в отдельный список
|
1. Определение всех переменных в отдельный список
|
||||||
- внутри файла, конструкции вида:
|
- внутри файла, конструкции вида:
|
||||||
@@ -21,3 +19,4 @@
|
|||||||
- var2.yml
|
- var2.yml
|
||||||
|
|
||||||
3. Если используется роль и переменная не найдена в плэйбуке то искать в роли (не факт что требуется)
|
3. Если используется роль и переменная не найдена в плэйбуке то искать в роли (не факт что требуется)
|
||||||
|
|
||||||
|
337
changelog-gen.tcl
Executable file
337
changelog-gen.tcl
Executable file
@@ -0,0 +1,337 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Tcl ignores the next line -*- tcl -*- \
|
||||||
|
exec tclsh "$0" -- "$@"
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
# ProjMan 2
|
||||||
|
# Distributed under GNU Public License
|
||||||
|
# Author: Sergey Kalinin svk@nuk-svk.ru
|
||||||
|
# Copyright (c) "SVK", 2024, https://nuk-svk.ru
|
||||||
|
#######################################################################
|
||||||
|
# Changelog generator from the Git commit history.
|
||||||
|
# For DEB and RPM packages
|
||||||
|
# usage a git command:
|
||||||
|
#
|
||||||
|
# git log --abbrev-commit --all --pretty='%h, %ad, %an, %ae, %s, %b'
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
# puts $tcl_platform(platform)
|
||||||
|
|
||||||
|
# Устанавливаем рабочий каталог, если его нет то создаём.
|
||||||
|
# Согласно спецификации XDG проверяем наличие переменных и каталогов
|
||||||
|
if [info exists env(XDG_CONFIG_HOME)] {
|
||||||
|
set dir(cfg) [file join $env(XDG_CONFIG_HOME) changelog-gen]
|
||||||
|
} elseif [file exists [file join $env(HOME) .config]] {
|
||||||
|
set dir(cfg) [file join $env(HOME) .config changelog-gen]
|
||||||
|
} else {
|
||||||
|
#set dir(cfg) [file join $env(HOME) .changelog-gen]
|
||||||
|
}
|
||||||
|
|
||||||
|
if {[file exists $dir(cfg)] == 0} {
|
||||||
|
file mkdir $dir(cfg)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Use whereis command for finding the git executable file.
|
||||||
|
# for unix-like operating systems
|
||||||
|
proc GetGitCommandUnix {} {
|
||||||
|
global gitCommand
|
||||||
|
set cmd "whereis -b git"
|
||||||
|
catch "exec $cmd" result
|
||||||
|
# puts $result
|
||||||
|
if {$result ne ""} {
|
||||||
|
set fields [split $result ":"]
|
||||||
|
# puts $fields
|
||||||
|
if {[lindex $fields 1] ne ""} {
|
||||||
|
# puts [lindex $fields 1]
|
||||||
|
set gitCommand "[string trim [lindex $fields 1]]"
|
||||||
|
} else {
|
||||||
|
puts "GIT command not found"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Setting the git-command for windows family OS
|
||||||
|
proc GetGitCommandWindows {} {
|
||||||
|
global gitCommand
|
||||||
|
set gitCommand "c:/git/bin/git.exe"
|
||||||
|
}
|
||||||
|
|
||||||
|
switch $tcl_platform(platform) {
|
||||||
|
unix {GetGitCommandUnix}
|
||||||
|
windows {GetGitCommandWindows}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ReadGitLog {} {
|
||||||
|
global args gitCommand lastCommitTimeStampSec
|
||||||
|
set cmd exec
|
||||||
|
set i 0
|
||||||
|
lappend cmd "$gitCommand"
|
||||||
|
lappend cmd "log"
|
||||||
|
lappend cmd "--abbrev-commit"
|
||||||
|
# Проверяем была ли запись для данного проекта если была то к времени последнего коммита прибавляем 1 сек.
|
||||||
|
# и получаем журнал после этой даты
|
||||||
|
if {[info exists lastCommitTimeStampSec] && [info exists args(--last)]} {
|
||||||
|
lappend cmd "--after='[clock format [clock add $lastCommitTimeStampSec 1 second] -format {%a, %e %b %Y %H:%M:%S %z}]'"
|
||||||
|
}
|
||||||
|
lappend cmd "--all"
|
||||||
|
lappend cmd "--pretty='%h, %ad, %an, %ae, %s, %b'"
|
||||||
|
# puts $cmd
|
||||||
|
catch $cmd pipe
|
||||||
|
# puts $pipe
|
||||||
|
set outBuffer ""
|
||||||
|
foreach line [split $pipe "\n"] {
|
||||||
|
# puts $line
|
||||||
|
# set line [string trim $line]
|
||||||
|
set line [string trim [string trim $line] {'}]
|
||||||
|
if {[regexp -nocase -all -- {^[0-9a-z]+} $line match]} {
|
||||||
|
set outBuffer $line
|
||||||
|
if {$outBuffer ne ""} {
|
||||||
|
lappend res [list $i $outBuffer]
|
||||||
|
incr i
|
||||||
|
}
|
||||||
|
# puts $outBuffer
|
||||||
|
} else {
|
||||||
|
if {$line ne ""} {
|
||||||
|
append outBuffer ". " $line
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# puts $res
|
||||||
|
if [info exists res] {
|
||||||
|
return $res
|
||||||
|
} else {
|
||||||
|
puts "\nRepository '$args(--project-name)' do not have any changes\n"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc StoreProjectInfo {timeStamp} {
|
||||||
|
global dir args
|
||||||
|
set cfgFile [open [file join $dir(cfg) $args(--project-name).conf] "w+"]
|
||||||
|
puts $cfgFile "# set args(--project-version) \"$args(--project-version)\""
|
||||||
|
puts $cfgFile "# set args(--project-release) \"$args(--project-release)\""
|
||||||
|
puts $cfgFile "set lastCommitTimeStamp \"$timeStamp\""
|
||||||
|
puts $cfgFile "set lastCommitTimeStampSec [clock scan $timeStamp]"
|
||||||
|
close $cfgFile
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
proc GenerateChangelogDEB {} {
|
||||||
|
global args
|
||||||
|
# puts "GenerateChangelogDEB"
|
||||||
|
set lastCommitTimeStamp ""
|
||||||
|
set commiter ""
|
||||||
|
set commitText ""
|
||||||
|
# ReadGitLog
|
||||||
|
set lst [lsort -integer -index 0 [ReadGitLog]]
|
||||||
|
# puts $lst
|
||||||
|
# exit
|
||||||
|
set outText ""
|
||||||
|
foreach l $lst {
|
||||||
|
set index [lindex $l 0]
|
||||||
|
set line [lindex $l 1]
|
||||||
|
# puts "$index - $line"
|
||||||
|
set record [split $line ","]
|
||||||
|
set timeStamp [string trim [lindex $record 1]]
|
||||||
|
set email [string trim [lindex $record 3]]
|
||||||
|
if {$lastCommitTimeStamp eq ""} {
|
||||||
|
set lastCommitTimeStamp [string trim [lindex $record 1]]
|
||||||
|
}
|
||||||
|
set timeStamp [clock format [clock scan $timeStamp] -format {%a, %e %b %Y %H:%M:%S %z}]
|
||||||
|
# puts "> $commiter"
|
||||||
|
if {$index == 0} {
|
||||||
|
puts "$args(--project-name) ($args(--project-version)-$args(--project-release)) stable; urgency=medium\n"
|
||||||
|
append outText "$args(--project-name) ($args(--project-version)-$args(--project-release)) stable; urgency=medium\n\n"
|
||||||
|
set commiter [lindex $record 2]
|
||||||
|
StoreProjectInfo $timeStamp
|
||||||
|
# puts "\n \[ [string trim $commiter] \]"
|
||||||
|
}
|
||||||
|
# puts ">> $commiter"
|
||||||
|
if {$commiter ne [lindex $record 2]} {
|
||||||
|
puts "\n -- [string trim $commiter] <$email> $timeStamp"
|
||||||
|
append outText "\n -- [string trim $commiter] <$email> $timeStamp\n"
|
||||||
|
puts "\n$args(--project-name) ($args(--project-version)-$args(--project-release)) stable; urgency=medium\n"
|
||||||
|
append outText "\n$args(--project-name) ($args(--project-version)-$args(--project-release)) stable; urgency=medium\n\n"
|
||||||
|
set commiter [lindex $record 2]
|
||||||
|
# puts "\n \[ [string trim $commiter] \]"
|
||||||
|
}
|
||||||
|
|
||||||
|
set commitTex [lindex $record 4]
|
||||||
|
puts " * $commitTex"
|
||||||
|
append outText " * $commitTex\n"
|
||||||
|
|
||||||
|
}
|
||||||
|
puts "\n -- [string trim $commiter] <$email> $timeStamp"
|
||||||
|
append outText "\n -- [string trim $commiter] <$email> $timeStamp\n"
|
||||||
|
return $outText
|
||||||
|
}
|
||||||
|
|
||||||
|
proc GenerateChangelogRPM {} {
|
||||||
|
puts "GenerateChangelogRPM"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
proc GenerateChangelogTXT {} {
|
||||||
|
global args
|
||||||
|
set lastCommitTimeStamp ""
|
||||||
|
set commiter ""
|
||||||
|
set commitText ""
|
||||||
|
set lst [lsort -integer -index 0 [ReadGitLog]]
|
||||||
|
puts "$args(--project-name) ($args(--project-version)-$args(--project-release)"
|
||||||
|
foreach l $lst {
|
||||||
|
set index [lindex $l 0]
|
||||||
|
set line [lindex $l 1]
|
||||||
|
# puts "$index - $line"
|
||||||
|
set record [split $line ","]
|
||||||
|
set timeStamp [string trim [lindex $record 1]]
|
||||||
|
set email [string trim [lindex $record 3]]
|
||||||
|
if {$lastCommitTimeStamp eq ""} {
|
||||||
|
set lastCommitTimeStamp [string trim [lindex $record 1]]
|
||||||
|
}
|
||||||
|
set timeStamp [clock format [clock scan $timeStamp] -format {%a, %e %b %Y %H:%M:%S %z}]
|
||||||
|
# puts "> $commiter"
|
||||||
|
if {$index == 0} {
|
||||||
|
append outText "$args(--project-name) ($args(--project-version)-$args(--project-release))\n"
|
||||||
|
set commiter [lindex $record 2]
|
||||||
|
puts "\n[string trim $commiter] <$email> $timeStamp"
|
||||||
|
append outText "\n[string trim $commiter] <$email> $timeStamp\n"
|
||||||
|
StoreProjectInfo $timeStamp
|
||||||
|
}
|
||||||
|
if {$commiter ne [lindex $record 2]} {
|
||||||
|
puts "\n[string trim $commiter] <$email> $timeStamp"
|
||||||
|
append outText "\n[string trim $commiter] <$email> $timeStamp\n"
|
||||||
|
set commiter [lindex $record 2]
|
||||||
|
}
|
||||||
|
|
||||||
|
set commitTex [lindex $record 4]
|
||||||
|
puts " - $commitTex"
|
||||||
|
append outText " - $commitTex\n"
|
||||||
|
|
||||||
|
}
|
||||||
|
return $outText
|
||||||
|
}
|
||||||
|
# puts [ReadGitLog]
|
||||||
|
|
||||||
|
proc ShowHelp {} {
|
||||||
|
puts "\nChangelog generator from the Git commit history. For DEB and RPM packages"
|
||||||
|
puts "Usage:\n"
|
||||||
|
puts "\tchangelog-gen \[options\]\n"
|
||||||
|
puts "Where options:"
|
||||||
|
puts "\t--project-name - name of project (package) "
|
||||||
|
puts "\t--project-version - package version"
|
||||||
|
puts "\t--project-release - package release name (number)"
|
||||||
|
puts "\t--deb - debian package format of changelog"
|
||||||
|
puts "\t--rpm - rpm package format of changelog"
|
||||||
|
puts "\t--txt - plain text changelog out"
|
||||||
|
puts "\t--out-file - changelog file name"
|
||||||
|
puts "\t--last - The timestamp since the last launch of this program for a given project"
|
||||||
|
}
|
||||||
|
|
||||||
|
proc StoreChangeLog {outText} {
|
||||||
|
global args
|
||||||
|
if [file exists $args(--out-file)] {
|
||||||
|
file copy -force $args(--out-file) "$args(--out-file).tmp"
|
||||||
|
|
||||||
|
set origOutFile [open "$args(--out-file).tmp" "r"]
|
||||||
|
set origText [read $origOutFile]
|
||||||
|
close $origOutFile
|
||||||
|
|
||||||
|
set outFile [open $args(--out-file) "w"]
|
||||||
|
puts $outFile $outText
|
||||||
|
puts $outFile $origText
|
||||||
|
close $outFile
|
||||||
|
|
||||||
|
if [info exists args(--last)] {
|
||||||
|
set outFile [open $args(--out-file) "r+"]
|
||||||
|
puts $outFile $outText
|
||||||
|
close $outFile
|
||||||
|
} else {
|
||||||
|
set outFile [open $args(--out-file) "w+"]
|
||||||
|
puts $outFile $outText
|
||||||
|
close $outFile
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
set outFile [open $args(--out-file) "w+"]
|
||||||
|
puts $outFile $outText
|
||||||
|
close $outFile
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set arglen [llength $argv]
|
||||||
|
set index 0
|
||||||
|
while {$index < $arglen} {
|
||||||
|
set arg [lindex $argv $index]
|
||||||
|
switch -exact $arg {
|
||||||
|
--project-name {
|
||||||
|
set args($arg) [lindex $argv [incr index]]
|
||||||
|
}
|
||||||
|
--project-version {
|
||||||
|
set args($arg) [lindex $argv [incr index]]
|
||||||
|
}
|
||||||
|
--project-release {
|
||||||
|
set args($arg) [lindex $argv [incr index]]
|
||||||
|
}
|
||||||
|
--deb {
|
||||||
|
set args($arg) true
|
||||||
|
}
|
||||||
|
--rpm {
|
||||||
|
set args($arg) true
|
||||||
|
}
|
||||||
|
--txt {
|
||||||
|
set args($arg) true
|
||||||
|
}
|
||||||
|
--out-file {
|
||||||
|
set args($arg) [lindex $argv [incr index]]
|
||||||
|
}
|
||||||
|
--last {
|
||||||
|
set args($arg) true
|
||||||
|
}
|
||||||
|
--help {
|
||||||
|
ShowHelp
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
set filename [lindex $argv $index]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
incr index
|
||||||
|
}
|
||||||
|
|
||||||
|
if ![info exists args(--project-name)] {
|
||||||
|
puts "You mast set --project-name option\n"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
if ![info exists args(--project-version)] {
|
||||||
|
puts "You mast set --project-version option\n"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
if ![info exists args(--project-release)] {
|
||||||
|
puts "You mast set --project-release option\n"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
if [file exists [file join $dir(cfg) $args(--project-name).conf]] {
|
||||||
|
source [file join $dir(cfg) $args(--project-name).conf]
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach arg [array names args] {
|
||||||
|
puts "$arg $args($arg)"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [info exists args(--deb)] {
|
||||||
|
set outText [GenerateChangelogDEB]
|
||||||
|
if [info exists args(--out-file)] {
|
||||||
|
StoreChangeLog $outText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if [info exists args(--rpm)] {
|
||||||
|
GenerateChangelogRPM
|
||||||
|
}
|
||||||
|
if [info exists args(--txt)] {
|
||||||
|
set outText [GenerateChangelogTXT]
|
||||||
|
if [info exists args(--out-file)] {
|
||||||
|
StoreChangeLog $outText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
11
debian/build-deb-projman.sh
vendored
11
debian/build-deb-projman.sh
vendored
@@ -3,14 +3,16 @@
|
|||||||
cd ../
|
cd ../
|
||||||
|
|
||||||
VERSION=$(grep Version projman.tcl | grep -oE '\b[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\b')
|
VERSION=$(grep Version projman.tcl | grep -oE '\b[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\b')
|
||||||
RELEASE=$(grep Release projman.tcl | grep -oE '\b[0-9A-Za-z]{1,3}\b')
|
RELEASE=$(grep Release projman.tcl | grep -oE '[0-9A-Za-z]+$')
|
||||||
BUILD_DATE=$(date +%d%m%Y%H%M%S)
|
BUILD_DATE=$(date +%d%m%Y%H%M%S)
|
||||||
TXT="# Build: ${BUILD_DATE}"
|
TXT="# Build: ${BUILD_DATE}"
|
||||||
|
echo "$VERSION, $RELEASE, $BUILD_DATE"
|
||||||
sed -i "/# Build:.*/c$TXT" projman.tcl
|
sed -i "/# Build:.*/c$TXT" projman.tcl
|
||||||
|
|
||||||
cp projman.tcl projman
|
cp projman.tcl projman
|
||||||
|
cp changelog-gen.tcl changelog-gen
|
||||||
|
|
||||||
|
./changelog-gen.tcl --project-name projman --project-version ${VERSION} --project-release ${RELEASE} --out-file debian/changelog --deb --last
|
||||||
|
|
||||||
sed -i "s+^set\ dir(lib)+set\ dir(lib)\ /usr/share/projman/lib ;#+g" projman
|
sed -i "s+^set\ dir(lib)+set\ dir(lib)\ /usr/share/projman/lib ;#+g" projman
|
||||||
|
|
||||||
@@ -19,8 +21,9 @@ sed -i "s+\[pwd\]+/usr/share/projman+g" projman
|
|||||||
|
|
||||||
tar czf ../projman_${VERSION}.orig.tar.gz .
|
tar czf ../projman_${VERSION}.orig.tar.gz .
|
||||||
|
|
||||||
dpkg-buildpackage
|
dpkg-buildpackage -d
|
||||||
|
|
||||||
#cp ../projman_${VERSION}-${RELEASE}_amd64.deb /files/
|
#cp ../projman_${VERSION}-${RELEASE}_amd64.deb /files/
|
||||||
|
|
||||||
rm projman
|
rm -v projman changelog-gen
|
||||||
|
rm -r -v debian/{projman,.debhelper}
|
||||||
|
339
debian/changelog
vendored
339
debian/changelog
vendored
@@ -1,5 +1,338 @@
|
|||||||
projman (2.0.0-alpha) stable; urgency=medium
|
projman (2.0.0-alpha16) stable; urgency=medium
|
||||||
|
|
||||||
* Initial release
|
* build-deb-projman.sh: добавлена генерация changelog из git log
|
||||||
|
* changelog-gen.tcl: Вывод в файл вынесен в отдельную процедуру
|
||||||
|
* changelog-gen.tcl: Добавлено создание резервной копии выходного файла. Исправлен вывод в файл.
|
||||||
|
* changelog-gen.tcl: Добавлены опции командной строки
|
||||||
|
* changelog-gen.tcl: Добавлена генерация текстового журнала изменений
|
||||||
|
* Добавлен запуск changelog-gen при сборке пакета
|
||||||
|
* Добавлено чстение журнала начиная с определенной даты
|
||||||
|
* Новая сборка
|
||||||
|
|
||||||
|
-- Sergey Kalinin <svk@nuk-svk.ru> Thu, 22 Aug 2024 13:38:52 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa15) stable; urgency=medium
|
||||||
|
|
||||||
|
* Генерация списка изменений для debian приведена к корректному виду
|
||||||
|
* Исправлен фокус при создании нового файла. #3
|
||||||
|
|
||||||
|
-- Калинин Сергей Валерьевич <svkalinin@samsonpost.ru> Wed, 17 Jul 2024 12:28:30 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa14) stable; urgency=medium
|
||||||
|
|
||||||
|
* Исправлена неправильная замена выражение при поиске
|
||||||
|
* Реализовал базовые функции генератора журнала изменений
|
||||||
|
|
||||||
|
-- svkalinin <svk@nuk-svk.ru> Thu, 27 Jun 2024 14:44:47 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa13) stable; urgency=medium
|
||||||
|
|
||||||
|
* Добавлена иконка для jinja template
|
||||||
|
* Исправил остатки слияния веток
|
||||||
|
* Исправлено некорректное определение типа файла при открытии.
|
||||||
|
|
||||||
|
-- svkalinin <svk@nuk-svk.ru> Mon, 30 Oct 2023 10:44:37 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa12) stable; urgency=medium
|
||||||
|
|
||||||
|
* Обновить .gitea/workflows/build.yml
|
||||||
|
* Gitea actions add
|
||||||
|
|
||||||
|
-- svk <svkalinin@samsonpost.ru> Thu, 27 Jul 2023 13:04:32 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa11) stable; urgency=medium
|
||||||
|
|
||||||
|
* Merge branch 'master' of https://git.nuk-svk.ru/svk/projman
|
||||||
|
* Исправил открытие файлов с разными путями (~/ ./ ../)
|
||||||
|
|
||||||
|
-- svkalinin <svk@nuk-svk.ru> Thu, 23 Feb 2023 13:46:56 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa10) stable; urgency=medium
|
||||||
|
|
||||||
|
* Добавил изображений программы
|
||||||
|
|
||||||
|
-- svk <svkalinin@samsonpost.ru> Mon, 6 Feb 2023 09:27:38 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa9) stable; urgency=medium
|
||||||
|
|
||||||
|
* Исправлена ошибка при создании нового файла.
|
||||||
|
|
||||||
|
-- svkalinin <svk@svk.home> Thu, 22 Dec 2022 19:59:05 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa8) stable; urgency=medium
|
||||||
|
|
||||||
|
* Добавил пиктограммы файлов
|
||||||
|
* Исправил процедуру Files::CloseAll ('Закрыть всё')
|
||||||
|
* Добавлена поддержка Lua
|
||||||
|
* Исправлена процедура (рас)комментирования
|
||||||
|
* Исправил ошибку при выходе в процедуре (Congig::Write)
|
||||||
|
* Добавил раскраски в ruby
|
||||||
|
* Добавлена возможность многострочных комментариев
|
||||||
|
* В Ruby lexer добавлен поиск переменных коде.
|
||||||
|
* Новая сборка
|
||||||
|
* Немного почистил. Добавлен поиск переменных по питоньим исходникам (lexer)
|
||||||
|
* Еще одно исправление подсветки для INI
|
||||||
|
* Новая сборка
|
||||||
|
* Исправлене подсветки комментариев в INI
|
||||||
|
* Новая сборка
|
||||||
|
* Изменения в подсветке для INI
|
||||||
|
* fix
|
||||||
|
* Добавил подсветку для Desktop и Spec файлов
|
||||||
|
* Добавил вывод отладочной инфы в процедуру
|
||||||
|
* Исправил подсветку комментариев в TCL
|
||||||
|
* Оптимизация процедур
|
||||||
|
* Добавлена подсветка и навигация по HTML. Исправлена подсветка XML
|
||||||
|
* Новая сборка
|
||||||
|
* Добавил иконку для изображений
|
||||||
|
* Добавил иконки для perl
|
||||||
|
* Fix
|
||||||
|
* Исправлена подсветка и навигация по коду для Ruby
|
||||||
|
* Обновил список изменений
|
||||||
|
* Исправлено сохранение сессии в редакторе (открытие папки и файлов при следующем запуске)
|
||||||
|
* Добавлена новая секция UserSession
|
||||||
|
* Исправление ошибки при открытии файла
|
||||||
|
* Добавлена поддержка INI-файлов (подсветка
|
||||||
|
* Добавлена поддержка perl
|
||||||
|
* Добавил икогнку для файлов git
|
||||||
|
* Новая сборка
|
||||||
|
* Добавлены иконуи для ключей и сертификатов. Изменен поиск иконки (вощзвращает теерь с размером)
|
||||||
|
* Новая чборка
|
||||||
|
* Реализован двухпанельный режим работы (вертиикальное разделение)
|
||||||
|
* Test
|
||||||
|
* Тесты
|
||||||
|
* TEsting drone build
|
||||||
|
* ДОбавил сборку в drone
|
||||||
|
* Исправлена ошибка при открытии ansible.cfg
|
||||||
|
* Добавил деактивацию кнопки 'Создать репу' если не выбран активный проект (не открыто ни одного каталога/папки)
|
||||||
|
* Добавлены команды git init и git config (зачаток). Изменен диалог клонирования репозитория (добавлена кнопка Создать репозиторий)
|
||||||
|
* Исправил ошибку git при открытии файла или каталога если репозиторий не инициализирован (нет .git каталога внутри проекта)
|
||||||
|
* Переименовал файл
|
||||||
|
* Добавил скриты сборки rpm
|
||||||
|
* Добавлено обрамление выделенного текста прии нажатии '_' в markdown
|
||||||
|
* Исправление подсветки
|
||||||
|
* Добавлена поддержка markdown (подсветка
|
||||||
|
* Обновил описание
|
||||||
|
* Новая сборка
|
||||||
|
* Исправлена ошибка с закрытием файлов в редакторе при закрытии папки
|
||||||
|
* Новая сборка
|
||||||
|
* Переделана процедура определения активного проекта. Исправлено определение ветки git. Теперь можно нормально работать в двух и более открытых проектах (каталогах/папках)
|
||||||
|
* Новая сборка
|
||||||
|
* Доделан вид диалога поиска по файлам
|
||||||
|
* Исправлен поиск имени функции
|
||||||
|
* Новая сборка
|
||||||
|
* Добавлен диалог клонирования репозитория
|
||||||
|
* Добавил разделитель
|
||||||
|
* Исправлено переключение вкладок при закрытии
|
||||||
|
* Исправлено закрытиие вкладки Git по нажатию соотв. кнопки в панели инструментов
|
||||||
|
* Добавлен пункт 'Закрыть всё'
|
||||||
|
* Новая сборка
|
||||||
|
* Исправлено соответствие открытого файла в редакторе и выделение этого файла в дереве
|
||||||
|
* Исправлено переключение отображения панели (лево/право) в без перезапуска программы.
|
||||||
|
* Украшательства интерфейса - Реакция на нажатие кнопки в панели инструментов теперь зависит от контекста
|
||||||
|
* Добавлено включение отключение отображения Меню
|
||||||
|
* Добавлено копирование текущей строки в буфер по Atl+Y
|
||||||
|
* Исправлена ошибка с отображением файловой панели
|
||||||
|
* Добавлены и исправлены функции отображения меню
|
||||||
|
* Фикс
|
||||||
|
* Добавлен параметр statusBarShow - показ строки статуса
|
||||||
|
* Добавлены переводы
|
||||||
|
* Добавлена проверка параметров вызова файл или просто строка
|
||||||
|
* Новая сборка
|
||||||
|
* Добавлен вывод сообщений об ошибке в диалоге
|
||||||
|
* Добавлено обновления списка файлов в дереве
|
||||||
|
* Добавлена процедура вывода информационного сообщения
|
||||||
|
* Добавлена команда Git::Reset (git reset _file_) на кнопке в диалоге. Для отмены 'git add'
|
||||||
|
* Добавлена кнопка Обновление в диалог работы с Git
|
||||||
|
* Исправление процедуры поиска наименования функции
|
||||||
|
* Фиксы диалога работы с Git (работа с выделенными файлами в списках)
|
||||||
|
* Test
|
||||||
|
* Фиксы и тесты работы с git
|
||||||
|
* test
|
||||||
|
* Исправление выборанескольких файлов в диалоге Git
|
||||||
|
* Новая сборка
|
||||||
|
* Украшательства
|
||||||
|
* Новая сборка
|
||||||
|
* Исправление рег. выражения чтения файлов командой git status
|
||||||
|
* Настройки темы
|
||||||
|
* Исправлено рег. выпражение определения mime типа файла
|
||||||
|
* Ntvs
|
||||||
|
* Новая сборка
|
||||||
|
* Добавил очистку текстовых полей при добавлении файлов в коммит
|
||||||
|
* Исправрелдение Git::Commit (индексация всех файлов в проекте)
|
||||||
|
* Изменения
|
||||||
|
* Фиксы
|
||||||
|
* Test
|
||||||
|
* Исправления глюков
|
||||||
|
* Украшательства строки статуса
|
||||||
|
* Добавлен просмотрщик изображений
|
||||||
|
* Добавил рамку кону ввода номера
|
||||||
|
* Добавлен диалог перехода по номеру строки Ctrl-G
|
||||||
|
* Добавлено определение типа файла
|
||||||
|
* Новая сборка
|
||||||
|
* Добавил удаление артефактов сборки пакета
|
||||||
|
* Новая сборка
|
||||||
|
* Fix
|
||||||
|
* Добавлена подсветка имен файлов в выводе git show
|
||||||
|
* Новая сборка
|
||||||
|
* Допилдивание процедуры автоввода имен переменных
|
||||||
|
* Небольшие правки в подсказках по переменным
|
||||||
|
* Новая сборка
|
||||||
|
* Исправлена подсветка SHELL переменных а YAML файлах (ansible
|
||||||
|
* Fix
|
||||||
|
* Новая сборка. Добавлена подсказка по переменным при вводе.
|
||||||
|
* Добавлено определение символа переменной
|
||||||
|
* fackup
|
||||||
|
* Определение коррректного положения встроенного окна
|
||||||
|
* Новая сборка
|
||||||
|
* Добавлен вывод подсказки при вводе переменных
|
||||||
|
* Добавлены опции для включсения полджсказок по переменным и процедурам
|
||||||
|
* Новая сборка
|
||||||
|
* Исправления гуя
|
||||||
|
* Fix
|
||||||
|
* Фикс
|
||||||
|
* Добавил диалог создания и переключения git-веток
|
||||||
|
* Создание ветки
|
||||||
|
* Фикс
|
||||||
|
* Новые иконки
|
||||||
|
* Косметические изменения
|
||||||
|
* Ченю push
|
||||||
|
* Ченю push
|
||||||
|
* Починил push
|
||||||
|
* Добавлены новые иконки
|
||||||
|
* Обработка ошибок
|
||||||
|
* Обработка ошибок
|
||||||
|
* Новая сборка
|
||||||
|
* Исправлена ошибка при клике на списке с файлами
|
||||||
|
* New build
|
||||||
|
* Сделал просмотр изменений из истории
|
||||||
|
* Добавлено обновление лога изменений
|
||||||
|
* Новый билд
|
||||||
|
* Исправление обновления диалога
|
||||||
|
* Fix
|
||||||
|
* Добавлен перевод
|
||||||
|
* git reflog
|
||||||
|
* Добавлен интерфейс работы с Git
|
||||||
|
* Новый релиз
|
||||||
|
* Исправил ошибку если нет изменений
|
||||||
|
* Начало работ по поддержке git
|
||||||
|
* New build
|
||||||
|
* Bug fix
|
||||||
|
* Добавлен диалог поиска строки в файлах в текущем каталоге. Используется 'grep -r'.
|
||||||
|
* Добавлены настройки для системной команды поиска в фвайлах
|
||||||
|
* Добавлено рекурсивное чтение каталога при открытии. Диалог поиска теперь работает раздельно при разделении окна. Диалог навигации по функци так-же работает раздельно
|
||||||
|
* Добавлены ключевые слова для подстветки питона
|
||||||
|
* Добавлена проверка на отсутствие файла и удаление из дерева
|
||||||
|
|
||||||
|
-- svkalinin <svk@nuk-svk.ru> Sun, 18 Sep 2022 10:46:59 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa7) stable; urgency=medium
|
||||||
|
|
||||||
|
* Добавлен поиск переменной в тексте после открытия файла где она указана
|
||||||
|
* Исправлена ошибка при запуске
|
||||||
|
|
||||||
|
-- Sergey Kalinin <svkalinin@samsonpost.ru> Fri, 16 Sep 2022 16:37:17 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa6) stable; urgency=medium
|
||||||
|
|
||||||
|
* Новая сборка
|
||||||
|
* Исправил сохранение открытого каталога в настройках
|
||||||
|
* Рефакторинг
|
||||||
|
* Переделал дилог навигации по переменным
|
||||||
|
* Исправил ошибку
|
||||||
|
* Добавлен еще один каталог с переменными - default
|
||||||
|
* Добавлено сохранение состояния редактора (открытые каталоги
|
||||||
|
* Изменения в диалоге поиска
|
||||||
|
* Изменения в диалоге поиска
|
||||||
|
* Отображение горизонтальной полосы прокрутки в зависимости от переноса строк в редакторе
|
||||||
|
* Установка фокуса на текст в редакторе при щелчке на заголовок вкладки
|
||||||
|
* Сделал перемещение курсора в такуюже позицию в тексте при разделении окна редактора
|
||||||
|
* Добавлено горизонтальное разделение окна редактора. Исправлено удаление строки по Alt+R - реперь строка удаляется полностью вместе с символами переноса. Исправлено сохранение нового файла (untitled) но всеравно как-то криво.
|
||||||
|
* Изменения по чтению и отображению переменных по файлам. Причесал диалог
|
||||||
|
|
||||||
|
-- svkalinin <svk@nuk-svk.ru> Fri, 2 Sep 2022 21:42:40 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa5) stable; urgency=medium
|
||||||
|
|
||||||
|
* Добавил поддержку ruby
|
||||||
|
* Исправлен выход окна со списком функций за пределы экрана. Поиск и замена теперь работает. Добавлены некоторые иконки для файлов
|
||||||
|
* Начало реализации процедуры поиска и замены (поиск криво но работает)
|
||||||
|
* Fix
|
||||||
|
* Исправлено закерытие вкладки по щелчку мыши. Добавлена настройка переноса строк в редакторе. Добавлены сочетания клавиш ctrl+pgup cntrl+pgdown для переключения между вкладками редактора. Добавлен диалог закрытия папки (каталога)
|
||||||
|
* Укоротил имя корневого каталога в дереве
|
||||||
|
* Добавлены ключиевые слова GO
|
||||||
|
* Исправлена подсветка ключевых слов tcl и добавлены виджеты
|
||||||
|
* Исправлена некорректная установка иконки на каталог
|
||||||
|
* Добавлены горячие клавиши для удаления слова
|
||||||
|
* Добавлены сочетания клавиш для удаления слова
|
||||||
|
|
||||||
|
-- svkalinin <svk@nuk-svk.ru> Fri, 26 Aug 2022 12:36:14 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa4) stable; urgency=medium
|
||||||
|
|
||||||
|
* Добавлена поддержка python. Обновлена библиотека иконок.
|
||||||
|
* Исправлена установка фокуса на окно диалога GotoFunctionDialog и обратно на текст. Переделан механизм чтения структуры файла и добавлены команды для sh (bash)
|
||||||
|
* Добавлены настройки темы для диалога навигации по функциям
|
||||||
|
* Добавлена иконка shell (*.sh)
|
||||||
|
* Исправлено комментирование строк
|
||||||
|
* Добавлен диалог навигации по структуре (процедурам) по Ctrl+F. Исправлена ошибка при закрытии файлов (функции из дерева теперь удаляются).
|
||||||
|
* Добавил цвет фона для панели с номерами строк
|
||||||
|
|
||||||
|
-- svkalinin <svk@nuk-svk.ru> Wed, 17 Aug 2022 21:37:06 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa3) stable; urgency=medium
|
||||||
|
|
||||||
|
* Убрал доки по tcl
|
||||||
|
* Слегка поменял стиль оформления
|
||||||
|
|
||||||
|
-- Sergey Kalinin <svkalinin@samsonpost.ru> Wed, 17 Aug 2022 16:52:22 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa2) stable; urgency=medium
|
||||||
|
|
||||||
|
* Добавлен выбор расположения боковой панели
|
||||||
|
* Добавлено выделение всех слов в тексте по двойному щелчку мышой на любом слове
|
||||||
|
* Исправлено чтение структуры GO файлов: корректное отображение в дереве функций возвращающих значения разных типов
|
||||||
|
* Добавлена подсветка скобок
|
||||||
|
* Новая сборка
|
||||||
|
* Исправлены процедуры comment/uncomment
|
||||||
|
* Изменены имена переенных
|
||||||
|
* Изменены имена переменных
|
||||||
|
* Добавлена запись номера сборки (build) в исходник
|
||||||
|
* Добавлено меню Помощь -> О программе. Добавлено окно 'О программе'
|
||||||
|
* Исправлен поиск процедуры в тексте по клику в дереве
|
||||||
|
* Исправлен поиск процедуры в тексте по клику в дереве. Исправлено отображение позиции курсора в строке статуса
|
||||||
|
* ДОбавлены иконки для некоторых типов файлов
|
||||||
|
* Добавлено отображение структуры исходника в дереве (функции (go) и процедуры (tcl))
|
||||||
|
* Добавлено кодирование изображения в base64 и вставка в редактируемый текст
|
||||||
|
* Добавлены шрифт и цвет шриыта для общего интерфейса
|
||||||
|
* Исправлено комментирование выделенного фрагмента (последняя строка) Исправлено закрытие untitled вкладок
|
||||||
|
* Исправлено комментирование выделенных строк
|
||||||
|
* Добавлена подсветка для GO
|
||||||
|
* Добавлена подстка для GO
|
||||||
|
* Исправлено подключение требуемой процедуры подсветки
|
||||||
|
* Убрал вставку закрывающихся кавычек в пустой строке. Ибо пока глючит.
|
||||||
|
* Добавлен диалог сохранения файла при закрытии вкладки редактора и при выходе из программы если есть несохраненные файлы
|
||||||
|
* Исправлен рабочий каталог
|
||||||
|
* Добавлены переводы для диалога
|
||||||
|
* Исправлен скрипт сборки пакета для Debian
|
||||||
|
* Убрал лишнее
|
||||||
|
* Исправил скрипт сборки пакета. Добавил .gitignore
|
||||||
|
* Исправил скрипт сборки пакета. Добавил .gitignore
|
||||||
|
|
||||||
|
-- svkalinin <svk@nuk-svk.ru> Thu, 21 Jul 2022 12:18:29 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa1) stable; urgency=medium
|
||||||
|
|
||||||
|
* Изменил(а) на 'README.md'
|
||||||
|
|
||||||
|
-- svk <svkalinin@samsonpost.ru> Thu, 21 Jul 2022 12:15:19 +0300
|
||||||
|
|
||||||
|
projman (2.0.0-alfa0) stable; urgency=medium
|
||||||
|
|
||||||
|
* Change readme
|
||||||
|
* Added Dark theme
|
||||||
|
* New version of ProjMan
|
||||||
|
* New version of ProjMan
|
||||||
|
* Some changes into GUI (tabs)
|
||||||
|
|
||||||
|
-- svkalinin <banzaj28@yandex.ru> Thu, 5 Jul 2018 08:41:18 +0300
|
||||||
|
|
||||||
-- Sergey Kalinin <svk@nuk-svk.ru> Wed, 20 Jul 2022 16:56:31 +0300
|
|
||||||
|
5
debian/install
vendored
5
debian/install
vendored
@@ -1,7 +1,8 @@
|
|||||||
projman /usr/bin/
|
projman /usr/bin/
|
||||||
|
changelog-gen /usr/bin/
|
||||||
lib/*.tcl /usr/share/projman/lib
|
lib/*.tcl /usr/share/projman/lib
|
||||||
lib/msgs/* /usr/share/projman/lib/msgs
|
lib/msgs/* /usr/share/projman/lib/msgs
|
||||||
theme /usr/share/projman/
|
theme /usr/share/projman/
|
||||||
README.md /usr/share/doc/projman
|
README.md /usr/share/doc/projman
|
||||||
debian/projman.desktop /usr/share/applications
|
projman.desktop /usr/share/applications
|
||||||
projman-48.png /usr/share/pixmaps
|
projman.png /usr/share/pixmaps
|
||||||
|
@@ -23,16 +23,18 @@ if [info exists env(LANG)] {
|
|||||||
|
|
||||||
set ::configDefault "\[General\]
|
set ::configDefault "\[General\]
|
||||||
cfgModifyDate=''
|
cfgModifyDate=''
|
||||||
opened=
|
|
||||||
editedFiles=
|
|
||||||
searchCommand=/usr/bin/grep
|
searchCommand=/usr/bin/grep
|
||||||
searchCommandOptions=-r -n -H
|
searchCommandOptions=-r -n -H
|
||||||
gitCommand=/usr/bin/git
|
gitCommand=/usr/bin/git
|
||||||
|
# must return a mime type of file
|
||||||
|
fileTypeCommand=/usr/bin/file
|
||||||
|
fileTypeCommandOptions=-i -b
|
||||||
\[GUI\]
|
\[GUI\]
|
||||||
locale=$locale
|
locale=$locale
|
||||||
theme=dark
|
theme=dark
|
||||||
toolBarShow=true
|
toolBarShow=true
|
||||||
menuShow=true
|
menuShow=true
|
||||||
|
statusBarShow=true
|
||||||
filesPanelShow=true
|
filesPanelShow=true
|
||||||
filesPanelPlace=left
|
filesPanelPlace=left
|
||||||
geometry=1024x768
|
geometry=1024x768
|
||||||
@@ -56,6 +58,12 @@ selectBorder=0
|
|||||||
editorWrap=word
|
editorWrap=word
|
||||||
lineNumberShow=true
|
lineNumberShow=true
|
||||||
tabSize=4
|
tabSize=4
|
||||||
|
procedureHelper=false
|
||||||
|
variableHelper=true
|
||||||
|
multilineComments=true
|
||||||
|
\[UserSession\]
|
||||||
|
opened=
|
||||||
|
editedFiles=
|
||||||
"
|
"
|
||||||
proc Config::create {dir} {
|
proc Config::create {dir} {
|
||||||
set cfgFile [open [file join $dir projman.ini] "w+"]
|
set cfgFile [open [file join $dir projman.ini] "w+"]
|
||||||
@@ -75,7 +83,7 @@ proc Config::read {dir} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc Config::write {dir} {
|
proc Config::write {dir} {
|
||||||
global activeProject
|
global activeProject editors
|
||||||
set cfgFile [ini::open [file join $dir projman.ini] "w"]
|
set cfgFile [ini::open [file join $dir projman.ini] "w"]
|
||||||
foreach section [array names ::cfgINIsections] {
|
foreach section [array names ::cfgINIsections] {
|
||||||
foreach key $::cfgINIsections($section) {
|
foreach key $::cfgINIsections($section) {
|
||||||
@@ -85,14 +93,30 @@ proc Config::write {dir} {
|
|||||||
set systemTime [clock seconds]
|
set systemTime [clock seconds]
|
||||||
# Set a config modify time (i don't know why =))'
|
# Set a config modify time (i don't know why =))'
|
||||||
ini::set $cfgFile "General" cfgModifyDate [clock format $systemTime -format "%D %H:%M:%S"]
|
ini::set $cfgFile "General" cfgModifyDate [clock format $systemTime -format "%D %H:%M:%S"]
|
||||||
|
ini::set $cfgFile "UserSession" editedFiles ""
|
||||||
|
|
||||||
# Save an top level window geometry into config
|
# Save an top level window geometry into config
|
||||||
ini::set $cfgFile "GUI" geometry [wm geometry .]
|
ini::set $cfgFile "GUI" geometry [wm geometry .]
|
||||||
if {[info exists activeProject] !=0 && $activeProject ne ""} {
|
if {[info exists activeProject] !=0 && $activeProject ne ""} {
|
||||||
ini::set $cfgFile "General" opened $activeProject
|
ini::set $cfgFile "UserSession" opened $activeProject
|
||||||
|
# Добавим пути к открытым в редакторе файлам в переменную
|
||||||
|
if [info exists editors] {
|
||||||
|
foreach i [dict keys $editors] {
|
||||||
|
# puts [dict get $editors $i]
|
||||||
|
if [dict exists $editors $i fileFullPath] {
|
||||||
|
lappend edited [dict get $editors $i fileFullPath]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if [info exists edited] {
|
||||||
|
ini::set $cfgFile "UserSession" editedFiles $edited
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ini::set $cfgFile "General" opened ""
|
ini::set $cfgFile "UserSession" opened ""
|
||||||
|
ini::set $cfgFile "UserSession" editedFiles ""
|
||||||
}
|
}
|
||||||
|
# puts $editors
|
||||||
|
|
||||||
ini::commit $cfgFile
|
ini::commit $cfgFile
|
||||||
ini::close $cfgFile
|
ini::close $cfgFile
|
||||||
}
|
}
|
||||||
|
731
lib/editor.tcl
731
lib/editor.tcl
@@ -20,30 +20,55 @@ namespace eval Editor {
|
|||||||
|
|
||||||
# Comment one string or selected string
|
# Comment one string or selected string
|
||||||
proc Comment {txt fileType} {
|
proc Comment {txt fileType} {
|
||||||
global lexers
|
global lexers cfgVariables
|
||||||
set selIndex [$txt tag ranges sel]
|
set selIndex [$txt tag ranges sel]
|
||||||
set pos [$txt index insert]
|
set pos [$txt index insert]
|
||||||
set lineNum [lindex [split $pos "."] 0]
|
set lineNum [lindex [split $pos "."] 0]
|
||||||
set PosNum [lindex [split $pos "."] 1]
|
# set posNum [lindex [split $pos "."] 1]
|
||||||
|
set useMultiLine false
|
||||||
|
|
||||||
if [dict exists $lexers $fileType commentSymbol] {
|
if [dict exists $lexers $fileType commentSymbol] {
|
||||||
set symbol [dict get $lexers $fileType commentSymbol]
|
set symbol [dict get $lexers $fileType commentSymbol]
|
||||||
} else {
|
} else {
|
||||||
set symbol "#"
|
set symbol "#"
|
||||||
}
|
}
|
||||||
puts "Select : $selIndex"
|
if {[dict exists $lexers $fileType commentMultilineSymbolBegin] == 1 && $cfgVariables(multilineComments) eq "true"} {
|
||||||
|
set symbolBegin [dict get $lexers $fileType commentMultilineSymbolBegin]
|
||||||
|
} else {
|
||||||
|
set symbolBegin ""
|
||||||
|
}
|
||||||
|
if {[dict exists $lexers $fileType commentMultilineSymbolEnd] == 1 && $cfgVariables(multilineComments) eq "true"} {
|
||||||
|
set symbolEnd [dict get $lexers $fileType commentMultilineSymbolEnd]
|
||||||
|
} else {
|
||||||
|
set symbolEnd ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# puts "Select : $selIndex"
|
||||||
if {$selIndex != ""} {
|
if {$selIndex != ""} {
|
||||||
set lineBegin [lindex [split [lindex $selIndex 0] "."] 0]
|
set lineBegin [lindex [split [lindex $selIndex 0] "."] 0]
|
||||||
set lineEnd [lindex [split [lindex $selIndex 1] "."] 0]
|
set lineEnd [lindex [split [lindex $selIndex 1] "."] 0]
|
||||||
|
# Если выделенно больше одной строки то включаем многострочный комментарий
|
||||||
|
if {$lineBegin < $lineEnd} {
|
||||||
|
set useMultiLine true
|
||||||
|
}
|
||||||
set posBegin [lindex [split [lindex $selIndex 1] "."] 0]
|
set posBegin [lindex [split [lindex $selIndex 1] "."] 0]
|
||||||
set posEnd [lindex [split [lindex $selIndex 1] "."] 1]
|
set posEnd [lindex [split [lindex $selIndex 1] "."] 1]
|
||||||
if {$lineEnd == $lineNum && $posEnd == 0} {
|
if {$lineEnd == $lineNum && $posEnd == 0} {
|
||||||
set lineEnd [expr $lineEnd - 1]
|
set lineEnd [expr $lineEnd - 1]
|
||||||
}
|
}
|
||||||
for {set i $lineBegin} {$i <=$lineEnd} {incr i} {
|
if {$symbolEnd ne ""} {
|
||||||
#$txt insert $i.0 "# "
|
$txt insert $lineEnd.end "\n$symbolEnd"
|
||||||
regexp -nocase -indices -- {^(\s*)(.*?)} [$txt get $i.0 $i.end] match v1 v2
|
set lineEnd [expr $lineEnd + 2]
|
||||||
$txt insert $i.[lindex [split $v2] 0] "$symbol "
|
}
|
||||||
|
if {$symbolBegin ne ""} {
|
||||||
|
$txt insert $lineBegin.0 "$symbolBegin\n"
|
||||||
|
}
|
||||||
|
if {$symbolBegin eq "" && $symbolEnd eq ""} {
|
||||||
|
for {set i $lineBegin} {$i <= $lineEnd} {incr i} {
|
||||||
|
#$txt insert $i.0 "# "
|
||||||
|
regexp -nocase -indices -- {^(\s*)(.*?)} [$txt get $i.0 $i.end] match v1 v2
|
||||||
|
$txt insert $i.[lindex [split $v2] 0] "$symbol "
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$txt tag add comments $lineBegin.0 $lineEnd.end
|
$txt tag add comments $lineBegin.0 $lineEnd.end
|
||||||
$txt tag raise comments
|
$txt tag raise comments
|
||||||
@@ -62,14 +87,14 @@ namespace eval Editor {
|
|||||||
set lineNum [lindex [split $pos "."] 0]
|
set lineNum [lindex [split $pos "."] 0]
|
||||||
set posNum [lindex [split $pos "."] 1]
|
set posNum [lindex [split $pos "."] 1]
|
||||||
|
|
||||||
if {[info procs GetComment:$fileType] ne ""} {
|
# if {[info procs GetComment:$fileType] ne ""} {
|
||||||
set commentProcedure "GetComment:$fileType"
|
# set commentProcedure "GetComment"
|
||||||
} else {
|
# } else {
|
||||||
set commentProcedure {GetComment:Unknown}
|
# set commentProcedure {GetComment:Unknown}
|
||||||
}
|
# }
|
||||||
# set commentProcedure "GetComment"
|
set commentProcedure "GetComment"
|
||||||
|
|
||||||
# puts "$fileType, $commentProcedure"
|
puts "$fileType, $commentProcedure"
|
||||||
if {$selIndex != ""} {
|
if {$selIndex != ""} {
|
||||||
set lineBegin [lindex [split [lindex $selIndex 0] "."] 0]
|
set lineBegin [lindex [split [lindex $selIndex 0] "."] 0]
|
||||||
set lineEnd [lindex [split [lindex $selIndex 1] "."] 0]
|
set lineEnd [lindex [split [lindex $selIndex 1] "."] 0]
|
||||||
@@ -80,7 +105,7 @@ namespace eval Editor {
|
|||||||
}
|
}
|
||||||
for {set i $lineBegin} {$i <=$lineEnd} {incr i} {
|
for {set i $lineBegin} {$i <=$lineEnd} {incr i} {
|
||||||
set str [$txt get $i.0 $i.end]
|
set str [$txt get $i.0 $i.end]
|
||||||
set commentSymbolIndex [$commentProcedure $str]
|
set commentSymbolIndex [$commentProcedure $fileType $str]
|
||||||
if {$commentSymbolIndex != 0} {
|
if {$commentSymbolIndex != 0} {
|
||||||
$txt delete $i.[lindex $commentSymbolIndex 0] $i.[lindex $commentSymbolIndex 1]
|
$txt delete $i.[lindex $commentSymbolIndex 0] $i.[lindex $commentSymbolIndex 1]
|
||||||
}
|
}
|
||||||
@@ -91,7 +116,7 @@ namespace eval Editor {
|
|||||||
} else {
|
} else {
|
||||||
set posNum [lindex [split $pos "."] 1]
|
set posNum [lindex [split $pos "."] 1]
|
||||||
set str [$txt get $lineNum.0 $lineNum.end]
|
set str [$txt get $lineNum.0 $lineNum.end]
|
||||||
set commentSymbolIndex [$commentProcedure $str]
|
set commentSymbolIndex [$commentProcedure $fileType $str]
|
||||||
if {$commentSymbolIndex != 0} {
|
if {$commentSymbolIndex != 0} {
|
||||||
$txt delete $lineNum.[lindex $commentSymbolIndex 0] $lineNum.[lindex $commentSymbolIndex 1]
|
$txt delete $lineNum.[lindex $commentSymbolIndex 0] $lineNum.[lindex $commentSymbolIndex 1]
|
||||||
}
|
}
|
||||||
@@ -101,36 +126,47 @@ namespace eval Editor {
|
|||||||
}
|
}
|
||||||
proc GetComment {fileType str} {
|
proc GetComment {fileType str} {
|
||||||
global lexers
|
global lexers
|
||||||
puts [dict get $lexers $fileType commentSymbol]
|
# puts [dict get $lexers $fileType commentSymbol]
|
||||||
if {[dict exists $lexers $fileType commentSymbol] == 0} {
|
if [dict exists $lexers $fileType commentSymbol] {
|
||||||
return
|
# return
|
||||||
|
set symbol [dict get $lexers $fileType commentSymbol]
|
||||||
|
} else {
|
||||||
|
set symbol "#"
|
||||||
}
|
}
|
||||||
|
regsub -all {\{} $str "\\{" str
|
||||||
|
regsub -all {\}} $str "\\}" str
|
||||||
|
regsub -all {\[} $str {\\[} str
|
||||||
|
regsub -all {\]} $str {\\]} str
|
||||||
|
|
||||||
if {[regexp -nocase -indices -- {(^| )([dict get $lexers $fileType commentSymbol]\s)(.+)} $str match v1 v2 v3]} {
|
set cmd "regexp -nocase -indices -- {(^|\s+)\\s*($symbol\\s*)(.*)} {$str} match v1 v2 v3"
|
||||||
puts "$match, $v1, $v2, $v3"
|
|
||||||
|
puts $cmd
|
||||||
|
# puts [eval $cmd]
|
||||||
|
if [eval $cmd] {
|
||||||
|
puts "$match, $v2, $v3"
|
||||||
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
||||||
} else {
|
} else {
|
||||||
puts "FUCK"
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc GetComment:TCL {str} {
|
# proc GetComment:TCL {str} {
|
||||||
if {[regexp -nocase -indices -- {(^| )(#\s)(.+)} $str match v1 v2 v3]} {
|
# if {[regexp -nocase -indices -- {(^| )(#\s)(.+)} $str match v1 v2 v3]} {
|
||||||
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
# return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
||||||
} else {
|
# } else {
|
||||||
return 0
|
# return 0
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
proc GetComment:GO {str} {
|
# proc GetComment:GO {str} {
|
||||||
# puts ">>>>>>>$str"
|
# # puts ">>>>>>>$str"
|
||||||
if {[regexp -nocase -indices -- {(^| |\t)(//\s)(.+)} $str match v1 v2 v3]} {
|
# if {[regexp -nocase -indices -- {(^| |\t)(//\s)(.+)} $str match v1 v2 v3]} {
|
||||||
# puts ">>>> $match $v1 $v2 $v3"
|
# # puts ">>>> $match $v1 $v2 $v3"
|
||||||
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
# return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
||||||
} else {
|
# } else {
|
||||||
return 0
|
# return 0
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
|
|
||||||
proc GetComment:Unknown {str} {
|
proc GetComment:Unknown {str} {
|
||||||
if {[regexp -nocase -indices -- {(^| )(#\s)(.+)} $str match v1 v2 v3]} {
|
if {[regexp -nocase -indices -- {(^| )(#\s)(.+)} $str match v1 v2 v3]} {
|
||||||
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
||||||
@@ -339,19 +375,12 @@ namespace eval Editor {
|
|||||||
|
|
||||||
proc SelectionHighlight {txt} {
|
proc SelectionHighlight {txt} {
|
||||||
variable selectionText
|
variable selectionText
|
||||||
|
|
||||||
$txt tag remove lightSelected 1.0 end
|
$txt tag remove lightSelected 1.0 end
|
||||||
|
|
||||||
set selBegin [lindex [$txt tag ranges sel] 0]
|
set selBegin [lindex [$txt tag ranges sel] 0]
|
||||||
set selEnd [lindex [$txt tag ranges sel] 1]
|
set selEnd [lindex [$txt tag ranges sel] 1]
|
||||||
if {$selBegin ne "" && $selEnd ne ""} {
|
if {$selBegin ne "" && $selEnd ne ""} {
|
||||||
set selectionText [$txt get $selBegin $selEnd]
|
set selectionText [$txt get $selBegin $selEnd]
|
||||||
# set selBeginRow [lindex [split $selBegin "."] 1]
|
|
||||||
# set selEndRow [lindex [split $selEnd "."] 1]
|
|
||||||
# puts "$selBegin, $selBeginRow; $selEnd, $selEndRow"
|
|
||||||
# set symNumbers [expr $selEndRow - $selBeginRow]
|
|
||||||
set symNumbers [expr [lindex [split $selEnd "."] 1] - [lindex [split $selBegin "."] 1]]
|
set symNumbers [expr [lindex [split $selEnd "."] 1] - [lindex [split $selBegin "."] 1]]
|
||||||
# puts "Selection $selectionText"
|
|
||||||
if [string match "-*" $selectionText] {
|
if [string match "-*" $selectionText] {
|
||||||
set selectionText "\$selectionText"
|
set selectionText "\$selectionText"
|
||||||
}
|
}
|
||||||
@@ -360,35 +389,331 @@ namespace eval Editor {
|
|||||||
set selFindLine [lindex [split $ind "."] 0]
|
set selFindLine [lindex [split $ind "."] 0]
|
||||||
set selFindRow [lindex [split $ind "."] 1]
|
set selFindRow [lindex [split $ind "."] 1]
|
||||||
set endInd "$selFindLine.[expr $selFindRow + $symNumbers]"
|
set endInd "$selFindLine.[expr $selFindRow + $symNumbers]"
|
||||||
# puts "$ind; $symNumbers; $selFindLine, $selFindRow; $endInd "
|
|
||||||
$txt tag add lightSelected $ind $endInd
|
$txt tag add lightSelected $ind $endInd
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
proc VarHelperKey { widget K A } {
|
||||||
|
set win .varhelper
|
||||||
|
# if { [winfo exists $win] == 0 } { return }
|
||||||
|
set ind [$win.lBox curselection]
|
||||||
|
puts ">>>>>>>>>>>> VarHelperBind <<<<<<<<<<<<<<<<"
|
||||||
|
|
||||||
proc ReleaseKey {k txt} {
|
switch -- $K {
|
||||||
set pos [$txt index insert]
|
Prior {
|
||||||
SearchBrackets $txt
|
set up [expr [$win.lBox index active] - [$win.lBox cget -height]]
|
||||||
switch $k {
|
if { $up < 0 } { set up 0 }
|
||||||
Return {
|
$win.lBox activate $up
|
||||||
set lineNum [lindex [split $pos "."] 0]
|
$win.lBox selection clear 0 end
|
||||||
set posNum [lindex [split $pos "."] 1]
|
$win.lBox selection set $up $up
|
||||||
regexp {^(\s*)} [$txt get [expr $lineNum - 1].0 [expr $lineNum - 1].end] -> spaceStart
|
}
|
||||||
# puts "$pos, $lineNum, $posNum, >$spaceStart<"
|
Next {
|
||||||
$txt insert insert $spaceStart
|
set down [expr [$win.lBox index active] + [$win.lBox cget -height]]
|
||||||
Editor::Indent $txt
|
if { $down >= [$win.lBox index end] } { set down end }
|
||||||
|
$win.lBox activate $down
|
||||||
|
$win.lBox selection clear 0 end
|
||||||
|
$win.lBox selection set $down $down
|
||||||
|
}
|
||||||
|
Up {
|
||||||
|
set up [expr [$win.lBox index active] - 1]
|
||||||
|
if { $up < 0 } { set up 0 }
|
||||||
|
$win.lBox activate $up
|
||||||
|
$win.lBox selection clear 0 end
|
||||||
|
$win.lBox selection set $up $up
|
||||||
|
}
|
||||||
|
Down {
|
||||||
|
set down [expr [$win.lBox index active] + 1]
|
||||||
|
if { $down >= [$win.lBox index end] } { set down end }
|
||||||
|
$win.lBox activate $down
|
||||||
|
$win.lBox selection clear 0 end
|
||||||
|
$win.lBox selection set $down $down
|
||||||
|
}
|
||||||
|
Return {
|
||||||
|
$widget delete "insert - 1 chars wordstart" "insert wordend - 1 chars"
|
||||||
|
$widget insert "insert" [$win.lBox get [$win.lBox curselection]]
|
||||||
|
# eval [bind VarHelperBind <Escape>]
|
||||||
|
Editor::VarHelperEscape $widget
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
$widget insert "insert" $A
|
||||||
|
# eval [bind VarHelperBind <Escape>]
|
||||||
|
Editor::VarHelperEscape $widget
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} ;# proc auto_completition_key
|
||||||
|
proc VarHelperEscape {w} {
|
||||||
|
puts ">>>>>>>>>>>> VarHelperEscape <<<<<<<<<<<<<<<<"
|
||||||
|
# bindtags $w [list [winfo parent $w] $w Text sysAfter all]
|
||||||
|
bindtags $w [list [winfo toplevel $w] $w Ctext sysAfter all]
|
||||||
|
catch { destroy .varhelper }
|
||||||
|
puts [bindtags $w]
|
||||||
|
puts [bind $w]
|
||||||
|
|
||||||
|
}
|
||||||
|
proc VarHelper {x y w word wordType} {
|
||||||
|
global editors lexers variables
|
||||||
|
variable txt
|
||||||
|
variable win
|
||||||
|
# set txt $w.frmText.t
|
||||||
|
# блокировка открытия диалога если запущен другой
|
||||||
|
set txt $w
|
||||||
|
# set win .varhelper
|
||||||
|
puts "$x $y $w $word $wordType"
|
||||||
|
set fileType [dict get $editors $txt fileType]
|
||||||
|
|
||||||
|
if {[dict exists $editors $txt variableList] != 0} {
|
||||||
|
set varList [dict get $editors $txt variableList]
|
||||||
|
# puts $varList
|
||||||
|
}
|
||||||
|
if {[dict exists $editors $txt procedureList] != 0} {
|
||||||
|
set procList [dict get $editors $txt procedureList]
|
||||||
|
}
|
||||||
|
# puts $procList
|
||||||
|
# puts ">>>>>>>[dict get $lexers $fileType commands]"
|
||||||
|
if {[dict exists $lexers $fileType commands] !=0} {
|
||||||
|
foreach i [dict get $lexers $fileType commands] {
|
||||||
|
# puts $i
|
||||||
|
lappend procList $i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# if {[dict exists $editors $txt variableList] == 0 && [dict exists $editors $txt procedureList] == 0} {
|
||||||
|
# return
|
||||||
|
# }
|
||||||
|
set findedVars ""
|
||||||
|
switch -- $wordType {
|
||||||
|
vars {
|
||||||
|
foreach i [lsearch -nocase -all $varList $word*] {
|
||||||
|
# puts [lindex $varList $i]
|
||||||
|
set item [lindex [lindex $varList $i] 0]
|
||||||
|
# puts $item
|
||||||
|
if {[lsearch $findedVars $item] eq "-1"} {
|
||||||
|
lappend findedVars $item
|
||||||
|
# puts $item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
procedure {
|
||||||
|
foreach i [lsearch -nocase -all $procList $word*] {
|
||||||
|
# puts [lindex $varList $i]
|
||||||
|
set item [lindex [lindex $procList $i] 0]
|
||||||
|
# puts $item
|
||||||
|
if {[lsearch $findedVars $item] eq "-1"} {
|
||||||
|
lappend findedVars $item
|
||||||
|
# puts $item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
foreach i [lsearch -nocase -all $varList $word*] {
|
||||||
|
# puts [lindex $varList $i]
|
||||||
|
set item [lindex [lindex $varList $i] 0]
|
||||||
|
# puts $item
|
||||||
|
if {[lsearch $findedVars $item] eq "-1"} {
|
||||||
|
lappend findedVars $item
|
||||||
|
# puts $item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach i [lsearch -nocase -all $procList $word*] {
|
||||||
|
# puts [lindex $varList $i]
|
||||||
|
set item [lindex [lindex $procList $i] 0]
|
||||||
|
# puts $item
|
||||||
|
if {[lsearch $findedVars $item] eq "-1"} {
|
||||||
|
lappend findedVars $item
|
||||||
|
# puts $item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# unset item
|
||||||
|
# bindtags $txt [list VarHelperBind [winfo toplevel $txt] $txt Ctext sysAfter all]
|
||||||
|
# bindtags $txt.t [list VarHelperBind [winfo parent $txt.t] $txt.t Text sysAfter all]
|
||||||
|
# bind VarHelperBind <Escape> "Editor::VarHelperEscape $txt.t; break"
|
||||||
|
# # bindtags $txt.t {[list [winfo parent $txt.t] $txt.t Text sysAfter all]};
|
||||||
|
# # bindtags $txt {[list [winfo toplevel $txt] $txt Ctext sysAfter all]};
|
||||||
|
# # catch { destroy .varhelper }"
|
||||||
|
# bind VarHelperBind <Key> {Editor::VarHelperKey %W %K %A; break}
|
||||||
|
#
|
||||||
|
if {$findedVars eq ""} {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
# puts $findedVars
|
||||||
|
VarHelperDialog $x $y $w $word $findedVars
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
proc VarHelperDialog {x y w word findedVars} {
|
||||||
|
global editors lexers variables
|
||||||
|
variable txt
|
||||||
|
variable win
|
||||||
|
# puts ">>>>>>>>>>>>>$x $y $w $word $findedVars"
|
||||||
|
# set txt $w.frmText.t
|
||||||
|
# блокировка открытия диалога если запущен другой
|
||||||
|
# if [winfo exists .findVariables] {
|
||||||
|
# return
|
||||||
|
# }
|
||||||
|
# if { [winfo exists $win] } { destroy $win }
|
||||||
|
set txt $w
|
||||||
|
set win .varhelper
|
||||||
|
# if {$findedVars eq ""} {
|
||||||
|
# return
|
||||||
|
# }
|
||||||
|
toplevel $win
|
||||||
|
wm transient $win .
|
||||||
|
wm overrideredirect $win 1
|
||||||
|
|
||||||
|
listbox $win.lBox -width 30 -border 0
|
||||||
|
pack $win.lBox -expand true -fill y -side left
|
||||||
|
|
||||||
|
foreach { item } $findedVars {
|
||||||
|
$win.lBox insert end $item
|
||||||
|
}
|
||||||
|
|
||||||
|
catch { $win.lBox activate 0 ; $win.lBox selection set 0 0 }
|
||||||
|
|
||||||
|
if { [set height [llength $findedVars]] > 10 } { set height 10 }
|
||||||
|
$win.lBox configure -height $height
|
||||||
|
|
||||||
|
bind $win <Escape> {
|
||||||
|
destroy $Editor::win
|
||||||
|
focus -force $Editor::txt.t
|
||||||
|
break
|
||||||
|
}
|
||||||
|
bind $win.lBox <Escape> {
|
||||||
|
destroy $Editor::win
|
||||||
|
focus -force $Editor::txt.t
|
||||||
|
break
|
||||||
|
}
|
||||||
|
bind VarHelperBind <Control-Return> {
|
||||||
|
$Editor::txt delete "insert - 1 chars wordstart" "insert wordend - 1 chars"
|
||||||
|
$Editor::txt insert "insert" [.varhelper.lBox get [.varhelper.lBox curselection]]
|
||||||
|
# eval [bind VarHelperBind <Escape>]
|
||||||
|
Editor::VarHelperEscape $Editor::txt
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
# Определям расстояние до края экрана (основного окна) и если
|
||||||
|
# оно меньше размера окна со списком то сдвигаем его вверх
|
||||||
|
set winGeomY [winfo reqheight $win]
|
||||||
|
set winGeomX [winfo reqwidth $win]
|
||||||
|
|
||||||
|
set topHeight [winfo height .]
|
||||||
|
set topWidth [winfo width .]
|
||||||
|
set topLeftUpperX [winfo x .]
|
||||||
|
set topLeftUpperY [winfo y .]
|
||||||
|
set topRightLowerX [expr $topLeftUpperX + $topWidth]
|
||||||
|
set topRightLowerY [expr $topLeftUpperY + $topHeight]
|
||||||
|
|
||||||
|
if {[expr [expr $x + $winGeomX] > $topRightLowerX]} {
|
||||||
|
set x [expr $x - $winGeomX]
|
||||||
|
}
|
||||||
|
if {[expr [expr $y + $winGeomY] > $topRightLowerY]} {
|
||||||
|
set y [expr $y - $winGeomY]
|
||||||
|
}
|
||||||
|
|
||||||
|
wm geom $win +$x+$y
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ReleaseKey {k txt fileType} {
|
||||||
|
global cfgVariables lexers
|
||||||
|
set pos [$txt index insert]
|
||||||
|
set lineNum [lindex [split $pos "."] 0]
|
||||||
|
set posNum [lindex [split $pos "."] 1]
|
||||||
|
set box [$txt bbox insert]
|
||||||
|
set box_x [expr [lindex $box 0] + [winfo rootx $txt] ]
|
||||||
|
set box_y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
|
||||||
|
SearchBrackets $txt
|
||||||
set lpos [split $pos "."]
|
set lpos [split $pos "."]
|
||||||
set lblText "[::msgcat::mc "Row"]: [lindex $lpos 0], [::msgcat::mc "Column"]: [lindex $lpos 1]"
|
set lblText "[::msgcat::mc "Row"]: [lindex $lpos 0], [::msgcat::mc "Column"]: [lindex $lpos 1]"
|
||||||
.frmStatus.lblPosition configure -text $lblText
|
.frmStatus.lblPosition configure -text $lblText
|
||||||
unset lpos
|
unset lpos
|
||||||
$txt tag remove lightSelected 1.0 end
|
$txt tag remove lightSelected 1.0 end
|
||||||
|
|
||||||
|
if { [winfo exists .varhelper] } { destroy .varhelper }
|
||||||
|
# puts $k
|
||||||
|
switch $k {
|
||||||
|
Return {
|
||||||
|
regexp {^(\s*)} [$txt get [expr $lineNum - 1].0 [expr $lineNum - 1].end] -> spaceStart
|
||||||
|
# puts "$pos, $lineNum, $posNum, >$spaceStart<"
|
||||||
|
$txt insert insert $spaceStart
|
||||||
|
Editor::Indent $txt
|
||||||
|
}
|
||||||
|
Up {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Down {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Left {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Right {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
# Shift_L {
|
||||||
|
# return
|
||||||
|
# }
|
||||||
|
# Shift_R {
|
||||||
|
# return
|
||||||
|
# }
|
||||||
|
Control_L {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Control_R {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Alt_L {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Alt_R {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# set lineStart [$txt index "$pos linestart"]
|
||||||
|
# puts "$pos $lineStart"
|
||||||
|
if {$cfgVariables(variableHelper) eq "true"} {
|
||||||
|
if {[dict exists $lexers $fileType variableSymbol] != 0} {
|
||||||
|
set varSymbol [dict get $lexers $fileType variableSymbol]
|
||||||
|
set lastSymbol [string last $varSymbol [$txt get $lineNum.0 $pos]]
|
||||||
|
if {$lastSymbol ne "-1"} {
|
||||||
|
set word [string trim [$txt get $lineNum.[expr $lastSymbol + 1] $pos]]
|
||||||
|
Editor::VarHelper $box_x $box_y $txt $word vars
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
set ind [$txt search -backwards -regexp {\W} $pos {insert linestart}]
|
||||||
|
if {$ind ne ""} {
|
||||||
|
set _ [split $ind "."]
|
||||||
|
set ind [lindex $_ 0].[expr [lindex $_ 1] + 1]
|
||||||
|
set word [$txt get $ind $pos]
|
||||||
|
} else {
|
||||||
|
# set ind [$txt search -backwards -regexp {^} $pos {insert linestart}]
|
||||||
|
set word [$txt get {insert linestart} $pos]
|
||||||
|
}
|
||||||
|
if {$word ne ""} {
|
||||||
|
Editor::VarHelper $box_x $box_y $txt $word {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if {$cfgVariables(procedureHelper) eq "true"} {
|
||||||
|
set ind [$txt search -backwards -regexp {\W} $pos {insert linestart}]
|
||||||
|
if {$ind ne ""} {
|
||||||
|
set _ [split $ind "."]
|
||||||
|
set ind [lindex $_ 0].[expr [lindex $_ 1] + 1]
|
||||||
|
set word [$txt get $ind $pos]
|
||||||
|
} else {
|
||||||
|
# set ind [$txt search -backwards -regexp {^} $pos {insert linestart}]
|
||||||
|
set word [$txt get {insert linestart} $pos]
|
||||||
|
}
|
||||||
|
if {$word ne ""} {
|
||||||
|
Editor::VarHelper $box_x $box_y $txt $word procedure
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc PressKey {k txt} {
|
proc PressKey {k txt} {
|
||||||
# puts [Editor::Key $k]
|
# puts [Editor::Key $k ""]
|
||||||
switch $k {
|
switch $k {
|
||||||
apostrophe {
|
apostrophe {
|
||||||
QuotSelection $txt {'}
|
QuotSelection $txt {'}
|
||||||
@@ -399,6 +724,9 @@ namespace eval Editor {
|
|||||||
grave {
|
grave {
|
||||||
QuotSelection $txt {`}
|
QuotSelection $txt {`}
|
||||||
}
|
}
|
||||||
|
underscore {
|
||||||
|
QuotSelection $txt {_}
|
||||||
|
}
|
||||||
parenleft {
|
parenleft {
|
||||||
# QuotSelection $txt {)}
|
# QuotSelection $txt {)}
|
||||||
}
|
}
|
||||||
@@ -435,21 +763,72 @@ namespace eval Editor {
|
|||||||
if {$key >= 79 && $key <= 91} {return "true"}
|
if {$key >= 79 && $key <= 91} {return "true"}
|
||||||
if {$key == 63 || $key == 107 || $key == 108 || $key == 112} {return "true"}
|
if {$key == 63 || $key == 107 || $key == 108 || $key == 112} {return "true"}
|
||||||
}
|
}
|
||||||
|
proc TextCopy {txt} {
|
||||||
proc BindKeys {w txt fileType} {
|
# $txt tag remove sel 1.0 end
|
||||||
|
$txt tag add sel {insert linestart} {insert lineend + 1char}
|
||||||
|
tk_textCopy $txt
|
||||||
|
$txt tag remove sel {insert linestart} {insert lineend + 1char}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
proc BindKeys {w txt fileType nb} {
|
||||||
global cfgVariables
|
global cfgVariables
|
||||||
# variable txt
|
# variable txt
|
||||||
# set txt $w.frmText.t
|
# set txt $w.frmText.t
|
||||||
bind $txt <KeyRelease> "Editor::ReleaseKey %K $txt"
|
bind $txt <KeyRelease> "catch {Editor::ReleaseKey %K $txt $fileType}"
|
||||||
bind $txt <KeyPress> "Editor::PressKey %K $txt"
|
bind $txt <KeyPress> "Editor::PressKey %K $txt"
|
||||||
|
bind $txt <Control-eacute> Quit
|
||||||
|
bind $txt <Control-igrave> "Editor::SelectionPaste $txt"
|
||||||
|
bind $txt <Control-v> "Editor::SelectionPaste $txt"
|
||||||
|
bind $txt <Control-l> "SearchVariable $txt; break"
|
||||||
|
bind $txt <Control-i> "ImageBase64Encode $txt"
|
||||||
|
bind $txt <Control-bracketleft> "Editor::InsertTabular $txt"
|
||||||
|
bind $txt <Control-bracketright> "Editor::DeleteTabular $txt"
|
||||||
|
bind $txt <Control-comma> "Editor::Comment $txt $fileType"
|
||||||
|
bind $txt <Control-period> "Editor::Uncomment $txt $fileType"
|
||||||
|
bind $txt <Control-eacute> Find
|
||||||
|
bind $txt <Insert> {OverWrite}
|
||||||
|
bind $txt <ButtonRelease-1> "Editor::SearchBrackets $txt"
|
||||||
|
bind $txt <Button-1><ButtonRelease-1> "Editor::SelectionHighlight $txt"
|
||||||
|
bind $txt <<Modified>> "SetModifiedFlag $w $nb"
|
||||||
|
bind $txt <Control-i> ImageBase64Encode
|
||||||
|
bind $txt <Control-u> "Editor::SearchBrackets %W"
|
||||||
|
bind $txt <Control-J> "catch {Editor::GoToFunction $txt}"
|
||||||
|
bind $txt <Control-j> "catch {Editor::GoToFunction $txt}; break"
|
||||||
|
bind $txt <Alt-w> "$txt delete {insert wordstart} {insert wordend}"
|
||||||
|
bind $txt <Alt-odiaeresis> "$txt delete {insert wordstart} {insert wordend}"
|
||||||
|
bind $txt <Alt-r> "$txt delete {insert linestart} {insert lineend + 1char}"
|
||||||
|
bind $txt <Alt-ecircumflex> "$txt delete {insert linestart} {insert lineend + 1char}"
|
||||||
|
bind $txt <Alt-b> "$txt delete {insert linestart} insert"
|
||||||
|
bind $txt <Alt-e> "$txt delete insert {insert lineend}"
|
||||||
|
bind $txt <Alt-s> "Editor::SplitEditorH $w $fileType"
|
||||||
|
bind $txt <Alt-ucircumflex> "Editor::SplitEditorH $w $fileType"
|
||||||
|
bind $txt <Alt-y> "Editor::TextCopy $txt"
|
||||||
|
bind $txt <Control-g> "Editor::GoToLineNumberDialog $txt"
|
||||||
|
bind $txt <Control-agrave> "Editor::FindDialog $w"
|
||||||
|
bind $txt <Control-f> "Editor::FindDialog $txt"
|
||||||
|
bind $txt <Control-F> "Editor::FindDialog $txt"
|
||||||
|
bind $txt <Control-odiaeresis> FileOper::Close
|
||||||
|
bind $txt <Control-w> FileOper::Close
|
||||||
|
bind $txt <Control-o> {
|
||||||
|
set filePath [FileOper::OpenDialog]
|
||||||
|
if {$filePath != ""} {
|
||||||
|
FileOper::Edit $filePath
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
bind $txt <Control-O> {
|
||||||
|
set filePath [FileOper::OpenDialog]
|
||||||
|
if {$filePath != ""} {
|
||||||
|
FileOper::Edit $filePath
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
# bind $txt.t <KeyRelease> "Editor::ReleaseKey %K $txt.t $fileType"
|
||||||
|
# bind $txt.t <KeyPress> "Editor::PressKey %K $txt.t"
|
||||||
# bind $txt <KeyRelease> "Editor::Key %k %K"
|
# bind $txt <KeyRelease> "Editor::Key %k %K"
|
||||||
#$txt tag bind Sel <Control-/> {puts ">>>>>>>>>>>>>>>>>>>"}
|
#$txt tag bind Sel <Control-/> {puts ">>>>>>>>>>>>>>>>>>>"}
|
||||||
#bind $txt <Control-slash> {puts "/////////////////"}
|
#bind $txt <Control-slash> {puts "/////////////////"}
|
||||||
# #bind $txt <Control-g> GoToLine
|
# #bind $txt <Control-g> GoToLine
|
||||||
# bind $txt <Control-g> {focus .frmTool.frmGoto.entGoTo; .frmTool.frmGoto.entGoTo delete 0 end}
|
|
||||||
bind $txt <Control-agrave> "Editor::FindDialog $w"
|
|
||||||
bind $txt <Control-f> "Editor::FindDialog $txt"
|
|
||||||
bind $txt <Control-F> "Editor::FindDialog $txt"
|
|
||||||
# bind $txt <F3> {FindNext $w.text 1}
|
# bind $txt <F3> {FindNext $w.text 1}
|
||||||
# bind $txt <Control-ecircumflex> ReplaceDialog
|
# bind $txt <Control-ecircumflex> ReplaceDialog
|
||||||
# bind $txt <Control-r> ReplaceDialog
|
# bind $txt <Control-r> ReplaceDialog
|
||||||
@@ -458,50 +837,24 @@ namespace eval Editor {
|
|||||||
# bind $txt <Control-s> {FileDialog [$noteBookFiles raise] save}
|
# bind $txt <Control-s> {FileDialog [$noteBookFiles raise] save}
|
||||||
# bind $txt <Control-ocircumflex> {FileDialog [$noteBookFiles raise] save_as}
|
# bind $txt <Control-ocircumflex> {FileDialog [$noteBookFiles raise] save_as}
|
||||||
# bind $txt <Shift-Control-s> {FileDialog [$noteBookFiles raise] save_as}
|
# bind $txt <Shift-Control-s> {FileDialog [$noteBookFiles raise] save_as}
|
||||||
bind $txt <Control-odiaeresis> FileOper::Close
|
|
||||||
bind $txt <Control-w> FileOper::Close
|
|
||||||
# bind $txt <Control-division> "tk_textCut $w.text;break"
|
# bind $txt <Control-division> "tk_textCut $w.text;break"
|
||||||
# bind $txt <Control-x> "tk_textCut $w.text;break"
|
# bind $txt <Control-x> "tk_textCut $w.text;break"
|
||||||
# bind $txt <Control-ntilde> "tk_textCopy $txt"
|
# bind $txt <Control-ntilde> "tk_textCopy $txt"
|
||||||
# bind $txt <Control-c> "tk_textCopy $txt"
|
# bind $txt <Control-c> "tk_textCopy $txt"
|
||||||
bind $txt <Control-igrave> "Editor::SelectionPaste $txt"
|
|
||||||
bind $txt <Control-v> "Editor::SelectionPaste $txt"
|
|
||||||
|
|
||||||
#bind $txt <Control-adiaeresis> "auto_completition $txt"
|
#bind $txt <Control-adiaeresis> "auto_completition $txt"
|
||||||
bind $txt <Control-l> "SearchVariable $txt"
|
|
||||||
# bind $txt <Control-icircumflex> ""
|
# bind $txt <Control-icircumflex> ""
|
||||||
# bind $txt <Control-j> ""
|
# bind $txt <Control-j> ""
|
||||||
bind $txt <Control-i> "ImageBase64Encode $txt"
|
|
||||||
|
|
||||||
bind $txt <Control-bracketleft> "Editor::InsertTabular $txt"
|
|
||||||
bind $txt <Control-bracketright> "Editor::DeleteTabular $txt"
|
|
||||||
|
|
||||||
bind $txt <Control-comma> "Editor::Comment $txt $fileType"
|
|
||||||
bind $txt <Control-period> "Editor::Uncomment $txt $fileType"
|
|
||||||
bind $txt <Control-eacute> Find
|
|
||||||
#bind . <Control-m> PageTab
|
#bind . <Control-m> PageTab
|
||||||
#bind . <Control-udiaeresis> PageTab
|
#bind . <Control-udiaeresis> PageTab
|
||||||
bind $txt <Insert> {OverWrite}
|
|
||||||
bind $txt <ButtonRelease-1> "Editor::SearchBrackets $txt"
|
|
||||||
# bind <Button-1> [bind sysAfter <Any-Key>]
|
# bind <Button-1> [bind sysAfter <Any-Key>]
|
||||||
# bind $txt <Button-3> {catch [PopupMenuEditor %X %Y]}
|
# bind $txt <Button-3> {catch [PopupMenuEditor %X %Y]}
|
||||||
# bind $txt <Button-4> "%W yview scroll -3 units"
|
# bind $txt <Button-4> "%W yview scroll -3 units"
|
||||||
# bind $txt <Button-5> "%W yview scroll 3 units"
|
# bind $txt <Button-5> "%W yview scroll 3 units"
|
||||||
#bind $txt <Shift-Button-4> "%W xview scroll -2 units"
|
#bind $txt <Shift-Button-4> "%W xview scroll -2 units"
|
||||||
#bind $txt <Shift-Button-5> "%W xview scroll 2 units"
|
#bind $txt <Shift-Button-5> "%W xview scroll 2 units"
|
||||||
bind $txt <Button-1><ButtonRelease-1> "Editor::SelectionHighlight $txt"
|
|
||||||
# bind $txt <<Selection>> "Editor::SelectionHighlight $txt"
|
# bind $txt <<Selection>> "Editor::SelectionHighlight $txt"
|
||||||
bind $txt <<Modified>> "SetModifiedFlag $w"
|
|
||||||
# bind $txt <<Selection>> "Editor::SelectionGet $txt"
|
# bind $txt <<Selection>> "Editor::SelectionGet $txt"
|
||||||
bind $txt <Control-i> ImageBase64Encode
|
|
||||||
bind $txt <Control-u> "Editor::SearchBrackets %W"
|
|
||||||
bind $txt <Control-J> "catch {Editor::GoToFunction $txt}"
|
|
||||||
bind $txt <Control-j> "catch {Editor::GoToFunction $txt}; break"
|
|
||||||
bind $txt <Alt-w> "$txt delete {insert wordstart} {insert wordend}"
|
|
||||||
bind $txt <Alt-r> "$txt delete {insert linestart} {insert lineend + 1char}"
|
|
||||||
bind $txt <Alt-b> "$txt delete {insert linestart} insert"
|
|
||||||
bind $txt <Alt-e> "$txt delete insert {insert lineend}"
|
|
||||||
bind $txt <Alt-s> "Editor::SplitEditorH $w $fileType"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc SearchBrackets {txt} {
|
proc SearchBrackets {txt} {
|
||||||
@@ -571,7 +924,8 @@ namespace eval Editor {
|
|||||||
set nbEditorItem [NB::InsertItem $nbEditor $fileFullPath "file"]
|
set nbEditorItem [NB::InsertItem $nbEditor $fileFullPath "file"]
|
||||||
# puts "$nbEditorItem, $nbEditor"
|
# puts "$nbEditorItem, $nbEditor"
|
||||||
Editor $fileFullPath $nbEditor $nbEditorItem
|
Editor $fileFullPath $nbEditor $nbEditorItem
|
||||||
SetModifiedFlag $nbEditorItem
|
SetModifiedFlag $nbEditorItem $nbEditor
|
||||||
|
focus -force $nbEditorItem.frmText.t.t
|
||||||
}
|
}
|
||||||
|
|
||||||
proc ReadStructure {txt treeItemName} {
|
proc ReadStructure {txt treeItemName} {
|
||||||
@@ -622,31 +976,24 @@ namespace eval Editor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc FindFunction {txt findString} {
|
proc FindFunction {txt findString} {
|
||||||
global nbEditor
|
puts "txt: $txt, $findString"
|
||||||
puts $findString
|
|
||||||
set pos "0.0"
|
set pos "0.0"
|
||||||
# set txt [$nbEditor select].frmText.t
|
|
||||||
$txt see $pos
|
$txt see $pos
|
||||||
set line [lindex [split $pos "."] 0]
|
set line [lindex [split $pos "."] 0]
|
||||||
set x [lindex [split $pos "."] 1]
|
set x [lindex [split $pos "."] 1]
|
||||||
# set pos [$txt search -nocase $findString $line.$x end]
|
set pattern "$findString\(\\W\|\$\)"
|
||||||
set pos [$txt search -nocase -regexp $findString $line.$x end]
|
set pos [$txt search -nocase -regexp $pattern $line.$x end]
|
||||||
$txt mark set insert $pos
|
$txt mark set insert $pos
|
||||||
$txt see $pos
|
$txt see $pos
|
||||||
puts $pos
|
|
||||||
# highlight the found word
|
|
||||||
set line [lindex [split $pos "."] 0]
|
set line [lindex [split $pos "."] 0]
|
||||||
# set x [lindex [split $pos "."] 1]
|
|
||||||
# set x [expr {$x + [string length $findString]}]
|
|
||||||
$txt tag remove sel 1.0 end
|
$txt tag remove sel 1.0 end
|
||||||
$txt tag add sel $pos $line.end
|
$txt tag add sel $pos $line.end
|
||||||
# #$text tag configure sel -background $editor(selectbg) -foreground $editor(fg)
|
|
||||||
$txt tag raise sel
|
$txt tag raise sel
|
||||||
focus -force $txt.t
|
focus -force $txt.t
|
||||||
# Position
|
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
# "Alexander Dederer (aka Korwin)
|
|
||||||
|
# "Alexander Dederer (aka Korwin)
|
||||||
## Search close bracket in editor widget
|
## Search close bracket in editor widget
|
||||||
proc _searchCloseBracket { widget o_bracket c_bracket start_pos end_pos } {
|
proc _searchCloseBracket { widget o_bracket c_bracket start_pos end_pos } {
|
||||||
# puts "_searchCloseBracket: $widget $o_bracket $c_bracket $start_pos $end_pos"
|
# puts "_searchCloseBracket: $widget $o_bracket $c_bracket $start_pos $end_pos"
|
||||||
@@ -827,20 +1174,32 @@ namespace eval Editor {
|
|||||||
set lstFindIndex [$txt search -all -nocase -count matchIndexPair $findString $line.$x end]
|
set lstFindIndex [$txt search -all -nocase -count matchIndexPair $findString $line.$x end]
|
||||||
# set symNumbers [string length "$findString"]
|
# set symNumbers [string length "$findString"]
|
||||||
}
|
}
|
||||||
# puts $lstFindIndex
|
puts $lstFindIndex
|
||||||
# puts $matchIndexPair
|
# puts $matchIndexPair
|
||||||
# set lstFindIndex [$txt search -all "$selectionText" 0.0]
|
# set lstFindIndex [$txt search -all "$selectionText" 0.0]
|
||||||
|
|
||||||
|
# Найдем разницу в длине строк для установки правильного
|
||||||
|
# индекса для выделения текста после вставки
|
||||||
|
set stringLengthDiff [expr [string length $findString] - [string length $replaceString]]
|
||||||
|
|
||||||
set i 0
|
set i 0
|
||||||
foreach ind $lstFindIndex {
|
foreach ind [lsort -dictionary -decreasing $lstFindIndex] {
|
||||||
set selFindLine [lindex [split $ind "."] 0]
|
set selFindLine [lindex [split $ind "."] 0]
|
||||||
set selFindRow [lindex [split $ind "."] 1]
|
set selFindRow [lindex [split $ind "."] 1]
|
||||||
# set endInd "$selFindLine.[expr $selFindRow + $symNumbers]"
|
# set endInd "$selFindLine.[expr $selFindRow + $symNumbers]"
|
||||||
set endInd "$selFindLine.[expr [lindex $matchIndexPair $i] + $selFindRow]"
|
set endInd "$selFindLine.[expr [lindex $matchIndexPair $i] + $selFindRow]"
|
||||||
# puts "$ind; $selFindLine, $selFindRow; $endInd "
|
puts "$ind; $selFindLine, $selFindRow; $endInd "
|
||||||
if {$replaceString ne ""} {
|
if {$replaceString ne ""} {
|
||||||
$txt replace $ind $endInd $replaceString
|
$txt replace $ind $endInd $replaceString
|
||||||
|
# Вычисляем индекс вхождения строки после замены для выделения в тексте
|
||||||
|
if {$stringLengthDiff > 0} {
|
||||||
|
$txt tag add sel $ind "$endInd - [expr [tcl::mathfunc::abs $stringLengthDiff]] chars"
|
||||||
|
} else {
|
||||||
|
$txt tag add sel $ind "$endInd + [expr [tcl::mathfunc::abs $stringLengthDiff]] chars"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$txt tag add sel $ind $endInd
|
||||||
}
|
}
|
||||||
$txt tag add sel $ind $endInd
|
|
||||||
incr i
|
incr i
|
||||||
}
|
}
|
||||||
.finddialog.lblCounter configure -text "[::msgcat::mc "Finded"]: $i"
|
.finddialog.lblCounter configure -text "[::msgcat::mc "Finded"]: $i"
|
||||||
@@ -892,7 +1251,7 @@ namespace eval Editor {
|
|||||||
set regexpSet ""
|
set regexpSet ""
|
||||||
set searchAll "-all"
|
set searchAll "-all"
|
||||||
|
|
||||||
if { [winfo exists $win] } { des`troy $win }
|
if { [winfo exists $win] } { destroy $win }
|
||||||
toplevel $win
|
toplevel $win
|
||||||
wm transient $win .
|
wm transient $win .
|
||||||
wm overrideredirect $win 1
|
wm overrideredirect $win 1
|
||||||
@@ -968,7 +1327,7 @@ namespace eval Editor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Horizontal split the Editor text widget
|
# Horizontal split the Editor text widget
|
||||||
proc SplitEditorH {w fileType} {
|
proc SplitEditorH {w fileType nb} {
|
||||||
global cfgVariables
|
global cfgVariables
|
||||||
puts [$w.panelTxt panes]
|
puts [$w.panelTxt panes]
|
||||||
if [winfo exists $w.frmText2] {
|
if [winfo exists $w.frmText2] {
|
||||||
@@ -977,7 +1336,7 @@ namespace eval Editor {
|
|||||||
focus -force $w.frmText.t.t
|
focus -force $w.frmText.t.t
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
set frmText [Editor::EditorWidget $w $fileType]
|
set frmText [Editor::EditorWidget $w $fileType $nb]
|
||||||
$frmText.t insert end [$w.frmText.t get 0.0 end]
|
$frmText.t insert end [$w.frmText.t get 0.0 end]
|
||||||
|
|
||||||
# $w.panelTxt add $w.frmText -weight 0
|
# $w.panelTxt add $w.frmText -weight 0
|
||||||
@@ -988,24 +1347,33 @@ namespace eval Editor {
|
|||||||
focus -force $frmText.t.t
|
focus -force $frmText.t.t
|
||||||
}
|
}
|
||||||
|
|
||||||
proc SplitEditorV {w fileType} {
|
proc SplitEditorV {fileFullPath} {
|
||||||
global cfgVariables
|
global cfgVariables
|
||||||
.frmBody.panel add $frmTree -weight 0
|
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName
|
||||||
|
set itemName ".frmWork.nbEditor2.$itemName"
|
||||||
puts [$w.panelTxt panes]
|
# puts $itemName
|
||||||
if [winfo exists $w.frmText2] {
|
if {[winfo exists $itemName] == 1} {
|
||||||
$w.panelTxt forget $w.frmText2
|
.frmWork.nbEditor2 forget $itemName
|
||||||
destroy $w.frmText2
|
destroy $itemName
|
||||||
|
if {[llength [.frmWork.nbEditor2 tabs]] == 0} {
|
||||||
|
if [lsearch -exact [.frmWork.panelNB panes] .frmWork.nbEditor2] {
|
||||||
|
grid forget .frmWork.nbEditor2
|
||||||
|
.frmWork.panelNB forget .frmWork.nbEditor2
|
||||||
|
}
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
set frmText [Editor::EditorWidget $w $fileType]
|
pack .frmWork.nbEditor2 -side left -fill both -expand true
|
||||||
$frmText.t insert end [$w.frmText.t get 0.0 end]
|
pack propagate .frmWork.nbEditor2 false
|
||||||
|
# grid .frmWork.nbEditor2 -row 0 -column 1 -sticky nsew
|
||||||
|
# grid columnconfigure .frmWork .frmWork.nbEditor -weight 1
|
||||||
|
# grid rowconfigure .frmWork .frmWork.nbEditor -weight 1
|
||||||
|
# grid columnconfigure .frmWork .frmWork.nbEditor2 -weight 1
|
||||||
|
# grid rowconfigure .frmWork .frmWork.nbEditor2 -weight 1
|
||||||
|
.frmWork.panelNB add .frmWork.nbEditor2 -weight 0
|
||||||
|
puts [FileOper::Edit $fileFullPath .frmWork.nbEditor2]
|
||||||
|
|
||||||
# $w.panelTxt add $w.frmText -weight 0
|
|
||||||
$w.panelTxt add $frmText -weight 1
|
|
||||||
|
|
||||||
$frmText.t see [$w.frmText.t index insert]
|
|
||||||
# $frmText.t mark set insert [$w.frmText.t index insert]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc GoToLineNumber {text lineNumber} {
|
proc GoToLineNumber {text lineNumber} {
|
||||||
@@ -1014,7 +1382,58 @@ namespace eval Editor {
|
|||||||
$text see insert
|
$text see insert
|
||||||
}
|
}
|
||||||
|
|
||||||
proc EditorWidget {fr fileType} {
|
proc GoToLineNumberDialog {w} {
|
||||||
|
global editors lexers
|
||||||
|
variable txt
|
||||||
|
variable win
|
||||||
|
# set txt $w.frmText.t
|
||||||
|
set txt $w
|
||||||
|
set win .gotoline
|
||||||
|
set box [$txt bbox insert]
|
||||||
|
set x [expr [lindex $box 0] + [winfo rootx $txt] ]
|
||||||
|
set y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
|
||||||
|
|
||||||
|
if { [winfo exists $win] } { destroy $win }
|
||||||
|
toplevel $win
|
||||||
|
wm transient $win .
|
||||||
|
wm overrideredirect $win 1
|
||||||
|
|
||||||
|
ttk::entry $win.ent
|
||||||
|
pack $win.ent -expand true -fill y -side left -padx 3 -pady 3
|
||||||
|
|
||||||
|
bind $win <Escape> {
|
||||||
|
destroy $Editor::win
|
||||||
|
focus -force $Editor::txt.t
|
||||||
|
break
|
||||||
|
}
|
||||||
|
bind $win.ent <Escape> {
|
||||||
|
destroy $Editor::win
|
||||||
|
focus -force $Editor::txt.t
|
||||||
|
break
|
||||||
|
}
|
||||||
|
bind $win.ent <Return> {
|
||||||
|
set lineNumber [.gotoline.ent get]
|
||||||
|
# $txt see insert $lineNumber
|
||||||
|
puts $Editor::txt
|
||||||
|
$Editor::txt mark set insert $lineNumber.0
|
||||||
|
$Editor::txt see insert
|
||||||
|
focus $Editor::txt.t
|
||||||
|
destroy .gotoline
|
||||||
|
break
|
||||||
|
}
|
||||||
|
# Определям расстояние до края экрана (основного окна) и если
|
||||||
|
# оно меньше размера окна со списком то сдвигаем его вверх
|
||||||
|
set winGeom [winfo reqheight $win]
|
||||||
|
set topHeight [winfo height .]
|
||||||
|
# puts "$x, $y, $winGeom, $topHeight"
|
||||||
|
if [expr [expr $topHeight - $y] < $winGeom] {
|
||||||
|
set y [expr $topHeight - $winGeom]
|
||||||
|
}
|
||||||
|
wm geom $win +$x+$y
|
||||||
|
focus $win.ent
|
||||||
|
}
|
||||||
|
|
||||||
|
proc EditorWidget {fr fileType nb} {
|
||||||
global cfgVariables editors
|
global cfgVariables editors
|
||||||
|
|
||||||
if [winfo exists $fr.frmText] {
|
if [winfo exists $fr.frmText] {
|
||||||
@@ -1061,12 +1480,23 @@ namespace eval Editor {
|
|||||||
} else {
|
} else {
|
||||||
Highlight::Default $txt
|
Highlight::Default $txt
|
||||||
}
|
}
|
||||||
BindKeys $fr $txt $fileType
|
BindKeys $fr $txt $fileType $nb
|
||||||
return $frmText
|
return $frmText
|
||||||
}
|
}
|
||||||
|
|
||||||
proc Editor {fileFullPath nb itemName} {
|
proc Editor {fileFullPath nb itemName} {
|
||||||
global cfgVariables editors
|
global cfgVariables editors
|
||||||
|
set imageType {
|
||||||
|
PNG
|
||||||
|
JPG
|
||||||
|
JPEG
|
||||||
|
WEBP
|
||||||
|
GIF
|
||||||
|
TIFF
|
||||||
|
JP2
|
||||||
|
ICO
|
||||||
|
XPM
|
||||||
|
}
|
||||||
set fr $itemName
|
set fr $itemName
|
||||||
if ![string match "*untitled*" $itemName] {
|
if ![string match "*untitled*" $itemName] {
|
||||||
set lblText $fileFullPath
|
set lblText $fileFullPath
|
||||||
@@ -1085,9 +1515,9 @@ namespace eval Editor {
|
|||||||
set btnSplitV "btnSplitV[string range $itemName [expr [string last "." $itemName] +1] end]"
|
set btnSplitV "btnSplitV[string range $itemName [expr [string last "." $itemName] +1] end]"
|
||||||
set btnSplitH "btnSplitH[string range $itemName [expr [string last "." $itemName] +1] end]"
|
set btnSplitH "btnSplitH[string range $itemName [expr [string last "." $itemName] +1] end]"
|
||||||
ttk::button $fr.header.$btnSplitH -image split_horizontal_11x11 \
|
ttk::button $fr.header.$btnSplitH -image split_horizontal_11x11 \
|
||||||
-command "Editor::SplitEditorH $fr $fileType"
|
-command "Editor::SplitEditorH $fr $fileType $nb"
|
||||||
ttk::button $fr.header.$btnSplitV -image split_vertical_11x11 \
|
ttk::button $fr.header.$btnSplitV -image split_vertical_11x11 \
|
||||||
-command "Editor::SplitEditorV $fr $fileType" -state disable
|
-command "Editor::SplitEditorV $fileFullPath"
|
||||||
# pack $fr.$btnSplitH $fr.$btnSplitV -side right -anchor e
|
# pack $fr.$btnSplitH $fr.$btnSplitV -side right -anchor e
|
||||||
pack $fr.header.$lblName -side left -expand true -fill x
|
pack $fr.header.$lblName -side left -expand true -fill x
|
||||||
pack $fr.header.$btnSplitV $fr.header.$btnSplitH -side right
|
pack $fr.header.$btnSplitV $fr.header.$btnSplitH -side right
|
||||||
@@ -1098,47 +1528,14 @@ namespace eval Editor {
|
|||||||
pack propagate $fr.panelTxt false
|
pack propagate $fr.panelTxt false
|
||||||
pack $fr.panelTxt -side top -fill both -expand true
|
pack $fr.panelTxt -side top -fill both -expand true
|
||||||
|
|
||||||
set frmText [Editor::EditorWidget $fr $fileType]
|
if {[lsearch -exact $imageType $fileType] != -1} {
|
||||||
|
ImageViewer $fileFullPath $itemName $fr
|
||||||
|
} else {
|
||||||
|
set frmText [Editor::EditorWidget $fr $fileType $nb]
|
||||||
|
dict set editors $frmText.t fileFullPath $fileFullPath
|
||||||
|
}
|
||||||
$fr.panelTxt add $frmText -weight 0
|
$fr.panelTxt add $frmText -weight 0
|
||||||
|
|
||||||
return $fr
|
return $fr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ctextBindings.tcl
|
|
||||||
#
|
|
||||||
# Copyright (C) 2012 Sedat Serper
|
|
||||||
# A similar script and functionality is implemented in tG² as of v1.06.01.41
|
|
||||||
#
|
|
||||||
# proc ctext_binding4Tag {w tags} {
|
|
||||||
# # foreach tag $tags {
|
|
||||||
# $w tag bind $tag <Enter> {%W config -cursor hand2}
|
|
||||||
# $w tag bind $tag <Leave> {%W config -cursor xterm}
|
|
||||||
# $w tag bind $tag <ButtonRelease-1> {
|
|
||||||
# set cur [::tk::TextClosestGap %W %x %y]
|
|
||||||
# if {[catch {%W index anchor}]} {%W mark set anchor $cur}
|
|
||||||
# set anchor [%W index anchor]
|
|
||||||
# set last [::tk::TextNextPos %W "$cur - 1c" tcl_wordBreakAfter]
|
|
||||||
# set first [::tk::TextPrevPos %W anchor tcl_wordBreakBefore]
|
|
||||||
# if {![catch {set tmp [%W get $first $last]}]} {
|
|
||||||
# ctext_execTagCmd $tmp
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# THE DEMO
|
|
||||||
#
|
|
||||||
# # ----------------------- demo -------------------------------------------
|
|
||||||
# # Open a new wish console and copy/paste the following complete script.
|
|
||||||
# # Clicking on parts that are highlighted and observe the console output...
|
|
||||||
# # Adjust procedure 'ctext_execTagCmd' to customize the handling 4 your application.
|
|
||||||
# package require ctext
|
|
||||||
# pack [ctext .t] -fill both -expand 1
|
|
||||||
# ctext::addHighlightClass .t bindings purple [list <Enter> <Leave> <ButtonRelease-1>]
|
|
||||||
# ctext::addHighlightClass .t commands orange [list foreach proc if set catch]
|
|
||||||
# .t fastinsert end [info body ctext_binding4Tag]
|
|
||||||
# .t highlight 1.0 end
|
|
||||||
# ctext_binding4Tag .t {bindings commands}
|
|
||||||
|
213
lib/files.tcl
213
lib/files.tcl
@@ -15,6 +15,98 @@ namespace eval FileOper {
|
|||||||
{"All files" *}
|
{"All files" *}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc GetFileMimeType {fileFullPath {opt ""}} {
|
||||||
|
global cfgVariables
|
||||||
|
# Проверям наличие программы в системе, если есть то добавляем опции
|
||||||
|
# если нет то используем тиклевый пакет
|
||||||
|
if [file exists $cfgVariables(fileTypeCommand)] {
|
||||||
|
set cmd exec
|
||||||
|
lappend cmd $cfgVariables(fileTypeCommand)
|
||||||
|
foreach _ [split $cfgVariables(fileTypeCommandOptions) " "] {
|
||||||
|
lappend cmd $_
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
set cmd [list eval ::fileutil::magic::filetype]
|
||||||
|
}
|
||||||
|
|
||||||
|
# lappend cmd $activeProject
|
||||||
|
lappend cmd $fileFullPath
|
||||||
|
# puts $cmd
|
||||||
|
catch $cmd pipe
|
||||||
|
# puts $pipe
|
||||||
|
if [regexp -nocase -- {(\w+)/([\w\-_\.]+); charset=([[:alnum:]-]+)} $pipe m fType fExt fCharset] {
|
||||||
|
puts "$fType $fExt $fCharset"
|
||||||
|
}
|
||||||
|
switch $opt {
|
||||||
|
"charset" {
|
||||||
|
if [info exists fCharset] {
|
||||||
|
return $fCharset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# линуксовый file не всегда корректно определяет тип файла
|
||||||
|
# используем пакет из tcl
|
||||||
|
lassign [::fileutil::fileType $fileFullPath] fType fBinaryType fBinaryInterp
|
||||||
|
puts "File type is $fType, $fBinaryType, $fBinaryInterp"
|
||||||
|
|
||||||
|
switch $fType {
|
||||||
|
"binary" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
"text" {
|
||||||
|
return text
|
||||||
|
}
|
||||||
|
"image" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
## GETTING FILE ATTRIBUTES ##
|
||||||
|
proc GetFileAttr {file {opt ""}} {
|
||||||
|
global tcl_platform
|
||||||
|
set fileAttribute ""
|
||||||
|
# get file modify time
|
||||||
|
switch $opt {
|
||||||
|
attr {
|
||||||
|
if {$tcl_platform(platform) == "windows"} {
|
||||||
|
set unixTime [file mtime $file]
|
||||||
|
set modifyTime [clock format $unixTime -format "%d/%m/%Y, %H:%M"]
|
||||||
|
} elseif {$tcl_platform(platform) == "mac"} {
|
||||||
|
|
||||||
|
} elseif {$tcl_platform(platform) == "unix"} {
|
||||||
|
set unixTime [file mtime $file]
|
||||||
|
set modifyTime [clock format $unixTime -format "%d/%m/%Y, %H:%M"]
|
||||||
|
}
|
||||||
|
return $modifyTime
|
||||||
|
}
|
||||||
|
size {
|
||||||
|
# get file size
|
||||||
|
set size [file size $file]
|
||||||
|
if {$size < 1024} {
|
||||||
|
set fileSize "$size b"
|
||||||
|
}
|
||||||
|
if {$size >= 1024} {
|
||||||
|
set s [expr ($size.0) / 1024]
|
||||||
|
set dot [string first "\." $s]
|
||||||
|
set int [string range $s 0 [expr $dot - 1]]
|
||||||
|
set dec [string range $s [expr $dot + 1] [expr $dot + 2]]
|
||||||
|
set fileSize "$int.$dec Kb"
|
||||||
|
}
|
||||||
|
if {$size >= 1048576} {
|
||||||
|
set s [expr ($size.0) / 1048576]
|
||||||
|
set dot [string first "\." $s]
|
||||||
|
set int [string range $s 0 [expr $dot - 1]]
|
||||||
|
set dec [string range $s [expr $dot + 1] [expr $dot + 2]]
|
||||||
|
set fileSize "$int.$dec Mb"
|
||||||
|
}
|
||||||
|
return $fileSize
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
proc OpenDialog {} {
|
proc OpenDialog {} {
|
||||||
global env project activeProject
|
global env project activeProject
|
||||||
if [info exists activeProject] {
|
if [info exists activeProject] {
|
||||||
@@ -47,16 +139,16 @@ namespace eval FileOper {
|
|||||||
set dir $env(HOME)
|
set dir $env(HOME)
|
||||||
}
|
}
|
||||||
set fullPath [tk_chooseDirectory -initialdir $dir -parent .]
|
set fullPath [tk_chooseDirectory -initialdir $dir -parent .]
|
||||||
set file [string range $fullPath [expr [string last "/" $fullPath]+1] end]
|
# set file [string range $fullPath [expr [string last "/" $fullPath]+1] end]
|
||||||
regsub -all "." $file "_" node
|
# regsub -all "." $file "_" node
|
||||||
set dir [file dirname $fullPath]
|
# set dir [file dirname $fullPath]
|
||||||
# EditFile .frmBody.frmCat.noteBook.ffiles.frmTreeFiles.treeFiles $node $fullPath
|
# # EditFile .frmBody.frmCat.noteBook.ffiles.frmTreeFiles.treeFiles $node $fullPath
|
||||||
# puts $fullPath
|
# # puts $fullPath
|
||||||
if ![info exists activeProject] {
|
# if ![info exists activeProject] {
|
||||||
set activeProject $fullPath
|
# set activeProject $fullPath
|
||||||
}
|
# }
|
||||||
.frmStatus.lblGitLogo configure -image git_logo_20x20
|
# .frmStatus.lblGitLogo configure -image git_logo_20x20
|
||||||
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
# .frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||||
return $fullPath
|
return $fullPath
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,36 +161,60 @@ namespace eval FileOper {
|
|||||||
set treeItem $parent
|
set treeItem $parent
|
||||||
set parent [$tree parent $treeItem]
|
set parent [$tree parent $treeItem]
|
||||||
}
|
}
|
||||||
|
set upper [Tree::GetUpperItem $tree $treeItem]
|
||||||
if {$parent eq "" && [string match "directory::*" $treeItem] == 1} {
|
if {$parent eq "" && [string match "directory::*" $treeItem] == 1} {
|
||||||
# puts "tree root item: $treeItem"
|
# puts "tree root item: $treeItem"
|
||||||
|
set proj [string trimleft $upper "directory::"]
|
||||||
foreach nbItem [$nbEditor tabs] {
|
foreach nbItem [$nbEditor tabs] {
|
||||||
set item [string trimleft [file extension $nbItem] "."]
|
set item [string trimleft [file extension $nbItem] "."]
|
||||||
# puts $item
|
# puts "$upper $item"
|
||||||
if [$tree exists "file::$item"] {
|
if [string match "$proj*" $item] {
|
||||||
$nbEditor select $nbItem
|
if [$tree exists "file::$item"] {
|
||||||
Close
|
$nbEditor select $nbItem
|
||||||
|
Close
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
set nextProj [$tree next $treeItem]
|
||||||
|
# puts $nextProj
|
||||||
|
set prevProj [$tree prev $treeItem]
|
||||||
|
# puts $prevProj
|
||||||
|
if {$nextProj ne ""} {
|
||||||
|
SetActiveProject [$tree item $nextProj -values]
|
||||||
|
# puts $activeProject
|
||||||
|
} elseif {$prevProj ne ""} {
|
||||||
|
SetActiveProject [$tree item $prevProj -values]
|
||||||
|
# puts $activeProject
|
||||||
|
} else {
|
||||||
|
unset activeProject
|
||||||
|
.frmStatus.lblGitLogo configure -image pixel
|
||||||
|
.frmStatus.lblGit configure -text ""
|
||||||
|
}
|
||||||
$tree delete $treeItem
|
$tree delete $treeItem
|
||||||
|
unset nextProj
|
||||||
|
unset prevProj
|
||||||
}
|
}
|
||||||
set activeProject ""
|
|
||||||
.frmStatus.lblGitLogo configure -image pixel
|
|
||||||
.frmStatus.lblGit configure -text ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc CloseAll {} {
|
proc CloseAll {} {
|
||||||
global nbEditor modified
|
global nbEditor modified
|
||||||
foreach nbItem [array names modified] {
|
foreach nb2Item [.frmWork.nbEditor2 tabs] {
|
||||||
if {$modified($nbItem) eq "true"} {
|
.frmWork.nbEditor2 forget $nb2Item
|
||||||
$nbEditor select $nbItem
|
}
|
||||||
# puts "close tab $nbItem"
|
if {[lsearch -exact [.frmWork.panelNB panes] .frmWork.nbEditor2] != -1} {
|
||||||
if {[Close] eq "cancel"} {return "cancel"}
|
.frmWork.panelNB forget .frmWork.nbEditor2
|
||||||
|
}
|
||||||
|
foreach nbItem [$nbEditor tabs] {
|
||||||
|
catch {$nbEditor select $nbItem}
|
||||||
|
if {[Close] eq "cancel"} {
|
||||||
|
return "cancel"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc Close {} {
|
proc Close {} {
|
||||||
global nbEditor modified tree
|
global nbEditor modified tree editors
|
||||||
set nbItem [$nbEditor select]
|
set nbItem [$nbEditor select]
|
||||||
# puts "close tab $nbItem"
|
# puts "close tab $nbItem"
|
||||||
|
|
||||||
@@ -130,8 +246,15 @@ namespace eval FileOper {
|
|||||||
$tree delete $treeItem
|
$tree delete $treeItem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unset modified($nbItem)
|
if [info exists modified($nbItem)] {
|
||||||
|
unset modified($nbItem)
|
||||||
|
}
|
||||||
|
# puts $nbItem
|
||||||
|
set editors [dict remove $editors $nbItem.frmText.t]
|
||||||
.frmStatus.lblPosition configure -text ""
|
.frmStatus.lblPosition configure -text ""
|
||||||
|
.frmStatus.lblEncoding configure -text ""
|
||||||
|
.frmStatus.lblSize configure -text ""
|
||||||
|
NB::NextTab $nbEditor 0
|
||||||
}
|
}
|
||||||
|
|
||||||
proc Save {} {
|
proc Save {} {
|
||||||
@@ -165,7 +288,7 @@ namespace eval FileOper {
|
|||||||
puts -nonewline $f $editedText
|
puts -nonewline $f $editedText
|
||||||
puts "$f was saved"
|
puts "$f was saved"
|
||||||
close $f
|
close $f
|
||||||
ResetModifiedFlag $nbEditorItem
|
ResetModifiedFlag $nbEditorItem $nbEditor
|
||||||
}
|
}
|
||||||
|
|
||||||
proc SaveAll {} {
|
proc SaveAll {} {
|
||||||
@@ -199,6 +322,9 @@ namespace eval FileOper {
|
|||||||
}
|
}
|
||||||
set parent [Tree::InsertItem $tree $parent $directory "directory" [file tail $directory]]
|
set parent [Tree::InsertItem $tree $parent $directory "directory" [file tail $directory]]
|
||||||
$tree selection set $parent
|
$tree selection set $parent
|
||||||
|
foreach i [$tree children $parent] {
|
||||||
|
$tree delete $i
|
||||||
|
}
|
||||||
# if {[ $tree item $parent -open] eq "false"} {
|
# if {[ $tree item $parent -open] eq "false"} {
|
||||||
# $tree item $parent -open true
|
# $tree item $parent -open true
|
||||||
# } else {
|
# } else {
|
||||||
@@ -266,23 +392,40 @@ namespace eval FileOper {
|
|||||||
$txt see 1.0
|
$txt see 1.0
|
||||||
}
|
}
|
||||||
|
|
||||||
proc Edit {fileFullPath} {
|
proc Edit {fileFullPath {nbEditor .frmWork.nbEditor}} {
|
||||||
global nbEditor tree
|
global tree
|
||||||
if {[file exists $fileFullPath] == 0} {
|
if {[file exists $fileFullPath] == 0} {
|
||||||
return false
|
return false
|
||||||
|
} else {
|
||||||
|
puts "$fileFullPath File type [::fileutil::magic::filetype $fileFullPath]"
|
||||||
|
set fileType [FileOper::GetFileMimeType $fileFullPath]
|
||||||
|
}
|
||||||
|
switch $fileType {
|
||||||
|
"text" {
|
||||||
|
# return text
|
||||||
|
}
|
||||||
|
"image" {
|
||||||
|
# return image
|
||||||
|
}
|
||||||
|
false {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set filePath [file dirname $fileFullPath]
|
set filePath [file dirname $fileFullPath]
|
||||||
set fileName [file tail $fileFullPath]
|
set fileName [file tail $fileFullPath]
|
||||||
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName
|
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName
|
||||||
set itemName "$nbEditor.$itemName"
|
set itemName "$nbEditor.$itemName"
|
||||||
set treeItemName [Tree::InsertItem $tree {} $fileFullPath "file" $fileName]
|
set treeItemName [Tree::InsertItem $tree {} $fileFullPath "file" $fileName]
|
||||||
|
|
||||||
|
# переместим указатель на нужный файл в дереве
|
||||||
|
Tree::SelectItem $treeItemName
|
||||||
|
|
||||||
if {[winfo exists $itemName] == 0} {
|
if {[winfo exists $itemName] == 0} {
|
||||||
NB::InsertItem $nbEditor $fileFullPath "file"
|
NB::InsertItem $nbEditor $fileFullPath "file"
|
||||||
Editor::Editor $fileFullPath $nbEditor $itemName
|
Editor::Editor $fileFullPath $nbEditor $itemName
|
||||||
ReadFile $fileFullPath $itemName
|
ReadFile $fileFullPath $itemName
|
||||||
$itemName.frmText.t highlight 1.0 end
|
$itemName.frmText.t highlight 1.0 end
|
||||||
ResetModifiedFlag $itemName
|
ResetModifiedFlag $itemName $nbEditor
|
||||||
$itemName.frmText.t see 1.1
|
$itemName.frmText.t see 1.1
|
||||||
}
|
}
|
||||||
$nbEditor select $itemName
|
$nbEditor select $itemName
|
||||||
@@ -291,7 +434,8 @@ namespace eval FileOper {
|
|||||||
$itemName.frmText.t.t mark set insert 1.0
|
$itemName.frmText.t.t mark set insert 1.0
|
||||||
$itemName.frmText.t.t see 1.0
|
$itemName.frmText.t.t see 1.0
|
||||||
focus -force $itemName.frmText.t.t
|
focus -force $itemName.frmText.t.t
|
||||||
|
.frmStatus.lblSize configure -text [GetFileAttr $fileFullPath "size"]
|
||||||
|
.frmStatus.lblEncoding configure -text [GetFileMimeType $fileFullPath "charset"]
|
||||||
return $itemName
|
return $itemName
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,13 +453,14 @@ namespace eval FileOper {
|
|||||||
set selBegin [lindex [$txt tag ranges sel] 0]
|
set selBegin [lindex [$txt tag ranges sel] 0]
|
||||||
set selEnd [lindex [$txt tag ranges sel] 1]
|
set selEnd [lindex [$txt tag ranges sel] 1]
|
||||||
set str [$txt get $selBegin $selEnd]
|
set str [$txt get $selBegin $selEnd]
|
||||||
puts $str
|
# puts $str
|
||||||
set res [SearchStringInFolder $str]
|
set res [SearchStringInFolder $str]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FindInFilesDialog $txt $res
|
if [FindInFilesDialog $txt $res] {
|
||||||
.find.entryFind delete 0 end
|
.find.entryFind delete 0 end
|
||||||
.find.entryFind insert end $str
|
.find.entryFind insert end $str
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc ReplaceInFiles {} {
|
proc ReplaceInFiles {} {
|
||||||
|
509
lib/git.tcl
509
lib/git.tcl
@@ -12,8 +12,8 @@
|
|||||||
namespace eval Git {
|
namespace eval Git {
|
||||||
variable gitCommand
|
variable gitCommand
|
||||||
|
|
||||||
proc GetConfig {} {
|
proc GetConfig {option} {
|
||||||
global activeProject
|
global activeProject cfgVariables
|
||||||
set confOptions {
|
set confOptions {
|
||||||
remote.origin.url
|
remote.origin.url
|
||||||
user.user
|
user.user
|
||||||
@@ -21,9 +21,31 @@ namespace eval Git {
|
|||||||
init.defaultbranch
|
init.defaultbranch
|
||||||
branch.master.remote
|
branch.master.remote
|
||||||
}
|
}
|
||||||
|
if {$activeProject ne ""} {
|
||||||
|
cd $activeProject
|
||||||
|
}
|
||||||
|
|
||||||
|
set cmd exec
|
||||||
|
lappend cmd $cfgVariables(gitCommand)
|
||||||
|
lappend cmd "config"
|
||||||
|
switch $option {
|
||||||
|
all {
|
||||||
|
lappend cmd "-l"
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
lappend cmd "--get"
|
||||||
|
lappend cmd "$option"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# lappend cmd $activeProject
|
||||||
|
catch $cmd pipe
|
||||||
|
foreach line [split $pipe "\n"] {
|
||||||
|
lappend res $line
|
||||||
|
}
|
||||||
|
return $res
|
||||||
}
|
}
|
||||||
|
|
||||||
proc Branches {opt} {
|
proc Checkout {opt {ent ".branch.entBranch"}} {
|
||||||
global cfgVariables activeProject
|
global cfgVariables activeProject
|
||||||
set cmd exec
|
set cmd exec
|
||||||
set d [pwd]
|
set d [pwd]
|
||||||
@@ -31,6 +53,55 @@ namespace eval Git {
|
|||||||
cd $activeProject
|
cd $activeProject
|
||||||
}
|
}
|
||||||
lappend cmd $cfgVariables(gitCommand)
|
lappend cmd $cfgVariables(gitCommand)
|
||||||
|
lappend cmd "checkout"
|
||||||
|
# lappend cmd "-s"
|
||||||
|
# lappend cmd "--"
|
||||||
|
# lappend cmd $activeProject
|
||||||
|
switch $opt {
|
||||||
|
switchBranch {
|
||||||
|
set branch [.branch.lBox get [.branch.lBox curselection]]
|
||||||
|
lappend cmd "[string trim $branch]"
|
||||||
|
}
|
||||||
|
new {
|
||||||
|
lappend cmd "-b"
|
||||||
|
lappend cmd "[$ent get]"
|
||||||
|
# puts "Branch [$ent get]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch $cmd pipe
|
||||||
|
puts $cmd
|
||||||
|
puts $pipe
|
||||||
|
if [regexp -nocase -- {^error:} $pipe match] {
|
||||||
|
ShowMessage "Command: '$cmd' error" $pipe
|
||||||
|
return
|
||||||
|
}
|
||||||
|
foreach line [split $pipe "\n"] {
|
||||||
|
lappend res $line
|
||||||
|
}
|
||||||
|
# cd $d
|
||||||
|
|
||||||
|
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||||
|
FileOper::ReadFolder $activeProject
|
||||||
|
|
||||||
|
if [info exists res] {
|
||||||
|
return $res
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc Branches {opt} {
|
||||||
|
global cfgVariables activeProject
|
||||||
|
set cmd exec
|
||||||
|
set d [pwd]
|
||||||
|
if {$activeProject ne "" && [file isdirectory $activeProject] == 1} {
|
||||||
|
cd $activeProject
|
||||||
|
if ![file exists .git] {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
puts $activeProject
|
||||||
|
lappend cmd $cfgVariables(gitCommand)
|
||||||
lappend cmd "branch"
|
lappend cmd "branch"
|
||||||
# lappend cmd "-s"
|
# lappend cmd "-s"
|
||||||
# lappend cmd "--"
|
# lappend cmd "--"
|
||||||
@@ -45,6 +116,7 @@ namespace eval Git {
|
|||||||
}
|
}
|
||||||
catch $cmd pipe
|
catch $cmd pipe
|
||||||
if [regexp -nocase -- {^fatal:} $pipe match] {
|
if [regexp -nocase -- {^fatal:} $pipe match] {
|
||||||
|
ShowMessage "Command: '$cmd' error" $pipe
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
foreach line [split $pipe "\n"] {
|
foreach line [split $pipe "\n"] {
|
||||||
@@ -58,6 +130,14 @@ namespace eval Git {
|
|||||||
|
|
||||||
proc Status {} {
|
proc Status {} {
|
||||||
global cfgVariables activeProject
|
global cfgVariables activeProject
|
||||||
|
if [file isdirectory $activeProject] {
|
||||||
|
cd $activeProject
|
||||||
|
if ![file exists .git] {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
set cmd exec
|
set cmd exec
|
||||||
lappend cmd $cfgVariables(gitCommand)
|
lappend cmd $cfgVariables(gitCommand)
|
||||||
lappend cmd "status"
|
lappend cmd "status"
|
||||||
@@ -65,7 +145,9 @@ namespace eval Git {
|
|||||||
lappend cmd "--"
|
lappend cmd "--"
|
||||||
lappend cmd $activeProject
|
lappend cmd $activeProject
|
||||||
catch $cmd pipe
|
catch $cmd pipe
|
||||||
|
puts $cmd
|
||||||
if [regexp -nocase -- {^fatal:} $pipe match] {
|
if [regexp -nocase -- {^fatal:} $pipe match] {
|
||||||
|
ShowMessage "Command: '$cmd' error" $pipe
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
foreach line [split $pipe "\n"] {
|
foreach line [split $pipe "\n"] {
|
||||||
@@ -79,6 +161,7 @@ namespace eval Git {
|
|||||||
proc Diff {f} {
|
proc Diff {f} {
|
||||||
global cfgVariables activeProject
|
global cfgVariables activeProject
|
||||||
set cmd exec
|
set cmd exec
|
||||||
|
set res ""
|
||||||
lappend cmd $cfgVariables(gitCommand)
|
lappend cmd $cfgVariables(gitCommand)
|
||||||
lappend cmd "diff"
|
lappend cmd "diff"
|
||||||
lappend cmd "--"
|
lappend cmd "--"
|
||||||
@@ -86,6 +169,7 @@ namespace eval Git {
|
|||||||
catch $cmd pipe
|
catch $cmd pipe
|
||||||
puts $cmd
|
puts $cmd
|
||||||
if [regexp -nocase -- {^fatal:} $pipe match] {
|
if [regexp -nocase -- {^fatal:} $pipe match] {
|
||||||
|
ShowMessage "Command: '$cmd' error" $pipe
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
foreach line [split $pipe "\n"] {
|
foreach line [split $pipe "\n"] {
|
||||||
@@ -96,16 +180,21 @@ namespace eval Git {
|
|||||||
|
|
||||||
proc Commit {w} {
|
proc Commit {w} {
|
||||||
global cfgVariables activeProject
|
global cfgVariables activeProject
|
||||||
set txt [string trim [$w get 0.0 end]]
|
set txt $w.body.tCommit
|
||||||
puts $txt
|
set listBox $w.body.lCommit
|
||||||
|
set description [string trim [$txt get 0.0 end]]
|
||||||
|
puts $description
|
||||||
set cmd exec
|
set cmd exec
|
||||||
append cmd " $cfgVariables(gitCommand)"
|
append cmd " $cfgVariables(gitCommand)"
|
||||||
append cmd " commit"
|
append cmd " commit"
|
||||||
append cmd " -m"
|
append cmd " -m"
|
||||||
append cmd " \"$txt\""
|
regsub -all {\"|\'} $description {'} description
|
||||||
|
append cmd " \"$description\""
|
||||||
append cmd " --"
|
append cmd " --"
|
||||||
append cmd " $activeProject"
|
foreach item [$listBox get 0 [$listBox size]] {
|
||||||
if {$txt eq ""} {
|
append cmd " [file join $activeProject $item]"
|
||||||
|
}
|
||||||
|
if {$description eq ""} {
|
||||||
set answer [tk_messageBox -message [::msgcat::mc "Empty commit description"] \
|
set answer [tk_messageBox -message [::msgcat::mc "Empty commit description"] \
|
||||||
-icon info -type ok \
|
-icon info -type ok \
|
||||||
-detail [::msgcat::mc "You must enter a commit description"]]
|
-detail [::msgcat::mc "You must enter a commit description"]]
|
||||||
@@ -114,9 +203,11 @@ namespace eval Git {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
puts $cmd
|
puts $cmd
|
||||||
|
puts $description
|
||||||
catch $cmd pipe
|
catch $cmd pipe
|
||||||
puts $pipe
|
puts $pipe
|
||||||
if [regexp -nocase -- {^fatal:} $pipe match] {
|
if [regexp -nocase -- {^fatal:} $pipe match] {
|
||||||
|
ShowMessage "Command: '$cmd' error" $pipe
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
foreach line [split $pipe "\n"] {
|
foreach line [split $pipe "\n"] {
|
||||||
@@ -130,8 +221,43 @@ namespace eval Git {
|
|||||||
global cfgVariables activeProject
|
global cfgVariables activeProject
|
||||||
}
|
}
|
||||||
|
|
||||||
proc Push {} {
|
# Вызов диалога авторизации если ссылка на репу по http
|
||||||
global cfgVariables activeProject
|
# Если ссылка по ssh то вызов Push
|
||||||
|
proc PushPrepare {} {
|
||||||
|
global cfgVariables activeProject gitUser gitPassword
|
||||||
|
# set cmd exec
|
||||||
|
cd $activeProject
|
||||||
|
set url [Git::GetConfig remote.origin.url]
|
||||||
|
puts $url
|
||||||
|
if [regexp -nocase -all -- {^(http|https)://(.+)} $url match proto address] {
|
||||||
|
Git::AuthorizationDialog "[::msgcat::mc "Authorization required"] [::msgcat::mc "for"] Git" $url
|
||||||
|
} else {
|
||||||
|
Git::Push $url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# /usr/bin/git push https://user:pass@git.nuk-svk.ru/repo.git
|
||||||
|
# /usr/bin/git push ssh://git@git.nuk-svk.ru/repo.git
|
||||||
|
proc Push {url} {
|
||||||
|
global cfgVariables activeProject gitUser gitPassword
|
||||||
|
set cmd exec
|
||||||
|
lappend cmd "$cfgVariables(gitCommand)"
|
||||||
|
cd $activeProject
|
||||||
|
lappend cmd "push"
|
||||||
|
lappend cmd "$url"
|
||||||
|
# lappend cmd "$activeProject"
|
||||||
|
# puts "$cmd"
|
||||||
|
catch $cmd pipe
|
||||||
|
puts $pipe
|
||||||
|
if [regexp -nocase -- {^fatal:} $pipe match] {
|
||||||
|
ShowMessage "Command: '$cmd' error" $pipe
|
||||||
|
return
|
||||||
|
}
|
||||||
|
foreach line [split $pipe "\n"] {
|
||||||
|
# puts "$line"
|
||||||
|
lappend res $line
|
||||||
|
}
|
||||||
|
return $res
|
||||||
}
|
}
|
||||||
|
|
||||||
proc Merge {} {
|
proc Merge {} {
|
||||||
@@ -158,7 +284,28 @@ namespace eval Git {
|
|||||||
return $res
|
return $res
|
||||||
}
|
}
|
||||||
|
|
||||||
# git show --pretty=format:"%h;%ad;%s"
|
proc Reset {w} {
|
||||||
|
global activeProject cfgVariables
|
||||||
|
# puts $values
|
||||||
|
set selectedItems [$w.body.lCommit curselection]
|
||||||
|
if {$selectedItems eq ""} {return}
|
||||||
|
set cmd exec
|
||||||
|
lappend cmd $cfgVariables(gitCommand)
|
||||||
|
lappend cmd "reset"
|
||||||
|
foreach itemNumber [lsort -integer -increasing $selectedItems] {
|
||||||
|
set fileName [$w.body.lCommit get $itemNumber]
|
||||||
|
$w.body.lBox insert end $fileName
|
||||||
|
lappend cmd [file join $activeProject $fileName]
|
||||||
|
}
|
||||||
|
foreach itemNumber [lsort -integer -decreasing $selectedItems] {
|
||||||
|
$w.body.lCommit delete $itemNumber
|
||||||
|
}
|
||||||
|
catch $cmd pipe
|
||||||
|
puts $cmd
|
||||||
|
$w.body.t delete 1.0 end
|
||||||
|
}
|
||||||
|
|
||||||
|
# git show --pretty=format:"%h;%ad;%s"
|
||||||
proc Show {w} {
|
proc Show {w} {
|
||||||
global cfgVariables activeProject
|
global cfgVariables activeProject
|
||||||
set commitString [$w.body.lLog get [$w.body.lLog curselection]]
|
set commitString [$w.body.lLog get [$w.body.lLog curselection]]
|
||||||
@@ -199,11 +346,14 @@ namespace eval Git {
|
|||||||
|
|
||||||
proc ListBoxPress {w} {
|
proc ListBoxPress {w} {
|
||||||
if {[$w.body.lBox curselection] ne ""} {
|
if {[$w.body.lBox curselection] ne ""} {
|
||||||
set fileName [$w.body.lBox get [$w.body.lBox curselection]]
|
if {[llength [$w.body.lBox curselection]] == 1} {
|
||||||
|
set fileName [$w.body.lBox get [$w.body.lBox curselection]]
|
||||||
|
} else {
|
||||||
|
set fileName [$w.body.lBox get [$w.body.lBox index active]]
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
# puts $values
|
|
||||||
$w.body.t delete 1.0 end
|
$w.body.t delete 1.0 end
|
||||||
set i 0
|
set i 0
|
||||||
foreach line [Git::Diff $fileName] {
|
foreach line [Git::Diff $fileName] {
|
||||||
@@ -217,17 +367,73 @@ namespace eval Git {
|
|||||||
}
|
}
|
||||||
proc CommitAdd {w} {
|
proc CommitAdd {w} {
|
||||||
global activeProject cfgVariables
|
global activeProject cfgVariables
|
||||||
set fileName [$w.body.lBox get [$w.body.lBox curselection]]
|
|
||||||
# puts $values
|
# puts $values
|
||||||
|
set selectedItems [$w.body.lBox curselection]
|
||||||
set cmd exec
|
set cmd exec
|
||||||
lappend cmd $cfgVariables(gitCommand)
|
lappend cmd $cfgVariables(gitCommand)
|
||||||
lappend cmd "add"
|
lappend cmd "add"
|
||||||
lappend cmd [file join $activeProject $fileName]
|
foreach itemNumber [lsort -integer -increasing $selectedItems] {
|
||||||
|
set fileName [$w.body.lBox get $itemNumber]
|
||||||
|
lappend cmd [file join $activeProject $fileName]
|
||||||
|
$w.body.lCommit insert end $fileName
|
||||||
|
}
|
||||||
|
foreach itemNumber [lsort -integer -decreasing $selectedItems] {
|
||||||
|
$w.body.lBox delete $itemNumber
|
||||||
|
}
|
||||||
catch $cmd pipe
|
catch $cmd pipe
|
||||||
puts $cmd
|
puts $cmd
|
||||||
$w.body.lCommit insert end $fileName
|
$w.body.t delete 1.0 end
|
||||||
$w.body.lBox delete [$w.body.lBox curselection]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc Clone {repo dir} {
|
||||||
|
global activeProject cfgVariables
|
||||||
|
# puts $values
|
||||||
|
set cmd exec
|
||||||
|
lappend cmd $cfgVariables(gitCommand)
|
||||||
|
lappend cmd "clone"
|
||||||
|
lappend cmd $repo
|
||||||
|
lappend cmd $dir
|
||||||
|
puts $cmd
|
||||||
|
|
||||||
|
catch $cmd pipe
|
||||||
|
puts $pipe
|
||||||
|
return
|
||||||
|
}
|
||||||
|
proc Config {repo user email} {
|
||||||
|
global activeProject cfgVariables
|
||||||
|
# puts $values
|
||||||
|
set cmd exec
|
||||||
|
lappend cmd $cfgVariables(gitCommand)
|
||||||
|
lappend cmd "config"
|
||||||
|
lappend cmd $repo
|
||||||
|
lappend cmd $dir
|
||||||
|
puts $cmd
|
||||||
|
|
||||||
|
# catch $cmd pipe
|
||||||
|
# puts $pipe
|
||||||
|
return
|
||||||
|
}
|
||||||
|
proc Init {} {
|
||||||
|
global activeProject cfgVariables
|
||||||
|
# puts $values
|
||||||
|
if [file isdirectory $activeProject] {
|
||||||
|
cd $activeProject
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
set cmd exec
|
||||||
|
lappend cmd $cfgVariables(gitCommand)
|
||||||
|
lappend cmd "init"
|
||||||
|
lappend cmd $activeProject
|
||||||
|
puts $cmd
|
||||||
|
|
||||||
|
catch $cmd pipe
|
||||||
|
if [regexp -nocase -- {^fatal:} $pipe match] {
|
||||||
|
ShowMessage "Command: '$cmd' error" $pipe
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
proc Key {k fr} {
|
proc Key {k fr} {
|
||||||
# puts [Editor::Key $k]
|
# puts [Editor::Key $k]
|
||||||
switch $k {
|
switch $k {
|
||||||
@@ -243,15 +449,17 @@ namespace eval Git {
|
|||||||
proc DialogUpdate {w} {
|
proc DialogUpdate {w} {
|
||||||
global activeProject
|
global activeProject
|
||||||
# Git repo status
|
# Git repo status
|
||||||
|
set lblText "$activeProject | [::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||||
|
$w.header.lblGit configure -text $lblText
|
||||||
$w.body.t delete 1.0 end
|
$w.body.t delete 1.0 end
|
||||||
$w.body.tCommit delete 1.0 end
|
$w.body.tCommit delete 1.0 end
|
||||||
$w.body.lCommit delete 0 end
|
$w.body.lCommit delete 0 end
|
||||||
$w.body.lBox delete 0 end
|
$w.body.lBox delete 0 end
|
||||||
$w.body.lLog delete 0 end
|
$w.body.lLog delete 0 end
|
||||||
foreach { word } [Git::Status] {
|
foreach { word } [Git::Status] {
|
||||||
# puts $word
|
puts ">>$word"
|
||||||
if [regexp -nocase -- {([\w\s])([\s\w?]+)\s../(.+?)} $word match v1 v2 fileName] {
|
if [regexp -nocase -- {([\w\s]+)([\s\w?]+)\s(../|)(.+?)} $word match v1 v2 v3 fileName] {
|
||||||
# puts "$v1 $v2 $fileName"
|
puts "$v1 $v2 $fileName"
|
||||||
# $fr.body.t delete 1.0 end
|
# $fr.body.t delete 1.0 end
|
||||||
if {$v1 ne " "} {
|
if {$v1 ne " "} {
|
||||||
$w.body.lCommit insert end $fileName
|
$w.body.lCommit insert end $fileName
|
||||||
@@ -267,25 +475,243 @@ namespace eval Git {
|
|||||||
# puts $line
|
# puts $line
|
||||||
$w.body.lLog insert end $line
|
$w.body.lLog insert end $line
|
||||||
}
|
}
|
||||||
# End Git commit history
|
focus -force $w.body.lBox
|
||||||
|
catch {
|
||||||
|
$w.body.lBox activate 0
|
||||||
|
$w.body.lBox selection set 0 0
|
||||||
|
Git::ListBoxPress $w
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc AddToplevel {lbl img {win_name .auth}} {
|
||||||
|
set cmd "destroy $win_name"
|
||||||
|
if [winfo exists $win_name] {destroy $win_name}
|
||||||
|
toplevel $win_name
|
||||||
|
wm transient $win_name .
|
||||||
|
wm title $win_name [::msgcat::mc "Add record"]
|
||||||
|
# wm iconphoto $win_name tcl
|
||||||
|
ttk::label $win_name.lbl -image $img -anchor nw
|
||||||
|
|
||||||
|
set frm [ttk::labelframe $win_name.frm -text $lbl -labelanchor nw]
|
||||||
|
grid columnconfigure $frm 0 -weight 1
|
||||||
|
grid rowconfigure $frm 0 -weight 1
|
||||||
|
set frm_btn [ttk::frame $win_name.frm_btn ]
|
||||||
|
ttk::button $frm_btn.btn_ok -image done_20x20 -command { }
|
||||||
|
ttk::button $frm_btn.btn_cancel -command $cmd -image cancel_20x20
|
||||||
|
grid $win_name.lbl -row 0 -column 0 -sticky nsw -padx 0 -pady 1 -rowspan 2
|
||||||
|
grid $frm -row 0 -column 1 -sticky nw -padx 2 -pady 2
|
||||||
|
grid $frm_btn -row 1 -column 1 -sticky sew -padx 0 -pady 0
|
||||||
|
pack $frm_btn.btn_cancel $frm_btn.btn_ok -side right -padx 5 -pady 5
|
||||||
|
#pack $frm_btn.btn_ok -side right -padx 2
|
||||||
|
bind $win_name <Escape> $cmd
|
||||||
|
return $frm
|
||||||
|
}
|
||||||
|
proc GetAuthData {url} {
|
||||||
|
global gitUser gitPassword
|
||||||
|
# puts [.auth_win.frm.ent_name get]
|
||||||
|
# puts [.auth_win.frm.ent_pwd get]
|
||||||
|
set gitUser [.auth_win.frm.ent_name get]
|
||||||
|
set gitPassword [.auth_win.frm.ent_pwd get]
|
||||||
|
if [regexp -nocase -all -- {^(http|https)://(.+)} $url match proto address] {
|
||||||
|
|
||||||
|
# puts $gitUser
|
||||||
|
# puts $gitPassword
|
||||||
|
if {$gitUser ne ""} {
|
||||||
|
append repoUrl "$proto"
|
||||||
|
append repoUrl "://"
|
||||||
|
append repoUrl "$gitUser"
|
||||||
|
}
|
||||||
|
if {$gitPassword ne ""} {
|
||||||
|
append repoUrl ":$gitPassword"
|
||||||
|
append repoUrl "@$address"
|
||||||
|
}
|
||||||
|
# puts $repoUrl
|
||||||
|
Git::Push $repoUrl
|
||||||
|
}
|
||||||
|
destroy .auth_win
|
||||||
|
}
|
||||||
|
proc AuthorizationDialog {txt url} {
|
||||||
|
global gitUser gitPassword
|
||||||
|
set frm [Git::AddToplevel "$txt" key_64x64 .auth_win]
|
||||||
|
wm title .auth_win [::msgcat::mc "Authorization"]
|
||||||
|
ttk::label $frm.lbl_name -text [::msgcat::mc "User name"]
|
||||||
|
ttk::entry $frm.ent_name
|
||||||
|
ttk::label $frm.lbl_pwd -text [::msgcat::mc "Password"]
|
||||||
|
ttk::entry $frm.ent_pwd
|
||||||
|
|
||||||
|
grid $frm.lbl_name -row 0 -column 0 -sticky nw -padx 5 -pady 5
|
||||||
|
grid $frm.ent_name -row 0 -column 1 -sticky nsew -padx 5 -pady 5
|
||||||
|
grid $frm.lbl_pwd -row 1 -column 0 -sticky nw -padx 5 -pady 5
|
||||||
|
grid $frm.ent_pwd -row 1 -column 1 -sticky nsew -padx 5 -pady 5
|
||||||
|
grid columnconfigure $frm 0 -weight 1
|
||||||
|
grid rowconfigure $frm 0 -weight 1
|
||||||
|
#set frm_btn [frame .add.frm_btn -border 0]
|
||||||
|
.auth_win.frm_btn.btn_ok configure -command "Git::GetAuthData $url"
|
||||||
|
}
|
||||||
|
|
||||||
|
proc BranchDialog {x y} {
|
||||||
|
global editors lexers newBranchName
|
||||||
|
variable win
|
||||||
|
# set txt $w.frmText.t
|
||||||
|
set win .branch
|
||||||
|
# set x [winfo rootx .frmWork]
|
||||||
|
# set y [winfo rooty .frmWork]
|
||||||
|
|
||||||
|
if { [winfo exists $win] } { destroy $win }
|
||||||
|
toplevel $win
|
||||||
|
wm transient $win .
|
||||||
|
wm overrideredirect $win 1
|
||||||
|
ttk::button $win.bAdd -image new_14x14 -compound left -text "[::msgcat::mc "Add new branch"]" \
|
||||||
|
-command {
|
||||||
|
grid forget .branch.lBox .branch.yscroll
|
||||||
|
grid .branch.entBranch
|
||||||
|
bind .branch <Return> "Git::Checkout new .branch.entBranch; destroy .branch"
|
||||||
|
}
|
||||||
|
ttk::entry $win.entBranch -textvariable newBranchName
|
||||||
|
|
||||||
|
listbox $win.lBox -width 30 -border 2 -yscrollcommand "$win.yscroll set" -border 1
|
||||||
|
ttk::scrollbar $win.yscroll -orient vertical -command "$win.lBox yview"
|
||||||
|
# pack $win.lBox -expand true -fill y -side left
|
||||||
|
# pack $win.yscroll -side left -expand false -fill y
|
||||||
|
grid $win.bAdd -column 0 -row 0 -columnspan 2 -sticky new
|
||||||
|
grid $win.lBox -column 0 -row 1
|
||||||
|
grid $win.yscroll -column 1 -row 1 -sticky nsw
|
||||||
|
|
||||||
|
set lst [Git::Branches all]
|
||||||
|
foreach { word } $lst {
|
||||||
|
$win.lBox insert end $word
|
||||||
|
}
|
||||||
|
|
||||||
|
focus -force $win.lBox
|
||||||
|
catch { $win.lBox activate 0 ; $win.lBox selection set 0 0 }
|
||||||
|
|
||||||
|
if { [set height [llength $lst]] > 10 } { set height 10 }
|
||||||
|
$win.lBox configure -height $height
|
||||||
|
|
||||||
|
bind $win <Escape> {
|
||||||
|
destroy .branch
|
||||||
|
break
|
||||||
|
}
|
||||||
|
bind $win.lBox <Escape> {
|
||||||
|
destroy .branch
|
||||||
|
break
|
||||||
|
}
|
||||||
|
bind $win.lBox <Return> {
|
||||||
|
Git::Checkout switchBranch
|
||||||
|
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||||
|
destroy .branch
|
||||||
|
}
|
||||||
|
bind $win.lBox <Any-Key> {}
|
||||||
|
bind $win.lBox <Double-Button-1> {
|
||||||
|
Git::Checkout switchBranch
|
||||||
|
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||||
|
destroy .branch
|
||||||
|
}
|
||||||
|
|
||||||
|
# Определям расстояние до края экрана (основного окна) и если
|
||||||
|
# оно меньше размера окна со списком то сдвигаем его вверх
|
||||||
|
set winGeom [winfo reqheight $win]
|
||||||
|
set topHeight [winfo height .]
|
||||||
|
# puts "$x, $y, $winGeom, $topHeight"
|
||||||
|
if [expr [expr $topHeight - $y] < $winGeom] {
|
||||||
|
set y [expr $topHeight - $winGeom]
|
||||||
|
}
|
||||||
|
wm geom $win +$x+$y
|
||||||
|
}
|
||||||
|
|
||||||
|
proc CloneDialog {} {
|
||||||
|
global activeProject
|
||||||
|
set win .clone
|
||||||
|
set x [winfo rootx .frmWork]
|
||||||
|
set y [winfo rooty .frmWork]
|
||||||
|
|
||||||
|
if { [winfo exists $win] } {
|
||||||
|
destroy $win
|
||||||
|
return
|
||||||
|
}
|
||||||
|
toplevel $win
|
||||||
|
|
||||||
|
wm transient $win .
|
||||||
|
wm overrideredirect $win 1
|
||||||
|
|
||||||
|
ttk::entry $win.entUrl
|
||||||
|
ttk::entry $win.entFolder
|
||||||
|
ttk::button $win.btnFolder -image folder -command {
|
||||||
|
set folderPath [tk_chooseDirectory -initialdir $env(HOME) -parent .]
|
||||||
|
.clone.entFolder insert end $folderPath
|
||||||
|
}
|
||||||
|
|
||||||
|
ttk::button $win.btnClone -compound left -image done_20x20 \
|
||||||
|
-text [::msgcat::mc "Clone repository"] \
|
||||||
|
-command {
|
||||||
|
set folderPath [.clone.entFolder get]
|
||||||
|
set repo [.clone.entUrl get]
|
||||||
|
if {$repo eq ""} {return}
|
||||||
|
if {$folderPath eq ""} {
|
||||||
|
set folderPath [tk_chooseDirectory -initialdir $env(HOME) -parent .]
|
||||||
|
if {$folderPath eq ""} {return}
|
||||||
|
}
|
||||||
|
set repoDir [file join $folderPath [string trimright [file rootname [file tail $repo]] "."]]
|
||||||
|
Git::Clone $repo $repoDir
|
||||||
|
FileOper::ReadFolder $repoDir
|
||||||
|
ReadFilesFromDirectory $repoDir $repoDir
|
||||||
|
destroy .clone
|
||||||
|
}
|
||||||
|
|
||||||
|
ttk::button $win.btnInit -compound left -image new_20x20 \
|
||||||
|
-text [::msgcat::mc "Init repository"] -command {
|
||||||
|
Git::Init
|
||||||
|
FileOper::ReadFolder $activeProject
|
||||||
|
ReadFilesFromDirectory $activeProject $activeProject
|
||||||
|
destroy .clone
|
||||||
|
}
|
||||||
|
if ![info exists activeProject] {
|
||||||
|
$win.btnInit configure -state disable
|
||||||
|
}
|
||||||
|
grid $win.entUrl -row 0 -column 0 -columnspan 2 -sticky new
|
||||||
|
grid $win.entFolder -row 1 -column 0 -sticky new
|
||||||
|
grid $win.btnFolder -row 1 -column 1 -sticky ew
|
||||||
|
grid $win.btnClone -row 2 -column 0 -columnspan 2 -sticky new
|
||||||
|
grid $win.btnInit -row 3 -column 0 -columnspan 2 -sticky new
|
||||||
|
|
||||||
|
bind $win <Escape> "destroy $win"
|
||||||
|
|
||||||
|
# Определям расстояние до края экрана (основного окна) и если
|
||||||
|
# оно меньше размера окна со списком то сдвигаем его вверх
|
||||||
|
set winGeom [winfo reqheight $win]
|
||||||
|
set topHeight [winfo height .]
|
||||||
|
# puts "$x, $y, $winGeom, $topHeight"
|
||||||
|
if [expr [expr $topHeight - $y] < $winGeom] {
|
||||||
|
set y [expr $topHeight - $winGeom]
|
||||||
|
}
|
||||||
|
wm geom $win +$x+$y
|
||||||
|
focus $win.entUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
proc Dialog {} {
|
proc Dialog {} {
|
||||||
global cfgVariables activeProject nbEditor
|
global cfgVariables activeProject nbEditor
|
||||||
variable fr
|
variable fr
|
||||||
if [winfo exists $nbEditor.git_browse] {
|
if [winfo exists $nbEditor.git_browse] {
|
||||||
$nbEditor select $nbEditor.git_browse
|
if {[$nbEditor select] eq "$nbEditor.git_browse"} {
|
||||||
|
destroy $nbEditor.git_browse
|
||||||
|
} else {
|
||||||
|
$nbEditor select $nbEditor.git_browse
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if {[info exists activeProject] == 0} {
|
if {[info exists activeProject] == 0 || [file exists [file join $activeProject .git]] == 0} {
|
||||||
|
Git::CloneDialog
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
set fr [NB::InsertItem $nbEditor git_browse "git"]
|
set fr [NB::InsertItem $nbEditor git_browse "git"]
|
||||||
ttk::frame $fr.header
|
ttk::frame $fr.header
|
||||||
set lblName "lblGit"
|
|
||||||
set lblText "$activeProject | [::msgcat::mc "Branch"]: [Git::Branches current]"
|
set lblText "$activeProject | [::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||||
ttk::label $fr.header.$lblName -text $lblText -justify right
|
ttk::label $fr.header.lblGit -text $lblText -justify right
|
||||||
pack $fr.header.$lblName -side right -expand true -fill x
|
ttk::button $fr.header.btnRefresh -image refresh_11x11 \
|
||||||
|
-command "Git::DialogUpdate $fr"
|
||||||
|
pack $fr.header.lblGit -side left -expand true -fill x
|
||||||
|
pack $fr.header.btnRefresh -side right
|
||||||
pack $fr.header -side top -fill x -padx 3
|
pack $fr.header -side top -fill x -padx 3
|
||||||
|
|
||||||
ttk::frame $fr.body
|
ttk::frame $fr.body
|
||||||
@@ -294,7 +720,8 @@ namespace eval Git {
|
|||||||
ttk::label $fr.body.lblUnindexed -justify left -padding {3 3} \
|
ttk::label $fr.body.lblUnindexed -justify left -padding {3 3} \
|
||||||
-text "[::msgcat::mc "Unindexed changes"]:"
|
-text "[::msgcat::mc "Unindexed changes"]:"
|
||||||
|
|
||||||
listbox $fr.body.lBox -border 0 -yscrollcommand "$fr.body.yscroll set" -width 10
|
listbox $fr.body.lBox -selectmode extended -border 0 \
|
||||||
|
-yscrollcommand "$fr.body.yscroll set" -width 10
|
||||||
ttk::scrollbar $fr.body.yscroll -orient vertical -command "$fr.body.lBox yview"
|
ttk::scrollbar $fr.body.yscroll -orient vertical -command "$fr.body.lBox yview"
|
||||||
|
|
||||||
# pack [ttk::scrollbar $fr.body.v -command "$fr.body.t yview"] -side right -fill y
|
# pack [ttk::scrollbar $fr.body.v -command "$fr.body.t yview"] -side right -fill y
|
||||||
@@ -307,11 +734,13 @@ namespace eval Git {
|
|||||||
|
|
||||||
ttk::button $fr.body.bAdd -image forward_20x20 -compound center \
|
ttk::button $fr.body.bAdd -image forward_20x20 -compound center \
|
||||||
-command "Git::CommitAdd $fr"
|
-command "Git::CommitAdd $fr"
|
||||||
ttk::button $fr.body.bRemove -compound center -image backward_20x20
|
ttk::button $fr.body.bRemove -compound center -image backward_20x20 \
|
||||||
|
-command "Git::Reset $fr"
|
||||||
ttk::label $fr.body.lblCommitText -padding {3 3} \
|
ttk::label $fr.body.lblCommitText -padding {3 3} \
|
||||||
-text "[::msgcat::mc "Commit description"]:"
|
-text "[::msgcat::mc "Commit description"]:"
|
||||||
|
|
||||||
listbox $fr.body.lCommit -border 0 -yscrollcommand "$fr.body.vlCommit set"
|
listbox $fr.body.lCommit -selectmode multiple -border 0 \
|
||||||
|
-yscrollcommand "$fr.body.vlCommit set"
|
||||||
ttk::scrollbar $fr.body.vlCommit -orient vertical -command "$fr.body.lCommit yview"
|
ttk::scrollbar $fr.body.vlCommit -orient vertical -command "$fr.body.lCommit yview"
|
||||||
ttk::scrollbar $fr.body.vCommit -command "$fr.body.tCommit yview"
|
ttk::scrollbar $fr.body.vCommit -command "$fr.body.tCommit yview"
|
||||||
# ttk::scrollbar $fr.body.hCommit -orient horizontal -command "$fr.body.tCommit xview"
|
# ttk::scrollbar $fr.body.hCommit -orient horizontal -command "$fr.body.tCommit xview"
|
||||||
@@ -321,10 +750,10 @@ namespace eval Git {
|
|||||||
|
|
||||||
ttk::button $fr.body.bCommit -image done_20x20 -compound left \
|
ttk::button $fr.body.bCommit -image done_20x20 -compound left \
|
||||||
-text "[::msgcat::mc "Commit changes"]" \
|
-text "[::msgcat::mc "Commit changes"]" \
|
||||||
-command "Git::Commit $fr.body.tCommit; Git::DialogUpdate $fr"
|
-command "Git::Commit $fr; Git::DialogUpdate $fr"
|
||||||
ttk::button $fr.body.bPush -image doneall_20x20 -compound left \
|
ttk::button $fr.body.bPush -image doneall_20x20 -compound left \
|
||||||
-text "[::msgcat::mc "Push changes"]" \
|
-text "[::msgcat::mc "Push changes"]" \
|
||||||
-command "Git::Push; Git::DialogUpdate $fr"
|
-command "Git::PushPrepare; Git::DialogUpdate $fr"
|
||||||
|
|
||||||
ttk::label $fr.body.lblLog -padding {3 3} -text "[::msgcat::mc "Commit history"]:"
|
ttk::label $fr.body.lblLog -padding {3 3} -text "[::msgcat::mc "Commit history"]:"
|
||||||
listbox $fr.body.lLog -border 0 \
|
listbox $fr.body.lLog -border 0 \
|
||||||
@@ -361,7 +790,6 @@ namespace eval Git {
|
|||||||
grid $fr.body.vLog -column 5 -row 8 -sticky nsw
|
grid $fr.body.vLog -column 5 -row 8 -sticky nsw
|
||||||
grid $fr.body.hLog -column 0 -row 9 -sticky new -columnspan 5
|
grid $fr.body.hLog -column 0 -row 9 -sticky new -columnspan 5
|
||||||
|
|
||||||
|
|
||||||
grid rowconfigure $fr.body $fr.body.t -weight 1
|
grid rowconfigure $fr.body $fr.body.t -weight 1
|
||||||
grid columnconfigure $fr.body $fr.body.t -weight 1
|
grid columnconfigure $fr.body $fr.body.t -weight 1
|
||||||
grid rowconfigure $fr.body $fr.body.tCommit -weight 1
|
grid rowconfigure $fr.body $fr.body.tCommit -weight 1
|
||||||
@@ -371,9 +799,9 @@ namespace eval Git {
|
|||||||
|
|
||||||
# Git repo status
|
# Git repo status
|
||||||
foreach { word } [Git::Status] {
|
foreach { word } [Git::Status] {
|
||||||
# puts $word
|
puts $word
|
||||||
if [regexp -nocase -- {([\w\s])([\s\w?]+)\s../(.+?)} $word match v1 v2 fileName] {
|
if [regexp -nocase -- {([\w\s\?])([\s\w\\*\?]+)\s(.+?)} $word match v1 v2 fileName] {
|
||||||
# puts "$v1 $v2 $fileName"
|
puts "$v1 $v2 $fileName"
|
||||||
# $fr.unindexed.t delete 1.0 end
|
# $fr.unindexed.t delete 1.0 end
|
||||||
if {$v1 ne " "} {
|
if {$v1 ne " "} {
|
||||||
$fr.body.lCommit insert end $fileName
|
$fr.body.lCommit insert end $fileName
|
||||||
@@ -386,9 +814,15 @@ namespace eval Git {
|
|||||||
|
|
||||||
catch { $fr.body.lBox activate 0 ; $fr.body.lBox selection set 0 0 }
|
catch { $fr.body.lBox activate 0 ; $fr.body.lBox selection set 0 0 }
|
||||||
|
|
||||||
|
bind $fr.header.lblGit <Button-1><ButtonRelease-1> {
|
||||||
|
Git::BranchDialog %X %Y
|
||||||
|
Git::DialogUpdate $Git::fr
|
||||||
|
}
|
||||||
bind $fr.body.lBox <Return> "Git::CommitAdd $fr"
|
bind $fr.body.lBox <Return> "Git::CommitAdd $fr"
|
||||||
bind $fr.body.lBox <Double-Button-1> "catch {Git::CommitAdd $fr}"
|
bind $fr.body.lBox <Double-Button-1> \
|
||||||
bind $fr.body.lBox <Button-1><ButtonRelease-1> "Git::ListBoxPress $fr"
|
"catch {Git::CommitAdd $fr; $fr.body.t delete 0.0 end; $fr.body.tCommit delete 0.0 end}"
|
||||||
|
# bind $fr.body.lBox <Button-1><ButtonPress-1> "Git::ListBoxPress $fr"
|
||||||
|
bind $fr.body.lBox <<ListboxSelect>> "Git::ListBoxPress $fr"
|
||||||
bind $fr.body.lBox <KeyRelease> "Git::Key %K $fr"
|
bind $fr.body.lBox <KeyRelease> "Git::Key %K $fr"
|
||||||
|
|
||||||
bind $fr.body.lLog <Double-Button-1> "Git::Show $fr"
|
bind $fr.body.lLog <Double-Button-1> "Git::Show $fr"
|
||||||
@@ -408,6 +842,7 @@ namespace eval Git {
|
|||||||
}
|
}
|
||||||
# End Git commit history
|
# End Git commit history
|
||||||
|
|
||||||
|
ctext::addHighlightClassForRegexp $fr.body.t files yellow {^diff.*$}
|
||||||
ctext::addHighlightClassForRegexp $fr.body.t paths #19a2a6 {@@.+@@}
|
ctext::addHighlightClassForRegexp $fr.body.t paths #19a2a6 {@@.+@@}
|
||||||
ctext::addHighlightClassForRegexp $fr.body.t add green {^\+.*$}
|
ctext::addHighlightClassForRegexp $fr.body.t add green {^\+.*$}
|
||||||
ctext::addHighlightClassForRegexp $fr.body.t gremove grey {^\-.*$}
|
ctext::addHighlightClassForRegexp $fr.body.t gremove grey {^\-.*$}
|
||||||
|
74
lib/gui.tcl
74
lib/gui.tcl
@@ -26,7 +26,6 @@ bind . <Control-Q> Quit
|
|||||||
bind . <Control-eacute> Quit
|
bind . <Control-eacute> Quit
|
||||||
bind . <Insert> Add
|
bind . <Insert> Add
|
||||||
bind . <Delete> Del
|
bind . <Delete> Del
|
||||||
bind . <Control-Return> Edit
|
|
||||||
bind . <F1> ShowHelpDialog
|
bind . <F1> ShowHelpDialog
|
||||||
bind . <Control-n> Editor::New
|
bind . <Control-n> Editor::New
|
||||||
bind . <Control-N> Editor::New
|
bind . <Control-N> Editor::New
|
||||||
@@ -56,8 +55,8 @@ bind . <Control-K> {
|
|||||||
}
|
}
|
||||||
bind . <Control-s> {FileOper::Save}
|
bind . <Control-s> {FileOper::Save}
|
||||||
bind . <Control-S> {FileOper::Save}
|
bind . <Control-S> {FileOper::Save}
|
||||||
bind . <Alt-p> ViewFilesTree
|
bind . <Alt-p> {ViewFilesTree true}
|
||||||
|
bind . <Button-3> {catch [PopupMenu %X %Y]}
|
||||||
|
|
||||||
#ttk::style configure TPanedwindow -background blue
|
#ttk::style configure TPanedwindow -background blue
|
||||||
#ttk::style configure Sash -sashthickness 5
|
#ttk::style configure Sash -sashthickness 5
|
||||||
@@ -70,18 +69,36 @@ if [info exists cfgVariables(theme)] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ttk::frame .frmMenu -border 0 -relief raised
|
ttk::frame .frmMenu -border 0 -relief raised
|
||||||
ttk::frame .frmBody -border 1 -relief raised
|
ttk::frame .frmBody -border 0 -relief raised
|
||||||
ttk::frame .frmStatus -border 0 -relief raised
|
ttk::frame .frmStatus -border 0 -relief raised
|
||||||
pack .frmMenu -side top -padx 1 -fill x
|
|
||||||
pack .frmBody -side top -padx 1 -fill both -expand true
|
if {$cfgVariables(menuShow) eq "true"} {
|
||||||
pack .frmStatus -side top -padx 1 -fill x
|
# pack -side top -padx 1 -fill x
|
||||||
|
grid .frmMenu -row 0 -column 0 -sticky new
|
||||||
|
}
|
||||||
|
|
||||||
|
# pack .frmBody -side top -padx 1 -fill both -expand true
|
||||||
|
grid .frmBody -row 1 -column 0 -sticky nsew
|
||||||
|
|
||||||
|
if {$cfgVariables(statusBarShow) eq "true"} {
|
||||||
|
# pack .frmStatus -side top -padx 1 -fill x
|
||||||
|
grid .frmStatus -row 2 -column 0 -sticky sew
|
||||||
|
}
|
||||||
|
grid columnconfigure . .frmBody -weight 1
|
||||||
|
grid rowconfigure . .frmBody -weight 1
|
||||||
|
|
||||||
# pack .panel -expand true -fill both
|
# pack .panel -expand true -fill both
|
||||||
# pack propagate .panel false
|
# pack propagate .panel false
|
||||||
#pack [label .frmMenu.lbl -text "ddd"]
|
#pack [label .frmMenu.lbl -text "ddd"]
|
||||||
|
|
||||||
pack [ttk::label .frmStatus.lblGitLogo -justify left] -side left
|
pack [ttk::label .frmStatus.lblGitLogo -justify left] -side left
|
||||||
pack [ttk::label .frmStatus.lblGit] -side left
|
pack [ttk::label .frmStatus.lblGit] -side left -expand true -fill x
|
||||||
pack [ttk::label .frmStatus.lblPosition -justify right] -side right
|
bind .frmStatus.lblGit <Button-1><ButtonRelease-1> {
|
||||||
|
Git::BranchDialog %X %Y
|
||||||
|
}
|
||||||
|
pack [ttk::label .frmStatus.lblPosition -justify right] -side left -expand true -fill x
|
||||||
|
pack [ttk::label .frmStatus.lblSize -justify center] -side right -fill x
|
||||||
|
pack [ttk::label .frmStatus.lblEncoding -justify center] -side right -fill x
|
||||||
|
|
||||||
ttk::menubutton .frmMenu.mnuFile -text [::msgcat::mc "File"] -menu .frmMenu.mnuFile.m
|
ttk::menubutton .frmMenu.mnuFile -text [::msgcat::mc "File"] -menu .frmMenu.mnuFile.m
|
||||||
GetFileMenu [menu .frmMenu.mnuFile.m]
|
GetFileMenu [menu .frmMenu.mnuFile.m]
|
||||||
@@ -98,15 +115,26 @@ ttk::menubutton .frmMenu.mnuHelp -text [::msgcat::mc "Help"] -menu .frmMenu.mnuH
|
|||||||
GetHelpMenu [menu .frmMenu.mnuHelp.m]
|
GetHelpMenu [menu .frmMenu.mnuHelp.m]
|
||||||
pack .frmMenu.mnuHelp -side right
|
pack .frmMenu.mnuHelp -side right
|
||||||
|
|
||||||
|
# PopUP menu
|
||||||
|
menu .popup
|
||||||
|
GetFileMenu .popup
|
||||||
|
GetEditMenu .popup
|
||||||
|
GetViewMenu .popup
|
||||||
|
|
||||||
set frmTool [ttk::frame .frmBody.frmTool]
|
set frmTool [ttk::frame .frmBody.frmTool]
|
||||||
ttk::panedwindow .frmBody.panel -orient horizontal -style TPanedwindow
|
ttk::panedwindow .frmBody.panel -orient horizontal -style TPanedwindow
|
||||||
pack propagate .frmBody.panel false
|
# pack propagate .frmBody.panel false
|
||||||
|
|
||||||
pack .frmBody.frmTool -side left -fill y
|
if {$cfgVariables(toolBarShow) eq "true"} {
|
||||||
pack .frmBody.panel -side left -fill both -expand true
|
# pack .frmBody.frmTool -side left -fill y
|
||||||
|
grid .frmBody.frmTool -row 0 -column 0 -sticky nsw
|
||||||
|
}
|
||||||
|
# pack .frmBody.panel -side left -fill both -expand true
|
||||||
|
grid .frmBody.panel -row 0 -column 1 -sticky nesw
|
||||||
|
grid columnconfigure .frmBody .frmBody.panel -weight 1
|
||||||
|
grid rowconfigure .frmBody .frmBody.panel -weight 1
|
||||||
|
|
||||||
ttk::button $frmTool.btn_tree -command ViewFilesTree -image tree_24x24
|
ttk::button $frmTool.btn_tree -command ToolBtnTreePress -image tree_24x24
|
||||||
ttk::button $frmTool.btn_search -command FileOper::FindInFiles -image search_24x24
|
ttk::button $frmTool.btn_search -command FileOper::FindInFiles -image search_24x24
|
||||||
ttk::button $frmTool.btn_git -command Git::Dialog -image git_24x24
|
ttk::button $frmTool.btn_git -command Git::Dialog -image git_24x24
|
||||||
|
|
||||||
@@ -116,10 +144,12 @@ pack $frmTool.btn_tree $frmTool.btn_search $frmTool.btn_git -side top -padx 1 -p
|
|||||||
# #pack $frmTool.lbl_logo -side bottom -padx 5 -pady 5
|
# #pack $frmTool.lbl_logo -side bottom -padx 5 -pady 5
|
||||||
#
|
#
|
||||||
# # Дерево с полосами прокрутки
|
# # Дерево с полосами прокрутки
|
||||||
set frmTree [ttk::frame .frmBody.frmTree]
|
set frmTree [ttk::frame .frmBody.frmTree -border 0]
|
||||||
|
|
||||||
set tree [ttk::treeview $frmTree.tree -show tree \
|
set tree [ttk::treeview $frmTree.tree -show tree \
|
||||||
-xscrollcommand [list .frmBody.frmTree.h set] -yscrollcommand [list .frmBody.frmTree.v set]]
|
-xscrollcommand [list .frmBody.frmTree.h set] \
|
||||||
|
-yscrollcommand [list .frmBody.frmTree.v set]]
|
||||||
|
|
||||||
# $tree heading #0 -text "Files tree"
|
# $tree heading #0 -text "Files tree"
|
||||||
# $tree column #0 -anchor e
|
# $tree column #0 -anchor e
|
||||||
|
|
||||||
@@ -127,7 +157,7 @@ ttk::scrollbar $frmTree.h -orient horizontal -command [list $frmTree.tree xview]
|
|||||||
ttk::scrollbar $frmTree.v -orient vertical -command [list $frmTree.tree yview]
|
ttk::scrollbar $frmTree.v -orient vertical -command [list $frmTree.tree yview]
|
||||||
|
|
||||||
bind $tree <Double-ButtonPress-1> {Tree::DoublePressItem $tree}
|
bind $tree <Double-ButtonPress-1> {Tree::DoublePressItem $tree}
|
||||||
bind $tree <ButtonRelease-1> {Tree::PressItem $tree; break}
|
bind $tree <ButtonRelease-1> {Tree::PressItem $tree; break}
|
||||||
|
|
||||||
grid $tree -row 0 -column 0 -sticky nsew
|
grid $tree -row 0 -column 0 -sticky nsew
|
||||||
grid $frmTree.v -row 0 -column 1 -sticky nsew
|
grid $frmTree.v -row 0 -column 1 -sticky nsew
|
||||||
@@ -137,10 +167,19 @@ grid rowconfigure $frmTree 0 -weight 1
|
|||||||
|
|
||||||
set frmWork [ttk::frame .frmWork -border 0 -relief flat]
|
set frmWork [ttk::frame .frmWork -border 0 -relief flat]
|
||||||
|
|
||||||
|
ttk::panedwindow $frmWork.panelNB -orient horizontal -style TPanedwindow
|
||||||
|
# grid $frmWork.panelNB -row 0 -column 0 -sticky nesw
|
||||||
|
pack $frmWork.panelNB -side left -fill both -expand true
|
||||||
|
|
||||||
set nbEditor [ttk::notebook $frmWork.nbEditor]
|
set nbEditor [ttk::notebook $frmWork.nbEditor]
|
||||||
pack $nbEditor -side left -fill both -expand true
|
pack $nbEditor -side left -fill both -expand true
|
||||||
|
# grid $nbEditor -row 0 -column 0 -sticky nsew
|
||||||
|
# grid columnconfigure $frmWork $nbEditor -weight 1
|
||||||
|
# grid rowconfigure $frmWork $nbEditor -weight 1
|
||||||
|
|
||||||
# set nbEditor2 [ttk::notebook $frmWork.nbEditor2]
|
set nbEditor2 [ttk::notebook $frmWork.nbEditor2]
|
||||||
|
|
||||||
|
$frmWork.panelNB add $nbEditor -weight 10
|
||||||
# pack $nbEditor2 -side left -fill both -expand true
|
# pack $nbEditor2 -side left -fill both -expand true
|
||||||
#
|
#
|
||||||
# Create an image CLOSE for tab
|
# Create an image CLOSE for tab
|
||||||
@@ -157,6 +196,7 @@ ttk::style layout TNotebook.Tab {
|
|||||||
bind TNotebook <Button-1> "catch {NB::PressTab %W %x %y}\;[bind TNotebook <Button-1>];break"
|
bind TNotebook <Button-1> "catch {NB::PressTab %W %x %y}\;[bind TNotebook <Button-1>];break"
|
||||||
# bind <<NotebookTabChanged>> "NB::PressTab %W %x %y"
|
# bind <<NotebookTabChanged>> "NB::PressTab %W %x %y"
|
||||||
bind TNotebook <ButtonRelease-1> "NB::PressTab %W %x %y"
|
bind TNotebook <ButtonRelease-1> "NB::PressTab %W %x %y"
|
||||||
|
# bind TNotebook <Control-w> FileOper::Close
|
||||||
# bind . <Control-Tab> "NB::NextTab $nbEditor"
|
# bind . <Control-Tab> "NB::NextTab $nbEditor"
|
||||||
bind . <Control-Next> "NB::NextTab $nbEditor 1"
|
bind . <Control-Next> "NB::NextTab $nbEditor 1"
|
||||||
bind . <Control-Prior> "NB::NextTab $nbEditor -1"
|
bind . <Control-Prior> "NB::NextTab $nbEditor -1"
|
||||||
|
@@ -13,9 +13,11 @@ namespace eval Highlight {} {
|
|||||||
ctext::addHighlightClass $txt variable_funcs gold {set global variable unset}
|
ctext::addHighlightClass $txt variable_funcs gold {set global variable unset}
|
||||||
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||||
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
|
||||||
ctext::addHighlightClassForRegexp $txt namespaces #4f64ff {::}
|
ctext::addHighlightClassForRegexp $txt namespaces #4f64ff {::}
|
||||||
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
|
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
|
||||||
|
ctext::addHighlightClassForRegexp $txt colors #68ceff {(#)(\w)+?(\s|$)}
|
||||||
|
ctext::addHighlightClassForRegexp $txt comments #666666 {(^|;)\s*(#)[^\n\r]*}
|
||||||
|
ctext::addHighlightClass $txt bool #3e803b {null false true}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc Default {txt} {
|
proc Default {txt} {
|
||||||
@@ -32,7 +34,7 @@ namespace eval Highlight {} {
|
|||||||
|
|
||||||
proc SH {txt} {
|
proc SH {txt} {
|
||||||
ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+}
|
ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+}
|
||||||
ctext::addHighlightClass $txt stackControl #19a2a6 {if fi else elseif then while case esac do in exit source echo package mkdir ls rm sed awk grep date jq zip tar gzip mount umount test make curl git iconv less gcc scp rsync cut tr}
|
ctext::addHighlightClass $txt stackControl #19a2a6 {if fi else elseif then while case esac do in exit source echo package mkdir ls rm sed awk grep date jq zip tar gzip mount umount test make curl git iconv less gcc scp rsync cut tr function}
|
||||||
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\$"
|
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\$"
|
||||||
ctext::addHighlightClassForRegexp $txt vars_extended #4471ca {\$\{[a-zA-Z0-9\_\-:\./\$\{\}]+\}}
|
ctext::addHighlightClassForRegexp $txt vars_extended #4471ca {\$\{[a-zA-Z0-9\_\-:\./\$\{\}]+\}}
|
||||||
ctext::addHighlightClass $txt variable_funcs gold {set export}
|
ctext::addHighlightClass $txt variable_funcs gold {set export}
|
||||||
@@ -53,12 +55,13 @@ namespace eval Highlight {} {
|
|||||||
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||||
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||||
|
ctext::addHighlightClass $txt bool #3e803b {nil false true}
|
||||||
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
|
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc PY {txt} {
|
proc PY {txt} {
|
||||||
ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+}
|
ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+}
|
||||||
ctext::addHighlightClass $txt stackControl #19a2a6 {if else: elif for while case switch def import from return make break defer continue package len print with open try: except: in}
|
ctext::addHighlightClass $txt stackControl #19a2a6 {if else elif for while case switch def import from return make break defer continue package len print with open try: except: in}
|
||||||
ctext::addHighlightClass $txt types #7187d5 {string int int16 int32 int64 float bool byte}
|
ctext::addHighlightClass $txt types #7187d5 {string int int16 int32 int64 float bool byte}
|
||||||
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\&"
|
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\&"
|
||||||
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\*"
|
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\*"
|
||||||
@@ -68,43 +71,124 @@ namespace eval Highlight {} {
|
|||||||
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||||
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
|
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc YAML {txt} {
|
proc YAML {txt} {
|
||||||
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||||
ctext::addHighlightClassForRegexp $txt stackControl #19a2a6 {\s*?[\w]+:}
|
ctext::addHighlightClassForRegexp $txt stackControl #19a2a6 {\s*?[\w]+:}
|
||||||
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-]+}
|
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-]+}
|
||||||
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\{\{)(\s*?|)[\.a-zA-Z0-9\_\-]+((\s*?|))(\}\})}
|
ctext::addHighlightClassForRegexp $txt varsansible #4471ca {(\{\{)(\s*?|)[\.a-zA-Z0-9\_\-]+((\s*?|))(\}\})}
|
||||||
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||||
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc YML {txt} {
|
proc YML {txt} {
|
||||||
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
Highlight::YAML $txt
|
||||||
ctext::addHighlightClassForRegexp $txt stackControl #19a2a6 {\s*?[\w]+:}
|
|
||||||
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-]+}
|
|
||||||
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\{\{)(\s*?|)[\.a-zA-Z0-9\_\-]+((\s*?|))(\}\})}
|
|
||||||
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
|
||||||
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
|
||||||
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
proc XML {txt} {
|
proc XML {txt} {
|
||||||
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||||
ctext::addHighlightClassForRegexp $txt stackControl #19a2a6 {(<|<\\)*?[\w]+>}
|
ctext::addHighlightClassForRegexp $txt stackControl #19a2a6 {(<|<\\)*?[\w]+(/|)(>)}
|
||||||
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-]+}
|
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-]+}
|
||||||
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
# ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
# ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||||
# ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
# ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||||
ctext::addHighlightClassForSpecialChars $txt tags #666666 {<>/}
|
ctext::addHighlightClassForSpecialChars $txt tags lightgreen {<>/}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc HTML {txt} {
|
||||||
|
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||||
|
ctext::addHighlightClassForRegexp $txt stackControl #19a2a6 {(<|</)([\w]+)}
|
||||||
|
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-]+}
|
||||||
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
|
ctext::addHighlightClassForRegexp $txt paths lightblue {(\s)([\w]+)(=)}
|
||||||
|
ctext::addHighlightClassForSpecialChars $txt tags lightgreen {<>/}
|
||||||
|
ctext::addHighlightClassForRegexp $txt comments #666666 {(<\!--)\s*(.+)\s*(-->)}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc HTM {txt} {
|
||||||
|
Highlight::HTML $txt
|
||||||
|
}
|
||||||
|
|
||||||
proc RB {txt} {
|
proc RB {txt} {
|
||||||
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||||
ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z]+}
|
ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z]+}
|
||||||
ctext::addHighlightClass $txt stackControl #19a2a6 {def end class if else for while case when}
|
ctext::addHighlightClass $txt stackControl #19a2a6 {def end class if else for while case when require module begin rescue self return include unless raise private new do synchronize}
|
||||||
# ctext::addHighlightClass $txt widgets #9d468d [list canvas ctext button entry label text labelframe frame toplevel scrollbar checkbutton canvas listbox menu menubar menubutton radiobutton scale entry message tk_chooseDir tk_getSaveFile tk_getOpenFile tk_chooseColor tk_optionMenu ttk::button ttk::checkbutton ttk::combobox ttk::entry ttk::frame ttk::intro ttk::label ttk::labelframe ttk::menubutton ttk::treeview ttk::notebook ttk::panedwindow ttk::progressbar ttk::radiobutton ttk::scale ttk::scrollbar ttk::separator ttk::sizegrip ttk::spinbox ]
|
|
||||||
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-\[\]]+}
|
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-\[\]]+}
|
||||||
# ctext::addHighlightClass $txt variable_funcs gold {set global variable unset}
|
|
||||||
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||||
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||||
ctext::addHighlightClassForRegexp $txt namespaces #4f64ff {::}
|
ctext::addHighlightClassForRegexp $txt namespaces #4f64ff {::}
|
||||||
|
ctext::addHighlightClassForRegexp $txt dog #0082ff {(@)[\.a-zA-Z0-9\_\-]+}
|
||||||
|
ctext::addHighlightClass $txt bool #7e5fb3 {nil false true}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc MD {txt} {
|
||||||
|
ctext::addHighlightClassForRegexp $txt comments #666666 {^\s+?(#|//).*$}
|
||||||
|
ctext::addHighlightClassForRegexp $txt lists #4471ca {(\*|-|\+)+}
|
||||||
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
|
ctext::addHighlightClassForRegexp $txt url #19a2a6 {(http|https|ftp|ssh)(://)(\w|\.|-|/)+?}
|
||||||
|
ctext::addHighlightClassForRegexp $txt email #467a7b {(\w|\.|-)+?(@)(\w|\.|-)+?($|\s)}
|
||||||
|
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||||
|
ctext::addHighlightClassForRegexp $txt sharp #975db4 {^(#+?)\s(.*?)$}
|
||||||
|
ctext::addHighlightClassForRegexp $txt quotedtext #a9b36c {^(\s*?)(>+).+?$}
|
||||||
|
ctext::addHighlightClassForRegexp $txt italictext #dff74e {((_|\*)+?)(\w+?)((_|\*)+?)}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc PL {txt} {
|
||||||
|
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||||
|
ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z]+}
|
||||||
|
ctext::addHighlightClass $txt stackControl #19a2a6 {sub my end class new if else elsif for foreach while case when use ne eq print exit chdir rand die lt gt le ge say unless return chomp package push exec grep eval warn scalar next continue close module require}
|
||||||
|
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-\[\]]+}
|
||||||
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
|
# ctext::addHighlightClassForSpecialChars $txt dog #0082ff {@}
|
||||||
|
ctext::addHighlightClassForRegexp $txt dog #0082ff {(@)[\.a-zA-Z0-9\_\-\[\]]+}
|
||||||
|
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||||
|
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||||
|
ctext::addHighlightClassForRegexp $txt namespaces #0093ff {->|\+\+|::}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc INI {txt} {
|
||||||
|
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||||
|
ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z]+}
|
||||||
|
ctext::addHighlightClassForRegexp $txt stackControl #4471ca {^(\s*?)\[[\.a-zA-Z0-9\_\-\[\]\s\.:]+\]}
|
||||||
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
|
ctext::addHighlightClassForRegexp $txt dog #0082ff {(@)[\.a-zA-Z0-9\_\-\[\]]+}
|
||||||
|
ctext::addHighlightClassForRegexp $txt colors #68ceff {(#)[\w]+?}
|
||||||
|
ctext::addHighlightClassForRegexp $txt keyword #19a2a6 {^(\s*?).+(\s*?=)}
|
||||||
|
ctext::addHighlightClassForSpecialChars $txt equal #0082ff {=}
|
||||||
|
ctext::addHighlightClassForRegexp $txt comments #666666 {(^\s*#|^\s*;|\s+;)[^\n\r]*}
|
||||||
|
ctext::addHighlightClassForRegexp $txt colors #68ceff {(#)(\w)+?(\s|$)}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc DESKTOP {txt} {
|
||||||
|
Highlight::INI $txt
|
||||||
|
}
|
||||||
|
|
||||||
|
proc SPEC {txt} {
|
||||||
|
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||||
|
ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z0-9]+}
|
||||||
|
ctext::addHighlightClassForRegexp $txt macros #0082ff {(%)[\.a-zA-Z0-9\_\-]+}
|
||||||
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
|
ctext::addHighlightClassForRegexp $txt var #4471ca {(\$)[\.a-zA-Z0-9\_\-\[\]]+}
|
||||||
|
# ctext::addHighlightClassForRegexp $txt colors #68ceff {(#)[^\n\r]*}
|
||||||
|
ctext::addHighlightClassForRegexp $txt keyword #68ceff {^(\s*?)[a-zA-Z0-9\_\-]+(\s*?:)}
|
||||||
|
ctext::addHighlightClassForSpecialChars $txt equal #0082ff {=}
|
||||||
|
ctext::addHighlightClassForRegexp $txt changelog lightgreen {^(\s*?)(\*|\-)(.+?)$}
|
||||||
|
ctext::addHighlightClass $txt shelcommand #19a2a6 {if fi else elseif then while case esac do in exit source echo package mkdir ls rm sed awk grep date jq zip tar gzip mount umount test make curl git iconv less gcc scp rsync cut tr function install}
|
||||||
|
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||||
|
}
|
||||||
|
proc LUA {txt} {
|
||||||
|
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||||
|
ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z]+}
|
||||||
|
ctext::addHighlightClass $txt stackControl #19a2a6 {and break do else elseif end false for function goto if in local nil not or repeat return then true until while}
|
||||||
|
# ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-\[\]]+}
|
||||||
|
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||||
|
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||||
|
ctext::addHighlightClassForRegexp $txt comments #666666 {(--)[^\n\r]*}
|
||||||
|
ctext::addHighlightClassForRegexp $txt namespaces #0093ff {->|\+\+|::}
|
||||||
|
ctext::addHighlightClass $txt bool #3e803b {null false true}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
######################################################
|
######################################################
|
||||||
# Base64 encoded Images library
|
# Base64 encoded Images library
|
||||||
######################################################
|
######################################################
|
||||||
|
|
||||||
image create photo projman -data {
|
image create photo projman -data {
|
||||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
|
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
|
||||||
WXMAAAsSAAALEgHS3X78AAAAB3RJTUUH1AsFAhA0bYcHMAAACoFJREFUeNqlV1uMG9UZ/uZiz9ge
|
WXMAAAsSAAALEgHS3X78AAAAB3RJTUUH1AsFAhA0bYcHMAAACoFJREFUeNqlV1uMG9UZ/uZiz9ge
|
||||||
@@ -595,6 +596,22 @@ image create photo debian_16x12 -data {
|
|||||||
rA8mrK6XByzl3QaSIFac9xqEuFa2XxzygDJS7dv2U3oGIh75yu7ibF0AAN5NOFR9hOAAAAAASUVO
|
rA8mrK6XByzl3QaSIFac9xqEuFa2XxzygDJS7dv2U3oGIh75yu7ibF0AAN5NOFR9hOAAAAAASUVO
|
||||||
RK5CYII=
|
RK5CYII=
|
||||||
}
|
}
|
||||||
|
image create photo deb_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
|
||||||
|
4AeIo5OToouU+L+k0CLGg+N+vLv3uHsH+BsVpppd44CqWUY6mRCyuVWh5xVBDCKCEPolZupzopiC
|
||||||
|
5/i6h4+vd3Ge5X3uzxFR8iYDfALxLNMNi3iDeHrT0jnvE0dZSVKIz4nHDLog8SPXZZffOBcd9vPM
|
||||||
|
qJFJzxNHiYViB8sdzEqGSjxFHFNUjfL9WZcVzluc1UqNte7JXxjOayvLXKc5jCQWsQQRAmTUUEYF
|
||||||
|
FuK0aqSYSNN+wsM/5PhFcsnkKoORYwFVqJAcP/gf/O7WLExOuEnhBND9YtsfI0DPLtCs2/b3sW03
|
||||||
|
T4DAM3Cltf3VBjDzSXq9rcWOgN5t4OK6rcl7wOUOMPCkS4bkSAGa/kIBeD+jb8oBfbdAaM3trbWP
|
||||||
|
0wcgQ12lboCDQ2C0SNnrHu8Odvb275lWfz803nKOXMrtNAAAAAZiS0dEALwAvAC8IuemuQAAAAlw
|
||||||
|
SFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+YIGgYBD440/mcAAADnSURBVCjPlZIxbsIwGIU/O6Ei
|
||||||
|
CEGkzukJOkRi4A7sCIYuPQlcgx2J0FNwBNQVpogVRKuqCQhsFixZjkHwNj89f37/LwtuKCPV9vmE
|
||||||
|
Sj743rg54RpTuq2Qww+QA2/G17AV8DpkKW4CJnRqbc5HgII4+mRR+hrZkNAGmMsmMOM9EYS58dyx
|
||||||
|
KgBbX/QDxSo3sDFIX65iFsQRgGJ1Mt4Y5Ai0D1Bp8MI2AsoWf/VfmmVGqiVRY07x787vbRAQ7AB6
|
||||||
|
rA8mrK6XByzl3QaSIFac9xqEuFa2XxzygDJS7dv2U3oGIh75yu7ibF0AAN5NOFR9hOAAAAAASUVO
|
||||||
|
RK5CYII=
|
||||||
|
}
|
||||||
image create photo redhat_16x12 -data {
|
image create photo redhat_16x12 -data {
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
|
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
|
||||||
@@ -615,6 +632,26 @@ image create photo redhat_16x12 -data {
|
|||||||
JoP7vsKvmscGvwDMplK1fiHiel7hCqIFNKp8a+dBC1kyMF5IOm1we9PY8Fgu0XnYsAsSizJ8Q9+B
|
JoP7vsKvmscGvwDMplK1fiHiel7hCqIFNKp8a+dBC1kyMF5IOm1we9PY8Fgu0XnYsAsSizJ8Q9+B
|
||||||
fWB7/vyA9Yr/YLa1I25OKGgYfz6Rjbv9EqdKrq/6GWz7DaI/0EnQtYARAAAAAElFTkSuQmCC
|
fWB7/vyA9Yr/YLa1I25OKGgYfz6Rjbv9EqdKrq/6GWz7DaI/0EnQtYARAAAAAElFTkSuQmCC
|
||||||
}
|
}
|
||||||
|
image create photo rpm_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
|
||||||
|
4AeIo5OToouU+L+k0CLGg+N+vLv3uHsH+BsVpppd44CqWUY6mRCyuVWh5xVBDCKCEPolZupzopiC
|
||||||
|
5/i6h4+vd3Ge5X3uzxFR8iYDfALxLNMNi3iDeHrT0jnvE0dZSVKIz4nHDLog8SPXZZffOBcd9vPM
|
||||||
|
qJFJzxNHiYViB8sdzEqGSjxFHFNUjfL9WZcVzluc1UqNte7JXxjOayvLXKc5jCQWsQQRAmTUUEYF
|
||||||
|
FuK0aqSYSNN+wsM/5PhFcsnkKoORYwFVqJAcP/gf/O7WLExOuEnhBND9YtsfI0DPLtCs2/b3sW03
|
||||||
|
T4DAM3Cltf3VBjDzSXq9rcWOgN5t4OK6rcl7wOUOMPCkS4bkSAGa/kIBeD+jb8oBfbdAaM3trbWP
|
||||||
|
0wcgQ12lboCDQ2C0SNnrHu8Odvb275lWfz803nKOXMrtNAAAAAZiS0dEALwAvAC8IuemuQAAAAlw
|
||||||
|
SFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+YIGgYbDKcQVQYAAAH8SURBVCjPhZJNSJMBGMd//3dr
|
||||||
|
01KpQGdqRUF1CsrNBq1IXwnxYFFRl255jKhDhzp2qGvXAqFLFBL0YUWg6aSCIB3aoUsUpYFsM0kL
|
||||||
|
rc33fZ8ObrSE6A8PPP/ni+dLrMKn9vaqdT+cHmRdJqcFgMCmJQ0uzEce7/jwrFAZr0qSS3ScMLgu
|
||||||
|
tLnC/Ksk64Epw843jqcflZ1OWcnH3Uuge0JNwmltsIVItFDc6Cm8EyMt4zKwVehBrs29+FcH+bh7
|
||||||
|
0kT/CtckZjeRtpsFk42Z9B0rxyXc10ASMEzHY5nhh5qJ96wNsfge0QzMI4a0FJyxKicWy4x8rBwx
|
||||||
|
m+jsFdZXotNLNcEuJ+QsHUNEzQlvj42PbJBZQLX6JO2dTaVqKwuYXxyooFuqF0NHHcy6gMgaFZcB
|
||||||
|
fN87ZzBv2K2gEM3m2tz95YxIJBQ1gt3IzgIeZl3KJtxRwSFgGseOxN6k3wLMJbvrPK/oOgTL9Zn0
|
||||||
|
09XnzifcAaBGuUTHS9CB0kq/EeiqEzh36yeGZvgH5pLddZ5feAf2OYwxhVgpYDyx5dANP+pfyyXc
|
||||||
|
JoP7vsKvmscGvwDMplK1fiHiel7hCqIFNKp8a+dBC1kyMF5IOm1we9PY8Fgu0XnYsAsSizJ8Q9+B
|
||||||
|
fWB7/vyA9Yr/YLa1I25OKGgYfz6Rjbv9EqdKrq/6GWz7DaI/0EnQtYARAAAAAElFTkSuQmCC
|
||||||
|
}
|
||||||
image create photo spec_16x12 -data {
|
image create photo spec_16x12 -data {
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
|
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
|
||||||
@@ -1028,19 +1065,103 @@ image create photo yml_16x12 -data {
|
|||||||
AElFTkSuQmCC
|
AElFTkSuQmCC
|
||||||
}
|
}
|
||||||
image create photo rb_16x12 -data {
|
image create photo rb_16x12 -data {
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAADfnpUWHRSYXcgcHJvZmlsZSB0eXBl
|
||||||
kT1Iw0AcxV9Tix9UHOwg4pChOlkQFREnrUIRKoRaoVUHk0u/oElDkuLiKLgWHPxYrDq4OOvq4CoI
|
IGV4aWYAAHjatZZbduMgDIbftYpZgiVxEcvBXM6ZHczy5wfbmcZN0qTpmBOQsZCEPkFL7c/vTr/w
|
||||||
gh8gjk5Oii5S4v+SQosYD4778e7e4+4dINTLTLM6xgBNt81UIi5msqti5yu6ISCEGGZkZhlzkpSE
|
sEVHzkcLKYQFj0suSYZgy/bk2fPiZr+/LIdwNU9L2T8IphSjbq8Wdv1jnpcrS5wh+Q+GbDfE6/WH
|
||||||
7/i6R4CvdzGe5X/uz9Gr5iwGBETiWWaYNvEG8dSmbXDeJ46woqwSnxOPmnRB4keuKx6/cS64LPDM
|
5Hb7djK0O9IRkUCou6G0G1LZPvBuIG/bWkKy+HELa9vGemzRth+Nrh85idtwfncR2aseflSkKeuC
|
||||||
iJlOzRNHiMVCGyttzIqmRjxJHFU1nfKFjMcq5y3OWrnKmvfkLwzn9JVlrtMcQgKLWIIEEQqqKKEM
|
XlS2AHT8hDTjg6Bf1KDIqlOOsw97JEjIrTwtH6KiM5WLdKJyMDlDgTPeqOkpmeEy3pxnfzv5NFP8
|
||||||
m/oqQSfFQor24z7+QdcvkUshVwmMHAuoQIPs+sH/4He3Vn5i3EsKx4HQi+N8DAOdu0Cj5jjfx47T
|
wbOWXZLr+aVfXFwleea4V6Pe27a77AJSGvZNHVucEhRXpFznsoAW8fOQ42wJzQjVW4C8IgkrWuHE
|
||||||
OAGCz8CV3vJX6sD0J+m1lhY9Avq2gYvrlqbsAZc7wMCTIZuyKwVpCvk88H5G35QF+m+BnjWvt+Y+
|
AiydHVfO3LnNsXBBiE6aRIwiRXTOmUZJUnQhcHKjcZeoSasaGBbgVczKJRaeftN0V9jguDI0hWGM
|
||||||
Th+ANHWVvAEODoGRAmWv+7y7q723f880+/sBmApyti9bk0oAAAAGYktHRAAAAAAAAPlDu38AAAAJ
|
N/zyM+2uod4HcOaRzLLlCnHJKEKEMciNHloAwv2oIz8TfLTzM7gqCPqZZsMG87JuJlbPe22NOtIJ
|
||||||
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmCQIGGArNk/UwAAAAqUlEQVQoz51SMQoCMRCcxAW7
|
WqHoMW5njWPdDSBF8O0RDCsILIHVc+AlikRm5NHAJ8OQiTpZgYC9l4ooxakGwMGJgW+siTx1xcs2
|
||||||
gLpgZan5/3NygpWFSAS1sDFeLNyDMya54FZhdmYYZgM0jmOKOZxSYL+E6TXdABytD5uSMGvgmGIv
|
jTsLILwGHCQDoAxW42JD/URnqKHs1TvvffDRm08+Bw0u+BBCDOPyy1Gjiz6GGKPFFLOpOfMWLJqR
|
||||||
7xYxAOhcROuDSok57MsgAo8xMTUspdEDWSscEvFTONfJDsbxHNMLChdErGS3cEynqsFPvI/4bH1Y
|
JctJkuJy9CmkmCyllDOcZljOWJ2hkPMqq65u9WtY42prWnNB+RRXfAklFqOSSq5SteKeqKHGajXV
|
||||||
CzIvGoj4DsCkhTmmAGBW62A4o6kV1jF1u6krFMRBLrRt+RN/zRuAsFTFUDTjWwAAAABJRU5ErkJg
|
3LihlJprvoUWm7XUckepde2u+x567NZTzxdqTBvWT+15anxQk0lqKMYLNSyN8TDB4zrxgxmIiWMQ
|
||||||
gg==
|
j4MACloGs8XYOaGBbjBbkuBUeEGUfsCpPIiBoGssvvOF3T9yV9zIube4yUGOBrqfIEcD3R1yn7nd
|
||||||
|
oFbzvIeVJqFxDEdSF8Xxg0KzLJbHH7WnR3qo0IMbgqxWOhJawuahFW2hXCvTS25vWF+mbLhGduHk
|
||||||
|
7rb2HeUxSS+m4m5MdNfN45g+LaJbiftOTPTF1u9n97SIbsN8PTa6dvP9mOhedh9W342RHvp8IUB6
|
||||||
|
QPSlQOm9FN/B/1JpnpTovaP6b6QvKv+ZMjjjfy8mej+WTZneLsV9MT17TXx1t9ALqX440rPXxFcx
|
||||||
|
3cH/eoz0rRPy3wz13qkm/Gv7F3xOmRX/1sdOAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0Ac
|
||||||
|
xV9TpVUqDnYQcchQnSyILeKoVShChVArtOpgcv2EJg1Jiouj4Fpw8GOx6uDirKuDqyAIfoA4Ojkp
|
||||||
|
ukiJ/0sKLWI8OO7Hu3uPu3eA0Kwy1eyZBFTNMtLJhJjNrYqBV4QQRB/iiMnM1OckKQXP8XUPH1/v
|
||||||
|
ojzL+9yfYyBfMBngE4lnmW5YxBvE05uWznmfOMzKcp74nHjCoAsSP3JdcfmNc8lhgWeGjUx6njhM
|
||||||
|
LJa6WOliVjZU4jhxJK9qlC9kXc5z3uKsVuusfU/+wlBBW1nmOs1RJLGIJUgQoaCOCqqwEKVVI8VE
|
||||||
|
mvYTHv4Rxy+RSyFXBYwcC6hBhez4wf/gd7dmMTblJoUSQO+LbX+MAYFdoNWw7e9j226dAP5n4Err
|
||||||
|
+GtNYOaT9EZHixwBg9vAxXVHU/aAyx1g+EmXDdmR/DSFYhF4P6NvygFDt0D/mttbex+nD0CGukrd
|
||||||
|
AAeHwHiJstc93h3s7u3fM+3+fgC4vXLDfzo5HwAAD4tpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAA
|
||||||
|
ADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4
|
||||||
|
OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4w
|
||||||
|
LUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y
|
||||||
|
Mi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHht
|
||||||
|
bG5zOmlwdGNFeHQ9Imh0dHA6Ly9pcHRjLm9yZy9zdGQvSXB0YzR4bXBFeHQvMjAwOC0wMi0yOS8i
|
||||||
|
CiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHht
|
||||||
|
bG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVu
|
||||||
|
dCMiCiAgICB4bWxuczpwbHVzPSJodHRwOi8vbnMudXNlcGx1cy5vcmcvbGRmL3htcC8xLjAvIgog
|
||||||
|
ICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6ZGM9Imh0
|
||||||
|
dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25z
|
||||||
|
LmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20v
|
||||||
|
eGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDo5ZWVlYzM5Yy1i
|
||||||
|
NjAxLTRmMzItYjYwZi01ZGVjYjBmZWFmODEiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6
|
||||||
|
YmJlM2M5NDktNTRjOC00YWY1LTk3OTEtNjRlYjE2NzYyZDExIgogICB4bXBNTTpPcmlnaW5hbERv
|
||||||
|
Y3VtZW50SUQ9InhtcC5kaWQ6YzI2MDlkMmMtZGMyYy00N2E3LWExNWQtZDYzNDVjOWEyM2NmIgog
|
||||||
|
ICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3Rh
|
||||||
|
bXA9IjE2NzA0OTQwMjYwNDk4MDEiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yMiIKICAgZGM6Rm9y
|
||||||
|
bWF0PSJpbWFnZS9wbmciCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9v
|
||||||
|
bD0iR0lNUCAyLjEwIj4KICAgPGlwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICAgPHJkZjpCYWcv
|
||||||
|
PgogICA8L2lwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICA8aXB0Y0V4dDpMb2NhdGlvblNob3du
|
||||||
|
PgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAgPGlwdGNFeHQ6
|
||||||
|
QXJ0d29ya09yT2JqZWN0PgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6QXJ0d29ya09yT2Jq
|
||||||
|
ZWN0PgogICA8aXB0Y0V4dDpSZWdpc3RyeUlkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6
|
||||||
|
UmVnaXN0cnlJZD4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxp
|
||||||
|
CiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAg
|
||||||
|
IHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OTk0Y2Y3M2MtYzRlMC00ZmNjLWJlYTAtZmUzMmE3
|
||||||
|
YzVjYzhlIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAg
|
||||||
|
ICAgc3RFdnQ6d2hlbj0iKzAzOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9y
|
||||||
|
eT4KICAgPHBsdXM6SW1hZ2VTdXBwbGllcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdl
|
||||||
|
U3VwcGxpZXI+CiAgIDxwbHVzOkltYWdlQ3JlYXRvcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVz
|
||||||
|
OkltYWdlQ3JlYXRvcj4KICAgPHBsdXM6Q29weXJpZ2h0T3duZXI+CiAgICA8cmRmOlNlcS8+CiAg
|
||||||
|
IDwvcGx1czpDb3B5cmlnaHRPd25lcj4KICAgPHBsdXM6TGljZW5zb3I+CiAgICA8cmRmOlNlcS8+
|
||||||
|
CiAgIDwvcGx1czpMaWNlbnNvcj4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94
|
||||||
|
OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAKPD94cGFja2V0IGVuZD0idyI/PqhP3r4AAAAGYktHRABLAEsAS0uhKB4AAAAJcEhZcwAA
|
||||||
|
DdcAAA3XAUIom3gAAAAHdElNRQfmDAgKBwanOCH1AAAAXElEQVQoz2NgIBLM9fb+j02cBZ/C5K1b
|
||||||
|
GXFphAEmSjSjGICuGV0hNjEMFyArJNY1TMiKsWkmBBgJhTay7di8wYLPRlz+RjEAm2Z0r+ALA0Z8
|
||||||
|
TiY5FvDZRErAkgQAHeFHE12H/GAAAAAASUVORK5CYII=
|
||||||
}
|
}
|
||||||
image create photo split_horizontal_11x11 -data {
|
image create photo split_horizontal_11x11 -data {
|
||||||
iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
@@ -1136,3 +1257,659 @@ image create photo git_logo_20x20 -data {
|
|||||||
pG6IsIPHB8KWb3kTSxX+xNG74FZtSJaBua7ME3ogz3rmpf8y9UCkhbYK3eJ4QAA5AZMAVcKZeYsq
|
pG6IsIPHB8KWb3kTSxX+xNG74FZtSJaBua7ME3ogz3rmpf8y9UCkhbYK3eJ4QAA5AZMAVcKZeYsq
|
||||||
+wEJrowfIBN3bgAAAABJRU5ErkJggg==
|
+wEJrowfIBN3bgAAAABJRU5ErkJggg==
|
||||||
}
|
}
|
||||||
|
image create photo cancel_24x24 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABg2lDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TxVIqDmaQ4pChOlkQFXHUKhShQqgVWnUwufQLmrQkKS6OgmvBwY/FqoOLs64OroIg
|
||||||
|
+AHi6OSk6CIl/i8ptIjx4Lgf7+497t4BQrPCdKtnHNAN20wnE1I2tyr1vSIMERFEEVKYVZuT5RR8
|
||||||
|
x9c9Any9i/Ms/3N/jn4tbzEgIBHPspppE28QT2/aNc77xCIrKRrxOfGYSRckfuS66vEb56LLAs8U
|
||||||
|
zUx6nlgklopdrHYxK5k68RRxTNMNyheyHmuctzjrlTpr35O/MJI3Vpa5TnMYSSxiCTIkqKijjAps
|
||||||
|
xGk1SLGQpv2Ejz/q+mVyqeQqg5FjAVXoUFw/+B/87tYqTE54SZEE0PviOB8jQN8u0Go4zvex47RO
|
||||||
|
gOAzcGV0/NUmMPNJeqOjxY6AgW3g4rqjqXvA5Q4w9FRTTMWVgjSFQgF4P6NvygGDt0B4zeutvY/T
|
||||||
|
ByBDXaVugINDYLRI2es+7w519/bvmXZ/Py11cov1aNesAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI
|
||||||
|
WXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5goUDB835f/YowAAAYhJREFUSMed1T9rFUEUBfDf28Ei
|
||||||
|
a0wjiqAQEFSIWhj/YW+TBFux0u9l6XcQUqaxUBDsBEMsrDQmpnkGeSF5KZyVdd3ZmfVUw9y759y5
|
||||||
|
c89O8BsT3MI9nMc3nBiPG3iAi9jF8SQG1vCwlbiLV5gWEk+wEQtssIeXATWexqQGZ3ENHzErIH+C
|
||||||
|
u539GgdVXEx6PryAF1gsIF9NxOsKP/A9kTAkkiM/wXbAHF9wE2d6EvvalSOfYxOfQtz4iR2sDIhc
|
||||||
|
jyJHWO9caB/5OwitwDQjUseTXC6o/G27j11cwvNIOAb/kHdPUHqSYvKUwFiRJPmQQCPyGXdQDeRt
|
||||||
|
4U0qWGVMtJopAm7jXCoYBsjXcb+g/3VrhGclAmPIsyIhYf8hEx0lCqv7fpChp/KcQ7cKHT9rC+Ta
|
||||||
|
0h7FEsf/EWkEHuPRiDkvEbmKDwELeJb4bQyZKCeyiP0qLqqxDo34Gp/Ww0R8qcI+Dv6DPCcyx077
|
||||||
|
wVmOU3CI13g/wgdTbONKdPWv5sHpJi4k7mIM/uI4BbiEbyFWMDzeAAAAAElFTkSuQmCC
|
||||||
|
}
|
||||||
|
image create photo cancel_20x20 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABg2lDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TxVIqDmaQ4pChOlkQFXHUKhShQqgVWnUwufQLmrQkKS6OgmvBwY/FqoOLs64OroIg
|
||||||
|
+AHi6OSk6CIl/i8ptIjx4Lgf7+497t4BQrPCdKtnHNAN20wnE1I2tyr1vSIMERFEEVKYVZuT5RR8
|
||||||
|
x9c9Any9i/Ms/3N/jn4tbzEgIBHPspppE28QT2/aNc77xCIrKRrxOfGYSRckfuS66vEb56LLAs8U
|
||||||
|
zUx6nlgklopdrHYxK5k68RRxTNMNyheyHmuctzjrlTpr35O/MJI3Vpa5TnMYSSxiCTIkqKijjAps
|
||||||
|
xGk1SLGQpv2Ejz/q+mVyqeQqg5FjAVXoUFw/+B/87tYqTE54SZEE0PviOB8jQN8u0Go4zvex47RO
|
||||||
|
gOAzcGV0/NUmMPNJeqOjxY6AgW3g4rqjqXvA5Q4w9FRTTMWVgjSFQgF4P6NvygGDt0B4zeutvY/T
|
||||||
|
ByBDXaVugINDYLRI2es+7w519/bvmXZ/Py11cov1aNesAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI
|
||||||
|
WXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5goUDCcn79d0PAAAAMJJREFUOMvt0jFqAlEUheFPMxDQ
|
||||||
|
dGliG1HQtdgJMQtwdROyDXcggkXKKIizAsU0NzA8ZsQBC4s51ePd934O51xaPZyeau7nmOGAIpmN
|
||||||
|
sMQbNunHbg1wiD4WASjDFujhvYnDAybIMMUOrwHLcMJ3hXudK3GM8VECKJ1zbJs4hCN+w2EW8Zzx
|
||||||
|
VQe7luHdW/4v4DPcnXGJ95PItGgCHCUF5FhXFFXcClziOSngiH0JOsTqVuAAL7Ea26SofcB+qha7
|
||||||
|
1QPqD+48J+QQ8e7VAAAAAElFTkSuQmCC
|
||||||
|
}
|
||||||
|
image create photo key_64x64 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABg2lDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TxVIqDmaQ4pChOlkQFXHUKhShQqgVWnUwufQLmrQkKS6OgmvBwY/FqoOLs64OroIg
|
||||||
|
+AHi6OSk6CIl/i8ptIjx4Lgf7+497t4BQrPCdKtnHNAN20wnE1I2tyr1vSIMERFEEVKYVZuT5RR8
|
||||||
|
x9c9Any9i/Ms/3N/jn4tbzEgIBHPspppE28QT2/aNc77xCIrKRrxOfGYSRckfuS66vEb56LLAs8U
|
||||||
|
zUx6nlgklopdrHYxK5k68RRxTNMNyheyHmuctzjrlTpr35O/MJI3Vpa5TnMYSSxiCTIkqKijjAps
|
||||||
|
xGk1SLGQpv2Ejz/q+mVyqeQqg5FjAVXoUFw/+B/87tYqTE54SZEE0PviOB8jQN8u0Go4zvex47RO
|
||||||
|
gOAzcGV0/NUmMPNJeqOjxY6AgW3g4rqjqXvA5Q4w9FRTTMWVgjSFQgF4P6NvygGDt0B4zeutvY/T
|
||||||
|
ByBDXaVugINDYLRI2es+7w519/bvmXZ/Py11cov1aNesAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI
|
||||||
|
WXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5goUDBo0AYF9XAAACp9JREFUeNrtm3twFfUVxz+7997c
|
||||||
|
ACGkIg8VQWlBKUUhAmq1My04vqhWKTrWKbXt2I6tM/ahttU+tFpaK7ZSyliLgGVMacWKoBU7dNBK
|
||||||
|
Wx9oNUEjhEdehDxISEJucpP72u0f52zYbDcJSeXuddozs5N79+7vl/2e33l+97fwf/nfFiMXb8qG
|
||||||
|
kAGZ47juZOCLwBXAFGAM0A7sA7YC6w2I5fwq2DDFhodsKLOhywbbhrgN5RlYGYOPAqYumGHL8WMb
|
||||||
|
OvRa38OCljjcAUSAkDM+l4CHbVhhQ89AQGxIJuHxlVD4VxhjwbZBru9zdMEzi+BDQNSliMDBF9iw
|
||||||
|
YyhAErArCS8NZYxzNMFGYAIwCggHqgQ14T8PB0g/pp5sgD0V8NYhqLYg43fdJvg+cAZQqG5hGAEp
|
||||||
|
4FZglfd8Brqq4b1m6CqAoo/AWfkwYqC5GuHtG6HkJQmaeYB5GYxfA9dPgknua9uhYRx8IQ1VQDMQ
|
||||||
|
NwIAHwGqgVPd5+vg9cuhpFzMMw8wT4XoFrhmLsz2m6seKqbBr+OipLCeTgPpiRB5B24/Wcy+V74B
|
||||||
|
y1bCi8B+oMUMwAAWeMEfgfKpsLZcglS++meqHtrnwbp98J7fRN+G5+MwWhVmAZ26snWNsG8DrPeO
|
||||||
|
uRTm6/+fCIwMQgGXeU8sg2dSAiTiAtIE1AAHHoBHvGOOQseT0KYrn5FT1ADvAqVA6c/hcQuS7nHj
|
||||||
|
pXYoUgUUhANQQB+/TEP8YTis0dlSIIfEK+gAUutg96PQFHGZcwJ61FIyQLeEAyqRuboBq15SXpda
|
||||||
|
CIh5RTUdjgHGBKGAfI8CMnpDIKAcIM1AXAGGTPncK0VQVABmJyQUZIOOiQEpwD4Ip5gC1B0IY1oL
|
||||||
|
jABGB+ECh91folBQLEVKRgE3SlggpgpJvg2REJzmHpcHecuh2GUBHfo3rZZkTYKvawXZK7vFukx1
|
||||||
|
nfysK8CCnZ5mxHgQPqk3nfADMhu+6TZjR74Ely0Vl7JUEbZz2BJrbvdkoMwjEiOcPsjMugKaYbMC
|
||||||
|
daeFC1bAXDcAF5DPAN/zmysK0XVw6ytw0yMweyVMaIOLbFgNPOdyLZDo+EaZBFhblZYKohAykrAm
|
||||||
|
Al/2lgj7oawK/lgIb82Ek0bBdQZc6zXj4UgKOi6B5Ts0PqibvRuIAkrh1FnwpimpKBvFV+p+WHGP
|
||||||
|
pNY8jS0NQFkQQdCeDY174QYrS736o7D2HgGcp7GiC2gBOoJQAIA1A17fCFd3SVQ+obIIrhgJBa5U
|
||||||
|
e0SzTWcoyJb4aTjyJ9g6A0aOg9OjgzQ+/fh2qgKqyuFADGJFUt31qW/GQNEMYCNUKPhqaSXoDJIY
|
||||||
|
MLX0LdTqcOpiOPdC+PBCmDUHZg02wT6oWgKbdokr2Zr7I5vg6nmeBioBPWfDvdXSV+xRC+g2A1SA
|
||||||
|
rRVbTEvf/ZvgjTAcPQdmDDb4EDQUQ8kuqRssrRt66qB1PqzbDeWelJl/J8zRSjTiZBYzQPShDNyS
|
||||||
|
gW9tkKKk7p9wxm1wc8hjwn6yHLZ3CmgbaXg6tMqsBSrvhVW2/NYrF8DZ2gOMA0Yi5GtgCvgDcIN+
|
||||||
|
3huDVYWw3Fu86O+24aKwMpDOh2XaR6SUCT6kR7ueC/fAy1E43RlXDdVnwq+00XoHOBQOavWR8tep
|
||||||
|
SacXwsp+GJ+aemgvhnNdDVQ6rWWyls1NCMvTpN8zgBnypNmIWJYTd4qCIkRQzv+V4+iaqubDY62e
|
||||||
|
TjAK0QvElNPaQDVpXo+pAhLPgR2WZwW9EpMy2FQrGw1EzCyuumHDVcrnn1ULN9uwq7/rm6B6Hjx2
|
||||||
|
EOw3xWT76HAZXKwWkFQOoU8DdSV8TTmGXtkv8xjaCUaBcDYt4IfAFuBHwM6JcJshQcmvY7RuhCdr
|
||||||
|
tWN7DN5Le5idT8G8FXCeqxO0NCBiwwIT7vOuQUlfhRtkkxu3YTf9AO4vzU2G31gS0Drehk/Plkdg
|
||||||
|
fabdC6X7YEMUXjsfxo6CxSZ8Tn29V2rh3SnCEYbVVfYD72QzCG4C7j7ei0+DU6bDiD1ys4d/AMs3
|
||||||
|
w7nhvoSqMR3mTJf83q9koPsO+f8hpw3W2JHOmgv8De6x4YX+fm+Ag1VCajoBsHmvgE8Abc9D5ctw
|
||||||
|
kyWNzFAsL/NbWPuU1AmmxokujRuJrCngE3CtAQv7+/2nsO0iKNkA25+FHQtgrSU+HVb+jkvgX5vh
|
||||||
|
mm7p7AaVJMTug4dvFY7Roc7j2g+0A0kjS/6/BPi9H63lSBzik+GXR2TFk66g1qMFTqneeGgmTFkF
|
||||||
|
d86FRQWSz/HU/Z074fWvwLYKmSfiAt+INEUHgZiRC+AdWQgrXpTVPao3G1JlNAqfSbsqpQCp8KYu
|
||||||
|
hfOKYepYKDgKiVJoWg81abnOeaSe1jTZogVTTVYsYCDwjVBTCc0fFy6QVmibAL9Ii98fVNDa8XJE
|
||||||
|
Ke8eVUBEa/pTVBHjVCl59N0D4AS8Lp2jTq2pzbGycBDgtcJb0wShB6FuJky8D17R8tahrI/q0aNH
|
||||||
|
gmO7RpzixwlobcgTH+cxmekC3yn67aXbO90uZpwg8IuBDX6NTQtUnQ+rK2WVQgrKuSHDZfJl2t31
|
||||||
|
uCo821XEOBVdnnZ2o/TI1/OWju1Ud4q75nJYZ8IBgjcVbJf6Y0KjfUa/d+vvXvC4AKRcCuxUPGGX
|
||||||
|
BWR0fFo/Z1zjed8VMATwhquHb1Df7FYFGKqADgXoBe8lVSwXIWJ6qlvbM972acwCAZ9SgIc0Kh9W
|
||||||
|
Cwi5lJNwmesQGk1fJQ1pQLbBN6r5ZjzR2xoi+OG25jkBPuUD9oSD/68VYMN1QIlfqmuGyrmwuvaY
|
||||||
|
X/qBj7mCXGDU9HDBfxZ4wg98i+T5nAc/bAt4H8w+J8CjUXc4Zu8LvhVqi+HRall50wO+Urm7nAE/
|
||||||
|
ZBcYyOyRYnzCAtmI+IEAPyQLGMjsXZOFr4RZdVBZKgVOvYJ3on1OgR/Syh/Hhmb3nt6e2+AnwIUI
|
||||||
|
hTXCp0r7wIC/zoaEH9BmqGyDln6U0P0zuEXb1VHkyi7t9wv8YTgwGb67EB46Aq1+13SI38/Tvn1E
|
||||||
|
LirBHKSfH7TI2Q5t18O6Num5+0iekBRnqhsUEvQ29eMNggORGS1Q5arwTCBdBc0VsPNKmB099jTG
|
||||||
|
fgK2bZEAGHa1vqlslbnDUsBgHF4GzK2wp0a6td5UtwfKO+HV+VCcD6M3wF9uglf1fzh0dKt2eVau
|
||||||
|
KMEYDoHZAR1XweodQi7WAQeUcDQjMN6AM5Oyr9fZlxNTIrJMlZDMlXQYcoGPAn/H80DRT6IQXQIz
|
||||||
|
y+BV3creoJbQbUEiI5bhXvl2rQkcYtPKxSAY9mOImqFyM2y1PTc9GsZshLu+KmnOpO+Wl3rk2VsV
|
||||||
|
siGpSs85m59tclEycJcNlifVfceEu38HL/i9i9MqAOcA4zXVRTi2HX0issl5bK6mwZDHHF6bJz46
|
||||||
|
qRYqLob1NfJqW+hZqJ4G3R+Dae7tKhEYdT9s19VPuIhM53u3mn3Kzcbmihg+LhFFOPZzgMmumBAP
|
||||||
|
wdHn4NLL4fOGmn0JbF0qb2nWI29s1mm6cyK9kYvAB6oDHL5+BMKx29rINNhQ9RT8Yz50nwSTn4aX
|
||||||
|
lv5nqmvzpLrc9PcBCBHHCsaqDxeqWR9WcBn170nIHpyxHHs1pQbZhZFTqW4gCfsXgiSRx0hxjm0w
|
||||||
|
dh5PQV++Po08melyFTqZXF95R/4NG2ENnSFASIsAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo new_14x14 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TtVoqDlYQcchQHcSCqIijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
|
||||||
|
BD9AHJ2cFF2kxP8lhRaxHhz34929x907QKgWmWa1jQGabpvJeExMZ1bEwCuC6EMXRtAhM8uYlaQE
|
||||||
|
Wo6ve/j4ehflWa3P/Tm61azFAJ9IPMMM0yZeJ57atA3O+8RhVpBV4nPiUZMuSPzIdcXjN855lwWe
|
||||||
|
GTZTyTniMLGYb2KliVnB1IgniSOqplO+kPZY5bzFWSuWWf2e/IWhrL68xHWag4hjAYuQIEJBGRso
|
||||||
|
wkaUVp0UC0naj7XwD7h+iVwKuTbAyDGPEjTIrh/8D353a+Umxr2kUAxof3GcjyEgsAvUKo7zfew4
|
||||||
|
tRPA/wxc6Q1/qQpMf5JeaWiRI6BnG7i4bmjKHnC5A/Q/GbIpu5KfppDLAe9n9E0ZoPcWCK56vdX3
|
||||||
|
cfoApKirxA1wcAgM5yl7rcW7O5t7+/dMvb8fS2tyl3d3iOIAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
|
||||||
|
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmChUJLR1tQ+CKAAAA90lEQVQoz62SsUoEMRiEv3+N
|
||||||
|
uwfaiC9hYyuIPsL2e729jYVPYWPnGwjb5imustDqGkklCFffhs3/2+xCPLyI4ECKMDOZ5J/Af8N7
|
||||||
|
v/TeL/fxbh9hZrcppQXwAqyBlPNVIVTGcTwGLoDDXbJkxMzkJ9OvxhJkHoSq3omIZNyZmbkY40dd
|
||||||
|
1xsRUTOzqqoe2rZ9dtOVLKW0SCkdzYfVde3MTFTVxRhPZl0I4Rp4+5YAXM5v6vv+XlVd13VPwAbQ
|
||||||
|
TLvK61gD7/OmaZqbYRhOgU+gB7aZdsyNKe9KRBSwKWm7YyxO1ab1t58jIo8hhKtiHQWcAwfAKzDm
|
||||||
|
xBfyfGViwB4MCgAAAABJRU5ErkJggg==
|
||||||
|
}
|
||||||
|
|
||||||
|
image create photo refresh_11x11 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TxaIVQTuIOGSoTlZERR21CkWoEGqFVh1MLv2CJg1Jiouj4Fpw8GOx6uDirKuDqyAI
|
||||||
|
foA4OjkpukiJ/0sKLWI9OO7Hu3uPu3eAUC0yzWobAzTdNhOxqJhKr4odr+hCLwKYxqjMLGNOkuJo
|
||||||
|
Ob7u4ePrXYRntT735+hWMxYDfCLxLDNMm3iDeGrTNjjvE4dYXlaJz4lHTLog8SPXFY/fOOdcFnhm
|
||||||
|
yEwm5olDxGKuiZUmZnlTI54kDquaTvlCymOV8xZnrVhm9XvyFwYz+soy12kOIoZFLEGCCAVlFFCE
|
||||||
|
jQitOikWErQfbeEfcP0SuRRyFcDIsYASNMiuH/wPfndrZSfGvaRgFGh/cZyPIaBjF6hVHOf72HFq
|
||||||
|
J4D/GbjSG/5SFZj5JL3S0MJHQM82cHHd0JQ94HIH6H8yZFN2JT9NIZsF3s/om9JA3y3Queb1Vt/H
|
||||||
|
6QOQpK7iN8DBITCco+z1Fu8ONPf275l6fz/H4XLJ9XN7egAAAAZiS0dEAP8A/wD/oL2nkwAAAAlw
|
||||||
|
SFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+YLEgg6DKMFP9AAAAEtSURBVBjTldGxapNxGMXh5/2+
|
||||||
|
pGCMHUSxQyGIODiIizfQQRfBa2gc+hlQ3LR07SDZFBzy1zGTzu72BryDLlJoEMQhEjSE5HVJoI7+
|
||||||
|
xnMOhwMnrBmNRrdxFBEPsINzfK7rerhcLs/xJKCU8gif0MFvfMcuWpjiK/aqUsotfMRWZh7iWtM0
|
||||||
|
N2ez2TaOsY09aGXmq4i4HBFHTdMMN7Om0+m82+3eycyNpBURZ3iXmW9doNfrbS0Wiwner6Wf/oco
|
||||||
|
pbzGVYiIebvdftnv9/9sAqWUDoYR8a3CIQ5wkJk7+/v783/aIl7gWWZeb100MvN0PB53MCuldDLz
|
||||||
|
eWYer/e+iVJK4gvu4wqWOMMNXMKv1Wr1eDAYnFR4OplMHlZVdQ9l/dwufmTmh7qu7w4GgxP4C5QM
|
||||||
|
b3lPIiauAAAAAElFTkSuQmCC
|
||||||
|
}
|
||||||
|
image create photo folder_24x24 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TRakVEQuKOGSoThbELxy1CkWoEGqFVh1MLv2CJg1Jiouj4Fpw8GOx6uDirKuDqyAI
|
||||||
|
foA4OjkpukiJ/0sKLWI9OO7Hu3uPu3eAUC0yzWobAzTdNhOxqJhKr4odr+hCPwKYQq/MLGNOkuJo
|
||||||
|
Ob7u4ePrXYRntT735+hWMxYDfCLxLDNMm3iDeHrTNjjvE4dYXlaJz4lHTbog8SPXFY/fOOdcFnhm
|
||||||
|
yEwm5olDxGKuiZUmZnlTI54kDquaTvlCymOV8xZnrVhm9XvyFwYz+soy12kOIYZFLEGCCAVlFFCE
|
||||||
|
jQitOikWErQfbeEfdP0SuRRyFcDIsYASNMiuH/wPfndrZSfGvaRgFGh/cZyPYaBjF6hVHOf72HFq
|
||||||
|
J4D/GbjSG/5SFZj5JL3S0MJHQM82cHHd0JQ94HIHGHgyZFN2JT9NIZsF3s/om9JA3y0QWPN6q+/j
|
||||||
|
9AFIUlfxG+DgEBjJUfZ6i3d3Nvf275l6fz+MS3KxGoYR/gAAAAZiS0dEAP8A/wD/oL2nkwAAAAlw
|
||||||
|
SFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+YLFwo2Gs8+4dEAAAERSURBVEjH7ZW/SsUwFMa//KGQ
|
||||||
|
Wyhka0ffQ6QP0G6+iIhv0Nm9c0eHYOeCm8ud3EoXiwhSqJNLh6RxsXLVit5eAw79IHBOODk/Dicn
|
||||||
|
AVb9IDIZaZpuGGPHnHP2OcgY86KUugUwLgYkSXJljDmdDSIEnPPzsiwvFwPiOL6x1sbfBQoh7oUQ
|
||||||
|
D7/IuVVKXUwOnwxrLQAgiiJIKecOHr2tWQ3DgLZtwRg7AfAVoLWmYRgiy7LFDS2KAlVVkd29dwBj
|
||||||
|
LAKAPM8XA7qug+d5mAX4vh9qrdE0zUHXMgiCDz7d6QFxMQfU9aCtgH8EIIRo1xU8OgVYa43rCp7+
|
||||||
|
IuE4js+zT0Vd12dSymtK6UET3ff93fqP76VXznxN1iafwLQAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo new_20x20 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TtVoqDlYQcchQHcSCqIijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
|
||||||
|
BD9AHJ2cFF2kxP8lhRaxHhz34929x907QKgWmWa1jQGabpvJeExMZ1bEwCuC6EMXRtAhM8uYlaQE
|
||||||
|
Wo6ve/j4ehflWa3P/Tm61azFAJ9IPMMM0yZeJ57atA3O+8RhVpBV4nPiUZMuSPzIdcXjN855lwWe
|
||||||
|
GTZTyTniMLGYb2KliVnB1IgniSOqplO+kPZY5bzFWSuWWf2e/IWhrL68xHWag4hjAYuQIEJBGRso
|
||||||
|
wkaUVp0UC0naj7XwD7h+iVwKuTbAyDGPEjTIrh/8D353a+Umxr2kUAxof3GcjyEgsAvUKo7zfew4
|
||||||
|
tRPA/wxc6Q1/qQpMf5JeaWiRI6BnG7i4bmjKHnC5A/Q/GbIpu5KfppDLAe9n9E0ZoPcWCK56vdX3
|
||||||
|
cfoApKirxA1wcAgM5yl7rcW7O5t7+/dMvb8fS2tyl3d3iOIAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
|
||||||
|
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmChUJLAVnNEmdAAABEElEQVQ4y+2TsUoEMRRFz5sd
|
||||||
|
MwvaiD+xja0g+gnTz/b2NhZ+hY2dfyBMm6+wslCbbSSVIGy9EyZ5NhsYxB3jKmLhhRQhh5v3cl/g
|
||||||
|
X78ia+3cWjvPYcscSFXPQwhT4B5YAGETW2QWKX3f7wFHwM4YmGuIqspnZl8yzJV8FECM8UJEhmcz
|
||||||
|
VS299y/GmKWIRFXVoiiu6rq+HQ1FVTWEMA0h7KYLjTGlqkqMsfTe7yfOOXcKPAJPKSjZUPkMOE5v
|
||||||
|
1rbtZYyxbJrmBlgCccDeAQ9APzY2C+A5baqqOuu67gB4BVpgNWD7ZDZmGIazJiIR0HVlq3eGW6Ws
|
||||||
|
6/UzP0VErp1zJ1uNzYgOgckwgO9qktvR39YbIoJqCGWh7C4AAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo key_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
|
||||||
|
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
|
||||||
|
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
|
||||||
|
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
|
||||||
|
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
|
||||||
|
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
|
||||||
|
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
|
||||||
|
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
|
||||||
|
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
|
||||||
|
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
|
||||||
|
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
|
||||||
|
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
|
||||||
|
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
|
||||||
|
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo crt_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
|
||||||
|
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
|
||||||
|
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
|
||||||
|
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
|
||||||
|
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
|
||||||
|
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
|
||||||
|
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
|
||||||
|
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
|
||||||
|
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
|
||||||
|
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
|
||||||
|
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
|
||||||
|
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
|
||||||
|
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
|
||||||
|
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo pem_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
|
||||||
|
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
|
||||||
|
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
|
||||||
|
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
|
||||||
|
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
|
||||||
|
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
|
||||||
|
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
|
||||||
|
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
|
||||||
|
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
|
||||||
|
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
|
||||||
|
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
|
||||||
|
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
|
||||||
|
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
|
||||||
|
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo csr_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
|
||||||
|
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
|
||||||
|
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
|
||||||
|
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
|
||||||
|
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
|
||||||
|
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
|
||||||
|
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
|
||||||
|
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
|
||||||
|
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
|
||||||
|
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
|
||||||
|
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
|
||||||
|
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
|
||||||
|
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
|
||||||
|
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo sig_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
|
||||||
|
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
|
||||||
|
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
|
||||||
|
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
|
||||||
|
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
|
||||||
|
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
|
||||||
|
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
|
||||||
|
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
|
||||||
|
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
|
||||||
|
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
|
||||||
|
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
|
||||||
|
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
|
||||||
|
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
|
||||||
|
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo gpg_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
|
||||||
|
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
|
||||||
|
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
|
||||||
|
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
|
||||||
|
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
|
||||||
|
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
|
||||||
|
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
|
||||||
|
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
|
||||||
|
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
|
||||||
|
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
|
||||||
|
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
|
||||||
|
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
|
||||||
|
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
|
||||||
|
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo git_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||||
|
kT1Iw0AcxV9TS0UqDnYQcchQnSz4hYiTVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
|
||||||
|
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jACabpvpZELM5lbE8CsiCCOEaYzKzDJmJSkF
|
||||||
|
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14slN2+C8TxxlJVklPiceNumCxI9cVzx+41x0WeCZ
|
||||||
|
UTOTniOOEovFNlbamJVMjXiCOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
|
||||||
|
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzA+5iVFEkDoxXE+BoHwLtCoOc73seM0
|
||||||
|
ToDgM3Clt/yVOjD1SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
|
||||||
|
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AtjZywjCqfNkAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
|
||||||
|
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAcGATEYpspOAAABMUlEQVQoz42SsUoDQRRFz+yM
|
||||||
|
G5CQ0sbC2iqNECwWUUTUQgj5AasUi4sfE8hPSEgjwcZCUkRIYWNnpZWlRI1keLvPZgXd7AZv+Zhz
|
||||||
|
Zu5jDCVJkqThvR+qqjjnOv1+/4OKBMVBt9td896fqeoBcJSm6SiO4/q/BEmSNIA7YBO4AB5VNVol
|
||||||
|
Mb/hxWJxA+zmo23n3KeIvAAYY8bW2tNiHVsBA1gRuTfGvAKHwJaqRq1W62o6nfo/Fbz3wwIMsGGt
|
||||||
|
vQTesyxrAg+qGonIYGkHqipU5zwIgjdglldxSwLnXMcYMy6Ac1X9AnaAZ2APmIRh2C5dYhzH9TRN
|
||||||
|
R6oaAWRZ1lTVubX2KT8yqdVqx71eb1YqKJHcAh44qYKXBPlHWgeugf1VN1cKfl4iIgNjjAvDsF0F
|
||||||
|
A3wD9EWTx4J8PxsAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo tcl_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAKZXpUWHRSYXcgcHJvZmlsZSB0eXBl
|
||||||
|
IGV4aWYAAHjarZlnliI5EIT/6xR7BHlzHNn39gZ7/P1SKmig7RiYpqAoZDIiIyNr1Pzv36X+4eFC
|
||||||
|
jsqHlGOJUfPwxRdbeZP1edT9arTfr+fRr6N5Pq/uX1hOOY7ufMzxuv523twHOIfKu/AwUL4GMu35
|
||||||
|
i+Kv8fPLQNdETlZkeTOugco1kLPnC3MNUM+2dCw5PW6hzXO8fn/CkGVrvJjbNsp1fPnsE9EbgXmc
|
||||||
|
tdMZp3m1zp4FOPmzylW+sLxql7nwvA8u79dbTAjIR3HSD6tS71C5vTOfnH8BxcVzXnHiOZjxfvzw
|
||||||
|
vAkfB1/tED/M7Pp95qfz/Y1BT0GWv7VGVmvNs7vqIyGN16bu0ZE3XNgIuds/izwTf4H3aT8Lz6xg
|
||||||
|
bwfywXyNZzfFWGBZxpthqllm7mM3nSV6O23iaG23bp/LLtliu9MKnLw8zbLJFTfAy7oOvI6z9r4W
|
||||||
|
s+cte7puMhMPw5XWMJg58Nu/8/x0oLUktsbofI8V67JCQpYhyMkrVwGIWTcehR3g2/P1Ibg6EAw7
|
||||||
|
zJkNVt3OEC2Yi1vCI7eBdlwYOJ5cM2lcAxAi5g4sxjgQ0NG4YKLRydpkDHHM4FMZKFvnbQMCE4Id
|
||||||
|
rNJ65yLgkDHMzW+S2dfaYM9pNAsggosuAU1xFaw8wgZ/ks9wqAYXfAghhhRyKKFGF30MMcYURfxq
|
||||||
|
csmnkGJKKaeSanbZZ9Qxp5xVLrkWWxziGEosqeRSSq1MWhm58uvKBbU221zzLbTYUsuttNqhT/c9
|
||||||
|
9NhTz6qXXocdbqATI4408iijTjOh0vQzzDjTzLPMuqDacsuvsOJKK6+y6h01ow6s754/R83cULMb
|
||||||
|
Kbkw3VHjpyndhjAiJ0EwAzHrDYgnQQBCW8FMZ+O9VQKdYKaLJSuCZZVBwBlGEANBP40Ny9yxe0Pu
|
||||||
|
CTfl/R/hZm/IKYHubyCnBLpPkHuP2weojbpVz6mNkKShBFU70o8LZq42VylqPzy2oXTqgiXYlbZm
|
||||||
|
m4EPkl6hLscavOSMnOnZ2LhYQ+F16BDbyD3LN2OOVJ1yrralC/syPhhWnQFiyUS29UnO7rcUuJDK
|
||||||
|
TJm9Te+KTmukxgwzE46ZU1CT712XkYuezL/C7CyqkuOptFLlm9bcAtrhHcIJVnuWGfocZxr0v6rb
|
||||||
|
m9872jWFRX1V1cdwoY3Weqyz5tCLSDNbymZks0IdZa3sWaBfq8wVk6wxjbaPCH7KRrar4OXeL6/s
|
||||||
|
t7HfEOaYkoA+kkqy9ZlgBkzLvRJfN2SI29iEZI+u1hmcs4PB4/K5ZeTNz2LHFBGA1MW37EyxPrJS
|
||||||
|
ktAN2yIcXbiDkW0NOVVV5rDMGYOFuLF24anJ8BlumBUHCThjtAdTqXkcfaAGQI9O1UurZ0odK6or
|
||||||
|
BmFGqW3o2TrfpyJLtqZndt9GYcWeSRYpGneEYiKco+bUY7JrD61Sb6TDmUds1u8eVYAWm7koTw0s
|
||||||
|
dPXAeseKW7vY3kLLZmHVbpmz1jSg18YMbBY7mtYp6AmD06qdcOjW9W1bO2MGr2yLfPEWxAhydyYS
|
||||||
|
QCFNH0hB0n32HJ2yYBGwbz67kfXylRQKqZWMruHafCpWPg1fanGtGogYNhyTid8+RWXfk/YZjiVn
|
||||||
|
BA8xoC+IPOChdq5vSJxA8hEgP8JDfQtIaukmDD3lST4hyLGQWra0kEikYV3TKuyLcECfpufLTj/h
|
||||||
|
nfqQeO5z4n22T/VrxEstnC1IMEt+y5egjFSh+1ZAfV8odVgqiPPSk4g4rjzXEceN35ZHrS+BRDBU
|
||||||
|
atNBOpFHJ18dgdT6SGQpSMNPBNKqHwoi9cmmLmOTArXBwtabtoxYvHDaKlYiW9dutpC3jiNqskLT
|
||||||
|
dz6FZbeQVQZL9Ic2Y8tCnL5MEAjR0+Q0+hkFXtS0ETimJrJKuo63dDWzcs6NybBzNcBE6gR3ZC25
|
||||||
|
Re3Vg18NYuRgHDX6YFvRsAco3iERY+7Dcj7fimM0iAVxVp8Gupo7WFpfcD3WsjgRmslKRzBou1q5
|
||||||
|
U9736KskuG5/vVxrPLlKUq4dcXgp110kiHItqaHnS7G2vaJ9k2UjJVJDzVAE1eNh8FgL++xyfp6R
|
||||||
|
ro0o4Xke+S1BahmoCBXfNgM2qtXmVyWdhxmQg2YLoqFzkAOxw8n5Fa3UHxHb7Oc6hdJchbK7UyiD
|
||||||
|
gloYu+Vj9muLIeYJu+Qraoy8Sjk0QgdS37yKXH4YWr0fG15W6t+Aohi9lgytnamN/t1r0WRslfUr
|
||||||
|
2TRi66Mn7FgeUVXXix7QHmdDA4k/DPoyNd7Vn2OnHkA8JUQwfGe5xlcYOsFQPYPoL7UJdD5HUKD4
|
||||||
|
myhd+Ll3We0KPDoyqueW0bJlNFQk9DDtKt/abRVlVlTUxEO0EiltwiccnnINs9evWRGJ2H+vbCvB
|
||||||
|
6aYdYv/MtoHrqMfWjiKbN4vqiULq5I5C9iaGCkWZJYp0KNmBoZJinPU8O66Loors3NL76xVZRJPw
|
||||||
|
qL8RH9eoa3KpvgCasbS7+P/iUel7AER1dggeA5DKNxGsoWwnqZroRYwkP1fXfJWI6qd9s+pPc/c7
|
||||||
|
m9MqfkhcF8VbwUHPX8I9RSv1tOEUSVF6Fk3iBtzUbhTyDqEkqwRxUq+tm1LCu9x32SUbkB4uGZRz
|
||||||
|
07ulLQoipNA4j1ZTutAjg4f9AED1M859U6agmvoy1IdrH1Mtv6mpnS8m4q0XMtQd+LI9CY0mHZTY
|
||||||
|
1G1YxtrT4lmDKF3TVEkRtnXZgTbNXnKukE3oGYxzUJzSmdI8FvCK6wnqPaRxhbyM8jixRutbaEGd
|
||||||
|
QbSt7Rm9hhB0+WgIUl7obboXw07Bs/yjSfZ+4c5oNQJteG/U/sMcrFz/5Yr2WNlU119VNnpcc20K
|
||||||
|
1Xqtbe2htqknXdQ3XfT6hkh8KXSaHqpe12vp43/san/IMfUVyb7jGPkJ/odjapMsXiSjwfZ+R7/m
|
||||||
|
qKMoPSZmz/qlRcS5qK+tS8R03a2LfnUu/iF86vcAf0eAqurSfWUqfsO3uujl9gmtj8GVRzs1vbcW
|
||||||
|
K0Ere1mJKv2s7NXH1BdFulDpfFGhFKK+Bbcgtfudm0vkOvWdPIsOg0yz1KotN5JzuzXct7WC+Dq4
|
||||||
|
oMRJVhYxoSM2ekWxptAR1Sy3gpKxEJll0Ei2iLXwvU46d/o+uf9V+mQNatJXNife1rZmTh8fBOrU
|
||||||
|
9+0Mevdp21FsLNBaYeTNgBF6kvsF2XQ9TEVq5eZJk/sOsn7cCIOQHix+bnU1dTp2AId9qCXWYjyO
|
||||||
|
H5eDkcKyJcjRafcVDSh7pqVn9Yx0xaWRRh5S4m1SNtKRol5JjzmvZikcujWMyqHBX4L/s4FWrFdd
|
||||||
|
goyOVh7kpF7YuddLqN1Rici+Z6M5MKr2PkhxbBY2x5eWwymCrRJNjBXekm0Ov+T2FTkVB/hTShCF
|
||||||
|
1AzQDWSF0qRoyoiwjyXEOElSjKkWR7/zidg8jyQoegP+RCbLf4HJvbku/ZiSmzot+x6nkf8lsIOA
|
||||||
|
0t439DTIfZ7Z85VdWe4mfu8h//C41D2sVBmncSk9pZuZSc9m5jjS47r1vFz3rZCrbYeiqPXVWZc0
|
||||||
|
SRga6fXmdsz3bkf90P4w/yjqfy5hPRN2uRFYAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0Ac
|
||||||
|
xV9TpVUqDnYQcchQnSyILeKoVShChVArtOpgcv2EJg1Jiouj4Fpw8GOx6uDirKuDqyAIfoA4Ojkp
|
||||||
|
ukiJ/0sKLWI8OO7Hu3uPu3eA0Kwy1eyZBFTNMtLJhJjNrYqBV4QQRB/iiMnM1OckKQXP8XUPH1/v
|
||||||
|
ojzL+9yfYyBfMBngE4lnmW5YxBvE05uWznmfOMzKcp74nHjCoAsSP3JdcfmNc8lhgWeGjUx6njhM
|
||||||
|
LJa6WOliVjZU4jhxJK9qlC9kXc5z3uKsVuusfU/+wlBBW1nmOs1RJLGIJUgQoaCOCqqwEKVVI8VE
|
||||||
|
mvYTHv4Rxy+RSyFXBYwcC6hBhez4wf/gd7dmMTblJoUSQO+LbX+MAYFdoNWw7e9j226dAP5n4Err
|
||||||
|
+GtNYOaT9EZHixwBg9vAxXVHU/aAyx1g+EmXDdmR/DSFYhF4P6NvygFDt0D/mttbex+nD0CGukrd
|
||||||
|
AAeHwHiJstc93h3s7u3fM+3+fgC4vXLDfzo5HwAAD4tpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAA
|
||||||
|
ADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4
|
||||||
|
OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4w
|
||||||
|
LUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y
|
||||||
|
Mi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHht
|
||||||
|
bG5zOmlwdGNFeHQ9Imh0dHA6Ly9pcHRjLm9yZy9zdGQvSXB0YzR4bXBFeHQvMjAwOC0wMi0yOS8i
|
||||||
|
CiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHht
|
||||||
|
bG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVu
|
||||||
|
dCMiCiAgICB4bWxuczpwbHVzPSJodHRwOi8vbnMudXNlcGx1cy5vcmcvbGRmL3htcC8xLjAvIgog
|
||||||
|
ICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6ZGM9Imh0
|
||||||
|
dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25z
|
||||||
|
LmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20v
|
||||||
|
eGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDpjOGIxNzg0YS1m
|
||||||
|
NmFhLTRjMmUtYWQ3ZC1hM2RkNmQ5NTUzMjgiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6
|
||||||
|
YzZmNGE5NGItNGVmNS00NTY3LWE4NjctN2Y4MjljNzMxYWMyIgogICB4bXBNTTpPcmlnaW5hbERv
|
||||||
|
Y3VtZW50SUQ9InhtcC5kaWQ6YzEyYzVlYzYtNTgyNC00NzYyLTlkZWUtYTVkM2I4YjA2YjlmIgog
|
||||||
|
ICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3Rh
|
||||||
|
bXA9IjE2NzA0OTM1MzA0NDk3NTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yMiIKICAgZGM6Rm9y
|
||||||
|
bWF0PSJpbWFnZS9wbmciCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9v
|
||||||
|
bD0iR0lNUCAyLjEwIj4KICAgPGlwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICAgPHJkZjpCYWcv
|
||||||
|
PgogICA8L2lwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICA8aXB0Y0V4dDpMb2NhdGlvblNob3du
|
||||||
|
PgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAgPGlwdGNFeHQ6
|
||||||
|
QXJ0d29ya09yT2JqZWN0PgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6QXJ0d29ya09yT2Jq
|
||||||
|
ZWN0PgogICA8aXB0Y0V4dDpSZWdpc3RyeUlkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6
|
||||||
|
UmVnaXN0cnlJZD4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxp
|
||||||
|
CiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAg
|
||||||
|
IHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjhkYTk4MzMtNzMyMi00NTIzLTllODctODMyMjJk
|
||||||
|
YjM3NjAxIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAg
|
||||||
|
ICAgc3RFdnQ6d2hlbj0iKzAzOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9y
|
||||||
|
eT4KICAgPHBsdXM6SW1hZ2VTdXBwbGllcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdl
|
||||||
|
U3VwcGxpZXI+CiAgIDxwbHVzOkltYWdlQ3JlYXRvcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVz
|
||||||
|
OkltYWdlQ3JlYXRvcj4KICAgPHBsdXM6Q29weXJpZ2h0T3duZXI+CiAgICA8cmRmOlNlcS8+CiAg
|
||||||
|
IDwvcGx1czpDb3B5cmlnaHRPd25lcj4KICAgPHBsdXM6TGljZW5zb3I+CiAgICA8cmRmOlNlcS8+
|
||||||
|
CiAgIDwvcGx1czpMaWNlbnNvcj4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94
|
||||||
|
OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAKPD94cGFja2V0IGVuZD0idyI/PhM/IgkAAAAGYktHRABLAEsAS0uhKB4AAAAJcEhZcwAA
|
||||||
|
AFgAAABYAXjaS2IAAAAHdElNRQfmDAgJOjLuIiOnAAAA8ElEQVQoz43RIUtDcRTG4d/734WxYhGx
|
||||||
|
zDCQgVmLa0ZhKAgLgkVmMSgIdi1+CVH8BCJjiMGiTYvNNNErBhGsgwm797XpHPdePO3wngcO54iM
|
||||||
|
arVcGkzEu4iN7kltfjSLxodXN59mBor3hdZsV8bzMNos7/TKaSjtITWMp4D7QhD1o21wHfwIlDHX
|
||||||
|
uWBl63kamDP6ECyCh8HJeS5wGprIk8CnoQ7honM2+5YPglNQRVAFvlJxkHXBHyCrIdERLADv/epL
|
||||||
|
rxjID4l4NQqI9ZvDpWEWiH5XSi9DEq6wj7qntTv+U812fAxW0cyfP2BuQS4C363sTMdBnn7dAAAA
|
||||||
|
AElFTkSuQmCC
|
||||||
|
}
|
||||||
|
image create photo pl_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAsAAAAMCAYAAAC0qUeeAAAACXBIWXMAAAZ1AAAGdQGEn07tAAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAVtJREFUKJFtkD1I1WEchZ/z669x
|
||||||
|
iW41ZGGhuATB7Q4tQUuTixARgk1tQUFXoaCPqcWEmhRtaGwMXBqcIug2ObhJKRQ19EVkw0WN6H99
|
||||||
|
39NQ3bzSGQ8Pz4EjgNnx+lFI1Ym5VysAM1drw0j3wYOG0WsPXjYBNN048Uj4PNATimM5cpvEKnAA
|
||||||
|
ALHc/+X4ybH5+RQoLwBVoGLnURLPOiCAqX/qW7kCEJHY7PTmHFBjR0KammvUh8JS6rTizE7wt5x9
|
||||||
|
W8r3onXQLxBLfyX/YUvgO3j3rmZzLY2cOvLEpAJogYaw3yPtAdYQk8DpgMfarphp1C4AU8AicAg5
|
||||||
|
pLiV7ZtlpX2pezb7ncRzy3ux7mJ9K0t9CLNUbPbs74Ldmz9ivVXossIXjV/feLj8Ndut6C02iq6L
|
||||||
|
ctFv8psc1fVIG4fDqvx5aUA/twY6sEGzidu27lyfXvwBnP0n4Wk7lZ9/ATwYhnr9pKV2AAAAAElF
|
||||||
|
TkSuQmCC
|
||||||
|
}
|
||||||
|
image create photo image_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAFSHpUWHRSYXcgcHJvZmlsZSB0eXBl
|
||||||
|
IGV4aWYAAHjarVdZku06CvzXKnoJBoSQlqMxonfQy+/UYN86p6Yb8Z5dx0KDAWUCcrn+v/8O9x9c
|
||||||
|
lDQ4rxZDCuHC5ZNPnCHEa195Peny63k61y28jLurngnGkKCV3Y3hrL/H6XrRRBmSflAUjyIqrxPJ
|
||||||
|
H/3xTdExJNMjhtCOonQUCe8JOgry3tYVUrSPWyh9t+3eYtw/Nx/jxsR28973BvSawo4wdyG58GTh
|
||||||
|
7YDMHzvJmGA8L4lYSCKQBb0sXm5PAMhXOF0fvHLvrDzSGys3J++kSNgrHAZewQxP++U46dfguwXx
|
||||||
|
B8tSj8Sv44EfEy8gL4xHi26MvneXfQCk4Wzq3uKSsLAAclmvBdyGn0K2dSfc0SF6KyhvAKHgrpSI
|
||||||
|
QcsgT40yDeqrrVThoufOhpa5sqyxKMaJq1wOPPl502CTJE0iOKygVzDKjy+07KZlrlKE4UZYyQRl
|
||||||
|
tOnnf+f+VtEYk3CiCWbdWMEvnkEINyZz84lVIITGHUe6AL7v92vyKmBQF8wRG8xX2SqK0omtGUey
|
||||||
|
iBYsVLQ718jaUQCIYFvhDAkYuAKJUqDLmI0IOEbwk6EosnguoIBUucFL9iIB5CBjYBvvGK21rLyH
|
||||||
|
UbNAhEoQAzVJMrjyKGyIH/MRMZRV1KtqUNOoSXOQ4IOGECzM4pdNzJtaMLNoyXKU6KPGEC1GF1PM
|
||||||
|
iZOgOGoKyVJMKeUMoxmaM97OWJBz4SLFFy2hWIkllVwRPtVXraFaja6mmhs3aagTLTRrsaWWO3WE
|
||||||
|
Uvdde+jWY089D4TakOGHjjBsxJFGflgjt2n9dP89a3SzxoupudAe1vCq2a2CZjnRyRkYY09g3CYD
|
||||||
|
CGienF2RvGc3qZucXYmRFcrwUic5jSZjYNB3Yh30cPeHuRfenPf/iDe+mXOTun+DOTep+4a5z7x9
|
||||||
|
wVrLqw6LWwzNNJygXoL0w4IeM8c8D7W/bt2PC0bwU+AS6wCgNWwLvUoP9XWx+0FL5tuznvJvPrm3
|
||||||
|
AVheIo5AJY+/i3poU1CjNDy4aW1OaItWWzyLLnW38HVLw9d2K6xb4TzWP7fuqwnEyK2ojltPlUfa
|
||||||
|
zoK8WebD3rUb+BronvOZ4xx6CNv5kSq1+MlKw7FwxCKPQbftaGec73VTVGqSKyw7OJVwXuQ93lDq
|
||||||
|
8sGLwSOS6IwjuRxmb2pkS0OvWgcf4ofvEmvYDteqyLetqvuKxP4O7K/BNS5LCpcggGxbQCW/wUrU
|
||||||
|
Mj5rlhuZEhJj75ISh61Ze6RardHZUGOKaciBY2TkFgrMUuxK7VxrPPtglVJ/S4iRQ3hCP5y4cxJp
|
||||||
|
K6mGo6GHA2zxCaf6ATzO1Ey7h2HRkynYqFxVjkcNOU6IgL3F0YLvF8vNH/azxa6xxbyJt4piGF9j
|
||||||
|
1/1lMBsdHSkrUOKTJt6nktaEs7Sqjdnuo4iljnq5ZLaIqrZhbx0f9hb1TjSfmh1CMspgd3bCIiEE
|
||||||
|
VQ9y1y+tdFTQI7ZdGVxeGbLBQztQdVcHNkM5Jj1qodH8JDohgc+vQHsSB8cVECBudjK2l3q7U+jk
|
||||||
|
2oRL8i1q+Dko3HsVLHoIQ8ktt98zYqSdMJmfct3oXuYt6C4j+JociOw+UK83XsVb12rX2N2IgKnH
|
||||||
|
ci9I0F6O7YZ/eYasmHQLOrtR5nsr31a6XtPHehl2FlpwwCF8rCv0xJAePmunnEq7nfUUy000TsEN
|
||||||
|
XU+O8IbuCR/jyP3M9Mfpv/PZ/e70m889PAXysj/V031bzXctzX92+rxfeznihwh2v4YwPyFMPx3A
|
||||||
|
7qfC8wRmP5n4nTuH/k9u4NMguf8DDNefEsqt9ZUAAAGEaUNDUElDQyBwcm9maWxlAAB4nH2RPUjD
|
||||||
|
QBzFX1OlVSoOdhBxyFCdLIgt4qhVKEKFUCu06mBy/YQmDUmKi6PgWnDwY7Hq4OKsq4OrIAh+gDg6
|
||||||
|
OSm6SIn/SwotYjw47se7e4+7d4DQrDLV7JkEVM0y0smEmM2tioFXhBBEH+KIyczU5yQpBc/xdQ8f
|
||||||
|
X++iPMv73J9jIF8wGeATiWeZbljEG8TTm5bOeZ84zMpynviceMKgCxI/cl1x+Y1zyWGBZ4aNTHqe
|
||||||
|
OEwslrpY6WJWNlTiOHEkr2qUL2RdznPe4qxW66x9T/7CUEFbWeY6zVEksYglSBChoI4KqrAQpVUj
|
||||||
|
xUSa9hMe/hHHL5FLIVcFjBwLqEGF7PjB/+B3t2YxNuUmhRJA74ttf4wBgV2g1bDt72Pbbp0A/mfg
|
||||||
|
Suv4a01g5pP0RkeLHAGD28DFdUdT9oDLHWD4SZcN2ZH8NIViEXg/o2/KAUO3QP+a21t7H6cPQIa6
|
||||||
|
St0AB4fAeImy1z3eHezu7d8z7f5+ALi9csN/OjkfAAAPi2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAA
|
||||||
|
AAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4K
|
||||||
|
PHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40
|
||||||
|
LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAy
|
||||||
|
LzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAg
|
||||||
|
eG1sbnM6aXB0Y0V4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5
|
||||||
|
LyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAg
|
||||||
|
eG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2
|
||||||
|
ZW50IyIKICAgIHhtbG5zOnBsdXM9Imh0dHA6Ly9ucy51c2VwbHVzLm9yZy9sZGYveG1wLzEuMC8i
|
||||||
|
CiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczpkYz0i
|
||||||
|
aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8v
|
||||||
|
bnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNv
|
||||||
|
bS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjM0OGY0ZTU3
|
||||||
|
LTc1ODUtNDVkYS1iY2UxLWZkMjM5MTEzZGU2NyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlp
|
||||||
|
ZDpjNWY2MTVjMi0wOTgyLTQ2MTktODhmNC0zZGY4ZmRhYWU4NDMiCiAgIHhtcE1NOk9yaWdpbmFs
|
||||||
|
RG9jdW1lbnRJRD0ieG1wLmRpZDoxMTQ5N2E0MC00NGI0LTRiMTAtOTQyZi02ZjY5ODMwYTc5MDEi
|
||||||
|
CiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVT
|
||||||
|
dGFtcD0iMTY3MDQ5NTQ0NjA2ODk0NiIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjIyIgogICBkYzpG
|
||||||
|
b3JtYXQ9ImltYWdlL3BuZyIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JU
|
||||||
|
b29sPSJHSU1QIDIuMTAiPgogICA8aXB0Y0V4dDpMb2NhdGlvbkNyZWF0ZWQ+CiAgICA8cmRmOkJh
|
||||||
|
Zy8+CiAgIDwvaXB0Y0V4dDpMb2NhdGlvbkNyZWF0ZWQ+CiAgIDxpcHRjRXh0OkxvY2F0aW9uU2hv
|
||||||
|
d24+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4dDpMb2NhdGlvblNob3duPgogICA8aXB0Y0V4
|
||||||
|
dDpBcnR3b3JrT3JPYmplY3Q+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4dDpBcnR3b3JrT3JP
|
||||||
|
YmplY3Q+CiAgIDxpcHRjRXh0OlJlZ2lzdHJ5SWQ+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4
|
||||||
|
dDpSZWdpc3RyeUlkPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6
|
||||||
|
bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAg
|
||||||
|
ICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjNWNiMzNjNy0xMTVlLTRhNGYtOTAwNi0xZjAx
|
||||||
|
YWY4ZmIzODQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgog
|
||||||
|
ICAgICBzdEV2dDp3aGVuPSIrMDM6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0
|
||||||
|
b3J5PgogICA8cGx1czpJbWFnZVN1cHBsaWVyPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6SW1h
|
||||||
|
Z2VTdXBwbGllcj4KICAgPHBsdXM6SW1hZ2VDcmVhdG9yPgogICAgPHJkZjpTZXEvPgogICA8L3Bs
|
||||||
|
dXM6SW1hZ2VDcmVhdG9yPgogICA8cGx1czpDb3B5cmlnaHRPd25lcj4KICAgIDxyZGY6U2VxLz4K
|
||||||
|
ICAgPC9wbHVzOkNvcHlyaWdodE93bmVyPgogICA8cGx1czpMaWNlbnNvcj4KICAgIDxyZGY6U2Vx
|
||||||
|
Lz4KICAgPC9wbHVzOkxpY2Vuc29yPgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8
|
||||||
|
L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+1HpXCQAAAAZiS0dEAEsASwBLS6EoHgAAAAlwSFlz
|
||||||
|
AAAN1wAADdcBQiibeAAAAAd0SU1FB+YMCAoeLgmNIBcAAAGJSURBVCjPjZI/SCNxEIW/3UhkIX8Q
|
||||||
|
I2qsRA0bQUFEUqkgqIhkIVdpZeDKa9JYCyIopgiIhSJaKGhnl0IRooWikSCIKKSRA0FCzN4u5FY2
|
||||||
|
XvhdFe8kifjK4c3HzJuBL2p7elrUqjcAxONxEQgEajYahoHL5cLY2aEuwOPxoGlaTUMikSCTyXCZ
|
||||||
|
z+N0zotSaRXYBeakd0BFNzfr2LafXO4Qn28K237i+PiUaDSKLA9wfT0CpN+bqwCKMkQsFsO8u6VB
|
||||||
|
StI3XCKfl/B6N9jcbEeIWyAkVa3wb980pvnI2a9XvMLi4jcst3cSiZxj2204HPuUyzUyqMjp9CHL
|
||||||
|
Chm/n66JCfRmg3DPIPf3iwSDM6RSB1jWp4AWHA4FxS5yUiyS/mnycHXE0tICuq6TSlWHLP9/X9O8
|
||||||
|
Qohnupub0FYW0X70YxhpQqFQ3f/4MIEQo4yN7bHb+o2XrVkaGzt4e5M+fbAPAF3XAY1c7g8wjmVB
|
||||||
|
ONyL2+2uD/ieTEprk5Mim82iqiqqqlaZCoVCXcBfmFeL22lAPa8AAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo lua_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAjbAAAI2wHNrPlDAAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARdJREFUKJGNkC1IQ3EUxX/nbfoY
|
||||||
|
ikkxaxQMRi2CzcG2uGFasy3owkCQV7SsuCI2i7iP+KaLVouCcSCI0aAgTFAn2zX8/dqeiCeee3+c
|
||||||
|
c6/4j6rNXWQFREUDgyDwmFuYpR8bYcK7IZl8BaAWdoBxoOOARiOG+ZuYNoDpD/wJOCRhW7yohFEA
|
||||||
|
KsJM1JtVIPsjy4BTYBLwSdgymUwHwKN+kh9aBtk+uXSKbGoJ1OVZO58jD1iPHNnn3oEysAcgT6vl
|
||||||
|
A8TB5iOAVKQWCjQFtgqIx94M0I6D3lzlAY0B2wO+qesqyc4jCVHdcX1x64AeZX6JGOpYJgj6DlhL
|
||||||
|
nyEr/QEd077c+0K/7XAFjyKwCIyCrjA7IJc6ct9yegcG+1TkMUCBoAAAAABJRU5ErkJggg==
|
||||||
|
}
|
||||||
|
image create photo gz_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAABLcGxfAAAACXBIWXMAAAcPAAAHDwFcQ5C1AAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASpJREFUKJGFjb9Kw0AAxr+73F0S
|
||||||
|
wU6tUMWAOigIBcVNJ7ciTgo+gIuzq66CvoEPoXQWBHERih0EUbu0UGiCrdVaY5qaJncuRjEZ+o2/
|
||||||
|
7x/ZO912lFJ5/IiADgURxcjU7pBQTlKPDQI/zzUBRlnMed/1LptlB3Mrs+A6BwCEMsSzDDts6EXY
|
||||||
|
3zqAYOJ3qVy5gSOaKK5vwtBNAEAQBjg5P8ySo9KOopT8u65WHOgmh7WQhab9eVIq0GQYAGYWc+i9
|
||||||
|
9kESFqUENBnutj1cnT3C/wxwe1FLjaUKrUYPuakMCqsW7Pp7qsCSQCmF+n0bTq0LGcnRDwBQWLOw
|
||||||
|
sbsErmujC8Jg8Nwv+G4ALtJ7zK69HQudTcZgLGNojWpn+br0ND49P/Hw0vxoxV4wCO1vTFFpmeaA
|
||||||
|
16IAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo tgz_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAABLcGxfAAAACXBIWXMAAAcPAAAHDwFcQ5C1AAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASpJREFUKJGFjb9Kw0AAxr+73F0S
|
||||||
|
wU6tUMWAOigIBcVNJ7ciTgo+gIuzq66CvoEPoXQWBHERih0EUbu0UGiCrdVaY5qaJncuRjEZ+o2/
|
||||||
|
7x/ZO912lFJ5/IiADgURxcjU7pBQTlKPDQI/zzUBRlnMed/1LptlB3Mrs+A6BwCEMsSzDDts6EXY
|
||||||
|
3zqAYOJ3qVy5gSOaKK5vwtBNAEAQBjg5P8ySo9KOopT8u65WHOgmh7WQhab9eVIq0GQYAGYWc+i9
|
||||||
|
9kESFqUENBnutj1cnT3C/wxwe1FLjaUKrUYPuakMCqsW7Pp7qsCSQCmF+n0bTq0LGcnRDwBQWLOw
|
||||||
|
sbsErmujC8Jg8Nwv+G4ALtJ7zK69HQudTcZgLGNojWpn+br0ND49P/Hw0vxoxV4wCO1vTFFpmeaA
|
||||||
|
16IAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo zip_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAA0AAAAMCAYAAAC5tzfZAAAACXBIWXMAAAeJAAAHiQH5c1i9AAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAUVJREFUKJGNkTtLA0EUhc9MZrNL
|
||||||
|
IokBFZUY340IgqSw10K0srGy08LaRvAf2NpYpUmrhZ2N/oCAYCUILhJjDJE8NjGJyc7M7thodJMV
|
||||||
|
PeX5+Obey5DZ0+2cIu4EfoSCpMz9sz38EjJysql6Sw1UhCzbZs+WZicn2x4B5IWptkRq7RBzsXgX
|
||||||
|
lCuv2vlFWtvYOUAiMaN/9aaVx+7V8SBJprfU1PAoCEhXctoc9dscWMRAZPH7MQWFbKkIFo7qKHHL
|
||||||
|
s54SEpzYoBTo8KqHhaM6qN+hMt+AMCsQZhWqI/t4vyRdvF8/IrQ+DxrRYd8U/pZc7kC1BMR9GTL3
|
||||||
|
Brcl/jHpM06TQ0nHl/lKgZiB0Oo0jJW4HwYFlOdzic6gOhJOsQnxVAcdCPYoSrHaXemIhYPjnnph
|
||||||
|
KN64fFgiBqsHlscyzWyte5hs8cIHuFR/UISQs+8AAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo xz_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAABLcGxfAAAACXBIWXMAAAcPAAAHDwFcQ5C1AAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAShJREFUKJGFkDtLA0EUhb+Z3Vl3
|
||||||
|
jFpZGCsJiI0gRqtAOonYSvJPBP+Aoo29IBZ2giA2WimIVkqQgAgptFBxUfEVk2g2+7IxgWSLnPLc
|
||||||
|
8+KK1GbeiaIoyT8E0jOFtSC1UaILI6Gsm7Xmb9I2LCxptnhlVevH8sKB2RT0KQC80Och9N9M5Up2
|
||||||
|
C6vYptVOKl6e8awfmZtfxLY1AA2/SWFveVhk73YiqVRHtXt0jhjoR2WmEGa7mdDzkN1iACubJnBe
|
||||||
|
EUJ08FIpZLc4uHeorW8Tfn7zs7UfC4sZ/OtbzIkxdD6HVyrHDGaMIcI9LeJdlcEPejcA6EKOoY0l
|
||||||
|
hLZ7G0RCE75/EX5UEDr+EDFzuLJmJPRoe5DbNIKDk3RYqQ4amekbY3L8pXXz6o2nPwWnYSj7tbJx
|
||||||
|
AAAAAElFTkSuQmCC
|
||||||
|
}
|
||||||
|
image create photo iso_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAABLcGxfAAAACXBIWXMAAAWIAAAFiAG/L38eAAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAVJJREFUKJGFjz1IQgEUhc99vvd8
|
||||||
|
JgolDf2OQkhb0RD249LaKESDOEUQtQRtNbQVTkE05JJLDUGQRJPQUCQVrSJIv5IZmFK8/9v0XmJC
|
||||||
|
d7qccz7uPcTMQfw/DSJiABCJqN7sGJnYhMXWhizSGECkmvbd55exCeAUAKg5rGcm5yVRSAPwtFzg
|
||||||
|
p6q6Orh4ueUCfBjrY5uLRFDa/cSAmS/VRkRHUA07oYikAIAmhd7qkaUj2etXfffbcVkt9xMg9gSU
|
||||||
|
BRdgm4edD797Z666w9E1AJZlxDtxm0oCgF8Rh1zAZjacXbIaPgABAIZHq/kd3bRYdwHTxAW8mAOA
|
||||||
|
jtfzqH6NfUmSdZSy007RSkPL/5ZOTym6zAVZFAbalTYs+33loDAqOAIlcupjRZvVTbv8J2zyx3G+
|
||||||
|
mtzJlh+o1Txbj3SFQ8HlgCKMg0io1o2bvdzLburkuQgAP0z8hJue1kBeAAAAAElFTkSuQmCC
|
||||||
|
}
|
||||||
|
image create photo pdf_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAKYAAACmAE200ffAAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMpJREFUGJWNz69OgnEYxfHv+RVF
|
||||||
|
xsBAdHODzcbLrARfLgADjWggMgKXYHDzArgAA4F7IKAm/wTsNgMj6eZGYHAIBoWX4fvEs8/OngNb
|
||||||
|
53o0dFzpbucAIZGYImiaDqM5+CQl5glYpMQu4dD8FzuunoIOCZ74IuokHtzA9WofewBfL1B4BD9j
|
||||||
|
ZkhHsHrVb+t5GZb3wB1GBL0D33h1BeETnNdPY+US6xa7rfHbQ2JF7SxH9iAjx1EP3MAaaTy53jXs
|
||||||
|
z0C1QB/o+GYfBFgDj+E74z7GkTEAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo bz2_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAdDAAAHQwF4FVqrAAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARhJREFUGJV9jrFKw1AYRk9ublI0
|
||||||
|
oYPSYnEREXEQ6eIiFhFB3MVBcPEpiqN06OAiLrq6+Aa+gIuDUEShhYK6iZbWlDQVE5t7HcSEFuo3
|
||||||
|
nv/wfb8xf3H6qjUF0ihLikNhi2tGIoMoKmRMk4ww/5iwgt6lbN7D3BJ6eua3AY00w5Cr3X0c204a
|
||||||
|
GvUaTXPA2voOuXw6apSe7rSwrKG56PYG9dHB3thCuNmEi1ERwCquQviFEQ2GuBgVVadNcFxGeR79
|
||||||
|
syrE8Xh50Gwgcnkm9g5Qvo9qvY+XDa35fqjRq5RRrTc0arwMYG9ukz05Ry4s/v8zrovuemjfR/c/
|
||||||
|
MRw3OUn/sV61nMnZVJ4i1qz0Kkc5sVx8CdvdZ9pdAH4AuSFg6ttQQTAAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo csv_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAACXBIWXMAAAvPAAALzwFI68pfAAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAPJJREFUGJWFkaFLA3EcxT/ve8cs
|
||||||
|
M6uIiOl2GBZsVqOyf8B+ghyr2z+xoqdgMNoMqzaTaSaR28BiEFYHC+rm72sTxRt76YUPj/d4KnO/
|
||||||
|
BXYA578UAoe7lxrHOBvphfYqIMq27xv0R5kfGapMAiA90wPQDTX6tgj6gQvdA+j51OsWkwCEOaPf
|
||||||
|
vhaxFma8z42JRUaTwDWBzGISvrghkCG2Z9DzmHZkNA1AcJcWOpGYLqrwp+PKhFcijoF1oC5ny6EB
|
||||||
|
fJjE1OGgzH3wuUpC4ArYFIwR5w5PjUIDhrm3li0f5t4ydzrLQHc6MeKtzP2R6gsB5OLlG1VzU07m
|
||||||
|
mn0VAAAAAElFTkSuQmCC
|
||||||
|
}
|
||||||
|
image create photo exe_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAA8AAAAMCAYAAAC9QufkAAAACXBIWXMAAAMnAAADJwEZpzWLAAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAaxJREFUKJFtkEFIlHEQxX/z3083
|
||||||
|
IoONdQ3qYrcFdQ0hhTrU2k3XCjS6dZBiO3SRorotJJQSXQtMOiUKxrYmQgZiHjRJ3FoxPVgUgkSt
|
||||||
|
UatY0H7/6dB+CO33TjPDezNvnlCCguTbTqUQOSMQVSiIMm7V3opMTH/BB+IV+fb4MWC+nKIXu/v3
|
||||||
|
78PleaY+sw6Q0pTJLeeadsWJ+F2UG/+t/nMnuef0h9rKV//MsYlSQIgAC87uAc6W25LJj0eCCVQ9
|
||||||
|
l2GEMICqDhuA720n64AwMInyElgDcB15qlYv+LxbNEWTdgBuH78W+hyqGXWN0wxUIsx2vxm6+aJr
|
||||||
|
5QfCYR/xVDqW/hoAqDl/PaNi2oGDQDUQyx6qj9z/OT62EA7MblcELLADLAetPokWzL2ZwdW8kxh4
|
||||||
|
V4u1jWUZw7OgymBf9lcUfi+CbijsFbjqFu3jXsARazt9bGlSRpaAWKlt8RID5kJXpj8BGIFzCt+A
|
||||||
|
98BmSfz6BPOtPktRlRGvdtTY5Nilppw36Hjw9qgRewAY8NHaCldHvUZ8CABsPYp3qUqPoA2qFBGy
|
||||||
|
ogxXXZ566HH+Asc0nIyxyMyyAAAAAElFTkSuQmCC
|
||||||
|
}
|
||||||
|
image create photo txt_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAAkAAAAMCAYAAACwXJejAAAACXBIWXMAAALEAAACxAFbkZ0LAAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXVJREFUGJVjZICCT2f+i9x98XjO
|
||||||
|
43fPXorziUrKyihFSJkwfmNgYGBgPLz62uYXH998EOMX1unbMmvRxoUT+ytrJic7atkUfPz2+QIH
|
||||||
|
Kxsf04sPr16HptjF3nt+/0CYhZ/s0ul7+3SktbQvPri6LzTFLvbHrx9vWRgYGBhubn4s/Z75R70I
|
||||||
|
M7fq339/mBgYGBgYFFQZbLfd5nv89CkDCwMDA8PG68cUnr158E5OSN7mz78/nDB3Pvvw9Iu1qjlE
|
||||||
|
kZ2a0ftHomLvlQRkH375/5MVpujxa7kPDAz/IIoOXj7+//7bpxy3RO4x/vz5mx2m6P371xz2+rYQ
|
||||||
|
RU7q5rxX3z/5pSkiK/b9/0+4ogdvXzExMDBAFK0+s+vJlfvX/8lIyVz4/fcXN0zRy5evvia6hUEU
|
||||||
|
eZk4aGtJyD9TlVX1/P3vDxvcpKf3X8JNKp/fcZKFlf3//z8/5v9nYYI7nImB7WWBbxwD45aFJ05/
|
||||||
|
//3rBgMO8P3ndy0A+c+fqfnp2TAAAAAASUVORK5CYII=
|
||||||
|
}
|
||||||
|
image create photo j2_16x12 -data {
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAA0AAAAMCAYAAAC5tzfZAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAA
|
||||||
|
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAjxJREFUKJGNzT9oE1EcwPHfu3u5
|
||||||
|
yzWXyyUx1/xpKtZWaytJkVbQoUMpiqP/gtJSJ8FNxEEoWpUKgghKUSGTYNHBwalrDDgIIk1oG/oH
|
||||||
|
o1IoTZu2SS7/XnLv7p6To+B3/sAXMcbgfzp663ZfOTZ42VEuxVBw+sEUVf2AzXblLzCB91iK22+L
|
||||||
|
gs924JAlumKG3xe3eezwrK6ksO12D1UHBm5SRZH/deGMNgjlyq6yuvxwd+Z+EjHGQHv+IkG08Jjp
|
||||||
|
ks5L29sLrVBo1EZIVrOL082e3qeBdGrWUN2/Owwjt5FM7nMAAFytRsCiiPFYtpziECJEwc1mB/X7
|
||||||
|
plua1rk7fu5O+ezoI75edwEAYAAAqVhYcdBWtR7uHtZSn++KP9d/EEKa+XyeeufefAknX4/lcjkD
|
||||||
|
rl8FAAB8ZGJiqDpy5plnaWkWgl2MRKMnq7HBK4zj+jstu1E7FPC2To3c8L98ddG7+O1Jfn7+K3br
|
||||||
|
+mbF6ezX4/F7hqZ1NUzzmilJBdxulyxBjFNFjZZGTk8xhELRra0MAAC3vLBQxhU9e/zjhylcq9vq
|
||||||
|
+tocE8SiJYlryLLe8qRRYoj/hBv11XQ63QIA4PomJxVbwOqv8QuXqCzL9UhkGDAf5A1TxqTRjQxK
|
||||||
|
waYDtkPwRhMJCQAAcy6XQBVVAwTH2sGQ25vNaAwYtjCvkcjhE5Ysd1Cwe/gmifh0nQMAwBvJ5H54
|
||||||
|
5nEG7+28M9SARyoW37c7A72MxzFpr/Dd1sUKRxpZbJg7joMDAwDgDzlS9ta5m7mUAAAAAElFTkSu
|
||||||
|
QmCC
|
||||||
|
}
|
||||||
|
69
lib/imgviewer.tcl
Normal file
69
lib/imgviewer.tcl
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
proc ImageViewer {f w node} {
|
||||||
|
set factor($node) 1.0
|
||||||
|
ttk::frame $w.f
|
||||||
|
pack $w.f -side left -fill both -expand true
|
||||||
|
canvas $w.f.c -xscrollcommand "$w.f.x set" -yscrollcommand "$w.y set"
|
||||||
|
ttk::scrollbar $w.f.x -ori hori -command "$w.f.c xview"
|
||||||
|
ttk::scrollbar $w.y -ori vert -command "$w.f.c yview"
|
||||||
|
|
||||||
|
pack $w.f.c -side top -fill both -expand true
|
||||||
|
pack $w.f.x -side top -fill x
|
||||||
|
pack $w.y -side left -fill y
|
||||||
|
bind $w.f.c <Button-4> "%W yview scroll -3 units"
|
||||||
|
bind $w.f.c <Button-5> "%W yview scroll 3 units"
|
||||||
|
bind $w.f.c <Shift-Button-4> "%W xview scroll -2 units"
|
||||||
|
bind $w.f.c <Shift-Button-5> "%W xview scroll 2 units"
|
||||||
|
bind $w.f.c <Control-Button-4> "scale $w.f.c 0.5 $node"
|
||||||
|
bind $w.f.c <Control-Button-5> "scale $w.f.c 2 $node"
|
||||||
|
#$w.scrwin setwidget $w.scrwin.f
|
||||||
|
openImg $f $w.f.c $node
|
||||||
|
}
|
||||||
|
|
||||||
|
proc openImg {fn w node} {
|
||||||
|
global im1
|
||||||
|
set im1 [image create photo -file $fn]
|
||||||
|
#scale $w
|
||||||
|
list [file size $fn] bytes, [image width $im1]x[image height $im1]
|
||||||
|
$w create image 1 1 -image $im1 -anchor nw -tag img
|
||||||
|
}
|
||||||
|
|
||||||
|
proc scale {w {n 1} node} {
|
||||||
|
global im1 im2 factor noteBook tab_label
|
||||||
|
set factor($node) [expr {$factor($node) * $n}]
|
||||||
|
$w delete img
|
||||||
|
catch {image delete $im2}
|
||||||
|
set im2 [image create photo]
|
||||||
|
if {$factor($node)>=1} {
|
||||||
|
set f [expr int($factor($node))]
|
||||||
|
$im2 copy $im1 -zoom $f $f
|
||||||
|
} else {
|
||||||
|
set f [expr round(1./$factor($node))]
|
||||||
|
$im2 copy $im1 -subsample $f $f
|
||||||
|
}
|
||||||
|
$w create image 1 1 -image $im2 -anchor nw -tag img
|
||||||
|
$noteBook itemconfigure $node -text "$tab_label (size x$factor($node))"
|
||||||
|
$w config -scrollregion [$w bbox all]
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ImageBase64Encode {text} {
|
||||||
|
global env
|
||||||
|
set types {
|
||||||
|
{"PNG" {.png}}
|
||||||
|
{"GIF" {.gif}}
|
||||||
|
{"JPEG" {.jpg}}
|
||||||
|
{"BMP" {.bmp}}
|
||||||
|
{"All files" *}
|
||||||
|
}
|
||||||
|
set img [tk_getOpenFile -initialdir $env(HOME) -filetypes $types -parent .]
|
||||||
|
if {$img ne ""} {
|
||||||
|
set f [open $img]
|
||||||
|
fconfigure $f -translation binary
|
||||||
|
set data [base64::encode [read $f]]
|
||||||
|
close $f
|
||||||
|
# base name on root name of the image file
|
||||||
|
set name [file root [file tail $img]]
|
||||||
|
$text insert [Position] "image create photo $name -data {\n$data\n}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@@ -6,19 +6,25 @@
|
|||||||
#-------------------------------------------------------
|
#-------------------------------------------------------
|
||||||
# TCL/TK
|
# TCL/TK
|
||||||
dict set lexers TCL commentSymbol {#}
|
dict set lexers TCL commentSymbol {#}
|
||||||
|
dict set lexers TCL variableSymbol {$}
|
||||||
dict set lexers TCL procFindString {proc PROCNAME}
|
dict set lexers TCL procFindString {proc PROCNAME}
|
||||||
dict set lexers TCL procRegexpCommand {regexp -nocase -all -- {^\s*?(proc) (.*?) \{(.*?)\} \{} $line match keyWord procName params}
|
dict set lexers TCL procRegexpCommand {regexp -nocase -all -- {^\s*?(proc) (.*?) \{(.*?)\} \{} $line match keyWord procName params}
|
||||||
dict set lexers TCL varRegexpCommand {regexp -nocase -all -- {^\s*?set\s+([a-zA-Z0-9\:\-_$]+)\s+(.+?)($|;)} $line match varName varValue lineEnd}
|
dict set lexers TCL varRegexpCommand {regexp -nocase -all -- {^\s*?set\s+([a-zA-Z0-9\:\-_$]+)\s+(.+?)($|;)} $line match varName varValue lineEnd}
|
||||||
|
dict set lexers TCL commands [info commands]
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# Go lang
|
# Go lang
|
||||||
dict set lexers GO commentSymbol {//}
|
dict set lexers GO commentSymbol {//}
|
||||||
|
dict set lexers GO commentMultilineSymbolBegin {/*}
|
||||||
|
dict set lexers GO commentMultilineSymbolEnd {*/}
|
||||||
dict set lexers GO procFindString {func.*?PROCNAME}
|
dict set lexers GO procFindString {func.*?PROCNAME}
|
||||||
dict set lexers GO procRegexpCommand {regexp -nocase -all -- {\s*?func\s*?(\(\w+\s*?\**?\w+\)|)\s*?(\w+)\((.*?)\)\s+?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match linkName procName params returns}
|
dict set lexers GO procRegexpCommand {regexp -nocase -all -- {\s*?func\s*?(\(\w+\s*?\**?\w+\)|)\s*?(\w+)\((.*?)\)\s+?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match linkName procName params returns}
|
||||||
dict set lexers GO varRegexpCommand {regexp -nocase -all -line -- {^\s*?var\s+([a-zA-Z0-9\-_$]+)\s+(.+?)(\s*$)} $line match varName varType lineEnd}
|
dict set lexers GO varRegexpCommand {regexp -nocase -all -line -- {^\s*?var\s+([a-zA-Z0-9\-_$]+)\s+(.+?)(\s*$)} $line match varName varType lineEnd}
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# SHELL (Bash)
|
# SHELL (Bash)
|
||||||
dict set lexers SH commentSymbol {#}
|
dict set lexers SH commentSymbol {#}
|
||||||
|
dict set lexers SH variableSymbol {$}
|
||||||
dict set lexers SH procFindString {(function |)\s*?PROCNAME\(\)}
|
dict set lexers SH procFindString {(function |)\s*?PROCNAME\(\)}
|
||||||
dict set lexers SH procRegexpCommand {regexp -nocase -all -- {^\s*?(function |)\s*?(.*?)\(()\)} $line match keyWord procName params}
|
dict set lexers SH procRegexpCommand {regexp -nocase -all -- {^\s*?(function |)\s*?(.*?)\(()\)} $line match keyWord procName params}
|
||||||
|
|
||||||
@@ -27,21 +33,76 @@ dict set lexers SH procRegexpCommand {regexp -nocase -all -- {^\s*?(function |)\
|
|||||||
dict set lexers PY commentSymbol {#}
|
dict set lexers PY commentSymbol {#}
|
||||||
dict set lexers PY procFindString {(def )\s*?PROCNAME}
|
dict set lexers PY procFindString {(def )\s*?PROCNAME}
|
||||||
dict set lexers PY procRegexpCommand {regexp -nocase -all -- {^\s*?(def)\s*?(.*?)\((.*?)\):} $line match keyWord procName params}
|
dict set lexers PY procRegexpCommand {regexp -nocase -all -- {^\s*?(def)\s*?(.*?)\((.*?)\):} $line match keyWord procName params}
|
||||||
|
dict set lexers PY varRegexpCommand {regexp -nocase -all -line -- {^\s*?(\w+)\s*=\s*(.+)($)} $line match varName varValue lineEnd}
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# Ruby
|
# Ruby
|
||||||
dict set lexers RB commentSymbol {#}
|
dict set lexers RB commentSymbol {#}
|
||||||
|
dict set lexers RB commentMultilineSymbolBegin {=begin}
|
||||||
|
dict set lexers RB commentMultilineSymbolEnd {end=}
|
||||||
dict set lexers RB tabSize 2
|
dict set lexers RB tabSize 2
|
||||||
dict set lexers RB procFindString {(def )\s*?PROCNAME}
|
dict set lexers RB procFindString {(def |class )\s*?PROCNAME}
|
||||||
dict set lexers RB procRegexpCommand {regexp -nocase -all -- {^\s*?(def)\s([a-zA-Z0-9\-_:]+?)($|\(.+?\))} $line match keyWord procName params}
|
dict set lexers RB procRegexpCommand {regexp -nocase -all -- {^\s*?(def|class)\s([a-zA-Z0-9\-_:\?]+?)($|\s|\(.+?\))} $line match keyWord procName params}
|
||||||
|
dict set lexers RB varRegexpCommand {regexp -nocase -all -line -- {^\s*?(\w+)\s*=\s*(.+)($)} $line match varName varValue lineEnd}
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# YAML (ansible)
|
# YAML (ansible)
|
||||||
dict set lexers YML commentSymbol {#}
|
dict set lexers YML commentSymbol {#}
|
||||||
|
# dict set lexers YML variableSymbol {\{\{}
|
||||||
dict set lexers YML tabSize 2
|
dict set lexers YML tabSize 2
|
||||||
dict set lexers YML procFindString {(- name:)\s*?PROCNAME}
|
dict set lexers YML procFindString {(- name:)\s*?PROCNAME}
|
||||||
dict set lexers YML procRegexpCommand {regexp -nocase -all -- {^\s*?- (name):\s(.+?)$} $line match keyWord procName}
|
dict set lexers YML procRegexpCommand {regexp -nocase -all -- {^\s*?- (name):\s(.+?)$} $line match keyWord procName}
|
||||||
dict set lexers YML varRegexpCommand {regexp -nocase -all -- {^(\s*?)([a-zA-Z0-9\-_$]+):\s+(.+?)(\s*$)} $line match indent varName varValue lineEnd}
|
dict set lexers YML varRegexpCommand {regexp -nocase -all -- {^(\s*?)([a-zA-Z0-9\-_$]+):\s+(.+?)(\s*$)} $line match indent varName varValue lineEnd}
|
||||||
dict set lexers YML varRegexpCommandMultiline {regexp -all -line -- {^(\s*)(set_fact|vars):$} $line match indent keyWord}
|
dict set lexers YML varRegexpCommandMultiline {regexp -all -line -- {^(\s*)(set_fact|vars):$} $line match indent keyWord}
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# MD (markdown)
|
||||||
|
dict set lexers MD tabSize 2
|
||||||
|
dict set lexers MD procFindString {(#+?)\s*?PROCNAME}
|
||||||
|
dict set lexers MD procRegexpCommand {regexp -nocase -all -- {^(#+?)\s(.+?)$} $line match keyWord procName}
|
||||||
|
# dict set lexers YML varRegexpCommandMultiline {regexp -all -line -- {^(\s*)(set_fact|vars):$} $line match indent keyWord}
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# Perl
|
||||||
|
dict set lexers PL commentSymbol {#}
|
||||||
|
dict set lexers PL variableSymbol {$}
|
||||||
|
dict set lexers PL tabSize 4
|
||||||
|
dict set lexers PL procFindString {(sub )\s*?PROCNAME}
|
||||||
|
dict set lexers PL procRegexpCommand {regexp -nocase -all -- {^\s*?(sub)\s([a-zA-Z0-9\-_:]+?)($|\(.+?\))} $line match keyWord procName params}
|
||||||
|
dict set lexers PL varRegexpCommand {regexp -nocase -all -- {^(\s*?)\$([a-zA-Z0-9\-_$]+)\s+=\s+(.+?)(\s*;$)} $line match indent varName varValue lineEnd}
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# INI
|
||||||
|
dict set lexers INI commentSymbol {#}
|
||||||
|
dict set lexers INI tabSize 4
|
||||||
|
dict set lexers INI procFindString {(\[)PROCNAME(\])}
|
||||||
|
# dict set lexers INI procRegexpCommand {regexp -nocase -all -- {^\s*?(\[)([a-zA-Z0-9\-_:\s]+?)(\])$} $line match keyWord procName}
|
||||||
|
dict set lexers INI procRegexpCommand {regexp -nocase -all -- {^\s*?(\[)(.+?)(\])$} $line match keyWord procName}
|
||||||
|
|
||||||
|
# -------------------------------------------------
|
||||||
|
# HTML
|
||||||
|
dict set lexers HTML commentSymbol {<!--}
|
||||||
|
dict set lexers HTML commentMultilineSymbolBegin {<!--}
|
||||||
|
dict set lexers HTML commentMultilineSymbolEnd {-->}
|
||||||
|
dict set lexers HTML tabSize 4
|
||||||
|
dict set lexers HTML procFindString {<h[0-9]>(<.+>|)PROCNAME(</.+>|)</h[0-9]>}
|
||||||
|
dict set lexers HTML procRegexpCommand {regexp -nocase -all -- {<h[0-9]>(<.+>|)(.+?)(</.+>|)</h[0-9]>} $line match v1 procName v2}
|
||||||
|
|
||||||
|
# -------------------------------------------------
|
||||||
|
# HTM
|
||||||
|
dict set lexers HTM commentSymbol {<!--}
|
||||||
|
dict set lexers HTM commentMultilineSymbolBegin {<!--}
|
||||||
|
dict set lexers HTM commentMultilineSymbolEnd {-->}
|
||||||
|
dict set lexers HTM tabSize 4
|
||||||
|
dict set lexers HTM procFindString {<h[0-9]>(<.+>|)PROCNAME(</.+>|)</h[0-9]>}
|
||||||
|
dict set lexers HTM procRegexpCommand {regexp -nocase -all -- {<h[0-9]>(<.+>|)(.+?)(</.+>|)</h[0-9]>} $line match v1 procName v2}
|
||||||
|
|
||||||
|
#--------------------------------------------------
|
||||||
|
# LUA
|
||||||
|
dict set lexers LUA commentSymbol {--}
|
||||||
|
dict set lexers LUA procFindString {function\s*?PROCNAME}
|
||||||
|
dict set lexers LUA procRegexpCommand {regexp -nocase -all -- {^(local|)\s*?(function)\s([a-zA-Z0-9\-_:]+?)\s+\((.+?)\)} $line match v1 keyWord procName params}
|
||||||
|
dict set lexers LUA varRegexpCommand {regexp -nocase -all -- {^(\s*?)([a-zA-Z0-9\-_\.]+)\s+=\s+(.+?)(\s*$|--)} $line match indent varName varValue lineEnd}
|
||||||
|
|
||||||
|
# -------------------------------------------------
|
||||||
dict set lexers ALL varDirectory {variables vars group_vars host_vars defaults}
|
dict set lexers ALL varDirectory {variables vars group_vars host_vars defaults}
|
||||||
|
59
lib/menu.tcl
59
lib/menu.tcl
@@ -22,10 +22,15 @@ proc GetFileMenu {m} {
|
|||||||
-accelerator "Ctrl+S"
|
-accelerator "Ctrl+S"
|
||||||
$m add command -label [::msgcat::mc "Close file"] -command {FileOper::Close}\
|
$m add command -label [::msgcat::mc "Close file"] -command {FileOper::Close}\
|
||||||
-accelerator "Ctrl+w"
|
-accelerator "Ctrl+w"
|
||||||
|
$m add command -label [::msgcat::mc "Close all"] -command {FileOper::CloseAll}
|
||||||
|
|
||||||
|
$m add separator
|
||||||
|
|
||||||
$m add command -label [::msgcat::mc "Open folder"] -accelerator "Ctrl+K" -command {
|
$m add command -label [::msgcat::mc "Open folder"] -accelerator "Ctrl+K" -command {
|
||||||
set folderPath [FileOper::OpenFolderDialog]
|
set folderPath [FileOper::OpenFolderDialog]
|
||||||
if {$folderPath != ""} {
|
if {$folderPath != ""} {
|
||||||
set activeProject $folderPath
|
# set activeProject $folderPath
|
||||||
|
SetActiveProject $folderPath
|
||||||
FileOper::ReadFolder $folderPath
|
FileOper::ReadFolder $folderPath
|
||||||
ReadFilesFromDirectory $folderPath $folderPath
|
ReadFilesFromDirectory $folderPath $folderPath
|
||||||
}
|
}
|
||||||
@@ -69,26 +74,58 @@ proc GetEditMenu {m} {
|
|||||||
|
|
||||||
proc GetViewMenu {m} {
|
proc GetViewMenu {m} {
|
||||||
global cfgVariables
|
global cfgVariables
|
||||||
$m add command -label [::msgcat::mc "View panel"] -command ViewFilesTree
|
$m add checkbutton -label [::msgcat::mc "View panel"] -command ViewFilesTree \
|
||||||
|
-variable cfgVariables(filesPanelShow) -onvalue true -offvalue false \
|
||||||
|
-accelerator "Alt+P"
|
||||||
menu $m.panelSide
|
menu $m.panelSide
|
||||||
$m add cascade -label [::msgcat::mc "Panel side"] -menu $m.panelSide
|
$m add cascade -label [::msgcat::mc "Panel side"] -menu $m.panelSide
|
||||||
|
$m.panelSide add radiobutton -label [::msgcat::mc "Left"] \
|
||||||
|
-variable cfgVariables(filesPanelPlace) -value left -command ViewFilesTree
|
||||||
|
$m.panelSide add radiobutton -label [::msgcat::mc "Right"] \
|
||||||
|
-variable cfgVariables(filesPanelPlace) -value right -command ViewFilesTree
|
||||||
|
|
||||||
$m.panelSide add radiobutton -label [::msgcat::mc "Left"] -variable cfgVariables(filesPanelPlace) -value left
|
$m add checkbutton -label [::msgcat::mc "Show the Menu"] -command ViewMenuBar \
|
||||||
$m.panelSide add radiobutton -label [::msgcat::mc "Right"] -variable cfgVariables(filesPanelPlace) -value right
|
-variable cfgVariables(menuShow) -onvalue true -offvalue false
|
||||||
|
$m add checkbutton -label [::msgcat::mc "Toolbar"] -command ViewToolBar \
|
||||||
|
-variable cfgVariables(toolBarShow) -onvalue true -offvalue false
|
||||||
|
$m add checkbutton -label [::msgcat::mc "Statusbar"] -command ViewStatusBar \
|
||||||
|
-variable cfgVariables(statusBarShow) -onvalue true -offvalue false
|
||||||
|
|
||||||
$m add separator
|
$m add separator
|
||||||
$m add command -label [::msgcat::mc "View line numbers"] -command ViewLineNumbers
|
# $m add command -label [::msgcat::mc "View line numbers"] \
|
||||||
|
# -command ViewLineNumbers
|
||||||
|
$m add checkbutton -label [::msgcat::mc "View line numbers"] \
|
||||||
|
-variable cfgVariables(lineNumberShow) -onvalue true -offvalue false \
|
||||||
|
-command ViewLineNumbers
|
||||||
|
|
||||||
menu $m.editorWrap
|
menu $m.editorWrap
|
||||||
$m add cascade -label [::msgcat::mc "Editors word wrapping"] -menu $m.editorWrap
|
$m add cascade -label [::msgcat::mc "Editors word wrapping"] -menu $m.editorWrap
|
||||||
$m.editorWrap add radiobutton -label [::msgcat::mc "None"] -variable cfgVariables(editorWrap) -value none \
|
$m.editorWrap add radiobutton -label [::msgcat::mc "None"] -variable cfgVariables(editorWrap) \
|
||||||
-command "Editor::SetOption wrap $cfgVariables(editorWrap)"
|
-value none -command "Editor::SetOption wrap $cfgVariables(editorWrap)"
|
||||||
$m.editorWrap add radiobutton -label [::msgcat::mc "Char"] -variable cfgVariables(editorWrap) -value char \
|
$m.editorWrap add radiobutton -label [::msgcat::mc "Char"] -variable cfgVariables(editorWrap) \
|
||||||
-command "Editor::SetOption wrap $cfgVariables(editorWrap)"
|
-value char -command "Editor::SetOption wrap $cfgVariables(editorWrap)"
|
||||||
$m.editorWrap add radiobutton -label [::msgcat::mc "Word"] -variable cfgVariables(editorWrap) -value word \
|
$m.editorWrap add radiobutton -label [::msgcat::mc "Word"] -variable cfgVariables(editorWrap) \
|
||||||
-command "Editor::SetOption wrap $cfgVariables(editorWrap)"
|
-value word -command "Editor::SetOption wrap $cfgVariables(editorWrap)"
|
||||||
|
|
||||||
|
$m add separator
|
||||||
|
menu $m.editorHelper
|
||||||
|
$m add cascade -label [::msgcat::mc "Editor helpers"] -menu $m.editorHelper
|
||||||
|
$m.editorHelper add checkbutton -label [::msgcat::mc "Variables"] \
|
||||||
|
-variable cfgVariables(variableHelper) -onvalue true -offvalue false
|
||||||
|
# -command "ViewHelper variableHelper"
|
||||||
|
|
||||||
|
$m.editorHelper add checkbutton -label [::msgcat::mc "Procedures"] \
|
||||||
|
-variable cfgVariables(procedureHelper) -onvalue true -offvalue false
|
||||||
|
# -command "ViewHelper procedureHelper"
|
||||||
|
|
||||||
|
$m add checkbutton -label [::msgcat::mc "Multiline comments"] \
|
||||||
|
-variable cfgVariables(multilineComments) -onvalue true -offvalue false
|
||||||
}
|
}
|
||||||
|
|
||||||
proc GetHelpMenu {m} {
|
proc GetHelpMenu {m} {
|
||||||
$m add command -label [::msgcat::mc "About ..."] -command Help::About
|
$m add command -label [::msgcat::mc "About ..."] -command Help::About
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc PopupMenu {x y} {
|
||||||
|
tk_popup .popup $x $y
|
||||||
|
}
|
||||||
|
@@ -9,10 +9,13 @@
|
|||||||
::msgcat::mcset ru "Add as new project" "Добавить как Новый Проект"
|
::msgcat::mcset ru "Add as new project" "Добавить как Новый Проект"
|
||||||
::msgcat::mcset ru "Add to existing project" "Добавить в существующий проект"
|
::msgcat::mcset ru "Add to existing project" "Добавить в существующий проект"
|
||||||
::msgcat::mcset ru "Add to project" "Добавить в проект"
|
::msgcat::mcset ru "Add to project" "Добавить в проект"
|
||||||
|
::msgcat::mcset ru "Add new branch" "Создать новую ветку"
|
||||||
::msgcat::mcset ru "Archive created in" "Архив помещен в"
|
::msgcat::mcset ru "Archive created in" "Архив помещен в"
|
||||||
::msgcat::mcset ru "Archive directory" "Каталог c архивами"
|
::msgcat::mcset ru "Archive directory" "Каталог c архивами"
|
||||||
::msgcat::mcset ru "Archive file mask" "Маска архива"
|
::msgcat::mcset ru "Archive file mask" "Маска архива"
|
||||||
::msgcat::mcset ru "Author" "Автор"
|
::msgcat::mcset ru "Author" "Автор"
|
||||||
|
::msgcat::mcset ru "Authorization" "Авторизация"
|
||||||
|
::msgcat::mcset ru "Authorization required" "Требуется авторизация"
|
||||||
::msgcat::mcset ru "Braces" "Скобки"
|
::msgcat::mcset ru "Braces" "Скобки"
|
||||||
::msgcat::mcset ru "Branch" "Ветка"
|
::msgcat::mcset ru "Branch" "Ветка"
|
||||||
::msgcat::mcset ru "Quad braces" "Квадратные скобки"
|
::msgcat::mcset ru "Quad braces" "Квадратные скобки"
|
||||||
@@ -29,6 +32,7 @@
|
|||||||
::msgcat::mcset ru "Comments" "Коментарии"
|
::msgcat::mcset ru "Comments" "Коментарии"
|
||||||
::msgcat::mcset ru "Comment selected" "Закоментировать"
|
::msgcat::mcset ru "Comment selected" "Закоментировать"
|
||||||
::msgcat::mcset ru "Uncomment selected" "Раскоментировать"
|
::msgcat::mcset ru "Uncomment selected" "Раскоментировать"
|
||||||
|
::msgcat::mcset ru "Clone repository" "Клонировать репозиторий"
|
||||||
::msgcat::mcset ru "Column" "Столбец"
|
::msgcat::mcset ru "Column" "Столбец"
|
||||||
::msgcat::mcset ru "Commit" "Коммита"
|
::msgcat::mcset ru "Commit" "Коммита"
|
||||||
::msgcat::mcset ru "Commit description" "Описание коммита"
|
::msgcat::mcset ru "Commit description" "Описание коммита"
|
||||||
@@ -71,7 +75,9 @@
|
|||||||
::msgcat::mcset ru "Editor font" "Шрифт редактора"
|
::msgcat::mcset ru "Editor font" "Шрифт редактора"
|
||||||
::msgcat::mcset ru "Editor font bold" "Шрифт редактора жирный"
|
::msgcat::mcset ru "Editor font bold" "Шрифт редактора жирный"
|
||||||
::msgcat::mcset ru "Editor settings" "Настройки редактора"
|
::msgcat::mcset ru "Editor settings" "Настройки редактора"
|
||||||
|
::msgcat::mcset ru "Editor helpers" "Подсказки при вводе"
|
||||||
::msgcat::mcset ru "Encode" "Перекодировка"
|
::msgcat::mcset ru "Encode" "Перекодировка"
|
||||||
|
::msgcat::mcset ru "Authorisation required" "Требуется авторизация"
|
||||||
::msgcat::mcset ru "Error open URL" "Ошибка открытия URL"
|
::msgcat::mcset ru "Error open URL" "Ошибка открытия URL"
|
||||||
::msgcat::mcset ru "Exit" "Выход"
|
::msgcat::mcset ru "Exit" "Выход"
|
||||||
::msgcat::mcset ru "File" "Файл"
|
::msgcat::mcset ru "File" "Файл"
|
||||||
@@ -85,6 +91,7 @@
|
|||||||
::msgcat::mcset ru "Find" "Найти"
|
::msgcat::mcset ru "Find" "Найти"
|
||||||
::msgcat::mcset ru "Found" "Найдено"
|
::msgcat::mcset ru "Found" "Найдено"
|
||||||
::msgcat::mcset ru "Find in files" "Найти в файлах"
|
::msgcat::mcset ru "Find in files" "Найти в файлах"
|
||||||
|
::msgcat::mcset ru "for" "для"
|
||||||
::msgcat::mcset ru "Font normal" "Нормальный шрифт"
|
::msgcat::mcset ru "Font normal" "Нормальный шрифт"
|
||||||
::msgcat::mcset ru "Font bold" "Жирный шрифт"
|
::msgcat::mcset ru "Font bold" "Жирный шрифт"
|
||||||
::msgcat::mcset ru "FTP password" "FTP пароль"
|
::msgcat::mcset ru "FTP password" "FTP пароль"
|
||||||
@@ -97,6 +104,7 @@
|
|||||||
::msgcat::mcset ru "Image dir" "Каталог изображений"
|
::msgcat::mcset ru "Image dir" "Каталог изображений"
|
||||||
::msgcat::mcset ru "Indent foreground" "Подсветка отступа"
|
::msgcat::mcset ru "Indent foreground" "Подсветка отступа"
|
||||||
::msgcat::mcset ru "Indent background" "Подсветка отступа"
|
::msgcat::mcset ru "Indent background" "Подсветка отступа"
|
||||||
|
::msgcat::mcset ru "Init repository" "Создать репозиторий"
|
||||||
::msgcat::mcset ru "Insert" "Вставка"
|
::msgcat::mcset ru "Insert" "Вставка"
|
||||||
::msgcat::mcset ru "In" "В"
|
::msgcat::mcset ru "In" "В"
|
||||||
::msgcat::mcset ru "Insert image" "Вставить изображение"
|
::msgcat::mcset ru "Insert image" "Вставить изображение"
|
||||||
@@ -116,6 +124,7 @@
|
|||||||
::msgcat::mcset ru "Matches" "Совпадений"
|
::msgcat::mcset ru "Matches" "Совпадений"
|
||||||
::msgcat::mcset ru "Modules" "Модули"
|
::msgcat::mcset ru "Modules" "Модули"
|
||||||
::msgcat::mcset ru "Modifying the Registry..." "Внесение изменений в реестр"
|
::msgcat::mcset ru "Modifying the Registry..." "Внесение изменений в реестр"
|
||||||
|
::msgcat::mcset ru "Multiline comments" "Многострочные комментарии"
|
||||||
::msgcat::mcset ru "Must be one file select!" "Вы должны выбрать только один файл"
|
::msgcat::mcset ru "Must be one file select!" "Вы должны выбрать только один файл"
|
||||||
::msgcat::mcset ru "Must be one or two file select!" "Вы должны выбрать один или два файла"
|
::msgcat::mcset ru "Must be one or two file select!" "Вы должны выбрать один или два файла"
|
||||||
::msgcat::mcset ru "Network" "Сеть"
|
::msgcat::mcset ru "Network" "Сеть"
|
||||||
@@ -135,7 +144,7 @@
|
|||||||
::msgcat::mcset ru "Operators" "Операторы"
|
::msgcat::mcset ru "Operators" "Операторы"
|
||||||
::msgcat::mcset ru "Overwrite" "Замена"
|
::msgcat::mcset ru "Overwrite" "Замена"
|
||||||
::msgcat::mcset ru "Parameters" "Параметры"
|
::msgcat::mcset ru "Parameters" "Параметры"
|
||||||
::msgcat::mcset ru "Subparameters" "Субпараметры"
|
::msgcat::mcset ru "Password" "Пароль"
|
||||||
::msgcat::mcset ru "Paste" "Вставить"
|
::msgcat::mcset ru "Paste" "Вставить"
|
||||||
::msgcat::mcset ru "Paste from clipboard" "Вставить из буфера"
|
::msgcat::mcset ru "Paste from clipboard" "Вставить из буфера"
|
||||||
::msgcat::mcset ru "Percent" "Знак процента"
|
::msgcat::mcset ru "Percent" "Знак процента"
|
||||||
@@ -143,6 +152,7 @@
|
|||||||
::msgcat::mcset ru "Print" "Печать"
|
::msgcat::mcset ru "Print" "Печать"
|
||||||
::msgcat::mcset ru "Print command" "Команда печати"
|
::msgcat::mcset ru "Print command" "Команда печати"
|
||||||
::msgcat::mcset ru "Print selected text" "Печатать выделенный текст"
|
::msgcat::mcset ru "Print selected text" "Печатать выделенный текст"
|
||||||
|
::msgcat::mcset ru "Procedures" "Процедуры"
|
||||||
::msgcat::mcset ru "Procedure name" "Имя процедуры"
|
::msgcat::mcset ru "Procedure name" "Имя процедуры"
|
||||||
::msgcat::mcset ru "Procedure name complit" "Автодобивка процедуры"
|
::msgcat::mcset ru "Procedure name complit" "Автодобивка процедуры"
|
||||||
::msgcat::mcset ru "Program finished successfully" "Выполнение завершено"
|
::msgcat::mcset ru "Program finished successfully" "Выполнение завершено"
|
||||||
@@ -186,17 +196,20 @@
|
|||||||
::msgcat::mcset ru "Selected directory" "Директория"
|
::msgcat::mcset ru "Selected directory" "Директория"
|
||||||
::msgcat::mcset ru "Selection color" "Цвет выделения"
|
::msgcat::mcset ru "Selection color" "Цвет выделения"
|
||||||
::msgcat::mcset ru "Settings" "Установки"
|
::msgcat::mcset ru "Settings" "Установки"
|
||||||
|
::msgcat::mcset ru "Statusbar" "Строка статуса"
|
||||||
::msgcat::mcset ru "Show backup files" "Показывать временные файлы"
|
::msgcat::mcset ru "Show backup files" "Показывать временные файлы"
|
||||||
::msgcat::mcset ru "Show the Menu" "Показывать меню"
|
::msgcat::mcset ru "Show the Menu" "Показывать меню"
|
||||||
::msgcat::mcset ru "Show dot files" "Показывать скрытые файлы"
|
::msgcat::mcset ru "Show dot files" "Показывать скрытые файлы"
|
||||||
::msgcat::mcset ru "Specify the absolute path to the directory or file" "Укажите полный путь к каталогу или файлу"
|
::msgcat::mcset ru "Specify the absolute path to the directory or file" "Укажите полный путь к каталогу или файлу"
|
||||||
::msgcat::mcset ru "Split edit window" "Разделить окно редактора"
|
::msgcat::mcset ru "Split edit window" "Разделить окно редактора"
|
||||||
::msgcat::mcset ru "SQL commands" "SQL команды"
|
::msgcat::mcset ru "SQL commands" "SQL команды"
|
||||||
|
::msgcat::mcset ru "Subparameters" "Субпараметры"
|
||||||
::msgcat::mcset ru "Text autoformat" "Автоформат текста"
|
::msgcat::mcset ru "Text autoformat" "Автоформат текста"
|
||||||
::msgcat::mcset ru "Thanks" "Благодарности"
|
::msgcat::mcset ru "Thanks" "Благодарности"
|
||||||
::msgcat::mcset ru "Title normal" "Файл нормальный"
|
::msgcat::mcset ru "Title normal" "Файл нормальный"
|
||||||
::msgcat::mcset ru "Title modify" "Файл изменен"
|
::msgcat::mcset ru "Title modify" "Файл изменен"
|
||||||
::msgcat::mcset ru "Toolbar" "Панель инструментов"
|
::msgcat::mcset ru "Toolbar" "Панель инструментов"
|
||||||
|
::msgcat::mcset ru "User name" "Имя пользователя"
|
||||||
::msgcat::mcset ru "Undo" "Отменить"
|
::msgcat::mcset ru "Undo" "Отменить"
|
||||||
::msgcat::mcset ru "Update" "Обновить"
|
::msgcat::mcset ru "Update" "Обновить"
|
||||||
::msgcat::mcset ru "Untraceable file" "Неотслеживаемый файл"
|
::msgcat::mcset ru "Untraceable file" "Неотслеживаемый файл"
|
||||||
@@ -204,7 +217,7 @@
|
|||||||
::msgcat::mcset ru "Variables" "Переменные"
|
::msgcat::mcset ru "Variables" "Переменные"
|
||||||
::msgcat::mcset ru "Version" "Версия"
|
::msgcat::mcset ru "Version" "Версия"
|
||||||
::msgcat::mcset ru "View" "Вид"
|
::msgcat::mcset ru "View" "Вид"
|
||||||
::msgcat::mcset ru "View panel" "Показывать дополнительную панель"
|
::msgcat::mcset ru "View panel" "Показывать панель"
|
||||||
::msgcat::mcset ru "Panel side" "Расположение дополнительной панели"
|
::msgcat::mcset ru "Panel side" "Расположение дополнительной панели"
|
||||||
::msgcat::mcset ru "Left" "Слева"
|
::msgcat::mcset ru "Left" "Слева"
|
||||||
::msgcat::mcset ru "Right" "Справа"
|
::msgcat::mcset ru "Right" "Справа"
|
||||||
|
@@ -38,8 +38,13 @@ namespace eval NB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc PressTab {w x y} {
|
proc PressTab {w x y} {
|
||||||
|
global tree
|
||||||
if {[$w identify tab $x $y] ne ""} {
|
if {[$w identify tab $x $y] ne ""} {
|
||||||
$w select [$w identify tab $x $y]
|
$w select [$w identify tab $x $y]
|
||||||
|
set nbItem [string trimleft [$w select] "$w."]
|
||||||
|
# puts $nbItem
|
||||||
|
append treeItemName "file" "::" $nbItem
|
||||||
|
Tree::SelectItem $treeItemName
|
||||||
} else {
|
} else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -54,7 +59,11 @@ namespace eval NB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc NextTab {w step} {
|
proc NextTab {w step} {
|
||||||
|
global tree
|
||||||
set i [expr [$w index end] - 1]
|
set i [expr [$w index end] - 1]
|
||||||
|
if {[$w select] eq ""} {
|
||||||
|
return
|
||||||
|
}
|
||||||
set nbItemIndex [$w index [$w select]]
|
set nbItemIndex [$w index [$w select]]
|
||||||
if {$nbItemIndex eq 0 && $step eq "-1"} {
|
if {$nbItemIndex eq 0 && $step eq "-1"} {
|
||||||
$w select $i
|
$w select $i
|
||||||
@@ -63,7 +72,14 @@ namespace eval NB {
|
|||||||
} else {
|
} else {
|
||||||
$w select [expr $nbItemIndex + $step]
|
$w select [expr $nbItemIndex + $step]
|
||||||
}
|
}
|
||||||
|
set nbItem [string trimleft [$w select] "$w."]
|
||||||
|
# puts $nbItem
|
||||||
|
append treeItemName "file" "::" $nbItem
|
||||||
|
Tree::SelectItem $treeItemName
|
||||||
|
|
||||||
set txt [$w select].frmText.t
|
set txt [$w select].frmText.t
|
||||||
focus -force $txt.t
|
if [winfo exists $txt] {
|
||||||
|
focus -force $txt.t
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -19,39 +19,162 @@ proc Quit {} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
proc ViewFilesTree {} {
|
proc ViewFilesTree {{hotkey "false"}} {
|
||||||
global cfgVariables
|
global cfgVariables
|
||||||
if {$cfgVariables(filesPanelShow) eq "true"} {
|
if {$hotkey eq "true"} {
|
||||||
|
if {$cfgVariables(filesPanelShow) eq "false"} {
|
||||||
|
set cfgVariables(filesPanelShow) true
|
||||||
|
} else {
|
||||||
|
set cfgVariables(filesPanelShow) false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if {$cfgVariables(filesPanelShow) eq "false"} {
|
||||||
.frmBody.panel forget .frmBody.frmTree
|
.frmBody.panel forget .frmBody.frmTree
|
||||||
set cfgVariables(filesPanelShow) false
|
|
||||||
} else {
|
} else {
|
||||||
switch $cfgVariables(filesPanelPlace) {
|
switch $cfgVariables(filesPanelPlace) {
|
||||||
"left" {
|
"left" {
|
||||||
.frmBody.panel insert 0 .frmBody.frmTree
|
.frmBody.panel insert 0 .frmBody.frmTree
|
||||||
}
|
}
|
||||||
"right" {
|
"right" {
|
||||||
|
if {[lsearch -exact [.frmBody.panel panes] .frmBody.frmTree] != -1} {
|
||||||
|
.frmBody.panel forget .frmBody.frmTree
|
||||||
|
}
|
||||||
.frmBody.panel add .frmBody.frmTree
|
.frmBody.panel add .frmBody.frmTree
|
||||||
}
|
}
|
||||||
default {
|
default {
|
||||||
.frmBody.panel insert 0 .frmBody.frmTree
|
.frmBody.panel insert 0 .frmBody.frmTree
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
set cfgVariables(filesPanelShow) true
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ViewMenuBar {{hotkey "false"}} {
|
||||||
|
global cfgVariables
|
||||||
|
if {$hotkey eq "true"} {
|
||||||
|
if {$cfgVariables(menuShow) eq "false"} {
|
||||||
|
set cfgVariables(menuShow) true
|
||||||
|
} else {
|
||||||
|
set cfgVariables(menuShow) false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if {$cfgVariables(menuShow) eq "false"} {
|
||||||
|
grid remove .frmMenu
|
||||||
|
} else {
|
||||||
|
grid .frmMenu -row 0 -column 0 -sticky new
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ViewStatusBar {{hotkey "false"}} {
|
||||||
|
global cfgVariables
|
||||||
|
if {$hotkey eq "true"} {
|
||||||
|
if {$cfgVariables(statusBarShow) eq "false"} {
|
||||||
|
set cfgVariables(statusBarShow) true
|
||||||
|
} else {
|
||||||
|
set cfgVariables(statusBarShow) false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if {$cfgVariables(statusBarShow) eq "false"} {
|
||||||
|
grid remove .frmStatus
|
||||||
|
} else {
|
||||||
|
grid .frmStatus -row 2 -column 0 -sticky sew
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ViewToolBar {{hotkey "false"}} {
|
||||||
|
global cfgVariables
|
||||||
|
if {$hotkey eq "true"} {
|
||||||
|
if {$cfgVariables(toolBarShow) eq "false"} {
|
||||||
|
set cfgVariables(toolBarShow) true
|
||||||
|
} else {
|
||||||
|
set cfgVariables(toolBarShow) false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if {$cfgVariables(toolBarShow) eq "false"} {
|
||||||
|
grid remove .frmBody.frmTool
|
||||||
|
} else {
|
||||||
|
grid .frmBody.frmTool -row 0 -column 0 -sticky nsw
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Enable/Disabled line numbers in editor
|
# Enable/Disabled line numbers in editor
|
||||||
proc ViewLineNumbers {} {
|
proc ViewLineNumbers {} {
|
||||||
global cfgVariables nbEditor
|
global cfgVariables nbEditor
|
||||||
# Changed global settigs
|
|
||||||
if {$cfgVariables(lineNumberShow) eq "true"} {
|
|
||||||
set cfgVariables(lineNumberShow) false
|
|
||||||
} else {
|
|
||||||
set cfgVariables(lineNumberShow) true
|
|
||||||
}
|
|
||||||
# apply changes for opened tabs
|
|
||||||
foreach node [$nbEditor tabs] {
|
foreach node [$nbEditor tabs] {
|
||||||
$node.frmText.t configure -linemap $cfgVariables(lineNumberShow)
|
if [winfo exists $node.frmText.t] {
|
||||||
|
$node.frmText.t configure -linemap $cfgVariables(lineNumberShow)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ViewHelper {helper} {
|
||||||
|
global cfgVariables
|
||||||
|
# Changed global settigs
|
||||||
|
if {$cfgVariables($helper) eq "true"} {
|
||||||
|
set cfgVariables($helper) false
|
||||||
|
} else {
|
||||||
|
set cfgVariables($helper) true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
proc WelcomeDialog {} {
|
||||||
|
set win .welcome
|
||||||
|
set x [winfo rootx .frmWork]
|
||||||
|
set y [winfo rooty .frmWork]
|
||||||
|
|
||||||
|
if { [winfo exists $win] } {
|
||||||
|
destroy $win
|
||||||
|
return
|
||||||
|
}
|
||||||
|
toplevel $win
|
||||||
|
wm transient $win .
|
||||||
|
wm overrideredirect $win 1
|
||||||
|
|
||||||
|
ttk::button $win.btnOpenFolder -text [::msgcat::mc "Open folder"] -command {
|
||||||
|
destroy .welcome
|
||||||
|
set folderPath [FileOper::OpenFolderDialog]
|
||||||
|
if {$folderPath != ""} {
|
||||||
|
set activeProject $folderPath
|
||||||
|
FileOper::ReadFolder $folderPath
|
||||||
|
ReadFilesFromDirectory $folderPath $folderPath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ttk::button $win.btnOpenFile -text [::msgcat::mc "Open file"] -command {
|
||||||
|
destroy .welcome
|
||||||
|
set filePath [FileOper::OpenDialog]
|
||||||
|
if {$filePath != ""} {
|
||||||
|
FileOper::Edit $filePath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ttk::button $win.btnNewFile -compound center -text [::msgcat::mc "New file"] \
|
||||||
|
-command {
|
||||||
|
destroy .welcome
|
||||||
|
Editor::New
|
||||||
|
}
|
||||||
|
|
||||||
|
pack $win.btnOpenFolder -expand true -fill x -side top -padx 3 -pady 3
|
||||||
|
pack $win.btnOpenFile -expand true -fill x -side top -padx 3 -pady 3
|
||||||
|
pack $win.btnNewFile -expand true -fill x -side top -padx 3 -pady 3
|
||||||
|
|
||||||
|
bind $win <Escape> "destroy $win"
|
||||||
|
# Определям расстояние до края экрана (основного окна) и если
|
||||||
|
# оно меньше размера окна со списком то сдвигаем его вверх
|
||||||
|
set winGeom [winfo reqheight $win]
|
||||||
|
set topHeight [winfo height .]
|
||||||
|
# puts "$x, $y, $winGeom, $topHeight"
|
||||||
|
if [expr [expr $topHeight - $y] < $winGeom] {
|
||||||
|
set y [expr $topHeight - $winGeom]
|
||||||
|
}
|
||||||
|
wm geom $win +$x+$y
|
||||||
|
focus $win.btnOpenFolder
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ToolBtnTreePress {} {
|
||||||
|
global cfgVariables activeProject
|
||||||
|
if [info exists activeProject] {
|
||||||
|
if {$activeProject ne ""} {
|
||||||
|
ViewFilesTree true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
WelcomeDialog
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,20 +187,20 @@ proc YScrollCommand {txt canv} {
|
|||||||
$canv yview"
|
$canv yview"
|
||||||
}
|
}
|
||||||
|
|
||||||
proc ResetModifiedFlag {w} {
|
proc ResetModifiedFlag {w nbEditor} {
|
||||||
global modified nbEditor
|
global modified
|
||||||
$w.frmText.t edit modified false
|
$w.frmText.t edit modified false
|
||||||
set modified($w) "false"
|
set modified($w) "false"
|
||||||
set lbl [string trimleft [$nbEditor tab $w -text] "* "]
|
set lbl [string trimleft [$nbEditor tab $w -text] "* "]
|
||||||
puts "ResetModifiedFlag: $lbl"
|
# puts "ResetModifiedFlag: $lbl"
|
||||||
$nbEditor tab $w -text $lbl
|
$nbEditor tab $w -text $lbl
|
||||||
}
|
}
|
||||||
proc SetModifiedFlag {w} {
|
proc SetModifiedFlag {w nbEditor} {
|
||||||
global modified nbEditor
|
global modified
|
||||||
#$w.frmText.t edit modified false
|
#$w.frmText.t edit modified false
|
||||||
set modified($w) "true"
|
set modified($w) "true"
|
||||||
set lbl [$nbEditor tab $w -text]
|
set lbl [$nbEditor tab $w -text]
|
||||||
puts "SetModifiedFlag: $w; $modified($w); >$lbl<"
|
# puts "SetModifiedFlag: $w; $modified($w); >$lbl<"
|
||||||
if {[regexp -nocase -all -- {^\*} $lbl match] == 0} {
|
if {[regexp -nocase -all -- {^\*} $lbl match] == 0} {
|
||||||
set lbl "* $lbl"
|
set lbl "* $lbl"
|
||||||
}
|
}
|
||||||
@@ -106,12 +229,27 @@ proc ImageBase64Encode {} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
proc FindImage {ext} {
|
proc FindImage {ext} {
|
||||||
|
set imageType {
|
||||||
|
PNG
|
||||||
|
JPG
|
||||||
|
JPEG
|
||||||
|
WEBP
|
||||||
|
GIF
|
||||||
|
TIFF
|
||||||
|
JP2
|
||||||
|
ICO
|
||||||
|
XPM
|
||||||
|
SVG
|
||||||
|
}
|
||||||
foreach img [image names] {
|
foreach img [image names] {
|
||||||
if [regexp -nocase -all -- "^($ext)(_)" $img match v1 v2] {
|
if [regexp -nocase -all -- "^($ext)(_16x12)" $img match v1 v2] {
|
||||||
# puts "\nFindinig images: $img \n"
|
# puts "\nFindinig images: $img \n"
|
||||||
return $img
|
return $img
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if {[lsearch -exact -nocase $imageType $ext] != -1} {
|
||||||
|
return image_16x12
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace eval Help {
|
namespace eval Help {
|
||||||
@@ -180,6 +318,9 @@ proc FindVariablesDialog {txt args} {
|
|||||||
set y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
|
set y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
|
||||||
|
|
||||||
set win .findVariables
|
set win .findVariables
|
||||||
|
if [winfo exists .varhelper] {
|
||||||
|
destroy .varhelper
|
||||||
|
}
|
||||||
|
|
||||||
if { [winfo exists $win] } { destroy $win }
|
if { [winfo exists $win] } { destroy $win }
|
||||||
toplevel $win
|
toplevel $win
|
||||||
@@ -385,7 +526,7 @@ proc FindInFilesDialog {txt {args ""}} {
|
|||||||
}
|
}
|
||||||
set win .find
|
set win .find
|
||||||
|
|
||||||
if { [winfo exists $win] } { destroy $win }
|
if { [winfo exists $win] } { destroy $win; return false}
|
||||||
toplevel $win
|
toplevel $win
|
||||||
wm transient $win .
|
wm transient $win .
|
||||||
wm overrideredirect $win 1
|
wm overrideredirect $win 1
|
||||||
@@ -428,15 +569,15 @@ proc FindInFilesDialog {txt {args ""}} {
|
|||||||
|
|
||||||
grid $win.entryFind -row 0 -column 0 -sticky nsew
|
grid $win.entryFind -row 0 -column 0 -sticky nsew
|
||||||
grid $win.entryReplace -row 1 -column 0 -sticky nsew
|
grid $win.entryReplace -row 1 -column 0 -sticky nsew
|
||||||
grid $win.bForward -row 0 -column 1 -sticky e
|
grid $win.bForward -row 0 -column 2 -sticky e -columnspan 2
|
||||||
grid $win.bDoneAll -row 1 -column 1 -sticky e
|
grid $win.bDoneAll -row 1 -column 2 -sticky e -columnspan 2
|
||||||
# grid $win.chkRegexp -row 2 -column 0 -sticky w
|
# grid $win.chkRegexp -row 2 -column 0 -sticky w
|
||||||
# grid $win.chkAll -row 2 -column 1 -sticky w
|
# grid $win.chkAll -row 2 -column 1 -sticky w
|
||||||
grid $win.lblCounter -row 2 -column 0 -columnspan 2 -sticky we
|
grid $win.lblCounter -row 2 -column 0 -columnspan 4 -sticky we
|
||||||
|
|
||||||
grid $win.lBox -row 3 -column 0 -columnspan 2 -sticky nsew
|
grid $win.lBox -row 3 -column 0 -columnspan 3 -sticky nsew
|
||||||
grid $win.v -row 3 -column 2 -sticky nsew
|
grid $win.v -row 3 -column 3 -sticky nsew
|
||||||
grid $win.h -row 4 -column 0 -sticky nsew
|
grid $win.h -row 4 -column 0 -sticky nsew -columnspan 4
|
||||||
grid columnconfigure $win 0 -weight 1
|
grid columnconfigure $win 0 -weight 1
|
||||||
grid rowconfigure $win 0 -weight 1
|
grid rowconfigure $win 0 -weight 1
|
||||||
|
|
||||||
@@ -513,4 +654,32 @@ proc FindInFilesDialog {txt {args ""}} {
|
|||||||
focus -force $win.entryFind
|
focus -force $win.entryFind
|
||||||
}
|
}
|
||||||
# $win.lBox focus I001
|
# $win.lBox focus I001
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
proc ShowMessage {title msg} {
|
||||||
|
set answer [
|
||||||
|
tk_messageBox -message $title \
|
||||||
|
-icon info -type ok -detail $msg
|
||||||
|
]
|
||||||
|
switch $answer {
|
||||||
|
ok {return}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc SetActiveProject {path} {
|
||||||
|
global activeProject projman
|
||||||
|
set activeProject $path
|
||||||
|
set titleFolder [file tail $path]
|
||||||
|
wm title . "ProjMan \($projman(Version)-$projman(Release)\) - $titleFolder"
|
||||||
|
# set file [string range $fullPath [expr [string last "/" $fullPath]+1] end]
|
||||||
|
# regsub -all "." $file "_" node
|
||||||
|
# set dir [file dirname $fullPath]
|
||||||
|
# EditFile .frmBody.frmCat.noteBook.ffiles.frmTreeFiles.treeFiles $node $fullPath
|
||||||
|
# puts $fullPath
|
||||||
|
# if ![info exists activeProject] {
|
||||||
|
# set activeProject $fullPath
|
||||||
|
# }
|
||||||
|
.frmStatus.lblGitLogo configure -image git_logo_20x20
|
||||||
|
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||||
}
|
}
|
||||||
|
@@ -141,6 +141,10 @@ proc ReadFilesFromDirectory {directory root {type ""}} {
|
|||||||
while {[gets $f line] >= 0} {
|
while {[gets $f line] >= 0} {
|
||||||
if [regexp -nocase -all -- {^\s*inventory\s*=\s*(\.\/|)(.+?)$} $line match v1 fileName] {
|
if [regexp -nocase -all -- {^\s*inventory\s*=\s*(\.\/|)(.+?)$} $line match v1 fileName] {
|
||||||
# puts "Inventory file is a: $line"
|
# puts "Inventory file is a: $line"
|
||||||
|
if ![file exists [file join $root $directory $fileName]] {
|
||||||
|
ShowMessage "Error in ansible.cfg" "Inventory File '[file join $root $directory $fileName]' does not exists"
|
||||||
|
continue
|
||||||
|
}
|
||||||
if {[lsearch $project($root) [file join $root $directory $fileName]] eq "-1"} {
|
if {[lsearch $project($root) [file join $root $directory $fileName]] eq "-1"} {
|
||||||
lappend project($root) [file join $root $directory $fileName]
|
lappend project($root) [file join $root $directory $fileName]
|
||||||
set variables([file join $root $directory $fileName]) \
|
set variables([file join $root $directory $fileName]) \
|
||||||
|
34
lib/tree.tcl
34
lib/tree.tcl
@@ -31,6 +31,8 @@ namespace eval Tree {
|
|||||||
set findImg [::FindImage gitlab]
|
set findImg [::FindImage gitlab]
|
||||||
} elseif {[string match {*bitbucket*} [string tolower $text]]} {
|
} elseif {[string match {*bitbucket*} [string tolower $text]]} {
|
||||||
set findImg [::FindImage bitbucket]
|
set findImg [::FindImage bitbucket]
|
||||||
|
} elseif {[string match {\.git*} [string tolower $text]]} {
|
||||||
|
set findImg [::FindImage git]
|
||||||
}
|
}
|
||||||
if {$fileExt ne "" || $findImg ne ""} {
|
if {$fileExt ne "" || $findImg ne ""} {
|
||||||
set image $findImg
|
set image $findImg
|
||||||
@@ -47,6 +49,8 @@ namespace eval Tree {
|
|||||||
set image [::FindImage redhat]
|
set image [::FindImage redhat]
|
||||||
} elseif {[string match {*gitlab*} [string tolower [file tail $item]]]} {
|
} elseif {[string match {*gitlab*} [string tolower [file tail $item]]]} {
|
||||||
set image [::FindImage gitlab]
|
set image [::FindImage gitlab]
|
||||||
|
} elseif {[string match {.git} [string tolower [file tail $item]]]} {
|
||||||
|
set image [::FindImage git]
|
||||||
} else {
|
} else {
|
||||||
set image pixel
|
set image pixel
|
||||||
}
|
}
|
||||||
@@ -78,7 +82,7 @@ namespace eval Tree {
|
|||||||
set key [lindex [split $id "::"] 0]
|
set key [lindex [split $id "::"] 0]
|
||||||
if {$values eq "" || $key eq ""} {return}
|
if {$values eq "" || $key eq ""} {return}
|
||||||
|
|
||||||
puts "$key $tree $values"
|
# puts "$key $tree $values"
|
||||||
switch $key {
|
switch $key {
|
||||||
directory {
|
directory {
|
||||||
FileOper::ReadFolder $values
|
FileOper::ReadFolder $values
|
||||||
@@ -91,23 +95,23 @@ namespace eval Tree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc PressItem {tree} {
|
proc PressItem {tree} {
|
||||||
global nbEditor lexers editors
|
global nbEditor lexers editors activeProject
|
||||||
set id [$tree selection]
|
set id [$tree selection]
|
||||||
$tree tag remove selected
|
$tree tag remove selected
|
||||||
$tree item $id -tags selected
|
$tree item $id -tags selected
|
||||||
|
SetActiveProject [GetItemID $tree [GetUpperItem $tree $id]]
|
||||||
set values [$tree item $id -values]
|
set values [$tree item $id -values]
|
||||||
set key [lindex [split $id "::"] 0]
|
set key [lindex [split $id "::"] 0]
|
||||||
if {$values eq "" || $key eq ""} {return}
|
if {$values eq "" || $key eq ""} {return}
|
||||||
|
|
||||||
puts "$key $tree $values"
|
# puts "$key $tree $values"
|
||||||
switch -regexp $key {
|
switch -regexp $key {
|
||||||
directory {
|
directory {
|
||||||
FileOper::ReadFolder $values
|
FileOper::ReadFolder $values
|
||||||
# $tree item $id -open false
|
# $tree item $id -open false
|
||||||
}
|
}
|
||||||
file {
|
file {
|
||||||
set v [FileOper::Edit $values]
|
set v [FileOper::Edit $values $nbEditor]
|
||||||
if {$v eq false} {
|
if {$v eq false} {
|
||||||
$tree delete $id
|
$tree delete $id
|
||||||
}
|
}
|
||||||
@@ -115,7 +119,7 @@ namespace eval Tree {
|
|||||||
}
|
}
|
||||||
I[0-9]*? {
|
I[0-9]*? {
|
||||||
destroy .findVariables
|
destroy .findVariables
|
||||||
FileOper::Edit [lindex $values 2]
|
FileOper::Edit [lindex $values 2] $nbEditor
|
||||||
}
|
}
|
||||||
default {
|
default {
|
||||||
set parentItem [$tree parent $id]
|
set parentItem [$tree parent $id]
|
||||||
@@ -136,4 +140,22 @@ namespace eval Tree {
|
|||||||
return [$tree item $item -values]
|
return [$tree item $item -values]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc SelectItem {treeItemName} {
|
||||||
|
global tree
|
||||||
|
if [$tree exists $treeItemName] {
|
||||||
|
$tree see $treeItemName
|
||||||
|
$tree selection set $treeItemName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc GetUpperItem {tree item} {
|
||||||
|
set parent [$tree parent $item]
|
||||||
|
if {$parent eq ""} {
|
||||||
|
return $item
|
||||||
|
} else {
|
||||||
|
GetUpperItem $tree $parent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -8,4 +8,4 @@ Type=Application
|
|||||||
StartupNotify=true
|
StartupNotify=true
|
||||||
MimeType=text/plain;
|
MimeType=text/plain;
|
||||||
Categories=Development;TextEditor;
|
Categories=Development;TextEditor;
|
||||||
Icon=projman-48
|
Icon=projman
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
108
projman.spec
108
projman.spec
@@ -1,108 +0,0 @@
|
|||||||
Name: projman
|
|
||||||
Version: 0.4.5
|
|
||||||
Release: rh1
|
|
||||||
Summary: Tcl/Tk Project Manager
|
|
||||||
License: GPL
|
|
||||||
Group: Development/Tcl
|
|
||||||
Url: https://bitbucket.org/svk28/projman
|
|
||||||
BuildArch: noarch
|
|
||||||
Source: %name-%version-%release.tar.gz
|
|
||||||
Requires: tcl, tk, bwidget, tcl-img
|
|
||||||
|
|
||||||
%description
|
|
||||||
This programm is Integrated Development Environment for Tcl/Tk language programming. Include - project manager, text and source editor with syntax highlightning, archive (tar.gz) and PRM builder and more.
|
|
||||||
|
|
||||||
%description -l ru_RU.UTF8
|
|
||||||
Интегрированная среда для программирования на Tcl/Tk. Включает в себя - менеджер проектов, полнофункциональный редактор, систему навигации по файлам и структуре файлов и многое другое.
|
|
||||||
|
|
||||||
%prep
|
|
||||||
%setup -n %name
|
|
||||||
|
|
||||||
%build
|
|
||||||
|
|
||||||
%install
|
|
||||||
mkdir -p $RPM_BUILD_ROOT{%_bindir,%_datadir/%name/{img,msgs,/lib/highlight}}
|
|
||||||
|
|
||||||
install -p -m755 projman.tcl $RPM_BUILD_ROOT%_bindir/%name
|
|
||||||
install -p -m644 *.tcl $RPM_BUILD_ROOT%_datadir/%name/
|
|
||||||
install -p -m644 lib/highlight/*.tcl $RPM_BUILD_ROOT%_datadir/%name/highlight/
|
|
||||||
install -p -m644 *.conf $RPM_BUILD_ROOT%_datadir/%name/
|
|
||||||
install -p -m644 img/*.* $RPM_BUILD_ROOT%_datadir/%name/img/
|
|
||||||
install -p -m644 msgs/*.* $RPM_BUILD_ROOT%_datadir/%name/msgs/
|
|
||||||
|
|
||||||
# Menu support
|
|
||||||
#mkdir -p $RPM_BUILD_ROOT/usr/lib/menu
|
|
||||||
#cat > $RPM_BUILD_ROOT%_libdir/menu/%name << EOF
|
|
||||||
#?package(%name): needs=x11 icon="projman.png" section="Applications/Development/Development environments" title=ProjMan longtitle="Tcl/Tk Project Manager" command=projman
|
|
||||||
#EOF
|
|
||||||
#mdk icons
|
|
||||||
#install -d $RPM_BUILD_ROOT{%_iconsdir,%_liconsdir,%_miconsdir}
|
|
||||||
#install -p -m644 img/icons/%name.png $RPM_BUILD_ROOT%_iconsdir/
|
|
||||||
#install -p -m644 img/icons/large/%name.png $RPM_BUILD_ROOT%_liconsdir/
|
|
||||||
#install -p -m644 img/icons/mini/%name.png $RPM_BUILD_ROOT%_miconsdir/
|
|
||||||
|
|
||||||
%post
|
|
||||||
%update_menus
|
|
||||||
|
|
||||||
%postun
|
|
||||||
%clean_menus
|
|
||||||
|
|
||||||
%files
|
|
||||||
%doc INSTALL CHANGELOG TODO COPYING README THANKS
|
|
||||||
%doc hlp/ru/*
|
|
||||||
%_bindir/%name
|
|
||||||
%_datadir/%name
|
|
||||||
#%_libdir/menu/%name
|
|
||||||
#%_iconsdir/%name.png
|
|
||||||
#%_liconsdir/%name.png
|
|
||||||
#%_miconsdir/%name.png
|
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
|
||||||
* Fri Feb 16 2018 Sergey Kalinin <banzaj@altlinux.ru> 0.4.5
|
|
||||||
- Added saving main window geometry into projman.conf file when close programm
|
|
||||||
- Fixed AutoComplite precedure for TCL/TK-projects
|
|
||||||
- Added colored icon for main window
|
|
||||||
- Fixed "Close all" procedure if opened files from projects and file browser
|
|
||||||
- Fixed parsing some procedure name like ::proc::name or proc_na::me(aa) and parameters {{} {} {}}
|
|
||||||
- Added opening last active project when project run
|
|
||||||
- Fixed Windows OS running without installation
|
|
||||||
- Added gray theme
|
|
||||||
- Fixed work with file from directory (FileBrowser function).
|
|
||||||
- Auto indent added for () [] braces
|
|
||||||
- File Browser added. Now we will edited any file without project
|
|
||||||
- Tcl, Perl, PHP highlight comment procedure fixed
|
|
||||||
- Help file Text.html utf-8 encoding
|
|
||||||
- Change hotkeys "Control+," "Control+." "Control+/" (commect selected, uncoment selected, select all)
|
|
||||||
- Add new function Comments/Uncomment selected text
|
|
||||||
- Added binding mouse button: click on notebook tab highlight opened file name in tree
|
|
||||||
- Change "Paste from Clipboard" function
|
|
||||||
- Change popup editor menu (undo, redo, copy, paste, cut functions)
|
|
||||||
- Change Logo and About dialog
|
|
||||||
- Russian help files was conerting into utf-8 encode
|
|
||||||
- Change help file load procedure
|
|
||||||
- Fixed paste text highlight
|
|
||||||
- Fixed setting edited flag when paste the text from buffer
|
|
||||||
- Remove ctags support
|
|
||||||
- Added gitk (gui for git) support
|
|
||||||
- Changes color setting dialog into "Setting"
|
|
||||||
- Actualizing information into "About" dialog
|
|
||||||
- Corrected color settings for all widgets
|
|
||||||
- Change default color scheme
|
|
||||||
- Remove ctag, change autocomplitt procedure
|
|
||||||
|
|
||||||
* Wed Feb 13 2008 Sergey Kalinin <banzaj@altlinux.ru> 0.3.8-alt1
|
|
||||||
- Added text encoding support from koi8-r,cpp1251,cp866 to UTF-8
|
|
||||||
|
|
||||||
* Tue Feb 20 2007 Sergey Kalinin <banzaj@altlinux.ru> 0.3.7-alt4
|
|
||||||
- Fixed setiings dialog
|
|
||||||
- Fixed saved settings parameter
|
|
||||||
|
|
||||||
* Wed Oct 18 2006 Sergey Kalinin <banzaj@altlinux.ru> 0.3.7-alt3
|
|
||||||
- Remove SuperText widget now use native TEXT
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
33
projman.tcl
33
projman.tcl
@@ -9,8 +9,8 @@ exec wish "$0" -- "$@"
|
|||||||
# Home page: https://nuk-svk.ru
|
# Home page: https://nuk-svk.ru
|
||||||
######################################################
|
######################################################
|
||||||
# Version: 2.0.0
|
# Version: 2.0.0
|
||||||
# Release: alpha
|
# Release: alpha16
|
||||||
# Build: 20102022105211
|
# Build: 22082024151054
|
||||||
######################################################
|
######################################################
|
||||||
|
|
||||||
# определим текущую версию, релиз и т.д.
|
# определим текущую версию, релиз и т.д.
|
||||||
@@ -34,12 +34,6 @@ while {[gets $f line] >=0} {
|
|||||||
}
|
}
|
||||||
close $f
|
close $f
|
||||||
|
|
||||||
if { $::argc > 0 } {
|
|
||||||
foreach arg $::argv {
|
|
||||||
lappend opened $arg
|
|
||||||
}
|
|
||||||
puts $opened
|
|
||||||
}
|
|
||||||
|
|
||||||
package require msgcat
|
package require msgcat
|
||||||
package require inifile
|
package require inifile
|
||||||
@@ -47,11 +41,21 @@ package require ctext
|
|||||||
package require base64
|
package require base64
|
||||||
package require fileutil
|
package require fileutil
|
||||||
package require Thread
|
package require Thread
|
||||||
|
package require fileutil::magic::filetype
|
||||||
|
|
||||||
# Устанавливаем текущий каталог
|
# Устанавливаем текущий каталог
|
||||||
set dir(root) [pwd]
|
set dir(root) [pwd]
|
||||||
set dir(doc) [file join $dir(root) doc]
|
set dir(doc) [file join $dir(root) doc]
|
||||||
|
|
||||||
|
# ДОбавляем в список файлы (каталоги) из командной строки
|
||||||
|
if { $::argc > 0 } {
|
||||||
|
foreach arg $::argv {
|
||||||
|
lappend opened $arg
|
||||||
|
}
|
||||||
|
puts $opened
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Устанавливаем рабочий каталог, если его нет то создаём.
|
# Устанавливаем рабочий каталог, если его нет то создаём.
|
||||||
# Согласно спецификации XDG проверяем наличие переменных и каталогов
|
# Согласно спецификации XDG проверяем наличие переменных и каталогов
|
||||||
if [info exists env(XDG_CONFIG_HOME)] {
|
if [info exists env(XDG_CONFIG_HOME)] {
|
||||||
@@ -110,26 +114,27 @@ source [file join $dir(lib) gui.tcl]
|
|||||||
|
|
||||||
# Open the PATH if command line argument has been setting
|
# Open the PATH if command line argument has been setting
|
||||||
if [info exists opened] {
|
if [info exists opened] {
|
||||||
# puts ">$opened"
|
|
||||||
foreach path $opened {
|
foreach path $opened {
|
||||||
|
# Приводим путь к полному виду
|
||||||
if {[file pathtype $path] ne "absolute"} {
|
if {[file pathtype $path] ne "absolute"} {
|
||||||
puts "\n\t[::msgcat::mc "Specify the absolute path to the directory or file"]: $path\n"
|
set path [file normalize $path]
|
||||||
exit
|
|
||||||
}
|
}
|
||||||
if [file isdirectory $path] {
|
if [file isdirectory $path] {
|
||||||
set activeProject $path
|
# set activeProject $path
|
||||||
|
SetActiveProject $path
|
||||||
.frmStatus.lblGitLogo configure -image git_logo_20x20
|
.frmStatus.lblGitLogo configure -image git_logo_20x20
|
||||||
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||||
FileOper::ReadFolder $path
|
FileOper::ReadFolder $path
|
||||||
ReadFilesFromDirectory $path $path
|
ReadFilesFromDirectory $path $path
|
||||||
} elseif [file exists $path] {
|
} elseif [file exists $path] {
|
||||||
ResetModifiedFlag [FileOper::Edit $path]
|
# ResetModifiedFlag [FileOper::Edit $path]
|
||||||
|
FileOper::Edit $path
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if {$cfgVariables(opened) ne ""} {
|
if {$cfgVariables(opened) ne ""} {
|
||||||
# puts "<$cfgVariables(opened)"
|
# puts "<$cfgVariables(opened)"
|
||||||
set activeProject $cfgVariables(opened)
|
SetActiveProject $cfgVariables(opened)
|
||||||
.frmStatus.lblGitLogo configure -image git_logo_20x20
|
.frmStatus.lblGitLogo configure -image git_logo_20x20
|
||||||
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||||
FileOper::ReadFolder $cfgVariables(opened)
|
FileOper::ReadFolder $cfgVariables(opened)
|
||||||
|
42
redhat/build-rpm.sh
Executable file
42
redhat/build-rpm.sh
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
RPM_BUILD_DIR=${HOME}/rpmbuild
|
||||||
|
|
||||||
|
mkdir -p ${RPM_BUILD_DIR}/{SOURCES,RPMS,SRPMS,SPECS,RPMS/noarch}
|
||||||
|
|
||||||
|
cd ../
|
||||||
|
|
||||||
|
VERSION=$(grep "Version" projman.tcl | grep -oE '\b[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\b')
|
||||||
|
RELEASE=$(grep "# Release" projman.tcl | grep -oE '[0-9A-Za-z]+$')
|
||||||
|
BUILD_DATE=$(date +%d%m%Y%H%M%S)
|
||||||
|
TXT="# Build: ${BUILD_DATE}"
|
||||||
|
|
||||||
|
sed -i "/# Build:.*/c$TXT" projman.tcl
|
||||||
|
|
||||||
|
cp projman.tcl projman
|
||||||
|
|
||||||
|
sed -i "s+^set\ dir(lib)+set\ dir(lib)\ /usr/share/projman/lib ;#+g" projman
|
||||||
|
sed -i "s+\[pwd\]+/usr/share/projman+g" projman
|
||||||
|
|
||||||
|
CUR_DIR=$(pwd)
|
||||||
|
|
||||||
|
cd ../
|
||||||
|
|
||||||
|
tar --exclude='.git' --exclude='debian' --exclude='redhat' --exclude='projman.tcl' -czf ${RPM_BUILD_DIR}/SOURCES/projman-${VERSION}-${RELEASE}.tar.gz projman
|
||||||
|
|
||||||
|
cd ${CUR_DIR}
|
||||||
|
|
||||||
|
cp redhat/projman.spec ${RPM_BUILD_DIR}/SPECS/projman.spec
|
||||||
|
|
||||||
|
sed -i "s/.*Version:.*/Version:\t${VERSION}/" ${RPM_BUILD_DIR}/SPECS/projman.spec
|
||||||
|
sed -i "s/.*Release:.*/Release:\t${RELEASE}/" ${RPM_BUILD_DIR}/SPECS/projman.spec
|
||||||
|
|
||||||
|
rpmbuild -ba "${RPM_BUILD_DIR}/SPECS/projman.spec"
|
||||||
|
|
||||||
|
# cp ${RPM_BUILD_DIR}/RPMS/noarch/projman-${VERSION}-${RELEASE}.noarch.rpm /files/
|
||||||
|
# cp ${RPM_BUILD_DIR}/SRPMS/projman-${VERSION}-${RELEASE}.src.rpm /files/
|
||||||
|
|
||||||
|
rm -v projman
|
||||||
|
rm -r -v ${RPM_BUILD_DIR}/SPECS/projman.spec
|
||||||
|
rm -r -v ${RPM_BUILD_DIR}/SOURCES/projman-${VERSION}-${RELEASE}.tar.gz
|
||||||
|
rm -r -v ${RPM_BUILD_DIR}/BUILD/projman
|
55
redhat/projman.spec
Normal file
55
redhat/projman.spec
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
Name: projman
|
||||||
|
Version: 2.0.0
|
||||||
|
Release: rh1
|
||||||
|
Summary: Tcl/Tk Project Manager
|
||||||
|
License: GPL
|
||||||
|
Group: Development/Tcl
|
||||||
|
Url: https://nuk-svk.ru
|
||||||
|
BuildArch: noarch
|
||||||
|
Source: %name-%version-%release.tar.gz
|
||||||
|
Requires: tcl, tk, tklib, tcllib
|
||||||
|
|
||||||
|
%description
|
||||||
|
This a editor for programming in TCL/Tk (and other language). It includes a file manager, a source editor with syntax highlighting and code navigation, a context-sensitive help system, Git support, and much more.
|
||||||
|
|
||||||
|
%description -l ru_RU.UTF8
|
||||||
|
Интегрированная среда для программирования на Tcl/Tk. Включает в себя - менеджер проектов, полнофункциональный редактор, систему навигации по файлам и структуре файлов и многое другое.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -n %name
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
%install
|
||||||
|
mkdir -p $RPM_BUILD_ROOT%_bindir
|
||||||
|
mkdir -p $RPM_BUILD_ROOT%_datadir/%name/lib/msgs
|
||||||
|
mkdir -p $RPM_BUILD_ROOT%_datadir/%name/theme
|
||||||
|
mkdir -p $RPM_BUILD_ROOT%{_datarootdir}/applications
|
||||||
|
|
||||||
|
install -p -m755 projman $RPM_BUILD_ROOT%_bindir/%name
|
||||||
|
install -p -m755 tkregexp.tcl $RPM_BUILD_ROOT%_bindir/tkregexp
|
||||||
|
|
||||||
|
# install -p -m644 *.tcl $RPM_BUILD_ROOT%_datadir/%name/
|
||||||
|
install -p -m644 lib/*.tcl $RPM_BUILD_ROOT%_datadir/%name/lib/
|
||||||
|
install -p -m644 lib/msgs/*.* $RPM_BUILD_ROOT%_datadir/%name/lib/msgs/
|
||||||
|
install -p -m644 theme/*.tcl $RPM_BUILD_ROOT%_datadir/%name/theme
|
||||||
|
install -p -m644 projman.desktop $RPM_BUILD_ROOT%{_datarootdir}/applications
|
||||||
|
|
||||||
|
%post
|
||||||
|
%update_menus
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%clean_menus
|
||||||
|
|
||||||
|
%files
|
||||||
|
%doc INSTALL CHANGELOG TODO LICENSE README.md
|
||||||
|
%_bindir/%name
|
||||||
|
%_bindir/tkregexp
|
||||||
|
%_datarootdir/applications/%name.desktop
|
||||||
|
%_datadir/%name
|
||||||
|
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Mon Nov 28 2022 Sergey Kalinin <svk@nuk-svk.ru> 2.0.0
|
||||||
|
- Initial release
|
||||||
|
|
158
theme/black.tcl
Normal file
158
theme/black.tcl
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
# black.tcl -
|
||||||
|
#
|
||||||
|
# Experimental!
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007-2008 Mats Bengtsson
|
||||||
|
#
|
||||||
|
# $Id: black.tcl,v 1.2 2009/10/25 19:21:30 oberdorfer Exp $
|
||||||
|
|
||||||
|
package require Tk 8.4; # minimum version for Tile
|
||||||
|
package require tile 0.8; # depends upon tile
|
||||||
|
|
||||||
|
|
||||||
|
namespace eval ttk {
|
||||||
|
namespace eval theme {
|
||||||
|
namespace eval black {
|
||||||
|
variable version 0.1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace eval ttk::theme::black {
|
||||||
|
|
||||||
|
#variable imgdir [file join [file dirname [info script]] black]
|
||||||
|
#variable I
|
||||||
|
#array set I [tile::LoadImages $imgdir *.png]
|
||||||
|
|
||||||
|
variable dir [file dirname [info script]]
|
||||||
|
|
||||||
|
# NB: These colors must be in sync with the ones in black.rdb
|
||||||
|
|
||||||
|
variable colors
|
||||||
|
array set colors {
|
||||||
|
-disabledfg "DarkGrey"
|
||||||
|
-frame "#424242"
|
||||||
|
-dark "#222222"
|
||||||
|
-darker "#121212"
|
||||||
|
-darkest "black"
|
||||||
|
-lighter "#626262"
|
||||||
|
-lightest "#ffffff"
|
||||||
|
-selectbg "#4a6984"
|
||||||
|
-selectfg "#ffffff"
|
||||||
|
}
|
||||||
|
if {[info commands ::ttk::style] ne ""} {
|
||||||
|
set styleCmd ttk::style
|
||||||
|
} else {
|
||||||
|
set styleCmd style
|
||||||
|
}
|
||||||
|
|
||||||
|
$styleCmd theme create black -parent clam -settings {
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------
|
||||||
|
# Theme defaults
|
||||||
|
#
|
||||||
|
$styleCmd configure "." \
|
||||||
|
-background $colors(-frame) \
|
||||||
|
-foreground white \
|
||||||
|
-bordercolor $colors(-darkest) \
|
||||||
|
-darkcolor $colors(-dark) \
|
||||||
|
-lightcolor $colors(-lighter) \
|
||||||
|
-troughcolor $colors(-darker) \
|
||||||
|
-selectbackground $colors(-selectbg) \
|
||||||
|
-selectforeground $colors(-selectfg) \
|
||||||
|
-selectborderwidth 0 \
|
||||||
|
-font "{Droid Sans Mono} 9" \
|
||||||
|
;
|
||||||
|
|
||||||
|
$styleCmd map "." \
|
||||||
|
-background [list disabled $colors(-frame) \
|
||||||
|
active $colors(-lighter)] \
|
||||||
|
-foreground [list disabled $colors(-disabledfg)] \
|
||||||
|
-selectbackground [list !focus $colors(-darkest)] \
|
||||||
|
-selectforeground [list !focus white] \
|
||||||
|
;
|
||||||
|
|
||||||
|
# ttk widgets.
|
||||||
|
$styleCmd configure TButton \
|
||||||
|
-width -8 -padding {5 1} -relief link
|
||||||
|
$styleCmd configure TMenubutton\
|
||||||
|
-relief flat -arrowsize 0
|
||||||
|
$styleCmd configure TCheckbutton \
|
||||||
|
-indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1}
|
||||||
|
$styleCmd configure TRadiobutton \
|
||||||
|
-indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1}
|
||||||
|
|
||||||
|
$styleCmd configure TEntry \
|
||||||
|
-fieldbackground gray20 -foreground black \
|
||||||
|
-padding {2 0} -border -1
|
||||||
|
$styleCmd configure TCombobox \
|
||||||
|
-fieldbackground white -foreground black \
|
||||||
|
-padding {2 0}
|
||||||
|
$styleCmd configure TSpinbox \
|
||||||
|
-fieldbackground white -foreground black \
|
||||||
|
-padding {2 0}
|
||||||
|
|
||||||
|
$styleCmd configure TNotebook \
|
||||||
|
-border -1
|
||||||
|
$styleCmd configure TNotebook.Tab \
|
||||||
|
-padding {6 2 6 2} \
|
||||||
|
-border -1
|
||||||
|
|
||||||
|
$styleCmd map TNotebook.Tab -background [list \
|
||||||
|
selected $colors(-lighter)]
|
||||||
|
|
||||||
|
# tk widgets.
|
||||||
|
$styleCmd map Menu \
|
||||||
|
-background [list active $colors(-lighter)] \
|
||||||
|
-foreground [list disabled $colors(-disabledfg)]
|
||||||
|
|
||||||
|
$styleCmd configure TreeCtrl \
|
||||||
|
-background gray30 -itembackground {gray60 gray50} \
|
||||||
|
-itemfill white -itemaccentfill yellow -border -1
|
||||||
|
|
||||||
|
$styleCmd map Treeview\
|
||||||
|
-background [list selected $colors(-lighter)] \
|
||||||
|
-foreground [list selected $colors(-selectfg)]
|
||||||
|
# -background [list selected $colors(-selectbg)] \
|
||||||
|
|
||||||
|
$styleCmd configure Treeview -fieldbackground gray25
|
||||||
|
}
|
||||||
|
puts [ttk::style element names]
|
||||||
|
}
|
||||||
|
|
||||||
|
# A few tricks for Tablelist.
|
||||||
|
|
||||||
|
namespace eval ::tablelist:: {
|
||||||
|
|
||||||
|
proc blackTheme {} {
|
||||||
|
variable themeDefaults
|
||||||
|
|
||||||
|
array set colors [array get ttk::theme::black::colors]
|
||||||
|
|
||||||
|
array set themeDefaults [list \
|
||||||
|
-background "Black" \
|
||||||
|
-foreground "White" \
|
||||||
|
-disabledforeground $colors(-disabledfg) \
|
||||||
|
-stripebackground "#191919" \
|
||||||
|
-selectbackground "#4a6984" \
|
||||||
|
-selectforeground "DarkRed" \
|
||||||
|
-selectborderwidth 0 \
|
||||||
|
-font TkTextFont \
|
||||||
|
-labelbackground $colors(-frame) \
|
||||||
|
-labeldisabledBg "#dcdad5" \
|
||||||
|
-labelactiveBg "#eeebe7" \
|
||||||
|
-labelpressedBg "#eeebe7" \
|
||||||
|
-labelforeground white \
|
||||||
|
-labeldisabledFg "#999999" \
|
||||||
|
-labelactiveFg white \
|
||||||
|
-labelpressedFg white \
|
||||||
|
-labelfont TkDefaultFont \
|
||||||
|
-labelborderwidth 2 \
|
||||||
|
-labelpady 1 \
|
||||||
|
-arrowcolor "" \
|
||||||
|
-arrowstyle sunken10x9 \
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
package provide ttk::theme::black $::ttk::theme::black::version
|
@@ -40,23 +40,27 @@ namespace eval ttk::theme::dark {
|
|||||||
# Theme defaults
|
# Theme defaults
|
||||||
#
|
#
|
||||||
ttk::style configure . \
|
ttk::style configure . \
|
||||||
-background $colors(-frame) \
|
-background $colors(-frame) \
|
||||||
-foreground #ffffff \
|
-foreground #ffffff \
|
||||||
-bordercolor $colors(-darkest) \
|
-bordercolor $colors(-darkest) \
|
||||||
-darkcolor $colors(-dark) \
|
-darkcolor $colors(-dark) \
|
||||||
-lightcolor $colors(-lighter) \
|
-lightcolor $colors(-lighter) \
|
||||||
-troughcolor $colors(-darker) \
|
-troughcolor $colors(-darker) \
|
||||||
-selectbackground $colors(-selectbg) \
|
-selectborderwidth 1 \
|
||||||
-selectforeground $colors(-selectfg) \
|
-font "{Droid Sans Mono} 9" \
|
||||||
-selectborderwidth 0 \
|
-selectbackground $colors(-selectbg) \
|
||||||
-font "{Droid Sans Mono} 9"
|
-selectforeground $colors(-selectfg) \
|
||||||
|
|
||||||
ttk::style map "." \
|
ttk::style map "." \
|
||||||
-background [list disabled $colors(-frame) \
|
-background [list disabled $colors(-frame) \
|
||||||
active $colors(-lighter)] \
|
active $colors(-lighter)] \
|
||||||
-foreground [list disabled $colors(-disabledfg)] \
|
-foreground [list disabled $colors(-disabledfg)] \
|
||||||
-selectbackground [list !focus $colors(-darkest)] \
|
-selectbackground [list !focus $colors(-darkest)] \
|
||||||
-selectforeground [list !focus #ffffff]
|
-selectforeground [list !focus #ffffff]
|
||||||
|
|
||||||
|
# \
|
||||||
|
# -selectbackground [list !focus $colors(-darkest)] \
|
||||||
|
# -selectforeground [list !focus #ffffff]
|
||||||
|
|
||||||
# ttk widgets.
|
# ttk widgets.
|
||||||
ttk::style configure TButton \
|
ttk::style configure TButton \
|
||||||
@@ -81,7 +85,9 @@ namespace eval ttk::theme::dark {
|
|||||||
-fieldbackground $colors(-lightframe) \
|
-fieldbackground $colors(-lightframe) \
|
||||||
-foreground #ffffff
|
-foreground #ffffff
|
||||||
|
|
||||||
ttk::style configure TNotebook
|
ttk::style configure TScrollbar -relief flat -border 0
|
||||||
|
|
||||||
|
# ttk::style configure TNotebook
|
||||||
# -bordercolor $colors(-frame)
|
# -bordercolor $colors(-frame)
|
||||||
ttk::style configure TNotebook.Tab \
|
ttk::style configure TNotebook.Tab \
|
||||||
-padding {6 2 6 2}
|
-padding {6 2 6 2}
|
||||||
@@ -102,6 +108,10 @@ namespace eval ttk::theme::dark {
|
|||||||
# -indicatorsize -1 \
|
# -indicatorsize -1 \
|
||||||
# -padding 0
|
# -padding 0
|
||||||
|
|
||||||
|
ttk::style configure TreeCtrl \
|
||||||
|
-background gray30 -itembackground {gray60 gray50} \
|
||||||
|
-itemfill white -itemaccentfill yellow
|
||||||
|
|
||||||
ttk::style configure Text \
|
ttk::style configure Text \
|
||||||
-linemapbg [list active $colors(-linemapbg)]\
|
-linemapbg [list active $colors(-linemapbg)]\
|
||||||
-linemapfg [list active $colors(-linemapfg)]\
|
-linemapfg [list active $colors(-linemapfg)]\
|
||||||
|
19
tkregexp.tcl
19
tkregexp.tcl
@@ -1084,14 +1084,16 @@ if {$argc > 1} {
|
|||||||
puts "Usage: $argv0 <sampleFile>"
|
puts "Usage: $argv0 <sampleFile>"
|
||||||
} elseif {$argc == 1} {
|
} elseif {$argc == 1} {
|
||||||
set filename [lindex $argv 0]
|
set filename [lindex $argv 0]
|
||||||
set file [open $filename]
|
if [file exists $filename] {
|
||||||
set data [read $file [file size $filename]]
|
set file [open $filename]
|
||||||
close $file
|
set data [read $file [file size $filename]]
|
||||||
|
close $file
|
||||||
# memorize location
|
# memorize location
|
||||||
set regexp::data(v:dir) [file dirname $filename]
|
set regexp::data(v:dir) [file dirname $filename]
|
||||||
set regexp::data(v:file) [file tail $filename]
|
set regexp::data(v:file) [file tail $filename]
|
||||||
|
} else {
|
||||||
|
set data [lindex $argv 0]
|
||||||
|
}
|
||||||
regexp::sample:set $data
|
regexp::sample:set $data
|
||||||
unset data
|
unset data
|
||||||
}
|
}
|
||||||
@@ -1366,4 +1368,3 @@ proc make-regexp::make-regexp {words} {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user