Compare commits

...

256 Commits

Author SHA1 Message Date
svk
53869b8fe4 Обновить README.md
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-01-30 12:19:56 +03:00
svk
6854093ee1 Обновить README.md
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
2025-01-30 12:18:14 +03:00
svk
202f8d3d82 Обновить README.md
Some checks are pending
Gitea Actions Demo / Explore-Gitea-Actions (push) Waiting to run
Исправлено описание и добавлены изображения
2025-01-30 12:14:09 +03:00
svk
7afdd33c58 Обновить README.md
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2024-10-31 19:48:30 +03:00
74e288d596 Новая сборка
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2024-08-22 15:18:59 +03:00
17636c13e3 changelog-gen.tcl: Добавлена генерация текстового журнала изменений 2024-08-22 15:09:19 +03:00
7d0c5796e5 build-deb-projman.sh: добавлена генерация changelog из git log 2024-08-22 13:38:52 +03:00
79c2e6f1dc changelog-gen.tcl: Вывод в файл вынесен в отдельную процедуру 2024-08-22 13:18:49 +03:00
2024aa86ba changelog-gen.tcl: Добавлено создание резервной копии выходного файла. Исправлен вывод в файл. 2024-08-22 13:12:28 +03:00
cb5c21c077 changelog-gen.tcl: Добавлены опции командной строки, добавлен вывод в файл 2024-08-22 13:01:17 +03:00
6b5d116743 Добавлен запуск changelog-gen при сборке пакета 2024-08-22 11:04:37 +03:00
6fc78c75b3 Добавлено чстение журнала начиная с определенной даты 2024-08-22 10:30:33 +03:00
4a3394183f Новая сборка 2024-08-22 10:29:44 +03:00
Калинин Сергей Валерьевич
e1db775b3b Генерация списка изменений для debian приведена к корректному виду
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2024-08-20 13:30:43 +03:00
Калинин Сергей Валерьевич
42349a4701 Генерация списка изменений для debian приведена к корректному виду 2024-08-20 13:28:51 +03:00
Калинин Сергей Валерьевич
f6bbc530bb Исправлен фокус при создании нового файла. #3
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2024-07-29 17:31:07 +03:00
svkalinin
c9e804b614 Исправлена неправильная замена выражение при поиске, если есть несколько совпадений в строке.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2024-07-17 12:28:30 +03:00
svkalinin
4bf10a1d30 Исправлена неправильная замена выражение при поиске, если есть несколько совпадений в строке. 2024-07-17 12:11:53 +03:00
svkalinin
f68cd75600 Реализовал базовые функции генератора журнала изменений
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2024-07-02 14:24:14 +03:00
svk
9ad7523e7c Финальный тест сборки
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5s
2024-06-27 14:44:47 +03:00
svk
ea988f6b8d Обновить .gitea/workflows/build.yml
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 7s
2024-06-27 13:29:10 +03:00
svk
23de123a0b Обновить .gitea/workflows/build.yml
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2024-06-27 13:25:16 +03:00
svk
b287ee5551 Обновить .gitea/workflows/build.yml
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2024-06-27 13:24:03 +03:00
svk
dc9837b7c2 Обновить .gitea/workflows/build.yml
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
2024-06-27 13:13:08 +03:00
svk
2caba8db1a Попытка загрузки собранного пакета
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
2024-06-27 13:10:23 +03:00
svk
299638b1f8 Обновить .gitea/workflows/build.yml
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
2024-06-27 12:53:09 +03:00
svk
56e7168d8e Обновить .gitea/workflows/build.yml
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 4s
2024-06-27 12:52:10 +03:00
svk
b0a3292d9f Обновить .gitea/workflows/build.yml
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 14s
2024-06-27 12:47:05 +03:00
svk
93dd90e355 Обновить .gitea/workflows/build.yml
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 4s
2024-06-27 12:45:22 +03:00
svk
aff70dd8b7 Обновить .gitea/workflows/build.yml
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 13s
2024-06-27 12:44:31 +03:00
svk
dea2ff0023 Обновить .gitea/workflows/build.yml
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2024-06-27 12:43:20 +03:00
svk
6361043c25 Обновить .gitea/workflows/build.yml
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
2024-06-27 12:41:34 +03:00
svk
4f8e7e306d Обновить debian/build-deb-projman.sh
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 4s
2024-06-26 16:22:29 +03:00
svk
b42977f416 Обновить .gitea/workflows/build.yml
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 5s
2024-06-26 16:18:45 +03:00
svk
78c5f3784b Обновить .gitea/workflows/build.yml
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 3s
2024-06-26 16:17:27 +03:00
svk
65c4213836 Обновить .gitea/workflows/build.yml
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2024-06-26 16:16:30 +03:00
svk
993c1f7e3e Обновить .gitea/workflows/build.yml
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 4s
2024-06-26 16:15:32 +03:00
svk
29bdac41fe Обновить .gitea/workflows/build.yml
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 4s
2024-06-26 16:13:20 +03:00
svk
ad3aac9b4b Обновить .gitea/workflows/build.yml
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 3s
2024-06-26 16:12:16 +03:00
svk
2e36bbc100 Обновить .gitea/workflows/build.yml
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 6s
2024-06-26 16:00:54 +03:00
svk
190ec5200f Обновить .gitea/workflows/build.yml
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
2024-06-26 15:58:14 +03:00
svk
b495161d81 Обновить .gitea/workflows/build.yml
Some checks failed
Projman build the packages / Projman-Build (push) Failing after 1m2s
2024-06-26 15:53:21 +03:00
svk
faeeef6048 Обновить .gitea/workflows/build.yml
Some checks failed
Projman build the packages / Projman-Build (push) Failing after 12s
2024-06-26 13:02:29 +03:00
svk
8e496cb6bd Обновить .gitea/workflows/build.yml
Some checks are pending
Projman build the packages / Projman-Build (push) Waiting to run
2024-06-26 12:59:04 +03:00
svk
cfb29d6038 Обновить .gitea/workflows/build.yml
Some checks failed
Projman build the packages / Projman-Build (push) Has been cancelled
2024-06-26 12:39:02 +03:00
svk
6051f6821a Обновить .gitea/workflows/build.yml
Some checks failed
Projman build the packages / Projman-Build (push) Has been cancelled
2024-06-26 12:35:54 +03:00
svkalinin
6f99707fd7 Добавлена иконка для jinja template
Some checks are pending
Projman build the packages / Projman-Build (push) Waiting to run
2024-06-24 10:15:38 +03:00
svkalinin
d17aef0878 Исправил остатки слияния веток
Some checks failed
Projman build the packages / Projman-Build (push) Has been cancelled
2024-05-17 10:46:08 +03:00
svkalinin
397117e770 Исправлено некорректное определение типа файла при открытии 2024-05-17 10:40:21 +03:00
svkalinin
09d8a06f9e Исправлено некорректное определение типа файла при открытии. 2024-05-17 10:34:53 +03:00
svk
72abc2b84f Обновить .gitea/workflows/build.yml 2023-10-30 10:44:37 +03:00
svk
8bd48159d6 revert 61f2bca699
revert Обновить .gitea/workflows/build.yml

TEst actions
2023-10-30 09:55:41 +03:00
svk
61f2bca699 Обновить .gitea/workflows/build.yml
TEst actions
2023-10-30 09:46:02 +03:00
svk
55fe5c3023 Fix 2023-07-30 12:11:49 +03:00
svk
d04d419548 Fix 2023-07-30 12:01:24 +03:00
svk
bc56f02a35 TEst 2023-07-30 11:49:45 +03:00
svk
791a4c59a3 Test gitea actions 2023-07-30 11:44:41 +03:00
svk
f21e750967 Gitea actions add 2023-07-30 11:33:52 +03:00
svkalinin
3ee60f48c3 Merge branch 'master' of https://git.nuk-svk.ru/svk/projman 2023-07-27 13:04:32 +03:00
svkalinin
496514649a Исправил открытие файлов с разными путями (~/ ./ ../) 2023-07-27 13:03:02 +03:00
svk
336a05cd61 Добавил изображений программы 2023-02-23 13:46:56 +03:00
svkalinin
06c6205177 Исправлена ошибка при создании нового файла. 2023-02-06 09:27:38 +03:00
svk
6180a35718 Test 2022-12-22 19:59:05 +03:00
svk
0b92e4a1f0 Изменил(а) на '.woodpecker/.build.yml' 2022-12-22 19:48:06 +03:00
svk
87ae490b94 Изменил(а) на '.woodpecker/.build.yml' 2022-12-22 19:42:53 +03:00
svkalinin
005f832b7a Test 2022-12-21 16:53:44 +03:00
svkalinin
9b2477c954 Тесты 2022-12-21 16:34:00 +03:00
svkalinin
2328090962 Fix 2022-12-21 16:16:38 +03:00
svkalinin
9d86d26b2b Fix 2022-12-21 16:09:47 +03:00
svkalinin
a7af815ce4 Woodpecker test 2022-12-21 16:06:36 +03:00
svkalinin
b6afcc4c5f Добавил пиктограммы файлов 2022-12-21 14:59:40 +03:00
svkalinin
8de8ec16be Исправил процедуру Files::CloseAll ('Закрыть всё') 2022-12-20 12:38:22 +03:00
svkalinin
cb6cefd8ac Добавлена поддержка Lua 2022-12-19 15:29:30 +03:00
svkalinin
0fe4541dc0 Исправлена процедура (рас)комментирования 2022-12-19 15:29:17 +03:00
svkalinin
3467d6a89a Исправил ошибку при выходе в процедуре (Congig::Write) 2022-12-16 15:00:52 +03:00
svkalinin
3bf3b80e38 Добавил раскраски в ruby 2022-12-16 10:11:07 +03:00
svkalinin
a1248f6941 Добавлена возможность многострочных комментариев, если это поддерживается языком (html, go, ruby).
Добавлен параметр для включения данной фунциональности в меню и в конфиге.
2022-12-16 09:33:01 +03:00
svkalinin
777eaa01e5 В Ruby lexer добавлен поиск переменных коде. 2022-12-15 12:18:18 +03:00
svkalinin
2043a03c0b Новая сборка 2022-12-15 12:12:00 +03:00
svkalinin
d215c1ca25 Немного почистил. Добавлен поиск переменных по питоньим исходникам (lexer) 2022-12-15 11:59:05 +03:00
svkalinin
6f85de472a Еще одно исправление подсветки для INI 2022-12-09 15:45:23 +03:00
svkalinin
c929e53803 Новая сборка 2022-12-09 15:35:46 +03:00
svkalinin
c738d496e6 Исправлене подсветки комментариев в INI 2022-12-09 15:34:06 +03:00
svkalinin
fa55ce53c6 Новая сборка 2022-12-09 15:31:14 +03:00
svkalinin
6327d45a5c Изменения в подсветке для INI 2022-12-09 15:25:47 +03:00
svkalinin
52a0edfec8 fix 2022-12-09 15:04:28 +03:00
svkalinin
5319c475d9 Добавил подсветку для Desktop и Spec файлов 2022-12-09 15:02:53 +03:00
svkalinin
f2926cd047 Добавил вывод отладочной инфы в процедуру 2022-12-09 12:04:53 +03:00
svkalinin
84735e0dee Исправил подсветку комментариев в TCL 2022-12-09 11:51:24 +03:00
svkalinin
508933006e Оптимизация процедур 2022-12-09 11:34:54 +03:00
svkalinin
28ceaf1c67 Добавлена подсветка и навигация по HTML. Исправлена подсветка XML 2022-12-09 11:25:34 +03:00
svkalinin
cfae63d36a Новая сборка 2022-12-08 15:31:31 +03:00
svkalinin
fa0bda3c25 Добавил иконку для изображений 2022-12-08 13:32:18 +03:00
svkalinin
8b294582f3 Добавил иконки для perl, tcl, обновил для ruby 2022-12-08 13:12:30 +03:00
svkalinin
b3ac2fb649 Fix 2022-12-08 09:39:44 +03:00
svkalinin
64a4a35cc6 Исправлена подсветка и навигация по коду для Ruby 2022-12-08 09:39:14 +03:00
svkalinin
5d07141ef1 Обновил список изменений 2022-12-07 16:12:04 +03:00
svkalinin
a2880d5dd6 Исправлено сохранение сессии в редакторе (открытие папки и файлов при следующем запуске) 2022-12-07 16:00:04 +03:00
svkalinin
9099d4ad61 Добавлена новая секция UserSession 2022-12-07 15:59:12 +03:00
svkalinin
dd22f2cf15 Исправление ошибки при открытии файла 2022-12-07 14:27:08 +03:00
svkalinin
0adea30af9 Добавлена поддержка INI-файлов (подсветка, навигация по структуре) 2022-12-07 14:21:09 +03:00
svkalinin
c829ec1156 Добавлена поддержка perl 2022-12-07 13:14:37 +03:00
svkalinin
3e3000de62 Добавил икогнку для файлов git 2022-12-07 09:08:43 +03:00
svkalinin
fbb107f14a Новая сборка 2022-12-05 15:59:46 +03:00
svkalinin
b91790f756 Добавлены иконуи для ключей и сертификатов. Изменен поиск иконки (вощзвращает теерь с размером) 2022-12-05 10:56:30 +03:00
svkalinin
417fb9db23 Новая чборка 2022-12-01 12:51:50 +03:00
svkalinin
3b52b9af34 Реализован двухпанельный режим работы (вертиикальное разделение) 2022-12-01 12:37:13 +03:00
svkalinin
47f6cc436a Test 2022-11-29 13:33:12 +03:00
svkalinin
6b71cfa4d0 Тесты 2022-11-29 13:27:58 +03:00
svkalinin
a21d7c58d3 TEsting drone build 2022-11-29 13:14:51 +03:00
svkalinin
f422aa9d64 ДОбавил сборку в drone 2022-11-29 13:03:50 +03:00
svkalinin
c7fb966326 Исправлена ошибка при открытии ansible.cfg, если отсутствует inventory файл упомянутый там. 2022-11-29 08:59:54 +03:00
svkalinin
64c9957991 Добавил деактивацию кнопки 'Создать репу' если не выбран активный проект (не открыто ни одного каталога/папки) 2022-11-28 16:37:42 +03:00
svkalinin
52a3e9a4ac Добавлены команды git init и git config (зачаток). Изменен диалог клонирования репозитория (добавлена кнопка Создать репозиторий) 2022-11-28 16:27:06 +03:00
svkalinin
b10b1802a5 Исправил ошибку git при открытии файла или каталога если репозиторий не инициализирован (нет .git каталога внутри проекта) 2022-11-28 15:29:40 +03:00
svkalinin
37ab3e4a6b Переименовал файл 2022-11-28 14:15:30 +03:00
svkalinin
2bd1b76981 Добавил скриты сборки rpm, переделал сборку deb 2022-11-28 13:30:01 +03:00
svkalinin
c50768ba56 Добавлено обрамление выделенного текста прии нажатии '_' в markdown 2022-11-25 12:51:21 +03:00
svkalinin
ef4a636623 Исправление подсветки 2022-11-25 12:41:00 +03:00
svkalinin
2dd866d8c4 Добавлена поддержка markdown (подсветка, навигация по коду) 2022-11-25 11:08:14 +03:00
svkalinin
0cb58a43fb Обновил описание 2022-11-25 11:07:39 +03:00
svkalinin
f4ef40a5e7 Новая сборка 2022-11-25 08:08:41 +03:00
svkalinin
0fcc2a652f Исправлена ошибка с закрытием файлов в редакторе при закрытии папки 2022-11-25 08:07:55 +03:00
svkalinin
167c374b9d Новая сборка 2022-11-24 16:41:33 +03:00
svkalinin
0d5832c84c Переделана процедура определения активного проекта. Исправлено определение ветки git.
Теперь можно нормально работать в двух и более открытых проектах (каталогах/папках)
2022-11-24 13:28:11 +03:00
svkalinin
f8c268294a Новая сборка 2022-11-24 12:16:49 +03:00
svkalinin
edf2a5e86d Доделан вид диалога поиска по файлам 2022-11-24 11:58:21 +03:00
svkalinin
976aa30657 Исправлен поиск имени функции 2022-11-24 10:46:30 +03:00
svkalinin
8b8fd6fd5f Новая сборка 2022-11-23 15:31:24 +03:00
svkalinin
10dacdb058 Добавлен диалог клонирования репозитория 2022-11-23 15:21:51 +03:00
svkalinin
9bb25eb817 Добавил разделитель 2022-11-23 13:20:18 +03:00
svkalinin
dbb8c3f911 Исправлено переключение вкладок при закрытии 2022-11-23 12:50:07 +03:00
svkalinin
8402409489 Исправлено закрытиие вкладки Git по нажатию соотв. кнопки в панели инструментов 2022-11-23 12:49:23 +03:00
svkalinin
c988843bf0 Добавлен пункт 'Закрыть всё' 2022-11-23 12:46:55 +03:00
svkalinin
15c9bd23af Новая сборка 2022-11-23 11:56:34 +03:00
svkalinin
eb2cbf99c6 Исправлено соответствие открытого файла в редакторе и выделение этого файла в дереве, при переключении вкладок в редакторе. 2022-11-23 11:14:03 +03:00
svkalinin
903747d8ab Исправлено переключение отображения панели (лево/право) в без перезапуска программы. 2022-11-23 10:29:53 +03:00
svkalinin
83d9d8ea02 Украшательства интерфейса - Реакция на нажатие кнопки в панели инструментов теперь зависит от контекста 2022-11-22 16:29:26 +03:00
svkalinin
0121f1ea8c Добавлено включение отключение отображения Меню, строки статуса, панели инструментов 2022-11-22 14:55:24 +03:00
svkalinin
ab9ba18e62 Добавлено копирование текущей строки в буфер по Atl+Y 2022-11-22 13:10:03 +03:00
svkalinin
e94f046972 Исправлена ошибка с отображением файловой панели 2022-11-22 10:49:42 +03:00
svkalinin
84795cfb47 Добавлены и исправлены функции отображения меню, панели инструментов, панели файлов 2022-11-18 16:44:55 +03:00
svkalinin
24b7ed6693 Фикс 2022-11-18 16:43:14 +03:00
svkalinin
a5416807ee Добавлен параметр statusBarShow - показ строки статуса 2022-11-18 16:43:02 +03:00
svkalinin
39549ef6f7 Добавлены переводы 2022-11-18 16:42:30 +03:00
svkalinin
5c605d6907 Добавлена проверка параметров вызова файл или просто строка 2022-11-18 13:22:29 +03:00
svkalinin
e7c1cbbbe1 Новая сборка 2022-11-18 13:13:16 +03:00
svkalinin
35874492b0 Добавлен вывод сообщений об ошибке в диалоге 2022-11-18 13:09:02 +03:00
svkalinin
39683d7439 Добавлено обновления списка файлов в дереве 2022-11-18 13:03:48 +03:00
svkalinin
9ecc9d7301 Добавлена процедура вывода информационного сообщения 2022-11-18 13:03:21 +03:00
svkalinin
ac92335ba5 Добавлена команда Git::Reset (git reset _file_) на кнопке в диалоге.
Для отмены 'git add'
2022-11-18 12:40:00 +03:00
svkalinin
f1ff64ef6a Добавлена кнопка Обновление в диалог работы с Git 2022-11-18 12:10:11 +03:00
svkalinin
ae1a1aaba7 Исправление процедуры поиска наименования функции 2022-11-18 11:43:57 +03:00
svkalinin
d70459970d Фиксы диалога работы с Git (работа с выделенными файлами в списках) 2022-11-16 16:26:46 +03:00
svkalinin
3b8dc3d6f5 Test 2022-11-16 16:26:05 +03:00
svkalinin
91fc22a121 Фиксы и тесты работы с git 2022-11-16 16:09:08 +03:00
svkalinin
138dc7c247 test 2022-11-16 16:07:05 +03:00
svkalinin
68769c7389 Исправление выборанескольких файлов в диалоге Git 2022-11-16 15:18:00 +03:00
svkalinin
7f15dc1453 Новая сборка 2022-11-15 15:37:07 +03:00
svkalinin
d5bf9486a4 Украшательства 2022-11-14 15:12:11 +03:00
svkalinin
9712decbec Новая сборка 2022-11-14 11:35:15 +03:00
svkalinin
0582a20115 Исправление рег. выражения чтения файлов командой git status 2022-11-14 11:13:38 +03:00
svkalinin
779173d5d5 Настройки темы 2022-11-14 11:12:54 +03:00
svkalinin
19156c252b Исправлено рег. выпражение определения mime типа файла 2022-11-14 09:27:15 +03:00
svkalinin
276cc63097 Ntvs 2022-11-11 16:22:50 +03:00
svkalinin
0b4d0dbf5c Новая сборка 2022-11-11 13:12:18 +03:00
svkalinin
47e4e4e128 Добавил очистку текстовых полей при добавлении файлов в коммит 2022-11-11 13:09:36 +03:00
svkalinin
fdba263d3e Исправрелдение Git::Commit (индексация всех файлов в проекте) 2022-11-11 13:04:22 +03:00
svkalinin
d6fc490a05 Изменения 2022-11-11 13:03:06 +03:00
svkalinin
970990bc54 Фиксы 2022-11-11 12:59:24 +03:00
svkalinin
934c3b1e4d Test 2022-11-11 12:58:43 +03:00
svkalinin
049873d9ec Исправления глюков 2022-11-11 12:41:52 +03:00
svkalinin
37aa0e47a7 Украшательства строки статуса 2022-11-10 15:58:27 +03:00
svkalinin
9a93d8fe26 Добавлен просмотрщик изображений 2022-11-10 15:46:09 +03:00
svkalinin
2cbd7df913 Добавил рамку кону ввода номера 2022-11-10 15:42:47 +03:00
svkalinin
3a792d7774 Добавлен диалог перехода по номеру строки Ctrl-G 2022-11-10 15:36:34 +03:00
svkalinin
3cbc7c1f48 Добавлено определение типа файла 2022-11-10 14:53:58 +03:00
svkalinin
11c3dd2fb2 Новая сборка 2022-11-09 14:54:38 +03:00
svkalinin
6f45460f1f Добавил удаление артефактов сборки пакета 2022-11-09 14:51:48 +03:00
svkalinin
796b0b73a0 Новая сборка 2022-11-09 12:32:52 +03:00
svkalinin
e03405dffb Fix 2022-11-09 12:31:53 +03:00
svkalinin
66a047b419 Добавлена подсветка имен файлов в выводе git show 2022-11-09 12:30:58 +03:00
svkalinin
3042b1c1c1 Новая сборка 2022-11-08 12:54:28 +03:00
svkalinin
654819d192 Допилдивание процедуры автоввода имен переменных 2022-11-03 15:58:07 +03:00
svkalinin
c379f6d70b Небольшие правки в подсказках по переменным 2022-11-03 09:57:39 +03:00
svkalinin
58f8e59236 Новая сборка 2022-11-02 16:18:25 +03:00
svkalinin
57b4e92e0f Исправлена подсветка SHELL переменных а YAML файлах (ansible, gitlab-ci, etc) 2022-11-02 16:17:36 +03:00
svkalinin
35df6004e3 Fix 2022-11-01 16:54:26 +03:00
svkalinin
b1f15ca15e Новая сборка. Добавлена подсказка по переменным при вводе. 2022-11-01 16:22:26 +03:00
svkalinin
095434dc70 Добавлено определение символа переменной 2022-11-01 16:21:02 +03:00
svkalinin
0b8584d4f8 fackup 2022-11-01 14:50:20 +03:00
svkalinin
2f5af66c5c Определение коррректного положения встроенного окна 2022-11-01 11:23:54 +03:00
svkalinin
c9d827a5d8 Новая сборка 2022-10-28 16:51:55 +03:00
svkalinin
6541915bcc Добавлен вывод подсказки при вводе переменных 2022-10-28 16:45:33 +03:00
svkalinin
bcfb9fb7df Добавлены опции для включсения полджсказок по переменным и процедурам 2022-10-28 13:27:54 +03:00
svkalinin
a981fdea6d Новая сборка 2022-10-21 15:01:34 +03:00
svkalinin
b83313b9be Исправления гуя 2022-10-21 14:59:08 +03:00
svkalinin
335d088344 Fix 2022-10-21 14:14:27 +03:00
svkalinin
0a1699f294 Фикс 2022-10-21 14:09:42 +03:00
svkalinin
613912c235 Добавил диалог создания и переключения git-веток 2022-10-21 14:01:53 +03:00
svkalinin
ccc75b2b18 Создание ветки 2022-10-21 13:21:32 +03:00
svkalinin
a3d9001cc8 Фикс 2022-10-21 13:00:30 +03:00
svkalinin
517a724780 Новые иконки 2022-10-21 12:57:38 +03:00
svkalinin
8cacfc30d4 Косметические изменения 2022-10-21 11:42:42 +03:00
svkalinin
a89c0309ad Ченю push 2022-10-21 11:21:39 +03:00
svkalinin
ea9902ef74 Ченю push 2022-10-21 11:19:54 +03:00
svkalinin
f26067b24f Починил push 2022-10-21 11:16:38 +03:00
svkalinin
88df8e7d47 Добавлены новые иконки 2022-10-20 16:42:42 +03:00
svkalinin
88f26ffba7 Обработка ошибок 2022-10-20 10:52:46 +03:00
svkalinin
83c1a2248c Обработка ошибок 2022-10-20 10:50:55 +03:00
svkalinin
83320a2259 Новая сборка 2022-10-20 10:19:24 +03:00
svkalinin
ea111c6f32 Исправлена ошибка при клике на списке с файлами 2022-10-20 10:18:06 +03:00
svkalinin
a9879738b7 New build 2022-10-20 10:02:47 +03:00
svkalinin
643ceeb7d9 Сделал просмотр изменений из истории 2022-10-20 09:44:26 +03:00
svkalinin
6dec437d04 Добавлено обновление лога изменений 2022-10-19 15:53:21 +03:00
svkalinin
63bc430722 Новый билд 2022-10-19 15:51:17 +03:00
svkalinin
543fe0fdfe Исправление обновления диалога 2022-10-19 15:42:45 +03:00
svkalinin
78d17cb25b Fix 2022-10-19 15:40:39 +03:00
svkalinin
0668ddd6fc Добавлен перевод 2022-10-19 15:37:37 +03:00
svkalinin
9d8ba896f0 git reflog 2022-10-19 09:39:55 +03:00
svkalinin
400b41aa1e Добавлен интерфейс работы с Git 2022-10-19 09:05:55 +03:00
svkalinin
e5e0ad299f Новый релиз 2022-10-17 17:00:44 +03:00
svkalinin
54923d6bef Исправил ошибку если нет изменений 2022-10-17 16:59:13 +03:00
svkalinin
04e7dd2560 Начало работ по поддержке git 2022-10-17 16:55:22 +03:00
svkalinin
b9c1f966b3 New build 2022-09-23 12:39:35 +03:00
svkalinin
123d38b6ae Bug fix 2022-09-23 12:33:22 +03:00
svkalinin
32013d87a7 Добавлен диалог поиска строки в файлах в текущем каталоге. Используется 'grep -r'. 2022-09-22 16:42:48 +03:00
svkalinin
48588bda9a Добавлены настройки для системной команды поиска в фвайлах 2022-09-22 16:40:58 +03:00
svkalinin
4a76bd5e22 Добавлено рекурсивное чтение каталога при открытии. Диалог поиска теперь работает раздельно при разделении окна.
Диалог навигации по функци так-же работает раздельно
2022-09-21 14:38:31 +03:00
svkalinin
91ef282558 Добавлены ключевые слова для подстветки питона 2022-09-20 14:51:10 +03:00
svkalinin
8796277014 Добавлена проверка на отсутствие файла и удаление из дерева 2022-09-19 15:00:05 +03:00
02bc6e852d Добавлен поиск переменной в тексте после открытия файла где она указана 2022-09-18 10:46:59 +03:00
c755e79517 Исправлена ошибка при запуске 2022-09-18 10:21:38 +03:00
svkalinin
122153b363 Новая сборка 2022-09-16 16:37:17 +03:00
svkalinin
d560da0359 Исправил сохранение открытого каталога в настройках 2022-09-16 16:36:26 +03:00
svkalinin
253f79b6c1 Рефакторинг 2022-09-16 16:28:58 +03:00
svkalinin
b2fc6a3399 Куафсещкштп 2022-09-16 16:27:59 +03:00
svkalinin
bc432b8d84 Переделал дилог навигации по переменным 2022-09-16 16:26:52 +03:00
svkalinin
3689e582e7 Исправил ошибку 2022-09-16 16:25:44 +03:00
svkalinin
9f6a3067d4 Добавлен еще один каталог с переменными - default 2022-09-16 15:43:46 +03:00
svkalinin
26f8df5335 Добавлено сохранение состояния редактора (открытые каталоги, файлы) 2022-09-15 16:51:11 +03:00
svkalinin
db3cc0cc7d Изменения в диалоге поиска 2022-09-15 15:44:49 +03:00
svkalinin
d9d071092e Изменения в диалоге поиска 2022-09-15 12:35:05 +03:00
svkalinin
e7c4d8c95e Отображение горизонтальной полосы прокрутки в зависимости от переноса строк в редакторе 2022-09-15 09:36:53 +03:00
svkalinin
5c1c840e44 Установка фокуса на текст в редакторе при щелчке на заголовок вкладки 2022-09-15 09:35:23 +03:00
svkalinin
f51a44b37a Сделал перемещение курсора в такуюже позицию в тексте при разделении окна редактора 2022-09-14 16:56:15 +03:00
svkalinin
a7b6c48a42 Добавлено горизонтальное разделение окна редактора.
Исправлено удаление строки по Alt+R - реперь строка удаляется полностью вместе с символами переноса.
Исправлено сохранение нового файла (untitled) но всеравно как-то криво.
2022-09-14 16:31:50 +03:00
svkalinin
4b4f15a5fc Изменения по чтению и отображению переменных по файлам. Причесал диалог 2022-09-08 17:01:18 +03:00
795861c0a1 Почти работающий поиск переменных по каталогу для ansible. 2022-09-02 21:42:40 +03:00
svkalinin
4f6735dcea Добавил поддержку ruby, yaml/ Зачаток работы со структурой файлов (переменные процедуры) 2022-09-02 17:01:53 +03:00
svkalinin
a67916273c Исправлен выход окна со списком функций за пределы экрана. Поиск и замена теперь работает. Добавлены некоторые иконки для файлов 2022-09-01 16:54:34 +03:00
svkalinin
d4f11b11de Начало реализации процедуры поиска и замены (поиск криво но работает) 2022-08-31 17:00:51 +03:00
svkalinin
89b7ee09fc Fix 2022-08-30 16:47:52 +03:00
svkalinin
ec3e4ac12e Исправлено закерытие вкладки по щелчку мыши.
Добавлена настройка переноса строк в редакторе.
Добавлены сочетания клавиш ctrl+pgup cntrl+pgdown  для переключения  между вкладками редактора.
Добавлен диалог закрытия папки (каталога)
2022-08-30 16:44:28 +03:00
svkalinin
1142324008 Укоротил имя корневого каталога в дереве 2022-08-30 14:55:15 +03:00
svkalinin
b6dc24ca29 Добавлены ключиевые слова GO 2022-08-26 16:57:08 +03:00
35 changed files with 6200 additions and 718 deletions

