Compare commits
195 Commits
0b4d0dbf5c
...
tcltk9.0
| Author | SHA1 | Date | |
|---|---|---|---|
| df1d9aa36d | |||
| cff798a9f1 | |||
| 64287f1a01 | |||
| 5e1c057bc5 | |||
| ab740f0be8 | |||
| 4c6713b2d3 | |||
| dc5fd60c0d | |||
| c3848566df | |||
| 961d597032 | |||
| 5d70d508cd | |||
| 8619e3e1f4 | |||
| 8834c0954e | |||
| 4e67dbfccf | |||
| e5b0468a44 | |||
| a9ac54ce54 | |||
| 297d0f7420 | |||
| 9b083515ba | |||
| 722bbc4e30 | |||
| bdb9b2db00 | |||
| 22bdd7b87e | |||
| 430f7d6607 | |||
|
|
f54333f942 | ||
|
|
f6a1b440f7 | ||
|
|
9b69e94412 | ||
|
|
8a1145a2d9 | ||
|
|
a78ab384ad | ||
|
|
b04e62434a | ||
|
|
439993091f | ||
|
|
7524a58f26 | ||
|
|
a6a220eb5a | ||
| 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 |
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 }}."
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -4,3 +4,7 @@ debian/update-desktop-database
|
||||
debian/projman.substvars
|
||||
debian/files
|
||||
debian/projman.debhelper.log
|
||||
debian/*.tmp
|
||||
debian/errors
|
||||
*.tmp
|
||||
errors
|
||||
425
CHANGELOG
425
CHANGELOG
@@ -1,125 +1,350 @@
|
||||
######################################################
|
||||
# Tcl/Tk Project manager 2.0
|
||||
# Distributed under GNU Public License
|
||||
# Author: Sergey Kalinin svk@nuk-svl.ru
|
||||
# Home page: https://nuk-svk.ru
|
||||
######################################################
|
||||
projman (2.0.0-alfa16)
|
||||
|
||||
20/06/2022
|
||||
- Beginning the project
|
||||
Sergey Kalinin <svk@nuk-svk.ru> Thu, 22 Aug 2024 15:09:19 +0300
|
||||
- changelog-gen.tcl: Добавлена генерация текстового журнала изменений
|
||||
- build-deb-projman.sh: добавлена генерация changelog из git log
|
||||
- changelog-gen.tcl: Вывод в файл вынесен в отдельную процедуру
|
||||
- changelog-gen.tcl: Добавлено создание резервной копии выходного файла. Исправлен вывод в файл.
|
||||
- changelog-gen.tcl: Добавлены опции командной строки
|
||||
- Добавлен запуск changelog-gen при сборке пакета
|
||||
- Добавлено чстение журнала начиная с определенной даты
|
||||
- Новая сборка
|
||||
|
||||
13/07/2022
|
||||
- Added open file dialog
|
||||
- Added open folder dialog
|
||||
- Added save file function
|
||||
- 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
|
||||
Sergey Kalinin <svkalinin@samsonpost.ru> Tue, 20 Aug 2024 13:30:43 +0300
|
||||
- Генерация списка изменений для debian приведена к корректному виду
|
||||
- Генерация списка изменений для debian приведена к корректному виду
|
||||
- Исправлен фокус при создании нового файла. #3
|
||||
|
||||
14/07/2022
|
||||
- Added On/Off viewing toolbar
|
||||
- Added On/Off viewing line numbers bar
|
||||
- Added a Comment/Uncomment text support
|
||||
- Added text auto format
|
||||
Калинин Сергей Валерьевич <svkalinin@samsonpost.ru> Wed, 17 Jul 2024 12:28:30 +0300
|
||||
- Исправлена неправильная замена выражение при поиске
|
||||
- Исправлена неправильная замена выражение при поиске
|
||||
- Реализовал базовые функции генератора журнала изменений
|
||||
|
||||
15/07/2022
|
||||
- Added a close file (tab) function with Ctrl+w
|
||||
- Added a insert/remove the tabspace
|
||||
- Fixed comment/uncomment selected text
|
||||
svk <svkalinin@samsonpost.ru> Mon, 24 Jun 2024 10:15:38 +0300
|
||||
- Добавлена иконка для jinja template
|
||||
- Исправил остатки слияния веток
|
||||
- Исправлено некорректное определение типа файла при открытии.
|
||||
|
||||
20/07/2022
|
||||
- Fixed indent text
|
||||
- Fixed insert " and '
|
||||
- Added a main window geometry option into config, and autosave current geometry
|
||||
<svk@nuk-svk.ru> Mon, 30 Oct 2023 09:46:02 +0300
|
||||
- Gitea actions add
|
||||
|
||||
21/07/2022
|
||||
- Added Save file dialog before tab was closed
|
||||
- Added Save file dialog when exiting, if file was modify
|
||||
svk <svkalinin@samsonpost.ru> Thu, 27 Jul 2023 13:04:32 +0300
|
||||
- Merge branch 'master' of https://git.nuk-svk.ru/svk/projman
|
||||
- Исправил открытие файлов с разными путями (~/ ./ ../)
|
||||
|
||||
22/07/2022
|
||||
- Added GO highlight
|
||||
svkalinin <svk@nuk-svk.ru> Thu, 23 Feb 2023 13:46:56 +0300
|
||||
- Добавил изображений программы
|
||||
|
||||
27/07/2022
|
||||
- Fixed comment/uncomment procedure (last line in selected text)
|
||||
- Fixed error with save new (untitled) file
|
||||
svk <svkalinin@samsonpost.ru> Mon, 6 Feb 2023 09:27:38 +0300
|
||||
- Исправлена ошибка при создании нового файла.
|
||||
|
||||
01/08/2022
|
||||
- Added inserting base64 encoded image
|
||||
- Added read the file structure and inserting into tree
|
||||
- Added GUI font, and GUI foreground color setting
|
||||
- Added tcl and go files images
|
||||
- Added image for file type (extention)
|
||||
svk <svkalinin@samsonpost.ru> Wed, 21 Dec 2022 16:53:44 +0300
|
||||
- Добавил пиктограммы файлов
|
||||
- Исправил процедуру Files::CloseAll ('Закрыть всё')
|
||||
- Добавлена поддержка Lua
|
||||
- Исправлена процедура (рас)комментирования
|
||||
- Исправил ошибку при выходе в процедуре (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
|
||||
- Added some files icon
|
||||
- Fix finded procedure (function) (tree click)
|
||||
- Fix showing position in statusbar
|
||||
svkalinin <svk@nuk-svk.ru> Sun, 18 Sep 2022 10:46:59 +0300
|
||||
- Добавлен поиск переменной в тексте после открытия файла где она указана
|
||||
- Исправлена ошибка при запуске
|
||||
|
||||
12/08/2022
|
||||
- Fixed comment/uncomment procedure depending on the file type
|
||||
- Added About dialog
|
||||
- Fixed read structure (procedure names like Proc:Name)
|
||||
Sergey Kalinin <svkalinin@samsonpost.ru> Fri, 16 Sep 2022 16:37:17 +0300
|
||||
- Новая сборка
|
||||
- Исправил сохранение открытого каталога в настройках
|
||||
- Рефакторинг
|
||||
- Переделал дилог навигации по переменным
|
||||
- Добавлен еще один каталог с переменными - default
|
||||
- Добавлено сохранение состояния редактора (открытые каталоги
|
||||
- Изменения в диалоге поиска
|
||||
- Отображение горизонтальной полосы прокрутки в зависимости от переноса строк в редакторе
|
||||
- Установка фокуса на текст в редакторе при щелчке на заголовок вкладки
|
||||
- Сделал перемещение курсора в такуюже позицию в тексте при разделении окна редактора
|
||||
- Добавлено горизонтальное разделение окна редактора. Исправлено удаление строки по Alt+R - реперь строка удаляется полностью вместе с символами переноса. Исправлено сохранение нового файла (untitled) но всеравно как-то криво.
|
||||
- Изменения по чтению и отображению переменных по файлам. Причесал диалог
|
||||
|
||||
15/08/2022
|
||||
- Added open/close braces highlight
|
||||
- Fixed GO structure reader
|
||||
Sergey Kalinin <svkalinin@samsonpost.ru> Fri, 2 Sep 2022 17:01:53 +0300
|
||||
- Добавил поддержку ruby
|
||||
- Исправлен выход окна со списком функций за пределы экрана. Поиск и замена теперь работает. Добавлены некоторые иконки для файлов
|
||||
- Начало реализации процедуры поиска и замены (поиск криво но работает)
|
||||
- Исправлено закерытие вкладки по щелчку мыши. Добавлена настройка переноса строк в редакторе. Добавлены сочетания клавиш ctrl+pgup cntrl+pgdown для переключения между вкладками редактора. Добавлен диалог закрытия папки (каталога)
|
||||
- Укоротил имя корневого каталога в дереве
|
||||
- Добавлены ключиевые слова GO
|
||||
- Исправлена подсветка ключевых слов tcl и добавлены виджеты
|
||||
- Исправлена некорректная установка иконки на каталог
|
||||
- Добавлены горячие клавиши для удаления слова
|
||||
- Добавлены сочетания клавиш для удаления слова
|
||||
|
||||
16/08/2022
|
||||
- Added selection of all words in the text by clicking on the any word
|
||||
svkalinin <svk@nuk-svk.ru> Fri, 26 Aug 2022 12:36:14 +0300
|
||||
- Изменил(а) на 'README.md'
|
||||
|
||||
17/08/2022
|
||||
- Added "Vew Panel" menu and "Panel side" (left/right)
|
||||
- Changed standard Tk menu on TTK::menu
|
||||
- Added config options filesPanelPlace (left/right)
|
||||
- Fixed ViewFilesTree procedure with rigth variable filesPanelShow (true/false)
|
||||
svk <svkalinin@samsonpost.ru> Fri, 26 Aug 2022 12:29:19 +0300
|
||||
- Добавлена поддержка python. Обновлена библиотека иконок.
|
||||
- Исправлена установка фокуса на окно диалога GotoFunctionDialog и обратно на текст. Переделан механизм чтения структуры файла и добавлены команды для sh (bash)
|
||||
- Добавлены настройки темы для диалога навигации по функциям
|
||||
- Добавлена иконка shell (*.sh)
|
||||
- Исправлено комментирование строк
|
||||
- Добавлен диалог навигации по структуре (процедурам) по Ctrl+F. Исправлена ошибка при закрытии файлов (функции из дерева теперь удаляются).
|
||||
- Добавил цвет фона для панели с номерами строк
|
||||
|
||||
22/08/2022
|
||||
- Fixed clicking on proc or func names into tree if file was closed
|
||||
svkalinin <svk@nuk-svk.ru> Wed, 17 Aug 2022 21:37:06 +0300
|
||||
- Убрал доки по tcl
|
||||
- Слегка поменял стиль оформления
|
||||
|
||||
23/08/2022
|
||||
- Added procedure and function navigation window by Ctrl+j pressed on editor
|
||||
- Fixed correctly focused on editor text widget
|
||||
Sergey Kalinin <svkalinin@samsonpost.ru> Wed, 17 Aug 2022 16:52:22 +0300
|
||||
- Добавлен выбор расположения боковой панели
|
||||
- Добавлено выделение всех слов в тексте по двойному щелчку мышой на любом слове
|
||||
- Исправлено чтение структуры GO файлов: корректное отображение в дереве функций возвращающих значения разных типов
|
||||
- Добавлена подсветка скобок
|
||||
- Новая сборка
|
||||
- Исправлены процедуры comment/uncomment
|
||||
- Изменены имена переенных
|
||||
- Изменены имена переменных
|
||||
- Добавлена запись номера сборки (build) в исходник
|
||||
- Добавлено меню Помощь -> О программе. Добавлено окно 'О программе'
|
||||
- Исправлен поиск процедуры в тексте по клику в дереве
|
||||
- Исправлен поиск процедуры в тексте по клику в дереве. Исправлено отображение позиции курсора в строке статуса
|
||||
- ДОбавлены иконки для некоторых типов файлов
|
||||
- Добавлено отображение структуры исходника в дереве (функции (go) и процедуры (tcl))
|
||||
- Добавлено кодирование изображения в base64 и вставка в редактируемый текст
|
||||
- Добавлены шрифт и цвет шриыта для общего интерфейса
|
||||
- Исправлено комментирование выделенного фрагмента (последняя строка) Исправлено закрытие untitled вкладок
|
||||
- Исправлено комментирование выделенных строк
|
||||
- Добавлена подсветка для GO
|
||||
- Исправлено подключение требуемой процедуры подсветки
|
||||
- Убрал вставку закрывающихся кавычек в пустой строке. Ибо пока глючит.
|
||||
- Добавлен диалог сохранения файла при закрытии вкладки редактора и при выходе из программы если есть несохраненные файлы
|
||||
- Исправлен рабочий каталог
|
||||
- Добавлены переводы для диалога
|
||||
- Исправлен скрипт сборки пакета для Debian
|
||||
- Исправил скрипт сборки пакета. Добавил .gitignore
|
||||
|
||||
24/08/2022
|
||||
- Fixed ReadStructure procedure (added lexer)
|
||||
svkalinin <svk@nuk-svk.ru> Thu, 21 Jul 2022 12:18:29 +0300
|
||||
- Изменил(а) на 'README.md'
|
||||
|
||||
25/08/2022
|
||||
- Fixed focus on the editor window after clicking Escape in the function selection dialog
|
||||
- Change color scheme for FindFunction dialog
|
||||
- Added sh icon (for shell scripts)
|
||||
- Fixed lexers for find procedures and functions
|
||||
svk <svkalinin@samsonpost.ru> Thu, 21 Jul 2022 12:15:19 +0300
|
||||
- Change readme
|
||||
- Added Dark theme
|
||||
- New version of ProjMan
|
||||
- Some changes into GUI (tabs)
|
||||
|
||||
26/08/2022
|
||||
- Update image library (added some icons)
|
||||
- Added hot keys:
|
||||
- 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
|
||||
svkalinin <banzaj28@yandex.ru> Thu, 5 Jul 2018 08:41:18 +0300
|
||||
- Fixed error if file was not select
|
||||
- README.md отредактирован онлайн на Bitbucket
|
||||
|
||||
30/08/2022
|
||||
- Fix the clicked by the close button on a tab
|
||||
- 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
|
||||
Sergey Kalinin <banzaj28@yandex.ru> Sat, 24 Mar 2018 12:20:27 +0300
|
||||
- Rename readme
|
||||
|
||||
01/09/2022
|
||||
- Added search function name into Function navigation whem press key
|
||||
- Added find and replace dialog
|
||||
- Fixed correct placement the Function dialog
|
||||
Sergey <banzaj28@yandex.ru> Sat, 24 Mar 2018 12:17:09 +0300
|
||||
- README отредактирован онлайн на Bitbucket
|
||||
- Added sort procedure for projects tree
|
||||
- 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
|
||||
- Added procedure for the horizontal split a text window
|
||||
- Fixed untitled file saved
|
||||
- Fixed Alt+R (delete row), now will are deleted row with a "\n\r" symbols
|
||||
Sergey Kalinin <banzaj28@yandex.ru> Sat, 24 Feb 2018 18:16:01 +0300
|
||||
- Critical bug fixed with create project
|
||||
- Refactoring all procedures is the Tree working
|
||||
|
||||
20/10/200
|
||||
- Added Git support: add and commit changes, show git log, show each commit...
|
||||
Sergey <svk@s.kalinin-nb> Sat, 24 Feb 2018 12:22:08 +0300
|
||||
- Fixed Add new file if name was existing into tree
|
||||
|
||||
11/11/2022
|
||||
- Added GoTo Line dialog
|
||||
- Fixed Git commit procedure
|
||||
- Added variable and procedure helper
|
||||
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
|
||||
######################################################
|
||||
166
README.md
166
README.md
@@ -1,27 +1,169 @@
|
||||
ABOUT
|
||||
## About
|
||||
|
||||
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
|
||||
help system, and much more.
|
||||
Working an Linux.
|
||||
It includes a file manager, a source editor with syntax highlighting and code navigation, a context-sensitive help system, Git support, and much more.
|
||||
Working an Linux and Windows.
|
||||
|
||||
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
|
||||
Tcl/Tk >= 8.6 http://tcl.tk
|
||||
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
|
||||
|
||||

|
||||
|
||||
- A pseudo-terminal for launching the edited file and other command
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
- Image viewer
|
||||
|
||||

|
||||
|
||||
|
||||
## 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-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
|
||||
- Ctrl-R - Open terminal for edited file
|
||||
- Ctrl-Z - Send SIGTSTP signal
|
||||
- Ctrl-D - Send SIGINT signal
|
||||
- Ctrl-C - Send SIGKILL signal
|
||||
|
||||
- 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
|
||||
- Alt-K - Open folder
|
||||
|
||||
## Credits
|
||||
|
||||
Sergey Kalinin - author
|
||||
svk@nuk-svk.ru
|
||||
http://nuk-svk.ru
|
||||
|
||||
Laurent Riesterer - VisualREGEXP and TkDIFF+ parts
|
||||
laurent.riesterer@free.fr
|
||||
http://laurent.riesterer.free.fr
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
6
TODO
6
TODO
@@ -5,11 +5,9 @@
|
||||
# Home page: https://nuk-svk.ru
|
||||
######################################################
|
||||
|
||||
2. Подстветку текущей вкладки и элемента в дереве
|
||||
|
||||
--- Ansible ---
|
||||
1. Определение всех переменных в отдельный список
|
||||
- внутри файла, конструкции вида:
|
||||
- внутри файла, конструкции вида:
|
||||
set_fact:
|
||||
varName: value
|
||||
set_fact varName value
|
||||
@@ -20,4 +18,4 @@
|
||||
- var1.yml
|
||||
- var2.yml
|
||||
|
||||
3. Если используется роль и переменная не найдена в плэйбуке то искать в роли (не факт что требуется)
|
||||
3. Если используется роль и переменная не найдена в плэйбуке
|
||||
|
||||
336
changelog-gen.tcl
Executable file
336
changelog-gen.tcl
Executable file
@@ -0,0 +1,336 @@
|
||||
#!/bin/sh
|
||||
# Tcl ignores the next line -*- tcl -*- \
|
||||
exec tclsh8.6 "$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 ../
|
||||
|
||||
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)
|
||||
TXT="# Build: ${BUILD_DATE}"
|
||||
|
||||
echo "$VERSION, $RELEASE, $BUILD_DATE"
|
||||
sed -i "/# Build:.*/c$TXT" projman.tcl
|
||||
|
||||
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
|
||||
|
||||
@@ -19,10 +21,9 @@ sed -i "s+\[pwd\]+/usr/share/projman+g" projman
|
||||
|
||||
tar czf ../projman_${VERSION}.orig.tar.gz .
|
||||
|
||||
dpkg-buildpackage
|
||||
dpkg-buildpackage -d
|
||||
|
||||
#cp ../projman_${VERSION}-${RELEASE}_amd64.deb /files/
|
||||
|
||||
rm -v projman
|
||||
rm -v projman changelog-gen
|
||||
rm -r -v debian/{projman,.debhelper}
|
||||
|
||||
|
||||
397
debian/changelog
vendored
397
debian/changelog
vendored
@@ -1,5 +1,396 @@
|
||||
projman (2.0.0-alpha) stable; urgency=medium
|
||||
projman (2.0.0-alpha19) stable; urgency=medium
|
||||
|
||||
* Небольшие исправления
|
||||
|
||||
-- Sergey Kalinin <svk@nuk-svk.ru> Thu, 30 Oct 2025 14:47:05 +0300
|
||||
|
||||
projman (2.0.0-alpha19) stable; urgency=medium
|
||||
|
||||
* Добавлен перевод фокуса ввода на прежнее окно после закрытия диалога выполнения.
|
||||
* Добавлена передача сигналов для закрытия запущенного процесса
|
||||
* Изменил виджет текста в окне псевдо-терминала. Добавил подстановку имени файла к командную строку по шаблону %f
|
||||
* Добавлен диалог настроек
|
||||
* Добавил псевдо-терминал
|
||||
* Добавлен диалог при открытии файлов отличных от текстовых
|
||||
* Добавлен просмотр файлов изображений (png, bmp, gif, ppm, pgm)
|
||||
* Исправлена процедура опреления типа файла
|
||||
* Добавлены диалоги для подтверждения открытия больших файлов, и двоичных файлов.
|
||||
|
||||
-- Sergey Kalinin <svk@nuk-svk.ru> Wed, 29 Oct 2025 13:10:31 +0300
|
||||
|
||||
projman (2.0.0-alpha18) stable; urgency=medium
|
||||
|
||||
* Поправил тему оформления
|
||||
* Исправлена работа в windows
|
||||
* Уменьшил количество выводимой отладочной информации
|
||||
* Добавлено определение пути до git в зависимости от платформы.
|
||||
* Исправлено создание файла конфигурации
|
||||
* Добавлены номера версий в вызов tclsh8.6 и wish8.6.
|
||||
* Убрана зависимость на Threads.
|
||||
* Исправлено чтение структуры проекта при открытии из меню 'Открыть недавнее'
|
||||
* Исправление работы процедуры varhelper
|
||||
|
||||
-- Sergey Kalinin <svk@nuk-svk.ru> Mon, 27 Oct 2025 14:05:40 +0300
|
||||
|
||||
projman (2.0.0-alpha17) stable; urgency=medium
|
||||
|
||||
* Added the "Open Recent" menu.
|
||||
* The "recentlyEditedFolders" option in the configuration file contains a list of recently opened directories.
|
||||
* The procedures for working with this list have also been added.
|
||||
* Новая сборка
|
||||
|
||||
-- svk <svk@nuk-svk.ru> Sat, 18 Oct 2025 16:29:50 +0300
|
||||
|
||||
projman (2.0.0-alpha17) stable; urgency=medium
|
||||
|
||||
* Косметические изменения.
|
||||
* Исправлены ошибки при вставке кавычек
|
||||
* Обновить README.md
|
||||
|
||||
-- svk <svk@nuk-svk.ru> Thu, 31 Oct 2024 19:48:30 +0300
|
||||
|
||||
projman (2.0.0-alpha16) stable; urgency=medium
|
||||
|
||||
* 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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
* Initial release
|
||||
|
||||
-- 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/
|
||||
changelog-gen /usr/bin/
|
||||
lib/*.tcl /usr/share/projman/lib
|
||||
lib/msgs/* /usr/share/projman/lib/msgs
|
||||
theme /usr/share/projman/
|
||||
README.md /usr/share/doc/projman
|
||||
debian/projman.desktop /usr/share/applications
|
||||
projman-48.png /usr/share/pixmaps
|
||||
projman.desktop /usr/share/applications
|
||||
projman.png /usr/share/pixmaps
|
||||
|
||||
@@ -23,11 +23,9 @@ if [info exists env(LANG)] {
|
||||
|
||||
set ::configDefault "\[General\]
|
||||
cfgModifyDate=''
|
||||
opened=
|
||||
editedFiles=
|
||||
searchCommand=/usr/bin/grep
|
||||
searchCommandOptions=-r -n -H
|
||||
gitCommand=/usr/bin/git
|
||||
gitCommand=
|
||||
# must return a mime type of file
|
||||
fileTypeCommand=/usr/bin/file
|
||||
fileTypeCommandOptions=-i -b
|
||||
@@ -36,9 +34,10 @@ locale=$locale
|
||||
theme=dark
|
||||
toolBarShow=true
|
||||
menuShow=true
|
||||
statusBarShow=true
|
||||
filesPanelShow=true
|
||||
filesPanelPlace=left
|
||||
geometry=1024x768
|
||||
geometry=800x600
|
||||
guiFont={Droid Sans Mono} 9
|
||||
guiFontBold={Droid Sans Mono} 9 bold
|
||||
guiFG=#cccccc
|
||||
@@ -61,6 +60,11 @@ lineNumberShow=true
|
||||
tabSize=4
|
||||
procedureHelper=false
|
||||
variableHelper=true
|
||||
multilineComments=true
|
||||
\[UserSession\]
|
||||
opened=
|
||||
editedFiles=
|
||||
recentFolder=
|
||||
"
|
||||
proc Config::create {dir} {
|
||||
set cfgFile [open [file join $dir projman.ini] "w+"]
|
||||
@@ -80,7 +84,7 @@ proc Config::read {dir} {
|
||||
}
|
||||
|
||||
proc Config::write {dir} {
|
||||
global activeProject
|
||||
global activeProject editors
|
||||
set cfgFile [ini::open [file join $dir projman.ini] "w"]
|
||||
foreach section [array names ::cfgINIsections] {
|
||||
foreach key $::cfgINIsections($section) {
|
||||
@@ -90,14 +94,30 @@ proc Config::write {dir} {
|
||||
set systemTime [clock seconds]
|
||||
# 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 "UserSession" editedFiles ""
|
||||
|
||||
# Save an top level window geometry into config
|
||||
ini::set $cfgFile "GUI" geometry [wm geometry .]
|
||||
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 {
|
||||
ini::set $cfgFile "General" opened ""
|
||||
ini::set $cfgFile "UserSession" opened ""
|
||||
ini::set $cfgFile "UserSession" editedFiles ""
|
||||
}
|
||||
# puts $editors
|
||||
|
||||
ini::commit $cfgFile
|
||||
ini::close $cfgFile
|
||||
}
|
||||
|
||||
413
lib/editor.tcl
413
lib/editor.tcl
@@ -20,30 +20,55 @@ namespace eval Editor {
|
||||
|
||||
# Comment one string or selected string
|
||||
proc Comment {txt fileType} {
|
||||
global lexers
|
||||
global lexers cfgVariables
|
||||
set selIndex [$txt tag ranges sel]
|
||||
set pos [$txt index insert]
|
||||
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] {
|
||||
set symbol [dict get $lexers $fileType commentSymbol]
|
||||
} else {
|
||||
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 != ""} {
|
||||
set lineBegin [lindex [split [lindex $selIndex 0] "."] 0]
|
||||
set lineEnd [lindex [split [lindex $selIndex 1] "."] 0]
|
||||
# Если выделенно больше одной строки то включаем многострочный комментарий
|
||||
if {$lineBegin < $lineEnd} {
|
||||
set useMultiLine true
|
||||
}
|
||||
set posBegin [lindex [split [lindex $selIndex 1] "."] 0]
|
||||
set posEnd [lindex [split [lindex $selIndex 1] "."] 1]
|
||||
if {$lineEnd == $lineNum && $posEnd == 0} {
|
||||
set lineEnd [expr $lineEnd - 1]
|
||||
}
|
||||
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 "
|
||||
if {$symbolEnd ne ""} {
|
||||
$txt insert $lineEnd.end "\n$symbolEnd"
|
||||
set lineEnd [expr $lineEnd + 2]
|
||||
}
|
||||
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 raise comments
|
||||
@@ -62,12 +87,12 @@ namespace eval Editor {
|
||||
set lineNum [lindex [split $pos "."] 0]
|
||||
set posNum [lindex [split $pos "."] 1]
|
||||
|
||||
if {[info procs GetComment:$fileType] ne ""} {
|
||||
set commentProcedure "GetComment:$fileType"
|
||||
} else {
|
||||
set commentProcedure {GetComment:Unknown}
|
||||
}
|
||||
# set commentProcedure "GetComment"
|
||||
# if {[info procs GetComment:$fileType] ne ""} {
|
||||
# set commentProcedure "GetComment"
|
||||
# } else {
|
||||
# set commentProcedure {GetComment:Unknown}
|
||||
# }
|
||||
set commentProcedure "GetComment"
|
||||
|
||||
# puts "$fileType, $commentProcedure"
|
||||
if {$selIndex != ""} {
|
||||
@@ -80,7 +105,7 @@ namespace eval Editor {
|
||||
}
|
||||
for {set i $lineBegin} {$i <=$lineEnd} {incr i} {
|
||||
set str [$txt get $i.0 $i.end]
|
||||
set commentSymbolIndex [$commentProcedure $str]
|
||||
set commentSymbolIndex [$commentProcedure $fileType $str]
|
||||
if {$commentSymbolIndex != 0} {
|
||||
$txt delete $i.[lindex $commentSymbolIndex 0] $i.[lindex $commentSymbolIndex 1]
|
||||
}
|
||||
@@ -91,7 +116,7 @@ namespace eval Editor {
|
||||
} else {
|
||||
set posNum [lindex [split $pos "."] 1]
|
||||
set str [$txt get $lineNum.0 $lineNum.end]
|
||||
set commentSymbolIndex [$commentProcedure $str]
|
||||
set commentSymbolIndex [$commentProcedure $fileType $str]
|
||||
if {$commentSymbolIndex != 0} {
|
||||
$txt delete $lineNum.[lindex $commentSymbolIndex 0] $lineNum.[lindex $commentSymbolIndex 1]
|
||||
}
|
||||
@@ -101,36 +126,47 @@ namespace eval Editor {
|
||||
}
|
||||
proc GetComment {fileType str} {
|
||||
global lexers
|
||||
puts [dict get $lexers $fileType commentSymbol]
|
||||
if {[dict exists $lexers $fileType commentSymbol] == 0} {
|
||||
return
|
||||
# puts [dict get $lexers $fileType commentSymbol]
|
||||
if [dict exists $lexers $fileType commentSymbol] {
|
||||
# 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]} {
|
||||
puts "$match, $v1, $v2, $v3"
|
||||
set cmd "regexp -nocase -indices -- {(^|\s+)\\s*($symbol\\s*)(.*)} {$str} 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]]
|
||||
} else {
|
||||
puts "FUCK"
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
proc GetComment:TCL {str} {
|
||||
if {[regexp -nocase -indices -- {(^| )(#\s)(.+)} $str match v1 v2 v3]} {
|
||||
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
proc GetComment:GO {str} {
|
||||
# puts ">>>>>>>$str"
|
||||
if {[regexp -nocase -indices -- {(^| |\t)(//\s)(.+)} $str match v1 v2 v3]} {
|
||||
# puts ">>>> $match $v1 $v2 $v3"
|
||||
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
# proc GetComment:TCL {str} {
|
||||
# if {[regexp -nocase -indices -- {(^| )(#\s)(.+)} $str match v1 v2 v3]} {
|
||||
# return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
||||
# } else {
|
||||
# return 0
|
||||
# }
|
||||
# }
|
||||
# proc GetComment:GO {str} {
|
||||
# # puts ">>>>>>>$str"
|
||||
# if {[regexp -nocase -indices -- {(^| |\t)(//\s)(.+)} $str match v1 v2 v3]} {
|
||||
# # puts ">>>> $match $v1 $v2 $v3"
|
||||
# return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
||||
# } else {
|
||||
# return 0
|
||||
# }
|
||||
# }
|
||||
|
||||
proc GetComment:Unknown {str} {
|
||||
if {[regexp -nocase -indices -- {(^| )(#\s)(.+)} $str match v1 v2 v3]} {
|
||||
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
|
||||
@@ -217,7 +253,7 @@ namespace eval Editor {
|
||||
$txt highlight $lineBegin.0 $lineEnd.end
|
||||
} else {
|
||||
set str [$txt get $lineNum.0 $lineNum.end]
|
||||
puts ">>>>> $str"
|
||||
# puts ">>>>> $str"
|
||||
if {[regexp -nocase -indices -- {(^\s*)(.*?)} $str match v1]} {
|
||||
set posBegin [lindex [split $v1] 0]
|
||||
set posEnd [lindex [split $v1] 1]
|
||||
@@ -241,7 +277,7 @@ namespace eval Editor {
|
||||
set pos [$txt index insert]
|
||||
set lineNum [lindex [split $pos "."] 0]
|
||||
set posNum [lindex [split $pos "."] 1]
|
||||
puts "$pos"
|
||||
# puts "$pos"
|
||||
if {$lineNum > 1} {
|
||||
# get current text
|
||||
set curText [$txt get $lineNum.0 "$lineNum.0 lineend"]
|
||||
@@ -339,19 +375,12 @@ namespace eval Editor {
|
||||
|
||||
proc SelectionHighlight {txt} {
|
||||
variable selectionText
|
||||
|
||||
$txt tag remove lightSelected 1.0 end
|
||||
|
||||
set selBegin [lindex [$txt tag ranges sel] 0]
|
||||
set selEnd [lindex [$txt tag ranges sel] 1]
|
||||
if {$selBegin ne "" && $selEnd ne ""} {
|
||||
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]]
|
||||
# puts "Selection $selectionText"
|
||||
if [string match "-*" $selectionText] {
|
||||
set selectionText "\$selectionText"
|
||||
}
|
||||
@@ -360,7 +389,6 @@ namespace eval Editor {
|
||||
set selFindLine [lindex [split $ind "."] 0]
|
||||
set selFindRow [lindex [split $ind "."] 1]
|
||||
set endInd "$selFindLine.[expr $selFindRow + $symNumbers]"
|
||||
# puts "$ind; $symNumbers; $selFindLine, $selFindRow; $endInd "
|
||||
$txt tag add lightSelected $ind $endInd
|
||||
}
|
||||
}
|
||||
@@ -370,6 +398,7 @@ namespace eval Editor {
|
||||
set win .varhelper
|
||||
# if { [winfo exists $win] == 0 } { return }
|
||||
set ind [$win.lBox curselection]
|
||||
# puts ">>>>>>>>>>>> VarHelperBind <<<<<<<<<<<<<<<<"
|
||||
|
||||
switch -- $K {
|
||||
Prior {
|
||||
@@ -414,28 +443,28 @@ namespace eval Editor {
|
||||
}
|
||||
} ;# proc auto_completition_key
|
||||
proc VarHelperEscape {w} {
|
||||
puts "VarHelperEscape"
|
||||
bindtags $w.t [list [winfo parent $w.t] $w.t Text sysAfter all]
|
||||
# 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]
|
||||
puts [bindtags $w.t]
|
||||
puts [bind $w.t]
|
||||
}
|
||||
|
||||
}
|
||||
proc VarHelper {x y w word wordType} {
|
||||
global editors lexers variables
|
||||
variable txt
|
||||
variable win
|
||||
# set txt $w.frmText.t
|
||||
# блокировка открытия диалога если запущен другой
|
||||
if [winfo exists .findVariables] {
|
||||
return
|
||||
}
|
||||
set txt $w
|
||||
set win .varhelper
|
||||
puts "$x $y $w $word $wordType"
|
||||
# set win .varhelper
|
||||
# Проверяем если есть выделение то блокировать появление диалога
|
||||
if {[$txt tag ranges sel] != ""} {
|
||||
puts "You have selected text [$txt tag ranges sel]"
|
||||
return
|
||||
}
|
||||
# puts "$x $y $w $word $wordType"
|
||||
set fileType [dict get $editors $txt fileType]
|
||||
|
||||
if {[dict exists $editors $txt variableList] != 0} {
|
||||
@@ -503,20 +532,38 @@ namespace eval Editor {
|
||||
}
|
||||
}
|
||||
# unset item
|
||||
# puts $findedVars
|
||||
bindtags $txt [list VarHelperBind [winfo toplevel $txt] $txt Ctext sysAfter all]
|
||||
# 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; 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 $Editor::txt %K %A; break}
|
||||
|
||||
if { [winfo exists $win] } { destroy $win }
|
||||
# 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
|
||||
@@ -533,6 +580,8 @@ namespace eval Editor {
|
||||
if { [set height [llength $findedVars]] > 10 } { set height 10 }
|
||||
$win.lBox configure -height $height
|
||||
|
||||
# focus $win.lBox
|
||||
|
||||
bind $win <Escape> {
|
||||
destroy $Editor::win
|
||||
focus -force $Editor::txt.t
|
||||
@@ -543,15 +592,13 @@ namespace eval Editor {
|
||||
focus -force $Editor::txt.t
|
||||
break
|
||||
}
|
||||
# bind $win.lBox <Return> {
|
||||
# set findString [dict get $lexers [dict get $editors $Editor::txt fileType] procFindString]
|
||||
# set values [.varhelper.lBox get [.varhelper.lBox curselection]]
|
||||
# regsub -all {PROCNAME} $findString $values str
|
||||
# Editor::FindFunction $Editor::txt "$str"
|
||||
# destroy .varhelper.lBox
|
||||
# # focus $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
|
||||
}
|
||||
|
||||
# Определям расстояние до края экрана (основного окна) и если
|
||||
# оно меньше размера окна со списком то сдвигаем его вверх
|
||||
@@ -591,7 +638,7 @@ namespace eval Editor {
|
||||
$txt tag remove lightSelected 1.0 end
|
||||
|
||||
if { [winfo exists .varhelper] } { destroy .varhelper }
|
||||
puts $k
|
||||
# puts $k
|
||||
switch $k {
|
||||
Return {
|
||||
regexp {^(\s*)} [$txt get [expr $lineNum - 1].0 [expr $lineNum - 1].end] -> spaceStart
|
||||
@@ -673,7 +720,7 @@ namespace eval Editor {
|
||||
}
|
||||
|
||||
proc PressKey {k txt} {
|
||||
# puts [Editor::Key $k]
|
||||
# puts [Editor::Key $k ""]
|
||||
switch $k {
|
||||
apostrophe {
|
||||
QuotSelection $txt {'}
|
||||
@@ -684,6 +731,9 @@ namespace eval Editor {
|
||||
grave {
|
||||
QuotSelection $txt {`}
|
||||
}
|
||||
underscore {
|
||||
QuotSelection $txt {_}
|
||||
}
|
||||
parenleft {
|
||||
# QuotSelection $txt {)}
|
||||
}
|
||||
@@ -712,7 +762,7 @@ namespace eval Editor {
|
||||
}
|
||||
## GET KEYS CODE ##
|
||||
proc Key {key str} {
|
||||
puts "Pressed key code: $key, $str"
|
||||
# puts "Pressed key code: $key, $str"
|
||||
if {$key >= 10 && $key <= 22} {return "true"}
|
||||
if {$key >= 24 && $key <= 36} {return "true"}
|
||||
if {$key >= 38 && $key <= 50} {return "true"}
|
||||
@@ -720,17 +770,27 @@ namespace eval Editor {
|
||||
if {$key >= 79 && $key <= 91} {return "true"}
|
||||
if {$key == 63 || $key == 107 || $key == 108 || $key == 112} {return "true"}
|
||||
}
|
||||
|
||||
proc BindKeys {w txt fileType} {
|
||||
proc TextCopy {txt} {
|
||||
# $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
|
||||
# variable txt
|
||||
# set txt $w.frmText.t
|
||||
bind $txt <KeyRelease> "catch {Editor::ReleaseKey %K $txt $fileType}"
|
||||
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-Cyrillic_em> "Editor::SelectionPaste $txt"
|
||||
bind $txt <Control-l> "SearchVariable $txt; break"
|
||||
bind $txt <Control-Cyrillic_de> "SearchVariable $txt; break"
|
||||
bind $txt <Control-i> "ImageBase64Encode $txt"
|
||||
bind $txt <Control-Cyrillic_sha> "ImageBase64Encode $txt"
|
||||
bind $txt <Control-bracketleft> "Editor::InsertTabular $txt"
|
||||
bind $txt <Control-bracketright> "Editor::DeleteTabular $txt"
|
||||
bind $txt <Control-comma> "Editor::Comment $txt $fileType"
|
||||
@@ -739,22 +799,36 @@ namespace eval Editor {
|
||||
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"
|
||||
bind $txt <Control-i> ImageBase64Encode
|
||||
bind $txt <<Modified>> "SetModifiedFlag $w $nb"
|
||||
bind $txt <Control-u> "Editor::SearchBrackets %W"
|
||||
bind $txt <Control-Cyrillic_ghe> "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 <Control-Cyrillic_o> "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-Cyrillic_tse> "$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-Cyrillic_er> "$txt delete {insert linestart} {insert lineend + 1char}"
|
||||
bind $txt <Alt-b> "$txt delete {insert linestart} insert"
|
||||
bind $txt <Alt-Cyrillic_i> "$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-Cyrillic_u> "$txt delete insert {insert lineend}"
|
||||
bind $txt <Alt-s> "Editor::SplitEditorH $w $fileType"
|
||||
bind $txt <Alt-ucircumflex> "Editor::SplitEditorH $w $fileType"
|
||||
bind $txt <Alt-Cyrillic_hardsign> "Editor::SplitEditorH $w $fileType"
|
||||
bind $txt <Alt-y> "Editor::TextCopy $txt"
|
||||
bind $txt <Alt-Cyrillic_en> "Editor::TextCopy $txt"
|
||||
bind $txt <Control-g> "Editor::GoToLineNumberDialog $txt"
|
||||
bind $txt <Control-Cyrillic_pe> "Editor::GoToLineNumberDialog $txt"
|
||||
bind $txt <Control-agrave> "Editor::FindDialog $w"
|
||||
bind $txt <Control-f> "Editor::FindDialog $txt"
|
||||
bind $txt <Control-Cyrillic_a> "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-Cyrillic_tse> FileOper::Close
|
||||
bind $txt <Control-o> {
|
||||
set filePath [FileOper::OpenDialog]
|
||||
if {$filePath != ""} {
|
||||
@@ -769,6 +843,16 @@ namespace eval Editor {
|
||||
}
|
||||
break
|
||||
}
|
||||
bind $txt <Control-Cyrillic_shcha> {
|
||||
set filePath [FileOper::OpenDialog]
|
||||
if {$filePath != ""} {
|
||||
FileOper::Edit $filePath
|
||||
}
|
||||
break
|
||||
}
|
||||
bind $txt <Control-r> "Editor::SplitEditorForExecute $w $fileType $nb "
|
||||
bind $txt <Control-Cyrillic_ka> "Editor::SplitEditorForExecute $w $fileType $nb "
|
||||
|
||||
# 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"
|
||||
@@ -829,20 +913,31 @@ namespace eval Editor {
|
||||
set lineNum [lindex [split $pos "."] 0]
|
||||
set posNum [lindex [split $pos "."] 1]
|
||||
set symbol [string trim [string trimleft $symbol "\\"]]
|
||||
# puts "Selindex : $selIndex, cursor position: $pos"
|
||||
# puts "Selindex : $selIndex, cursor position: $pos, Symbol: $symbol"
|
||||
if {$selIndex != ""} {
|
||||
set lineBegin [lindex [split [lindex $selIndex 0] "."] 0]
|
||||
set posBegin [lindex [split [lindex $selIndex 0] "."] 1]
|
||||
set lineEnd [lindex [split [lindex $selIndex 1] "."] 0]
|
||||
set posEnd [lindex [split [lindex $selIndex 1] "."] 1]
|
||||
# set selText [$txt get $lineBegin.$posBegin $lineEnd.$posEnd]
|
||||
set selText $selectionText
|
||||
set selText [$txt get $lineBegin.$posBegin $lineEnd.$posEnd]
|
||||
# set selText $selectionText
|
||||
# puts "Selected text: $selText, pos: $pos, lineBegin: $lineBegin, posBegin: $posBegin, pos end: $posEnd"
|
||||
if {$posNum == $posEnd} {
|
||||
$txt insert $lineBegin.$posBegin "$symbol"
|
||||
}
|
||||
if {$posNum == $posBegin} {
|
||||
$txt insert $lineBegin.$posEnd "$symbol"
|
||||
if {$symbol == {"} || $symbol == {_}} {
|
||||
$txt insert $lineEnd.$posEnd "$selText$symbol"
|
||||
} else {
|
||||
$txt insert $lineEnd.$posEnd "$symbol"
|
||||
}
|
||||
}
|
||||
if {$symbol == "'"} {
|
||||
if {$posBegin == 0} {
|
||||
$txt insert $pos "$symbol"
|
||||
} else {
|
||||
$txt insert "$pos + 1 chars" "$symbol"
|
||||
}
|
||||
}
|
||||
$txt highlight $lineBegin.$posBegin $lineEnd.end
|
||||
# $txt insert $lineBegin.[expr $posBegin + 1] "$symbol"
|
||||
@@ -867,10 +962,11 @@ namespace eval Editor {
|
||||
# set fileName untitled-$untitledNumber
|
||||
set fileFullPath untitled-$untitledNumber
|
||||
#puts [Tree::InsertItem $tree {} $fileFullPath "file" $fileName]
|
||||
set nbEditorItem [NB::InsertItem $nbEditor $fileFullPath "file"]
|
||||
set nbEditorItem [NB::InsertItem $nbEditor $fileFullPath "file"]
|
||||
# puts "$nbEditorItem, $nbEditor"
|
||||
Editor $fileFullPath $nbEditor $nbEditorItem
|
||||
SetModifiedFlag $nbEditorItem
|
||||
SetModifiedFlag $nbEditorItem $nbEditor
|
||||
focus -force $nbEditorItem.frmText.t.t
|
||||
}
|
||||
|
||||
proc ReadStructure {txt treeItemName} {
|
||||
@@ -887,7 +983,7 @@ namespace eval Editor {
|
||||
if {[eval [dict get $lexers $fileType procRegexpCommand]]} {
|
||||
set procName_ [string trim $procName]
|
||||
if {$treeItemName ne ""} {
|
||||
puts [Tree::InsertItem $tree $treeItemName $procName_ "procedure" "$procName_ ($params)"]
|
||||
Tree::InsertItem $tree $treeItemName $procName_ "procedure" "$procName_ ($params)"
|
||||
}
|
||||
lappend procList [list $procName_ $params]
|
||||
unset procName_
|
||||
@@ -911,7 +1007,7 @@ namespace eval Editor {
|
||||
} else {
|
||||
set varType ""
|
||||
}
|
||||
puts "variable: $varName, value: $varValue, type: $varType"
|
||||
# puts "variable: $varName, value: $varValue, type: $varType"
|
||||
lappend varList [list $varName $varValue]
|
||||
}
|
||||
}
|
||||
@@ -921,31 +1017,24 @@ namespace eval Editor {
|
||||
}
|
||||
|
||||
proc FindFunction {txt findString} {
|
||||
global nbEditor
|
||||
puts $findString
|
||||
# puts "txt: $txt, $findString"
|
||||
set pos "0.0"
|
||||
# set txt [$nbEditor select].frmText.t
|
||||
$txt see $pos
|
||||
set line [lindex [split $pos "."] 0]
|
||||
set x [lindex [split $pos "."] 1]
|
||||
# set pos [$txt search -nocase $findString $line.$x end]
|
||||
set pos [$txt search -nocase -regexp $findString $line.$x end]
|
||||
set pattern "$findString\(\\W\|\$\)"
|
||||
set pos [$txt search -nocase -regexp $pattern $line.$x end]
|
||||
$txt mark set insert $pos
|
||||
$txt see $pos
|
||||
puts $pos
|
||||
# highlight the found word
|
||||
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 add sel $pos $line.end
|
||||
# #$text tag configure sel -background $editor(selectbg) -foreground $editor(fg)
|
||||
$txt tag raise sel
|
||||
focus -force $txt.t
|
||||
# Position
|
||||
return 1
|
||||
}
|
||||
# "Alexander Dederer (aka Korwin)
|
||||
|
||||
# "Alexander Dederer (aka Korwin)
|
||||
## Search close bracket in editor widget
|
||||
proc _searchCloseBracket { widget o_bracket c_bracket start_pos end_pos } {
|
||||
# puts "_searchCloseBracket: $widget $o_bracket $c_bracket $start_pos $end_pos"
|
||||
@@ -995,7 +1084,7 @@ namespace eval Editor {
|
||||
# Вызов диалога со списком процедур или функций присутствующих в тексте
|
||||
proc GoToFunction { w } {
|
||||
global tree editors
|
||||
puts $w
|
||||
# puts $w
|
||||
# set txt $w.frmText.t
|
||||
set txt $w
|
||||
set box [$txt bbox insert]
|
||||
@@ -1005,7 +1094,7 @@ namespace eval Editor {
|
||||
# puts "--$txt"
|
||||
# puts $editors($txt)
|
||||
foreach item [dict get $editors $txt procedureList] {
|
||||
puts $item
|
||||
# puts $item
|
||||
lappend l [lindex $item 0]
|
||||
}
|
||||
if {$l ne ""} {
|
||||
@@ -1097,7 +1186,7 @@ namespace eval Editor {
|
||||
|
||||
proc FindReplaceText {txt findString replaceString regexp} {
|
||||
global nbEditor
|
||||
puts [focus]
|
||||
# puts [focus]
|
||||
# set txt [$nbEditor select].frmText.t
|
||||
$txt tag remove sel 1.0 end
|
||||
# $txt see $pos
|
||||
@@ -1129,8 +1218,13 @@ namespace eval Editor {
|
||||
# puts $lstFindIndex
|
||||
# puts $matchIndexPair
|
||||
# set lstFindIndex [$txt search -all "$selectionText" 0.0]
|
||||
|
||||
# Найдем разницу в длине строк для установки правильного
|
||||
# индекса для выделения текста после вставки
|
||||
set stringLengthDiff [expr [string length $findString] - [string length $replaceString]]
|
||||
|
||||
set i 0
|
||||
foreach ind $lstFindIndex {
|
||||
foreach ind [lsort -dictionary -decreasing $lstFindIndex] {
|
||||
set selFindLine [lindex [split $ind "."] 0]
|
||||
set selFindRow [lindex [split $ind "."] 1]
|
||||
# set endInd "$selFindLine.[expr $selFindRow + $symNumbers]"
|
||||
@@ -1138,8 +1232,15 @@ namespace eval Editor {
|
||||
# puts "$ind; $selFindLine, $selFindRow; $endInd "
|
||||
if {$replaceString ne ""} {
|
||||
$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
|
||||
}
|
||||
.finddialog.lblCounter configure -text "[::msgcat::mc "Finded"]: $i"
|
||||
@@ -1181,7 +1282,7 @@ namespace eval Editor {
|
||||
} else {
|
||||
if {[$nbEditor select] ne ""} {
|
||||
set txt [$nbEditor select].frmText.t
|
||||
puts $txt
|
||||
# puts $txt
|
||||
} else {
|
||||
return
|
||||
}
|
||||
@@ -1191,7 +1292,7 @@ namespace eval Editor {
|
||||
set regexpSet ""
|
||||
set searchAll "-all"
|
||||
|
||||
if { [winfo exists $win] } { des`troy $win }
|
||||
if { [winfo exists $win] } { destroy $win }
|
||||
toplevel $win
|
||||
wm transient $win .
|
||||
wm overrideredirect $win 1
|
||||
@@ -1267,16 +1368,16 @@ namespace eval Editor {
|
||||
}
|
||||
|
||||
# Horizontal split the Editor text widget
|
||||
proc SplitEditorH {w fileType} {
|
||||
proc SplitEditorH {w fileType nb} {
|
||||
global cfgVariables
|
||||
puts [$w.panelTxt panes]
|
||||
# puts [$w.panelTxt panes]
|
||||
if [winfo exists $w.frmText2] {
|
||||
$w.panelTxt forget $w.frmText2
|
||||
destroy $w.frmText2
|
||||
focus -force $w.frmText.t.t
|
||||
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]
|
||||
|
||||
# $w.panelTxt add $w.frmText -weight 0
|
||||
@@ -1287,24 +1388,31 @@ namespace eval Editor {
|
||||
focus -force $frmText.t.t
|
||||
}
|
||||
|
||||
proc SplitEditorV {w fileType} {
|
||||
proc SplitEditorV {fileFullPath} {
|
||||
global cfgVariables
|
||||
.frmBody.panel add $frmTree -weight 0
|
||||
|
||||
puts [$w.panelTxt panes]
|
||||
if [winfo exists $w.frmText2] {
|
||||
$w.panelTxt forget $w.frmText2
|
||||
destroy $w.frmText2
|
||||
regsub -all {\.|/|\\|\s|:} $fileFullPath "_" itemName
|
||||
set itemName ".frmWork.nbEditor2.$itemName"
|
||||
# puts $itemName
|
||||
if {[winfo exists $itemName] == 1} {
|
||||
.frmWork.nbEditor2 forget $itemName
|
||||
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
|
||||
}
|
||||
set frmText [Editor::EditorWidget $w $fileType]
|
||||
$frmText.t insert end [$w.frmText.t get 0.0 end]
|
||||
|
||||
# $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]
|
||||
pack .frmWork.nbEditor2 -side left -fill both -expand true
|
||||
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]
|
||||
}
|
||||
|
||||
proc GoToLineNumber {text lineNumber} {
|
||||
@@ -1364,7 +1472,7 @@ namespace eval Editor {
|
||||
focus $win.ent
|
||||
}
|
||||
|
||||
proc EditorWidget {fr fileType} {
|
||||
proc EditorWidget {fr fileType nb} {
|
||||
global cfgVariables editors
|
||||
|
||||
if [winfo exists $fr.frmText] {
|
||||
@@ -1402,8 +1510,8 @@ namespace eval Editor {
|
||||
dict set editors $txt fileType $fileType
|
||||
dict set editors $txt procedureList [list]
|
||||
|
||||
puts ">>[dict get $editors $txt fileType]"
|
||||
puts ">>[dict get $editors $txt procedureList]"
|
||||
# puts ">>[dict get $editors $txt fileType]"
|
||||
# puts ">>[dict get $editors $txt procedureList]"
|
||||
# puts ">>>>> $editors"
|
||||
|
||||
if {[info procs ::Highlight::$fileType] ne ""} {
|
||||
@@ -1411,7 +1519,7 @@ namespace eval Editor {
|
||||
} else {
|
||||
Highlight::Default $txt
|
||||
}
|
||||
BindKeys $fr $txt $fileType
|
||||
BindKeys $fr $txt $fileType $nb
|
||||
return $frmText
|
||||
}
|
||||
|
||||
@@ -1428,6 +1536,7 @@ namespace eval Editor {
|
||||
ICO
|
||||
XPM
|
||||
}
|
||||
# puts "$itemName"
|
||||
set fr $itemName
|
||||
if ![string match "*untitled*" $itemName] {
|
||||
set lblText $fileFullPath
|
||||
@@ -1446,12 +1555,16 @@ namespace eval Editor {
|
||||
set btnSplitV "btnSplitV[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 \
|
||||
-command "Editor::SplitEditorH $fr $fileType"
|
||||
-command "Editor::SplitEditorH $fr $fileType $nb"
|
||||
ttk::button $fr.header.$btnSplitV -image split_vertical_11x11 \
|
||||
-command "Editor::SplitEditorV $fr $fileType" -state disable
|
||||
-command "Editor::SplitEditorV $fileFullPath"
|
||||
|
||||
set btnSplitExecute "btnSplitExec[string range $itemName [expr [string last "." $itemName] +1] end]"
|
||||
ttk::button $fr.header.$btnSplitExecute -image execute_11x11 \
|
||||
-command "Editor::SplitEditorForExecute $fr $fileType $nb $fileFullPath"
|
||||
# pack $fr.$btnSplitH $fr.$btnSplitV -side right -anchor e
|
||||
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 $fr.header.$btnSplitExecute -side right
|
||||
|
||||
pack $fr.header -side top -fill x
|
||||
|
||||
@@ -1462,10 +1575,34 @@ namespace eval Editor {
|
||||
if {[lsearch -exact $imageType $fileType] != -1} {
|
||||
ImageViewer $fileFullPath $itemName $fr
|
||||
} else {
|
||||
set frmText [Editor::EditorWidget $fr $fileType]
|
||||
set frmText [Editor::EditorWidget $fr $fileType $nb]
|
||||
dict set editors $frmText.t fileFullPath $fileFullPath
|
||||
}
|
||||
$fr.panelTxt add $frmText -weight 0
|
||||
|
||||
return $fr
|
||||
}
|
||||
|
||||
proc SplitEditorForExecute {w fileType nb {fileFullPath ""}} {
|
||||
global cfgVariables tree
|
||||
if {$fileFullPath eq ""} {
|
||||
set treeItem "file::[string range $w [expr [string last "." $w] +1] end ]"
|
||||
set fileFullPath [Tree::GetItemID $tree $treeItem]
|
||||
puts $fileFullPath
|
||||
}
|
||||
# puts [$w.panelTxt panes]
|
||||
puts "$w $fileType $nb $fileFullPath"
|
||||
if [winfo exists $w.frmText2] {
|
||||
$w.panelTxt forget $w.frmText2
|
||||
destroy $w.frmText2
|
||||
focus -force $w.frmText.t.t
|
||||
return
|
||||
}
|
||||
|
||||
set frmText [ttk::frame $w.frmText2 -border 1]
|
||||
$w.panelTxt add $frmText -weight 1
|
||||
# focus -force $frmText.t.t
|
||||
Execute $fileFullPath $frmText $w
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
264
lib/files.tcl
264
lib/files.tcl
@@ -9,11 +9,41 @@
|
||||
|
||||
|
||||
namespace eval FileOper {
|
||||
variable types
|
||||
global packages
|
||||
variable types
|
||||
|
||||
set ::types {
|
||||
{"All files" *}
|
||||
}
|
||||
# Проверка поддерживаемых типов изображений
|
||||
# в зависимости устновлен пакет или нет
|
||||
proc SupportImageType {type} {
|
||||
if {[PackagePresent Img] eq "true"} {
|
||||
switch $type {
|
||||
jpeg { return true }
|
||||
png { return true }
|
||||
gif { return true }
|
||||
bmp { return true }
|
||||
svg { return true }
|
||||
ppm { return true }
|
||||
pgm { return true }
|
||||
tiff { return true }
|
||||
xbm { return true }
|
||||
xpm { return true }
|
||||
default { return false}
|
||||
}
|
||||
} else {
|
||||
switch $type {
|
||||
png { return true }
|
||||
gif { return true }
|
||||
bmp { return true }
|
||||
svg { return true }
|
||||
ppm { return true }
|
||||
pgm { return true }
|
||||
default { return false}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc GetFileMimeType {fileFullPath {opt ""}} {
|
||||
global cfgVariables
|
||||
@@ -31,9 +61,10 @@ namespace eval FileOper {
|
||||
|
||||
# lappend cmd $activeProject
|
||||
lappend cmd $fileFullPath
|
||||
# puts $cmd
|
||||
catch $cmd pipe
|
||||
# puts $pipe
|
||||
if [regexp -nocase -- {(\w+)/([[:alnum:]-]+); charset=([[:alnum:]-]+)} $pipe m fType fExt fCharset] {
|
||||
if [regexp -nocase -- {(\w+)/([\w\-_\.]+); charset=([[:alnum:]-]+)} $pipe m fType fExt fCharset] {
|
||||
puts "$fType $fExt $fCharset"
|
||||
}
|
||||
switch $opt {
|
||||
@@ -43,17 +74,74 @@ namespace eval FileOper {
|
||||
}
|
||||
}
|
||||
}
|
||||
# линуксовый file не всегда корректно определяет тип файла
|
||||
# используем пакет из tcl
|
||||
lassign [::fileutil::fileType $fileFullPath] fType fBinaryType fBinaryInterp
|
||||
puts "File type is $fType, $fBinaryType, $fBinaryInterp"
|
||||
set ext [string tolower [file extension $fileFullPath]]
|
||||
|
||||
# Установка корректного типа для svg
|
||||
# Но для новых версий tcl
|
||||
switch $ext {
|
||||
".svg" {
|
||||
set fType "binary"
|
||||
set fBinaryInterp "svg"
|
||||
set fBinaryType "graphic"
|
||||
}
|
||||
".torrent" {
|
||||
set fType "binary"
|
||||
set fBinaryInterp "torrent"
|
||||
set fBinaryType "x-bittorrent"
|
||||
}
|
||||
".pdf" {
|
||||
set fType "binary"
|
||||
set fBinaryInterp "pdf"
|
||||
set fBinaryType "binary"
|
||||
}
|
||||
}
|
||||
puts "File type is $fType, $fBinaryType, $fBinaryInterp, $ext"
|
||||
|
||||
switch $fType {
|
||||
"application" {
|
||||
if {$fExt ne "json"} {
|
||||
return false
|
||||
"binary" {
|
||||
if {$fBinaryType ne ""} {
|
||||
switch $fBinaryType {
|
||||
"graphic" {
|
||||
if {[SupportImageType $fBinaryInterp] eq "true"} {
|
||||
return image
|
||||
} else {
|
||||
set answer [tk_messageBox -message [::msgcat::mc "The file looks like a image. Support not implemented yet."] -icon question -type ok]
|
||||
switch $answer {
|
||||
ok {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
default {
|
||||
return binary
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return binary
|
||||
}
|
||||
}
|
||||
"text" {
|
||||
return text
|
||||
}
|
||||
"image" {
|
||||
return false
|
||||
if {[SupportImageType $fBinaryInterp] eq "true"} {
|
||||
return image
|
||||
} else {
|
||||
set answer [tk_messageBox -message [::msgcat::mc "The file looks like a image. Support not implemented yet."] -icon question -type ok]
|
||||
switch $answer {
|
||||
ok {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"empty" {
|
||||
return text
|
||||
}
|
||||
default {
|
||||
return false
|
||||
@@ -135,16 +223,17 @@ namespace eval FileOper {
|
||||
set dir $env(HOME)
|
||||
}
|
||||
set fullPath [tk_chooseDirectory -initialdir $dir -parent .]
|
||||
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]"
|
||||
# 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]"
|
||||
AddRecentEditedFolder $fullPath
|
||||
return $fullPath
|
||||
}
|
||||
|
||||
@@ -157,36 +246,60 @@ namespace eval FileOper {
|
||||
set treeItem $parent
|
||||
set parent [$tree parent $treeItem]
|
||||
}
|
||||
set upper [Tree::GetUpperItem $tree $treeItem]
|
||||
if {$parent eq "" && [string match "directory::*" $treeItem] == 1} {
|
||||
# puts "tree root item: $treeItem"
|
||||
set proj [string trimleft $upper "directory::"]
|
||||
foreach nbItem [$nbEditor tabs] {
|
||||
set item [string trimleft [file extension $nbItem] "."]
|
||||
# puts $item
|
||||
if [$tree exists "file::$item"] {
|
||||
$nbEditor select $nbItem
|
||||
Close
|
||||
# puts "$upper $item"
|
||||
if [string match "$proj*" $item] {
|
||||
if [$tree exists "file::$item"] {
|
||||
$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
|
||||
unset nextProj
|
||||
unset prevProj
|
||||
}
|
||||
set activeProject ""
|
||||
.frmStatus.lblGitLogo configure -image pixel
|
||||
.frmStatus.lblGit configure -text ""
|
||||
|
||||
}
|
||||
|
||||
proc CloseAll {} {
|
||||
global nbEditor modified
|
||||
foreach nbItem [array names modified] {
|
||||
if {$modified($nbItem) eq "true"} {
|
||||
$nbEditor select $nbItem
|
||||
# puts "close tab $nbItem"
|
||||
if {[Close] eq "cancel"} {return "cancel"}
|
||||
foreach nb2Item [.frmWork.nbEditor2 tabs] {
|
||||
.frmWork.nbEditor2 forget $nb2Item
|
||||
}
|
||||
if {[lsearch -exact [.frmWork.panelNB panes] .frmWork.nbEditor2] != -1} {
|
||||
.frmWork.panelNB forget .frmWork.nbEditor2
|
||||
}
|
||||
foreach nbItem [$nbEditor tabs] {
|
||||
catch {$nbEditor select $nbItem}
|
||||
if {[Close] eq "cancel"} {
|
||||
return "cancel"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc Close {} {
|
||||
global nbEditor modified tree
|
||||
global nbEditor modified tree editors
|
||||
set nbItem [$nbEditor select]
|
||||
# puts "close tab $nbItem"
|
||||
|
||||
@@ -218,25 +331,30 @@ namespace eval FileOper {
|
||||
$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.lblEncoding configure -text ""
|
||||
.frmStatus.lblSize configure -text ""
|
||||
NB::NextTab $nbEditor 0
|
||||
}
|
||||
|
||||
proc Save {} {
|
||||
global nbEditor tree env activeProject
|
||||
global nbEditor tree env activeProject dir
|
||||
|
||||
if [info exists activeProject] {
|
||||
set dir $activeProject
|
||||
set dirProject $activeProject
|
||||
} else {
|
||||
set dir $env(HOME)
|
||||
set dirProject $env(HOME)
|
||||
}
|
||||
|
||||
set nbEditorItem [$nbEditor select]
|
||||
puts "Saved editor text: $nbEditorItem"
|
||||
# puts "Saved editor text: $nbEditorItem"
|
||||
if [string match "*untitled*" $nbEditorItem] {
|
||||
set filePath [tk_getSaveFile -initialdir $dir -filetypes $::types -parent .]
|
||||
set filePath [tk_getSaveFile -initialdir $dirProject -filetypes $::types -parent .]
|
||||
if {$filePath eq ""} {
|
||||
return
|
||||
}
|
||||
@@ -253,9 +371,12 @@ namespace eval FileOper {
|
||||
set editedText [$nbEditorItem.frmText.t get 0.0 end]
|
||||
set f [open $filePath "w+"]
|
||||
puts -nonewline $f $editedText
|
||||
puts "$f was saved"
|
||||
# puts "$f was saved"
|
||||
close $f
|
||||
ResetModifiedFlag $nbEditorItem
|
||||
ResetModifiedFlag $nbEditorItem $nbEditor
|
||||
if {[file tail $filePath] eq "projman.ini"} {
|
||||
Config::read $dir(cfg)
|
||||
}
|
||||
}
|
||||
|
||||
proc SaveAll {} {
|
||||
@@ -282,13 +403,16 @@ namespace eval FileOper {
|
||||
|
||||
proc ReadFolder {directory {parent ""}} {
|
||||
global tree dir lexers project
|
||||
puts "Read the folder $directory"
|
||||
# puts "Read the folder $directory"
|
||||
set rList ""
|
||||
if {[catch {cd $directory}] != 0} {
|
||||
return ""
|
||||
}
|
||||
set parent [Tree::InsertItem $tree $parent $directory "directory" [file tail $directory]]
|
||||
$tree selection set $parent
|
||||
foreach i [$tree children $parent] {
|
||||
$tree delete $i
|
||||
}
|
||||
# if {[ $tree item $parent -open] eq "false"} {
|
||||
# $tree item $parent -open true
|
||||
# } else {
|
||||
@@ -351,44 +475,83 @@ namespace eval FileOper {
|
||||
# Delete emty last line
|
||||
if {[$txt get {end-1 line} end] eq "\n" || [$txt get {end-1 line} end] eq "\r\n"} {
|
||||
$txt delete {end-1 line} end
|
||||
puts ">[$txt get {end-1 line} end]<"
|
||||
# puts ">[$txt get {end-1 line} end]<"
|
||||
}
|
||||
$txt see 1.0
|
||||
}
|
||||
|
||||
proc Edit {fileFullPath} {
|
||||
global nbEditor tree
|
||||
proc Edit {fileFullPath {nbEditor .frmWork.nbEditor}} {
|
||||
global tree
|
||||
puts "$fileFullPath"
|
||||
if {[file exists $fileFullPath] == 0} {
|
||||
return false
|
||||
} else {
|
||||
# puts [::fileutil::magic::filetype $fileFullPath]
|
||||
# puts "$fileFullPath File type [::fileutil::magic::filetype $fileFullPath]"
|
||||
set fileType [FileOper::GetFileMimeType $fileFullPath]
|
||||
}
|
||||
|
||||
# puts "$fileType <<<<<<<<<<<"
|
||||
|
||||
switch $fileType {
|
||||
"text" {
|
||||
# return text
|
||||
}
|
||||
"image" {
|
||||
# return image
|
||||
}
|
||||
"binary" {
|
||||
set answer [tk_messageBox -message [::msgcat::mc "The file looks like a binary file. Open anyway?"] \
|
||||
-icon question -type yesno]
|
||||
switch $answer {
|
||||
yes {}
|
||||
no {return}
|
||||
}
|
||||
}
|
||||
false {
|
||||
return
|
||||
}
|
||||
}
|
||||
# Проверяем размер файла и если он больше 1мб вывести предупреждение
|
||||
# puts " File size = [file size $fileFullPath]"
|
||||
if {[file size $fileFullPath] > 1000000} {
|
||||
set answer [tk_messageBox -message [::msgcat::mc "The file size to big. Open anyway?"] \
|
||||
-detail [GetFileAttr $fileFullPath "size"] \
|
||||
-icon question -type yesno]
|
||||
switch $answer {
|
||||
yes {}
|
||||
no {return}
|
||||
}
|
||||
}
|
||||
|
||||
set filePath [file dirname $fileFullPath]
|
||||
set fileName [file tail $fileFullPath]
|
||||
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName
|
||||
|
||||
regsub -all {\.|/|\\|\s|:} $fileFullPath "_" itemName
|
||||
set itemName [string tolower $itemName]
|
||||
set itemName "$nbEditor.$itemName"
|
||||
set treeItemName [Tree::InsertItem $tree {} $fileFullPath "file" $fileName]
|
||||
|
||||
# переместим указатель на нужный файл в дереве
|
||||
Tree::SelectItem $treeItemName
|
||||
|
||||
if {[winfo exists $itemName] == 0} {
|
||||
NB::InsertItem $nbEditor $fileFullPath "file"
|
||||
if {$fileType eq "image"} {
|
||||
ImageViewer $fileFullPath $itemName $itemName
|
||||
return $itemName
|
||||
}
|
||||
|
||||
Editor::Editor $fileFullPath $nbEditor $itemName
|
||||
ReadFile $fileFullPath $itemName
|
||||
$itemName.frmText.t highlight 1.0 end
|
||||
ResetModifiedFlag $itemName
|
||||
ResetModifiedFlag $itemName $nbEditor
|
||||
$itemName.frmText.t see 1.1
|
||||
}
|
||||
$nbEditor select $itemName
|
||||
focus -force $itemName
|
||||
if {$fileType eq "image"} {
|
||||
# ImageViewer $fileFullPath $itemName $itemName
|
||||
return $itemName
|
||||
}
|
||||
Editor::ReadStructure $itemName.frmText.t $treeItemName
|
||||
GetVariablesFromFile $fileFullPath
|
||||
$itemName.frmText.t.t mark set insert 1.0
|
||||
@@ -396,6 +559,8 @@ namespace eval FileOper {
|
||||
focus -force $itemName.frmText.t.t
|
||||
.frmStatus.lblSize configure -text [GetFileAttr $fileFullPath "size"]
|
||||
.frmStatus.lblEncoding configure -text [GetFileMimeType $fileFullPath "charset"]
|
||||
# puts ">> $itemName"
|
||||
|
||||
return $itemName
|
||||
}
|
||||
|
||||
@@ -413,13 +578,14 @@ namespace eval FileOper {
|
||||
set selBegin [lindex [$txt tag ranges sel] 0]
|
||||
set selEnd [lindex [$txt tag ranges sel] 1]
|
||||
set str [$txt get $selBegin $selEnd]
|
||||
puts $str
|
||||
# puts $str
|
||||
set res [SearchStringInFolder $str]
|
||||
}
|
||||
}
|
||||
FindInFilesDialog $txt $res
|
||||
.find.entryFind delete 0 end
|
||||
.find.entryFind insert end $str
|
||||
if [FindInFilesDialog $txt $res] {
|
||||
.find.entryFind delete 0 end
|
||||
.find.entryFind insert end $str
|
||||
}
|
||||
}
|
||||
|
||||
proc ReplaceInFiles {} {
|
||||
|
||||
272
lib/git.tcl
272
lib/git.tcl
@@ -12,6 +12,28 @@
|
||||
namespace eval Git {
|
||||
variable gitCommand
|
||||
|
||||
# Определим путь до команды git в зависимсти от платформы
|
||||
proc CommandPathSetting {} {
|
||||
global cfgVariables tcl_platform
|
||||
if {$cfgVariables(gitCommand) == ""} {
|
||||
if {$tcl_platform(platform) eq "windows"} {
|
||||
set cmd {where git}
|
||||
} else {
|
||||
set cmd {which git}
|
||||
}
|
||||
if {[catch {exec {*}$cmd} git_path]} {
|
||||
puts "Git не найден в системе"
|
||||
set cfgVariables(gitCommand) "Git not found"
|
||||
return
|
||||
}
|
||||
set git_path [string trim $git_path]
|
||||
set first_path [lindex [split $git_path "\n"] 0]
|
||||
|
||||
# puts "Git найден: $first_path"
|
||||
set cfgVariables(gitCommand) $first_path
|
||||
}
|
||||
}
|
||||
|
||||
proc GetConfig {option} {
|
||||
global activeProject cfgVariables
|
||||
set confOptions {
|
||||
@@ -69,9 +91,10 @@ namespace eval Git {
|
||||
}
|
||||
}
|
||||
catch $cmd pipe
|
||||
puts $cmd
|
||||
puts $pipe
|
||||
# puts $cmd
|
||||
# puts $pipe
|
||||
if [regexp -nocase -- {^error:} $pipe match] {
|
||||
ShowMessage "Command: '$cmd' error" $pipe
|
||||
return
|
||||
}
|
||||
foreach line [split $pipe "\n"] {
|
||||
@@ -80,6 +103,8 @@ namespace eval Git {
|
||||
# cd $d
|
||||
|
||||
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||
FileOper::ReadFolder $activeProject
|
||||
|
||||
if [info exists res] {
|
||||
return $res
|
||||
}
|
||||
@@ -89,9 +114,15 @@ namespace eval Git {
|
||||
global cfgVariables activeProject
|
||||
set cmd exec
|
||||
set d [pwd]
|
||||
if {$activeProject ne ""} {
|
||||
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 "-s"
|
||||
@@ -107,6 +138,7 @@ namespace eval Git {
|
||||
}
|
||||
catch $cmd pipe
|
||||
if [regexp -nocase -- {^fatal:} $pipe match] {
|
||||
ShowMessage "Command: '$cmd' error" $pipe
|
||||
return
|
||||
}
|
||||
foreach line [split $pipe "\n"] {
|
||||
@@ -120,6 +152,14 @@ namespace eval Git {
|
||||
|
||||
proc Status {} {
|
||||
global cfgVariables activeProject
|
||||
if [file isdirectory $activeProject] {
|
||||
cd $activeProject
|
||||
if ![file exists .git] {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
set cmd exec
|
||||
lappend cmd $cfgVariables(gitCommand)
|
||||
lappend cmd "status"
|
||||
@@ -127,7 +167,9 @@ namespace eval Git {
|
||||
lappend cmd "--"
|
||||
lappend cmd $activeProject
|
||||
catch $cmd pipe
|
||||
# puts $cmd
|
||||
if [regexp -nocase -- {^fatal:} $pipe match] {
|
||||
ShowMessage "Command: '$cmd' error" $pipe
|
||||
return
|
||||
}
|
||||
foreach line [split $pipe "\n"] {
|
||||
@@ -147,8 +189,9 @@ namespace eval Git {
|
||||
lappend cmd "--"
|
||||
lappend cmd [file join $activeProject [string trimleft $f "../"]]
|
||||
catch $cmd pipe
|
||||
puts $cmd
|
||||
# puts $cmd
|
||||
if [regexp -nocase -- {^fatal:} $pipe match] {
|
||||
ShowMessage "Command: '$cmd' error" $pipe
|
||||
return
|
||||
}
|
||||
foreach line [split $pipe "\n"] {
|
||||
@@ -167,6 +210,7 @@ namespace eval Git {
|
||||
append cmd " $cfgVariables(gitCommand)"
|
||||
append cmd " commit"
|
||||
append cmd " -m"
|
||||
regsub -all {\"|\'} $description {'} description
|
||||
append cmd " \"$description\""
|
||||
append cmd " --"
|
||||
foreach item [$listBox get 0 [$listBox size]] {
|
||||
@@ -181,9 +225,11 @@ namespace eval Git {
|
||||
}
|
||||
} else {
|
||||
puts $cmd
|
||||
puts $description
|
||||
catch $cmd pipe
|
||||
puts $pipe
|
||||
if [regexp -nocase -- {^fatal:} $pipe match] {
|
||||
ShowMessage "Command: '$cmd' error" $pipe
|
||||
return
|
||||
}
|
||||
foreach line [split $pipe "\n"] {
|
||||
@@ -204,7 +250,7 @@ namespace eval Git {
|
||||
# set cmd exec
|
||||
cd $activeProject
|
||||
set url [Git::GetConfig remote.origin.url]
|
||||
puts $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 {
|
||||
@@ -224,7 +270,11 @@ namespace eval Git {
|
||||
# lappend cmd "$activeProject"
|
||||
# puts "$cmd"
|
||||
catch $cmd pipe
|
||||
puts $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
|
||||
@@ -256,7 +306,28 @@ namespace eval Git {
|
||||
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} {
|
||||
global cfgVariables activeProject
|
||||
set commitString [$w.body.lLog get [$w.body.lLog curselection]]
|
||||
@@ -297,15 +368,18 @@ namespace eval Git {
|
||||
|
||||
proc ListBoxPress {w} {
|
||||
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 {
|
||||
return
|
||||
}
|
||||
# puts $values
|
||||
$w.body.t delete 1.0 end
|
||||
set i 0
|
||||
foreach line [Git::Diff $fileName] {
|
||||
puts $line
|
||||
# puts $line
|
||||
if {$i > 3} {
|
||||
$w.body.t inser end "$line\n"
|
||||
}
|
||||
@@ -315,17 +389,73 @@ namespace eval Git {
|
||||
}
|
||||
proc CommitAdd {w} {
|
||||
global activeProject cfgVariables
|
||||
set fileName [$w.body.lBox get [$w.body.lBox curselection]]
|
||||
# puts $values
|
||||
set selectedItems [$w.body.lBox curselection]
|
||||
set cmd exec
|
||||
lappend cmd $cfgVariables(gitCommand)
|
||||
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
|
||||
puts $cmd
|
||||
$w.body.lCommit insert end $fileName
|
||||
$w.body.lBox delete [$w.body.lBox curselection]
|
||||
# puts $cmd
|
||||
$w.body.t delete 1.0 end
|
||||
}
|
||||
|
||||
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} {
|
||||
# puts [Editor::Key $k]
|
||||
switch $k {
|
||||
@@ -367,7 +497,12 @@ namespace eval Git {
|
||||
# puts $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}} {
|
||||
@@ -506,21 +641,99 @@ namespace eval Git {
|
||||
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 {} {
|
||||
global cfgVariables activeProject nbEditor
|
||||
variable fr
|
||||
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
|
||||
}
|
||||
if {[info exists activeProject] == 0} {
|
||||
if {[info exists activeProject] == 0 || [file exists [file join $activeProject .git]] == 0} {
|
||||
Git::CloneDialog
|
||||
return
|
||||
}
|
||||
set fr [NB::InsertItem $nbEditor git_browse "git"]
|
||||
ttk::frame $fr.header
|
||||
set lblText "$activeProject | [::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||
ttk::label $fr.header.lblGit -text $lblText -justify right
|
||||
pack $fr.header.lblGit -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
|
||||
|
||||
ttk::frame $fr.body
|
||||
@@ -529,7 +742,8 @@ namespace eval Git {
|
||||
ttk::label $fr.body.lblUnindexed -justify left -padding {3 3} \
|
||||
-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"
|
||||
|
||||
# pack [ttk::scrollbar $fr.body.v -command "$fr.body.t yview"] -side right -fill y
|
||||
@@ -542,11 +756,13 @@ namespace eval Git {
|
||||
|
||||
ttk::button $fr.body.bAdd -image forward_20x20 -compound center \
|
||||
-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} \
|
||||
-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.vCommit -command "$fr.body.tCommit yview"
|
||||
# ttk::scrollbar $fr.body.hCommit -orient horizontal -command "$fr.body.tCommit xview"
|
||||
@@ -605,9 +821,9 @@ namespace eval Git {
|
||||
|
||||
# Git repo status
|
||||
foreach { word } [Git::Status] {
|
||||
# puts $word
|
||||
if [regexp -nocase -- {([\w\s])([\s\w?]+)\s../(.+?)} $word match v1 v2 fileName] {
|
||||
# puts "$v1 $v2 $fileName"
|
||||
puts $word
|
||||
if [regexp -nocase -- {([\w\s\?])([\s\w\\*\?]+)\s(.+?)} $word match v1 v2 fileName] {
|
||||
puts "$v1 $v2 $fileName"
|
||||
# $fr.unindexed.t delete 1.0 end
|
||||
if {$v1 ne " "} {
|
||||
$fr.body.lCommit insert end $fileName
|
||||
@@ -625,8 +841,10 @@ namespace eval Git {
|
||||
Git::DialogUpdate $Git::fr
|
||||
}
|
||||
bind $fr.body.lBox <Return> "Git::CommitAdd $fr"
|
||||
bind $fr.body.lBox <Double-Button-1> "catch {Git::CommitAdd $fr; $fr.body.t delete 0.0 end; $fr.body.tCommit delete 0.0 end}"
|
||||
bind $fr.body.lBox <Button-1><ButtonRelease-1> "Git::ListBoxPress $fr"
|
||||
bind $fr.body.lBox <Double-Button-1> \
|
||||
"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.lLog <Double-Button-1> "Git::Show $fr"
|
||||
|
||||
83
lib/gui.tcl
83
lib/gui.tcl
@@ -23,13 +23,14 @@ wm overrideredirect . 0
|
||||
|
||||
bind . <Control-q> Quit
|
||||
bind . <Control-Q> Quit
|
||||
bind . <Control-Cyrillic_shorti> Quit
|
||||
bind . <Control-eacute> Quit
|
||||
bind . <Insert> Add
|
||||
bind . <Delete> Del
|
||||
bind . <Control-Return> Edit
|
||||
bind . <F1> ShowHelpDialog
|
||||
bind . <Control-n> Editor::New
|
||||
bind . <Control-N> Editor::New
|
||||
bind . <Control-Cyrillic_te> Editor::New
|
||||
bind . <Control-o> {
|
||||
set filePath [FileOper::OpenDialog]
|
||||
if {$filePath != ""} {
|
||||
@@ -42,22 +43,31 @@ bind . <Control-O> {
|
||||
FileOper::Edit $filePath
|
||||
}
|
||||
}
|
||||
bind . <Control-k> {
|
||||
bind . <Alt-k> {
|
||||
set folderPath [FileOper::OpenFolderDialog]
|
||||
if {$folderPath != ""} {
|
||||
FileOper::ReadFolder $folderPath
|
||||
}
|
||||
}
|
||||
bind . <Control-K> {
|
||||
bind . <Alt-K> {
|
||||
set folderPath [FileOper::OpenFolderDialog]
|
||||
if {$folderPath != ""} {
|
||||
FileOper::ReadFolder $folderPath
|
||||
}
|
||||
}
|
||||
bind . <Alt-Cyrillic_el> {
|
||||
set folderPath [FileOper::OpenFolderDialog]
|
||||
if {$folderPath != ""} {
|
||||
FileOper::ReadFolder $folderPath
|
||||
}
|
||||
}
|
||||
|
||||
bind . <Control-s> {FileOper::Save}
|
||||
bind . <Control-S> {FileOper::Save}
|
||||
bind . <Alt-p> ViewFilesTree
|
||||
|
||||
bind . <Control-Cyrillic_hardsign> {FileOper::Save}
|
||||
bind . <Alt-p> {ViewFilesTree true}
|
||||
bind . <Alt-Cyrillic_ze> {ViewFilesTree true}
|
||||
bind . <Button-3> {catch [PopupMenu %X %Y]}
|
||||
|
||||
#ttk::style configure TPanedwindow -background blue
|
||||
#ttk::style configure Sash -sashthickness 5
|
||||
@@ -70,11 +80,23 @@ if [info exists cfgVariables(theme)] {
|
||||
}
|
||||
|
||||
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
|
||||
pack .frmMenu -side top -padx 1 -fill x
|
||||
pack .frmBody -side top -padx 1 -fill both -expand true
|
||||
pack .frmStatus -side top -padx 1 -fill x
|
||||
|
||||
if {$cfgVariables(menuShow) eq "true"} {
|
||||
# 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 propagate .panel false
|
||||
@@ -104,28 +126,45 @@ ttk::menubutton .frmMenu.mnuHelp -text [::msgcat::mc "Help"] -menu .frmMenu.mnuH
|
||||
GetHelpMenu [menu .frmMenu.mnuHelp.m]
|
||||
pack .frmMenu.mnuHelp -side right
|
||||
|
||||
# PopUP menu
|
||||
menu .popup
|
||||
GetFileMenu .popup
|
||||
GetEditMenu .popup
|
||||
GetViewMenu .popup
|
||||
|
||||
set frmTool [ttk::frame .frmBody.frmTool]
|
||||
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
|
||||
pack .frmBody.panel -side left -fill both -expand true
|
||||
if {$cfgVariables(toolBarShow) eq "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_git -command Git::Dialog -image git_24x24
|
||||
ttk::button $frmTool.btn_settings -command Settings -image settings_24x24
|
||||
|
||||
pack $frmTool.btn_tree $frmTool.btn_search $frmTool.btn_git -side top -padx 1 -pady 1
|
||||
pack $frmTool.btn_settings -side bottom -padx 1 -pady 10
|
||||
|
||||
# #label $frmTool.lbl_logo -image tcl
|
||||
# pack $frmTool.btn_quit -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 \
|
||||
-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 column #0 -anchor e
|
||||
|
||||
@@ -133,7 +172,7 @@ ttk::scrollbar $frmTree.h -orient horizontal -command [list $frmTree.tree xview]
|
||||
ttk::scrollbar $frmTree.v -orient vertical -command [list $frmTree.tree yview]
|
||||
|
||||
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 $frmTree.v -row 0 -column 1 -sticky nsew
|
||||
@@ -143,10 +182,19 @@ grid rowconfigure $frmTree 0 -weight 1
|
||||
|
||||
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]
|
||||
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
|
||||
#
|
||||
# Create an image CLOSE for tab
|
||||
@@ -163,6 +211,7 @@ ttk::style layout TNotebook.Tab {
|
||||
bind TNotebook <Button-1> "catch {NB::PressTab %W %x %y}\;[bind TNotebook <Button-1>];break"
|
||||
# bind <<NotebookTabChanged>> "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-Next> "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::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||
ctext::addHighlightClassForRegexp $txt namespaces #4f64ff {::}
|
||||
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} {
|
||||
@@ -53,12 +55,13 @@ namespace eval Highlight {} {
|
||||
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||
ctext::addHighlightClass $txt bool #3e803b {nil false true}
|
||||
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
|
||||
}
|
||||
|
||||
proc PY {txt} {
|
||||
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::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\&"
|
||||
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\*"
|
||||
@@ -68,6 +71,7 @@ namespace eval Highlight {} {
|
||||
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
|
||||
}
|
||||
|
||||
proc YAML {txt} {
|
||||
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||
ctext::addHighlightClassForRegexp $txt stackControl #19a2a6 {\s*?[\w]+:}
|
||||
@@ -77,34 +81,134 @@ namespace eval Highlight {} {
|
||||
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
|
||||
}
|
||||
|
||||
proc YML {txt} {
|
||||
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||
ctext::addHighlightClassForRegexp $txt stackControl #19a2a6 {\s*?[\w]+:}
|
||||
ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)(\{|)[\.a-zA-Z0-9\_\-]+}
|
||||
ctext::addHighlightClassForRegexp $txt varsansible #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]*}
|
||||
Highlight::YAML $txt
|
||||
}
|
||||
|
||||
proc XML {txt} {
|
||||
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::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||
# ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
|
||||
# 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} {
|
||||
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
|
||||
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 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::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::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-\[\]]+}
|
||||
# ctext::addHighlightClass $txt variable_funcs gold {set global variable unset}
|
||||
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 #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}
|
||||
}
|
||||
proc ExecuteColorized {txt} {
|
||||
# ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z]+}
|
||||
# ctext::addHighlightClass $txt stackControl #19a2a6 [info commands]
|
||||
# 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::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\$"
|
||||
# ctext::addHighlightClass $txt variable_funcs gold {set global variable unset}
|
||||
# # ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
|
||||
# ctext::addHighlightClassForRegexp $txt namespaces #4f64ff {::}
|
||||
# ctext::addHighlightClassForRegexp $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}
|
||||
# ctext::addHighlightClassForRegexp $txt paths lightblue {(\s)([\w]+)(=)}
|
||||
# ctext::addHighlightClassForSpecialChars $txt tags lightgreen {<>/}
|
||||
# ctext::addHighlightClassForRegexp $txt tags #199100 {/.+\s}
|
||||
ctext::addHighlightClassForRegexp $txt gopaths lightblue {(.+?):(\d+):(\d+):}
|
||||
ctext::addHighlightClassForRegexp $txt paths lightblue {(\\|/|\.|^)((\w)|(\.)|(/)|([\.\w]))+?\s}
|
||||
ctext::addHighlightClass $txt compile_errors #ff5050 {error Error ERROR invalid undefined cannot}
|
||||
ctext::addHighlightClassForRegexp $txt url lightblue {\w+://\w.+\w+}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
######################################################
|
||||
# Base64 encoded Images library
|
||||
######################################################
|
||||
|
||||
image create photo projman -data {
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
|
||||
WXMAAAsSAAALEgHS3X78AAAAB3RJTUUH1AsFAhA0bYcHMAAACoFJREFUeNqlV1uMG9UZ/uZiz9ge
|
||||
@@ -595,6 +596,22 @@ image create photo debian_16x12 -data {
|
||||
rA8mrK6XByzl3QaSIFac9xqEuFa2XxzygDJS7dv2U3oGIh75yu7ibF0AAN5NOFR9hOAAAAAASUVO
|
||||
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 {
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
|
||||
@@ -615,6 +632,26 @@ image create photo redhat_16x12 -data {
|
||||
JoP7vsKvmscGvwDMplK1fiHiel7hCqIFNKp8a+dBC1kyMF5IOm1we9PY8Fgu0XnYsAsSizJ8Q9+B
|
||||
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 {
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
|
||||
@@ -1028,19 +1065,103 @@ image create photo yml_16x12 -data {
|
||||
AElFTkSuQmCC
|
||||
}
|
||||
image create photo rb_16x12 -data {
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||
kT1Iw0AcxV9Tix9UHOwg4pChOlkQFREnrUIRKoRaoVUHk0u/oElDkuLiKLgWHPxYrDq4OOvq4CoI
|
||||
gh8gjk5Oii5S4v+SQosYD4778e7e4+4dINTLTLM6xgBNt81UIi5msqti5yu6ISCEGGZkZhlzkpSE
|
||||
7/i6R4CvdzGe5X/uz9Gr5iwGBETiWWaYNvEG8dSmbXDeJ46woqwSnxOPmnRB4keuKx6/cS64LPDM
|
||||
iJlOzRNHiMVCGyttzIqmRjxJHFU1nfKFjMcq5y3OWrnKmvfkLwzn9JVlrtMcQgKLWIIEEQqqKKEM
|
||||
m/oqQSfFQor24z7+QdcvkUshVwmMHAuoQIPs+sH/4He3Vn5i3EsKx4HQi+N8DAOdu0Cj5jjfx47T
|
||||
OAGCz8CV3vJX6sD0J+m1lhY9Avq2gYvrlqbsAZc7wMCTIZuyKwVpCvk88H5G35QF+m+BnjWvt+Y+
|
||||
Th+ANHWVvAEODoGRAmWv+7y7q723f880+/sBmApyti9bk0oAAAAGYktHRAAAAAAAAPlDu38AAAAJ
|
||||
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmCQIGGArNk/UwAAAAqUlEQVQoz51SMQoCMRCcxAW7
|
||||
gLpgZan5/3NygpWFSAS1sDFeLNyDMya54FZhdmYYZgM0jmOKOZxSYL+E6TXdABytD5uSMGvgmGIv
|
||||
7xYxAOhcROuDSok57MsgAo8xMTUspdEDWSscEvFTONfJDsbxHNMLChdErGS3cEynqsFPvI/4bH1Y
|
||||
CzIvGoj4DsCkhTmmAGBW62A4o6kV1jF1u6krFMRBLrRt+RN/zRuAsFTFUDTjWwAAAABJRU5ErkJg
|
||||
gg==
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAADfnpUWHRSYXcgcHJvZmlsZSB0eXBl
|
||||
IGV4aWYAAHjatZZbduMgDIbftYpZgiVxEcvBXM6ZHczy5wfbmcZN0qTpmBOQsZCEPkFL7c/vTr/w
|
||||
sEVHzkcLKYQFj0suSYZgy/bk2fPiZr+/LIdwNU9L2T8IphSjbq8Wdv1jnpcrS5wh+Q+GbDfE6/WH
|
||||
5Hb7djK0O9IRkUCou6G0G1LZPvBuIG/bWkKy+HELa9vGemzRth+Nrh85idtwfncR2aseflSkKeuC
|
||||
XlS2AHT8hDTjg6Bf1KDIqlOOsw97JEjIrTwtH6KiM5WLdKJyMDlDgTPeqOkpmeEy3pxnfzv5NFP8
|
||||
wbOWXZLr+aVfXFwleea4V6Pe27a77AJSGvZNHVucEhRXpFznsoAW8fOQ42wJzQjVW4C8IgkrWuHE
|
||||
AiydHVfO3LnNsXBBiE6aRIwiRXTOmUZJUnQhcHKjcZeoSasaGBbgVczKJRaeftN0V9jguDI0hWGM
|
||||
N/zyM+2uod4HcOaRzLLlCnHJKEKEMciNHloAwv2oIz8TfLTzM7gqCPqZZsMG87JuJlbPe22NOtIJ
|
||||
WqHoMW5njWPdDSBF8O0RDCsILIHVc+AlikRm5NHAJ8OQiTpZgYC9l4ooxakGwMGJgW+siTx1xcs2
|
||||
jTsLILwGHCQDoAxW42JD/URnqKHs1TvvffDRm08+Bw0u+BBCDOPyy1Gjiz6GGKPFFLOpOfMWLJqR
|
||||
JctJkuJy9CmkmCyllDOcZljOWJ2hkPMqq65u9WtY42prWnNB+RRXfAklFqOSSq5SteKeqKHGajXV
|
||||
3LihlJprvoUWm7XUckepde2u+x567NZTzxdqTBvWT+15anxQk0lqKMYLNSyN8TDB4zrxgxmIiWMQ
|
||||
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 {
|
||||
iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||
@@ -1229,18 +1350,600 @@ image create photo key_64x64 -data {
|
||||
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==
|
||||
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
|
||||
}
|
||||
image create photo execute_11x11 -data {
|
||||
iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAABg2lDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||
kT1Iw1AUhU9TpVIqDnYQUclQneyiIo5ahSJUCLVCqw4mL/2DJg1Jiouj4Fpw8Gex6uDirKuDqyAI
|
||||
/oC4C06KLlLifUmhRYwPLu/jvHcO990HCI0K06yuWUDTbTOdTIjZ3KoYekUYw1QjiMrMMuYkKQXf
|
||||
9XWPAN/v4jzL/96fq1fNWwwIiMSzzDBt4g3i6U3b4LxPHGUlWSU+Jx43qUHiR64rHr9xLros8Myo
|
||||
mUnPE0eJxWIHKx3MSqZGPEUcUzWd8oWsxyrnLc5apcZaffIXRvL6yjLXqYaQxCKWIEGEghrKqMBG
|
||||
nHadFAtpOk/4+Addv0QuhVxlMHIsoAoNsusH/4Pfs7UKkxNeUiQBdL84zscoENoFmnXH+T52nOYJ
|
||||
EHwGrvS2v9oAZj5Jr7e12BHQtw1cXLc1ZQ+43AEGngzZlF0pSCUUCsD7GX1TDui/BcJr3txa5zh9
|
||||
ADI0q9QNcHAIjBUpe93n3T2dc/v3Tmt+P5frcrXBnzRwAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
|
||||
WXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH6QodCiMdxWTpZwAAABl0RVh0Q29tbWVudABDcmVhdGVk
|
||||
IHdpdGggR0lNUFeBDhcAAABHSURBVBjTjY/BDQAwCAKNUzleux1b2Y+PxgiRJ7kjalYBkADSRLwX
|
||||
SvCpZIKzlUlwdWMXJFw5Kzgi7mr5A/XyBI4wA9kzFHrskxvBNKQinAAAAABJRU5ErkJggg==
|
||||
}
|
||||
image create photo settings_24x24 -data {
|
||||
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABg2lDQ1BJQ0MgcHJvZmlsZQAAKJF9
|
||||
kT1Iw1AUhU9TpVIqDnYQUclQneyiIo5ahSJUCLVCqw4mL/2DJg1Jiouj4Fpw8Gex6uDirKuDqyAI
|
||||
/oC4C06KLlLifUmhRYwPLu/jvHcO990HCI0K06yuWUDTbTOdTIjZ3KoYekUYw1QjiMrMMuYkKQXf
|
||||
9XWPAN/v4jzL/96fq1fNWwwIiMSzzDBt4g3i6U3b4LxPHGUlWSU+Jx43qUHiR64rHr9xLros8Myo
|
||||
mUnPE0eJxWIHKx3MSqZGPEUcUzWd8oWsxyrnLc5apcZaffIXRvL6yjLXqYaQxCKWIEGEghrKqMBG
|
||||
nHadFAtpOk/4+Addv0QuhVxlMHIsoAoNsusH/4Pfs7UKkxNeUiQBdL84zscoENoFmnXH+T52nOYJ
|
||||
EHwGrvS2v9oAZj5Jr7e12BHQtw1cXLc1ZQ+43AEGngzZlF0pSCUUCsD7GX1TDui/BcJr3txa5zh9
|
||||
ADI0q9QNcHAIjBUpe93n3T2dc/v3Tmt+P5frcrXBnzRwAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
|
||||
WXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH6QodESQY6jzHvgAAABl0RVh0Q29tbWVudABDcmVhdGVk
|
||||
IHdpdGggR0lNUFeBDhcAAAHySURBVEjHrZZPSFVREMZ/iomaBm1SApFHIEoL+6e7ROHTFkEbaWNb
|
||||
95YgSFiLyECIoJXtIkEXZqSrIoYwQiEScVOCguQylCzKpyFBm3PjvcO5f8L3wV3cufPNnHNmvjO3
|
||||
jAwws06gxTN/lTSfxq0gGx4BFz3bAVCdRizPmOBswFZlZg1HTmBm9UBVzOczafwyL9groAGYAJ4D
|
||||
bcDDwPFE+AKMADPAdWAAaATOSfpdlMDM+oDZAvJPoC7jEf4CagveRySN/0tgZtXAKtBMabAH5CRt
|
||||
RzUYyhj80D1pOA48KCzyQArhE9AlqVJSJXAeeJvC6TezY1GCXmAtxnEd6JD0LjJIWnWchRjOFtAj
|
||||
6bDcETaAS8DLgPNdSXnfKOkPMBzw/wC0S1oq0oEL8jpAWIw7A0nLAfOypO3/UfKJBBGG+AdBJZtZ
|
||||
DhgMEK4mJL8WsN0ws8tFSnYimwRqAoQfQJukLW/1jcB7oClmF7ckPYkSbAK5hJXmXV9HNWoH7gCn
|
||||
U9R9KrquR4GpBOca4L57smJM0n7UptNuu6XCOvDY76KbntMC8C1DsDzwxrPdlrTv62AFuOeu6lZJ
|
||||
3W5MPksIPgdckHTF1XAMeCrpRXAexPT6yYSddEj6eKSJJmk3IcFGqWby51AbSvpeqr+KPjcKC7GT
|
||||
hfgXbteIc85F7RUAAAAASUVORK5CYII=
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
proc ImageViewer {f w node} {
|
||||
global factor cfgVariables
|
||||
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"
|
||||
canvas $w.f.c -xscrollcommand "$w.f.x set" -yscrollcommand "$w.y set" -bg $cfgVariables(backGround)
|
||||
ttk::scrollbar $w.f.x -ori hori -command "$w.f.c xview"
|
||||
ttk::scrollbar $w.y -ori vert -command "$w.f.c yview"
|
||||
|
||||
@@ -20,15 +21,15 @@ proc ImageViewer {f w node} {
|
||||
}
|
||||
|
||||
proc openImg {fn w node} {
|
||||
global im1
|
||||
global im1 factor
|
||||
set im1 [image create photo -file $fn]
|
||||
#scale $w
|
||||
scale $w $factor($node) $node
|
||||
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
|
||||
global im1 im2 factor tab_label
|
||||
set factor($node) [expr {$factor($node) * $n}]
|
||||
$w delete img
|
||||
catch {image delete $im2}
|
||||
@@ -41,7 +42,8 @@ proc scale {w {n 1} 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))"
|
||||
set noteBook [file extension $node]
|
||||
# $noteBook itemconfigure $node -text "(size x$factor($node))"
|
||||
$w config -scrollregion [$w bbox all]
|
||||
}
|
||||
|
||||
@@ -52,6 +54,7 @@ proc ImageBase64Encode {text} {
|
||||
{"GIF" {.gif}}
|
||||
{"JPEG" {.jpg}}
|
||||
{"BMP" {.bmp}}
|
||||
{"SVG" {.svg}}
|
||||
{"All files" *}
|
||||
}
|
||||
set img [tk_getOpenFile -initialdir $env(HOME) -filetypes $types -parent .]
|
||||
@@ -65,5 +68,3 @@ proc ImageBase64Encode {text} {
|
||||
$text insert [Position] "image create photo $name -data {\n$data\n}"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -15,9 +15,12 @@ dict set lexers TCL commands [info commands]
|
||||
#--------------------------------------------------
|
||||
# Go lang
|
||||
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 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}
|
||||
|
||||
#--------------------------------------------------
|
||||
# SHELL (Bash)
|
||||
dict set lexers SH commentSymbol {#}
|
||||
@@ -30,13 +33,17 @@ dict set lexers SH procRegexpCommand {regexp -nocase -all -- {^\s*?(function |)\
|
||||
dict set lexers PY commentSymbol {#}
|
||||
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 varRegexpCommand {regexp -nocase -all -line -- {^\s*?(\w+)\s*=\s*(.+)($)} $line match varName varValue lineEnd}
|
||||
|
||||
#--------------------------------------------------
|
||||
# Ruby
|
||||
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 procFindString {(def )\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 procFindString {(def |class )\s*?PROCNAME}
|
||||
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)
|
||||
@@ -48,4 +55,54 @@ dict set lexers YML procRegexpCommand {regexp -nocase -all -- {^\s*?- (name):\s(
|
||||
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}
|
||||
|
||||
#--------------------------------------------------
|
||||
# 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}
|
||||
|
||||
49
lib/menu.tcl
49
lib/menu.tcl
@@ -9,7 +9,7 @@
|
||||
######################################################
|
||||
|
||||
proc GetFileMenu {m} {
|
||||
global activeProject
|
||||
global activeProject cfgVariables
|
||||
$m add command -label [::msgcat::mc "New file"] -command Editor::New\
|
||||
-accelerator "Ctrl+N"
|
||||
$m add command -label [::msgcat::mc "Open file"] -accelerator "Ctrl+O" -command {
|
||||
@@ -22,10 +22,22 @@ proc GetFileMenu {m} {
|
||||
-accelerator "Ctrl+S"
|
||||
$m add command -label [::msgcat::mc "Close file"] -command {FileOper::Close}\
|
||||
-accelerator "Ctrl+w"
|
||||
$m add command -label [::msgcat::mc "Open folder"] -accelerator "Ctrl+K" -command {
|
||||
$m add command -label [::msgcat::mc "Close all"] -command {FileOper::CloseAll}
|
||||
|
||||
$m add separator
|
||||
menu $m.openRecent
|
||||
$m add cascade -label [::msgcat::mc "Open recent"] -menu $m.openRecent
|
||||
foreach item $cfgVariables(recentFolder) {
|
||||
$m.openRecent add command -label $item -command [list OpenRecentProject $item]
|
||||
}
|
||||
|
||||
$m add separator
|
||||
|
||||
$m add command -label [::msgcat::mc "Open folder"] -accelerator "Alt+K" -command {
|
||||
set folderPath [FileOper::OpenFolderDialog]
|
||||
if {$folderPath != ""} {
|
||||
set activeProject $folderPath
|
||||
# set activeProject $folderPath
|
||||
SetActiveProject $folderPath
|
||||
FileOper::ReadFolder $folderPath
|
||||
ReadFilesFromDirectory $folderPath $folderPath
|
||||
}
|
||||
@@ -64,20 +76,35 @@ proc GetEditMenu {m} {
|
||||
$m add separator
|
||||
$m add command -label [::msgcat::mc "Insert image"] -accelerator "Ctrl+I"\
|
||||
-command ImageBase64Encode
|
||||
|
||||
$m add separator
|
||||
$m add command -label [::msgcat::mc "Settings"] -command Settings
|
||||
}
|
||||
|
||||
proc GetViewMenu {m} {
|
||||
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
|
||||
$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.panelSide add radiobutton -label [::msgcat::mc "Right"] -variable cfgVariables(filesPanelPlace) -value right
|
||||
$m add checkbutton -label [::msgcat::mc "Show the Menu"] -command ViewMenuBar \
|
||||
-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 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
|
||||
$m add cascade -label [::msgcat::mc "Editors word wrapping"] -menu $m.editorWrap
|
||||
@@ -99,8 +126,14 @@ proc GetViewMenu {m} {
|
||||
-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} {
|
||||
$m add command -label [::msgcat::mc "About ..."] -command Help::About
|
||||
}
|
||||
|
||||
proc PopupMenu {x y} {
|
||||
tk_popup .popup $x $y
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
# Author: Roman Schaller <r.schaller@gmx.ch> #
|
||||
###########################################################
|
||||
|
||||
::msgcat::mcset de "About ..." "<EFBFBD>ber ..."
|
||||
::msgcat::mcset de "Add to project" "Zu Projekt hinzuf<EFBFBD>gen"
|
||||
::msgcat::mcset de "About ..." "Über ..."
|
||||
::msgcat::mcset de "Add to project" "Zu Projekt hinzufügen"
|
||||
::msgcat::mcset de "Author" "Autor"
|
||||
::msgcat::mcset de "Text autoformat" "Text autoformat"
|
||||
::msgcat::mcset de "Cancel" "Abbrechen"
|
||||
@@ -29,9 +29,9 @@
|
||||
::msgcat::mcset de "Cut into clipboard" "In Zwischenablage ausschneiden"
|
||||
::msgcat::mcset de "CVS commit"
|
||||
::msgcat::mcset de "CVS update"
|
||||
::msgcat::mcset de "Delete" "L<EFBFBD>schen"
|
||||
::msgcat::mcset de "Delete backup files" "Backup-Dateien l<EFBFBD>schen"
|
||||
::msgcat::mcset de "Delete project" "Projekt l<EFBFBD>schen"
|
||||
::msgcat::mcset de "Delete" "Löschen"
|
||||
::msgcat::mcset de "Delete backup files" "Backup-Dateien löschen"
|
||||
::msgcat::mcset de "Delete project" "Projekt löschen"
|
||||
::msgcat::mcset de "Delete from project" "Von Projekt entfernen"
|
||||
::msgcat::mcset de "Docs dir" "Dok Verzeichnis"
|
||||
::msgcat::mcset de "Don't selected file"
|
||||
@@ -42,10 +42,10 @@
|
||||
::msgcat::mcset de "Error open URL"
|
||||
::msgcat::mcset de "Exit" "Beenden"
|
||||
::msgcat::mcset de "File" "Datei"
|
||||
::msgcat::mcset de "File already exists. Overwrite?" "Datei besteht bereits. <EFBFBD>berschreiben?"
|
||||
::msgcat::mcset de "File already exists. Overwrite?" "Datei besteht bereits. Überschreiben?"
|
||||
::msgcat::mcset de "File modify" "Datei bearbeiten"
|
||||
::msgcat::mcset de "File was modifyed. Close?" "Datei wurde ge<EFBFBD>ndert. Trotzdem schliessen?"
|
||||
::msgcat::mcset de "File was modifyed. Save?" "Datei wurde ge<EFBFBD>ndert. Jetzt speichern?"
|
||||
::msgcat::mcset de "File was modifyed. Close?" "Datei wurde geändert. Trotzdem schliessen?"
|
||||
::msgcat::mcset de "File was modifyed. Save?" "Datei wurde geändert. Jetzt speichern?"
|
||||
::msgcat::mcset de "File saved" "Datei gespeichert"
|
||||
::msgcat::mcset de "Find" "Suchen"
|
||||
::msgcat::mcset de "Font normal" "Schrift normal"
|
||||
@@ -55,15 +55,15 @@
|
||||
::msgcat::mcset de "Home dir" "Home Verzeichnis"
|
||||
::msgcat::mcset de "Home page" "Homepage"
|
||||
::msgcat::mcset de "Image dir" "Image Verzeichnis"
|
||||
::msgcat::mcset de "Insert" "Einf<EFBFBD>gen"
|
||||
::msgcat::mcset de "Insert" "Einfügen"
|
||||
::msgcat::mcset de "Interface language" "Interface Sprache"
|
||||
::msgcat::mcset de "Install Tcl/Tk Project Manager" "Tcl/Tk Project Manager installieren"
|
||||
::msgcat::mcset de "Line number" "Zeilennummer"
|
||||
::msgcat::mcset de "Make RPM" "RPM erstellen"
|
||||
::msgcat::mcset de "Make archive" "Archiv erstellen"
|
||||
::msgcat::mcset de "Make backup files" "Backup-Dateien erstellen"
|
||||
::msgcat::mcset de "Must be one file select!" "Eine Datei muss ausgew<EFBFBD>hlt sein!"
|
||||
::msgcat::mcset de "Must be one or two file select!" "Eine oder zwei Dateien m<EFBFBD>ssen ausgew<EFBFBD>hlt sein!"
|
||||
::msgcat::mcset de "Must be one file select!" "Eine Datei muss ausgewählt sein!"
|
||||
::msgcat::mcset de "Must be one or two file select!" "Eine oder zwei Dateien müssen ausgewählt sein!"
|
||||
::msgcat::mcset de "Modifying the Registry..."
|
||||
::msgcat::mcset de "Modules" "Module"
|
||||
::msgcat::mcset de "New" "Neu"
|
||||
@@ -71,19 +71,19 @@
|
||||
::msgcat::mcset de "New project" "Neues Projekt"
|
||||
::msgcat::mcset de "Not implemented yet" "Noch nicht implementiert"
|
||||
::msgcat::mcset de "Not found active project" "Kein aktives Projekt gefunden"
|
||||
::msgcat::mcset de "Open" "<EFBFBD>ffnen"
|
||||
::msgcat::mcset de "Open file" "Datei <EFBFBD>ffnen"
|
||||
::msgcat::mcset de "Open project" "Projekt <EFBFBD>ffnen"
|
||||
::msgcat::mcset de "Opened file in progress" "Ge<EFBFBD>ffnete Datei in Bearbeitung"
|
||||
::msgcat::mcset de "Overwrite" "<EFBFBD>berschreiben"
|
||||
::msgcat::mcset de "Paste" "Einf<EFBFBD>gen"
|
||||
::msgcat::mcset de "Paste from clipboard" "Von Zwischenablage einf<EFBFBD>gen"
|
||||
::msgcat::mcset de "Open" "Öffnen"
|
||||
::msgcat::mcset de "Open file" "Datei öffnen"
|
||||
::msgcat::mcset de "Open project" "Projekt öffnen"
|
||||
::msgcat::mcset de "Opened file in progress" "Geöffnete Datei in Bearbeitung"
|
||||
::msgcat::mcset de "Overwrite" "Überschreiben"
|
||||
::msgcat::mcset de "Paste" "Einfügen"
|
||||
::msgcat::mcset de "Paste from clipboard" "Von Zwischenablage einfügen"
|
||||
::msgcat::mcset de "Print ..." "Drucken ..."
|
||||
::msgcat::mcset de "Print" "Drucken"
|
||||
::msgcat::mcset de "Print command" "Druck-Befehl"
|
||||
::msgcat::mcset de "Print selected text" "Markierter Text drucken"
|
||||
::msgcat::mcset de "Program finished successfully" "Programm wurde erfolgreich beendet"
|
||||
::msgcat::mcset de "Program failed" "Ausf<EFBFBD>hrung fehlgeschlagen"
|
||||
::msgcat::mcset de "Program failed" "Ausführung fehlgeschlagen"
|
||||
::msgcat::mcset de "Programm output" "Programm Ausgabe"
|
||||
::msgcat::mcset de "Project" "Projekt"
|
||||
::msgcat::mcset de "Projects" "Projekte"
|
||||
@@ -101,8 +101,8 @@
|
||||
::msgcat::mcset de "Release"
|
||||
::msgcat::mcset de "RPM dir" "RPM Verzeichnis"
|
||||
::msgcat::mcset de "RPM file mask" "RPM Datei Maske"
|
||||
::msgcat::mcset de "Run" "Ausf<EFBFBD>hren"
|
||||
::msgcat::mcset de "Running project" "Projekt ausf<EFBFBD>hren"
|
||||
::msgcat::mcset de "Run" "Ausführen"
|
||||
::msgcat::mcset de "Running project" "Projekt ausführen"
|
||||
::msgcat::mcset de "Running file"
|
||||
::msgcat::mcset de "Save" "Speichern"
|
||||
::msgcat::mcset de "Save as" "Speichern unter"
|
||||
@@ -110,9 +110,9 @@
|
||||
::msgcat::mcset de "Save file as" "Datei speichern unter"
|
||||
::msgcat::mcset de "Save all" "Alles speichern"
|
||||
::msgcat::mcset de "Search" "Suchen"
|
||||
::msgcat::mcset de "Select" "Ausw<EFBFBD>hlen"
|
||||
::msgcat::mcset de "Select directory" "Verzeichnis ausw<EFBFBD>hlen"
|
||||
::msgcat::mcset de "Selected directory" "Ausgew<EFBFBD>hltes Verzeichnis"
|
||||
::msgcat::mcset de "Select" "Auswählen"
|
||||
::msgcat::mcset de "Select directory" "Verzeichnis auswählen"
|
||||
::msgcat::mcset de "Selected directory" "Ausgewähltes Verzeichnis"
|
||||
::msgcat::mcset de "Settings" "Einstellungen"
|
||||
::msgcat::mcset de "Show backup files" "Backup-Dateien anzeigen"
|
||||
::msgcat::mcset de "Interpretator" "Interpreter"
|
||||
@@ -120,7 +120,7 @@
|
||||
::msgcat::mcset de "TGZ file mask" "TGZ Datei Maske"
|
||||
::msgcat::mcset de "Thanks" "Danksagung"
|
||||
::msgcat::mcset de "Toolbar" "Symbolleiste"
|
||||
::msgcat::mcset de "Undo" "R<EFBFBD>ckg<EFBFBD>ngig"
|
||||
::msgcat::mcset de "Undo" "Rückgängig"
|
||||
::msgcat::mcset de "Update"
|
||||
::msgcat::mcset de "Version"
|
||||
::msgcat::mcset de "View" "Ansicht"
|
||||
@@ -130,4 +130,3 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -59,12 +59,16 @@
|
||||
::msgcat::mcset en "Editor font bold"
|
||||
::msgcat::mcset en "Error open URL"
|
||||
::msgcat::mcset en "Editor settings"
|
||||
::msgcat::mcset en "Enter command for execute file"
|
||||
::msgcat::mcset en "Exit"
|
||||
::msgcat::mcset en "File"
|
||||
::msgcat::mcset en "File already exists. Overwrite?"
|
||||
::msgcat::mcset en "File modify"
|
||||
::msgcat::mcset en "File was modifyed. Close?"
|
||||
::msgcat::mcset en "File was modifyed. Save?"
|
||||
::msgcat::mcset en "The file looks like a binary file. Open anyway?"
|
||||
::msgcat::mcset en "The file looks like a image. Support not implemented yet."
|
||||
::msgcat::mcset en "The file size to big. Open anyway?"
|
||||
::msgcat::mcset en "File saved"
|
||||
::msgcat::mcset en "Files"
|
||||
::msgcat::mcset en "Find"
|
||||
@@ -108,6 +112,7 @@
|
||||
::msgcat::mcset en "Open file"
|
||||
::msgcat::mcset en "Open project"
|
||||
::msgcat::mcset en "Opened file in progress"
|
||||
::msgcat::mcset en "Open recent"
|
||||
::msgcat::mcset en "Operators"
|
||||
::msgcat::mcset en "Overwrite"
|
||||
::msgcat::mcset en "Parameters"
|
||||
@@ -181,7 +186,3 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -27,11 +27,12 @@
|
||||
::msgcat::mcset ru "Close" "Закрыть"
|
||||
::msgcat::mcset ru "Close all" "Закрыть все"
|
||||
::msgcat::mcset ru "Close file" "Закрыть файл"
|
||||
::msgcat::mcset ru "Close folder" "Закрыть папку"
|
||||
::msgcat::mcset ru "Close folder" "Закрыть каталог"
|
||||
::msgcat::mcset ru "Close Project Manager?" "Выйти из программы?"
|
||||
::msgcat::mcset ru "Comments" "Коментарии"
|
||||
::msgcat::mcset ru "Comment selected" "Закоментировать"
|
||||
::msgcat::mcset ru "Uncomment selected" "Раскоментировать"
|
||||
::msgcat::mcset ru "Clone repository" "Клонировать репозиторий"
|
||||
::msgcat::mcset ru "Column" "Столбец"
|
||||
::msgcat::mcset ru "Commit" "Коммита"
|
||||
::msgcat::mcset ru "Commit description" "Описание коммита"
|
||||
@@ -76,6 +77,7 @@
|
||||
::msgcat::mcset ru "Editor settings" "Настройки редактора"
|
||||
::msgcat::mcset ru "Editor helpers" "Подсказки при вводе"
|
||||
::msgcat::mcset ru "Encode" "Перекодировка"
|
||||
::msgcat::mcset ru "Enter command for execute file" "Введите команду для запуска текущего файла"
|
||||
::msgcat::mcset ru "Authorisation required" "Требуется авторизация"
|
||||
::msgcat::mcset ru "Error open URL" "Ошибка открытия URL"
|
||||
::msgcat::mcset ru "Exit" "Выход"
|
||||
@@ -87,6 +89,9 @@
|
||||
::msgcat::mcset ru "File was modifyed" "Файл был изменен"
|
||||
::msgcat::mcset ru "File modify" "Файл изменен"
|
||||
::msgcat::mcset ru "File saved" "Файл сохранен"
|
||||
::msgcat::mcset ru "The file looks like a binary file. Open anyway?" "Файл похож на двоичный. Открыть все равно?"
|
||||
::msgcat::mcset ru "The file looks like a image. Support not implemented yet." "Файл выглядит как изображение. Поддержка пока не реализована."
|
||||
::msgcat::mcset ru "The file size to big. Open anyway?" "Файл большого размера. Открыть все равно?"
|
||||
::msgcat::mcset ru "Find" "Найти"
|
||||
::msgcat::mcset ru "Found" "Найдено"
|
||||
::msgcat::mcset ru "Find in files" "Найти в файлах"
|
||||
@@ -103,6 +108,7 @@
|
||||
::msgcat::mcset ru "Image dir" "Каталог изображений"
|
||||
::msgcat::mcset ru "Indent foreground" "Подсветка отступа"
|
||||
::msgcat::mcset ru "Indent background" "Подсветка отступа"
|
||||
::msgcat::mcset ru "Init repository" "Создать репозиторий"
|
||||
::msgcat::mcset ru "Insert" "Вставка"
|
||||
::msgcat::mcset ru "In" "В"
|
||||
::msgcat::mcset ru "Insert image" "Вставить изображение"
|
||||
@@ -122,6 +128,7 @@
|
||||
::msgcat::mcset ru "Matches" "Совпадений"
|
||||
::msgcat::mcset ru "Modules" "Модули"
|
||||
::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 or two file select!" "Вы должны выбрать один или два файла"
|
||||
::msgcat::mcset ru "Network" "Сеть"
|
||||
@@ -135,9 +142,10 @@
|
||||
::msgcat::mcset ru "No" "Нет"
|
||||
::msgcat::mcset ru "Open" "Открыть"
|
||||
::msgcat::mcset ru "Open file" "Открыть файл"
|
||||
::msgcat::mcset ru "Open folder" "Открыть папку"
|
||||
::msgcat::mcset ru "Open folder" "Открыть каталог"
|
||||
::msgcat::mcset ru "Open project" "Открыть проект"
|
||||
::msgcat::mcset ru "Opened file in progress" "Открытие файла"
|
||||
::msgcat::mcset ru "Open recent" "Открыть недавнее"
|
||||
::msgcat::mcset ru "Operators" "Операторы"
|
||||
::msgcat::mcset ru "Overwrite" "Замена"
|
||||
::msgcat::mcset ru "Parameters" "Параметры"
|
||||
@@ -192,7 +200,8 @@
|
||||
::msgcat::mcset ru "Select directory" "Выбор директории"
|
||||
::msgcat::mcset ru "Selected directory" "Директория"
|
||||
::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 the Menu" "Показывать меню"
|
||||
::msgcat::mcset ru "Show dot files" "Показывать скрытые файлы"
|
||||
@@ -213,7 +222,7 @@
|
||||
::msgcat::mcset ru "Variables" "Переменные"
|
||||
::msgcat::mcset ru "Version" "Версия"
|
||||
::msgcat::mcset ru "View" "Вид"
|
||||
::msgcat::mcset ru "View panel" "Показывать дополнительную панель"
|
||||
::msgcat::mcset ru "View panel" "Показывать панель"
|
||||
::msgcat::mcset ru "Panel side" "Расположение дополнительной панели"
|
||||
::msgcat::mcset ru "Left" "Слева"
|
||||
::msgcat::mcset ru "Right" "Справа"
|
||||
|
||||
@@ -13,7 +13,9 @@ namespace eval NB {
|
||||
proc InsertItem {nb item type} {
|
||||
switch $type {
|
||||
file {
|
||||
regsub -all {\.|/|\\|\s} $item "_" itemName
|
||||
set item [string tolower $item]
|
||||
regsub -all {\.|/|\\|\s|:} $item "_" itemName
|
||||
# puts "$item -> $itemName"
|
||||
if [winfo exists $nb.$itemName] {
|
||||
set fm $nb.$itemName
|
||||
} else {
|
||||
@@ -38,8 +40,13 @@ namespace eval NB {
|
||||
}
|
||||
|
||||
proc PressTab {w x y} {
|
||||
global tree
|
||||
if {[$w identify tab $x $y] ne ""} {
|
||||
$w select [$w identify tab $x $y]
|
||||
set nbItem [string trimleft [$w select] "$w."]
|
||||
# puts $nbItem
|
||||
append treeItemName "file" "::" $nbItem
|
||||
Tree::SelectItem $treeItemName
|
||||
} else {
|
||||
return
|
||||
}
|
||||
@@ -54,7 +61,11 @@ namespace eval NB {
|
||||
}
|
||||
|
||||
proc NextTab {w step} {
|
||||
global tree
|
||||
set i [expr [$w index end] - 1]
|
||||
if {[$w select] eq ""} {
|
||||
return
|
||||
}
|
||||
set nbItemIndex [$w index [$w select]]
|
||||
if {$nbItemIndex eq 0 && $step eq "-1"} {
|
||||
$w select $i
|
||||
@@ -63,7 +74,14 @@ namespace eval NB {
|
||||
} else {
|
||||
$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
|
||||
focus -force $txt.t
|
||||
if [winfo exists $txt] {
|
||||
focus -force $txt.t
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,39 +19,90 @@ proc Quit {} {
|
||||
}
|
||||
}
|
||||
|
||||
proc ViewFilesTree {} {
|
||||
proc ViewFilesTree {{hotkey "false"}} {
|
||||
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
|
||||
set cfgVariables(filesPanelShow) false
|
||||
} else {
|
||||
switch $cfgVariables(filesPanelPlace) {
|
||||
"left" {
|
||||
"left" {
|
||||
.frmBody.panel insert 0 .frmBody.frmTree
|
||||
}
|
||||
"right" {
|
||||
if {[lsearch -exact [.frmBody.panel panes] .frmBody.frmTree] != -1} {
|
||||
.frmBody.panel forget .frmBody.frmTree
|
||||
}
|
||||
.frmBody.panel add .frmBody.frmTree
|
||||
}
|
||||
default {
|
||||
.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
|
||||
proc ViewLineNumbers {} {
|
||||
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] {
|
||||
$node.frmText.t configure -linemap $cfgVariables(lineNumberShow)
|
||||
if [winfo exists $node.frmText.t] {
|
||||
$node.frmText.t configure -linemap $cfgVariables(lineNumberShow)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +115,69 @@ proc ViewHelper {helper} {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
proc Del {} {
|
||||
return
|
||||
}
|
||||
@@ -73,16 +187,16 @@ proc YScrollCommand {txt canv} {
|
||||
$canv yview"
|
||||
}
|
||||
|
||||
proc ResetModifiedFlag {w} {
|
||||
global modified nbEditor
|
||||
proc ResetModifiedFlag {w nbEditor} {
|
||||
global modified
|
||||
$w.frmText.t edit modified false
|
||||
set modified($w) "false"
|
||||
set lbl [string trimleft [$nbEditor tab $w -text] "* "]
|
||||
# puts "ResetModifiedFlag: $lbl"
|
||||
$nbEditor tab $w -text $lbl
|
||||
}
|
||||
proc SetModifiedFlag {w} {
|
||||
global modified nbEditor
|
||||
proc SetModifiedFlag {w nbEditor} {
|
||||
global modified
|
||||
#$w.frmText.t edit modified false
|
||||
set modified($w) "true"
|
||||
set lbl [$nbEditor tab $w -text]
|
||||
@@ -115,12 +229,27 @@ proc ImageBase64Encode {} {
|
||||
}
|
||||
}
|
||||
proc FindImage {ext} {
|
||||
set imageType {
|
||||
PNG
|
||||
JPG
|
||||
JPEG
|
||||
WEBP
|
||||
GIF
|
||||
TIFF
|
||||
JP2
|
||||
ICO
|
||||
XPM
|
||||
SVG
|
||||
}
|
||||
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"
|
||||
return $img
|
||||
}
|
||||
}
|
||||
if {[lsearch -exact -nocase $imageType $ext] != -1} {
|
||||
return image_16x12
|
||||
}
|
||||
}
|
||||
|
||||
namespace eval Help {
|
||||
@@ -148,17 +277,17 @@ namespace eval Help {
|
||||
proc SearchVariable {txt} {
|
||||
global fileStructure project variables
|
||||
set varName [$txt get {insert wordstart} {insert wordend}]
|
||||
puts ">>>$varName<<<"
|
||||
# puts ">>>$varName<<<"
|
||||
if {[info exists project] == 0} {return}
|
||||
foreach f [array names project] {
|
||||
puts "--$f"
|
||||
puts "----"
|
||||
# puts "--$f"
|
||||
# puts "----"
|
||||
foreach a $project($f) {
|
||||
puts "-----$variables($a)"
|
||||
# puts "-----$variables($a)"
|
||||
foreach b $variables($a) {
|
||||
puts "------$b -- [lindex $b 0]"
|
||||
# puts "------$b -- [lindex $b 0]"
|
||||
if {$varName eq [lindex $b 0]} {
|
||||
puts "УРААААААА $varName = $b в файле $a \n\t [lindex $b 0]"
|
||||
# puts "УРААААААА $varName = $b в файле $a \n\t [lindex $b 0]"
|
||||
# FindVariablesDialog $txt "$varName: \[...\][file tail $a]"
|
||||
lappend l [list $varName [lindex $b 1] $a]
|
||||
}
|
||||
@@ -226,7 +355,7 @@ proc FindVariablesDialog {txt args} {
|
||||
foreach { word } $args {
|
||||
foreach lst $word {
|
||||
# set l [split $lst " "]
|
||||
puts "[lindex $lst 0] -[lindex $lst 1] -[lindex $lst 2]"
|
||||
# puts "[lindex $lst 0] -[lindex $lst 1] -[lindex $lst 2]"
|
||||
# lappend l2 [lindex $l 0] [lindex $l 1] [file tail [lindex $l 2]]
|
||||
# $win.lBox insert {} end -values $lst -text {1 2 3}
|
||||
$win.lBox insert end "[lindex $lst 0] > [lindex $lst 1] > [lindex $lst 2]\n"
|
||||
@@ -312,7 +441,7 @@ proc SearchStringInFolder {str} {
|
||||
if {$tcl_platform(platform) == "windows"} {
|
||||
} elseif {$tcl_platform(platform) == "mac"} {
|
||||
} elseif {$tcl_platform(platform) == "unix"} {
|
||||
puts "$cfgVariables(searchCommand) $cfgVariables(searchCommandOptions) $str $activeProject"
|
||||
# puts "$cfgVariables(searchCommand) $cfgVariables(searchCommandOptions) $str $activeProject"
|
||||
# Составляем строку (точнее список) для запуска команды
|
||||
set cmd exec
|
||||
regsub -all {\[} $str {\\[} str
|
||||
@@ -397,7 +526,7 @@ proc FindInFilesDialog {txt {args ""}} {
|
||||
}
|
||||
set win .find
|
||||
|
||||
if { [winfo exists $win] } { destroy $win }
|
||||
if { [winfo exists $win] } { destroy $win; return false}
|
||||
toplevel $win
|
||||
wm transient $win .
|
||||
wm overrideredirect $win 1
|
||||
@@ -440,15 +569,15 @@ proc FindInFilesDialog {txt {args ""}} {
|
||||
|
||||
grid $win.entryFind -row 0 -column 0 -sticky nsew
|
||||
grid $win.entryReplace -row 1 -column 0 -sticky nsew
|
||||
grid $win.bForward -row 0 -column 1 -sticky e
|
||||
grid $win.bDoneAll -row 1 -column 1 -sticky e
|
||||
grid $win.bForward -row 0 -column 2 -sticky e -columnspan 2
|
||||
grid $win.bDoneAll -row 1 -column 2 -sticky e -columnspan 2
|
||||
# grid $win.chkRegexp -row 2 -column 0 -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.v -row 3 -column 2 -sticky nsew
|
||||
grid $win.h -row 4 -column 0 -sticky nsew
|
||||
grid $win.lBox -row 3 -column 0 -columnspan 3 -sticky nsew
|
||||
grid $win.v -row 3 -column 3 -sticky nsew
|
||||
grid $win.h -row 4 -column 0 -sticky nsew -columnspan 4
|
||||
grid columnconfigure $win 0 -weight 1
|
||||
grid rowconfigure $win 0 -weight 1
|
||||
|
||||
@@ -525,4 +654,326 @@ proc FindInFilesDialog {txt {args ""}} {
|
||||
focus -force $win.entryFind
|
||||
}
|
||||
# $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]"
|
||||
}
|
||||
|
||||
# Added recently opened folder into menu "File"->"Open recent"
|
||||
proc OpenRecentProject {path} {
|
||||
SetActiveProject $path
|
||||
FileOper::ReadFolder $path
|
||||
ReadFilesFromDirectory $path $path
|
||||
}
|
||||
|
||||
proc AddRecentEditedFolder {path} {
|
||||
global cfgVariables
|
||||
if {$path == ""} {
|
||||
return
|
||||
}
|
||||
if {[info exists cfgVariables(recentFolder)] == 0} {
|
||||
set cfgVariables(recentFolder) [list $path]
|
||||
} else {
|
||||
# check if path already in a list
|
||||
foreach item $cfgVariables(recentFolder) {
|
||||
if {$item == $path} {
|
||||
return
|
||||
}
|
||||
}
|
||||
# check list length, and remove 0 element if length is 10
|
||||
if {[llength $cfgVariables(recentFolder)] == 10} {
|
||||
# lremove $cfgVariables(recentFolder) 0; # tcl 8.7
|
||||
set cfgVariables(recentFolder) [lrange $cfgVariables(recentFolder) 1 end]
|
||||
}
|
||||
lappend cfgVariables(recentFolder) $path
|
||||
}
|
||||
.frmMenu.mnuFile.m.openRecent add command -label $path -command [list OpenRecentProject $path]
|
||||
}
|
||||
|
||||
# ================== OLD ====================
|
||||
proc launchBrowser {url} {
|
||||
global tcl_platform
|
||||
if {$tcl_platform(platform) eq "windows"} {
|
||||
set command [list {*}[auto_execok start] {}]
|
||||
if {[file isdirectory $url]} {
|
||||
set url [file nativename [file join $url .]]
|
||||
}
|
||||
} elseif {$tcl_platform(os) eq "Darwin"} {
|
||||
set command [list open]
|
||||
} else {
|
||||
set command [list xdg-open]
|
||||
}
|
||||
exec {*}$command $url &
|
||||
}
|
||||
## EXEC EXTERNAL BROWSER AND GOTO URL ##
|
||||
proc GoToURL {url} {
|
||||
global env tcl_platform
|
||||
if {$tcl_platform(platform) == "windows"} {
|
||||
set pipe [open "|iexplore $url" "r"]
|
||||
} elseif {$tcl_platform(platform) == "mac"} {
|
||||
set pipe [open "|iexplore $url" "r"]
|
||||
} elseif {$tcl_platform(platform) == "unix"} {
|
||||
#$env(BROWSER)
|
||||
#set pipe [open "|$env(BROWSER) $url" "r"]
|
||||
launchBrowser $url
|
||||
return
|
||||
}
|
||||
fileevent $pipe readable
|
||||
fconfigure $pipe -buffering none -blocking no
|
||||
}
|
||||
## MAKING TAR ARCHIVE ##
|
||||
proc MakeTGZ {} {
|
||||
global activeProject tgzDir tgzNamed workDir projDir env tcl_platform
|
||||
if {$activeProject == ""} {
|
||||
set answer [tk_messageBox\
|
||||
-message [::msgcat::mc "Not found active project"]\
|
||||
-type ok -icon warning\
|
||||
-title [::msgcat::mc "Warning"]]
|
||||
case $answer {
|
||||
ok {return 0}
|
||||
}
|
||||
}
|
||||
FileDialog tree save_all
|
||||
set file [open [file join $workDir $activeProject.proj] r]
|
||||
while {[gets $file line]>=0} {
|
||||
scan $line "%s" keyWord
|
||||
set string [string range $line [string first "\"" $line] [string last "\"" $line]]
|
||||
set string [string trim $string "\""]
|
||||
if {$keyWord == "ProjectDirName"} {
|
||||
set dir "$string"
|
||||
}
|
||||
if {$keyWord == "ProjectVersion"} {
|
||||
set version "$string"
|
||||
}
|
||||
if {$keyWord == "ProjectRelease"} {
|
||||
set release "$string"
|
||||
}
|
||||
}
|
||||
close $file
|
||||
set res [split $tgzNamed "-"]
|
||||
set name [lindex $res 0]
|
||||
set ver [lindex $res 1]
|
||||
set rel [lindex $res 2]
|
||||
if {$name == "projectName"} {
|
||||
set name $activeProject
|
||||
}
|
||||
if {$ver == "version"} {
|
||||
append name "-$version"
|
||||
}
|
||||
if {$rel == "release"} {
|
||||
append name "-$release"
|
||||
}
|
||||
# multiplatform featuring #
|
||||
if {$tcl_platform(platform) == "windows"} {
|
||||
append name ".zip"
|
||||
} elseif {$tcl_platform(platform) == "mac"} {
|
||||
append name ".zip"
|
||||
} elseif {$tcl_platform(platform) == "unix"} {
|
||||
append name ".tar.gz"
|
||||
}
|
||||
catch {cd $projDir} res
|
||||
if {[file exists [file join $tgzDir $name]] == 1} {
|
||||
set answer [tk_messageBox\
|
||||
-message "[::msgcat::mc "File already exists. Overwrite?"] \"$name\" ?"\
|
||||
-type yesno -icon question -default yes\
|
||||
-title [::msgcat::mc "Question"]]
|
||||
case $answer {
|
||||
yes {file delete [file join $tgzDir $name]}
|
||||
no {return 0}
|
||||
}
|
||||
}
|
||||
# multiplatform featuring #
|
||||
if {$tcl_platform(platform) == "windows"} {
|
||||
catch [exec pkzip -r -p [file join $tgzDir $name] [file join $activeProject *]] err
|
||||
} elseif {$tcl_platform(platform) == "mac"} {
|
||||
catch [exec zip -c [file join $tgzDir $name] $activeProject] err
|
||||
} elseif {$tcl_platform(platform) == "unix"} {
|
||||
catch [exec tar -czvf [file join $tgzDir $name] $activeProject] err
|
||||
}
|
||||
# message dialog #
|
||||
set msg "[::msgcat::mc "Archive created in"] [file join $tgzDir $name]"
|
||||
set icon info
|
||||
set answer [tk_messageBox\
|
||||
-message "$msg"\
|
||||
-type ok -icon $icon]
|
||||
case $answer {
|
||||
ok {return 0}
|
||||
}
|
||||
}
|
||||
|
||||
## MAKE PROJ PROCEDURE (RUNNING PROJECT) ##
|
||||
proc Execute {filePath w activeEditor} {
|
||||
global activeProject cfgVariables
|
||||
if {$activeProject == ""} {
|
||||
set answer [tk_messageBox\
|
||||
-message "[::msgcat::mc "Not found active project"]"\
|
||||
-type ok -icon warning\
|
||||
-title [::msgcat::mc "Warning"]]
|
||||
case $answer {
|
||||
ok {return 0}
|
||||
}
|
||||
}
|
||||
FileOper::Save
|
||||
set file $filePath
|
||||
set action run
|
||||
# create array with file names #
|
||||
frame $w.frame -borderwidth 2 -relief ridge -background $cfgVariables(backGround)
|
||||
pack $w.frame -side top -fill both -expand true
|
||||
|
||||
|
||||
ctext $w.frame.text -yscrollcommand "$w.frame.yscroll set" \
|
||||
-bg $cfgVariables(backGround) -fg $cfgVariables(foreground) \
|
||||
-relief sunken -wrap word -highlightthickness 0 -font $cfgVariables(font)\
|
||||
-selectborderwidth 0 -selectbackground $cfgVariables(selectbg) -width 10 -height 10
|
||||
scrollbar $w.frame.yscroll -relief sunken -borderwidth {1} -width {10} -takefocus 0 \
|
||||
-command "$w.frame.text yview" -background $cfgVariables(backGround)
|
||||
Highlight::ExecuteColorized $w.frame.text
|
||||
|
||||
pack $w.frame.text -side left -fill both -expand true
|
||||
pack $w.frame.yscroll -side left -fill y
|
||||
|
||||
bind $w.frame.text <Return> [list Run $w $filePath]
|
||||
bind $w.frame.text <Control-r> [list CloseExecuteDialog $w $activeEditor]
|
||||
bind $w.frame.text <Control-Cyrillic_er> [list CloseExecuteDialog $w $activeEditor]
|
||||
# focus -force $w.frmBtn.btnOk
|
||||
# $noteBook raise $node
|
||||
# insert debug data into text widget #
|
||||
$w.frame.text tag configure bold -font $cfgVariables(fontBold)
|
||||
$w.frame.text tag configure error -font $cfgVariables(fontBold) -foreground red
|
||||
$w.frame.text tag add bold 0.0 0.end
|
||||
|
||||
$w.frame.text insert end "[::msgcat::mc "Enter command for execute file"] $filePath >\n"
|
||||
set pos [$w.frame.text index insert]
|
||||
set lineNum [lindex [split $pos "."] 0]
|
||||
$w.frame.text insert 0.0 "======================================================================================\n"
|
||||
$w.frame.text tag add bold $lineNum.0 $lineNum.end
|
||||
Highlight::ExecuteColorized $w.frame.text
|
||||
# focus -force $w.frame.text
|
||||
focus -force $w.frame.text.t
|
||||
}
|
||||
|
||||
proc CloseExecuteDialog {w activeEditor} {
|
||||
destroy $w
|
||||
focus $activeEditor.frmText.t.t
|
||||
}
|
||||
|
||||
proc Run {w filePath} {
|
||||
# Получаем индекс конца последней строки
|
||||
set endIndex [$w.frame.text index "end-1c"]; # или "end-1l lineend"
|
||||
|
||||
# Получаем индекс начала последней строки
|
||||
set startIndex [$w.frame.text index "end-1l linestart"]
|
||||
|
||||
set command [$w.frame.text get $startIndex $endIndex end]
|
||||
# Заменяем знак %f на имя текущего файла
|
||||
regsub -all "%f" $command "$filePath" fullCommand
|
||||
$w.frame.text replace $startIndex $endIndex $fullCommand
|
||||
|
||||
# $w.frame.text insert "end-4l linestart"
|
||||
cd [file dirname $filePath]
|
||||
set pipe [open "|$fullCommand 2> [file join [file dirname $filePath] errors]" "r"]
|
||||
set f [open [file join [file dirname $filePath] errors] "r"]
|
||||
set processPID [pid $pipe]
|
||||
|
||||
bind $w.frame.text <Control-c> [list SendSignal $processPID "SIGINT"]
|
||||
bind $w.frame.text <Control-z> [list SendSignal $processPID "SIGTSTP"]
|
||||
bind $w.frame.text <Control-d> [list SendSignal $processPID "SIGKILL"]
|
||||
|
||||
# set pipe [open "|$command $filePath" "r"]
|
||||
# set f [open [file join ~ tmp errors] "r"]
|
||||
fileevent $pipe readable [list DebugInfo $w.frame.text $pipe $f]
|
||||
fconfigure $pipe -buffering none -blocking no
|
||||
}
|
||||
|
||||
## INSERT DEBUG INFORMATION INTO TEXT WIDGET ##
|
||||
proc DebugInfo {widget file f} {
|
||||
$widget configure -state normal
|
||||
if {[eof $file]} {
|
||||
catch [close $file] msg
|
||||
if {$msg != ""} {
|
||||
puts $msg
|
||||
$widget insert "end-4l linestart" "[::msgcat::mc "Program failed"]: $msg\n";
|
||||
} else {
|
||||
# Highlight::ExecuteColorized $widget
|
||||
puts $msg
|
||||
$widget see "end-1l lineend"
|
||||
$widget delete "end-1l lineend" end
|
||||
# $widget insert end "\n-------------------------------------------------\n"
|
||||
# $widget insert end "[::msgcat::mc "Program finished successfully"]\n"
|
||||
}
|
||||
Highlight::ExecuteColorized $widget
|
||||
# close $f
|
||||
} else {
|
||||
# Highlight::ExecuteColorized $widget
|
||||
$widget insert "end-4l linestart" "[read $file]"
|
||||
}
|
||||
while {[gets $f line]>=0} {
|
||||
Highlight::ExecuteColorized $widget
|
||||
$widget insert "end-4l linestart" "$line\n"
|
||||
# puts $line
|
||||
}
|
||||
# close $f
|
||||
$widget see end
|
||||
$widget tag add error 0.0 0.end
|
||||
# $widget configure -state disabled
|
||||
}
|
||||
|
||||
# Функция для отправки сигнала процессу
|
||||
proc SendSignal {pid signal} {
|
||||
global tcl_platform
|
||||
|
||||
if {$tcl_platform(platform) eq "unix"} {
|
||||
# На Unix-системах
|
||||
switch -- $signal {
|
||||
"SIGINT" { exec kill -INT $pid } ; # Ctrl+C
|
||||
"SIGTERM" { exec kill -TERM $pid } ; # Завершение
|
||||
"SIGTSTP" { exec kill -TSTP $pid } ; # Ctrl+Z (приостановка)
|
||||
"SIGKILL" { exec kill -KILL $pid } ; # Принудительное завершение
|
||||
}
|
||||
} else {
|
||||
# На Windows
|
||||
switch -- $signal {
|
||||
"SIGINT" - "SIGTERM" {
|
||||
# Используем taskkill для завершения
|
||||
catch {exec taskkill /PID $pid /T}
|
||||
}
|
||||
"SIGKILL" {
|
||||
# Принудительное завершение на Windows
|
||||
catch {exec taskkill /PID $pid /T /F}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Правка файла настроек
|
||||
proc Settings {} {
|
||||
global dir
|
||||
|
||||
FileOper::Edit [file join $dir(cfg) projman.ini]
|
||||
# Config::read $dir(cfg)
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#
|
||||
######################################################
|
||||
package require fileutil
|
||||
package require Thread
|
||||
# package require Thread
|
||||
|
||||
# TCL procedure
|
||||
|
||||
@@ -20,7 +20,7 @@ proc GetVariablesFromFile {fileName} {
|
||||
set varList ""
|
||||
set params ""
|
||||
set varsBegin false
|
||||
puts $fileName
|
||||
# puts $fileName
|
||||
set f [open "$fileName" r]
|
||||
if {[dict exists $lexers $fileType] == 0} {return}
|
||||
while {[gets $f line] >=0 } {
|
||||
@@ -32,7 +32,7 @@ proc GetVariablesFromFile {fileName} {
|
||||
set indentSize 0
|
||||
}
|
||||
set varsBegin true
|
||||
puts "====== $varsBegin $indentSize"
|
||||
# puts "$varsBegin $indentSize"
|
||||
continue
|
||||
# lappend varList [list $varName $varValue]
|
||||
}
|
||||
@@ -41,13 +41,13 @@ proc GetVariablesFromFile {fileName} {
|
||||
set l [GetVarFromLine $line $fileType]
|
||||
if {$line eq ""} {
|
||||
set varsBegin false
|
||||
puts "====== $varsBegin $indentSize [lindex $l 3]"
|
||||
# puts "$varsBegin $indentSize [lindex $l 3]"
|
||||
continue
|
||||
}
|
||||
if {[lindex $l 3] ne ""} {
|
||||
if [expr [lindex $l 3] <= $indentSize] {
|
||||
set varsBegin false
|
||||
puts "====== $varsBegin $indentSize >[lindex $l 3]<"
|
||||
# puts "$varsBegin $indentSize >[lindex $l 3]<"
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -79,7 +79,7 @@ proc GetVarFromLine {line fileType} {
|
||||
set varType ""
|
||||
}
|
||||
set indentLength [string length $indent]
|
||||
puts "variable: $varName, value: $varValue, type: $varType, indent: >$indent< $indentLength"
|
||||
# puts "variable: $varName, value: $varValue, type: $varType, indent: >$indent< $indentLength"
|
||||
return [list $varName $varValue $varType $indentLength]
|
||||
}
|
||||
}
|
||||
@@ -90,7 +90,7 @@ proc GetVariablesFromVarFile {fileName} {
|
||||
set procList ""
|
||||
set varList ""
|
||||
set params ""
|
||||
puts $fileName
|
||||
# puts $fileName
|
||||
set f [open "$fileName" r]
|
||||
if {[dict exists $lexers $fileType] == 0} {return}
|
||||
while {[gets $f line] >=0 } {
|
||||
@@ -122,7 +122,7 @@ proc ReadFilesFromDirectory {directory root {type ""}} {
|
||||
return ""
|
||||
}
|
||||
foreach fileName [glob -nocomplain *] {
|
||||
puts "Find file: $fileName [lsearch -exact -nocase $l $fileName]"
|
||||
# puts "Find file: $fileName [lsearch -exact -nocase $l $fileName]"
|
||||
if {[lsearch -exact $l $fileName] != -1 && [file isdirectory [file join $root $directory $fileName]] == 1} {
|
||||
# puts "--- $root $fileName"
|
||||
ReadFilesFromDirectory [file join $directory $fileName] $root "var"
|
||||
@@ -141,6 +141,10 @@ proc ReadFilesFromDirectory {directory root {type ""}} {
|
||||
while {[gets $f line] >= 0} {
|
||||
if [regexp -nocase -all -- {^\s*inventory\s*=\s*(\.\/|)(.+?)$} $line match v1 fileName] {
|
||||
# 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"} {
|
||||
lappend project($root) [file join $root $directory $fileName]
|
||||
set variables([file join $root $directory $fileName]) \
|
||||
@@ -175,8 +179,8 @@ proc ReadFilesFromDirectory {directory root {type ""}} {
|
||||
#
|
||||
proc Accept { dirLib directory } {
|
||||
global dir
|
||||
puts $dir(lib)
|
||||
puts $dirLib
|
||||
# puts $dir(lib)
|
||||
# puts $dirLib
|
||||
# переменная с указанием ваших действия перед порождением потока
|
||||
set threadinit {
|
||||
# если необходимо, загружаем исходный tcl код, расположенный в других файлах
|
||||
|
||||
39
lib/tree.tcl
39
lib/tree.tcl
@@ -18,7 +18,8 @@ namespace eval Tree {
|
||||
# puts "$tree $parent $item $type $text"
|
||||
switch $type {
|
||||
file {
|
||||
regsub -all {\.|/|\\|\s} $item "_" subNode
|
||||
regsub -all {\.|/|\\|\s|:} $item "_" subNode
|
||||
set subNode [string tolower $subNode]
|
||||
# puts "Inserted tree node: $subNode"
|
||||
set fileExt [string trimleft [file extension $text] "."]
|
||||
#set fileName [string trimleft [file extension $text] "."]
|
||||
@@ -31,6 +32,8 @@ namespace eval Tree {
|
||||
set findImg [::FindImage gitlab]
|
||||
} elseif {[string match {*bitbucket*} [string tolower $text]]} {
|
||||
set findImg [::FindImage bitbucket]
|
||||
} elseif {[string match {\.git*} [string tolower $text]]} {
|
||||
set findImg [::FindImage git]
|
||||
}
|
||||
if {$fileExt ne "" || $findImg ne ""} {
|
||||
set image $findImg
|
||||
@@ -39,7 +42,8 @@ namespace eval Tree {
|
||||
}
|
||||
}
|
||||
directory {
|
||||
regsub -all {\.|/|\\|\s} $item "_" subNode
|
||||
regsub -all {\.|/|\\|\s|:} $item "_" subNode
|
||||
set subNode [string tolower $subNode]
|
||||
# puts $subNode
|
||||
if {[string match {*debian*} [string tolower [file tail $item]]]} {
|
||||
set image [::FindImage debian]
|
||||
@@ -47,6 +51,8 @@ namespace eval Tree {
|
||||
set image [::FindImage redhat]
|
||||
} elseif {[string match {*gitlab*} [string tolower [file tail $item]]]} {
|
||||
set image [::FindImage gitlab]
|
||||
} elseif {[string match {.git} [string tolower [file tail $item]]]} {
|
||||
set image [::FindImage git]
|
||||
} else {
|
||||
set image pixel
|
||||
}
|
||||
@@ -78,7 +84,7 @@ namespace eval Tree {
|
||||
set key [lindex [split $id "::"] 0]
|
||||
if {$values eq "" || $key eq ""} {return}
|
||||
|
||||
puts "$key $tree $values"
|
||||
# puts "$key $tree $values"
|
||||
switch $key {
|
||||
directory {
|
||||
FileOper::ReadFolder $values
|
||||
@@ -91,11 +97,11 @@ namespace eval Tree {
|
||||
}
|
||||
|
||||
proc PressItem {tree} {
|
||||
global nbEditor lexers editors
|
||||
global nbEditor lexers editors activeProject
|
||||
set id [$tree selection]
|
||||
$tree tag remove selected
|
||||
$tree item $id -tags selected
|
||||
|
||||
SetActiveProject [GetItemID $tree [GetUpperItem $tree $id]]
|
||||
set values [$tree item $id -values]
|
||||
set key [lindex [split $id "::"] 0]
|
||||
if {$values eq "" || $key eq ""} {return}
|
||||
@@ -107,7 +113,8 @@ namespace eval Tree {
|
||||
# $tree item $id -open false
|
||||
}
|
||||
file {
|
||||
set v [FileOper::Edit $values]
|
||||
set v [FileOper::Edit $values $nbEditor]
|
||||
puts $v
|
||||
if {$v eq false} {
|
||||
$tree delete $id
|
||||
}
|
||||
@@ -115,7 +122,7 @@ namespace eval Tree {
|
||||
}
|
||||
I[0-9]*? {
|
||||
destroy .findVariables
|
||||
FileOper::Edit [lindex $values 2]
|
||||
FileOper::Edit [lindex $values 2] $nbEditor
|
||||
}
|
||||
default {
|
||||
set parentItem [$tree parent $id]
|
||||
@@ -136,4 +143,22 @@ namespace eval Tree {
|
||||
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
|
||||
MimeType=text/plain;
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
64
projman.tcl
64
projman.tcl
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
# Tcl ignores the next line -*- tcl -*- \
|
||||
exec wish "$0" -- "$@"
|
||||
exec wish9.0 "$0" -- "$@"
|
||||
|
||||
######################################################
|
||||
# Tcl/Tk Project manager 2.0
|
||||
@@ -9,8 +9,8 @@ exec wish "$0" -- "$@"
|
||||
# Home page: https://nuk-svk.ru
|
||||
######################################################
|
||||
# Version: 2.0.0
|
||||
# Release: alpha
|
||||
# Build: 11112022131048
|
||||
# Release: alpha19
|
||||
# Build: 30102025145246
|
||||
######################################################
|
||||
|
||||
# определим текущую версию, релиз и т.д.
|
||||
@@ -34,6 +34,38 @@ while {[gets $f line] >=0} {
|
||||
}
|
||||
close $f
|
||||
|
||||
|
||||
package require msgcat
|
||||
package require inifile
|
||||
package require ctext
|
||||
package require base64
|
||||
package require fileutil
|
||||
# package require Thread
|
||||
package require fileutil::magic::filetype
|
||||
|
||||
# Определим установлен ли пакет Img для расширенной поддержки изображений
|
||||
proc PackagePresent {pkg} {
|
||||
# puts $pkg
|
||||
foreach item [package names] {
|
||||
# puts [string match -nocase Img $item]
|
||||
if {[string match -nocase Img $item] == 1} {
|
||||
puts "The $pkg package was found"
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if {[PackagePresent "Img"] eq "true"} {
|
||||
package require Img
|
||||
} else {
|
||||
puts "Img not present"
|
||||
}
|
||||
|
||||
# Устанавливаем текущий каталог
|
||||
set dir(root) [pwd]
|
||||
set dir(doc) [file join $dir(root) doc]
|
||||
|
||||
# ДОбавляем в список файлы (каталоги) из командной строки
|
||||
if { $::argc > 0 } {
|
||||
foreach arg $::argv {
|
||||
lappend opened $arg
|
||||
@@ -41,17 +73,6 @@ if { $::argc > 0 } {
|
||||
puts $opened
|
||||
}
|
||||
|
||||
package require msgcat
|
||||
package require inifile
|
||||
package require ctext
|
||||
package require base64
|
||||
package require fileutil
|
||||
package require Thread
|
||||
package require fileutil::magic::filetype
|
||||
|
||||
# Устанавливаем текущий каталог
|
||||
set dir(root) [pwd]
|
||||
set dir(doc) [file join $dir(root) doc]
|
||||
|
||||
# Устанавливаем рабочий каталог, если его нет то создаём.
|
||||
# Согласно спецификации XDG проверяем наличие переменных и каталогов
|
||||
@@ -109,28 +130,31 @@ puts "Setting the locale... [::msgcat::mclocale]"
|
||||
|
||||
source [file join $dir(lib) gui.tcl]
|
||||
|
||||
Git::CommandPathSetting
|
||||
|
||||
# Open the PATH if command line argument has been setting
|
||||
if [info exists opened] {
|
||||
# puts ">$opened"
|
||||
foreach path $opened {
|
||||
# Приводим путь к полному виду
|
||||
if {[file pathtype $path] ne "absolute"} {
|
||||
puts "\n\t[::msgcat::mc "Specify the absolute path to the directory or file"]: $path\n"
|
||||
exit
|
||||
set path [file normalize $path]
|
||||
}
|
||||
if [file isdirectory $path] {
|
||||
set activeProject $path
|
||||
# set activeProject $path
|
||||
SetActiveProject $path
|
||||
.frmStatus.lblGitLogo configure -image git_logo_20x20
|
||||
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||
FileOper::ReadFolder $path
|
||||
ReadFilesFromDirectory $path $path
|
||||
} elseif [file exists $path] {
|
||||
ResetModifiedFlag [FileOper::Edit $path]
|
||||
# ResetModifiedFlag [FileOper::Edit $path]
|
||||
FileOper::Edit $path
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if {$cfgVariables(opened) ne ""} {
|
||||
# puts "<$cfgVariables(opened)"
|
||||
set activeProject $cfgVariables(opened)
|
||||
SetActiveProject $cfgVariables(opened)
|
||||
.frmStatus.lblGitLogo configure -image git_logo_20x20
|
||||
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
|
||||
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
|
||||
|
||||
165
theme/black.tcl
Normal file
165
theme/black.tcl
Normal file
@@ -0,0 +1,165 @@
|
||||
# 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; # minimum version for Tile
|
||||
package require tile; # 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"
|
||||
-font "#c8c8c8"
|
||||
}
|
||||
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 $colors(-font) \
|
||||
-padding {2 0} -border -1
|
||||
$styleCmd configure TCombobox \
|
||||
-fieldbackground white -foreground $colors(-font)\
|
||||
-padding {2 0}
|
||||
$styleCmd configure TSpinbox \
|
||||
-fieldbackground white -foreground $colors(-font) \
|
||||
-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(-dark)] \
|
||||
-foreground [list disabled $colors(-lightest)] \
|
||||
|
||||
$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
|
||||
|
||||
$styleCmd map Canvas \
|
||||
-background [list selected $colors(-lighter)] \
|
||||
-foreground [list selected $colors(-selectfg)] \
|
||||
-highlightbackground [list selected $colors(-lighter)]
|
||||
}
|
||||
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
|
||||
#
|
||||
ttk::style configure . \
|
||||
-background $colors(-frame) \
|
||||
-foreground #ffffff \
|
||||
-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"
|
||||
-background $colors(-frame) \
|
||||
-foreground #ffffff \
|
||||
-bordercolor $colors(-darkest) \
|
||||
-darkcolor $colors(-dark) \
|
||||
-lightcolor $colors(-lighter) \
|
||||
-troughcolor $colors(-darker) \
|
||||
-selectborderwidth 1 \
|
||||
-font "{Droid Sans Mono} 9" \
|
||||
-selectbackground $colors(-selectbg) \
|
||||
-selectforeground $colors(-selectfg) \
|
||||
|
||||
ttk::style map "." \
|
||||
-background [list disabled $colors(-frame) \
|
||||
active $colors(-lighter)] \
|
||||
-foreground [list disabled $colors(-disabledfg)] \
|
||||
-selectbackground [list !focus $colors(-darkest)] \
|
||||
-selectforeground [list !focus #ffffff]
|
||||
-background [list disabled $colors(-frame) \
|
||||
active $colors(-lighter)] \
|
||||
-foreground [list disabled $colors(-disabledfg)] \
|
||||
-selectbackground [list !focus $colors(-darkest)] \
|
||||
-selectforeground [list !focus #ffffff]
|
||||
|
||||
# \
|
||||
# -selectbackground [list !focus $colors(-darkest)] \
|
||||
# -selectforeground [list !focus #ffffff]
|
||||
|
||||
# ttk widgets.
|
||||
ttk::style configure TButton \
|
||||
@@ -81,7 +85,9 @@ namespace eval ttk::theme::dark {
|
||||
-fieldbackground $colors(-lightframe) \
|
||||
-foreground #ffffff
|
||||
|
||||
ttk::style configure TNotebook
|
||||
ttk::style configure TScrollbar -relief flat -border 0
|
||||
|
||||
# ttk::style configure TNotebook
|
||||
# -bordercolor $colors(-frame)
|
||||
ttk::style configure TNotebook.Tab \
|
||||
-padding {6 2 6 2}
|
||||
@@ -102,6 +108,10 @@ namespace eval ttk::theme::dark {
|
||||
# -indicatorsize -1 \
|
||||
# -padding 0
|
||||
|
||||
ttk::style configure TreeCtrl \
|
||||
-background gray30 -itembackground {gray60 gray50} \
|
||||
-itemfill white -itemaccentfill yellow
|
||||
|
||||
ttk::style configure Text \
|
||||
-linemapbg [list active $colors(-linemapbg)]\
|
||||
-linemapfg [list active $colors(-linemapfg)]\
|
||||
|
||||
24
tkregexp.tcl
24
tkregexp.tcl
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
#-*-tcl-*-
|
||||
# the next line restarts using wish \
|
||||
exec wish "$0" -- ${1+"$@"}
|
||||
exec wish8.6 "$0" -- ${1+"$@"}
|
||||
|
||||
|
||||
set version 3.0
|
||||
@@ -1084,14 +1084,16 @@ if {$argc > 1} {
|
||||
puts "Usage: $argv0 <sampleFile>"
|
||||
} elseif {$argc == 1} {
|
||||
set filename [lindex $argv 0]
|
||||
set file [open $filename]
|
||||
set data [read $file [file size $filename]]
|
||||
close $file
|
||||
|
||||
# memorize location
|
||||
set regexp::data(v:dir) [file dirname $filename]
|
||||
set regexp::data(v:file) [file tail $filename]
|
||||
|
||||
if [file exists $filename] {
|
||||
set file [open $filename]
|
||||
set data [read $file [file size $filename]]
|
||||
close $file
|
||||
# memorize location
|
||||
set regexp::data(v:dir) [file dirname $filename]
|
||||
set regexp::data(v:file) [file tail $filename]
|
||||
} else {
|
||||
set data [lindex $argv 0]
|
||||
}
|
||||
regexp::sample:set $data
|
||||
unset data
|
||||
}
|
||||
@@ -1363,7 +1365,3 @@ proc make-regexp::make-regexp {words} {
|
||||
set regexp
|
||||
}
|
||||
#==============================================================================================
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user