View File

@@ -0,0 +1,17 @@
name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on: [push]
jobs:
Explore-Gitea-Actions:
runs-on: tcl-tk-builder
steps:
- name: Build the packages
run: |
git clone ${{ vars.main_url }}${{ gitea.repository }}
pwd
cd projman/debian
./build-deb-projman.sh
cd ../../
curl --user ${{ vars.user}}:${{vars.api_token}} --upload-file "$(ls -1| grep projman | grep -E 'deb$')" ${{vars.main_url}}api/packages/${{vars.user}}/debian/pool/bookworm/main/upload
- run: echo "This job's status is ${{ job.status }}."

2
.gitignore vendored
View File

@@ -4,3 +4,5 @@ debian/update-desktop-database
debian/projman.substvars debian/projman.substvars
debian/files debian/files
debian/projman.debhelper.log debian/projman.debhelper.log
debian/*.tmp
*.tmp

411
CHANGELOG
View File

@@ -1,101 +1,350 @@
###################################################### projman (2.0.0-alfa16)
# Tcl/Tk Project manager 2.0
# Distributed under GNU Public License
# Author: Sergey Kalinin svk@nuk-svl.ru
# Home page: https://nuk-svk.ru
######################################################
20/06/2022 Sergey Kalinin <svk@nuk-svk.ru> Thu, 22 Aug 2024 15:09:19 +0300
- Beginning the project - changelog-gen.tcl: Добавлена генерация текстового журнала изменений
- build-deb-projman.sh: добавлена генерация changelog из git log
- changelog-gen.tcl: Вывод в файл вынесен в отдельную процедуру
- changelog-gen.tcl: Добавлено создание резервной копии выходного файла. Исправлен вывод в файл.
- changelog-gen.tcl: Добавлены опции командной строки
- Добавлен запуск changelog-gen при сборке пакета
- Добавлено чстение журнала начиная с определенной даты
- Новая сборка
13/07/2022 Sergey Kalinin <svkalinin@samsonpost.ru> Tue, 20 Aug 2024 13:30:43 +0300
- Added open file dialog - Генерация списка изменений для debian приведена к корректному виду
- Added open folder dialog - Генерация списка изменений для debian приведена к корректному виду
- Added save file function - Исправлен фокус при создании нового файла. #3
- Added a command line argument support (open file(s) or folder(s))
- Added TCL and BASH highlite
- Added a configuration file (progman.ini) and a procedure for reading/saving them
14/07/2022 Калинин Сергей Валерьевич <svkalinin@samsonpost.ru> Wed, 17 Jul 2024 12:28:30 +0300
- Added On/Off viewing toolbar - Исправлена неправильная замена выражение при поиске
- Added On/Off viewing line numbers bar - Исправлена неправильная замена выражение при поиске
- Added a Comment/Uncomment text support - Реализовал базовые функции генератора журнала изменений
- Added text auto format
15/07/2022 svk <svkalinin@samsonpost.ru> Mon, 24 Jun 2024 10:15:38 +0300
- Added a close file (tab) function with Ctrl+w - Добавлена иконка для jinja template
- Added a insert/remove the tabspace - Исправил остатки слияния веток
- Fixed comment/uncomment selected text - Исправлено некорректное определение типа файла при открытии.
20/07/2022 <svk@nuk-svk.ru> Mon, 30 Oct 2023 09:46:02 +0300
- Fixed indent text - Gitea actions add
- Fixed insert " and '
- Added a main window geometry option into config, and autosave current geometry
21/07/2022 svk <svkalinin@samsonpost.ru> Thu, 27 Jul 2023 13:04:32 +0300
- Added Save file dialog before tab was closed - Merge branch 'master' of https://git.nuk-svk.ru/svk/projman
- Added Save file dialog when exiting, if file was modify - Исправил открытие файлов с разными путями (~/ ./ ../)
22/07/2022 svkalinin <svk@nuk-svk.ru> Thu, 23 Feb 2023 13:46:56 +0300
- Added GO highlight - Добавил изображений программы
27/07/2022 svk <svkalinin@samsonpost.ru> Mon, 6 Feb 2023 09:27:38 +0300
- Fixed comment/uncomment procedure (last line in selected text) - Исправлена ошибка при создании нового файла.
- Fixed error with save new (untitled) file
01/08/2022 svk <svkalinin@samsonpost.ru> Wed, 21 Dec 2022 16:53:44 +0300
- Added inserting base64 encoded image - Добавил пиктограммы файлов
- Added read the file structure and inserting into tree - Исправил процедуру Files::CloseAll ('Закрыть всё')
- Added GUI font, and GUI foreground color setting - Добавлена поддержка Lua
- Added tcl and go files images - Исправлена процедура (рас)комментирования
- Added image for file type (extention) - Исправил ошибку при выходе в процедуре (Congig::Write)
- Добавил раскраски в ruby
- Добавлена возможность многострочных комментариев
- В Ruby lexer добавлен поиск переменных коде.
- Новая сборка
- Немного почистил. Добавлен поиск переменных по питоньим исходникам (lexer)
- Еще одно исправление подсветки для INI
- Новая сборка
- Исправлене подсветки комментариев в INI
- Новая сборка
- Изменения в подсветке для INI
- Добавил подсветку для Desktop и Spec файлов
- Добавил вывод отладочной инфы в процедуру
- Исправил подсветку комментариев в TCL
- Оптимизация процедур
- Добавлена подсветка и навигация по HTML. Исправлена подсветка XML
- Новая сборка
- Добавил иконку для изображений
- Добавил иконки для perl
- Исправлена подсветка и навигация по коду для Ruby
- Обновил список изменений
- Исправлено сохранение сессии в редакторе (открытие папки и файлов при следующем запуске)
- Добавлена новая секция UserSession
- Исправление ошибки при открытии файла
- Добавлена поддержка INI-файлов (подсветка
- Добавлена поддержка perl
- Добавил икогнку для файлов git
- Новая сборка
- Добавлены иконуи для ключей и сертификатов. Изменен поиск иконки (вощзвращает теерь с размером)
- Новая чборка
- Реализован двухпанельный режим работы (вертиикальное разделение)
- ДОбавил сборку в drone
- Исправлена ошибка при открытии ansible.cfg
- Добавил деактивацию кнопки 'Создать репу' если не выбран активный проект (не открыто ни одного каталога/папки)
- Добавлены команды git init и git config (зачаток). Изменен диалог клонирования репозитория (добавлена кнопка Создать репозиторий)
- Исправил ошибку git при открытии файла или каталога если репозиторий не инициализирован (нет .git каталога внутри проекта)
- Переименовал файл
- Добавил скриты сборки rpm
- Добавлено обрамление выделенного текста прии нажатии '_' в markdown
- Исправление подсветки
- Добавлена поддержка markdown (подсветка
- Обновил описание
- Новая сборка
- Исправлена ошибка с закрытием файлов в редакторе при закрытии папки
- Новая сборка
- Переделана процедура определения активного проекта. Исправлено определение ветки git. Теперь можно нормально работать в двух и более открытых проектах (каталогах/папках)
- Новая сборка
- Доделан вид диалога поиска по файлам
- Исправлен поиск имени функции
- Новая сборка
- Добавлен диалог клонирования репозитория
- Добавил разделитель
- Исправлено переключение вкладок при закрытии
- Исправлено закрытиие вкладки Git по нажатию соотв. кнопки в панели инструментов
- Добавлен пункт 'Закрыть всё'
- Новая сборка
- Исправлено соответствие открытого файла в редакторе и выделение этого файла в дереве
- Исправлено переключение отображения панели (лево/право) в без перезапуска программы.
- Украшательства интерфейса - Реакция на нажатие кнопки в панели инструментов теперь зависит от контекста
- Добавлено включение отключение отображения Меню
- Добавлено копирование текущей строки в буфер по Atl+Y
- Исправлена ошибка с отображением файловой панели
- Добавлены и исправлены функции отображения меню
- Фикс
- Добавлен параметр statusBarShow - показ строки статуса
- Добавлены переводы
- Добавлена проверка параметров вызова файл или просто строка
- Новая сборка
- Добавлен вывод сообщений об ошибке в диалоге
- Добавлено обновления списка файлов в дереве
- Добавлена процедура вывода информационного сообщения
- Добавлена команда Git::Reset (git reset _file_) на кнопке в диалоге. Для отмены 'git add'
- Добавлена кнопка Обновление в диалог работы с Git
- Исправление процедуры поиска наименования функции
- Фиксы диалога работы с Git (работа с выделенными файлами в списках)
- Фиксы и тесты работы с git
- Исправление выборанескольких файлов в диалоге Git
- Новая сборка
- Украшательства
- Новая сборка
- Исправление рег. выражения чтения файлов командой git status
- Настройки темы
- Исправлено рег. выпражение определения mime типа файла
- Ntvs
- Новая сборка
- Добавил очистку текстовых полей при добавлении файлов в коммит
- Исправрелдение Git::Commit (индексация всех файлов в проекте)
- Изменения
- Исправления глюков
- Украшательства строки статуса
- Добавлен просмотрщик изображений
- Добавил рамку кону ввода номера
- Добавлен диалог перехода по номеру строки Ctrl-G
- Добавлено определение типа файла
- Новая сборка
- Добавил удаление артефактов сборки пакета
- Новая сборка
- Добавлена подсветка имен файлов в выводе git show
- Новая сборка
- Допилдивание процедуры автоввода имен переменных
- Небольшие правки в подсказках по переменным
- Новая сборка
- Исправлена подсветка SHELL переменных а YAML файлах (ansible
- Новая сборка. Добавлена подсказка по переменным при вводе.
- Добавлено определение символа переменной
- Определение коррректного положения встроенного окна
- Новая сборка
- Добавлен вывод подсказки при вводе переменных
- Добавлены опции для включсения полджсказок по переменным и процедурам
- Новая сборка
- Исправления гуя
- Добавил диалог создания и переключения git-веток
- Создание ветки
- Новые иконки
- Косметические изменения
- Починил push
- Добавлены новые иконки
- Обработка ошибок
- Новая сборка
- Исправлена ошибка при клике на списке с файлами
- New build
- Сделал просмотр изменений из истории
- Добавлено обновление лога изменений
- Новый билд
- Исправление обновления диалога
- Добавлен перевод
- git reflog
- Добавлен интерфейс работы с Git
- Новый релиз
- Исправил ошибку если нет изменений
- Начало работ по поддержке git
- New build
- Bug fix
- Добавлен диалог поиска строки в файлах в текущем каталоге. Используется 'grep -r'.
- Добавлены настройки для системной команды поиска в фвайлах
- Добавлено рекурсивное чтение каталога при открытии. Диалог поиска теперь работает раздельно при разделении окна. Диалог навигации по функци так-же работает раздельно
- Добавлены ключевые слова для подстветки питона
- Добавлена проверка на отсутствие файла и удаление из дерева
03/08/2022 svkalinin <svk@nuk-svk.ru> Sun, 18 Sep 2022 10:46:59 +0300
- Added some files icon - Добавлен поиск переменной в тексте после открытия файла где она указана
- Fix finded procedure (function) (tree click) - Исправлена ошибка при запуске
- Fix showing position in statusbar
12/08/2022 Sergey Kalinin <svkalinin@samsonpost.ru> Fri, 16 Sep 2022 16:37:17 +0300
- Fixed comment/uncomment procedure depending on the file type - Новая сборка
- Added About dialog - Исправил сохранение открытого каталога в настройках
- Fixed read structure (procedure names like Proc:Name) - Рефакторинг
- Переделал дилог навигации по переменным
- Добавлен еще один каталог с переменными - default
- Добавлено сохранение состояния редактора (открытые каталоги
- Изменения в диалоге поиска
- Отображение горизонтальной полосы прокрутки в зависимости от переноса строк в редакторе
- Установка фокуса на текст в редакторе при щелчке на заголовок вкладки
- Сделал перемещение курсора в такуюже позицию в тексте при разделении окна редактора
- Добавлено горизонтальное разделение окна редактора. Исправлено удаление строки по Alt+R - реперь строка удаляется полностью вместе с символами переноса. Исправлено сохранение нового файла (untitled) но всеравно как-то криво.
- Изменения по чтению и отображению переменных по файлам. Причесал диалог
15/08/2022 Sergey Kalinin <svkalinin@samsonpost.ru> Fri, 2 Sep 2022 17:01:53 +0300
- Added open/close braces highlight - Добавил поддержку ruby
- Fixed GO structure reader - Исправлен выход окна со списком функций за пределы экрана. Поиск и замена теперь работает. Добавлены некоторые иконки для файлов
- Начало реализации процедуры поиска и замены (поиск криво но работает)
- Исправлено закерытие вкладки по щелчку мыши. Добавлена настройка переноса строк в редакторе. Добавлены сочетания клавиш ctrl+pgup cntrl+pgdown для переключения между вкладками редактора. Добавлен диалог закрытия папки (каталога)
- Укоротил имя корневого каталога в дереве
- Добавлены ключиевые слова GO
- Исправлена подсветка ключевых слов tcl и добавлены виджеты
- Исправлена некорректная установка иконки на каталог
- Добавлены горячие клавиши для удаления слова
- Добавлены сочетания клавиш для удаления слова
16/08/2022 svkalinin <svk@nuk-svk.ru> Fri, 26 Aug 2022 12:36:14 +0300
- Added selection of all words in the text by clicking on the any word - Изменил(а) на 'README.md'
17/08/2022 svk <svkalinin@samsonpost.ru> Fri, 26 Aug 2022 12:29:19 +0300
- Added "Vew Panel" menu and "Panel side" (left/right) - Добавлена поддержка python. Обновлена библиотека иконок.
- Changed standard Tk menu on TTK::menu - Исправлена установка фокуса на окно диалога GotoFunctionDialog и обратно на текст. Переделан механизм чтения структуры файла и добавлены команды для sh (bash)
- Added config options filesPanelPlace (left/right) - Добавлены настройки темы для диалога навигации по функциям
- Fixed ViewFilesTree procedure with rigth variable filesPanelShow (true/false) - Добавлена иконка shell (*.sh)
- Исправлено комментирование строк
- Добавлен диалог навигации по структуре (процедурам) по Ctrl+F. Исправлена ошибка при закрытии файлов (функции из дерева теперь удаляются).
- Добавил цвет фона для панели с номерами строк
22/08/2022 svkalinin <svk@nuk-svk.ru> Wed, 17 Aug 2022 21:37:06 +0300
- Fixed clicking on proc or func names into tree if file was closed - Убрал доки по tcl
- Слегка поменял стиль оформления
23/08/2022 Sergey Kalinin <svkalinin@samsonpost.ru> Wed, 17 Aug 2022 16:52:22 +0300
- Added procedure and function navigation window by Ctrl+j pressed on editor - Добавлен выбор расположения боковой панели
- Fixed correctly focused on editor text widget - Добавлено выделение всех слов в тексте по двойному щелчку мышой на любом слове
- Исправлено чтение структуры GO файлов: корректное отображение в дереве функций возвращающих значения разных типов
- Добавлена подсветка скобок
- Новая сборка
- Исправлены процедуры comment/uncomment
- Изменены имена переенных
- Изменены имена переменных
- Добавлена запись номера сборки (build) в исходник
- Добавлено меню Помощь -> О программе. Добавлено окно 'О программе'
- Исправлен поиск процедуры в тексте по клику в дереве
- Исправлен поиск процедуры в тексте по клику в дереве. Исправлено отображение позиции курсора в строке статуса
- ДОбавлены иконки для некоторых типов файлов
- Добавлено отображение структуры исходника в дереве (функции (go) и процедуры (tcl))
- Добавлено кодирование изображения в base64 и вставка в редактируемый текст
- Добавлены шрифт и цвет шриыта для общего интерфейса
- Исправлено комментирование выделенного фрагмента (последняя строка) Исправлено закрытие untitled вкладок
- Исправлено комментирование выделенных строк
- Добавлена подсветка для GO
- Исправлено подключение требуемой процедуры подсветки
- Убрал вставку закрывающихся кавычек в пустой строке. Ибо пока глючит.
- Добавлен диалог сохранения файла при закрытии вкладки редактора и при выходе из программы если есть несохраненные файлы
- Исправлен рабочий каталог
- Добавлены переводы для диалога
- Исправлен скрипт сборки пакета для Debian
- Исправил скрипт сборки пакета. Добавил .gitignore
24/08/2022 svkalinin <svk@nuk-svk.ru> Thu, 21 Jul 2022 12:18:29 +0300
- Fixed ReadStructure procedure (added lexer) - Изменил(а) на 'README.md'
25/08/2022 svk <svkalinin@samsonpost.ru> Thu, 21 Jul 2022 12:15:19 +0300
- Fixed focus on the editor window after clicking Escape in the function selection dialog - Change readme
- Change color scheme for FindFunction dialog - Added Dark theme
- Added sh icon (for shell scripts) - New version of ProjMan
- Fixed lexers for find procedures and functions - Some changes into GUI (tabs)
26/08/2022 svkalinin <banzaj28@yandex.ru> Thu, 5 Jul 2018 08:41:18 +0300
- Update image library (added some icons) - Fixed error if file was not select
- Added hot keys: - README.md отредактирован онлайн на Bitbucket
- Alt+p - Show/Hide additional panel
- Alt+w - delete word on the cursor below
- Alt+r - delete row
- Alt+b - delete text beetween line Begin and cursor
- Alt+e - delete text between cursor and line End
- Fix close braces indent
Sergey Kalinin <banzaj28@yandex.ru> Sat, 24 Mar 2018 12:20:27 +0300
- Rename readme
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
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
Sergey <svk@s.kalinin-nb> Sat, 24 Feb 2018 12:22:08 +0300
- Fixed Add new file if name was existing into tree
svk <banzaj28@yandex.ru> Fri, 23 Feb 2018 11:58:39 +0300
- Rename archive projman-latest
- Fixed AddToProj procedure for file browser tree Disable OpComplite procedure
- Refactoring Settigs procedure source code Some changes into messages files (localisation)
- Added option "constrainedwidth true" for ScrollableFrame
- Fix saving "Show dot files" option Fixed correctly highlightning procedure names
- Refactoring auto update file structure (tree). Now structure updated when file was saving Refactoring "Settings" dialog
- Fix "New file" proc ctrl+n hotkey
- - Fixed edit files into root node from file browser tree - Change "Delete project" dialog and procedure
- Refactoring "Add New Projects" "Project Settings" (e.t.c.) dialogs Added "Add as new project" dialog for file browser Add popup menu for file browser Fixed some highlight bug
- Fixed runing on Win7 without installation
- Added opening last active project when project run
- Fixed parsing procedure with names like ::proc::name or proc_na::me(aa) and parameters {{} {} {}}
- Put logo and icon images into source code
- Fixed AutoComplite precedure for TCL/TK-projects Added colored icon for main window Fixed "Close all" procedure if opened files from projects and file browser
- Added saving main window geometry into projman.conf file when close programm
- Merge branch 'master' of https://bitbucket.org/svk28/projman
- Delete temp file
- bitbucket-pipelines.yml отредактирован онлайн на Bitbucket
- change docker image
- add apt
- bitbucket-pipelines.yml отредактирован онлайн на Bitbucket
- Initial Bitbucket Pipelines configuration
- Add web site into Readme
- Added gray theme Fixed work with file from directory but not project.
- Some FileDialog fixes
- File Browser added
- Auto indent added for () [] braces
- Some changes
- Change hotkeys "Control+
- Add comment/uncomment selected text
- Tcl
- - Russian help files was conerting into utf-8 encode
- Change Logo and About dialog (added new homepage and git repo addresses)
- Added binding mouse button: click on notebook tab highlight opened file name in tree Change "Paste from Clipboard" function Change popup editor menu (undo
- Modules load procedure changes
- Remove some files
- GiTK running fixed
- Fixed paste text highlight Fixed setting edited flag when paste the text from buffer Change authors email and home page
Sergey Kalinin <svk@kalinin.carfix> Mon, 22 Jan 2018 17:54:18 +0300
- - Remove ctags support - Added gitk (gui for git) support
- Change version into Install.tcl script
svk <svk@l0001h.office> Fri, 12 Jan 2018 13:44:26 +0300
- README отредактирован онлайн на Bitbucket
- test.tcl deleted online with Bitbucket
Sergey Kalinin <banzaj28@gmail.com> Mon, 19 Oct 2015 14:22:09 +0300
- some bugs in install.tcl fixed
svk28 <ksv@L-AO-TEH1.DALS.local> Mon, 19 Oct 2015 13:37:21 +0300
- Initial commit with contributors
- Initial release

View File

@@ -1,6 +0,0 @@
######################################################
# Tcl/Tk Project manager 2.0
# Distributed under GNU Public License
# Author: Sergey Kalinin svk@nuk-svl.ru
# Home page: https://nuk-svk.ru
######################################################

151
README.md
View File

@@ -1,27 +1,154 @@
ABOUT ## About
ProjMan (aka "Tcl/Tk Project Manager") is a editor for programming in TCL/Tk (and other language). ProjMan (aka "Tcl/Tk Project Manager") is a editor for programming in TCL/Tk (and other language).
It includes a file manager, a source editor with syntax highlighting and procedure navigation, a context-sensitive It includes a file manager, a source editor with syntax highlighting and code navigation, a context-sensitive help system, Git support, and much more.
help system, and much more. Working an Linux and Windows.
Working an Linux.
REQUIREMENTS ## Support languages
Highlightning and source code navigation:
* Tcl/Tk
* GO
* Perl
* Python
* Ruby
* Shell (BASH)
* Markdown
* YAML (Ansible support)
* Lua
Highlightning:
* HTML
* XML
## Requirements
For UNIX-like OS For UNIX-like OS
Tcl/Tk >= 8.6 http://tcl.tk Tcl/Tk >= 8.6 http://tcl.tk
tcllib, tklib tcllib, tklib
CREDITS ## Screenshots
- Navigation the source code structure, and syntax highlighting
![projman_go_codenav.png](https://nuk-svk.ru/images/projman_go_codenav.png)
![projman_tcl_vars.png](https://nuk-svk.ru/images/projman_tcl_vars.png)
![projman_tcl_codenav.png](https://nuk-svk.ru/images/projman_tcl_codenav.png)
![projman_syntax_highlight.png](https://nuk-svk.ru/images/projman_syntax_highlight.png)
![projman_html.png](https://nuk-svk.ru/images/projman_html.png)
- Hints when entering names of variables and procedures
![projman_proc_vars.png](https://nuk-svk.ru/images/projman_proc_vars.png)
- Searching for a variable definition in ansible files
- Navigation the ansible source code structure
![projman_yaml_variables.png](https://nuk-svk.ru/images/projman_yaml_variables.png)
- Navigation the markdown source code structure
![projman_md_codenav.png](https://nuk-svk.ru/images/projman_md_codenav.png)
- Git dialog (commit history)
- Git dialog (changes)
![projman_git.png](https://nuk-svk.ru/images/projman_git.png)
- Flexible interface configuration
![projman_gui_flexibility.png](https://nuk-svk.ru/images/projman_gui_flexibility.png)
- Find/Replace dialog
![projman_find_replace.png](https://nuk-svk.ru/images/projman_find_replace.png)
- Global searching dialog
![projman_global_search.png](https://nuk-svk.ru/images/projman_global_search.png)
## Getting source code
Download the source code https://git.nuk-svk.ru/svk/projman/
Or use git:
```
git clone https://git.nuk-svk.ru/svk/projman.git
```
## Build package
```
cd projman/debian/
./build-deb-projman.sh
cd projman/redhat/
./build-rpm-projman.sh
```
## Install
Use package manager for you system:
Debian ```sudo dpkg -i projman_2.0.0-alpha_amd64.deb```
Redhat ```sudo rpm -Uhv projman_2.0.0-alpha_amd64.rpm```
## Usage
Running command (need full path to the each file or folder):
Open files
```
projman ~/tmp/test.tcl ~/tmp/2.go ...
```
Open folders
```
projman ~/projects/projman ...
```
Or type "projman" into terminal, Or choose the name of the program "Projman" on the Start menu.
### Keyboard shortcut
- Ctrl-N - Create new file
- Ctrl-O - Open file
- Ctrl-W - Close editor (file)
- Ctrl-K - Open folder
- Ctrl-Q - Quit from ProjMan
- Ctrl-J - Show procedures (functions) list for navigation in open editor
- Ctrl-L - Find and display files where the variable is defined, the name of which is located under the cursor in the editor
- Ctrl-F - Search text in open editor
- Ctrl-[ - Move the line (or selected lines) one position (see config tabSize=4) to the right
- Ctrl-] - Move the line (or selected lines) one position to the left
- Ctrl-, - Comment the line (or selected lines)
- Ctrl-. - Uncomment the line (or selected lines)
- Ctrl-I - Insert base64 encoded image into edited text
- Ctrl-G - Go to line dialog
- Ctrl-C - Copy selected text into buffer
- Ctrl-V - Paste text from buffer
- Alt-P - Show/Hide the file tree panel
- Alt-W - Delete the current word
- Alt-E - Delete text from current position to end of line
- Alt-B - Delete text from current position to begin of line
- Alt-R - Delete current line
- Alt-Y - Copy current line into buffer
- Alt-S - Split the edited window horizontally
## Credits
Sergey Kalinin - author
svk@nuk-svk.ru svk@nuk-svk.ru
http://nuk-svk.ru http://nuk-svk.ru
Laurent Riesterer - VisualREGEXP and TkDIFF+ parts Laurent Riesterer - VisualREGEXP and TkDIFF+ parts
laurent.riesterer@free.fr laurent.riesterer@free.fr
http://laurent.riesterer.free.fr http://laurent.riesterer.free.fr

16
TODO
View File

@@ -5,4 +5,18 @@
# Home page: https://nuk-svk.ru # Home page: https://nuk-svk.ru
###################################################### ######################################################
2. Подстветку текущей вкладки и элемента в дереве --- Ansible ---
1. Определение всех переменных в отдельный список
- внутри файла, конструкции вида:
set_fact:
varName: value
set_fact varName value
register: varName
vars:
varName: value
vars_files:
- var1.yml
- var2.yml
3. Если используется роль и переменная не найдена в плэйбуке то искать в роли (не факт что требуется)

337
changelog-gen.tcl Executable file
View File

@@ -0,0 +1,337 @@
#!/bin/sh
# Tcl ignores the next line -*- tcl -*- \
exec tclsh "$0" -- "$@"
######################################################################
# ProjMan 2
# Distributed under GNU Public License
# Author: Sergey Kalinin svk@nuk-svk.ru
# Copyright (c) "SVK", 2024, https://nuk-svk.ru
#######################################################################
# Changelog generator from the Git commit history.
# For DEB and RPM packages
# usage a git command:
#
# git log --abbrev-commit --all --pretty='%h, %ad, %an, %ae, %s, %b'
#######################################################################
# puts $tcl_platform(platform)
# Устанавливаем рабочий каталог, если его нет то создаём.
# Согласно спецификации XDG проверяем наличие переменных и каталогов
if [info exists env(XDG_CONFIG_HOME)] {
set dir(cfg) [file join $env(XDG_CONFIG_HOME) changelog-gen]
} elseif [file exists [file join $env(HOME) .config]] {
set dir(cfg) [file join $env(HOME) .config changelog-gen]
} else {
#set dir(cfg) [file join $env(HOME) .changelog-gen]
}
if {[file exists $dir(cfg)] == 0} {
file mkdir $dir(cfg)
}
# Use whereis command for finding the git executable file.
# for unix-like operating systems
proc GetGitCommandUnix {} {
global gitCommand
set cmd "whereis -b git"
catch "exec $cmd" result
# puts $result
if {$result ne ""} {
set fields [split $result ":"]
# puts $fields
if {[lindex $fields 1] ne ""} {
# puts [lindex $fields 1]
set gitCommand "[string trim [lindex $fields 1]]"
} else {
puts "GIT command not found"
exit
}
}
}
# Setting the git-command for windows family OS
proc GetGitCommandWindows {} {
global gitCommand
set gitCommand "c:/git/bin/git.exe"
}
switch $tcl_platform(platform) {
unix {GetGitCommandUnix}
windows {GetGitCommandWindows}
}
proc ReadGitLog {} {
global args gitCommand lastCommitTimeStampSec
set cmd exec
set i 0
lappend cmd "$gitCommand"
lappend cmd "log"
lappend cmd "--abbrev-commit"
# Проверяем была ли запись для данного проекта если была то к времени последнего коммита прибавляем 1 сек.
# и получаем журнал после этой даты
if {[info exists lastCommitTimeStampSec] && [info exists args(--last)]} {
lappend cmd "--after='[clock format [clock add $lastCommitTimeStampSec 1 second] -format {%a, %e %b %Y %H:%M:%S %z}]'"
}
lappend cmd "--all"
lappend cmd "--pretty='%h, %ad, %an, %ae, %s, %b'"
# puts $cmd
catch $cmd pipe
# puts $pipe
set outBuffer ""
foreach line [split $pipe "\n"] {
# puts $line
# set line [string trim $line]
set line [string trim [string trim $line] {'}]
if {[regexp -nocase -all -- {^[0-9a-z]+} $line match]} {
set outBuffer $line
if {$outBuffer ne ""} {
lappend res [list $i $outBuffer]
incr i
}
# puts $outBuffer
} else {
if {$line ne ""} {
append outBuffer ". " $line
}
}
}
# puts $res
if [info exists res] {
return $res
} else {
puts "\nRepository '$args(--project-name)' do not have any changes\n"
exit
}
}
proc StoreProjectInfo {timeStamp} {
global dir args
set cfgFile [open [file join $dir(cfg) $args(--project-name).conf] "w+"]
puts $cfgFile "# set args(--project-version) \"$args(--project-version)\""
puts $cfgFile "# set args(--project-release) \"$args(--project-release)\""
puts $cfgFile "set lastCommitTimeStamp \"$timeStamp\""
puts $cfgFile "set lastCommitTimeStampSec [clock scan $timeStamp]"
close $cfgFile
}
proc GenerateChangelogDEB {} {
global args
# puts "GenerateChangelogDEB"
set lastCommitTimeStamp ""
set commiter ""
set commitText ""
# ReadGitLog
set lst [lsort -integer -index 0 [ReadGitLog]]
# puts $lst
# exit
set outText ""
foreach l $lst {
set index [lindex $l 0]
set line [lindex $l 1]
# puts "$index - $line"
set record [split $line ","]
set timeStamp [string trim [lindex $record 1]]
set email [string trim [lindex $record 3]]
if {$lastCommitTimeStamp eq ""} {
set lastCommitTimeStamp [string trim [lindex $record 1]]
}
set timeStamp [clock format [clock scan $timeStamp] -format {%a, %e %b %Y %H:%M:%S %z}]
# puts "> $commiter"
if {$index == 0} {
puts "$args(--project-name) ($args(--project-version)-$args(--project-release)) stable; urgency=medium\n"
append outText "$args(--project-name) ($args(--project-version)-$args(--project-release)) stable; urgency=medium\n\n"
set commiter [lindex $record 2]
StoreProjectInfo $timeStamp
# puts "\n \[ [string trim $commiter] \]"
}
# puts ">> $commiter"
if {$commiter ne [lindex $record 2]} {
puts "\n -- [string trim $commiter] <$email> $timeStamp"
append outText "\n -- [string trim $commiter] <$email> $timeStamp\n"
puts "\n$args(--project-name) ($args(--project-version)-$args(--project-release)) stable; urgency=medium\n"
append outText "\n$args(--project-name) ($args(--project-version)-$args(--project-release)) stable; urgency=medium\n\n"
set commiter [lindex $record 2]
# puts "\n \[ [string trim $commiter] \]"
}
set commitTex [lindex $record 4]
puts " * $commitTex"
append outText " * $commitTex\n"
}
puts "\n -- [string trim $commiter] <$email> $timeStamp"
append outText "\n -- [string trim $commiter] <$email> $timeStamp\n"
return $outText
}
proc GenerateChangelogRPM {} {
puts "GenerateChangelogRPM"
}
proc GenerateChangelogTXT {} {
global args
set lastCommitTimeStamp ""
set commiter ""
set commitText ""
set lst [lsort -integer -index 0 [ReadGitLog]]
puts "$args(--project-name) ($args(--project-version)-$args(--project-release)"
foreach l $lst {
set index [lindex $l 0]
set line [lindex $l 1]
# puts "$index - $line"
set record [split $line ","]
set timeStamp [string trim [lindex $record 1]]
set email [string trim [lindex $record 3]]
if {$lastCommitTimeStamp eq ""} {
set lastCommitTimeStamp [string trim [lindex $record 1]]
}
set timeStamp [clock format [clock scan $timeStamp] -format {%a, %e %b %Y %H:%M:%S %z}]
# puts "> $commiter"
if {$index == 0} {
append outText "$args(--project-name) ($args(--project-version)-$args(--project-release))\n"
set commiter [lindex $record 2]
puts "\n[string trim $commiter] <$email> $timeStamp"
append outText "\n[string trim $commiter] <$email> $timeStamp\n"
StoreProjectInfo $timeStamp
}
if {$commiter ne [lindex $record 2]} {
puts "\n[string trim $commiter] <$email> $timeStamp"
append outText "\n[string trim $commiter] <$email> $timeStamp\n"
set commiter [lindex $record 2]
}
set commitTex [lindex $record 4]
puts " - $commitTex"
append outText " - $commitTex\n"
}
return $outText
}
# puts [ReadGitLog]
proc ShowHelp {} {
puts "\nChangelog generator from the Git commit history. For DEB and RPM packages"
puts "Usage:\n"
puts "\tchangelog-gen \[options\]\n"
puts "Where options:"
puts "\t--project-name - name of project (package) "
puts "\t--project-version - package version"
puts "\t--project-release - package release name (number)"
puts "\t--deb - debian package format of changelog"
puts "\t--rpm - rpm package format of changelog"
puts "\t--txt - plain text changelog out"
puts "\t--out-file - changelog file name"
puts "\t--last - The timestamp since the last launch of this program for a given project"
}
proc StoreChangeLog {outText} {
global args
if [file exists $args(--out-file)] {
file copy -force $args(--out-file) "$args(--out-file).tmp"
set origOutFile [open "$args(--out-file).tmp" "r"]
set origText [read $origOutFile]
close $origOutFile
set outFile [open $args(--out-file) "w"]
puts $outFile $outText
puts $outFile $origText
close $outFile
if [info exists args(--last)] {
set outFile [open $args(--out-file) "r+"]
puts $outFile $outText
close $outFile
} else {
set outFile [open $args(--out-file) "w+"]
puts $outFile $outText
close $outFile
}
} else {
set outFile [open $args(--out-file) "w+"]
puts $outFile $outText
close $outFile
}
}
set arglen [llength $argv]
set index 0
while {$index < $arglen} {
set arg [lindex $argv $index]
switch -exact $arg {
--project-name {
set args($arg) [lindex $argv [incr index]]
}
--project-version {
set args($arg) [lindex $argv [incr index]]
}
--project-release {
set args($arg) [lindex $argv [incr index]]
}
--deb {
set args($arg) true
}
--rpm {
set args($arg) true
}
--txt {
set args($arg) true
}
--out-file {
set args($arg) [lindex $argv [incr index]]
}
--last {
set args($arg) true
}
--help {
ShowHelp
exit
}
default {
set filename [lindex $argv $index]
}
}
incr index
}
if ![info exists args(--project-name)] {
puts "You mast set --project-name option\n"
exit
}
if ![info exists args(--project-version)] {
puts "You mast set --project-version option\n"
exit
}
if ![info exists args(--project-release)] {
puts "You mast set --project-release option\n"
exit
}
if [file exists [file join $dir(cfg) $args(--project-name).conf]] {
source [file join $dir(cfg) $args(--project-name).conf]
}
foreach arg [array names args] {
puts "$arg $args($arg)"
}
if [info exists args(--deb)] {
set outText [GenerateChangelogDEB]
if [info exists args(--out-file)] {
StoreChangeLog $outText
}
}
if [info exists args(--rpm)] {
GenerateChangelogRPM
}
if [info exists args(--txt)] {
set outText [GenerateChangelogTXT]
if [info exists args(--out-file)] {
StoreChangeLog $outText
}
}

View File

@@ -3,14 +3,16 @@
cd ../ cd ../
VERSION=$(grep Version projman.tcl | grep -oE '\b[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\b') VERSION=$(grep Version projman.tcl | grep -oE '\b[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\b')
RELEASE=$(grep Release projman.tcl | grep -oE '\b[0-9A-Za-z]{1,3}\b') RELEASE=$(grep Release projman.tcl | grep -oE '[0-9A-Za-z]+$')
BUILD_DATE=$(date +%d%m%Y%H%M%S) BUILD_DATE=$(date +%d%m%Y%H%M%S)
TXT="# Build: ${BUILD_DATE}" TXT="# Build: ${BUILD_DATE}"
echo "$VERSION, $RELEASE, $BUILD_DATE"
sed -i "/# Build:.*/c$TXT" projman.tcl sed -i "/# Build:.*/c$TXT" projman.tcl
cp projman.tcl projman cp projman.tcl projman
cp changelog-gen.tcl changelog-gen
./changelog-gen.tcl --project-name projman --project-version ${VERSION} --project-release ${RELEASE} --out-file debian/changelog --deb --last
sed -i "s+^set\ dir(lib)+set\ dir(lib)\ /usr/share/projman/lib ;#+g" projman sed -i "s+^set\ dir(lib)+set\ dir(lib)\ /usr/share/projman/lib ;#+g" projman
@@ -19,8 +21,9 @@ sed -i "s+\[pwd\]+/usr/share/projman+g" projman
tar czf ../projman_${VERSION}.orig.tar.gz . tar czf ../projman_${VERSION}.orig.tar.gz .
dpkg-buildpackage dpkg-buildpackage -d
#cp ../projman_${VERSION}-${RELEASE}_amd64.deb /files/ #cp ../projman_${VERSION}-${RELEASE}_amd64.deb /files/
rm projman rm -v projman changelog-gen
rm -r -v debian/{projman,.debhelper}

339
debian/changelog vendored
View File

@@ -1,5 +1,338 @@
projman (2.0.0-alpha) stable; urgency=medium projman (2.0.0-alpha16) stable; urgency=medium
* Initial release * build-deb-projman.sh: добавлена генерация changelog из git log
* changelog-gen.tcl: Вывод в файл вынесен в отдельную процедуру
* changelog-gen.tcl: Добавлено создание резервной копии выходного файла. Исправлен вывод в файл.
* changelog-gen.tcl: Добавлены опции командной строки
* changelog-gen.tcl: Добавлена генерация текстового журнала изменений
* Добавлен запуск changelog-gen при сборке пакета
* Добавлено чстение журнала начиная с определенной даты
* Новая сборка
-- Sergey Kalinin <svk@nuk-svk.ru> Thu, 22 Aug 2024 13:38:52 +0300
projman (2.0.0-alfa15) stable; urgency=medium
* Генерация списка изменений для debian приведена к корректному виду
* Исправлен фокус при создании нового файла. #3
-- Калинин Сергей Валерьевич <svkalinin@samsonpost.ru> Wed, 17 Jul 2024 12:28:30 +0300
projman (2.0.0-alfa14) stable; urgency=medium
* Исправлена неправильная замена выражение при поиске
* Реализовал базовые функции генератора журнала изменений
-- svkalinin <svk@nuk-svk.ru> Thu, 27 Jun 2024 14:44:47 +0300
projman (2.0.0-alfa13) stable; urgency=medium
* Добавлена иконка для jinja template
* Исправил остатки слияния веток
* Исправлено некорректное определение типа файла при открытии.
-- svkalinin <svk@nuk-svk.ru> Mon, 30 Oct 2023 10:44:37 +0300
projman (2.0.0-alfa12) stable; urgency=medium
* Обновить .gitea/workflows/build.yml
* Gitea actions add
-- svk <svkalinin@samsonpost.ru> Thu, 27 Jul 2023 13:04:32 +0300
projman (2.0.0-alfa11) stable; urgency=medium
* Merge branch 'master' of https://git.nuk-svk.ru/svk/projman
* Исправил открытие файлов с разными путями (~/ ./ ../)
-- svkalinin <svk@nuk-svk.ru> Thu, 23 Feb 2023 13:46:56 +0300
projman (2.0.0-alfa10) stable; urgency=medium
* Добавил изображений программы
-- svk <svkalinin@samsonpost.ru> Mon, 6 Feb 2023 09:27:38 +0300
projman (2.0.0-alfa9) stable; urgency=medium
* Исправлена ошибка при создании нового файла.
-- svkalinin <svk@svk.home> Thu, 22 Dec 2022 19:59:05 +0300
projman (2.0.0-alfa8) stable; urgency=medium
* Добавил пиктограммы файлов
* Исправил процедуру Files::CloseAll ('Закрыть всё')
* Добавлена поддержка Lua
* Исправлена процедура (рас)комментирования
* Исправил ошибку при выходе в процедуре (Congig::Write)
* Добавил раскраски в ruby
* Добавлена возможность многострочных комментариев
* В Ruby lexer добавлен поиск переменных коде.
* Новая сборка
* Немного почистил. Добавлен поиск переменных по питоньим исходникам (lexer)
* Еще одно исправление подсветки для INI
* Новая сборка
* Исправлене подсветки комментариев в INI
* Новая сборка
* Изменения в подсветке для INI
* fix
* Добавил подсветку для Desktop и Spec файлов
* Добавил вывод отладочной инфы в процедуру
* Исправил подсветку комментариев в TCL
* Оптимизация процедур
* Добавлена подсветка и навигация по HTML. Исправлена подсветка XML
* Новая сборка
* Добавил иконку для изображений
* Добавил иконки для perl
* Fix
* Исправлена подсветка и навигация по коду для Ruby
* Обновил список изменений
* Исправлено сохранение сессии в редакторе (открытие папки и файлов при следующем запуске)
* Добавлена новая секция UserSession
* Исправление ошибки при открытии файла
* Добавлена поддержка INI-файлов (подсветка
* Добавлена поддержка perl
* Добавил икогнку для файлов git
* Новая сборка
* Добавлены иконуи для ключей и сертификатов. Изменен поиск иконки (вощзвращает теерь с размером)
* Новая чборка
* Реализован двухпанельный режим работы (вертиикальное разделение)
* Test
* Тесты
* TEsting drone build
* ДОбавил сборку в drone
* Исправлена ошибка при открытии ansible.cfg
* Добавил деактивацию кнопки 'Создать репу' если не выбран активный проект (не открыто ни одного каталога/папки)
* Добавлены команды git init и git config (зачаток). Изменен диалог клонирования репозитория (добавлена кнопка Создать репозиторий)
* Исправил ошибку git при открытии файла или каталога если репозиторий не инициализирован (нет .git каталога внутри проекта)
* Переименовал файл
* Добавил скриты сборки rpm
* Добавлено обрамление выделенного текста прии нажатии '_' в markdown
* Исправление подсветки
* Добавлена поддержка markdown (подсветка
* Обновил описание
* Новая сборка
* Исправлена ошибка с закрытием файлов в редакторе при закрытии папки
* Новая сборка
* Переделана процедура определения активного проекта. Исправлено определение ветки git. Теперь можно нормально работать в двух и более открытых проектах (каталогах/папках)
* Новая сборка
* Доделан вид диалога поиска по файлам
* Исправлен поиск имени функции
* Новая сборка
* Добавлен диалог клонирования репозитория
* Добавил разделитель
* Исправлено переключение вкладок при закрытии
* Исправлено закрытиие вкладки Git по нажатию соотв. кнопки в панели инструментов
* Добавлен пункт 'Закрыть всё'
* Новая сборка
* Исправлено соответствие открытого файла в редакторе и выделение этого файла в дереве
* Исправлено переключение отображения панели (лево/право) в без перезапуска программы.
* Украшательства интерфейса - Реакция на нажатие кнопки в панели инструментов теперь зависит от контекста
* Добавлено включение отключение отображения Меню
* Добавлено копирование текущей строки в буфер по Atl+Y
* Исправлена ошибка с отображением файловой панели
* Добавлены и исправлены функции отображения меню
* Фикс
* Добавлен параметр statusBarShow - показ строки статуса
* Добавлены переводы
* Добавлена проверка параметров вызова файл или просто строка
* Новая сборка
* Добавлен вывод сообщений об ошибке в диалоге
* Добавлено обновления списка файлов в дереве
* Добавлена процедура вывода информационного сообщения
* Добавлена команда Git::Reset (git reset _file_) на кнопке в диалоге. Для отмены 'git add'
* Добавлена кнопка Обновление в диалог работы с Git
* Исправление процедуры поиска наименования функции
* Фиксы диалога работы с Git (работа с выделенными файлами в списках)
* Test
* Фиксы и тесты работы с git
* test
* Исправление выборанескольких файлов в диалоге Git
* Новая сборка
* Украшательства
* Новая сборка
* Исправление рег. выражения чтения файлов командой git status
* Настройки темы
* Исправлено рег. выпражение определения mime типа файла
* Ntvs
* Новая сборка
* Добавил очистку текстовых полей при добавлении файлов в коммит
* Исправрелдение Git::Commit (индексация всех файлов в проекте)
* Изменения
* Фиксы
* Test
* Исправления глюков
* Украшательства строки статуса
* Добавлен просмотрщик изображений
* Добавил рамку кону ввода номера
* Добавлен диалог перехода по номеру строки Ctrl-G
* Добавлено определение типа файла
* Новая сборка
* Добавил удаление артефактов сборки пакета
* Новая сборка
* Fix
* Добавлена подсветка имен файлов в выводе git show
* Новая сборка
* Допилдивание процедуры автоввода имен переменных
* Небольшие правки в подсказках по переменным
* Новая сборка
* Исправлена подсветка SHELL переменных а YAML файлах (ansible
* Fix
* Новая сборка. Добавлена подсказка по переменным при вводе.
* Добавлено определение символа переменной
* fackup
* Определение коррректного положения встроенного окна
* Новая сборка
* Добавлен вывод подсказки при вводе переменных
* Добавлены опции для включсения полджсказок по переменным и процедурам
* Новая сборка
* Исправления гуя
* Fix
* Фикс
* Добавил диалог создания и переключения git-веток
* Создание ветки
* Фикс
* Новые иконки
* Косметические изменения
* Ченю push
* Ченю push
* Починил push
* Добавлены новые иконки
* Обработка ошибок
* Обработка ошибок
* Новая сборка
* Исправлена ошибка при клике на списке с файлами
* New build
* Сделал просмотр изменений из истории
* Добавлено обновление лога изменений
* Новый билд
* Исправление обновления диалога
* Fix
* Добавлен перевод
* git reflog
* Добавлен интерфейс работы с Git
* Новый релиз
* Исправил ошибку если нет изменений
* Начало работ по поддержке git
* New build
* Bug fix
* Добавлен диалог поиска строки в файлах в текущем каталоге. Используется 'grep -r'.
* Добавлены настройки для системной команды поиска в фвайлах
* Добавлено рекурсивное чтение каталога при открытии. Диалог поиска теперь работает раздельно при разделении окна. Диалог навигации по функци так-же работает раздельно
* Добавлены ключевые слова для подстветки питона
* Добавлена проверка на отсутствие файла и удаление из дерева
-- svkalinin <svk@nuk-svk.ru> Sun, 18 Sep 2022 10:46:59 +0300
projman (2.0.0-alfa7) stable; urgency=medium
* Добавлен поиск переменной в тексте после открытия файла где она указана
* Исправлена ошибка при запуске
-- Sergey Kalinin <svkalinin@samsonpost.ru> Fri, 16 Sep 2022 16:37:17 +0300
projman (2.0.0-alfa6) stable; urgency=medium
* Новая сборка
* Исправил сохранение открытого каталога в настройках
* Рефакторинг
* Переделал дилог навигации по переменным
* Исправил ошибку
* Добавлен еще один каталог с переменными - default
* Добавлено сохранение состояния редактора (открытые каталоги
* Изменения в диалоге поиска
* Изменения в диалоге поиска
* Отображение горизонтальной полосы прокрутки в зависимости от переноса строк в редакторе
* Установка фокуса на текст в редакторе при щелчке на заголовок вкладки
* Сделал перемещение курсора в такуюже позицию в тексте при разделении окна редактора
* Добавлено горизонтальное разделение окна редактора. Исправлено удаление строки по Alt+R - реперь строка удаляется полностью вместе с символами переноса. Исправлено сохранение нового файла (untitled) но всеравно как-то криво.
* Изменения по чтению и отображению переменных по файлам. Причесал диалог
-- svkalinin <svk@nuk-svk.ru> Fri, 2 Sep 2022 21:42:40 +0300
projman (2.0.0-alfa5) stable; urgency=medium
* Добавил поддержку ruby
* Исправлен выход окна со списком функций за пределы экрана. Поиск и замена теперь работает. Добавлены некоторые иконки для файлов
* Начало реализации процедуры поиска и замены (поиск криво но работает)
* Fix
* Исправлено закерытие вкладки по щелчку мыши. Добавлена настройка переноса строк в редакторе. Добавлены сочетания клавиш ctrl+pgup cntrl+pgdown для переключения между вкладками редактора. Добавлен диалог закрытия папки (каталога)
* Укоротил имя корневого каталога в дереве
* Добавлены ключиевые слова GO
* Исправлена подсветка ключевых слов tcl и добавлены виджеты
* Исправлена некорректная установка иконки на каталог
* Добавлены горячие клавиши для удаления слова
* Добавлены сочетания клавиш для удаления слова
-- svkalinin <svk@nuk-svk.ru> Fri, 26 Aug 2022 12:36:14 +0300
projman (2.0.0-alfa4) stable; urgency=medium
* Добавлена поддержка python. Обновлена библиотека иконок.
* Исправлена установка фокуса на окно диалога GotoFunctionDialog и обратно на текст. Переделан механизм чтения структуры файла и добавлены команды для sh (bash)
* Добавлены настройки темы для диалога навигации по функциям
* Добавлена иконка shell (*.sh)
* Исправлено комментирование строк
* Добавлен диалог навигации по структуре (процедурам) по Ctrl+F. Исправлена ошибка при закрытии файлов (функции из дерева теперь удаляются).
* Добавил цвет фона для панели с номерами строк
-- svkalinin <svk@nuk-svk.ru> Wed, 17 Aug 2022 21:37:06 +0300
projman (2.0.0-alfa3) stable; urgency=medium
* Убрал доки по tcl
* Слегка поменял стиль оформления
-- Sergey Kalinin <svkalinin@samsonpost.ru> Wed, 17 Aug 2022 16:52:22 +0300
projman (2.0.0-alfa2) stable; urgency=medium
* Добавлен выбор расположения боковой панели
* Добавлено выделение всех слов в тексте по двойному щелчку мышой на любом слове
* Исправлено чтение структуры GO файлов: корректное отображение в дереве функций возвращающих значения разных типов
* Добавлена подсветка скобок
* Новая сборка
* Исправлены процедуры comment/uncomment
* Изменены имена переенных
* Изменены имена переменных
* Добавлена запись номера сборки (build) в исходник
* Добавлено меню Помощь -> О программе. Добавлено окно 'О программе'
* Исправлен поиск процедуры в тексте по клику в дереве
* Исправлен поиск процедуры в тексте по клику в дереве. Исправлено отображение позиции курсора в строке статуса
* ДОбавлены иконки для некоторых типов файлов
* Добавлено отображение структуры исходника в дереве (функции (go) и процедуры (tcl))
* Добавлено кодирование изображения в base64 и вставка в редактируемый текст
* Добавлены шрифт и цвет шриыта для общего интерфейса
* Исправлено комментирование выделенного фрагмента (последняя строка) Исправлено закрытие untitled вкладок
* Исправлено комментирование выделенных строк
* Добавлена подсветка для GO
* Добавлена подстка для GO
* Исправлено подключение требуемой процедуры подсветки
* Убрал вставку закрывающихся кавычек в пустой строке. Ибо пока глючит.
* Добавлен диалог сохранения файла при закрытии вкладки редактора и при выходе из программы если есть несохраненные файлы
* Исправлен рабочий каталог
* Добавлены переводы для диалога
* Исправлен скрипт сборки пакета для Debian
* Убрал лишнее
* Исправил скрипт сборки пакета. Добавил .gitignore
* Исправил скрипт сборки пакета. Добавил .gitignore
-- svkalinin <svk@nuk-svk.ru> Thu, 21 Jul 2022 12:18:29 +0300
projman (2.0.0-alfa1) stable; urgency=medium
* Изменил(а) на 'README.md'
-- svk <svkalinin@samsonpost.ru> Thu, 21 Jul 2022 12:15:19 +0300
projman (2.0.0-alfa0) stable; urgency=medium
* Change readme
* Added Dark theme
* New version of ProjMan
* New version of ProjMan
* Some changes into GUI (tabs)
-- svkalinin <banzaj28@yandex.ru> Thu, 5 Jul 2018 08:41:18 +0300
-- Sergey Kalinin <svk@nuk-svk.ru> Wed, 20 Jul 2022 16:56:31 +0300

5
debian/install vendored
View File

@@ -1,7 +1,8 @@
projman /usr/bin/ projman /usr/bin/
changelog-gen /usr/bin/
lib/*.tcl /usr/share/projman/lib lib/*.tcl /usr/share/projman/lib
lib/msgs/* /usr/share/projman/lib/msgs lib/msgs/* /usr/share/projman/lib/msgs
theme /usr/share/projman/ theme /usr/share/projman/
README.md /usr/share/doc/projman README.md /usr/share/doc/projman
debian/projman.desktop /usr/share/applications projman.desktop /usr/share/applications
projman-48.png /usr/share/pixmaps projman.png /usr/share/pixmaps

0
errors
View File

View File

@@ -22,12 +22,19 @@ if [info exists env(LANG)] {
} }
set ::configDefault "\[General\] set ::configDefault "\[General\]
locale=$locale
cfgModifyDate='' cfgModifyDate=''
searchCommand=/usr/bin/grep
searchCommandOptions=-r -n -H
gitCommand=/usr/bin/git
# must return a mime type of file
fileTypeCommand=/usr/bin/file
fileTypeCommandOptions=-i -b
\[GUI\] \[GUI\]
locale=$locale
theme=dark theme=dark
toolBarShow=true toolBarShow=true
menuShow=true menuShow=true
statusBarShow=true
filesPanelShow=true filesPanelShow=true
filesPanelPlace=left filesPanelPlace=left
geometry=1024x768 geometry=1024x768
@@ -51,6 +58,12 @@ selectBorder=0
editorWrap=word editorWrap=word
lineNumberShow=true lineNumberShow=true
tabSize=4 tabSize=4
procedureHelper=false
variableHelper=true
multilineComments=true
\[UserSession\]
opened=
editedFiles=
" "
proc Config::create {dir} { proc Config::create {dir} {
set cfgFile [open [file join $dir projman.ini] "w+"] set cfgFile [open [file join $dir projman.ini] "w+"]
@@ -70,6 +83,7 @@ proc Config::read {dir} {
} }
proc Config::write {dir} { proc Config::write {dir} {
global activeProject editors
set cfgFile [ini::open [file join $dir projman.ini] "w"] set cfgFile [ini::open [file join $dir projman.ini] "w"]
foreach section [array names ::cfgINIsections] { foreach section [array names ::cfgINIsections] {
foreach key $::cfgINIsections($section) { foreach key $::cfgINIsections($section) {
@@ -79,9 +93,29 @@ proc Config::write {dir} {
set systemTime [clock seconds] set systemTime [clock seconds]
# Set a config modify time (i don't know why =))' # Set a config modify time (i don't know why =))'
ini::set $cfgFile "General" cfgModifyDate [clock format $systemTime -format "%D %H:%M:%S"] ini::set $cfgFile "General" cfgModifyDate [clock format $systemTime -format "%D %H:%M:%S"]
ini::set $cfgFile "UserSession" editedFiles ""
# Save an top level window geometry into config # Save an top level window geometry into config
ini::set $cfgFile "GUI" geometry [wm geometry .] ini::set $cfgFile "GUI" geometry [wm geometry .]
if {[info exists activeProject] !=0 && $activeProject ne ""} {
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 "UserSession" opened ""
ini::set $cfgFile "UserSession" editedFiles ""
}
# puts $editors
ini::commit $cfgFile ini::commit $cfgFile
ini::close $cfgFile ini::close $cfgFile

File diff suppressed because it is too large Load Diff

View File

@@ -15,9 +15,105 @@ namespace eval FileOper {
{"All files" *} {"All files" *}
} }
proc GetFileMimeType {fileFullPath {opt ""}} {
global cfgVariables
# Проверям наличие программы в системе, если есть то добавляем опции
# если нет то используем тиклевый пакет
if [file exists $cfgVariables(fileTypeCommand)] {
set cmd exec
lappend cmd $cfgVariables(fileTypeCommand)
foreach _ [split $cfgVariables(fileTypeCommandOptions) " "] {
lappend cmd $_
}
} else {
set cmd [list eval ::fileutil::magic::filetype]
}
# lappend cmd $activeProject
lappend cmd $fileFullPath
# puts $cmd
catch $cmd pipe
# puts $pipe
if [regexp -nocase -- {(\w+)/([\w\-_\.]+); charset=([[:alnum:]-]+)} $pipe m fType fExt fCharset] {
puts "$fType $fExt $fCharset"
}
switch $opt {
"charset" {
if [info exists fCharset] {
return $fCharset
}
}
}
# линуксовый file не всегда корректно определяет тип файла
# используем пакет из tcl
lassign [::fileutil::fileType $fileFullPath] fType fBinaryType fBinaryInterp
puts "File type is $fType, $fBinaryType, $fBinaryInterp"
switch $fType {
"binary" {
return false
}
"text" {
return text
}
"image" {
return false
}
default {
return false
}
}
}
## GETTING FILE ATTRIBUTES ##
proc GetFileAttr {file {opt ""}} {
global tcl_platform
set fileAttribute ""
# get file modify time
switch $opt {
attr {
if {$tcl_platform(platform) == "windows"} {
set unixTime [file mtime $file]
set modifyTime [clock format $unixTime -format "%d/%m/%Y, %H:%M"]
} elseif {$tcl_platform(platform) == "mac"} {
} elseif {$tcl_platform(platform) == "unix"} {
set unixTime [file mtime $file]
set modifyTime [clock format $unixTime -format "%d/%m/%Y, %H:%M"]
}
return $modifyTime
}
size {
# get file size
set size [file size $file]
if {$size < 1024} {
set fileSize "$size b"
}
if {$size >= 1024} {
set s [expr ($size.0) / 1024]
set dot [string first "\." $s]
set int [string range $s 0 [expr $dot - 1]]
set dec [string range $s [expr $dot + 1] [expr $dot + 2]]
set fileSize "$int.$dec Kb"
}
if {$size >= 1048576} {
set s [expr ($size.0) / 1048576]
set dot [string first "\." $s]
set int [string range $s 0 [expr $dot - 1]]
set dec [string range $s [expr $dot + 1] [expr $dot + 2]]
set fileSize "$int.$dec Mb"
}
return $fileSize
}
}
}
proc OpenDialog {} { proc OpenDialog {} {
global env global env project activeProject
if [info exists activeProject] {
set dir $activeProject
} else {
set dir $env(HOME) set dir $env(HOME)
}
set fullPath [tk_getOpenFile -initialdir $dir -filetypes $::types -parent .] set fullPath [tk_getOpenFile -initialdir $dir -filetypes $::types -parent .]
set file [string range $fullPath [expr [string last "/" $fullPath]+1] end] set file [string range $fullPath [expr [string last "/" $fullPath]+1] end]
regsub -all "." $file "_" node regsub -all "." $file "_" node
@@ -26,7 +122,7 @@ namespace eval FileOper {
set name [file rootname $file] set name [file rootname $file]
set ext [string range [file extension $file] 1 end] set ext [string range [file extension $file] 1 end]
if {$fullPath != ""} { if {$fullPath != ""} {
puts $fullPath # puts $fullPath
return $fullPath return $fullPath
} else { } else {
return return
@@ -34,37 +130,96 @@ namespace eval FileOper {
} }
proc OpenFolderDialog {} { proc OpenFolderDialog {} {
global env global env activeProject
#global tree node types dot env noteBook fontNormal fontBold fileList noteBook projDir activeProject imgDir editor rootDir #global tree node types dot env noteBook fontNormal fontBold fileList noteBook projDir activeProject imgDir editor rootDir
# set dir $projDir # set dir $projDir
if [info exists activeProject] {
set dir $activeProject
} else {
set dir $env(HOME) set dir $env(HOME)
}
set fullPath [tk_chooseDirectory -initialdir $dir -parent .] set fullPath [tk_chooseDirectory -initialdir $dir -parent .]
set file [string range $fullPath [expr [string last "/" $fullPath]+1] end] # set file [string range $fullPath [expr [string last "/" $fullPath]+1] end]
regsub -all "." $file "_" node # regsub -all "." $file "_" node
set dir [file dirname $fullPath] # set dir [file dirname $fullPath]
# EditFile .frmBody.frmCat.noteBook.ffiles.frmTreeFiles.treeFiles $node $fullPath # # EditFile .frmBody.frmCat.noteBook.ffiles.frmTreeFiles.treeFiles $node $fullPath
puts $fullPath # # puts $fullPath
# if ![info exists activeProject] {
# set activeProject $fullPath
# }
# .frmStatus.lblGitLogo configure -image git_logo_20x20
# .frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
return $fullPath return $fullPath
} }
proc CloseFolder {} {
global tree nbEditor activeProject
set treeItem [$tree selection]
set parent [$tree parent $treeItem]
while {$parent ne ""} {
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 "$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
}
}
proc CloseAll {} { proc CloseAll {} {
global nbEditor modified global nbEditor modified
foreach nbItem [array names modified] { foreach nb2Item [.frmWork.nbEditor2 tabs] {
if {$modified($nbItem) eq "true"} { .frmWork.nbEditor2 forget $nb2Item
$nbEditor select $nbItem }
puts "close tab $nbItem" if {[lsearch -exact [.frmWork.panelNB panes] .frmWork.nbEditor2] != -1} {
if {[Close] eq "cancel"} {return "cancel"} .frmWork.panelNB forget .frmWork.nbEditor2
}
foreach nbItem [$nbEditor tabs] {
catch {$nbEditor select $nbItem}
if {[Close] eq "cancel"} {
return "cancel"
} }
} }
} }
proc Close {} { proc Close {} {
global nbEditor modified tree global nbEditor modified tree editors
set nbItem [$nbEditor select] set nbItem [$nbEditor select]
puts "close tab $nbItem" # puts "close tab $nbItem"
if {$nbItem == ""} {return} if {$nbItem == ""} {return}
if [info exists modified($nbItem)] {
if {$modified($nbItem) eq "true"} { if {$modified($nbItem) eq "true"} {
set answer [tk_messageBox -message [::msgcat::mc "File was modifyed"] \ set answer [tk_messageBox -message [::msgcat::mc "File was modifyed"] \
-icon question -type yesnocancel \ -icon question -type yesnocancel \
@@ -75,6 +230,7 @@ namespace eval FileOper {
cancel {return "cancel"} cancel {return "cancel"}
} }
} }
}
$nbEditor forget $nbItem $nbEditor forget $nbItem
destroy $nbItem destroy $nbItem
set treeItem "file::[string range $nbItem [expr [string last "." $nbItem] +1] end ]" set treeItem "file::[string range $nbItem [expr [string last "." $nbItem] +1] end ]"
@@ -90,15 +246,30 @@ namespace eval FileOper {
$tree delete $treeItem $tree delete $treeItem
} }
} }
if [info exists modified($nbItem)] {
unset 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 {} { proc Save {} {
global nbEditor tree env global nbEditor tree env activeProject
if [info exists activeProject] {
set dir $activeProject
} else {
set dir $env(HOME)
}
set nbEditorItem [$nbEditor select] set nbEditorItem [$nbEditor select]
puts "Saved editor text: $nbEditorItem" puts "Saved editor text: $nbEditorItem"
if [string match "*untitled*" $nbEditorItem] { if [string match "*untitled*" $nbEditorItem] {
set filePath [tk_getSaveFile -initialdir $env(HOME) -filetypes $::types -parent .] set filePath [tk_getSaveFile -initialdir $dir -filetypes $::types -parent .]
if {$filePath eq ""} { if {$filePath eq ""} {
return return
} }
@@ -107,7 +278,7 @@ namespace eval FileOper {
$nbEditor tab $nbEditorItem -text $fileName $nbEditor tab $nbEditorItem -text $fileName
# set treeitem [Tree::InsertItem $tree {} $filePath "file" $fileName] # set treeitem [Tree::InsertItem $tree {} $filePath "file" $fileName]
set lblName "lbl[string range $nbEditorItem [expr [string last "." $nbEditorItem] +1] end]" set lblName "lbl[string range $nbEditorItem [expr [string last "." $nbEditorItem] +1] end]"
$nbEditorItem.$lblName configure -text $filePath $nbEditorItem.header.$lblName configure -text $filePath
} else { } else {
set treeItem "file::[string range $nbEditorItem [expr [string last "." $nbEditorItem] +1] end ]" set treeItem "file::[string range $nbEditorItem [expr [string last "." $nbEditorItem] +1] end ]"
set filePath [Tree::GetItemID $tree $treeItem] set filePath [Tree::GetItemID $tree $treeItem]
@@ -117,7 +288,7 @@ namespace eval FileOper {
puts -nonewline $f $editedText puts -nonewline $f $editedText
puts "$f was saved" puts "$f was saved"
close $f close $f
ResetModifiedFlag $nbEditorItem ResetModifiedFlag $nbEditorItem $nbEditor
} }
proc SaveAll {} { proc SaveAll {} {
@@ -142,19 +313,31 @@ namespace eval FileOper {
} }
} }
proc ReadFolder {directory} { proc ReadFolder {directory {parent ""}} {
global tree dir global tree dir lexers project
puts "Read the folder $directory" puts "Read the folder $directory"
set rList "" set rList ""
if {[catch {cd $directory}] != 0} { if {[catch {cd $directory}] != 0} {
return "" return ""
} }
set parent [Tree::InsertItem $tree {} $directory "directory" $directory] 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"} { # if {[ $tree item $parent -open] eq "false"} {
# $tree item $parent -open true # $tree item $parent -open true
# } else { # } else {
# $tree item $parent -open false # $tree item $parent -open false
# } # }
# Проверяем наличие списка каталогов для спецобработки
# и если есть читаем в список (ножно для ansible)
if {[dict exists $lexers ALL varDirectory] == 1} {
foreach i [split [dict get $lexers ALL varDirectory] " "] {
# puts "-------- $i"
lappend dirListForCheck [string trim $i]
}
}
# Getting an files and directorues lists # Getting an files and directorues lists
foreach file [glob -nocomplain *] { foreach file [glob -nocomplain *] {
lappend rList [list [file join $directory $file]] lappend rList [list [file join $directory $file]]
@@ -164,15 +347,29 @@ namespace eval FileOper {
lappend lstFiles $file lappend lstFiles $file
} }
} }
foreach file [glob -nocomplain .?*] {
if {$file ne ".."} {
lappend rList [list [file join $directory $file]]
if [file isdirectory $file] {
lappend lstDir $file
} else {
lappend lstFiles $file
}
}
}
# Sort lists and insert into tree # Sort lists and insert into tree
if {[info exists lstDir] && [llength $lstDir] > 0} { if {[info exists lstDir] && [llength $lstDir] > 0} {
foreach f [lsort $lstDir] { foreach f [lsort $lstDir] {
puts " Tree insert item: [Tree::InsertItem $tree $parent [file join $directory $f] "directory" $f]" set i [Tree::InsertItem $tree $parent [file join $directory $f] "directory" $f]
# puts "Tree insert item: $i $f]"
ReadFolder [file join $directory $f] $i
unset i
} }
} }
if {[info exists lstFiles] && [llength $lstFiles] > 0} { if {[info exists lstFiles] && [llength $lstFiles] > 0} {
foreach f [lsort $lstFiles] { foreach f [lsort $lstFiles] {
puts "Tree insert item: [Tree::InsertItem $tree $parent [file join $directory $f] "file" $f]" Tree::InsertItem $tree $parent [file join $directory $f] "file" $f
# puts "Tree insert item: "
} }
} }
# Чтение структуры файлов в каталоге # Чтение структуры файлов в каталоге
@@ -195,26 +392,84 @@ namespace eval FileOper {
$txt see 1.0 $txt see 1.0
} }
proc Edit {fileFullPath} { proc Edit {fileFullPath {nbEditor .frmWork.nbEditor}} {
global nbEditor tree global tree
if {[file exists $fileFullPath] == 0} {
return false
} else {
puts "$fileFullPath File type [::fileutil::magic::filetype $fileFullPath]"
set fileType [FileOper::GetFileMimeType $fileFullPath]
}
switch $fileType {
"text" {
# return text
}
"image" {
# return image
}
false {
return
}
}
set filePath [file dirname $fileFullPath] set filePath [file dirname $fileFullPath]
set fileName [file tail $fileFullPath] set fileName [file tail $fileFullPath]
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName
set itemName "$nbEditor.$itemName" set itemName "$nbEditor.$itemName"
set treeItemName [Tree::InsertItem $tree {} $fileFullPath "file" $fileName] set treeItemName [Tree::InsertItem $tree {} $fileFullPath "file" $fileName]
# переместим указатель на нужный файл в дереве
Tree::SelectItem $treeItemName
if {[winfo exists $itemName] == 0} { if {[winfo exists $itemName] == 0} {
NB::InsertItem $nbEditor $fileFullPath "file" NB::InsertItem $nbEditor $fileFullPath "file"
Editor::Editor $fileFullPath $nbEditor $itemName Editor::Editor $fileFullPath $nbEditor $itemName
ReadFile $fileFullPath $itemName ReadFile $fileFullPath $itemName
$itemName.frmText.t highlight 1.0 end $itemName.frmText.t highlight 1.0 end
ResetModifiedFlag $itemName ResetModifiedFlag $itemName $nbEditor
$itemName.frmText.t see 1.1 $itemName.frmText.t see 1.1
} }
$nbEditor select $itemName $nbEditor select $itemName
Editor::ReadStructure $itemName.frmText.t $treeItemName Editor::ReadStructure $itemName.frmText.t $treeItemName
GetVariablesFromFile $fileFullPath
$itemName.frmText.t.t mark set insert 1.0
$itemName.frmText.t.t see 1.0
focus -force $itemName.frmText.t.t focus -force $itemName.frmText.t.t
.frmStatus.lblSize configure -text [GetFileAttr $fileFullPath "size"]
.frmStatus.lblEncoding configure -text [GetFileMimeType $fileFullPath "charset"]
return $itemName return $itemName
} }
proc FindInFiles {} {
global nbEditor activeProject
set res ""
set txt ""
set str ""
set nbEditorItem [$nbEditor select]
if {$nbEditorItem ne ""} {
set txt $nbEditorItem.frmText.t
# set txt [focus]
set selIndex [$txt tag ranges sel]
if {$selIndex ne ""} {
set selBegin [lindex [$txt tag ranges sel] 0]
set selEnd [lindex [$txt tag ranges sel] 1]
set str [$txt get $selBegin $selEnd]
# puts $str
set res [SearchStringInFolder $str]
}
}
if [FindInFilesDialog $txt $res] {
.find.entryFind delete 0 end
.find.entryFind insert end $str
}
}
proc ReplaceInFiles {} {
global nbEditor
return
# set selIndex [$txt tag ranges sel]
# set selBegin [lindex [$txt tag ranges sel] 0]
# set selEnd [lindex [$txt tag ranges sel] 1]
# puts [$txt get [$txt tag ranges sel]]
# }
} }

853
lib/git.tcl Normal file
View File

@@ -0,0 +1,853 @@
######################################################
# ProjMan 2
# Distributed under GNU Public License
# Author: Sergey Kalinin svk@nuk-svk.ru
# Copyright (c) "SVK", 2022, https://nuk-svk.ru
######################################################
# Git module
# usage a system git command
#######################################################
namespace eval Git {
variable gitCommand
proc GetConfig {option} {
global activeProject cfgVariables
set confOptions {
remote.origin.url
user.user
user.email
init.defaultbranch
branch.master.remote
}
if {$activeProject ne ""} {
cd $activeProject
}
set cmd exec
lappend cmd $cfgVariables(gitCommand)
lappend cmd "config"
switch $option {
all {
lappend cmd "-l"
}
default {
lappend cmd "--get"
lappend cmd "$option"
}
}
# lappend cmd $activeProject
catch $cmd pipe
foreach line [split $pipe "\n"] {
lappend res $line
}
return $res
}
proc Checkout {opt {ent ".branch.entBranch"}} {
global cfgVariables activeProject
set cmd exec
set d [pwd]
if {$activeProject ne ""} {
cd $activeProject
}
lappend cmd $cfgVariables(gitCommand)
lappend cmd "checkout"
# lappend cmd "-s"
# lappend cmd "--"
# lappend cmd $activeProject
switch $opt {
switchBranch {
set branch [.branch.lBox get [.branch.lBox curselection]]
lappend cmd "[string trim $branch]"
}
new {
lappend cmd "-b"
lappend cmd "[$ent get]"
# puts "Branch [$ent get]"
}
}
catch $cmd pipe
puts $cmd
puts $pipe
if [regexp -nocase -- {^error:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe
return
}
foreach line [split $pipe "\n"] {
lappend res $line
}
# cd $d
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
FileOper::ReadFolder $activeProject
if [info exists res] {
return $res
}
}
proc Branches {opt} {
global cfgVariables activeProject
set cmd exec
set d [pwd]
if {$activeProject ne "" && [file isdirectory $activeProject] == 1} {
cd $activeProject
if ![file exists .git] {
return
}
} else {
return ""
}
puts $activeProject
lappend cmd $cfgVariables(gitCommand)
lappend cmd "branch"
# lappend cmd "-s"
# lappend cmd "--"
# lappend cmd $activeProject
switch $opt {
current {
lappend cmd "--show-current"
}
list {
lappend cmd "-l"
}
}
catch $cmd pipe
if [regexp -nocase -- {^fatal:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe
return
}
foreach line [split $pipe "\n"] {
lappend res $line
}
cd $d
if [info exists res] {
return $res
}
}
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"
lappend cmd "-s"
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"] {
lappend res $line
}
if [info exists res] {
return $res
}
}
proc Diff {f} {
global cfgVariables activeProject
set cmd exec
set res ""
lappend cmd $cfgVariables(gitCommand)
lappend cmd "diff"
lappend cmd "--"
lappend cmd [file join $activeProject [string trimleft $f "../"]]
catch $cmd pipe
puts $cmd
if [regexp -nocase -- {^fatal:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe
return
}
foreach line [split $pipe "\n"] {
lappend res $line
}
return $res
}
proc Commit {w} {
global cfgVariables activeProject
set txt $w.body.tCommit
set listBox $w.body.lCommit
set description [string trim [$txt get 0.0 end]]
puts $description
set cmd exec
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]] {
append cmd " [file join $activeProject $item]"
}
if {$description eq ""} {
set answer [tk_messageBox -message [::msgcat::mc "Empty commit description"] \
-icon info -type ok \
-detail [::msgcat::mc "You must enter a commit description"]]
switch $answer {
ok {return "cancel"}
}
} 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"] {
lappend res $line
}
return $res
}
}
proc Pull {} {
global cfgVariables activeProject
}
# Вызов диалога авторизации если ссылка на репу по http
# Если ссылка по ssh то вызов Push
proc PushPrepare {} {
global cfgVariables activeProject gitUser gitPassword
# set cmd exec
cd $activeProject
set url [Git::GetConfig remote.origin.url]
puts $url
if [regexp -nocase -all -- {^(http|https)://(.+)} $url match proto address] {
Git::AuthorizationDialog "[::msgcat::mc "Authorization required"] [::msgcat::mc "for"] Git" $url
} else {
Git::Push $url
}
}
# /usr/bin/git push https://user:pass@git.nuk-svk.ru/repo.git
# /usr/bin/git push ssh://git@git.nuk-svk.ru/repo.git
proc Push {url} {
global cfgVariables activeProject gitUser gitPassword
set cmd exec
lappend cmd "$cfgVariables(gitCommand)"
cd $activeProject
lappend cmd "push"
lappend cmd "$url"
# lappend cmd "$activeProject"
# puts "$cmd"
catch $cmd pipe
puts $pipe
if [regexp -nocase -- {^fatal:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe
return
}
foreach line [split $pipe "\n"] {
# puts "$line"
lappend res $line
}
return $res
}
proc Merge {} {
global cfgVariables activeProject
}
proc Reflog {} {
global cfgVariables activeProject
set cmd exec
lappend cmd "$cfgVariables(gitCommand)"
lappend cmd "reflog"
lappend cmd "--"
lappend cmd "$activeProject"
# if [regexp -nocase -- {^fatal:} $pipe match] {
# return
# }
puts $cmd
catch $cmd pipe
# puts $pipe
foreach line [split $pipe "\n"] {
# puts "$line"
lappend res $line
}
return $res
}
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]]
set hash [string trim [lindex [split $commitString " "] 0]]
$w.body.t delete 1.0 end
$w.body.tCommit delete 1.0 end
set cmd exec
lappend cmd "$cfgVariables(gitCommand)"
lappend cmd "show"
lappend cmd "--pretty=format:\"%H;%an;%ae;%ad;%s\""
lappend cmd $hash
lappend cmd "--"
lappend cmd "$activeProject"
puts $cmd
catch $cmd pipe
# puts $pipe
set i 0
foreach line [split $pipe "\n"] {
if {$i == 0} {
set str [split $line ";"]
$w.body.tCommit inser end "Hash: [string trimleft [lindex $str 0] "\""]\n"
$w.body.tCommit inser end "Author: [lindex $str 1]\n"
$w.body.tCommit inser end "Email: [lindex $str 2]\n"
$w.body.tCommit inser end "Date: [lindex $str 3]\n"
$w.body.tCommit inser end "Description: [string trimright [lindex $str 4] "\""]\n"
} else {
# puts "$line"
$w.body.t inser end "$line\n"
}
incr i
# lappend res $line
}
$w.body.t highlight 1.0 end
$w.body.tCommit highlight 1.0 end
# return $res
}
proc ListBoxPress {w} {
if {[$w.body.lBox curselection] ne ""} {
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
}
$w.body.t delete 1.0 end
set i 0
foreach line [Git::Diff $fileName] {
puts $line
if {$i > 3} {
$w.body.t inser end "$line\n"
}
incr i
}
$w.body.t highlight 1.0 end
}
proc CommitAdd {w} {
global activeProject cfgVariables
# puts $values
set selectedItems [$w.body.lBox curselection]
set cmd exec
lappend cmd $cfgVariables(gitCommand)
lappend cmd "add"
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.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 {
Up {
Git::ListBoxPress $fr
}
Down {
Git::ListBoxPress $fr
}
}
}
proc DialogUpdate {w} {
global activeProject
# Git repo status
set lblText "$activeProject | [::msgcat::mc "Branch"]: [Git::Branches current]"
$w.header.lblGit configure -text $lblText
$w.body.t delete 1.0 end
$w.body.tCommit delete 1.0 end
$w.body.lCommit delete 0 end
$w.body.lBox delete 0 end
$w.body.lLog delete 0 end
foreach { word } [Git::Status] {
puts ">>$word"
if [regexp -nocase -- {([\w\s]+)([\s\w?]+)\s(../|)(.+?)} $word match v1 v2 v3 fileName] {
puts "$v1 $v2 $fileName"
# $fr.body.t delete 1.0 end
if {$v1 ne " "} {
$w.body.lCommit insert end $fileName
}
if {$v2 ne " "} {
$w.body.lBox insert end $fileName
}
}
}
# Git commit history
foreach { line } [Git::Reflog] {
# puts $line
$w.body.lLog insert end $line
}
focus -force $w.body.lBox
catch {
$w.body.lBox activate 0
$w.body.lBox selection set 0 0
Git::ListBoxPress $w
}
}
proc AddToplevel {lbl img {win_name .auth}} {
set cmd "destroy $win_name"
if [winfo exists $win_name] {destroy $win_name}
toplevel $win_name
wm transient $win_name .
wm title $win_name [::msgcat::mc "Add record"]
# wm iconphoto $win_name tcl
ttk::label $win_name.lbl -image $img -anchor nw
set frm [ttk::labelframe $win_name.frm -text $lbl -labelanchor nw]
grid columnconfigure $frm 0 -weight 1
grid rowconfigure $frm 0 -weight 1
set frm_btn [ttk::frame $win_name.frm_btn ]
ttk::button $frm_btn.btn_ok -image done_20x20 -command { }
ttk::button $frm_btn.btn_cancel -command $cmd -image cancel_20x20
grid $win_name.lbl -row 0 -column 0 -sticky nsw -padx 0 -pady 1 -rowspan 2
grid $frm -row 0 -column 1 -sticky nw -padx 2 -pady 2
grid $frm_btn -row 1 -column 1 -sticky sew -padx 0 -pady 0
pack $frm_btn.btn_cancel $frm_btn.btn_ok -side right -padx 5 -pady 5
#pack $frm_btn.btn_ok -side right -padx 2
bind $win_name <Escape> $cmd
return $frm
}
proc GetAuthData {url} {
global gitUser gitPassword
# puts [.auth_win.frm.ent_name get]
# puts [.auth_win.frm.ent_pwd get]
set gitUser [.auth_win.frm.ent_name get]
set gitPassword [.auth_win.frm.ent_pwd get]
if [regexp -nocase -all -- {^(http|https)://(.+)} $url match proto address] {
# puts $gitUser
# puts $gitPassword
if {$gitUser ne ""} {
append repoUrl "$proto"
append repoUrl "://"
append repoUrl "$gitUser"
}
if {$gitPassword ne ""} {
append repoUrl ":$gitPassword"
append repoUrl "@$address"
}
# puts $repoUrl
Git::Push $repoUrl
}
destroy .auth_win
}
proc AuthorizationDialog {txt url} {
global gitUser gitPassword
set frm [Git::AddToplevel "$txt" key_64x64 .auth_win]
wm title .auth_win [::msgcat::mc "Authorization"]
ttk::label $frm.lbl_name -text [::msgcat::mc "User name"]
ttk::entry $frm.ent_name
ttk::label $frm.lbl_pwd -text [::msgcat::mc "Password"]
ttk::entry $frm.ent_pwd
grid $frm.lbl_name -row 0 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_name -row 0 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_pwd -row 1 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_pwd -row 1 -column 1 -sticky nsew -padx 5 -pady 5
grid columnconfigure $frm 0 -weight 1
grid rowconfigure $frm 0 -weight 1
#set frm_btn [frame .add.frm_btn -border 0]
.auth_win.frm_btn.btn_ok configure -command "Git::GetAuthData $url"
}
proc BranchDialog {x y} {
global editors lexers newBranchName
variable win
# set txt $w.frmText.t
set win .branch
# set x [winfo rootx .frmWork]
# set y [winfo rooty .frmWork]
if { [winfo exists $win] } { destroy $win }
toplevel $win
wm transient $win .
wm overrideredirect $win 1
ttk::button $win.bAdd -image new_14x14 -compound left -text "[::msgcat::mc "Add new branch"]" \
-command {
grid forget .branch.lBox .branch.yscroll
grid .branch.entBranch
bind .branch <Return> "Git::Checkout new .branch.entBranch; destroy .branch"
}
ttk::entry $win.entBranch -textvariable newBranchName
listbox $win.lBox -width 30 -border 2 -yscrollcommand "$win.yscroll set" -border 1
ttk::scrollbar $win.yscroll -orient vertical -command "$win.lBox yview"
# pack $win.lBox -expand true -fill y -side left
# pack $win.yscroll -side left -expand false -fill y
grid $win.bAdd -column 0 -row 0 -columnspan 2 -sticky new
grid $win.lBox -column 0 -row 1
grid $win.yscroll -column 1 -row 1 -sticky nsw
set lst [Git::Branches all]
foreach { word } $lst {
$win.lBox insert end $word
}
focus -force $win.lBox
catch { $win.lBox activate 0 ; $win.lBox selection set 0 0 }
if { [set height [llength $lst]] > 10 } { set height 10 }
$win.lBox configure -height $height
bind $win <Escape> {
destroy .branch
break
}
bind $win.lBox <Escape> {
destroy .branch
break
}
bind $win.lBox <Return> {
Git::Checkout switchBranch
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
destroy .branch
}
bind $win.lBox <Any-Key> {}
bind $win.lBox <Double-Button-1> {
Git::Checkout switchBranch
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
destroy .branch
}
# Определям расстояние до края экрана (основного окна) и если
# оно меньше размера окна со списком то сдвигаем его вверх
set winGeom [winfo reqheight $win]
set topHeight [winfo height .]
# puts "$x, $y, $winGeom, $topHeight"
if [expr [expr $topHeight - $y] < $winGeom] {
set y [expr $topHeight - $winGeom]
}
wm geom $win +$x+$y
}
proc CloneDialog {} {
global activeProject
set win .clone
set x [winfo rootx .frmWork]
set y [winfo rooty .frmWork]
if { [winfo exists $win] } {
destroy $win
return
}
toplevel $win
wm transient $win .
wm overrideredirect $win 1
ttk::entry $win.entUrl
ttk::entry $win.entFolder
ttk::button $win.btnFolder -image folder -command {
set folderPath [tk_chooseDirectory -initialdir $env(HOME) -parent .]
.clone.entFolder insert end $folderPath
}
ttk::button $win.btnClone -compound left -image done_20x20 \
-text [::msgcat::mc "Clone repository"] \
-command {
set folderPath [.clone.entFolder get]
set repo [.clone.entUrl get]
if {$repo eq ""} {return}
if {$folderPath eq ""} {
set folderPath [tk_chooseDirectory -initialdir $env(HOME) -parent .]
if {$folderPath eq ""} {return}
}
set repoDir [file join $folderPath [string trimright [file rootname [file tail $repo]] "."]]
Git::Clone $repo $repoDir
FileOper::ReadFolder $repoDir
ReadFilesFromDirectory $repoDir $repoDir
destroy .clone
}
ttk::button $win.btnInit -compound left -image new_20x20 \
-text [::msgcat::mc "Init repository"] -command {
Git::Init
FileOper::ReadFolder $activeProject
ReadFilesFromDirectory $activeProject $activeProject
destroy .clone
}
if ![info exists activeProject] {
$win.btnInit configure -state disable
}
grid $win.entUrl -row 0 -column 0 -columnspan 2 -sticky new
grid $win.entFolder -row 1 -column 0 -sticky new
grid $win.btnFolder -row 1 -column 1 -sticky ew
grid $win.btnClone -row 2 -column 0 -columnspan 2 -sticky new
grid $win.btnInit -row 3 -column 0 -columnspan 2 -sticky new
bind $win <Escape> "destroy $win"
# Определям расстояние до края экрана (основного окна) и если
# оно меньше размера окна со списком то сдвигаем его вверх
set winGeom [winfo reqheight $win]
set topHeight [winfo height .]
# puts "$x, $y, $winGeom, $topHeight"
if [expr [expr $topHeight - $y] < $winGeom] {
set y [expr $topHeight - $winGeom]
}
wm geom $win +$x+$y
focus $win.entUrl
}
proc Dialog {} {
global cfgVariables activeProject nbEditor
variable fr
if [winfo exists $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 || [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
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
pack $fr.body -side top -expand true -fill both -padx 3
ttk::label $fr.body.lblUnindexed -justify left -padding {3 3} \
-text "[::msgcat::mc "Unindexed changes"]:"
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
ttk::scrollbar $fr.body.v -orient vertical -command "$fr.body.t yview"
ttk::scrollbar $fr.body.h -orient horizontal -command "$fr.body.t xview"
ctext $fr.body.t -xscrollcommand "$fr.body.h set" -yscrollcommand "$fr.body.v set" \
-font $cfgVariables(font) -relief flat -wrap none -linemap 0 \
-tabs "[expr {4 * [font measure $cfgVariables(font) 0]}] left" \
-tabstyle tabular -undo true -width 10
ttk::button $fr.body.bAdd -image forward_20x20 -compound center \
-command "Git::CommitAdd $fr"
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 -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"
ctext $fr.body.tCommit -tabstyle tabular -undo true \
-yscrollcommand "$fr.body.vCommit set" \
-font $cfgVariables(font) -relief flat -wrap word -linemap 0
ttk::button $fr.body.bCommit -image done_20x20 -compound left \
-text "[::msgcat::mc "Commit changes"]" \
-command "Git::Commit $fr; Git::DialogUpdate $fr"
ttk::button $fr.body.bPush -image doneall_20x20 -compound left \
-text "[::msgcat::mc "Push changes"]" \
-command "Git::PushPrepare; Git::DialogUpdate $fr"
ttk::label $fr.body.lblLog -padding {3 3} -text "[::msgcat::mc "Commit history"]:"
listbox $fr.body.lLog -border 0 \
-yscrollcommand "$fr.body.vLog set" -xscrollcommand "$fr.body.hLog set"
ttk::scrollbar $fr.body.vLog -orient vertical -command "$fr.body.lLog yview"
ttk::scrollbar $fr.body.hLog -orient horizontal -command "$fr.body.lLog xview"
# pack $txt -fill both -expand 1
# pack $fr.body.h -side bottom -fill x
grid $fr.body.lblUnindexed -column 0 -row 0 -sticky new -columnspan 4
grid $fr.body.lBox -column 0 -row 1 -sticky nsew -rowspan 2 -columnspan 2
grid $fr.body.yscroll -column 2 -row 1 -sticky nsw -rowspan 2
grid $fr.body.t -column 3 -row 1 -sticky nsew -columnspan 2
grid $fr.body.v -column 5 -row 1 -sticky nsw
grid $fr.body.h -column 3 -row 2 -sticky new -columnspan 2
grid $fr.body.bAdd -column 0 -row 3 -sticky nsw
grid $fr.body.bRemove -column 1 -row 3 -sticky nsw
grid $fr.body.lblCommitText -column 3 -row 3 -sticky nsew -columnspan 2
grid $fr.body.lCommit -column 0 -row 4 -sticky nsw -rowspan 3 -columnspan 2
grid $fr.body.vlCommit -column 2 -row 4 -sticky nsw -rowspan 3
grid $fr.body.tCommit -column 3 -row 4 -sticky nsew -columnspan 2
grid $fr.body.vCommit -column 5 -row 4 -sticky nsw
# grid $fr.body.hCommit -column 3 -row 5 -sticky new -columnspan 2
grid $fr.body.bCommit -column 3 -row 6 -sticky new
grid $fr.body.bPush -column 4 -row 6 -sticky new
grid $fr.body.lblLog -column 0 -row 7 -sticky nsw -columnspan 5
grid $fr.body.lLog -column 0 -row 8 -sticky nsew -columnspan 5
grid $fr.body.vLog -column 5 -row 8 -sticky nsw
grid $fr.body.hLog -column 0 -row 9 -sticky new -columnspan 5
grid rowconfigure $fr.body $fr.body.t -weight 1
grid columnconfigure $fr.body $fr.body.t -weight 1
grid rowconfigure $fr.body $fr.body.tCommit -weight 1
grid columnconfigure $fr.body $fr.body.tCommit -weight 1
# grid rowconfigure $fr.body $fr.body.lLog -weight 1
# grid columnconfigure $fr.body $fr.body.lLog -weight 1
# 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"
# $fr.unindexed.t delete 1.0 end
if {$v1 ne " "} {
$fr.body.lCommit insert end $fileName
}
if {$v2 ne " "} {
$fr.body.lBox insert end $fileName
}
}
}
catch { $fr.body.lBox activate 0 ; $fr.body.lBox selection set 0 0 }
bind $fr.header.lblGit <Button-1><ButtonRelease-1> {
Git::BranchDialog %X %Y
Git::DialogUpdate $Git::fr
}
bind $fr.body.lBox <Return> "Git::CommitAdd $fr"
bind $fr.body.lBox <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"
bind $fr.body.lLog <Return> "Git::Show $fr"
focus -force $fr.body.lBox
catch {
$fr.body.lBox activate 0
$fr.body.lBox selection set 0 0
Git::ListBoxPress $fr
}
# Git commit history
foreach { line } [Git::Reflog] {
# puts $line
$fr.body.lLog insert end $line
}
# End Git commit history
ctext::addHighlightClassForRegexp $fr.body.t files yellow {^diff.*$}
ctext::addHighlightClassForRegexp $fr.body.t paths #19a2a6 {@@.+@@}
ctext::addHighlightClassForRegexp $fr.body.t add green {^\+.*$}
ctext::addHighlightClassForRegexp $fr.body.t gremove grey {^\-.*$}
$fr.body.t highlight 1.0 end
ctext::addHighlightClassForRegexp $fr.body.tCommit stackControl lightblue {^[\w]+:}
}
}

View File

@@ -26,7 +26,6 @@ bind . <Control-Q> Quit
bind . <Control-eacute> Quit bind . <Control-eacute> Quit
bind . <Insert> Add bind . <Insert> Add
bind . <Delete> Del bind . <Delete> Del
bind . <Control-Return> Edit
bind . <F1> ShowHelpDialog bind . <F1> ShowHelpDialog
bind . <Control-n> Editor::New bind . <Control-n> Editor::New
bind . <Control-N> Editor::New bind . <Control-N> Editor::New
@@ -56,7 +55,9 @@ bind . <Control-K> {
} }
bind . <Control-s> {FileOper::Save} bind . <Control-s> {FileOper::Save}
bind . <Control-S> {FileOper::Save} bind . <Control-S> {FileOper::Save}
bind . <Alt-t> ViewFilesTree bind . <Alt-p> {ViewFilesTree true}
bind . <Button-3> {catch [PopupMenu %X %Y]}
#ttk::style configure TPanedwindow -background blue #ttk::style configure TPanedwindow -background blue
#ttk::style configure Sash -sashthickness 5 #ttk::style configure Sash -sashthickness 5
#ttk::style configure TButton -padding 60 -relief flat -bg black #ttk::style configure TButton -padding 60 -relief flat -bg black
@@ -68,16 +69,36 @@ if [info exists cfgVariables(theme)] {
} }
ttk::frame .frmMenu -border 0 -relief raised ttk::frame .frmMenu -border 0 -relief raised
ttk::frame .frmBody -border 1 -relief raised ttk::frame .frmBody -border 0 -relief raised
ttk::frame .frmStatus -border 0 -relief raised ttk::frame .frmStatus -border 0 -relief raised
pack .frmMenu -side top -padx 1 -fill x
pack .frmBody -side top -padx 1 -fill both -expand true if {$cfgVariables(menuShow) eq "true"} {
pack .frmStatus -side top -padx 1 -fill x # pack -side top -padx 1 -fill x
grid .frmMenu -row 0 -column 0 -sticky new
}
# pack .frmBody -side top -padx 1 -fill both -expand true
grid .frmBody -row 1 -column 0 -sticky nsew
if {$cfgVariables(statusBarShow) eq "true"} {
# pack .frmStatus -side top -padx 1 -fill x
grid .frmStatus -row 2 -column 0 -sticky sew
}
grid columnconfigure . .frmBody -weight 1
grid rowconfigure . .frmBody -weight 1
# pack .panel -expand true -fill both # pack .panel -expand true -fill both
# pack propagate .panel false # pack propagate .panel false
#pack [label .frmMenu.lbl -text "ddd"] #pack [label .frmMenu.lbl -text "ddd"]
pack [ttk::label .frmStatus.lblPosition -justify right] -side right
pack [ttk::label .frmStatus.lblGitLogo -justify left] -side left
pack [ttk::label .frmStatus.lblGit] -side left -expand true -fill x
bind .frmStatus.lblGit <Button-1><ButtonRelease-1> {
Git::BranchDialog %X %Y
}
pack [ttk::label .frmStatus.lblPosition -justify right] -side left -expand true -fill x
pack [ttk::label .frmStatus.lblSize -justify center] -side right -fill x
pack [ttk::label .frmStatus.lblEncoding -justify center] -side right -fill x
ttk::menubutton .frmMenu.mnuFile -text [::msgcat::mc "File"] -menu .frmMenu.mnuFile.m ttk::menubutton .frmMenu.mnuFile -text [::msgcat::mc "File"] -menu .frmMenu.mnuFile.m
GetFileMenu [menu .frmMenu.mnuFile.m] GetFileMenu [menu .frmMenu.mnuFile.m]
@@ -94,34 +115,47 @@ ttk::menubutton .frmMenu.mnuHelp -text [::msgcat::mc "Help"] -menu .frmMenu.mnuH
GetHelpMenu [menu .frmMenu.mnuHelp.m] GetHelpMenu [menu .frmMenu.mnuHelp.m]
pack .frmMenu.mnuHelp -side right pack .frmMenu.mnuHelp -side right
# PopUP menu
menu .popup
GetFileMenu .popup
GetEditMenu .popup
GetViewMenu .popup
set frmTool [ttk::frame .frmBody.frmTool] set frmTool [ttk::frame .frmBody.frmTool]
ttk::panedwindow .frmBody.panel -orient horizontal -style TPanedwindow ttk::panedwindow .frmBody.panel -orient horizontal -style TPanedwindow
pack propagate .frmBody.panel false # pack propagate .frmBody.panel false
pack .frmBody.frmTool -side left -fill y if {$cfgVariables(toolBarShow) eq "true"} {
pack .frmBody.panel -side left -fill both -expand true # pack .frmBody.frmTool -side left -fill y
grid .frmBody.frmTool -row 0 -column 0 -sticky nsw
}
# pack .frmBody.panel -side left -fill both -expand true
grid .frmBody.panel -row 0 -column 1 -sticky nesw
grid columnconfigure .frmBody .frmBody.panel -weight 1
grid rowconfigure .frmBody .frmBody.panel -weight 1
ttk::button $frmTool.btn_tree -command ViewFilesTree -image tree_24x24 ttk::button $frmTool.btn_tree -command ToolBtnTreePress -image tree_24x24
ttk::button $frmTool.btn_search -command FileOper::FindInFiles -image search_24x24
ttk::button $frmTool.btn_git -command Git::Dialog -image git_24x24
pack $frmTool.btn_tree -side top -padx 1 -pady 1 pack $frmTool.btn_tree $frmTool.btn_search $frmTool.btn_git -side top -padx 1 -pady 1
# #label $frmTool.lbl_logo -image tcl # #label $frmTool.lbl_logo -image tcl
# pack $frmTool.btn_quit -side bottom -padx 5 -pady 5 # pack $frmTool.btn_quit -side bottom -padx 5 -pady 5
# #pack $frmTool.lbl_logo -side bottom -padx 5 -pady 5 # #pack $frmTool.lbl_logo -side bottom -padx 5 -pady 5
# #
# # Дерево с полосами прокрутки # # Дерево с полосами прокрутки
set frmTree [ttk::frame .frmBody.frmTree] set frmTree [ttk::frame .frmBody.frmTree -border 0]
set tree [ttk::treeview $frmTree.tree -show tree \ set tree [ttk::treeview $frmTree.tree -show tree \
-xscrollcommand [list .frmBody.frmTree.h set] -yscrollcommand [list .frmBody.frmTree.v set]] -xscrollcommand [list .frmBody.frmTree.h set] \
-yscrollcommand [list .frmBody.frmTree.v set]]
# $tree heading #0 -text "Files tree" # $tree heading #0 -text "Files tree"
# $tree column #0 -anchor e # $tree column #0 -anchor e
ttk::scrollbar $frmTree.h -orient horizontal -command [list $frmTree.tree xview] ttk::scrollbar $frmTree.h -orient horizontal -command [list $frmTree.tree xview]
ttk::scrollbar $frmTree.v -orient vertical -command [list $frmTree.tree yview] ttk::scrollbar $frmTree.v -orient vertical -command [list $frmTree.tree yview]
bind $tree <Double-ButtonPress-1> {Tree::DoublePressItem $tree} bind $tree <Double-ButtonPress-1> {Tree::DoublePressItem $tree}
bind $tree <ButtonRelease-1> {Tree::PressItem $tree; break} bind $tree <ButtonRelease-1> {Tree::PressItem $tree; break}
@@ -133,11 +167,21 @@ grid rowconfigure $frmTree 0 -weight 1
set frmWork [ttk::frame .frmWork -border 0 -relief flat] set frmWork [ttk::frame .frmWork -border 0 -relief flat]
ttk::panedwindow $frmWork.panelNB -orient horizontal -style TPanedwindow
# grid $frmWork.panelNB -row 0 -column 0 -sticky nesw
pack $frmWork.panelNB -side left -fill both -expand true
set nbEditor [ttk::notebook $frmWork.nbEditor] set nbEditor [ttk::notebook $frmWork.nbEditor]
pack $nbEditor -side left -fill both -expand true
# grid $nbEditor -row 0 -column 0 -sticky nsew # grid $nbEditor -row 0 -column 0 -sticky nsew
pack $nbEditor -fill both -expand true # grid columnconfigure $frmWork $nbEditor -weight 1
# grid rowconfigure $frmWork $nbEditor -weight 1
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 # Create an image CLOSE for tab
ttk::style element create close_button image close_10x10 -height 12 -width 12 -sticky e -padding {10 0} ttk::style element create close_button image close_10x10 -height 12 -width 12 -sticky e -padding {10 0}
@@ -149,9 +193,13 @@ ttk::style layout TNotebook.Tab {
} }
} }
} }
bind TNotebook <Button-1> "catch {NB::PressTab %W %x %y}\;[bind TNotebook <Button-1>];break"
bind TNotebook <Button-1> "NB::CloseTab %W %x %y\;[bind TNotebook <Button-1>]" # 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"
# ttk::scrollbar $nbEditor.hsb1 -orient horizontal -command [list $frm_tree.work xview] # ttk::scrollbar $nbEditor.hsb1 -orient horizontal -command [list $frm_tree.work xview]
# ttk::scrollbar $fbEditor.vsb1 -orient vertical -command [list $frm_tree.work yview] # ttk::scrollbar $fbEditor.vsb1 -orient vertical -command [list $frm_tree.work yview]
# set tree [ttk::treeview $frm_tree.tree -show tree \ # set tree [ttk::treeview $frm_tree.tree -show tree \

View File

@@ -13,9 +13,11 @@ namespace eval Highlight {} {
ctext::addHighlightClass $txt variable_funcs gold {set global variable unset} ctext::addHighlightClass $txt variable_funcs gold {set global variable unset}
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()} ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+} ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
ctext::addHighlightClassForRegexp $txt namespaces #4f64ff {::} ctext::addHighlightClassForRegexp $txt namespaces #4f64ff {::}
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`} ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
ctext::addHighlightClassForRegexp $txt colors #68ceff {(#)(\w)+?(\s|$)}
ctext::addHighlightClassForRegexp $txt comments #666666 {(^|;)\s*(#)[^\n\r]*}
ctext::addHighlightClass $txt bool #3e803b {null false true}
} }
proc Default {txt} { proc Default {txt} {
@@ -32,7 +34,7 @@ namespace eval Highlight {} {
proc SH {txt} { proc SH {txt} {
ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+} ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+}
ctext::addHighlightClass $txt stackControl #19a2a6 {if fi else elseif then while case esac do in exit source echo package mkdir ls rm sed awk grep date jq zip tar gzip mount umount test make curl git iconv less gcc scp rsync cut tr} ctext::addHighlightClass $txt stackControl #19a2a6 {if fi else elseif then while case esac do in exit source echo package mkdir ls rm sed awk grep date jq zip tar gzip mount umount test make curl git iconv less gcc scp rsync cut tr function}
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\$" ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\$"
ctext::addHighlightClassForRegexp $txt vars_extended #4471ca {\$\{[a-zA-Z0-9\_\-:\./\$\{\}]+\}} ctext::addHighlightClassForRegexp $txt vars_extended #4471ca {\$\{[a-zA-Z0-9\_\-:\./\$\{\}]+\}}
ctext::addHighlightClass $txt variable_funcs gold {set export} ctext::addHighlightClass $txt variable_funcs gold {set export}
@@ -44,7 +46,7 @@ namespace eval Highlight {} {
proc GO {txt} { proc GO {txt} {
ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+} ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+}
ctext::addHighlightClass $txt stackControl #19a2a6 {if else for while case switch func import return interface map make break chan fallthrough defer continue go select package} ctext::addHighlightClass $txt stackControl #19a2a6 {break default func goto select case defer if map chan else import package switch const fallthrough interface range continue for go return}
ctext::addHighlightClass $txt types #7187d5 {string int int16 int32 int64 float bool byte} ctext::addHighlightClass $txt types #7187d5 {string int int16 int32 int64 float bool byte}
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\&" ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\&"
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\*" ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\*"
@@ -53,12 +55,13 @@ namespace eval Highlight {} {
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()} ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+} ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*} ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
ctext::addHighlightClass $txt bool #3e803b {nil false true}
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`} ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
} }
proc PY {txt} { proc PY {txt} {
ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+} ctext::addHighlightClassForRegexp $txt flags orange {-+[a-zA-Z\-_]+}
ctext::addHighlightClass $txt stackControl #19a2a6 {if else for while case switch def import from return make break defer continue package len print with open} ctext::addHighlightClass $txt stackControl #19a2a6 {if else elif for while case switch def import from return make break defer continue package len print with open try: except: in}
ctext::addHighlightClass $txt types #7187d5 {string int int16 int32 int64 float bool byte} ctext::addHighlightClass $txt types #7187d5 {string int int16 int32 int64 float bool byte}
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\&" ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\&"
ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\*" ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\*"
@@ -68,4 +71,124 @@ namespace eval Highlight {} {
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*} ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`} ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
} }
proc YAML {txt} {
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]*}
}
proc YML {txt} {
Highlight::YAML $txt
}
proc XML {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 {\.[a-zA-Z0-9\_\-]+}
# ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
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 require module begin rescue self return include unless raise private new do synchronize}
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 #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}
}
} }

File diff suppressed because it is too large Load Diff

69
lib/imgviewer.tcl Normal file
View File

@@ -0,0 +1,69 @@
proc ImageViewer {f w node} {
set factor($node) 1.0
ttk::frame $w.f
pack $w.f -side left -fill both -expand true
canvas $w.f.c -xscrollcommand "$w.f.x set" -yscrollcommand "$w.y set"
ttk::scrollbar $w.f.x -ori hori -command "$w.f.c xview"
ttk::scrollbar $w.y -ori vert -command "$w.f.c yview"
pack $w.f.c -side top -fill both -expand true
pack $w.f.x -side top -fill x
pack $w.y -side left -fill y
bind $w.f.c <Button-4> "%W yview scroll -3 units"
bind $w.f.c <Button-5> "%W yview scroll 3 units"
bind $w.f.c <Shift-Button-4> "%W xview scroll -2 units"
bind $w.f.c <Shift-Button-5> "%W xview scroll 2 units"
bind $w.f.c <Control-Button-4> "scale $w.f.c 0.5 $node"
bind $w.f.c <Control-Button-5> "scale $w.f.c 2 $node"
#$w.scrwin setwidget $w.scrwin.f
openImg $f $w.f.c $node
}
proc openImg {fn w node} {
global im1
set im1 [image create photo -file $fn]
#scale $w
list [file size $fn] bytes, [image width $im1]x[image height $im1]
$w create image 1 1 -image $im1 -anchor nw -tag img
}
proc scale {w {n 1} node} {
global im1 im2 factor noteBook tab_label
set factor($node) [expr {$factor($node) * $n}]
$w delete img
catch {image delete $im2}
set im2 [image create photo]
if {$factor($node)>=1} {
set f [expr int($factor($node))]
$im2 copy $im1 -zoom $f $f
} else {
set f [expr round(1./$factor($node))]
$im2 copy $im1 -subsample $f $f
}
$w create image 1 1 -image $im2 -anchor nw -tag img
$noteBook itemconfigure $node -text "$tab_label (size x$factor($node))"
$w config -scrollregion [$w bbox all]
}
proc ImageBase64Encode {text} {
global env
set types {
{"PNG" {.png}}
{"GIF" {.gif}}
{"JPEG" {.jpg}}
{"BMP" {.bmp}}
{"All files" *}
}
set img [tk_getOpenFile -initialdir $env(HOME) -filetypes $types -parent .]
if {$img ne ""} {
set f [open $img]
fconfigure $f -translation binary
set data [base64::encode [read $f]]
close $f
# base name on root name of the image file
set name [file root [file tail $img]]
$text insert [Position] "image create photo $name -data {\n$data\n}"
}
}

View File

@@ -6,18 +6,25 @@
#------------------------------------------------------- #-------------------------------------------------------
# TCL/TK # TCL/TK
dict set lexers TCL commentSymbol {#} dict set lexers TCL commentSymbol {#}
dict set lexers TCL variableSymbol {$}
dict set lexers TCL procFindString {proc PROCNAME} dict set lexers TCL procFindString {proc PROCNAME}
dict set lexers TCL procRegexpCommand {regexp -nocase -all -- {^\s*?(proc) (.*?) \{(.*?)\} \{} $line match keyWord procName params} dict set lexers TCL procRegexpCommand {regexp -nocase -all -- {^\s*?(proc) (.*?) \{(.*?)\} \{} $line match keyWord procName params}
dict set lexers TCL varRegexpCommand {regexp -nocase -all -- {^\s*?set\s+([a-zA-Z0-9\:\-_$]+)\s+(.+?)($|;)} $line match varName varValue lineEnd}
dict set lexers TCL commands [info commands]
#-------------------------------------------------- #--------------------------------------------------
# Go lang # Go lang
dict set lexers GO commentSymbol {//} dict set lexers GO commentSymbol {//}
dict set lexers GO commentMultilineSymbolBegin {/*}
dict set lexers GO commentMultilineSymbolEnd {*/}
dict set lexers GO procFindString {func.*?PROCNAME} dict set lexers GO procFindString {func.*?PROCNAME}
dict set lexers GO procRegexpCommand {regexp -nocase -all -- {\s*?func\s*?(\(\w+\s*?\**?\w+\)|)\s*?(\w+)\((.*?)\)\s+?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match linkName procName params returns} dict set lexers GO procRegexpCommand {regexp -nocase -all -- {\s*?func\s*?(\(\w+\s*?\**?\w+\)|)\s*?(\w+)\((.*?)\)\s+?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match linkName procName params returns}
dict set lexers GO varRegexpCommand {regexp -nocase -all -line -- {^\s*?var\s+([a-zA-Z0-9\-_$]+)\s+(.+?)(\s*$)} $line match varName varType lineEnd}
#-------------------------------------------------- #--------------------------------------------------
# SHELL (Bash) # SHELL (Bash)
dict set lexers SH commentSymbol {#} dict set lexers SH commentSymbol {#}
dict set lexers SH variableSymbol {$}
dict set lexers SH procFindString {(function |)\s*?PROCNAME\(\)} dict set lexers SH procFindString {(function |)\s*?PROCNAME\(\)}
dict set lexers SH procRegexpCommand {regexp -nocase -all -- {^\s*?(function |)\s*?(.*?)\(()\)} $line match keyWord procName params} dict set lexers SH procRegexpCommand {regexp -nocase -all -- {^\s*?(function |)\s*?(.*?)\(()\)} $line match keyWord procName params}
@@ -26,3 +33,76 @@ dict set lexers SH procRegexpCommand {regexp -nocase -all -- {^\s*?(function |)\
dict set lexers PY commentSymbol {#} dict set lexers PY commentSymbol {#}
dict set lexers PY procFindString {(def )\s*?PROCNAME} dict set lexers PY procFindString {(def )\s*?PROCNAME}
dict set lexers PY procRegexpCommand {regexp -nocase -all -- {^\s*?(def)\s*?(.*?)\((.*?)\):} $line match keyWord procName params} dict set lexers PY procRegexpCommand {regexp -nocase -all -- {^\s*?(def)\s*?(.*?)\((.*?)\):} $line match keyWord procName params}
dict set lexers PY varRegexpCommand {regexp -nocase -all -line -- {^\s*?(\w+)\s*=\s*(.+)($)} $line match varName varValue lineEnd}
#--------------------------------------------------
# Ruby
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 |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)
dict set lexers YML commentSymbol {#}
# dict set lexers YML variableSymbol {\{\{}
dict set lexers YML tabSize 2
dict set lexers YML procFindString {(- name:)\s*?PROCNAME}
dict set lexers YML procRegexpCommand {regexp -nocase -all -- {^\s*?- (name):\s(.+?)$} $line match keyWord procName}
dict set lexers YML 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}

View File

@@ -9,6 +9,7 @@
###################################################### ######################################################
proc GetFileMenu {m} { proc GetFileMenu {m} {
global activeProject
$m add command -label [::msgcat::mc "New file"] -command Editor::New\ $m add command -label [::msgcat::mc "New file"] -command Editor::New\
-accelerator "Ctrl+N" -accelerator "Ctrl+N"
$m add command -label [::msgcat::mc "Open file"] -accelerator "Ctrl+O" -command { $m add command -label [::msgcat::mc "Open file"] -accelerator "Ctrl+O" -command {
@@ -17,14 +18,25 @@ proc GetFileMenu {m} {
FileOper::Edit $filePath FileOper::Edit $filePath
} }
} }
$m add command -label [::msgcat::mc "Save file"] -command {FileOper::Save}\
-accelerator "Ctrl+S"
$m add command -label [::msgcat::mc "Close file"] -command {FileOper::Close}\
-accelerator "Ctrl+w"
$m add command -label [::msgcat::mc "Close all"] -command {FileOper::CloseAll}
$m add separator
$m add command -label [::msgcat::mc "Open folder"] -accelerator "Ctrl+K" -command { $m add command -label [::msgcat::mc "Open folder"] -accelerator "Ctrl+K" -command {
set folderPath [FileOper::OpenFolderDialog] set folderPath [FileOper::OpenFolderDialog]
if {$folderPath != ""} { if {$folderPath != ""} {
# set activeProject $folderPath
SetActiveProject $folderPath
FileOper::ReadFolder $folderPath FileOper::ReadFolder $folderPath
ReadFilesFromDirectory $folderPath $folderPath
} }
} }
$m add command -label [::msgcat::mc "Save file"] -command {FileOper::Save}\ $m add command -label [::msgcat::mc "Close folder"] -command {FileOper::CloseFolder}
-accelerator "Ctrl+S"
#$m add command -label [::msgcat::mc "Open"] -command {FileDialog $tree open}\ #$m add command -label [::msgcat::mc "Open"] -command {FileDialog $tree open}\
#-font $fontNormal -accelerator "Ctrl+O" -state disable #-font $fontNormal -accelerator "Ctrl+O" -state disable
$m add separator $m add separator
@@ -45,14 +57,14 @@ proc GetEditMenu {m} {
$m add command -label [::msgcat::mc "Cut"] -command Cut\ $m add command -label [::msgcat::mc "Cut"] -command Cut\
-accelerator "Ctrl+Z" -accelerator "Ctrl+Z"
$m add separator $m add separator
$m add command -label [::msgcat::mc "Find"] -command Find\ $m add command -label [::msgcat::mc "Find"] -command {Editor::FindDialog ""}\
-accelerator "Ctrl+F" -accelerator "Ctrl+F"
$m add command -label [::msgcat::mc "Replace"] -command Replace\ # $m add command -label [::msgcat::mc "Replace"] -command Replace\
-accelerator "Ctrl+R" # -accelerator "Ctrl+R"
$m add separator $m add separator
$m add command -label [::msgcat::mc "Find in files"] -command File::Find\ $m add command -label [::msgcat::mc "Find in files"] -command "FileOper::FindInFiles"\
-accelerator "Ctrl+Shift+F" -accelerator "Ctrl+Shift+F"
$m add command -label [::msgcat::mc "Replace in files"] -command File::Replace\ $m add command -label [::msgcat::mc "Replace in files"] -command FileOper::ReplaceInFiles\
-accelerator "Ctrl+Shift+RV" -accelerator "Ctrl+Shift+RV"
$m add separator $m add separator
$m add command -label [::msgcat::mc "Insert image"] -accelerator "Ctrl+I"\ $m add command -label [::msgcat::mc "Insert image"] -accelerator "Ctrl+I"\
@@ -62,16 +74,58 @@ proc GetEditMenu {m} {
proc GetViewMenu {m} { proc GetViewMenu {m} {
global cfgVariables global cfgVariables
$m add command -label [::msgcat::mc "View panel"] -command ViewFilesTree $m add checkbutton -label [::msgcat::mc "View panel"] -command ViewFilesTree \
-variable cfgVariables(filesPanelShow) -onvalue true -offvalue false \
-accelerator "Alt+P"
menu $m.panelSide menu $m.panelSide
$m add cascade -label [::msgcat::mc "Panel side"] -menu $m.panelSide $m add cascade -label [::msgcat::mc "Panel side"] -menu $m.panelSide
$m.panelSide add radiobutton -label [::msgcat::mc "Left"] \
-variable cfgVariables(filesPanelPlace) -value left -command ViewFilesTree
$m.panelSide add radiobutton -label [::msgcat::mc "Right"] \
-variable cfgVariables(filesPanelPlace) -value right -command ViewFilesTree
$m.panelSide add radiobutton -label [::msgcat::mc "Left"] -variable cfgVariables(filesPanelPlace) -value left $m add checkbutton -label [::msgcat::mc "Show the Menu"] -command ViewMenuBar \
$m.panelSide add radiobutton -label [::msgcat::mc "Right"] -variable cfgVariables(filesPanelPlace) -value right -variable cfgVariables(menuShow) -onvalue true -offvalue false
$m add checkbutton -label [::msgcat::mc "Toolbar"] -command ViewToolBar \
-variable cfgVariables(toolBarShow) -onvalue true -offvalue false
$m add checkbutton -label [::msgcat::mc "Statusbar"] -command ViewStatusBar \
-variable cfgVariables(statusBarShow) -onvalue true -offvalue false
$m add command -label [::msgcat::mc "View line numbers"] -command ViewLineNumbers $m add separator
# $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
$m.editorWrap add radiobutton -label [::msgcat::mc "None"] -variable cfgVariables(editorWrap) \
-value none -command "Editor::SetOption wrap $cfgVariables(editorWrap)"
$m.editorWrap add radiobutton -label [::msgcat::mc "Char"] -variable cfgVariables(editorWrap) \
-value char -command "Editor::SetOption wrap $cfgVariables(editorWrap)"
$m.editorWrap add radiobutton -label [::msgcat::mc "Word"] -variable cfgVariables(editorWrap) \
-value word -command "Editor::SetOption wrap $cfgVariables(editorWrap)"
$m add separator
menu $m.editorHelper
$m add cascade -label [::msgcat::mc "Editor helpers"] -menu $m.editorHelper
$m.editorHelper add checkbutton -label [::msgcat::mc "Variables"] \
-variable cfgVariables(variableHelper) -onvalue true -offvalue false
# -command "ViewHelper variableHelper"
$m.editorHelper add checkbutton -label [::msgcat::mc "Procedures"] \
-variable cfgVariables(procedureHelper) -onvalue true -offvalue false
# -command "ViewHelper procedureHelper"
$m add checkbutton -label [::msgcat::mc "Multiline comments"] \
-variable cfgVariables(multilineComments) -onvalue true -offvalue false
} }
proc GetHelpMenu {m} { proc GetHelpMenu {m} {
$m add command -label [::msgcat::mc "About ..."] -command Help::About $m add command -label [::msgcat::mc "About ..."] -command Help::About
} }
proc PopupMenu {x y} {
tk_popup .popup $x $y
}

View File

@@ -9,23 +9,35 @@
::msgcat::mcset ru "Add as new project" "Добавить как Новый Проект" ::msgcat::mcset ru "Add as new project" "Добавить как Новый Проект"
::msgcat::mcset ru "Add to existing project" "Добавить в существующий проект" ::msgcat::mcset ru "Add to existing project" "Добавить в существующий проект"
::msgcat::mcset ru "Add to project" "Добавить в проект" ::msgcat::mcset ru "Add to project" "Добавить в проект"
::msgcat::mcset ru "Add new branch" "Создать новую ветку"
::msgcat::mcset ru "Archive created in" "Архив помещен в" ::msgcat::mcset ru "Archive created in" "Архив помещен в"
::msgcat::mcset ru "Archive directory" "Каталог c архивами" ::msgcat::mcset ru "Archive directory" "Каталог c архивами"
::msgcat::mcset ru "Archive file mask" "Маска архива" ::msgcat::mcset ru "Archive file mask" "Маска архива"
::msgcat::mcset ru "Author" "Автор" ::msgcat::mcset ru "Author" "Автор"
::msgcat::mcset ru "Authorization" "Авторизация"
::msgcat::mcset ru "Authorization required" "Требуется авторизация"
::msgcat::mcset ru "Braces" "Скобки" ::msgcat::mcset ru "Braces" "Скобки"
::msgcat::mcset ru "Branch" "Ветка"
::msgcat::mcset ru "Quad braces" "Квадратные скобки" ::msgcat::mcset ru "Quad braces" "Квадратные скобки"
::msgcat::mcset ru "Braces background" "Фон скобки" ::msgcat::mcset ru "Braces background" "Фон скобки"
::msgcat::mcset ru "Braces foreground" "Цвет скобки" ::msgcat::mcset ru "Braces foreground" "Цвет скобки"
::msgcat::mcset ru "Cancel" "Отмена" ::msgcat::mcset ru "Cancel" "Отмена"
::msgcat::mcset ru "Can't found file:" "Не найден файл:" ::msgcat::mcset ru "Can't found file:" "Не найден файл:"
::msgcat::mcset ru "Char" "Символ"
::msgcat::mcset ru "Close" "Закрыть" ::msgcat::mcset ru "Close" "Закрыть"
::msgcat::mcset ru "Close all" "Закрыть все" ::msgcat::mcset ru "Close all" "Закрыть все"
::msgcat::mcset ru "Close file" "Закрыть файл"
::msgcat::mcset ru "Close folder" "Закрыть папку"
::msgcat::mcset ru "Close Project Manager?" "Выйти из программы?" ::msgcat::mcset ru "Close Project Manager?" "Выйти из программы?"
::msgcat::mcset ru "Comments" "Коментарии" ::msgcat::mcset ru "Comments" "Коментарии"
::msgcat::mcset ru "Comment selected" "Закоментировать" ::msgcat::mcset ru "Comment selected" "Закоментировать"
::msgcat::mcset ru "Uncomment selected" "Раскоментировать" ::msgcat::mcset ru "Uncomment selected" "Раскоментировать"
::msgcat::mcset ru "Clone repository" "Клонировать репозиторий"
::msgcat::mcset ru "Column" "Столбец" ::msgcat::mcset ru "Column" "Столбец"
::msgcat::mcset ru "Commit" "Коммита"
::msgcat::mcset ru "Commit description" "Описание коммита"
::msgcat::mcset ru "Commit changes" "Зафиксировать изменения"
::msgcat::mcset ru "Commit history" "История изменений"
::msgcat::mcset ru "Company" "Компания" ::msgcat::mcset ru "Company" "Компания"
::msgcat::mcset ru "Compiler" "Компилятор" ::msgcat::mcset ru "Compiler" "Компилятор"
::msgcat::mcset ru "Compile" "Компиляция" ::msgcat::mcset ru "Compile" "Компиляция"
@@ -63,18 +75,23 @@
::msgcat::mcset ru "Editor font" "Шрифт редактора" ::msgcat::mcset ru "Editor font" "Шрифт редактора"
::msgcat::mcset ru "Editor font bold" "Шрифт редактора жирный" ::msgcat::mcset ru "Editor font bold" "Шрифт редактора жирный"
::msgcat::mcset ru "Editor settings" "Настройки редактора" ::msgcat::mcset ru "Editor settings" "Настройки редактора"
::msgcat::mcset ru "Editor helpers" "Подсказки при вводе"
::msgcat::mcset ru "Encode" "Перекодировка" ::msgcat::mcset ru "Encode" "Перекодировка"
::msgcat::mcset ru "Authorisation required" "Требуется авторизация"
::msgcat::mcset ru "Error open URL" "Ошибка открытия URL" ::msgcat::mcset ru "Error open URL" "Ошибка открытия URL"
::msgcat::mcset ru "Exit" "Выход" ::msgcat::mcset ru "Exit" "Выход"
::msgcat::mcset ru "File" "Файл" ::msgcat::mcset ru "File" "Файл"
::msgcat::mcset ru "Files" "Файлы" ::msgcat::mcset ru "Files" "Файлах"
::msgcat::mcset ru "File already exists. Overwrite?" "Файл уже существует. Переписать?" ::msgcat::mcset ru "File already exists. Overwrite?" "Файл уже существует. Переписать?"
::msgcat::mcset ru "File was deleted" "Файл был удалён"
::msgcat::mcset ru "File was modifyed. Close?" "Файл был изменен. Закрыть?" ::msgcat::mcset ru "File was modifyed. Close?" "Файл был изменен. Закрыть?"
::msgcat::mcset ru "File was modifyed" "Файл был изменен" ::msgcat::mcset ru "File was modifyed" "Файл был изменен"
::msgcat::mcset ru "File modify" "Файл изменен" ::msgcat::mcset ru "File modify" "Файл изменен"
::msgcat::mcset ru "File saved" "Файл сохранен" ::msgcat::mcset ru "File saved" "Файл сохранен"
::msgcat::mcset ru "Find" "Найти" ::msgcat::mcset ru "Find" "Найти"
::msgcat::mcset ru "Found" "Найдено"
::msgcat::mcset ru "Find in files" "Найти в файлах" ::msgcat::mcset ru "Find in files" "Найти в файлах"
::msgcat::mcset ru "for" "для"
::msgcat::mcset ru "Font normal" "Нормальный шрифт" ::msgcat::mcset ru "Font normal" "Нормальный шрифт"
::msgcat::mcset ru "Font bold" "Жирный шрифт" ::msgcat::mcset ru "Font bold" "Жирный шрифт"
::msgcat::mcset ru "FTP password" "FTP пароль" ::msgcat::mcset ru "FTP password" "FTP пароль"
@@ -87,7 +104,9 @@
::msgcat::mcset ru "Image dir" "Каталог изображений" ::msgcat::mcset ru "Image dir" "Каталог изображений"
::msgcat::mcset ru "Indent foreground" "Подсветка отступа" ::msgcat::mcset ru "Indent foreground" "Подсветка отступа"
::msgcat::mcset ru "Indent background" "Подсветка отступа" ::msgcat::mcset ru "Indent background" "Подсветка отступа"
::msgcat::mcset ru "Init repository" "Создать репозиторий"
::msgcat::mcset ru "Insert" "Вставка" ::msgcat::mcset ru "Insert" "Вставка"
::msgcat::mcset ru "In" "В"
::msgcat::mcset ru "Insert image" "Вставить изображение" ::msgcat::mcset ru "Insert image" "Вставить изображение"
::msgcat::mcset ru "Interface language" "Язык интерфейса" ::msgcat::mcset ru "Interface language" "Язык интерфейса"
::msgcat::mcset ru "Interpetator" "Интерпретатор" ::msgcat::mcset ru "Interpetator" "Интерпретатор"
@@ -102,8 +121,10 @@
::msgcat::mcset ru "Make backup files" "Создавать временные файлы" ::msgcat::mcset ru "Make backup files" "Создавать временные файлы"
::msgcat::mcset ru "Main" "Общие" ::msgcat::mcset ru "Main" "Общие"
::msgcat::mcset ru "Main settings" "Общие настройки" ::msgcat::mcset ru "Main settings" "Общие настройки"
::msgcat::mcset ru "Matches" "Совпадений"
::msgcat::mcset ru "Modules" "Модули" ::msgcat::mcset ru "Modules" "Модули"
::msgcat::mcset ru "Modifying the Registry..." "Внесение изменений в реестр" ::msgcat::mcset ru "Modifying the Registry..." "Внесение изменений в реестр"
::msgcat::mcset ru "Multiline comments" "Многострочные комментарии"
::msgcat::mcset ru "Must be one file select!" "Вы должны выбрать только один файл" ::msgcat::mcset ru "Must be one file select!" "Вы должны выбрать только один файл"
::msgcat::mcset ru "Must be one or two file select!" "Вы должны выбрать один или два файла" ::msgcat::mcset ru "Must be one or two file select!" "Вы должны выбрать один или два файла"
::msgcat::mcset ru "Network" "Сеть" ::msgcat::mcset ru "Network" "Сеть"
@@ -113,6 +134,7 @@
::msgcat::mcset ru "New project" "Новый проект" ::msgcat::mcset ru "New project" "Новый проект"
::msgcat::mcset ru "Not implemented yet" "Данная функция пока не реализована" ::msgcat::mcset ru "Not implemented yet" "Данная функция пока не реализована"
::msgcat::mcset ru "Not found active project" "Не определен активный проект" ::msgcat::mcset ru "Not found active project" "Не определен активный проект"
::msgcat::mcset ru "None" "Нет"
::msgcat::mcset ru "No" "Нет" ::msgcat::mcset ru "No" "Нет"
::msgcat::mcset ru "Open" "Открыть" ::msgcat::mcset ru "Open" "Открыть"
::msgcat::mcset ru "Open file" "Открыть файл" ::msgcat::mcset ru "Open file" "Открыть файл"
@@ -122,7 +144,7 @@
::msgcat::mcset ru "Operators" "Операторы" ::msgcat::mcset ru "Operators" "Операторы"
::msgcat::mcset ru "Overwrite" "Замена" ::msgcat::mcset ru "Overwrite" "Замена"
::msgcat::mcset ru "Parameters" "Параметры" ::msgcat::mcset ru "Parameters" "Параметры"
::msgcat::mcset ru "Subparameters" "Субпараметры" ::msgcat::mcset ru "Password" "Пароль"
::msgcat::mcset ru "Paste" "Вставить" ::msgcat::mcset ru "Paste" "Вставить"
::msgcat::mcset ru "Paste from clipboard" "Вставить из буфера" ::msgcat::mcset ru "Paste from clipboard" "Вставить из буфера"
::msgcat::mcset ru "Percent" "Знак процента" ::msgcat::mcset ru "Percent" "Знак процента"
@@ -130,6 +152,7 @@
::msgcat::mcset ru "Print" "Печать" ::msgcat::mcset ru "Print" "Печать"
::msgcat::mcset ru "Print command" "Команда печати" ::msgcat::mcset ru "Print command" "Команда печати"
::msgcat::mcset ru "Print selected text" "Печатать выделенный текст" ::msgcat::mcset ru "Print selected text" "Печатать выделенный текст"
::msgcat::mcset ru "Procedures" "Процедуры"
::msgcat::mcset ru "Procedure name" "Имя процедуры" ::msgcat::mcset ru "Procedure name" "Имя процедуры"
::msgcat::mcset ru "Procedure name complit" "Автодобивка процедуры" ::msgcat::mcset ru "Procedure name complit" "Автодобивка процедуры"
::msgcat::mcset ru "Program finished successfully" "Выполнение завершено" ::msgcat::mcset ru "Program finished successfully" "Выполнение завершено"
@@ -142,6 +165,8 @@
::msgcat::mcset ru "Project file" "Файл проекта" ::msgcat::mcset ru "Project file" "Файл проекта"
::msgcat::mcset ru "Project dir" "Каталог проекта" ::msgcat::mcset ru "Project dir" "Каталог проекта"
::msgcat::mcset ru "Project type" "Тип проекта" ::msgcat::mcset ru "Project type" "Тип проекта"
::msgcat::mcset ru "Push changes" "Протолкнуть изменения"
::msgcat::mcset ru "Pull changes" "Вытянуть изменения"
::msgcat::mcset ru "Quit without saving?" "Выйти без сохранения?" ::msgcat::mcset ru "Quit without saving?" "Выйти без сохранения?"
::msgcat::mcset ru "Question" "Вопрос" ::msgcat::mcset ru "Question" "Вопрос"
::msgcat::mcset ru "Quote string" "Строка в кавычках" ::msgcat::mcset ru "Quote string" "Строка в кавычках"
@@ -171,28 +196,35 @@
::msgcat::mcset ru "Selected directory" "Директория" ::msgcat::mcset ru "Selected directory" "Директория"
::msgcat::mcset ru "Selection color" "Цвет выделения" ::msgcat::mcset ru "Selection color" "Цвет выделения"
::msgcat::mcset ru "Settings" "Установки" ::msgcat::mcset ru "Settings" "Установки"
::msgcat::mcset ru "Statusbar" "Строка статуса"
::msgcat::mcset ru "Show backup files" "Показывать временные файлы" ::msgcat::mcset ru "Show backup files" "Показывать временные файлы"
::msgcat::mcset ru "Show the Menu" "Показывать меню" ::msgcat::mcset ru "Show the Menu" "Показывать меню"
::msgcat::mcset ru "Show dot files" "Показывать скрытые файлы" ::msgcat::mcset ru "Show dot files" "Показывать скрытые файлы"
::msgcat::mcset ru "Specify the absolute path to the directory or file" "Укажите полный путь к каталогу или файлу"
::msgcat::mcset ru "Split edit window" "Разделить окно редактора" ::msgcat::mcset ru "Split edit window" "Разделить окно редактора"
::msgcat::mcset ru "SQL commands" "SQL команды" ::msgcat::mcset ru "SQL commands" "SQL команды"
::msgcat::mcset ru "Subparameters" "Субпараметры"
::msgcat::mcset ru "Text autoformat" "Автоформат текста" ::msgcat::mcset ru "Text autoformat" "Автоформат текста"
::msgcat::mcset ru "Thanks" "Благодарности" ::msgcat::mcset ru "Thanks" "Благодарности"
::msgcat::mcset ru "Title normal" "Файл нормальный" ::msgcat::mcset ru "Title normal" "Файл нормальный"
::msgcat::mcset ru "Title modify" "Файл изменен" ::msgcat::mcset ru "Title modify" "Файл изменен"
::msgcat::mcset ru "Toolbar" "Панель инструментов" ::msgcat::mcset ru "Toolbar" "Панель инструментов"
::msgcat::mcset ru "User name" "Имя пользователя"
::msgcat::mcset ru "Undo" "Отменить" ::msgcat::mcset ru "Undo" "Отменить"
::msgcat::mcset ru "Update" "Обновить" ::msgcat::mcset ru "Update" "Обновить"
::msgcat::mcset ru "Untraceable file" "Неотслеживаемый файл"
::msgcat::mcset ru "Unindexed changes" "Неиндексированные изменения"
::msgcat::mcset ru "Variables" "Переменные" ::msgcat::mcset ru "Variables" "Переменные"
::msgcat::mcset ru "Version" "Версия" ::msgcat::mcset ru "Version" "Версия"
::msgcat::mcset ru "View" "Вид" ::msgcat::mcset ru "View" "Вид"
::msgcat::mcset ru "View panel" "Показывать дополнительную панель" ::msgcat::mcset ru "View panel" "Показывать панель"
::msgcat::mcset ru "Panel side" "Расположение дополнительной панели" ::msgcat::mcset ru "Panel side" "Расположение дополнительной панели"
::msgcat::mcset ru "Left" "Слева" ::msgcat::mcset ru "Left" "Слева"
::msgcat::mcset ru "Right" "Справа" ::msgcat::mcset ru "Right" "Справа"
::msgcat::mcset ru "View line numbers" "Показывать номера строк" ::msgcat::mcset ru "View line numbers" "Показывать номера строк"
::msgcat::mcset ru "Warning" "Внимание" ::msgcat::mcset ru "Warning" "Внимание"
::msgcat::mcset ru "Was replacement" "Было заменено" ::msgcat::mcset ru "Was replacement" "Было заменено"
::msgcat::mcset ru "Word wrapping" "Перенос слов" ::msgcat::mcset ru "Word" "Слово"
::msgcat::mcset ru "Editors word wrapping" "Перенос слов в редакторе"
::msgcat::mcset ru "Work dir" "Рабочий каталог" ::msgcat::mcset ru "Work dir" "Рабочий каталог"
::msgcat::mcset ru "Yes" "Да" ::msgcat::mcset ru "Yes" "Да"

View File

@@ -23,14 +23,63 @@ namespace eval NB {
$nb select $fm $nb select $fm
} }
} }
git {
if [winfo exists $nb.$item] {
return $nb.$item
} }
puts "NB item - $fm" set fm [ttk::frame $nb.$item]
pack $fm -side top -expand true -fill both
$nb add $fm -text Git;# -image close_12x12 -compound right
$nb select $fm
}
}
# puts "NB item - $fm"
return $fm return $fm
} }
proc CloseTab {w x y} { 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
}
if {[$w identify $x $y] == "close_button"} { if {[$w identify $x $y] == "close_button"} {
FileOper::Close FileOper::Close
} else {
set txt [$w select].frmText.t
if [winfo exists $txt] {
focus -force $txt.t
}
}
}
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
} elseif {$nbItemIndex eq $i && $step eq "1"} {
$w select 0
} 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
if [winfo exists $txt] {
focus -force $txt.t
} }
} }
} }

View File

@@ -19,41 +19,164 @@ proc Quit {} {
} }
} }
proc ViewFilesTree {} { proc ViewFilesTree {{hotkey "false"}} {
global cfgVariables global cfgVariables
if {$cfgVariables(filesPanelShow) eq "true"} { if {$hotkey eq "true"} {
.frmBody.panel forget .frmBody.frmTree if {$cfgVariables(filesPanelShow) eq "false"} {
set cfgVariables(filesPanelShow) true
} else {
set cfgVariables(filesPanelShow) false set cfgVariables(filesPanelShow) false
}
}
if {$cfgVariables(filesPanelShow) eq "false"} {
.frmBody.panel forget .frmBody.frmTree
} else { } else {
switch $cfgVariables(filesPanelPlace) { switch $cfgVariables(filesPanelPlace) {
"left" { "left" {
.frmBody.panel insert 0 .frmBody.frmTree .frmBody.panel insert 0 .frmBody.frmTree
} }
"right" { "right" {
if {[lsearch -exact [.frmBody.panel panes] .frmBody.frmTree] != -1} {
.frmBody.panel forget .frmBody.frmTree
}
.frmBody.panel add .frmBody.frmTree .frmBody.panel add .frmBody.frmTree
} }
default { default {
.frmBody.panel insert 0 .frmBody.frmTree .frmBody.panel insert 0 .frmBody.frmTree
} }
} }
set cfgVariables(filesPanelShow) true }
}
proc ViewMenuBar {{hotkey "false"}} {
global cfgVariables
if {$hotkey eq "true"} {
if {$cfgVariables(menuShow) eq "false"} {
set cfgVariables(menuShow) true
} else {
set cfgVariables(menuShow) false
}
}
if {$cfgVariables(menuShow) eq "false"} {
grid remove .frmMenu
} else {
grid .frmMenu -row 0 -column 0 -sticky new
}
}
proc ViewStatusBar {{hotkey "false"}} {
global cfgVariables
if {$hotkey eq "true"} {
if {$cfgVariables(statusBarShow) eq "false"} {
set cfgVariables(statusBarShow) true
} else {
set cfgVariables(statusBarShow) false
}
}
if {$cfgVariables(statusBarShow) eq "false"} {
grid remove .frmStatus
} else {
grid .frmStatus -row 2 -column 0 -sticky sew
}
}
proc ViewToolBar {{hotkey "false"}} {
global cfgVariables
if {$hotkey eq "true"} {
if {$cfgVariables(toolBarShow) eq "false"} {
set cfgVariables(toolBarShow) true
} else {
set cfgVariables(toolBarShow) false
}
}
if {$cfgVariables(toolBarShow) eq "false"} {
grid remove .frmBody.frmTool
} else {
grid .frmBody.frmTool -row 0 -column 0 -sticky nsw
} }
} }
# Enable/Disabled line numbers in editor # Enable/Disabled line numbers in editor
proc ViewLineNumbers {} { proc ViewLineNumbers {} {
global cfgVariables nbEditor global cfgVariables nbEditor
# Changed global settigs
if {$cfgVariables(lineNumberShow) eq "true"} {
set cfgVariables(lineNumberShow) false
} else {
set cfgVariables(lineNumberShow) true
}
# apply changes for opened tabs
foreach node [$nbEditor tabs] { foreach node [$nbEditor tabs] {
if [winfo exists $node.frmText.t] {
$node.frmText.t configure -linemap $cfgVariables(lineNumberShow) $node.frmText.t configure -linemap $cfgVariables(lineNumberShow)
} }
} }
}
proc ViewHelper {helper} {
global cfgVariables
# Changed global settigs
if {$cfgVariables($helper) eq "true"} {
set cfgVariables($helper) false
} else {
set cfgVariables($helper) true
}
}
proc WelcomeDialog {} {
set win .welcome
set x [winfo rootx .frmWork]
set y [winfo rooty .frmWork]
if { [winfo exists $win] } {
destroy $win
return
}
toplevel $win
wm transient $win .
wm overrideredirect $win 1
ttk::button $win.btnOpenFolder -text [::msgcat::mc "Open folder"] -command {
destroy .welcome
set folderPath [FileOper::OpenFolderDialog]
if {$folderPath != ""} {
set activeProject $folderPath
FileOper::ReadFolder $folderPath
ReadFilesFromDirectory $folderPath $folderPath
}
}
ttk::button $win.btnOpenFile -text [::msgcat::mc "Open file"] -command {
destroy .welcome
set filePath [FileOper::OpenDialog]
if {$filePath != ""} {
FileOper::Edit $filePath
}
}
ttk::button $win.btnNewFile -compound center -text [::msgcat::mc "New file"] \
-command {
destroy .welcome
Editor::New
}
pack $win.btnOpenFolder -expand true -fill x -side top -padx 3 -pady 3
pack $win.btnOpenFile -expand true -fill x -side top -padx 3 -pady 3
pack $win.btnNewFile -expand true -fill x -side top -padx 3 -pady 3
bind $win <Escape> "destroy $win"
# Определям расстояние до края экрана (основного окна) и если
# оно меньше размера окна со списком то сдвигаем его вверх
set winGeom [winfo reqheight $win]
set topHeight [winfo height .]
# puts "$x, $y, $winGeom, $topHeight"
if [expr [expr $topHeight - $y] < $winGeom] {
set y [expr $topHeight - $winGeom]
}
wm geom $win +$x+$y
focus $win.btnOpenFolder
}
proc ToolBtnTreePress {} {
global cfgVariables activeProject
if [info exists activeProject] {
if {$activeProject ne ""} {
ViewFilesTree true
}
} else {
WelcomeDialog
}
}
proc Del {} { proc Del {} {
return return
@@ -64,20 +187,20 @@ proc YScrollCommand {txt canv} {
$canv yview" $canv yview"
} }
proc ResetModifiedFlag {w} { proc ResetModifiedFlag {w nbEditor} {
global modified nbEditor global modified
$w.frmText.t edit modified false $w.frmText.t edit modified false
set modified($w) "false" set modified($w) "false"
set lbl [string trimleft [$nbEditor tab $w -text] "* "] set lbl [string trimleft [$nbEditor tab $w -text] "* "]
puts "ResetModifiedFlag: $lbl" # puts "ResetModifiedFlag: $lbl"
$nbEditor tab $w -text $lbl $nbEditor tab $w -text $lbl
} }
proc SetModifiedFlag {w} { proc SetModifiedFlag {w nbEditor} {
global modified nbEditor global modified
#$w.frmText.t edit modified false #$w.frmText.t edit modified false
set modified($w) "true" set modified($w) "true"
set lbl [$nbEditor tab $w -text] set lbl [$nbEditor tab $w -text]
puts "SetModifiedFlag: $w; $modified($w); >$lbl<" # puts "SetModifiedFlag: $w; $modified($w); >$lbl<"
if {[regexp -nocase -all -- {^\*} $lbl match] == 0} { if {[regexp -nocase -all -- {^\*} $lbl match] == 0} {
set lbl "* $lbl" set lbl "* $lbl"
} }
@@ -106,12 +229,27 @@ proc ImageBase64Encode {} {
} }
} }
proc FindImage {ext} { proc FindImage {ext} {
set imageType {
PNG
JPG
JPEG
WEBP
GIF
TIFF
JP2
ICO
XPM
SVG
}
foreach img [image names] { foreach img [image names] {
if [regexp -nocase -all -- "^($ext)(_)" $img match v1 v2] { if [regexp -nocase -all -- "^($ext)(_16x12)" $img match v1 v2] {
# puts "\nFindinig images: $img \n" # puts "\nFindinig images: $img \n"
return $img return $img
} }
} }
if {[lsearch -exact -nocase $imageType $ext] != -1} {
return image_16x12
}
} }
namespace eval Help { namespace eval Help {
@@ -135,3 +273,413 @@ namespace eval Help {
} }
} }
} }
proc SearchVariable {txt} {
global fileStructure project variables
set varName [$txt get {insert wordstart} {insert wordend}]
puts ">>>$varName<<<"
if {[info exists project] == 0} {return}
foreach f [array names project] {
puts "--$f"
puts "----"
foreach a $project($f) {
puts "-----$variables($a)"
foreach b $variables($a) {
puts "------$b -- [lindex $b 0]"
if {$varName eq [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]
}
}
}
}
if [info exists l] {
FindVariablesDialog $txt $l
} else {
return
}
}
proc GetVariableFilePath {txt} {
set str [$txt get {insert linestart} {insert lineend}]
if [regexp -nocase -all -- {^([0-9A-Za-z\-_:]*?) > (.*?) > (.*?)$} $str match vName vValue vPath] {
return [list $vName $vPath $vValue]
}
}
proc FindVariablesDialog {txt args} {
global editors lexers cfgVariables
# variable txt
variable win
variable t $txt
# set txt $w.frmText.t
set box [$txt bbox insert]
set x [expr [lindex $box 0] + [winfo rootx $txt] ]
set y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
set win .findVariables
if [winfo exists .varhelper] {
destroy .varhelper
}
if { [winfo exists $win] } { destroy $win }
toplevel $win
wm transient $win .
wm overrideredirect $win 1
# set win [canvas $win.c -yscrollcommand "$win.v set" -xscrollcommand "$win.h set"]
# listbox $win.lBox -width 50 -border 2 -yscrollcommand "$win.yscroll set" -border 1
# ttk::treeview $win.lBox -show headings -height 5\
# -columns "variable value path" -displaycolumns "variable value path"\
# -yscrollcommand [list $win.v set] -xscrollcommand [list $win.h set]
ctext $win.lBox -height 5 -font $cfgVariables(font) -wrap none \
-yscrollcommand [list $win.v set] -xscrollcommand [list $win.h set] \
-linemapfg $cfgVariables(lineNumberFG) -linemapbg $cfgVariables(lineNumberBG)
ttk::scrollbar $win.v -orient vertical -command "$win.lBox yview"
ttk::scrollbar $win.h -orient horizontal -command "$win.lBox xview"
# pack $win.lBox -expand true -fill y -side left
# pack $win.yscroll -side left -expand false -fill y
# pack $win.xscroll -side bottom -expand false -fill x
grid $win.lBox -row 0 -column 0 -sticky nsew
grid $win.v -row 0 -column 1 -sticky nsew
grid $win.h -row 1 -column 0 -sticky nsew
grid columnconfigure $win 0 -weight 1
grid rowconfigure $win 0 -weight 1
# $win.lBox heading variable -text [::msgcat::mc "Variable"]
# $win.lBox heading value -text [::msgcat::mc "Value"]
# $win.lBox heading path -text [::msgcat::mc "File path"]
# set height 0
foreach { word } $args {
foreach lst $word {
# set l [split $lst " "]
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"
# $win.lBox insert end $word
incr height
}
}
# $win.lBox selection set I001
# catch { $win.lBox activate 0 ; $win.lBox selection set 0 0 }
if { $height > 10 } { set height 10 }
$win.lBox configure -height $height
bind $win <Escape> {
destroy $win
focus -force $t.t
break
}
bind $win.lBox <Escape> {
destroy $win
focus -force $t.t
break
}
bind $win.lBox <Return> {
# set findString [dict get $lexers [dict get $editors $Editor::txt fileType] procFindString]
# set id [$win.lBox selection]
# set values [$win.lBox item $id -values]
# set key [lindex [split $id "::"] 0]
#
# puts "- $id - $values - $key"
# regsub -all {PROCNAME} $findString $values str
# Editor::FindFunction "$str"
set _v [GetVariableFilePath $win.lBox]
set varName [lindex $_v 0]
set path [lindex $_v 1]
unset _v
if {$path ne ""} {
destroy .findVariables
FileOper::Edit $path
Editor::FindFunction $t "$varName"
}
# $txt tag remove sel 1.0 end
# focus $Editor::txt.t
break
}
# bind $win.lBox <Double-ButtonPress-1> {Tree::DoublePressItem $win.lBox}
bind $win.lBox <ButtonRelease-1> {
set _v [GetVariableFilePath $win.lBox]
set varName [lindex $_v 0]
set path [lindex $_v 1]
unset _v
if {$path ne ""} {
destroy .findVariables
FileOper::Edit $path
Editor::FindFunction $t "$varName"
}
break
}
# bind $win.lBox <Any-Key> {Editor::ListBoxSearch %W %A}
# Определям расстояние до края экрана (основного окна) и если
# оно меньше размера окна со списком то сдвигаем его вверх
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]
}
ctext::addHighlightClassForSpecialChars $win.lBox namespaces #4f64ff {>}
$win.lBox highlight 1.0 end
wm geom $win +$x+$y
$win.lBox mark set insert 1.0
$win.lBox see 1.0
focus -force $win.lBox.t
# $win.lBox focus I001
}
## Search string into all files from directory
proc SearchStringInFolder {str} {
global cfgVariables activeProject tcl_platform
set res ""
if {$tcl_platform(platform) == "windows"} {
} elseif {$tcl_platform(platform) == "mac"} {
} elseif {$tcl_platform(platform) == "unix"} {
puts "$cfgVariables(searchCommand) $cfgVariables(searchCommandOptions) $str $activeProject"
# Составляем строку (точнее список) для запуска команды
set cmd exec
regsub -all {\[} $str {\\[} str
regsub -all {\]} $str {\\]} str
lappend cmd $cfgVariables(searchCommand)
foreach o [split $cfgVariables(searchCommandOptions) " "] {
lappend cmd $o
}
lappend cmd $str
lappend cmd $activeProject
# запускаем
# puts $cmd
catch $cmd pipe
# puts $pipe
# fileevent $pipe readable
# fconfigure $pipe -buffering none -blocking no
}
# while {[chan gets $pipe line] >= 0} {
# puts "--> $line"
# }
foreach line [split $pipe "\n"] {
if [regexp -nocase -all -line -- {^((\/[\w\-_\.\s]+)+):([0-9]+):\s*(.+?)} $line match fullPath fileName lineNumber fullString] {
# puts "$fullPath $fileName $lineNumber $fullString"
lappend res [list $lineNumber $fullPath $fullString]
}
}
if {$res ne ""} {
return $res
} else {
return false
}
}
proc InsertListIntoText {win lst} {
set height 0
set fCount 0
set fName ""
# puts $lst
foreach { word } $lst {
foreach lst $word {
# set l [split $lst " "]
# 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"
# $win.lBox insert end $word
incr height
if {$fName ne [lindex $lst 1]} {
set fName [lindex $lst 1]
incr fCount
}
}
}
set rows $height
if { $height > 10 } { set height 10 }
$win.lBox configure -height $height
unset height
return [list $rows $fCount]
}
proc FindInFilesDialog {txt {args ""}} {
global editors lexers cfgVariables
# variable txt
variable win
variable t $txt
variable lblText "[::msgcat::mc "Found"] %s\
[::msgcat::mc "Matches"]\
[::msgcat::mc "In"] %s\
[::msgcat::mc "Files"]"
# puts $txt
# set txt $w.frmText.t
if {$txt ne ""} {
focus $txt
set box [$txt bbox insert]
set x [expr [lindex $box 0] + [winfo rootx $txt] ]
set y [expr [lindex $box 1] + [winfo rooty $txt] + [lindex $box 3] ]
} else {
set txt .frmWork
set x [winfo rootx .frmWork]
set y [winfo rooty .frmWork]
}
set win .find
if { [winfo exists $win] } { destroy $win; return false}
toplevel $win
wm transient $win .
wm overrideredirect $win 1
# set win [canvas $win.c -yscrollcommand "$win.v set" -xscrollcommand "$win.h set"]
ttk::entry $win.entryFind -width 30 -textvariable findString
ttk::entry $win.entryReplace -width 30 -textvariable replaceString
set cmd {
$win.lBox delete 1.0 end
set res [list [SearchStringInFolder $findString]]
set rows [InsertListIntoText $win $res]
set lblText "[::msgcat::mc "Found"] [lindex $rows 0]\
[::msgcat::mc "Matches"]\
[::msgcat::mc "In"] [lindex $rows 1]\
[::msgcat::mc "Files"]"
.find.lblCounter configure -text $lblText
# unset lblText
ctext::addHighlightClassForSpecialChars $win.lBox namespaces #4f64ff {>}
$win.lBox highlight 1.0 end
$win.lBox mark set insert 1.0
$win.lBox see 1.0
focus -force $win.lBox.t
}
ttk::button $win.bForward -image forward_20x20 -command $cmd
ttk::button $win.bDoneAll -image doneall_20x20 -command {
# Editor::FindReplaceText $Editor::txt "$findString" "$replaceString" $regexpSet
}
ttk::label $win.lblCounter -justify right -anchor w -text ""
ctext $win.lBox -height 5 -font $cfgVariables(font) -wrap none \
-yscrollcommand [list $win.v set] -xscrollcommand [list $win.h set] \
-linemapfg $cfgVariables(lineNumberFG) -linemapbg $cfgVariables(lineNumberBG)
ttk::scrollbar $win.v -orient vertical -command "$win.lBox yview"
ttk::scrollbar $win.h -orient horizontal -command "$win.lBox xview"
bind $win.entryFind <Return> $cmd
grid $win.entryFind -row 0 -column 0 -sticky nsew
grid $win.entryReplace -row 1 -column 0 -sticky nsew
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 4 -sticky we
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
if {$args ne ""} {
set rows [InsertListIntoText $win $args]
set lblText [format $lblText [lindex $rows 0] [lindex $rows 1]]
# focus -force $win.lBox.t
} else {
set lblText ""
# focus -force $win.entryFind
}
.find.lblCounter configure -text $lblText
unset lblText
# $win.lBox selection set I001
# catch { $win.lBox activate 0 ; $win.lBox selection set 0 0 }
bind $win <Escape> {
destroy $win
focus -force $t
break
}
bind $win.lBox <Escape> {
destroy $win
focus -force $t
break
}
bind $win.lBox <Return> {
set _v [GetVariableFilePath $win.lBox]
set lineNum [lindex $_v 0]
set path [lindex $_v 2]
unset _v
# puts "$lineNum $path"
if {$path ne ""} {
destroy .find
set fr [FileOper::Edit $path]
Editor::GoToLineNumber $fr.frmText.t.t $lineNum
}
break
}
# bind $win.lBox <Double-ButtonPress-1> {Tree::DoublePressItem $win.lBox}
bind $win.lBox <ButtonRelease-1> {
set _v [GetVariableFilePath $win.lBox]
set lineNum [lindex $_v 0]
set path [lindex $_v 2]
unset _v
# puts "$lineNum $path"
if {$path ne ""} {
destroy .find
set fr [FileOper::Edit $path]
Editor::GoToLineNumber $fr.frmText.t.t $lineNum
}
break
}
# bind $win.lBox <Any-Key> {Editor::ListBoxSearch %W %A}
# Определям расстояние до края экрана (основного окна) и если
# оно меньше размера окна со списком то сдвигаем его вверх
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]
}
ctext::addHighlightClassForSpecialChars $win.lBox namespaces #4f64ff {>}
$win.lBox highlight 1.0 end
wm geom $win +$x+$y
$win.lBox mark set insert 1.0
$win.lBox see 1.0
if {$args ne ""} {
focus -force $win.lBox.t
} else {
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]"
}

View File

@@ -12,46 +12,158 @@ package require fileutil
package require Thread package require Thread
# TCL procedure # TCL procedure
proc ReadFileStructureTCL {fileFullName} {
global procList proc GetVariablesFromFile {fileName} {
set f [open "$fileFullName" r] global tree nbEditor editors lexers project
set fileType [string toupper [string trimleft [file extension $fileName] "."]]
set procList ""
set varList ""
set params ""
set varsBegin false
puts $fileName
set f [open "$fileName" r]
if {[dict exists $lexers $fileType] == 0} {return}
while {[gets $f line] >=0 } { while {[gets $f line] >=0 } {
if {[regexp -nocase -all -- {^\s*?(proc) (::|)(\w+)(::|:|)(\w+)\s*?(\{|\()(.*)(\}|\)) \{} $line match v1 v2 v3 v4 v5 v6 params v8]} { if {[dict exists $lexers $fileType varRegexpCommandMultiline] != 0 } {
set procName "$v2$v3$v4$v5" if {[eval [dict get $lexers $fileType varRegexpCommandMultiline]]} {
lappend procList($fileFullName) [list $procName $params] if [info exists indent] {
set indentSize [string length $indent]
} else {
set indentSize 0
}
set varsBegin true
puts "====== $varsBegin $indentSize"
continue
# lappend varList [list $varName $varValue]
}
}
if {$varsBegin eq "true"} {
set l [GetVarFromLine $line $fileType]
if {$line eq ""} {
set varsBegin false
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]<"
continue
}
}
lappend varList [list [lindex $l 0] [lindex $l 1] [lindex $l 2]]
}
}
# puts $procList
# puts $varList
close $f
return $varList
}
proc GetVarFromLine {line fileType} {
global lexers
if {[dict exists $lexers $fileType varRegexpCommand] != 0 } {
if {[eval [dict get $lexers $fileType varRegexpCommand]]} {
if [info exists varName] {
set varName [string trim $varName]
} else {
set varName ""
}
if [info exists varValue] {
set varValue [string trim $varValue]
} else {
set varValue ""
}
if [info exists varType] {
set varType [string trim $varType]
} else {
set varType ""
}
set indentLength [string length $indent]
puts "variable: $varName, value: $varValue, type: $varType, indent: >$indent< $indentLength"
return [list $varName $varValue $varType $indentLength]
}
}
}
proc GetVariablesFromVarFile {fileName} {
global tree nbEditor editors lexers project
set fileType [string toupper [string trimleft [file extension $fileName] "."]]
set procList ""
set varList ""
set params ""
puts $fileName
set f [open "$fileName" r]
if {[dict exists $lexers $fileType] == 0} {return}
while {[gets $f line] >=0 } {
# Выбираем процедуры (функции, классы и т.д.)
# if {[dict exists $lexers $fileType procRegexpCommand] != 0 } {
# if {[eval [dict get $lexers $fileType procRegexpCommand]]} {
# set procName_ [string trim $procName]
# # puts [Tree::InsertItem $tree $treeItemName $procName_ "procedure" "$procName_ ($params)"]
# lappend procList [list $procName_ $params]
# unset procName_
# }
# }
# Выбираем переменные
lappend varList [GetVarFromLine $line $fileType]
}
# puts $procList
# puts $varList
close $f
return $varList
}
proc ReadFilesFromDirectory {directory root {type ""}} {
global procList project lexers variables
foreach i [split [dict get $lexers ALL varDirectory] " "] {
lappend l [string trim $i]
# puts "---->$i"
}
if {[catch {cd $directory}] != 0} {
return ""
}
foreach fileName [glob -nocomplain *] {
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"
} elseif {[file isdirectory $fileName] == 1} {
# set type ""
ReadFilesFromDirectory [file join $directory $fileName] $root
}
if {[string match {*inventory*} [string tolower $fileName]]} {
lappend project($root) [file join $root $directory $fileName]
set variables([file join $root $directory $fileName]) \
[GetVariablesFromVarFile [file join $root $directory $fileName]]
}
if {[string tolower $fileName] eq "ansible.cfg"} {
# puts "find ansible.cfg [file join $root $directory $fileName]"
set f [open [file join $root $directory $fileName] r]
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]) \
[GetVariablesFromVarFile [file join $root $directory $fileName]]
}
} }
} }
close $f close $f
} }
# GO function if {$type eq "var" && [file isdirectory [file join $root $directory $fileName]] != 1} {
proc ReadFileStructureGO {fileName} { # puts ">>>>>$root $fileName"
if {[regexp -nocase -all -- {^\s*?func\s*?\((\w+\s*?\*\w+)\)\s*?(\w+)\((.*?)\)\s*?(\(\w+\)|\w+|)\s*?\{} $line match v1 funcName params returns]} { # puts "[GetVariablesFromFile $fileName]"
# set procName "$v2$v3$v4$v5" # dict set project $root [file join $root $directory $fileName];# "[GetVariablesFromFile $fileName]"
# lappend procList($activeProject) [list $procName [string trim $params]] lappend project($root) [file join $root $directory $fileName]
if {$v1 ne ""} { set variables([file join $root $directory $fileName]) \
set linkName [lindex [split $v1 " "] 1] [GetVariablesFromVarFile [file join $root $directory $fileName]]
set functionName "\($linkName\).$funcName" # puts "[file join $root $directory $fileName]---$variables([file join $root $directory $fileName])"
} }
# tree parent item type text
lappend procList($fuleFullName) [list $functionName $params]
}
if {[regexp -nocase -all -- {^\s*?func\s*?(\w+)\((.*?)\) (\(\w+\)|\w+|)\s*?\{} $line match funcName params returns]} {
lappend procList($fuleFullName) [list $functonName $params]
}
}
proc ReadFilesFromDirectory {directory} {
global procList
puts $directory
foreach fileName [fileutil::findByPattern $directory *.tcl] {
puts "Find file: $fileName"
ReadFileStructureTCL $fileName
}
set f [open "/tmp/test" w]
foreach name [array names procList] {
puts $f "$name: $procList($name)"
} }
} }

View File

@@ -27,6 +27,12 @@ namespace eval Tree {
# puts ">>>>>>>>>>> [string tolower $text]; [string match {*docker*} [string tolower $text]]" # puts ">>>>>>>>>>> [string tolower $text]; [string match {*docker*} [string tolower $text]]"
if {[string match {*docker*} [string tolower $text]]} { if {[string match {*docker*} [string tolower $text]]} {
set findImg [::FindImage docker] set findImg [::FindImage docker]
} elseif {[string match {*gitlab*} [string tolower $text]]} {
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 ""} { if {$fileExt ne "" || $findImg ne ""} {
set image $findImg set image $findImg
@@ -41,6 +47,10 @@ namespace eval Tree {
set image [::FindImage debian] set image [::FindImage debian]
} elseif {[string match {*redhat*} [string tolower [file tail $item]]]} { } elseif {[string match {*redhat*} [string tolower [file tail $item]]]} {
set image [::FindImage redhat] 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 { } else {
set image pixel set image pixel
} }
@@ -51,13 +61,13 @@ namespace eval Tree {
set image proc_10x10 set image proc_10x10
} }
procedure { procedure {
regsub -all {:} $item "_" subNode regsub -all {\.|/|\\|\s|"|\{|\}|\(|\)} $item "_" subNode
# puts $subNode # puts $subNode
set image proc_10x10 set image proc_10x10
} }
} }
append id $type "::" $subNode append id $type "::" $subNode
puts "Tree ID: $id, tree item: $item" # puts "Tree ID: $id, tree item: $item"
if ![$tree exists $id] { if ![$tree exists $id] {
$tree insert $parent end -id "$id" -text " $text" -values "$item" -image $image $tree insert $parent end -id "$id" -text " $text" -values "$item" -image $image
} }
@@ -72,7 +82,7 @@ namespace eval Tree {
set key [lindex [split $id "::"] 0] set key [lindex [split $id "::"] 0]
if {$values eq "" || $key eq ""} {return} if {$values eq "" || $key eq ""} {return}
puts "$key $tree $values" # puts "$key $tree $values"
switch $key { switch $key {
directory { directory {
FileOper::ReadFolder $values FileOper::ReadFolder $values
@@ -85,23 +95,31 @@ namespace eval Tree {
} }
proc PressItem {tree} { proc PressItem {tree} {
global nbEditor lexers editors global nbEditor lexers editors activeProject
set id [$tree selection] set id [$tree selection]
$tree tag remove selected $tree tag remove selected
$tree item $id -tags selected $tree item $id -tags selected
SetActiveProject [GetItemID $tree [GetUpperItem $tree $id]]
set values [$tree item $id -values] set values [$tree item $id -values]
set key [lindex [split $id "::"] 0] set key [lindex [split $id "::"] 0]
if {$values eq "" || $key eq ""} {return} if {$values eq "" || $key eq ""} {return}
# puts "$key $tree $values" # puts "$key $tree $values"
switch $key { switch -regexp $key {
directory { directory {
FileOper::ReadFolder $values FileOper::ReadFolder $values
# $tree item $id -open false # $tree item $id -open false
} }
file { file {
FileOper::Edit $values set v [FileOper::Edit $values $nbEditor]
if {$v eq false} {
$tree delete $id
}
unset v
}
I[0-9]*? {
destroy .findVariables
FileOper::Edit [lindex $values 2] $nbEditor
} }
default { default {
set parentItem [$tree parent $id] set parentItem [$tree parent $id]
@@ -112,7 +130,7 @@ namespace eval Tree {
set findString [dict get $lexers [dict get $editors $txt fileType] procFindString] set findString [dict get $lexers [dict get $editors $txt fileType] procFindString]
regsub -all {PROCNAME} $findString $values str regsub -all {PROCNAME} $findString $values str
Editor::FindFunction "$str" Editor::FindFunction $txt "$str"
} }
} }
} }
@@ -122,4 +140,22 @@ namespace eval Tree {
return [$tree item $item -values] return [$tree item $item -values]
} }
} }
proc SelectItem {treeItemName} {
global tree
if [$tree exists $treeItemName] {
$tree see $treeItemName
$tree selection set $treeItemName
}
}
proc GetUpperItem {tree item} {
set parent [$tree parent $item]
if {$parent eq ""} {
return $item
} else {
GetUpperItem $tree $parent
}
}
} }

View File

@@ -8,4 +8,4 @@ Type=Application
StartupNotify=true StartupNotify=true
MimeType=text/plain; MimeType=text/plain;
Categories=Development;TextEditor; Categories=Development;TextEditor;
Icon=projman-48 Icon=projman

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -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

View File

@@ -9,8 +9,8 @@ exec wish "$0" -- "$@"
# Home page: https://nuk-svk.ru # Home page: https://nuk-svk.ru
###################################################### ######################################################
# Version: 2.0.0 # Version: 2.0.0
# Release: alpha # Release: alpha16
# Build: 26082022155110 # Build: 22082024151054
###################################################### ######################################################
# определим текущую версию, релиз и т.д. # определим текущую версию, релиз и т.д.
@@ -34,12 +34,6 @@ while {[gets $f line] >=0} {
} }
close $f close $f
if { $::argc > 0 } {
foreach arg $::argv {
lappend opened $arg
}
puts $opened
}
package require msgcat package require msgcat
package require inifile package require inifile
@@ -47,12 +41,21 @@ package require ctext
package require base64 package require base64
package require fileutil package require fileutil
package require Thread package require Thread
package require fileutil::magic::filetype
# Устанавливаем текущий каталог # Устанавливаем текущий каталог
set dir(root) [pwd] set dir(root) [pwd]
set dir(doc) [file join $dir(root) doc] set dir(doc) [file join $dir(root) doc]
# ДОбавляем в список файлы (каталоги) из командной строки
if { $::argc > 0 } {
foreach arg $::argv {
lappend opened $arg
}
puts $opened
}
# Устанавливаем рабочий каталог, если его нет то создаём. # Устанавливаем рабочий каталог, если его нет то создаём.
# Согласно спецификации XDG проверяем наличие переменных и каталогов # Согласно спецификации XDG проверяем наличие переменных и каталогов
if [info exists env(XDG_CONFIG_HOME)] { if [info exists env(XDG_CONFIG_HOME)] {
@@ -111,12 +114,36 @@ source [file join $dir(lib) gui.tcl]
# Open the PATH if command line argument has been setting # Open the PATH if command line argument has been setting
if [info exists opened] { if [info exists opened] {
puts $opened
foreach path $opened { foreach path $opened {
# Приводим путь к полному виду
if {[file pathtype $path] ne "absolute"} {
set path [file normalize $path]
}
if [file isdirectory $path] { if [file isdirectory $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 FileOper::ReadFolder $path
ReadFilesFromDirectory $path $path
} elseif [file exists $path] { } elseif [file exists $path] {
ResetModifiedFlag [FileOper::Edit $path] # ResetModifiedFlag [FileOper::Edit $path]
FileOper::Edit $path
}
}
} else {
if {$cfgVariables(opened) ne ""} {
# puts "<$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)
ReadFilesFromDirectory $cfgVariables(opened) $cfgVariables(opened)
if {$cfgVariables(editedFiles) ne ""} {
foreach f [split $cfgVariables(editedFiles) " "] {
# puts $f
FileOper::Edit $f
}
} }
} }
} }

42
redhat/build-rpm.sh Executable file
View 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
View File

@@ -0,0 +1,55 @@
Name: projman
Version: 2.0.0
Release: rh1
Summary: Tcl/Tk Project Manager
License: GPL
Group: Development/Tcl
Url: https://nuk-svk.ru
BuildArch: noarch
Source: %name-%version-%release.tar.gz
Requires: tcl, tk, tklib, tcllib
%description
This a editor for programming in TCL/Tk (and other language). It includes a file manager, a source editor with syntax highlighting and code navigation, a context-sensitive help system, Git support, and much more.
%description -l ru_RU.UTF8
Интегрированная среда для программирования на Tcl/Tk. Включает в себя - менеджер проектов, полнофункциональный редактор, систему навигации по файлам и структуре файлов и многое другое.
%prep
%setup -n %name
%build
%install
mkdir -p $RPM_BUILD_ROOT%_bindir
mkdir -p $RPM_BUILD_ROOT%_datadir/%name/lib/msgs
mkdir -p $RPM_BUILD_ROOT%_datadir/%name/theme
mkdir -p $RPM_BUILD_ROOT%{_datarootdir}/applications
install -p -m755 projman $RPM_BUILD_ROOT%_bindir/%name
install -p -m755 tkregexp.tcl $RPM_BUILD_ROOT%_bindir/tkregexp
# install -p -m644 *.tcl $RPM_BUILD_ROOT%_datadir/%name/
install -p -m644 lib/*.tcl $RPM_BUILD_ROOT%_datadir/%name/lib/
install -p -m644 lib/msgs/*.* $RPM_BUILD_ROOT%_datadir/%name/lib/msgs/
install -p -m644 theme/*.tcl $RPM_BUILD_ROOT%_datadir/%name/theme
install -p -m644 projman.desktop $RPM_BUILD_ROOT%{_datarootdir}/applications
%post
%update_menus
%postun
%clean_menus
%files
%doc INSTALL CHANGELOG TODO LICENSE README.md
%_bindir/%name
%_bindir/tkregexp
%_datarootdir/applications/%name.desktop
%_datadir/%name
%changelog
* Mon Nov 28 2022 Sergey Kalinin <svk@nuk-svk.ru> 2.0.0
- Initial release

158
theme/black.tcl Normal file
View File

@@ -0,0 +1,158 @@
# black.tcl -
#
# Experimental!
#
# Copyright (c) 2007-2008 Mats Bengtsson
#
# $Id: black.tcl,v 1.2 2009/10/25 19:21:30 oberdorfer Exp $
package require Tk 8.4; # minimum version for Tile
package require tile 0.8; # depends upon tile
namespace eval ttk {
namespace eval theme {
namespace eval black {
variable version 0.1
}
}
}
namespace eval ttk::theme::black {
#variable imgdir [file join [file dirname [info script]] black]
#variable I
#array set I [tile::LoadImages $imgdir *.png]
variable dir [file dirname [info script]]
# NB: These colors must be in sync with the ones in black.rdb
variable colors
array set colors {
-disabledfg "DarkGrey"
-frame "#424242"
-dark "#222222"
-darker "#121212"
-darkest "black"
-lighter "#626262"
-lightest "#ffffff"
-selectbg "#4a6984"
-selectfg "#ffffff"
}
if {[info commands ::ttk::style] ne ""} {
set styleCmd ttk::style
} else {
set styleCmd style
}
$styleCmd theme create black -parent clam -settings {
# -----------------------------------------------------------------
# Theme defaults
#
$styleCmd configure "." \
-background $colors(-frame) \
-foreground white \
-bordercolor $colors(-darkest) \
-darkcolor $colors(-dark) \
-lightcolor $colors(-lighter) \
-troughcolor $colors(-darker) \
-selectbackground $colors(-selectbg) \
-selectforeground $colors(-selectfg) \
-selectborderwidth 0 \
-font "{Droid Sans Mono} 9" \
;
$styleCmd map "." \
-background [list disabled $colors(-frame) \
active $colors(-lighter)] \
-foreground [list disabled $colors(-disabledfg)] \
-selectbackground [list !focus $colors(-darkest)] \
-selectforeground [list !focus white] \
;
# ttk widgets.
$styleCmd configure TButton \
-width -8 -padding {5 1} -relief link
$styleCmd configure TMenubutton\
-relief flat -arrowsize 0
$styleCmd configure TCheckbutton \
-indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1}
$styleCmd configure TRadiobutton \
-indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1}
$styleCmd configure TEntry \
-fieldbackground gray20 -foreground black \
-padding {2 0} -border -1
$styleCmd configure TCombobox \
-fieldbackground white -foreground black \
-padding {2 0}
$styleCmd configure TSpinbox \
-fieldbackground white -foreground black \
-padding {2 0}
$styleCmd configure TNotebook \
-border -1
$styleCmd configure TNotebook.Tab \
-padding {6 2 6 2} \
-border -1
$styleCmd map TNotebook.Tab -background [list \
selected $colors(-lighter)]
# tk widgets.
$styleCmd map Menu \
-background [list active $colors(-lighter)] \
-foreground [list disabled $colors(-disabledfg)]
$styleCmd configure TreeCtrl \
-background gray30 -itembackground {gray60 gray50} \
-itemfill white -itemaccentfill yellow -border -1
$styleCmd map Treeview\
-background [list selected $colors(-lighter)] \
-foreground [list selected $colors(-selectfg)]
# -background [list selected $colors(-selectbg)] \
$styleCmd configure Treeview -fieldbackground gray25
}
puts [ttk::style element names]
}
# A few tricks for Tablelist.
namespace eval ::tablelist:: {
proc blackTheme {} {
variable themeDefaults
array set colors [array get ttk::theme::black::colors]
array set themeDefaults [list \
-background "Black" \
-foreground "White" \
-disabledforeground $colors(-disabledfg) \
-stripebackground "#191919" \
-selectbackground "#4a6984" \
-selectforeground "DarkRed" \
-selectborderwidth 0 \
-font TkTextFont \
-labelbackground $colors(-frame) \
-labeldisabledBg "#dcdad5" \
-labelactiveBg "#eeebe7" \
-labelpressedBg "#eeebe7" \
-labelforeground white \
-labeldisabledFg "#999999" \
-labelactiveFg white \
-labelpressedFg white \
-labelfont TkDefaultFont \
-labelborderwidth 2 \
-labelpady 1 \
-arrowcolor "" \
-arrowstyle sunken10x9 \
]
}
}
package provide ttk::theme::black $::ttk::theme::black::version

View File

@@ -46,10 +46,10 @@ namespace eval ttk::theme::dark {
-darkcolor $colors(-dark) \ -darkcolor $colors(-dark) \
-lightcolor $colors(-lighter) \ -lightcolor $colors(-lighter) \
-troughcolor $colors(-darker) \ -troughcolor $colors(-darker) \
-selectborderwidth 1 \
-font "{Droid Sans Mono} 9" \
-selectbackground $colors(-selectbg) \ -selectbackground $colors(-selectbg) \
-selectforeground $colors(-selectfg) \ -selectforeground $colors(-selectfg) \
-selectborderwidth 0 \
-font "{Droid Sans Mono} 9"
ttk::style map "." \ ttk::style map "." \
-background [list disabled $colors(-frame) \ -background [list disabled $colors(-frame) \
@@ -58,17 +58,23 @@ namespace eval ttk::theme::dark {
-selectbackground [list !focus $colors(-darkest)] \ -selectbackground [list !focus $colors(-darkest)] \
-selectforeground [list !focus #ffffff] -selectforeground [list !focus #ffffff]
# \
# -selectbackground [list !focus $colors(-darkest)] \
# -selectforeground [list !focus #ffffff]
# ttk widgets. # ttk widgets.
ttk::style configure TButton \ ttk::style configure TButton \
-width -8 -padding {5 1} -relief link -width -8 -padding {5 1} -relief link
ttk::style configure TMenubutton -relief flat -arrowsize 0 ttk::style configure TMenubutton -relief flat -arrowsize 0
ttk::style configure TCheckbutton \ ttk::style configure TCheckbutton \
-indicatorbackground "#ffffff" -indicatormargin {1 1 4 1} -indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1}
ttk::style configure TRadiobutton \ ttk::style configure TRadiobutton \
-indicatorbackground "#ffffff" -indicatormargin {1 1 4 1} -indicatorbackground "#ffffff" -indicatormargin {1 1 4 1}
ttk::style configure TFrame -relief flat -border -1 ttk::style configure TFrame -relief flat -border -1
# ttk::style configure TEntry -fieldbackground #ffffff -foreground #000000 -padding {2 0} ttk::style configure TEntry -fieldbackground $colors(-lightframe) \
ttk::style configure TEntry -fieldbackground $colors(-lightframe) -foreground #ffffff -padding {2 0} -padding {2 0}
ttk::style configure TLabel -foreground $colors(-disabledfg) \
-background $colors(-frame) -padding {2 0}
ttk::style configure TCombobox \ ttk::style configure TCombobox \
-fieldbackground $colors(-lightframe) \ -fieldbackground $colors(-lightframe) \
@@ -79,7 +85,9 @@ namespace eval ttk::theme::dark {
-fieldbackground $colors(-lightframe) \ -fieldbackground $colors(-lightframe) \
-foreground #ffffff -foreground #ffffff
ttk::style configure TNotebook ttk::style configure TScrollbar -relief flat -border 0
# ttk::style configure TNotebook
# -bordercolor $colors(-frame) # -bordercolor $colors(-frame)
ttk::style configure TNotebook.Tab \ ttk::style configure TNotebook.Tab \
-padding {6 2 6 2} -padding {6 2 6 2}
@@ -100,14 +108,16 @@ namespace eval ttk::theme::dark {
# -indicatorsize -1 \ # -indicatorsize -1 \
# -padding 0 # -padding 0
ttk::style configure TreeCtrl \
-background gray30 -itembackground {gray60 gray50} \
-itemfill white -itemaccentfill yellow
ttk::style configure Text \ ttk::style configure Text \
-linemapbg [list active $colors(-linemapbg)]\ -linemapbg [list active $colors(-linemapbg)]\
-linemapfg [list active $colors(-linemapfg)]\ -linemapfg [list active $colors(-linemapfg)]\
-background [list active $colors(-lighter)] \ -background [list active $colors(-lighter)] \
-foreground [list disabled $colors(-disabledfg)] -foreground [list disabled $colors(-disabledfg)]
ttk::style configure TLabel -foreground $colors(-disabledfg) -padding {2 0}
# ttk::style configure TreeCtrl \ # ttk::style configure TreeCtrl \
# -background gray30 -itembackground {gray60 gray50} \ # -background gray30 -itembackground {gray60 gray50} \
# -itemfill #ffffff -itemaccentfill yellow # -itemfill #ffffff -itemaccentfill yellow

View File

@@ -1084,14 +1084,16 @@ if {$argc > 1} {
puts "Usage: $argv0 <sampleFile>" puts "Usage: $argv0 <sampleFile>"
} elseif {$argc == 1} { } elseif {$argc == 1} {
set filename [lindex $argv 0] set filename [lindex $argv 0]
if [file exists $filename] {
set file [open $filename] set file [open $filename]
set data [read $file [file size $filename]] set data [read $file [file size $filename]]
close $file close $file
# memorize location # memorize location
set regexp::data(v:dir) [file dirname $filename] set regexp::data(v:dir) [file dirname $filename]
set regexp::data(v:file) [file tail $filename] set regexp::data(v:file) [file tail $filename]
} else {
set data [lindex $argv 0]
}
regexp::sample:set $data regexp::sample:set $data
unset data unset data
} }
@@ -1366,4 +1368,3 @@ proc make-regexp::make-regexp {words} {