Compare commits

...

110 Commits

Author SHA1 Message Date
df1d9aa36d Добавил проверку пакета Img. И поправил проверку типов изображений
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 1m23s
2025-10-31 17:30:16 +03:00
cff798a9f1 Переделал сигналы и сочетния
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 1m23s
2025-10-30 14:53:30 +03:00
64287f1a01 Небольшие исправления
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-30 14:47:05 +03:00
5e1c057bc5 Поправил changelog
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-30 13:12:49 +03:00
ab740f0be8 Добавлен перевод фокуса ввода на прежнее окно после закрытия диалога выполнения.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-30 13:10:54 +03:00
4c6713b2d3 Добавлена передача сигналов для закрытия запущенного процесса
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-30 12:52:21 +03:00
dc5fd60c0d Исправлен changelog
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-29 21:48:31 +03:00
c3848566df Удалил линее
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-29 21:44:26 +03:00
961d597032 Изменил виджет текста в окне псевдо-терминала. Добавил подстановку имени файла к командную строку по шаблону %f 2025-10-29 21:42:34 +03:00
5d70d508cd Добавлен диалог настроек, и кнопка на панели. Для редактирования файла настроек программы
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-29 20:48:52 +03:00
8619e3e1f4 Добавил псевдо-терминал, и команды запуска файлов.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-29 19:59:57 +03:00
8834c0954e Исправлен changelog
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-29 13:10:31 +03:00
4e67dbfccf Добавлен диалог при открытии файлов отличных от текстовых
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-29 09:08:28 +03:00
e5b0468a44 Поправил тему оформления
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-28 16:05:56 +03:00
a9ac54ce54 Новая сборка
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-27 21:01:15 +03:00
297d0f7420 Исправлена работа в windows 2025-10-27 20:59:27 +03:00
9b083515ba Уменьшил колдичество выводимой отладочной информации
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-27 19:32:08 +03:00
722bbc4e30 Новая сборка
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-27 14:48:18 +03:00
bdb9b2db00 Добавлено определение пути до git в зависимости от платформы. 2025-10-27 14:45:30 +03:00
22bdd7b87e Исправлено создание файла конфигурации
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-27 14:13:56 +03:00
430f7d6607 Исправлено создание файла конфигурации. Добавлены номера версий в вызов tclsh8.6 и wish8.6. Убрана зависимостить на Threads.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-27 14:05:40 +03:00
Калинин Сергей Валерьевич
f54333f942 Новая сборка
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-23 13:58:22 +03:00
Калинин Сергей Валерьевич
f6a1b440f7 Исправлено чтение структуры проекта при открытии из меню 'Открыть недавнее' 2025-10-23 13:54:54 +03:00
Калинин Сергей Валерьевич
9b69e94412 Bugfix release
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-22 09:35:08 +03:00
Калинин Сергей Валерьевич
8a1145a2d9 Bug fix with varhelper 2025-10-22 09:34:13 +03:00
Калинин Сергей Валерьевич
a78ab384ad Новая сборка
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
2025-10-21 15:47:02 +03:00
Калинин Сергей Валерьевич
b04e62434a Added the "Open Recent" menu.
The "recentlyEditedFolders" option in the configuration file contains a list of recently opened directories.
The procedures for working with this list have also been added.
2025-10-21 15:40:22 +03:00
Калинин Сергей Валерьевич
439993091f Новая сборка
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 20s
2025-10-18 16:29:50 +03:00
Калинин Сергей Валерьевич
7524a58f26 Косметические изменения. 2025-10-18 16:28:01 +03:00
Калинин Сергей Валерьевич
a6a220eb5a Исправлены ошибки при вставке кавычек, апострофа, подчеркиванеия при выделенном тексте (обрамление текста)
Исправлена отмена выдеоения при появлении окна с подсказками для автоввода.
2025-10-18 16:27:36 +03:00
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
32 changed files with 2363 additions and 465 deletions

View File

@@ -1,25 +0,0 @@
---
kind: pipeline
type: exec
name: default
platform:
os: linux
arch: amd64
steps:
- name: build DEB
commands:
- cd debian
- ./build-deb-projman.sh
- name: build RPM
commands:
- cd ../redhat
- ./build-rpm.sh
trigger:
event:
include:
- push

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 }}."

4
.gitignore vendored
View File

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

432
CHANGELOG
View File

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

View File

@@ -16,6 +16,7 @@ Highlightning and source code navigation:
* Shell (BASH)
* Markdown
* YAML (Ansible support)
* Lua
Highlightning:
@@ -28,10 +29,60 @@ For UNIX-like OS
Tcl/Tk >= 8.6 http://tcl.tk
tcllib, tklib
## 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)
- A pseudo-terminal for launching the edited file and other command
![projman_global_search.png](https://nuk-svk.ru/images/projman_terminal_1.png)
![projman_global_search.png](https://nuk-svk.ru/images/projman_terminal_2.png)
- Image viewer
![projman_imageviewer.png](https://nuk-svk.ru/images/projman_imageviewer.png)
## Getting source code
Download the source code archive https://git.nuk-svk.ru/svk/projman/archive/master.tar.gz
Download the source code https://git.nuk-svk.ru/svk/projman/
Or use git:
@@ -80,7 +131,6 @@ Or type "projman" into terminal, Or choose the name of the program "Projman" on
- 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
@@ -94,6 +144,10 @@ Or type "projman" into terminal, Or choose the name of the program "Projman" on
- Ctrl-G - Go to line dialog
- Ctrl-C - Copy selected text into buffer
- Ctrl-V - Paste text from buffer
- Ctrl-R - Open terminal for edited file
- Ctrl-Z - Send SIGTSTP signal
- Ctrl-D - Send SIGINT signal
- Ctrl-C - Send SIGKILL signal
- Alt-P - Show/Hide the file tree panel
- Alt-W - Delete the current word
@@ -102,6 +156,7 @@ Or type "projman" into terminal, Or choose the name of the program "Projman" on
- Alt-R - Delete current line
- Alt-Y - Copy current line into buffer
- Alt-S - Split the edited window horizontally
- Alt-K - Open folder
## Credits

5
TODO
View File

@@ -7,7 +7,7 @@
--- Ansible ---
1. Определение всех переменных в отдельный список
- внутри файла, конструкции вида:
- внутри файла, конструкции вида:
set_fact:
varName: value
set_fact varName value
@@ -18,5 +18,4 @@
- var1.yml
- var2.yml
3. Если используется роль и переменная не найдена в плэйбуке то искать в роли (не факт что требуется)
3. Если используется роль и переменная не найдена в плэйбуке

336
changelog-gen.tcl Executable file
View File

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

View File

@@ -10,7 +10,9 @@ echo "$VERSION, $RELEASE, $BUILD_DATE"
sed -i "/# Build:.*/c$TXT" projman.tcl
cp projman.tcl projman
cp changelog-gen.tcl changelog-gen
./changelog-gen.tcl --project-name projman --project-version ${VERSION} --project-release ${RELEASE} --out-file debian/changelog --deb --last
sed -i "s+^set\ dir(lib)+set\ dir(lib)\ /usr/share/projman/lib ;#+g" projman
@@ -19,9 +21,9 @@ sed -i "s+\[pwd\]+/usr/share/projman+g" projman
tar czf ../projman_${VERSION}.orig.tar.gz .
dpkg-buildpackage
dpkg-buildpackage -d
#cp ../projman_${VERSION}-${RELEASE}_amd64.deb /files/
rm -v projman
rm -v projman changelog-gen
rm -r -v debian/{projman,.debhelper}

397
debian/changelog vendored
View File

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

1
debian/install vendored
View File

@@ -1,4 +1,5 @@
projman /usr/bin/
changelog-gen /usr/bin/
lib/*.tcl /usr/share/projman/lib
lib/msgs/* /usr/share/projman/lib/msgs
theme /usr/share/projman/

0
errors Normal file
View File

View File

@@ -25,7 +25,7 @@ set ::configDefault "\[General\]
cfgModifyDate=''
searchCommand=/usr/bin/grep
searchCommandOptions=-r -n -H
gitCommand=/usr/bin/git
gitCommand=
# must return a mime type of file
fileTypeCommand=/usr/bin/file
fileTypeCommandOptions=-i -b
@@ -37,7 +37,7 @@ menuShow=true
statusBarShow=true
filesPanelShow=true
filesPanelPlace=left
geometry=1024x768
geometry=800x600
guiFont={Droid Sans Mono} 9
guiFontBold={Droid Sans Mono} 9 bold
guiFG=#cccccc
@@ -60,9 +60,11 @@ lineNumberShow=true
tabSize=4
procedureHelper=false
variableHelper=true
multilineComments=true
\[UserSession\]
opened=
editedFiles=
recentFolder=
"
proc Config::create {dir} {
set cfgFile [open [file join $dir projman.ini] "w+"]
@@ -101,8 +103,10 @@ proc Config::write {dir} {
# Добавим пути к открытым в редакторе файлам в переменную
if [info exists editors] {
foreach i [dict keys $editors] {
puts [dict get $editors $i]
lappend edited [dict get $editors $i fileFullPath]
# 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

View File

@@ -20,30 +20,55 @@ namespace eval Editor {
# Comment one string or selected string
proc Comment {txt fileType} {
global lexers
global lexers cfgVariables
set selIndex [$txt tag ranges sel]
set pos [$txt index insert]
set lineNum [lindex [split $pos "."] 0]
set PosNum [lindex [split $pos "."] 1]
# set posNum [lindex [split $pos "."] 1]
set useMultiLine false
if [dict exists $lexers $fileType commentSymbol] {
set symbol [dict get $lexers $fileType commentSymbol]
} else {
set symbol "#"
}
puts "Select : $selIndex"
if {[dict exists $lexers $fileType commentMultilineSymbolBegin] == 1 && $cfgVariables(multilineComments) eq "true"} {
set symbolBegin [dict get $lexers $fileType commentMultilineSymbolBegin]
} else {
set symbolBegin ""
}
if {[dict exists $lexers $fileType commentMultilineSymbolEnd] == 1 && $cfgVariables(multilineComments) eq "true"} {
set symbolEnd [dict get $lexers $fileType commentMultilineSymbolEnd]
} else {
set symbolEnd ""
}
# puts "Select : $selIndex"
if {$selIndex != ""} {
set lineBegin [lindex [split [lindex $selIndex 0] "."] 0]
set lineEnd [lindex [split [lindex $selIndex 1] "."] 0]
# Если выделенно больше одной строки то включаем многострочный комментарий
if {$lineBegin < $lineEnd} {
set useMultiLine true
}
set posBegin [lindex [split [lindex $selIndex 1] "."] 0]
set posEnd [lindex [split [lindex $selIndex 1] "."] 1]
if {$lineEnd == $lineNum && $posEnd == 0} {
set lineEnd [expr $lineEnd - 1]
}
for {set i $lineBegin} {$i <=$lineEnd} {incr i} {
#$txt insert $i.0 "# "
regexp -nocase -indices -- {^(\s*)(.*?)} [$txt get $i.0 $i.end] match v1 v2
$txt insert $i.[lindex [split $v2] 0] "$symbol "
if {$symbolEnd ne ""} {
$txt insert $lineEnd.end "\n$symbolEnd"
set lineEnd [expr $lineEnd + 2]
}
if {$symbolBegin ne ""} {
$txt insert $lineBegin.0 "$symbolBegin\n"
}
if {$symbolBegin eq "" && $symbolEnd eq ""} {
for {set i $lineBegin} {$i <= $lineEnd} {incr i} {
#$txt insert $i.0 "# "
regexp -nocase -indices -- {^(\s*)(.*?)} [$txt get $i.0 $i.end] match v1 v2
$txt insert $i.[lindex [split $v2] 0] "$symbol "
}
}
$txt tag add comments $lineBegin.0 $lineEnd.end
$txt tag raise comments
@@ -62,12 +87,12 @@ namespace eval Editor {
set lineNum [lindex [split $pos "."] 0]
set posNum [lindex [split $pos "."] 1]
if {[info procs GetComment:$fileType] ne ""} {
set commentProcedure "GetComment:$fileType"
} else {
set commentProcedure {GetComment:Unknown}
}
# set commentProcedure "GetComment"
# if {[info procs GetComment:$fileType] ne ""} {
# set commentProcedure "GetComment"
# } else {
# set commentProcedure {GetComment:Unknown}
# }
set commentProcedure "GetComment"
# puts "$fileType, $commentProcedure"
if {$selIndex != ""} {
@@ -80,7 +105,7 @@ namespace eval Editor {
}
for {set i $lineBegin} {$i <=$lineEnd} {incr i} {
set str [$txt get $i.0 $i.end]
set commentSymbolIndex [$commentProcedure $str]
set commentSymbolIndex [$commentProcedure $fileType $str]
if {$commentSymbolIndex != 0} {
$txt delete $i.[lindex $commentSymbolIndex 0] $i.[lindex $commentSymbolIndex 1]
}
@@ -91,7 +116,7 @@ namespace eval Editor {
} else {
set posNum [lindex [split $pos "."] 1]
set str [$txt get $lineNum.0 $lineNum.end]
set commentSymbolIndex [$commentProcedure $str]
set commentSymbolIndex [$commentProcedure $fileType $str]
if {$commentSymbolIndex != 0} {
$txt delete $lineNum.[lindex $commentSymbolIndex 0] $lineNum.[lindex $commentSymbolIndex 1]
}
@@ -101,35 +126,47 @@ namespace eval Editor {
}
proc GetComment {fileType str} {
global lexers
puts [dict get $lexers $fileType commentSymbol]
if {[dict exists $lexers $fileType commentSymbol] == 0} {
return
# puts [dict get $lexers $fileType commentSymbol]
if [dict exists $lexers $fileType commentSymbol] {
# return
set symbol [dict get $lexers $fileType commentSymbol]
} else {
set symbol "#"
}
regsub -all {\{} $str "\\{" str
regsub -all {\}} $str "\\}" str
regsub -all {\[} $str {\\[} str
regsub -all {\]} $str {\\]} str
if {[regexp -nocase -indices -- {(^| )([dict get $lexers $fileType commentSymbol]\s)(.+)} $str match v1 v2 v3]} {
puts "$match, $v1, $v2, $v3"
set cmd "regexp -nocase -indices -- {(^|\s+)\\s*($symbol\\s*)(.*)} {$str} match v1 v2 v3"
# puts $cmd
# puts [eval $cmd]
if [eval $cmd] {
# puts "$match, $v2, $v3"
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
} else {
return 0
}
}
proc GetComment:TCL {str} {
if {[regexp -nocase -indices -- {(^| )(#\s)(.+)} $str match v1 v2 v3]} {
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
} else {
return 0
}
}
proc GetComment:GO {str} {
# puts ">>>>>>>$str"
if {[regexp -nocase -indices -- {(^| |\t)(//\s)(.+)} $str match v1 v2 v3]} {
# puts ">>>> $match $v1 $v2 $v3"
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
} else {
return 0
}
}
# proc GetComment:TCL {str} {
# if {[regexp -nocase -indices -- {(^| )(#\s)(.+)} $str match v1 v2 v3]} {
# return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
# } else {
# return 0
# }
# }
# proc GetComment:GO {str} {
# # puts ">>>>>>>$str"
# if {[regexp -nocase -indices -- {(^| |\t)(//\s)(.+)} $str match v1 v2 v3]} {
# # puts ">>>> $match $v1 $v2 $v3"
# return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
# } else {
# return 0
# }
# }
proc GetComment:Unknown {str} {
if {[regexp -nocase -indices -- {(^| )(#\s)(.+)} $str match v1 v2 v3]} {
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
@@ -216,7 +253,7 @@ namespace eval Editor {
$txt highlight $lineBegin.0 $lineEnd.end
} else {
set str [$txt get $lineNum.0 $lineNum.end]
puts ">>>>> $str"
# puts ">>>>> $str"
if {[regexp -nocase -indices -- {(^\s*)(.*?)} $str match v1]} {
set posBegin [lindex [split $v1] 0]
set posEnd [lindex [split $v1] 1]
@@ -240,7 +277,7 @@ namespace eval Editor {
set pos [$txt index insert]
set lineNum [lindex [split $pos "."] 0]
set posNum [lindex [split $pos "."] 1]
puts "$pos"
# puts "$pos"
if {$lineNum > 1} {
# get current text
set curText [$txt get $lineNum.0 "$lineNum.0 lineend"]
@@ -338,19 +375,12 @@ namespace eval Editor {
proc SelectionHighlight {txt} {
variable selectionText
$txt tag remove lightSelected 1.0 end
set selBegin [lindex [$txt tag ranges sel] 0]
set selEnd [lindex [$txt tag ranges sel] 1]
if {$selBegin ne "" && $selEnd ne ""} {
set selectionText [$txt get $selBegin $selEnd]
# set selBeginRow [lindex [split $selBegin "."] 1]
# set selEndRow [lindex [split $selEnd "."] 1]
# puts "$selBegin, $selBeginRow; $selEnd, $selEndRow"
# set symNumbers [expr $selEndRow - $selBeginRow]
set symNumbers [expr [lindex [split $selEnd "."] 1] - [lindex [split $selBegin "."] 1]]
# puts "Selection $selectionText"
if [string match "-*" $selectionText] {
set selectionText "\$selectionText"
}
@@ -359,7 +389,6 @@ namespace eval Editor {
set selFindLine [lindex [split $ind "."] 0]
set selFindRow [lindex [split $ind "."] 1]
set endInd "$selFindLine.[expr $selFindRow + $symNumbers]"
# puts "$ind; $symNumbers; $selFindLine, $selFindRow; $endInd "
$txt tag add lightSelected $ind $endInd
}
}
@@ -369,6 +398,7 @@ namespace eval Editor {
set win .varhelper
# if { [winfo exists $win] == 0 } { return }
set ind [$win.lBox curselection]
# puts ">>>>>>>>>>>> VarHelperBind <<<<<<<<<<<<<<<<"
switch -- $K {
Prior {
@@ -413,28 +443,28 @@ namespace eval Editor {
}
} ;# proc auto_completition_key
proc VarHelperEscape {w} {
puts "VarHelperEscape"
bindtags $w.t [list [winfo parent $w.t] $w.t Text sysAfter all]
# puts ">>>>>>>>>>>> VarHelperEscape <<<<<<<<<<<<<<<<"
# bindtags $w [list [winfo parent $w] $w Text sysAfter all]
bindtags $w [list [winfo toplevel $w] $w Ctext sysAfter all]
catch { destroy .varhelper }
puts [bindtags $w]
puts [bind $w]
puts [bindtags $w.t]
puts [bind $w.t]
}
}
proc VarHelper {x y w word wordType} {
global editors lexers variables
variable txt
variable win
# set txt $w.frmText.t
# блокировка открытия диалога если запущен другой
if [winfo exists .findVariables] {
return
}
set txt $w
set win .varhelper
puts "$x $y $w $word $wordType"
# set win .varhelper
# Проверяем если есть выделение то блокировать появление диалога
if {[$txt tag ranges sel] != ""} {
puts "You have selected text [$txt tag ranges sel]"
return
}
# puts "$x $y $w $word $wordType"
set fileType [dict get $editors $txt fileType]
if {[dict exists $editors $txt variableList] != 0} {
@@ -502,20 +532,38 @@ namespace eval Editor {
}
}
# unset item
# puts $findedVars
bindtags $txt [list VarHelperBind [winfo toplevel $txt] $txt Ctext sysAfter all]
# bindtags $txt [list VarHelperBind [winfo toplevel $txt] $txt Ctext sysAfter all]
# bindtags $txt.t [list VarHelperBind [winfo parent $txt.t] $txt.t Text sysAfter all]
bind VarHelperBind <Escape> "Editor::VarHelperEscape $txt; break"
# bindtags $txt.t {[list [winfo parent $txt.t] $txt.t Text sysAfter all]};
# bindtags $txt {[list [winfo toplevel $txt] $txt Ctext sysAfter all]};
# catch { destroy .varhelper }"
bind VarHelperBind <Key> {Editor::VarHelperKey $Editor::txt %K %A; break}
if { [winfo exists $win] } { destroy $win }
# bind VarHelperBind <Escape> "Editor::VarHelperEscape $txt.t; break"
# # bindtags $txt.t {[list [winfo parent $txt.t] $txt.t Text sysAfter all]};
# # bindtags $txt {[list [winfo toplevel $txt] $txt Ctext sysAfter all]};
# # catch { destroy .varhelper }"
# bind VarHelperBind <Key> {Editor::VarHelperKey %W %K %A; break}
#
if {$findedVars eq ""} {
return
}
# puts $findedVars
VarHelperDialog $x $y $w $word $findedVars
}
proc VarHelperDialog {x y w word findedVars} {
global editors lexers variables
variable txt
variable win
# puts ">>>>>>>>>>>>>$x $y $w $word $findedVars"
# set txt $w.frmText.t
# блокировка открытия диалога если запущен другой
# if [winfo exists .findVariables] {
# return
# }
# if { [winfo exists $win] } { destroy $win }
set txt $w
set win .varhelper
# if {$findedVars eq ""} {
# return
# }
toplevel $win
wm transient $win .
wm overrideredirect $win 1
@@ -532,6 +580,8 @@ namespace eval Editor {
if { [set height [llength $findedVars]] > 10 } { set height 10 }
$win.lBox configure -height $height
# focus $win.lBox
bind $win <Escape> {
destroy $Editor::win
focus -force $Editor::txt.t
@@ -542,15 +592,13 @@ namespace eval Editor {
focus -force $Editor::txt.t
break
}
# bind $win.lBox <Return> {
# set findString [dict get $lexers [dict get $editors $Editor::txt fileType] procFindString]
# set values [.varhelper.lBox get [.varhelper.lBox curselection]]
# regsub -all {PROCNAME} $findString $values str
# Editor::FindFunction $Editor::txt "$str"
# destroy .varhelper.lBox
# # focus $Editor::txt.t
# break
# }
bind VarHelperBind <Control-Return> {
$Editor::txt delete "insert - 1 chars wordstart" "insert wordend - 1 chars"
$Editor::txt insert "insert" [.varhelper.lBox get [.varhelper.lBox curselection]]
# eval [bind VarHelperBind <Escape>]
Editor::VarHelperEscape $Editor::txt
break
}
# Определям расстояние до края экрана (основного окна) и если
# оно меньше размера окна со списком то сдвигаем его вверх
@@ -714,7 +762,7 @@ namespace eval Editor {
}
## GET KEYS CODE ##
proc Key {key str} {
puts "Pressed key code: $key, $str"
# puts "Pressed key code: $key, $str"
if {$key >= 10 && $key <= 22} {return "true"}
if {$key >= 24 && $key <= 36} {return "true"}
if {$key >= 38 && $key <= 50} {return "true"}
@@ -735,10 +783,14 @@ namespace eval Editor {
# set txt $w.frmText.t
bind $txt <KeyRelease> "catch {Editor::ReleaseKey %K $txt $fileType}"
bind $txt <KeyPress> "Editor::PressKey %K $txt"
bind $txt <Control-eacute> Quit
bind $txt <Control-igrave> "Editor::SelectionPaste $txt"
bind $txt <Control-v> "Editor::SelectionPaste $txt"
bind $txt <Control-Cyrillic_em> "Editor::SelectionPaste $txt"
bind $txt <Control-l> "SearchVariable $txt; break"
bind $txt <Control-Cyrillic_de> "SearchVariable $txt; break"
bind $txt <Control-i> "ImageBase64Encode $txt"
bind $txt <Control-Cyrillic_sha> "ImageBase64Encode $txt"
bind $txt <Control-bracketleft> "Editor::InsertTabular $txt"
bind $txt <Control-bracketright> "Editor::DeleteTabular $txt"
bind $txt <Control-comma> "Editor::Comment $txt $fileType"
@@ -748,25 +800,35 @@ namespace eval Editor {
bind $txt <ButtonRelease-1> "Editor::SearchBrackets $txt"
bind $txt <Button-1><ButtonRelease-1> "Editor::SelectionHighlight $txt"
bind $txt <<Modified>> "SetModifiedFlag $w $nb"
bind $txt <Control-i> ImageBase64Encode
bind $txt <Control-u> "Editor::SearchBrackets %W"
bind $txt <Control-Cyrillic_ghe> "Editor::SearchBrackets %W"
bind $txt <Control-J> "catch {Editor::GoToFunction $txt}"
bind $txt <Control-j> "catch {Editor::GoToFunction $txt}; break"
bind $txt <Control-Cyrillic_o> "catch {Editor::GoToFunction $txt}; break"
bind $txt <Alt-w> "$txt delete {insert wordstart} {insert wordend}"
bind $txt <Alt-odiaeresis> "$txt delete {insert wordstart} {insert wordend}"
bind $txt <Alt-Cyrillic_tse> "$txt delete {insert wordstart} {insert wordend}"
bind $txt <Alt-r> "$txt delete {insert linestart} {insert lineend + 1char}"
bind $txt <Alt-ecircumflex> "$txt delete {insert linestart} {insert lineend + 1char}"
bind $txt <Alt-Cyrillic_er> "$txt delete {insert linestart} {insert lineend + 1char}"
bind $txt <Alt-b> "$txt delete {insert linestart} insert"
bind $txt <Alt-Cyrillic_i> "$txt delete {insert linestart} insert"
bind $txt <Alt-e> "$txt delete insert {insert lineend}"
bind $txt <Alt-Cyrillic_u> "$txt delete insert {insert lineend}"
bind $txt <Alt-s> "Editor::SplitEditorH $w $fileType"
bind $txt <Alt-ucircumflex> "Editor::SplitEditorH $w $fileType"
bind $txt <Alt-Cyrillic_hardsign> "Editor::SplitEditorH $w $fileType"
bind $txt <Alt-y> "Editor::TextCopy $txt"
bind $txt <Alt-Cyrillic_en> "Editor::TextCopy $txt"
bind $txt <Control-g> "Editor::GoToLineNumberDialog $txt"
bind $txt <Control-Cyrillic_pe> "Editor::GoToLineNumberDialog $txt"
bind $txt <Control-agrave> "Editor::FindDialog $w"
bind $txt <Control-f> "Editor::FindDialog $txt"
bind $txt <Control-Cyrillic_a> "Editor::FindDialog $txt"
bind $txt <Control-F> "Editor::FindDialog $txt"
bind $txt <Control-odiaeresis> FileOper::Close
bind $txt <Control-w> FileOper::Close
bind $txt <Control-Cyrillic_tse> FileOper::Close
bind $txt <Control-o> {
set filePath [FileOper::OpenDialog]
if {$filePath != ""} {
@@ -781,6 +843,16 @@ namespace eval Editor {
}
break
}
bind $txt <Control-Cyrillic_shcha> {
set filePath [FileOper::OpenDialog]
if {$filePath != ""} {
FileOper::Edit $filePath
}
break
}
bind $txt <Control-r> "Editor::SplitEditorForExecute $w $fileType $nb "
bind $txt <Control-Cyrillic_ka> "Editor::SplitEditorForExecute $w $fileType $nb "
# bind $txt.t <KeyRelease> "Editor::ReleaseKey %K $txt.t $fileType"
# bind $txt.t <KeyPress> "Editor::PressKey %K $txt.t"
# bind $txt <KeyRelease> "Editor::Key %k %K"
@@ -841,20 +913,31 @@ namespace eval Editor {
set lineNum [lindex [split $pos "."] 0]
set posNum [lindex [split $pos "."] 1]
set symbol [string trim [string trimleft $symbol "\\"]]
# puts "Selindex : $selIndex, cursor position: $pos"
# puts "Selindex : $selIndex, cursor position: $pos, Symbol: $symbol"
if {$selIndex != ""} {
set lineBegin [lindex [split [lindex $selIndex 0] "."] 0]
set posBegin [lindex [split [lindex $selIndex 0] "."] 1]
set lineEnd [lindex [split [lindex $selIndex 1] "."] 0]
set posEnd [lindex [split [lindex $selIndex 1] "."] 1]
# set selText [$txt get $lineBegin.$posBegin $lineEnd.$posEnd]
set selText $selectionText
set selText [$txt get $lineBegin.$posBegin $lineEnd.$posEnd]
# set selText $selectionText
# puts "Selected text: $selText, pos: $pos, lineBegin: $lineBegin, posBegin: $posBegin, pos end: $posEnd"
if {$posNum == $posEnd} {
$txt insert $lineBegin.$posBegin "$symbol"
}
if {$posNum == $posBegin} {
$txt insert $lineBegin.$posEnd "$symbol"
if {$symbol == {"} || $symbol == {_}} {
$txt insert $lineEnd.$posEnd "$selText$symbol"
} else {
$txt insert $lineEnd.$posEnd "$symbol"
}
}
if {$symbol == "'"} {
if {$posBegin == 0} {
$txt insert $pos "$symbol"
} else {
$txt insert "$pos + 1 chars" "$symbol"
}
}
$txt highlight $lineBegin.$posBegin $lineEnd.end
# $txt insert $lineBegin.[expr $posBegin + 1] "$symbol"
@@ -879,10 +962,11 @@ namespace eval Editor {
# set fileName untitled-$untitledNumber
set fileFullPath untitled-$untitledNumber
#puts [Tree::InsertItem $tree {} $fileFullPath "file" $fileName]
set nbEditorItem [NB::InsertItem $nbEditor $fileFullPath "file"]
set nbEditorItem [NB::InsertItem $nbEditor $fileFullPath "file"]
# puts "$nbEditorItem, $nbEditor"
Editor $fileFullPath $nbEditor $nbEditorItem
SetModifiedFlag $nbEditorItem
SetModifiedFlag $nbEditorItem $nbEditor
focus -force $nbEditorItem.frmText.t.t
}
proc ReadStructure {txt treeItemName} {
@@ -899,7 +983,7 @@ namespace eval Editor {
if {[eval [dict get $lexers $fileType procRegexpCommand]]} {
set procName_ [string trim $procName]
if {$treeItemName ne ""} {
puts [Tree::InsertItem $tree $treeItemName $procName_ "procedure" "$procName_ ($params)"]
Tree::InsertItem $tree $treeItemName $procName_ "procedure" "$procName_ ($params)"
}
lappend procList [list $procName_ $params]
unset procName_
@@ -923,7 +1007,7 @@ namespace eval Editor {
} else {
set varType ""
}
puts "variable: $varName, value: $varValue, type: $varType"
# puts "variable: $varName, value: $varValue, type: $varType"
lappend varList [list $varName $varValue]
}
}
@@ -933,7 +1017,7 @@ namespace eval Editor {
}
proc FindFunction {txt findString} {
puts "txt: $txt, $findString"
# puts "txt: $txt, $findString"
set pos "0.0"
$txt see $pos
set line [lindex [split $pos "."] 0]
@@ -1000,7 +1084,7 @@ namespace eval Editor {
# Вызов диалога со списком процедур или функций присутствующих в тексте
proc GoToFunction { w } {
global tree editors
puts $w
# puts $w
# set txt $w.frmText.t
set txt $w
set box [$txt bbox insert]
@@ -1010,7 +1094,7 @@ namespace eval Editor {
# puts "--$txt"
# puts $editors($txt)
foreach item [dict get $editors $txt procedureList] {
puts $item
# puts $item
lappend l [lindex $item 0]
}
if {$l ne ""} {
@@ -1102,7 +1186,7 @@ namespace eval Editor {
proc FindReplaceText {txt findString replaceString regexp} {
global nbEditor
puts [focus]
# puts [focus]
# set txt [$nbEditor select].frmText.t
$txt tag remove sel 1.0 end
# $txt see $pos
@@ -1134,8 +1218,13 @@ namespace eval Editor {
# puts $lstFindIndex
# puts $matchIndexPair
# set lstFindIndex [$txt search -all "$selectionText" 0.0]
# Найдем разницу в длине строк для установки правильного
# индекса для выделения текста после вставки
set stringLengthDiff [expr [string length $findString] - [string length $replaceString]]
set i 0
foreach ind $lstFindIndex {
foreach ind [lsort -dictionary -decreasing $lstFindIndex] {
set selFindLine [lindex [split $ind "."] 0]
set selFindRow [lindex [split $ind "."] 1]
# set endInd "$selFindLine.[expr $selFindRow + $symNumbers]"
@@ -1143,8 +1232,15 @@ namespace eval Editor {
# puts "$ind; $selFindLine, $selFindRow; $endInd "
if {$replaceString ne ""} {
$txt replace $ind $endInd $replaceString
# Вычисляем индекс вхождения строки после замены для выделения в тексте
if {$stringLengthDiff > 0} {
$txt tag add sel $ind "$endInd - [expr [tcl::mathfunc::abs $stringLengthDiff]] chars"
} else {
$txt tag add sel $ind "$endInd + [expr [tcl::mathfunc::abs $stringLengthDiff]] chars"
}
} else {
$txt tag add sel $ind $endInd
}
$txt tag add sel $ind $endInd
incr i
}
.finddialog.lblCounter configure -text "[::msgcat::mc "Finded"]: $i"
@@ -1186,7 +1282,7 @@ namespace eval Editor {
} else {
if {[$nbEditor select] ne ""} {
set txt [$nbEditor select].frmText.t
puts $txt
# puts $txt
} else {
return
}
@@ -1274,7 +1370,7 @@ namespace eval Editor {
# Horizontal split the Editor text widget
proc SplitEditorH {w fileType nb} {
global cfgVariables
puts [$w.panelTxt panes]
# puts [$w.panelTxt panes]
if [winfo exists $w.frmText2] {
$w.panelTxt forget $w.frmText2
destroy $w.frmText2
@@ -1294,7 +1390,7 @@ namespace eval Editor {
proc SplitEditorV {fileFullPath} {
global cfgVariables
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName
regsub -all {\.|/|\\|\s|:} $fileFullPath "_" itemName
set itemName ".frmWork.nbEditor2.$itemName"
# puts $itemName
if {[winfo exists $itemName] == 1} {
@@ -1317,8 +1413,6 @@ namespace eval Editor {
# grid rowconfigure .frmWork .frmWork.nbEditor2 -weight 1
.frmWork.panelNB add .frmWork.nbEditor2 -weight 0
puts [FileOper::Edit $fileFullPath .frmWork.nbEditor2]
}
proc GoToLineNumber {text lineNumber} {
@@ -1416,8 +1510,8 @@ namespace eval Editor {
dict set editors $txt fileType $fileType
dict set editors $txt procedureList [list]
puts ">>[dict get $editors $txt fileType]"
puts ">>[dict get $editors $txt procedureList]"
# puts ">>[dict get $editors $txt fileType]"
# puts ">>[dict get $editors $txt procedureList]"
# puts ">>>>> $editors"
if {[info procs ::Highlight::$fileType] ne ""} {
@@ -1442,6 +1536,7 @@ namespace eval Editor {
ICO
XPM
}
# puts "$itemName"
set fr $itemName
if ![string match "*untitled*" $itemName] {
set lblText $fileFullPath
@@ -1463,9 +1558,13 @@ namespace eval Editor {
-command "Editor::SplitEditorH $fr $fileType $nb"
ttk::button $fr.header.$btnSplitV -image split_vertical_11x11 \
-command "Editor::SplitEditorV $fileFullPath"
set btnSplitExecute "btnSplitExec[string range $itemName [expr [string last "." $itemName] +1] end]"
ttk::button $fr.header.$btnSplitExecute -image execute_11x11 \
-command "Editor::SplitEditorForExecute $fr $fileType $nb $fileFullPath"
# pack $fr.$btnSplitH $fr.$btnSplitV -side right -anchor e
pack $fr.header.$lblName -side left -expand true -fill x
pack $fr.header.$btnSplitV $fr.header.$btnSplitH -side right
pack $fr.header.$btnSplitV $fr.header.$btnSplitH $fr.header.$btnSplitExecute -side right
pack $fr.header -side top -fill x
@@ -1483,4 +1582,27 @@ namespace eval Editor {
return $fr
}
proc SplitEditorForExecute {w fileType nb {fileFullPath ""}} {
global cfgVariables tree
if {$fileFullPath eq ""} {
set treeItem "file::[string range $w [expr [string last "." $w] +1] end ]"
set fileFullPath [Tree::GetItemID $tree $treeItem]
puts $fileFullPath
}
# puts [$w.panelTxt panes]
puts "$w $fileType $nb $fileFullPath"
if [winfo exists $w.frmText2] {
$w.panelTxt forget $w.frmText2
destroy $w.frmText2
focus -force $w.frmText.t.t
return
}
set frmText [ttk::frame $w.frmText2 -border 1]
$w.panelTxt add $frmText -weight 1
# focus -force $frmText.t.t
Execute $fileFullPath $frmText $w
}
}

View File

@@ -9,11 +9,41 @@
namespace eval FileOper {
variable types
global packages
variable types
set ::types {
{"All files" *}
}
# Проверка поддерживаемых типов изображений
# в зависимости устновлен пакет или нет
proc SupportImageType {type} {
if {[PackagePresent Img] eq "true"} {
switch $type {
jpeg { return true }
png { return true }
gif { return true }
bmp { return true }
svg { return true }
ppm { return true }
pgm { return true }
tiff { return true }
xbm { return true }
xpm { return true }
default { return false}
}
} else {
switch $type {
png { return true }
gif { return true }
bmp { return true }
svg { return true }
ppm { return true }
pgm { return true }
default { return false}
}
}
}
proc GetFileMimeType {fileFullPath {opt ""}} {
global cfgVariables
@@ -31,6 +61,7 @@ namespace eval FileOper {
# 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] {
@@ -43,17 +74,74 @@ namespace eval FileOper {
}
}
}
# линуксовый file не всегда корректно определяет тип файла
# используем пакет из tcl
lassign [::fileutil::fileType $fileFullPath] fType fBinaryType fBinaryInterp
puts "File type is $fType, $fBinaryType, $fBinaryInterp"
set ext [string tolower [file extension $fileFullPath]]
# Установка корректного типа для svg
# Но для новых версий tcl
switch $ext {
".svg" {
set fType "binary"
set fBinaryInterp "svg"
set fBinaryType "graphic"
}
".torrent" {
set fType "binary"
set fBinaryInterp "torrent"
set fBinaryType "x-bittorrent"
}
".pdf" {
set fType "binary"
set fBinaryInterp "pdf"
set fBinaryType "binary"
}
}
puts "File type is $fType, $fBinaryType, $fBinaryInterp, $ext"
switch $fType {
"application" {
if {$fExt ne "json"} {
return false
"binary" {
if {$fBinaryType ne ""} {
switch $fBinaryType {
"graphic" {
if {[SupportImageType $fBinaryInterp] eq "true"} {
return image
} else {
set answer [tk_messageBox -message [::msgcat::mc "The file looks like a image. Support not implemented yet."] -icon question -type ok]
switch $answer {
ok {
return false
}
}
}
}
default {
return binary
}
}
} else {
return binary
}
}
"text" {
return text
}
"image" {
return false
if {[SupportImageType $fBinaryInterp] eq "true"} {
return image
} else {
set answer [tk_messageBox -message [::msgcat::mc "The file looks like a image. Support not implemented yet."] -icon question -type ok]
switch $answer {
ok {
return false
}
}
}
}
"empty" {
return text
}
default {
return false
@@ -145,6 +233,7 @@ namespace eval FileOper {
# }
# .frmStatus.lblGitLogo configure -image git_logo_20x20
# .frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
AddRecentEditedFolder $fullPath
return $fullPath
}
@@ -201,11 +290,10 @@ namespace eval FileOper {
if {[lsearch -exact [.frmWork.panelNB panes] .frmWork.nbEditor2] != -1} {
.frmWork.panelNB forget .frmWork.nbEditor2
}
foreach nbItem [array names modified] {
if {[info exists modified($nbItem)] == 1 && $modified($nbItem) eq "true"} {
catch {$nbEditor select $nbItem}
# puts "close tab $nbItem"
if {[Close] eq "cancel"} {return "cancel"}
foreach nbItem [$nbEditor tabs] {
catch {$nbEditor select $nbItem}
if {[Close] eq "cancel"} {
return "cancel"
}
}
}
@@ -255,18 +343,18 @@ namespace eval FileOper {
}
proc Save {} {
global nbEditor tree env activeProject
global nbEditor tree env activeProject dir
if [info exists activeProject] {
set dir $activeProject
set dirProject $activeProject
} else {
set dir $env(HOME)
set dirProject $env(HOME)
}
set nbEditorItem [$nbEditor select]
puts "Saved editor text: $nbEditorItem"
# puts "Saved editor text: $nbEditorItem"
if [string match "*untitled*" $nbEditorItem] {
set filePath [tk_getSaveFile -initialdir $dir -filetypes $::types -parent .]
set filePath [tk_getSaveFile -initialdir $dirProject -filetypes $::types -parent .]
if {$filePath eq ""} {
return
}
@@ -283,9 +371,12 @@ namespace eval FileOper {
set editedText [$nbEditorItem.frmText.t get 0.0 end]
set f [open $filePath "w+"]
puts -nonewline $f $editedText
puts "$f was saved"
# puts "$f was saved"
close $f
ResetModifiedFlag $nbEditorItem $nbEditor
if {[file tail $filePath] eq "projman.ini"} {
Config::read $dir(cfg)
}
}
proc SaveAll {} {
@@ -312,7 +403,7 @@ namespace eval FileOper {
proc ReadFolder {directory {parent ""}} {
global tree dir lexers project
puts "Read the folder $directory"
# puts "Read the folder $directory"
set rList ""
if {[catch {cd $directory}] != 0} {
return ""
@@ -384,33 +475,58 @@ namespace eval FileOper {
# Delete emty last line
if {[$txt get {end-1 line} end] eq "\n" || [$txt get {end-1 line} end] eq "\r\n"} {
$txt delete {end-1 line} end
puts ">[$txt get {end-1 line} end]<"
# puts ">[$txt get {end-1 line} end]<"
}
$txt see 1.0
}
proc Edit {fileFullPath {nbEditor .frmWork.nbEditor}} {
global tree
puts "$fileFullPath"
if {[file exists $fileFullPath] == 0} {
return false
} else {
# puts [::fileutil::magic::filetype $fileFullPath]
# puts "$fileFullPath File type [::fileutil::magic::filetype $fileFullPath]"
set fileType [FileOper::GetFileMimeType $fileFullPath]
}
# puts "$fileType <<<<<<<<<<<"
switch $fileType {
"text" {
# return text
}
"image" {
# return image
}
"binary" {
set answer [tk_messageBox -message [::msgcat::mc "The file looks like a binary file. Open anyway?"] \
-icon question -type yesno]
switch $answer {
yes {}
no {return}
}
}
false {
return
}
}
# Проверяем размер файла и если он больше 1мб вывести предупреждение
# puts " File size = [file size $fileFullPath]"
if {[file size $fileFullPath] > 1000000} {
set answer [tk_messageBox -message [::msgcat::mc "The file size to big. Open anyway?"] \
-detail [GetFileAttr $fileFullPath "size"] \
-icon question -type yesno]
switch $answer {
yes {}
no {return}
}
}
set filePath [file dirname $fileFullPath]
set fileName [file tail $fileFullPath]
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName
regsub -all {\.|/|\\|\s|:} $fileFullPath "_" itemName
set itemName [string tolower $itemName]
set itemName "$nbEditor.$itemName"
set treeItemName [Tree::InsertItem $tree {} $fileFullPath "file" $fileName]
@@ -419,6 +535,11 @@ namespace eval FileOper {
if {[winfo exists $itemName] == 0} {
NB::InsertItem $nbEditor $fileFullPath "file"
if {$fileType eq "image"} {
ImageViewer $fileFullPath $itemName $itemName
return $itemName
}
Editor::Editor $fileFullPath $nbEditor $itemName
ReadFile $fileFullPath $itemName
$itemName.frmText.t highlight 1.0 end
@@ -426,6 +547,11 @@ namespace eval FileOper {
$itemName.frmText.t see 1.1
}
$nbEditor select $itemName
focus -force $itemName
if {$fileType eq "image"} {
# ImageViewer $fileFullPath $itemName $itemName
return $itemName
}
Editor::ReadStructure $itemName.frmText.t $treeItemName
GetVariablesFromFile $fileFullPath
$itemName.frmText.t.t mark set insert 1.0
@@ -433,6 +559,8 @@ namespace eval FileOper {
focus -force $itemName.frmText.t.t
.frmStatus.lblSize configure -text [GetFileAttr $fileFullPath "size"]
.frmStatus.lblEncoding configure -text [GetFileMimeType $fileFullPath "charset"]
# puts ">> $itemName"
return $itemName
}

View File

@@ -12,6 +12,28 @@
namespace eval Git {
variable gitCommand
# Определим путь до команды git в зависимсти от платформы
proc CommandPathSetting {} {
global cfgVariables tcl_platform
if {$cfgVariables(gitCommand) == ""} {
if {$tcl_platform(platform) eq "windows"} {
set cmd {where git}
} else {
set cmd {which git}
}
if {[catch {exec {*}$cmd} git_path]} {
puts "Git не найден в системе"
set cfgVariables(gitCommand) "Git not found"
return
}
set git_path [string trim $git_path]
set first_path [lindex [split $git_path "\n"] 0]
# puts "Git найден: $first_path"
set cfgVariables(gitCommand) $first_path
}
}
proc GetConfig {option} {
global activeProject cfgVariables
set confOptions {
@@ -69,8 +91,8 @@ namespace eval Git {
}
}
catch $cmd pipe
puts $cmd
puts $pipe
# puts $cmd
# puts $pipe
if [regexp -nocase -- {^error:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe
return
@@ -100,7 +122,7 @@ namespace eval Git {
} else {
return ""
}
puts $activeProject
# puts $activeProject
lappend cmd $cfgVariables(gitCommand)
lappend cmd "branch"
# lappend cmd "-s"
@@ -145,7 +167,7 @@ namespace eval Git {
lappend cmd "--"
lappend cmd $activeProject
catch $cmd pipe
puts $cmd
# puts $cmd
if [regexp -nocase -- {^fatal:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe
return
@@ -167,7 +189,7 @@ namespace eval Git {
lappend cmd "--"
lappend cmd [file join $activeProject [string trimleft $f "../"]]
catch $cmd pipe
puts $cmd
# puts $cmd
if [regexp -nocase -- {^fatal:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe
return
@@ -228,7 +250,7 @@ namespace eval Git {
# set cmd exec
cd $activeProject
set url [Git::GetConfig remote.origin.url]
puts $url
# puts $url
if [regexp -nocase -all -- {^(http|https)://(.+)} $url match proto address] {
Git::AuthorizationDialog "[::msgcat::mc "Authorization required"] [::msgcat::mc "for"] Git" $url
} else {
@@ -248,7 +270,7 @@ namespace eval Git {
# lappend cmd "$activeProject"
# puts "$cmd"
catch $cmd pipe
puts $pipe
# puts $pipe
if [regexp -nocase -- {^fatal:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe
return
@@ -301,7 +323,7 @@ namespace eval Git {
$w.body.lCommit delete $itemNumber
}
catch $cmd pipe
puts $cmd
# puts $cmd
$w.body.t delete 1.0 end
}
@@ -357,7 +379,7 @@ namespace eval Git {
$w.body.t delete 1.0 end
set i 0
foreach line [Git::Diff $fileName] {
puts $line
# puts $line
if {$i > 3} {
$w.body.t inser end "$line\n"
}
@@ -381,7 +403,7 @@ namespace eval Git {
$w.body.lBox delete $itemNumber
}
catch $cmd pipe
puts $cmd
# puts $cmd
$w.body.t delete 1.0 end
}
@@ -396,7 +418,7 @@ namespace eval Git {
puts $cmd
catch $cmd pipe
puts $pipe
# puts $pipe
return
}
proc Config {repo user email} {
@@ -407,7 +429,7 @@ namespace eval Git {
lappend cmd "config"
lappend cmd $repo
lappend cmd $dir
puts $cmd
# puts $cmd
# catch $cmd pipe
# puts $pipe
@@ -425,7 +447,7 @@ namespace eval Git {
lappend cmd $cfgVariables(gitCommand)
lappend cmd "init"
lappend cmd $activeProject
puts $cmd
# puts $cmd
catch $cmd pipe
if [regexp -nocase -- {^fatal:} $pipe match] {

View File

@@ -23,13 +23,14 @@ wm overrideredirect . 0
bind . <Control-q> Quit
bind . <Control-Q> Quit
bind . <Control-Cyrillic_shorti> Quit
bind . <Control-eacute> Quit
bind . <Insert> Add
bind . <Delete> Del
bind . <Control-Return> Edit
bind . <F1> ShowHelpDialog
bind . <Control-n> Editor::New
bind . <Control-N> Editor::New
bind . <Control-Cyrillic_te> Editor::New
bind . <Control-o> {
set filePath [FileOper::OpenDialog]
if {$filePath != ""} {
@@ -42,21 +43,30 @@ bind . <Control-O> {
FileOper::Edit $filePath
}
}
bind . <Control-k> {
bind . <Alt-k> {
set folderPath [FileOper::OpenFolderDialog]
if {$folderPath != ""} {
FileOper::ReadFolder $folderPath
}
}
bind . <Control-K> {
bind . <Alt-K> {
set folderPath [FileOper::OpenFolderDialog]
if {$folderPath != ""} {
FileOper::ReadFolder $folderPath
}
}
bind . <Alt-Cyrillic_el> {
set folderPath [FileOper::OpenFolderDialog]
if {$folderPath != ""} {
FileOper::ReadFolder $folderPath
}
}
bind . <Control-s> {FileOper::Save}
bind . <Control-S> {FileOper::Save}
bind . <Control-Cyrillic_hardsign> {FileOper::Save}
bind . <Alt-p> {ViewFilesTree true}
bind . <Alt-Cyrillic_ze> {ViewFilesTree true}
bind . <Button-3> {catch [PopupMenu %X %Y]}
#ttk::style configure TPanedwindow -background blue
@@ -135,11 +145,15 @@ 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 ToolBtnTreePress -image tree_24x24
ttk::button $frmTool.btn_search -command FileOper::FindInFiles -image search_24x24
ttk::button $frmTool.btn_git -command Git::Dialog -image git_24x24
ttk::button $frmTool.btn_settings -command Settings -image settings_24x24
pack $frmTool.btn_tree $frmTool.btn_search $frmTool.btn_git -side top -padx 1 -pady 1
pack $frmTool.btn_settings -side bottom -padx 1 -pady 10
# #label $frmTool.lbl_logo -image tcl
# pack $frmTool.btn_quit -side bottom -padx 5 -pady 5
# #pack $frmTool.lbl_logo -side bottom -padx 5 -pady 5

View File

@@ -17,6 +17,7 @@ namespace eval Highlight {} {
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} {
@@ -54,6 +55,7 @@ namespace eval Highlight {} {
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
ctext::addHighlightClass $txt bool #3e803b {nil false true}
ctext::addHighlightClassForSpecialChars $txt qoute #b84a0c {"'`}
}
@@ -111,13 +113,15 @@ namespace eval Highlight {} {
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}
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} {
@@ -175,4 +179,36 @@ namespace eval Highlight {} {
ctext::addHighlightClass $txt shelcommand #19a2a6 {if fi else elseif then while case esac do in exit source echo package mkdir ls rm sed awk grep date jq zip tar gzip mount umount test make curl git iconv less gcc scp rsync cut tr function install}
ctext::addHighlightClassForRegexp $txt comments #666666 {(#|//)[^\n\r]*}
}
proc LUA {txt} {
ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).*?("|'|`)}
ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z]+}
ctext::addHighlightClass $txt stackControl #19a2a6 {and break do else elseif end false for function goto if in local nil not or repeat return then true until while}
# ctext::addHighlightClassForRegexp $txt vars #4471ca {(\$|\*|\&)[\.a-zA-Z0-9\_\-\[\]]+}
ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
ctext::addHighlightClassForRegexp $txt paths lightblue {\.[a-zA-Z0-9\_\-]+}
ctext::addHighlightClassForRegexp $txt comments #666666 {(--)[^\n\r]*}
ctext::addHighlightClassForRegexp $txt namespaces #0093ff {->|\+\+|::}
ctext::addHighlightClass $txt bool #3e803b {null false true}
}
proc ExecuteColorized {txt} {
# ctext::addHighlightClassForRegexp $txt flags orange {\s-[a-zA-Z]+}
# ctext::addHighlightClass $txt stackControl #19a2a6 [info commands]
# ctext::addHighlightClass $txt widgets #9d468d [list canvas ctext button entry label text labelframe frame toplevel scrollbar checkbutton canvas listbox menu menubar menubutton radiobutton scale entry message tk_chooseDir tk_getSaveFile tk_getOpenFile tk_chooseColor tk_optionMenu ttk::button ttk::checkbutton ttk::combobox ttk::entry ttk::frame ttk::intro ttk::label ttk::labelframe ttk::menubutton ttk::treeview ttk::notebook ttk::panedwindow ttk::progressbar ttk::radiobutton ttk::scale ttk::scrollbar ttk::separator ttk::sizegrip ttk::spinbox ]
# ctext::addHighlightClassWithOnlyCharStart $txt vars #4471ca "\$"
# ctext::addHighlightClass $txt variable_funcs gold {set global variable unset}
# # ctext::addHighlightClassForSpecialChars $txt brackets green {[]{}()}
# ctext::addHighlightClassForRegexp $txt namespaces #4f64ff {::}
# ctext::addHighlightClassForRegexp $txt qoute #b84a0c {("|'|`).+("|'|`)}
# ctext::addHighlightClassForRegexp $txt colors #68ceff {(#)(\w)+?(\s|$)}
# ctext::addHighlightClassForRegexp $txt comments #666666 {(^|;)\s*(#)[^\n\r]*}
# ctext::addHighlightClass $txt bool #3e803b {null false true}
# ctext::addHighlightClassForRegexp $txt paths lightblue {(\s)([\w]+)(=)}
# ctext::addHighlightClassForSpecialChars $txt tags lightgreen {<>/}
# ctext::addHighlightClassForRegexp $txt tags #199100 {/.+\s}
ctext::addHighlightClassForRegexp $txt gopaths lightblue {(.+?):(\d+):(\d+):}
ctext::addHighlightClassForRegexp $txt paths lightblue {(\\|/|\.|^)((\w)|(\.)|(/)|([\.\w]))+?\s}
ctext::addHighlightClass $txt compile_errors #ff5050 {error Error ERROR invalid undefined cannot}
ctext::addHighlightClassForRegexp $txt url lightblue {\w+://\w.+\w+}
}
}

View File

@@ -596,6 +596,22 @@ image create photo debian_16x12 -data {
rA8mrK6XByzl3QaSIFac9xqEuFa2XxzygDJS7dv2U3oGIh75yu7ibF0AAN5NOFR9hOAAAAAASUVO
RK5CYII=
}
image create photo deb_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
4AeIo5OToouU+L+k0CLGg+N+vLv3uHsH+BsVpppd44CqWUY6mRCyuVWh5xVBDCKCEPolZupzopiC
5/i6h4+vd3Ge5X3uzxFR8iYDfALxLNMNi3iDeHrT0jnvE0dZSVKIz4nHDLog8SPXZZffOBcd9vPM
qJFJzxNHiYViB8sdzEqGSjxFHFNUjfL9WZcVzluc1UqNte7JXxjOayvLXKc5jCQWsQQRAmTUUEYF
FuK0aqSYSNN+wsM/5PhFcsnkKoORYwFVqJAcP/gf/O7WLExOuEnhBND9YtsfI0DPLtCs2/b3sW03
T4DAM3Cltf3VBjDzSXq9rcWOgN5t4OK6rcl7wOUOMPCkS4bkSAGa/kIBeD+jb8oBfbdAaM3trbWP
0wcgQ12lboCDQ2C0SNnrHu8Odvb275lWfz803nKOXMrtNAAAAAZiS0dEALwAvAC8IuemuQAAAAlw
SFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+YIGgYBD440/mcAAADnSURBVCjPlZIxbsIwGIU/O6Ei
CEGkzukJOkRi4A7sCIYuPQlcgx2J0FNwBNQVpogVRKuqCQhsFixZjkHwNj89f37/LwtuKCPV9vmE
Sj743rg54RpTuq2Qww+QA2/G17AV8DpkKW4CJnRqbc5HgII4+mRR+hrZkNAGmMsmMOM9EYS58dyx
KgBbX/QDxSo3sDFIX65iFsQRgGJ1Mt4Y5Ai0D1Bp8MI2AsoWf/VfmmVGqiVRY07x787vbRAQ7AB6
rA8mrK6XByzl3QaSIFac9xqEuFa2XxzygDJS7dv2U3oGIh75yu7ibF0AAN5NOFR9hOAAAAAASUVO
RK5CYII=
}
image create photo redhat_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
@@ -616,6 +632,26 @@ image create photo redhat_16x12 -data {
JoP7vsKvmscGvwDMplK1fiHiel7hCqIFNKp8a+dBC1kyMF5IOm1we9PY8Fgu0XnYsAsSizJ8Q9+B
fWB7/vyA9Yr/YLa1I25OKGgYfz6Rjbv9EqdKrq/6GWz7DaI/0EnQtYARAAAAAElFTkSuQmCC
}
image create photo rpm_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
4AeIo5OToouU+L+k0CLGg+N+vLv3uHsH+BsVpppd44CqWUY6mRCyuVWh5xVBDCKCEPolZupzopiC
5/i6h4+vd3Ge5X3uzxFR8iYDfALxLNMNi3iDeHrT0jnvE0dZSVKIz4nHDLog8SPXZZffOBcd9vPM
qJFJzxNHiYViB8sdzEqGSjxFHFNUjfL9WZcVzluc1UqNte7JXxjOayvLXKc5jCQWsQQRAmTUUEYF
FuK0aqSYSNN+wsM/5PhFcsnkKoORYwFVqJAcP/gf/O7WLExOuEnhBND9YtsfI0DPLtCs2/b3sW03
T4DAM3Cltf3VBjDzSXq9rcWOgN5t4OK6rcl7wOUOMPCkS4bkSAGa/kIBeD+jb8oBfbdAaM3trbWP
0wcgQ12lboCDQ2C0SNnrHu8Odvb275lWfz803nKOXMrtNAAAAAZiS0dEALwAvAC8IuemuQAAAAlw
SFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+YIGgYbDKcQVQYAAAH8SURBVCjPhZJNSJMBGMd//3dr
01KpQGdqRUF1CsrNBq1IXwnxYFFRl255jKhDhzp2qGvXAqFLFBL0YUWg6aSCIB3aoUsUpYFsM0kL
rc33fZ8ObrSE6A8PPP/ni+dLrMKn9vaqdT+cHmRdJqcFgMCmJQ0uzEce7/jwrFAZr0qSS3ScMLgu
tLnC/Ksk64Epw843jqcflZ1OWcnH3Uuge0JNwmltsIVItFDc6Cm8EyMt4zKwVehBrs29+FcH+bh7
0kT/CtckZjeRtpsFk42Z9B0rxyXc10ASMEzHY5nhh5qJ96wNsfge0QzMI4a0FJyxKicWy4x8rBwx
m+jsFdZXotNLNcEuJ+QsHUNEzQlvj42PbJBZQLX6JO2dTaVqKwuYXxyooFuqF0NHHcy6gMgaFZcB
fN87ZzBv2K2gEM3m2tz95YxIJBQ1gt3IzgIeZl3KJtxRwSFgGseOxN6k3wLMJbvrPK/oOgTL9Zn0
09XnzifcAaBGuUTHS9CB0kq/EeiqEzh36yeGZvgH5pLddZ5feAf2OYwxhVgpYDyx5dANP+pfyyXc
JoP7vsKvmscGvwDMplK1fiHiel7hCqIFNKp8a+dBC1kyMF5IOm1we9PY8Fgu0XnYsAsSizJ8Q9+B
fWB7/vyA9Yr/YLa1I25OKGgYfz6Rjbv9EqdKrq/6GWz7DaI/0EnQtYARAAAAAElFTkSuQmCC
}
image create photo spec_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
@@ -1447,6 +1483,40 @@ image create photo csr_16x12 -data {
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
}
image create photo sig_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
}
image create photo gpg_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9TS0UqDnYQcchQxcGCX4ijVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
BD9AHJ2cFF2kxP8lhRYxHhz34929x907QKiXmWZ1jAKabpvpZELM5lbE8CsiCCGMMQzLzDJmJSkF
3/F1jwBf7+I8y//cn6NbzVsMCIjEM8wwbeJ14qlN2+C8TxxlJVklPiceMemCxI9cVzx+41x0WeCZ
UTOTniOOEovFNlbamJVMjXiSOKZqOuULWY9VzluctXKVNe/JXxjJ68tLXKc5gCQWsAgJIhRUsYEy
bMRp1UmxkKb9hI+/3/VL5FLItQFGjnlUoEF2/eB/8LtbqzAx7iVFEkDoxXE+BoHwLtCoOc73seM0
ToDgM3Clt/yVOjD9SXqtpcWOgJ5t4OK6pSl7wOUO0PdkyKbsSkGaQqEAvJ/RN+WA3luga9XrrbmP
0wcgQ12lboCDQ2CoSNlrPu/ubO/t3zPN/n4AiVZysDNUkngAAAAGYktHRAD/AP8A/6C9p5MAAAAJ
cEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfmDAUHMwbmoJmMAAABRklEQVQoz32SPyyDURTFf+fr
V50kVEzWRjSYasPS1aoMJmnzBqZiE5FIjP6EtMNLulmwskksRmKqzhiJiAVJ22spqZbvbPfe807e
+90nWioUCtOSNiT1ASFQBda99w9ESADOuRmgGIbhYrlcfmz1psxsJx6Pz373/lKQy+ViwGaj0Zhr
N3rvrySt1uv17agbBMlkckxStVKpvHQOvfdXwGhkgKR+M7v/z2Bmb1EBYbPZXACyzrnJfzzDkQHA
qPc+BRhAPp9PxWKxV+/9M8Dh9ch4yaVvDXoktpYzteNfTzCzz47DR2Z2/mNAG8CQ4B2zgy4G7UUi
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII=
}
image create photo git_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9TS0UqDnYQcchQnSz4hYiTVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
@@ -1720,4 +1790,160 @@ image create photo image_16x12 -data {
Qohnupub0FYW0X70YxhpQqFQ3f/4MIEQo4yN7bHb+o2XrVkaGzt4e5M+fbAPAF3XAY1c7g8wjmVB
ONyL2+2uD/ieTEprk5Mim82iqiqqqlaZCoVCXcBfmFeL22lAPa8AAAAASUVORK5CYII=
}
image create photo lua_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAjbAAAI2wHNrPlDAAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARdJREFUKJGNkC1IQ3EUxX/nbfoY
ikkxaxQMRi2CzcG2uGFasy3owkCQV7SsuCI2i7iP+KaLVouCcSCI0aAgTFAn2zX8/dqeiCeee3+c
c6/4j6rNXWQFREUDgyDwmFuYpR8bYcK7IZl8BaAWdoBxoOOARiOG+ZuYNoDpD/wJOCRhW7yohFEA
KsJM1JtVIPsjy4BTYBLwSdgymUwHwKN+kh9aBtk+uXSKbGoJ1OVZO58jD1iPHNnn3oEysAcgT6vl
A8TB5iOAVKQWCjQFtgqIx94M0I6D3lzlAY0B2wO+qesqyc4jCVHdcX1x64AeZX6JGOpYJgj6DlhL
nyEr/QEd077c+0K/7XAFjyKwCIyCrjA7IJc6ct9yegcG+1TkMUCBoAAAAABJRU5ErkJggg==
}
image create photo gz_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAABLcGxfAAAACXBIWXMAAAcPAAAHDwFcQ5C1AAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASpJREFUKJGFjb9Kw0AAxr+73F0S
wU6tUMWAOigIBcVNJ7ciTgo+gIuzq66CvoEPoXQWBHERih0EUbu0UGiCrdVaY5qaJncuRjEZ+o2/
7x/ZO912lFJ5/IiADgURxcjU7pBQTlKPDQI/zzUBRlnMed/1LptlB3Mrs+A6BwCEMsSzDDts6EXY
3zqAYOJ3qVy5gSOaKK5vwtBNAEAQBjg5P8ySo9KOopT8u65WHOgmh7WQhab9eVIq0GQYAGYWc+i9
9kESFqUENBnutj1cnT3C/wxwe1FLjaUKrUYPuakMCqsW7Pp7qsCSQCmF+n0bTq0LGcnRDwBQWLOw
sbsErmujC8Jg8Nwv+G4ALtJ7zK69HQudTcZgLGNojWpn+br0ND49P/Hw0vxoxV4wCO1vTFFpmeaA
16IAAAAASUVORK5CYII=
}
image create photo tgz_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAABLcGxfAAAACXBIWXMAAAcPAAAHDwFcQ5C1AAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAASpJREFUKJGFjb9Kw0AAxr+73F0S
wU6tUMWAOigIBcVNJ7ciTgo+gIuzq66CvoEPoXQWBHERih0EUbu0UGiCrdVaY5qaJncuRjEZ+o2/
7x/ZO912lFJ5/IiADgURxcjU7pBQTlKPDQI/zzUBRlnMed/1LptlB3Mrs+A6BwCEMsSzDDts6EXY
3zqAYOJ3qVy5gSOaKK5vwtBNAEAQBjg5P8ySo9KOopT8u65WHOgmh7WQhab9eVIq0GQYAGYWc+i9
9kESFqUENBnutj1cnT3C/wxwe1FLjaUKrUYPuakMCqsW7Pp7qsCSQCmF+n0bTq0LGcnRDwBQWLOw
sbsErmujC8Jg8Nwv+G4ALtJ7zK69HQudTcZgLGNojWpn+br0ND49P/Hw0vxoxV4wCO1vTFFpmeaA
16IAAAAASUVORK5CYII=
}
image create photo zip_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAA0AAAAMCAYAAAC5tzfZAAAACXBIWXMAAAeJAAAHiQH5c1i9AAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAUVJREFUKJGNkTtLA0EUhc9MZrNL
IokBFZUY340IgqSw10K0srGy08LaRvAf2NpYpUmrhZ2N/oCAYCUILhJjDJE8NjGJyc7M7thodJMV
PeX5+Obey5DZ0+2cIu4EfoSCpMz9sz38EjJysql6Sw1UhCzbZs+WZicn2x4B5IWptkRq7RBzsXgX
lCuv2vlFWtvYOUAiMaN/9aaVx+7V8SBJprfU1PAoCEhXctoc9dscWMRAZPH7MQWFbKkIFo7qKHHL
s54SEpzYoBTo8KqHhaM6qN+hMt+AMCsQZhWqI/t4vyRdvF8/IrQ+DxrRYd8U/pZc7kC1BMR9GTL3
Brcl/jHpM06TQ0nHl/lKgZiB0Oo0jJW4HwYFlOdzic6gOhJOsQnxVAcdCPYoSrHaXemIhYPjnnph
KN64fFgiBqsHlscyzWyte5hs8cIHuFR/UISQs+8AAAAASUVORK5CYII=
}
image create photo xz_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAABLcGxfAAAACXBIWXMAAAcPAAAHDwFcQ5C1AAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAShJREFUKJGFkDtLA0EUhb+Z3Vl3
jFpZGCsJiI0gRqtAOonYSvJPBP+Aoo29IBZ2giA2WimIVkqQgAgptFBxUfEVk2g2+7IxgWSLnPLc
8+KK1GbeiaIoyT8E0jOFtSC1UaILI6Gsm7Xmb9I2LCxptnhlVevH8sKB2RT0KQC80Och9N9M5Up2
C6vYptVOKl6e8awfmZtfxLY1AA2/SWFveVhk73YiqVRHtXt0jhjoR2WmEGa7mdDzkN1iACubJnBe
EUJ08FIpZLc4uHeorW8Tfn7zs7UfC4sZ/OtbzIkxdD6HVyrHDGaMIcI9LeJdlcEPejcA6EKOoY0l
hLZ7G0RCE75/EX5UEDr+EDFzuLJmJPRoe5DbNIKDk3RYqQ4amekbY3L8pXXz6o2nPwWnYSj7tbJx
AAAAAElFTkSuQmCC
}
image create photo iso_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAABLcGxfAAAACXBIWXMAAAWIAAAFiAG/L38eAAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAVJJREFUKJGFjz1IQgEUhc99vvd8
JgolDf2OQkhb0RD249LaKESDOEUQtQRtNbQVTkE05JJLDUGQRJPQUCQVrSJIv5IZmFK8/9v0XmJC
d7qccz7uPcTMQfw/DSJiABCJqN7sGJnYhMXWhizSGECkmvbd55exCeAUAKg5rGcm5yVRSAPwtFzg
p6q6Orh4ueUCfBjrY5uLRFDa/cSAmS/VRkRHUA07oYikAIAmhd7qkaUj2etXfffbcVkt9xMg9gSU
BRdgm4edD797Z666w9E1AJZlxDtxm0oCgF8Rh1zAZjacXbIaPgABAIZHq/kd3bRYdwHTxAW8mAOA
jtfzqH6NfUmSdZSy007RSkPL/5ZOTym6zAVZFAbalTYs+33loDAqOAIlcupjRZvVTbv8J2zyx3G+
mtzJlh+o1Txbj3SFQ8HlgCKMg0io1o2bvdzLburkuQgAP0z8hJue1kBeAAAAAElFTkSuQmCC
}
image create photo pdf_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAKYAAACmAE200ffAAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAMpJREFUGJWNz69OgnEYxfHv+RVF
xsBAdHODzcbLrARfLgADjWggMgKXYHDzArgAA4F7IKAm/wTsNgMj6eZGYHAIBoWX4fvEs8/OngNb
53o0dFzpbucAIZGYImiaDqM5+CQl5glYpMQu4dD8FzuunoIOCZ74IuokHtzA9WofewBfL1B4BD9j
ZkhHsHrVb+t5GZb3wB1GBL0D33h1BeETnNdPY+US6xa7rfHbQ2JF7SxH9iAjx1EP3MAaaTy53jXs
z0C1QB/o+GYfBFgDj+E74z7GkTEAAAAASUVORK5CYII=
}
image create photo bz2_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAdDAAAHQwF4FVqrAAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAARhJREFUGJV9jrFKw1AYRk9ublI0
oYPSYnEREXEQ6eIiFhFB3MVBcPEpiqN06OAiLrq6+Aa+gIuDUEShhYK6iZbWlDQVE5t7HcSEFuo3
nv/wfb8xf3H6qjUF0ihLikNhi2tGIoMoKmRMk4ww/5iwgt6lbN7D3BJ6eua3AY00w5Cr3X0c204a
GvUaTXPA2voOuXw6apSe7rSwrKG56PYG9dHB3thCuNmEi1ERwCquQviFEQ2GuBgVVadNcFxGeR79
syrE8Xh50Gwgcnkm9g5Qvo9qvY+XDa35fqjRq5RRrTc0arwMYG9ukz05Ry4s/v8zrovuemjfR/c/
MRw3OUn/sV61nMnZVJ4i1qz0Kkc5sVx8CdvdZ9pdAH4AuSFg6ttQQTAAAAAASUVORK5CYII=
}
image create photo csv_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAACXBIWXMAAAvPAAALzwFI68pfAAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAPJJREFUGJWFkaFLA3EcxT/ve8cs
M6uIiOl2GBZsVqOyf8B+ghyr2z+xoqdgMNoMqzaTaSaR28BiEFYHC+rm72sTxRt76YUPj/d4KnO/
BXYA578UAoe7lxrHOBvphfYqIMq27xv0R5kfGapMAiA90wPQDTX6tgj6gQvdA+j51OsWkwCEOaPf
vhaxFma8z42JRUaTwDWBzGISvrghkCG2Z9DzmHZkNA1AcJcWOpGYLqrwp+PKhFcijoF1oC5ny6EB
fJjE1OGgzH3wuUpC4ArYFIwR5w5PjUIDhrm3li0f5t4ydzrLQHc6MeKtzP2R6gsB5OLlG1VzU07m
mn0VAAAAAElFTkSuQmCC
}
image create photo exe_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAA8AAAAMCAYAAAC9QufkAAAACXBIWXMAAAMnAAADJwEZpzWLAAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAaxJREFUKJFtkEFIlHEQxX/z3083
IoONdQ3qYrcFdQ0hhTrU2k3XCjS6dZBiO3SRorotJJQSXQtMOiUKxrYmQgZiHjRJ3FoxPVgUgkSt
UatY0H7/6dB+CO33TjPDezNvnlCCguTbTqUQOSMQVSiIMm7V3opMTH/BB+IV+fb4MWC+nKIXu/v3
78PleaY+sw6Q0pTJLeeadsWJ+F2UG/+t/nMnuef0h9rKV//MsYlSQIgAC87uAc6W25LJj0eCCVQ9
l2GEMICqDhuA720n64AwMInyElgDcB15qlYv+LxbNEWTdgBuH78W+hyqGXWN0wxUIsx2vxm6+aJr
5QfCYR/xVDqW/hoAqDl/PaNi2oGDQDUQyx6qj9z/OT62EA7MblcELLADLAetPokWzL2ZwdW8kxh4
V4u1jWUZw7OgymBf9lcUfi+CbijsFbjqFu3jXsARazt9bGlSRpaAWKlt8RID5kJXpj8BGIFzCt+A
98BmSfz6BPOtPktRlRGvdtTY5Nilppw36Hjw9qgRewAY8NHaCldHvUZ8CABsPYp3qUqPoA2qFBGy
ogxXXZ566HH+Asc0nIyxyMyyAAAAAElFTkSuQmCC
}
image create photo txt_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAAkAAAAMCAYAAACwXJejAAAACXBIWXMAAALEAAACxAFbkZ0LAAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAXVJREFUGJVjZICCT2f+i9x98XjO
43fPXorziUrKyihFSJkwfmNgYGBgPLz62uYXH998EOMX1unbMmvRxoUT+ytrJic7atkUfPz2+QIH
Kxsf04sPr16HptjF3nt+/0CYhZ/s0ul7+3SktbQvPri6LzTFLvbHrx9vWRgYGBhubn4s/Z75R70I
M7fq339/mBgYGBgYFFQZbLfd5nv89CkDCwMDA8PG68cUnr158E5OSN7mz78/nDB3Pvvw9Iu1qjlE
kZ2a0ftHomLvlQRkH375/5MVpujxa7kPDAz/IIoOXj7+//7bpxy3RO4x/vz5mx2m6P371xz2+rYQ
RU7q5rxX3z/5pSkiK/b9/0+4ogdvXzExMDBAFK0+s+vJlfvX/8lIyVz4/fcXN0zRy5evvia6hUEU
eZk4aGtJyD9TlVX1/P3vDxvcpKf3X8JNKp/fcZKFlf3//z8/5v9nYYI7nImB7WWBbxwD45aFJ05/
//3rBgMO8P3ndy0A+c+fqfnp2TAAAAAASUVORK5CYII=
}
image create photo j2_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAAA0AAAAMCAYAAAC5tzfZAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAA
GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAjxJREFUKJGNzT9oE1EcwPHfu3u5
yzWXyyUx1/xpKtZWaytJkVbQoUMpiqP/gtJSJ8FNxEEoWpUKgghKUSGTYNHBwalrDDgIIk1oG/oH
o1IoTZu2SS7/XnLv7p6To+B3/sAXMcbgfzp663ZfOTZ42VEuxVBw+sEUVf2AzXblLzCB91iK22+L
gs924JAlumKG3xe3eezwrK6ksO12D1UHBm5SRZH/deGMNgjlyq6yuvxwd+Z+EjHGQHv+IkG08Jjp
ks5L29sLrVBo1EZIVrOL082e3qeBdGrWUN2/Owwjt5FM7nMAAFytRsCiiPFYtpziECJEwc1mB/X7
plua1rk7fu5O+ezoI75edwEAYAAAqVhYcdBWtR7uHtZSn++KP9d/EEKa+XyeeufefAknX4/lcjkD
rl8FAAB8ZGJiqDpy5plnaWkWgl2MRKMnq7HBK4zj+jstu1E7FPC2To3c8L98ddG7+O1Jfn7+K3br
+mbF6ezX4/F7hqZ1NUzzmilJBdxulyxBjFNFjZZGTk8xhELRra0MAAC3vLBQxhU9e/zjhylcq9vq
+tocE8SiJYlryLLe8qRRYoj/hBv11XQ63QIA4PomJxVbwOqv8QuXqCzL9UhkGDAf5A1TxqTRjQxK
waYDtkPwRhMJCQAAcy6XQBVVAwTH2sGQ25vNaAwYtjCvkcjhE5Ysd1Cwe/gmifh0nQMAwBvJ5H54
5nEG7+28M9SARyoW37c7A72MxzFpr/Dd1sUKRxpZbJg7joMDAwDgDzlS9ta5m7mUAAAAAElFTkSu
QmCC
}
image create photo execute_11x11 -data {
iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAABg2lDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw1AUhU9TpVIqDnYQUclQneyiIo5ahSJUCLVCqw4mL/2DJg1Jiouj4Fpw8Gex6uDirKuDqyAI
/oC4C06KLlLifUmhRYwPLu/jvHcO990HCI0K06yuWUDTbTOdTIjZ3KoYekUYw1QjiMrMMuYkKQXf
9XWPAN/v4jzL/96fq1fNWwwIiMSzzDBt4g3i6U3b4LxPHGUlWSU+Jx43qUHiR64rHr9xLros8Myo
mUnPE0eJxWIHKx3MSqZGPEUcUzWd8oWsxyrnLc5apcZaffIXRvL6yjLXqYaQxCKWIEGEghrKqMBG
nHadFAtpOk/4+Addv0QuhVxlMHIsoAoNsusH/4Pfs7UKkxNeUiQBdL84zscoENoFmnXH+T52nOYJ
EHwGrvS2v9oAZj5Jr7e12BHQtw1cXLc1ZQ+43AEGngzZlF0pSCUUCsD7GX1TDui/BcJr3txa5zh9
ADI0q9QNcHAIjBUpe93n3T2dc/v3Tmt+P5frcrXBnzRwAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
WXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH6QodCiMdxWTpZwAAABl0RVh0Q29tbWVudABDcmVhdGVk
IHdpdGggR0lNUFeBDhcAAABHSURBVBjTjY/BDQAwCAKNUzleux1b2Y+PxgiRJ7kjalYBkADSRLwX
SvCpZIKzlUlwdWMXJFw5Kzgi7mr5A/XyBI4wA9kzFHrskxvBNKQinAAAAABJRU5ErkJggg==
}
image create photo settings_24x24 -data {
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABg2lDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw1AUhU9TpVIqDnYQUclQneyiIo5ahSJUCLVCqw4mL/2DJg1Jiouj4Fpw8Gex6uDirKuDqyAI
/oC4C06KLlLifUmhRYwPLu/jvHcO990HCI0K06yuWUDTbTOdTIjZ3KoYekUYw1QjiMrMMuYkKQXf
9XWPAN/v4jzL/96fq1fNWwwIiMSzzDBt4g3i6U3b4LxPHGUlWSU+Jx43qUHiR64rHr9xLros8Myo
mUnPE0eJxWIHKx3MSqZGPEUcUzWd8oWsxyrnLc5apcZaffIXRvL6yjLXqYaQxCKWIEGEghrKqMBG
nHadFAtpOk/4+Addv0QuhVxlMHIsoAoNsusH/4Pfs7UKkxNeUiQBdL84zscoENoFmnXH+T52nOYJ
EHwGrvS2v9oAZj5Jr7e12BHQtw1cXLc1ZQ+43AEGngzZlF0pSCUUCsD7GX1TDui/BcJr3txa5zh9
ADI0q9QNcHAIjBUpe93n3T2dc/v3Tmt+P5frcrXBnzRwAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
WXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH6QodESQY6jzHvgAAABl0RVh0Q29tbWVudABDcmVhdGVk
IHdpdGggR0lNUFeBDhcAAAHySURBVEjHrZZPSFVREMZ/iomaBm1SApFHIEoL+6e7ROHTFkEbaWNb
95YgSFiLyECIoJXtIkEXZqSrIoYwQiEScVOCguQylCzKpyFBm3PjvcO5f8L3wV3cufPNnHNmvjO3
jAwws06gxTN/lTSfxq0gGx4BFz3bAVCdRizPmOBswFZlZg1HTmBm9UBVzOczafwyL9groAGYAJ4D
bcDDwPFE+AKMADPAdWAAaATOSfpdlMDM+oDZAvJPoC7jEf4CagveRySN/0tgZtXAKtBMabAH5CRt
RzUYyhj80D1pOA48KCzyQArhE9AlqVJSJXAeeJvC6TezY1GCXmAtxnEd6JD0LjJIWnWchRjOFtAj
6bDcETaAS8DLgPNdSXnfKOkPMBzw/wC0S1oq0oEL8jpAWIw7A0nLAfOypO3/UfKJBBGG+AdBJZtZ
DhgMEK4mJL8WsN0ws8tFSnYimwRqAoQfQJukLW/1jcB7oClmF7ckPYkSbAK5hJXmXV9HNWoH7gCn
U9R9KrquR4GpBOca4L57smJM0n7UptNuu6XCOvDY76KbntMC8C1DsDzwxrPdlrTv62AFuOeu6lZJ
3W5MPksIPgdckHTF1XAMeCrpRXAexPT6yYSddEj6eKSJJmk3IcFGqWby51AbSvpeqr+KPjcKC7GT
hfgXbteIc85F7RUAAAAASUVORK5CYII=
}

View File

@@ -1,8 +1,9 @@
proc ImageViewer {f w node} {
global factor cfgVariables
set factor($node) 1.0
ttk::frame $w.f
pack $w.f -side left -fill both -expand true
canvas $w.f.c -xscrollcommand "$w.f.x set" -yscrollcommand "$w.y set"
canvas $w.f.c -xscrollcommand "$w.f.x set" -yscrollcommand "$w.y set" -bg $cfgVariables(backGround)
ttk::scrollbar $w.f.x -ori hori -command "$w.f.c xview"
ttk::scrollbar $w.y -ori vert -command "$w.f.c yview"
@@ -20,15 +21,15 @@ proc ImageViewer {f w node} {
}
proc openImg {fn w node} {
global im1
global im1 factor
set im1 [image create photo -file $fn]
#scale $w
scale $w $factor($node) $node
list [file size $fn] bytes, [image width $im1]x[image height $im1]
$w create image 1 1 -image $im1 -anchor nw -tag img
}
proc scale {w {n 1} node} {
global im1 im2 factor noteBook tab_label
global im1 im2 factor tab_label
set factor($node) [expr {$factor($node) * $n}]
$w delete img
catch {image delete $im2}
@@ -41,7 +42,8 @@ proc scale {w {n 1} node} {
$im2 copy $im1 -subsample $f $f
}
$w create image 1 1 -image $im2 -anchor nw -tag img
$noteBook itemconfigure $node -text "$tab_label (size x$factor($node))"
set noteBook [file extension $node]
# $noteBook itemconfigure $node -text "(size x$factor($node))"
$w config -scrollregion [$w bbox all]
}
@@ -52,6 +54,7 @@ proc ImageBase64Encode {text} {
{"GIF" {.gif}}
{"JPEG" {.jpg}}
{"BMP" {.bmp}}
{"SVG" {.svg}}
{"All files" *}
}
set img [tk_getOpenFile -initialdir $env(HOME) -filetypes $types -parent .]
@@ -65,5 +68,3 @@ proc ImageBase64Encode {text} {
$text insert [Position] "image create photo $name -data {\n$data\n}"
}
}

View File

@@ -15,9 +15,12 @@ dict set lexers TCL commands [info commands]
#--------------------------------------------------
# Go lang
dict set lexers GO commentSymbol {//}
dict set lexers GO commentMultilineSymbolBegin {/*}
dict set lexers GO commentMultilineSymbolEnd {*/}
dict set lexers GO procFindString {func.*?PROCNAME}
dict set lexers GO procRegexpCommand {regexp -nocase -all -- {\s*?func\s*?(\(\w+\s*?\**?\w+\)|)\s*?(\w+)\((.*?)\)\s+?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match linkName procName params returns}
dict set lexers GO varRegexpCommand {regexp -nocase -all -line -- {^\s*?var\s+([a-zA-Z0-9\-_$]+)\s+(.+?)(\s*$)} $line match varName varType lineEnd}
#--------------------------------------------------
# SHELL (Bash)
dict set lexers SH commentSymbol {#}
@@ -30,13 +33,17 @@ dict set lexers SH procRegexpCommand {regexp -nocase -all -- {^\s*?(function |)\
dict set lexers PY commentSymbol {#}
dict set lexers PY procFindString {(def )\s*?PROCNAME}
dict set lexers PY procRegexpCommand {regexp -nocase -all -- {^\s*?(def)\s*?(.*?)\((.*?)\):} $line match keyWord procName params}
dict set lexers PY varRegexpCommand {regexp -nocase -all -line -- {^\s*?(\w+)\s*=\s*(.+)($)} $line match varName varValue lineEnd}
#--------------------------------------------------
# Ruby
dict set lexers RB commentSymbol {#}
dict set lexers RB commentMultilineSymbolBegin {=begin}
dict set lexers RB commentMultilineSymbolEnd {end=}
dict set lexers RB tabSize 2
dict set lexers RB procFindString {(def |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)
@@ -74,17 +81,28 @@ dict set lexers INI procRegexpCommand {regexp -nocase -all -- {^\s*?(\[)(.+?)(\]
# -------------------------------------------------
# HTML
dict set lexers HTML commentSymbol {<\!--}
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 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,7 +9,7 @@
######################################################
proc GetFileMenu {m} {
global activeProject
global activeProject cfgVariables
$m add command -label [::msgcat::mc "New file"] -command Editor::New\
-accelerator "Ctrl+N"
$m add command -label [::msgcat::mc "Open file"] -accelerator "Ctrl+O" -command {
@@ -25,8 +25,15 @@ proc GetFileMenu {m} {
$m add command -label [::msgcat::mc "Close all"] -command {FileOper::CloseAll}
$m add separator
menu $m.openRecent
$m add cascade -label [::msgcat::mc "Open recent"] -menu $m.openRecent
foreach item $cfgVariables(recentFolder) {
$m.openRecent add command -label $item -command [list OpenRecentProject $item]
}
$m add command -label [::msgcat::mc "Open folder"] -accelerator "Ctrl+K" -command {
$m add separator
$m add command -label [::msgcat::mc "Open folder"] -accelerator "Alt+K" -command {
set folderPath [FileOper::OpenFolderDialog]
if {$folderPath != ""} {
# set activeProject $folderPath
@@ -69,7 +76,8 @@ proc GetEditMenu {m} {
$m add separator
$m add command -label [::msgcat::mc "Insert image"] -accelerator "Ctrl+I"\
-command ImageBase64Encode
$m add separator
$m add command -label [::msgcat::mc "Settings"] -command Settings
}
proc GetViewMenu {m} {
@@ -118,6 +126,8 @@ proc GetViewMenu {m} {
-variable cfgVariables(procedureHelper) -onvalue true -offvalue false
# -command "ViewHelper procedureHelper"
$m add checkbutton -label [::msgcat::mc "Multiline comments"] \
-variable cfgVariables(multilineComments) -onvalue true -offvalue false
}
proc GetHelpMenu {m} {

View File

@@ -7,8 +7,8 @@
# Author: Roman Schaller <r.schaller@gmx.ch> #
###########################################################
::msgcat::mcset de "About ..." "<EFBFBD>ber ..."
::msgcat::mcset de "Add to project" "Zu Projekt hinzuf<EFBFBD>gen"
::msgcat::mcset de "About ..." "Über ..."
::msgcat::mcset de "Add to project" "Zu Projekt hinzufügen"
::msgcat::mcset de "Author" "Autor"
::msgcat::mcset de "Text autoformat" "Text autoformat"
::msgcat::mcset de "Cancel" "Abbrechen"
@@ -29,9 +29,9 @@
::msgcat::mcset de "Cut into clipboard" "In Zwischenablage ausschneiden"
::msgcat::mcset de "CVS commit"
::msgcat::mcset de "CVS update"
::msgcat::mcset de "Delete" "L<EFBFBD>schen"
::msgcat::mcset de "Delete backup files" "Backup-Dateien l<EFBFBD>schen"
::msgcat::mcset de "Delete project" "Projekt l<EFBFBD>schen"
::msgcat::mcset de "Delete" "Löschen"
::msgcat::mcset de "Delete backup files" "Backup-Dateien löschen"
::msgcat::mcset de "Delete project" "Projekt löschen"
::msgcat::mcset de "Delete from project" "Von Projekt entfernen"
::msgcat::mcset de "Docs dir" "Dok Verzeichnis"
::msgcat::mcset de "Don't selected file"
@@ -42,10 +42,10 @@
::msgcat::mcset de "Error open URL"
::msgcat::mcset de "Exit" "Beenden"
::msgcat::mcset de "File" "Datei"
::msgcat::mcset de "File already exists. Overwrite?" "Datei besteht bereits. <EFBFBD>berschreiben?"
::msgcat::mcset de "File already exists. Overwrite?" "Datei besteht bereits. Überschreiben?"
::msgcat::mcset de "File modify" "Datei bearbeiten"
::msgcat::mcset de "File was modifyed. Close?" "Datei wurde ge<EFBFBD>ndert. Trotzdem schliessen?"
::msgcat::mcset de "File was modifyed. Save?" "Datei wurde ge<EFBFBD>ndert. Jetzt speichern?"
::msgcat::mcset de "File was modifyed. Close?" "Datei wurde geändert. Trotzdem schliessen?"
::msgcat::mcset de "File was modifyed. Save?" "Datei wurde geändert. Jetzt speichern?"
::msgcat::mcset de "File saved" "Datei gespeichert"
::msgcat::mcset de "Find" "Suchen"
::msgcat::mcset de "Font normal" "Schrift normal"
@@ -55,15 +55,15 @@
::msgcat::mcset de "Home dir" "Home Verzeichnis"
::msgcat::mcset de "Home page" "Homepage"
::msgcat::mcset de "Image dir" "Image Verzeichnis"
::msgcat::mcset de "Insert" "Einf<EFBFBD>gen"
::msgcat::mcset de "Insert" "Einfügen"
::msgcat::mcset de "Interface language" "Interface Sprache"
::msgcat::mcset de "Install Tcl/Tk Project Manager" "Tcl/Tk Project Manager installieren"
::msgcat::mcset de "Line number" "Zeilennummer"
::msgcat::mcset de "Make RPM" "RPM erstellen"
::msgcat::mcset de "Make archive" "Archiv erstellen"
::msgcat::mcset de "Make backup files" "Backup-Dateien erstellen"
::msgcat::mcset de "Must be one file select!" "Eine Datei muss ausgew<EFBFBD>hlt sein!"
::msgcat::mcset de "Must be one or two file select!" "Eine oder zwei Dateien m<EFBFBD>ssen ausgew<EFBFBD>hlt sein!"
::msgcat::mcset de "Must be one file select!" "Eine Datei muss ausgewählt sein!"
::msgcat::mcset de "Must be one or two file select!" "Eine oder zwei Dateien müssen ausgewählt sein!"
::msgcat::mcset de "Modifying the Registry..."
::msgcat::mcset de "Modules" "Module"
::msgcat::mcset de "New" "Neu"
@@ -71,19 +71,19 @@
::msgcat::mcset de "New project" "Neues Projekt"
::msgcat::mcset de "Not implemented yet" "Noch nicht implementiert"
::msgcat::mcset de "Not found active project" "Kein aktives Projekt gefunden"
::msgcat::mcset de "Open" "<EFBFBD>ffnen"
::msgcat::mcset de "Open file" "Datei <EFBFBD>ffnen"
::msgcat::mcset de "Open project" "Projekt <EFBFBD>ffnen"
::msgcat::mcset de "Opened file in progress" "Ge<EFBFBD>ffnete Datei in Bearbeitung"
::msgcat::mcset de "Overwrite" "<EFBFBD>berschreiben"
::msgcat::mcset de "Paste" "Einf<EFBFBD>gen"
::msgcat::mcset de "Paste from clipboard" "Von Zwischenablage einf<EFBFBD>gen"
::msgcat::mcset de "Open" "Öffnen"
::msgcat::mcset de "Open file" "Datei öffnen"
::msgcat::mcset de "Open project" "Projekt öffnen"
::msgcat::mcset de "Opened file in progress" "Geöffnete Datei in Bearbeitung"
::msgcat::mcset de "Overwrite" "Überschreiben"
::msgcat::mcset de "Paste" "Einfügen"
::msgcat::mcset de "Paste from clipboard" "Von Zwischenablage einfügen"
::msgcat::mcset de "Print ..." "Drucken ..."
::msgcat::mcset de "Print" "Drucken"
::msgcat::mcset de "Print command" "Druck-Befehl"
::msgcat::mcset de "Print selected text" "Markierter Text drucken"
::msgcat::mcset de "Program finished successfully" "Programm wurde erfolgreich beendet"
::msgcat::mcset de "Program failed" "Ausf<EFBFBD>hrung fehlgeschlagen"
::msgcat::mcset de "Program failed" "Ausführung fehlgeschlagen"
::msgcat::mcset de "Programm output" "Programm Ausgabe"
::msgcat::mcset de "Project" "Projekt"
::msgcat::mcset de "Projects" "Projekte"
@@ -101,8 +101,8 @@
::msgcat::mcset de "Release"
::msgcat::mcset de "RPM dir" "RPM Verzeichnis"
::msgcat::mcset de "RPM file mask" "RPM Datei Maske"
::msgcat::mcset de "Run" "Ausf<EFBFBD>hren"
::msgcat::mcset de "Running project" "Projekt ausf<EFBFBD>hren"
::msgcat::mcset de "Run" "Ausführen"
::msgcat::mcset de "Running project" "Projekt ausführen"
::msgcat::mcset de "Running file"
::msgcat::mcset de "Save" "Speichern"
::msgcat::mcset de "Save as" "Speichern unter"
@@ -110,9 +110,9 @@
::msgcat::mcset de "Save file as" "Datei speichern unter"
::msgcat::mcset de "Save all" "Alles speichern"
::msgcat::mcset de "Search" "Suchen"
::msgcat::mcset de "Select" "Ausw<EFBFBD>hlen"
::msgcat::mcset de "Select directory" "Verzeichnis ausw<EFBFBD>hlen"
::msgcat::mcset de "Selected directory" "Ausgew<EFBFBD>hltes Verzeichnis"
::msgcat::mcset de "Select" "Auswählen"
::msgcat::mcset de "Select directory" "Verzeichnis auswählen"
::msgcat::mcset de "Selected directory" "Ausgewähltes Verzeichnis"
::msgcat::mcset de "Settings" "Einstellungen"
::msgcat::mcset de "Show backup files" "Backup-Dateien anzeigen"
::msgcat::mcset de "Interpretator" "Interpreter"
@@ -120,7 +120,7 @@
::msgcat::mcset de "TGZ file mask" "TGZ Datei Maske"
::msgcat::mcset de "Thanks" "Danksagung"
::msgcat::mcset de "Toolbar" "Symbolleiste"
::msgcat::mcset de "Undo" "R<EFBFBD>ckg<EFBFBD>ngig"
::msgcat::mcset de "Undo" "Rückgängig"
::msgcat::mcset de "Update"
::msgcat::mcset de "Version"
::msgcat::mcset de "View" "Ansicht"
@@ -130,4 +130,3 @@

View File

@@ -59,12 +59,16 @@
::msgcat::mcset en "Editor font bold"
::msgcat::mcset en "Error open URL"
::msgcat::mcset en "Editor settings"
::msgcat::mcset en "Enter command for execute file"
::msgcat::mcset en "Exit"
::msgcat::mcset en "File"
::msgcat::mcset en "File already exists. Overwrite?"
::msgcat::mcset en "File modify"
::msgcat::mcset en "File was modifyed. Close?"
::msgcat::mcset en "File was modifyed. Save?"
::msgcat::mcset en "The file looks like a binary file. Open anyway?"
::msgcat::mcset en "The file looks like a image. Support not implemented yet."
::msgcat::mcset en "The file size to big. Open anyway?"
::msgcat::mcset en "File saved"
::msgcat::mcset en "Files"
::msgcat::mcset en "Find"
@@ -108,6 +112,7 @@
::msgcat::mcset en "Open file"
::msgcat::mcset en "Open project"
::msgcat::mcset en "Opened file in progress"
::msgcat::mcset en "Open recent"
::msgcat::mcset en "Operators"
::msgcat::mcset en "Overwrite"
::msgcat::mcset en "Parameters"
@@ -181,7 +186,3 @@

View File

@@ -27,7 +27,7 @@
::msgcat::mcset ru "Close" "Закрыть"
::msgcat::mcset ru "Close all" "Закрыть все"
::msgcat::mcset ru "Close file" "Закрыть файл"
::msgcat::mcset ru "Close folder" "Закрыть папку"
::msgcat::mcset ru "Close folder" "Закрыть каталог"
::msgcat::mcset ru "Close Project Manager?" "Выйти из программы?"
::msgcat::mcset ru "Comments" "Коментарии"
::msgcat::mcset ru "Comment selected" "Закоментировать"
@@ -77,6 +77,7 @@
::msgcat::mcset ru "Editor settings" "Настройки редактора"
::msgcat::mcset ru "Editor helpers" "Подсказки при вводе"
::msgcat::mcset ru "Encode" "Перекодировка"
::msgcat::mcset ru "Enter command for execute file" "Введите команду для запуска текущего файла"
::msgcat::mcset ru "Authorisation required" "Требуется авторизация"
::msgcat::mcset ru "Error open URL" "Ошибка открытия URL"
::msgcat::mcset ru "Exit" "Выход"
@@ -88,6 +89,9 @@
::msgcat::mcset ru "File was modifyed" "Файл был изменен"
::msgcat::mcset ru "File modify" "Файл изменен"
::msgcat::mcset ru "File saved" "Файл сохранен"
::msgcat::mcset ru "The file looks like a binary file. Open anyway?" "Файл похож на двоичный. Открыть все равно?"
::msgcat::mcset ru "The file looks like a image. Support not implemented yet." "Файл выглядит как изображение. Поддержка пока не реализована."
::msgcat::mcset ru "The file size to big. Open anyway?" "Файл большого размера. Открыть все равно?"
::msgcat::mcset ru "Find" "Найти"
::msgcat::mcset ru "Found" "Найдено"
::msgcat::mcset ru "Find in files" "Найти в файлах"
@@ -124,6 +128,7 @@
::msgcat::mcset ru "Matches" "Совпадений"
::msgcat::mcset ru "Modules" "Модули"
::msgcat::mcset ru "Modifying the Registry..." "Внесение изменений в реестр"
::msgcat::mcset ru "Multiline comments" "Многострочные комментарии"
::msgcat::mcset ru "Must be one file select!" "Вы должны выбрать только один файл"
::msgcat::mcset ru "Must be one or two file select!" "Вы должны выбрать один или два файла"
::msgcat::mcset ru "Network" "Сеть"
@@ -137,9 +142,10 @@
::msgcat::mcset ru "No" "Нет"
::msgcat::mcset ru "Open" "Открыть"
::msgcat::mcset ru "Open file" "Открыть файл"
::msgcat::mcset ru "Open folder" "Открыть папку"
::msgcat::mcset ru "Open folder" "Открыть каталог"
::msgcat::mcset ru "Open project" "Открыть проект"
::msgcat::mcset ru "Opened file in progress" "Открытие файла"
::msgcat::mcset ru "Open recent" "Открыть недавнее"
::msgcat::mcset ru "Operators" "Операторы"
::msgcat::mcset ru "Overwrite" "Замена"
::msgcat::mcset ru "Parameters" "Параметры"
@@ -194,7 +200,7 @@
::msgcat::mcset ru "Select directory" "Выбор директории"
::msgcat::mcset ru "Selected directory" "Директория"
::msgcat::mcset ru "Selection color" "Цвет выделения"
::msgcat::mcset ru "Settings" "Установки"
::msgcat::mcset ru "Settings" "Настройки"
::msgcat::mcset ru "Statusbar" "Строка статуса"
::msgcat::mcset ru "Show backup files" "Показывать временные файлы"
::msgcat::mcset ru "Show the Menu" "Показывать меню"

View File

@@ -13,7 +13,9 @@ namespace eval NB {
proc InsertItem {nb item type} {
switch $type {
file {
regsub -all {\.|/|\\|\s} $item "_" itemName
set item [string tolower $item]
regsub -all {\.|/|\\|\s|:} $item "_" itemName
# puts "$item -> $itemName"
if [winfo exists $nb.$itemName] {
set fm $nb.$itemName
} else {

View File

@@ -239,6 +239,7 @@ proc FindImage {ext} {
JP2
ICO
XPM
SVG
}
foreach img [image names] {
if [regexp -nocase -all -- "^($ext)(_16x12)" $img match v1 v2] {
@@ -276,17 +277,17 @@ namespace eval Help {
proc SearchVariable {txt} {
global fileStructure project variables
set varName [$txt get {insert wordstart} {insert wordend}]
puts ">>>$varName<<<"
# puts ">>>$varName<<<"
if {[info exists project] == 0} {return}
foreach f [array names project] {
puts "--$f"
puts "----"
# puts "--$f"
# puts "----"
foreach a $project($f) {
puts "-----$variables($a)"
# puts "-----$variables($a)"
foreach b $variables($a) {
puts "------$b -- [lindex $b 0]"
# puts "------$b -- [lindex $b 0]"
if {$varName eq [lindex $b 0]} {
puts "УРААААААА $varName = $b в файле $a \n\t [lindex $b 0]"
# puts "УРААААААА $varName = $b в файле $a \n\t [lindex $b 0]"
# FindVariablesDialog $txt "$varName: \[...\][file tail $a]"
lappend l [list $varName [lindex $b 1] $a]
}
@@ -354,7 +355,7 @@ proc FindVariablesDialog {txt args} {
foreach { word } $args {
foreach lst $word {
# set l [split $lst " "]
puts "[lindex $lst 0] -[lindex $lst 1] -[lindex $lst 2]"
# puts "[lindex $lst 0] -[lindex $lst 1] -[lindex $lst 2]"
# lappend l2 [lindex $l 0] [lindex $l 1] [file tail [lindex $l 2]]
# $win.lBox insert {} end -values $lst -text {1 2 3}
$win.lBox insert end "[lindex $lst 0] > [lindex $lst 1] > [lindex $lst 2]\n"
@@ -440,7 +441,7 @@ proc SearchStringInFolder {str} {
if {$tcl_platform(platform) == "windows"} {
} elseif {$tcl_platform(platform) == "mac"} {
} elseif {$tcl_platform(platform) == "unix"} {
puts "$cfgVariables(searchCommand) $cfgVariables(searchCommandOptions) $str $activeProject"
# puts "$cfgVariables(searchCommand) $cfgVariables(searchCommandOptions) $str $activeProject"
# Составляем строку (точнее список) для запуска команды
set cmd exec
regsub -all {\[} $str {\\[} str
@@ -682,3 +683,297 @@ proc SetActiveProject {path} {
.frmStatus.lblGitLogo configure -image git_logo_20x20
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
}
# Added recently opened folder into menu "File"->"Open recent"
proc OpenRecentProject {path} {
SetActiveProject $path
FileOper::ReadFolder $path
ReadFilesFromDirectory $path $path
}
proc AddRecentEditedFolder {path} {
global cfgVariables
if {$path == ""} {
return
}
if {[info exists cfgVariables(recentFolder)] == 0} {
set cfgVariables(recentFolder) [list $path]
} else {
# check if path already in a list
foreach item $cfgVariables(recentFolder) {
if {$item == $path} {
return
}
}
# check list length, and remove 0 element if length is 10
if {[llength $cfgVariables(recentFolder)] == 10} {
# lremove $cfgVariables(recentFolder) 0; # tcl 8.7
set cfgVariables(recentFolder) [lrange $cfgVariables(recentFolder) 1 end]
}
lappend cfgVariables(recentFolder) $path
}
.frmMenu.mnuFile.m.openRecent add command -label $path -command [list OpenRecentProject $path]
}
# ================== OLD ====================
proc launchBrowser {url} {
global tcl_platform
if {$tcl_platform(platform) eq "windows"} {
set command [list {*}[auto_execok start] {}]
if {[file isdirectory $url]} {
set url [file nativename [file join $url .]]
}
} elseif {$tcl_platform(os) eq "Darwin"} {
set command [list open]
} else {
set command [list xdg-open]
}
exec {*}$command $url &
}
## EXEC EXTERNAL BROWSER AND GOTO URL ##
proc GoToURL {url} {
global env tcl_platform
if {$tcl_platform(platform) == "windows"} {
set pipe [open "|iexplore $url" "r"]
} elseif {$tcl_platform(platform) == "mac"} {
set pipe [open "|iexplore $url" "r"]
} elseif {$tcl_platform(platform) == "unix"} {
#$env(BROWSER)
#set pipe [open "|$env(BROWSER) $url" "r"]
launchBrowser $url
return
}
fileevent $pipe readable
fconfigure $pipe -buffering none -blocking no
}
## MAKING TAR ARCHIVE ##
proc MakeTGZ {} {
global activeProject tgzDir tgzNamed workDir projDir env tcl_platform
if {$activeProject == ""} {
set answer [tk_messageBox\
-message [::msgcat::mc "Not found active project"]\
-type ok -icon warning\
-title [::msgcat::mc "Warning"]]
case $answer {
ok {return 0}
}
}
FileDialog tree save_all
set file [open [file join $workDir $activeProject.proj] r]
while {[gets $file line]>=0} {
scan $line "%s" keyWord
set string [string range $line [string first "\"" $line] [string last "\"" $line]]
set string [string trim $string "\""]
if {$keyWord == "ProjectDirName"} {
set dir "$string"
}
if {$keyWord == "ProjectVersion"} {
set version "$string"
}
if {$keyWord == "ProjectRelease"} {
set release "$string"
}
}
close $file
set res [split $tgzNamed "-"]
set name [lindex $res 0]
set ver [lindex $res 1]
set rel [lindex $res 2]
if {$name == "projectName"} {
set name $activeProject
}
if {$ver == "version"} {
append name "-$version"
}
if {$rel == "release"} {
append name "-$release"
}
# multiplatform featuring #
if {$tcl_platform(platform) == "windows"} {
append name ".zip"
} elseif {$tcl_platform(platform) == "mac"} {
append name ".zip"
} elseif {$tcl_platform(platform) == "unix"} {
append name ".tar.gz"
}
catch {cd $projDir} res
if {[file exists [file join $tgzDir $name]] == 1} {
set answer [tk_messageBox\
-message "[::msgcat::mc "File already exists. Overwrite?"] \"$name\" ?"\
-type yesno -icon question -default yes\
-title [::msgcat::mc "Question"]]
case $answer {
yes {file delete [file join $tgzDir $name]}
no {return 0}
}
}
# multiplatform featuring #
if {$tcl_platform(platform) == "windows"} {
catch [exec pkzip -r -p [file join $tgzDir $name] [file join $activeProject *]] err
} elseif {$tcl_platform(platform) == "mac"} {
catch [exec zip -c [file join $tgzDir $name] $activeProject] err
} elseif {$tcl_platform(platform) == "unix"} {
catch [exec tar -czvf [file join $tgzDir $name] $activeProject] err
}
# message dialog #
set msg "[::msgcat::mc "Archive created in"] [file join $tgzDir $name]"
set icon info
set answer [tk_messageBox\
-message "$msg"\
-type ok -icon $icon]
case $answer {
ok {return 0}
}
}
## MAKE PROJ PROCEDURE (RUNNING PROJECT) ##
proc Execute {filePath w activeEditor} {
global activeProject cfgVariables
if {$activeProject == ""} {
set answer [tk_messageBox\
-message "[::msgcat::mc "Not found active project"]"\
-type ok -icon warning\
-title [::msgcat::mc "Warning"]]
case $answer {
ok {return 0}
}
}
FileOper::Save
set file $filePath
set action run
# create array with file names #
frame $w.frame -borderwidth 2 -relief ridge -background $cfgVariables(backGround)
pack $w.frame -side top -fill both -expand true
ctext $w.frame.text -yscrollcommand "$w.frame.yscroll set" \
-bg $cfgVariables(backGround) -fg $cfgVariables(foreground) \
-relief sunken -wrap word -highlightthickness 0 -font $cfgVariables(font)\
-selectborderwidth 0 -selectbackground $cfgVariables(selectbg) -width 10 -height 10
scrollbar $w.frame.yscroll -relief sunken -borderwidth {1} -width {10} -takefocus 0 \
-command "$w.frame.text yview" -background $cfgVariables(backGround)
Highlight::ExecuteColorized $w.frame.text
pack $w.frame.text -side left -fill both -expand true
pack $w.frame.yscroll -side left -fill y
bind $w.frame.text <Return> [list Run $w $filePath]
bind $w.frame.text <Control-r> [list CloseExecuteDialog $w $activeEditor]
bind $w.frame.text <Control-Cyrillic_er> [list CloseExecuteDialog $w $activeEditor]
# focus -force $w.frmBtn.btnOk
# $noteBook raise $node
# insert debug data into text widget #
$w.frame.text tag configure bold -font $cfgVariables(fontBold)
$w.frame.text tag configure error -font $cfgVariables(fontBold) -foreground red
$w.frame.text tag add bold 0.0 0.end
$w.frame.text insert end "[::msgcat::mc "Enter command for execute file"] $filePath >\n"
set pos [$w.frame.text index insert]
set lineNum [lindex [split $pos "."] 0]
$w.frame.text insert 0.0 "======================================================================================\n"
$w.frame.text tag add bold $lineNum.0 $lineNum.end
Highlight::ExecuteColorized $w.frame.text
# focus -force $w.frame.text
focus -force $w.frame.text.t
}
proc CloseExecuteDialog {w activeEditor} {
destroy $w
focus $activeEditor.frmText.t.t
}
proc Run {w filePath} {
# Получаем индекс конца последней строки
set endIndex [$w.frame.text index "end-1c"]; # или "end-1l lineend"
# Получаем индекс начала последней строки
set startIndex [$w.frame.text index "end-1l linestart"]
set command [$w.frame.text get $startIndex $endIndex end]
# Заменяем знак %f на имя текущего файла
regsub -all "%f" $command "$filePath" fullCommand
$w.frame.text replace $startIndex $endIndex $fullCommand
# $w.frame.text insert "end-4l linestart"
cd [file dirname $filePath]
set pipe [open "|$fullCommand 2> [file join [file dirname $filePath] errors]" "r"]
set f [open [file join [file dirname $filePath] errors] "r"]
set processPID [pid $pipe]
bind $w.frame.text <Control-c> [list SendSignal $processPID "SIGINT"]
bind $w.frame.text <Control-z> [list SendSignal $processPID "SIGTSTP"]
bind $w.frame.text <Control-d> [list SendSignal $processPID "SIGKILL"]
# set pipe [open "|$command $filePath" "r"]
# set f [open [file join ~ tmp errors] "r"]
fileevent $pipe readable [list DebugInfo $w.frame.text $pipe $f]
fconfigure $pipe -buffering none -blocking no
}
## INSERT DEBUG INFORMATION INTO TEXT WIDGET ##
proc DebugInfo {widget file f} {
$widget configure -state normal
if {[eof $file]} {
catch [close $file] msg
if {$msg != ""} {
puts $msg
$widget insert "end-4l linestart" "[::msgcat::mc "Program failed"]: $msg\n";
} else {
# Highlight::ExecuteColorized $widget
puts $msg
$widget see "end-1l lineend"
$widget delete "end-1l lineend" end
# $widget insert end "\n-------------------------------------------------\n"
# $widget insert end "[::msgcat::mc "Program finished successfully"]\n"
}
Highlight::ExecuteColorized $widget
# close $f
} else {
# Highlight::ExecuteColorized $widget
$widget insert "end-4l linestart" "[read $file]"
}
while {[gets $f line]>=0} {
Highlight::ExecuteColorized $widget
$widget insert "end-4l linestart" "$line\n"
# puts $line
}
# close $f
$widget see end
$widget tag add error 0.0 0.end
# $widget configure -state disabled
}
# Функция для отправки сигнала процессу
proc SendSignal {pid signal} {
global tcl_platform
if {$tcl_platform(platform) eq "unix"} {
# На Unix-системах
switch -- $signal {
"SIGINT" { exec kill -INT $pid } ; # Ctrl+C
"SIGTERM" { exec kill -TERM $pid } ; # Завершение
"SIGTSTP" { exec kill -TSTP $pid } ; # Ctrl+Z (приостановка)
"SIGKILL" { exec kill -KILL $pid } ; # Принудительное завершение
}
} else {
# На Windows
switch -- $signal {
"SIGINT" - "SIGTERM" {
# Используем taskkill для завершения
catch {exec taskkill /PID $pid /T}
}
"SIGKILL" {
# Принудительное завершение на Windows
catch {exec taskkill /PID $pid /T /F}
}
}
}
}
# Правка файла настроек
proc Settings {} {
global dir
FileOper::Edit [file join $dir(cfg) projman.ini]
# Config::read $dir(cfg)
}

View File

@@ -9,7 +9,7 @@
#
######################################################
package require fileutil
package require Thread
# package require Thread
# TCL procedure
@@ -20,7 +20,7 @@ proc GetVariablesFromFile {fileName} {
set varList ""
set params ""
set varsBegin false
puts $fileName
# puts $fileName
set f [open "$fileName" r]
if {[dict exists $lexers $fileType] == 0} {return}
while {[gets $f line] >=0 } {
@@ -32,7 +32,7 @@ proc GetVariablesFromFile {fileName} {
set indentSize 0
}
set varsBegin true
puts "====== $varsBegin $indentSize"
# puts "$varsBegin $indentSize"
continue
# lappend varList [list $varName $varValue]
}
@@ -41,13 +41,13 @@ proc GetVariablesFromFile {fileName} {
set l [GetVarFromLine $line $fileType]
if {$line eq ""} {
set varsBegin false
puts "====== $varsBegin $indentSize [lindex $l 3]"
# puts "$varsBegin $indentSize [lindex $l 3]"
continue
}
if {[lindex $l 3] ne ""} {
if [expr [lindex $l 3] <= $indentSize] {
set varsBegin false
puts "====== $varsBegin $indentSize >[lindex $l 3]<"
# puts "$varsBegin $indentSize >[lindex $l 3]<"
continue
}
}
@@ -79,7 +79,7 @@ proc GetVarFromLine {line fileType} {
set varType ""
}
set indentLength [string length $indent]
puts "variable: $varName, value: $varValue, type: $varType, indent: >$indent< $indentLength"
# puts "variable: $varName, value: $varValue, type: $varType, indent: >$indent< $indentLength"
return [list $varName $varValue $varType $indentLength]
}
}
@@ -90,7 +90,7 @@ proc GetVariablesFromVarFile {fileName} {
set procList ""
set varList ""
set params ""
puts $fileName
# puts $fileName
set f [open "$fileName" r]
if {[dict exists $lexers $fileType] == 0} {return}
while {[gets $f line] >=0 } {
@@ -122,7 +122,7 @@ proc ReadFilesFromDirectory {directory root {type ""}} {
return ""
}
foreach fileName [glob -nocomplain *] {
puts "Find file: $fileName [lsearch -exact -nocase $l $fileName]"
# puts "Find file: $fileName [lsearch -exact -nocase $l $fileName]"
if {[lsearch -exact $l $fileName] != -1 && [file isdirectory [file join $root $directory $fileName]] == 1} {
# puts "--- $root $fileName"
ReadFilesFromDirectory [file join $directory $fileName] $root "var"
@@ -179,8 +179,8 @@ proc ReadFilesFromDirectory {directory root {type ""}} {
#
proc Accept { dirLib directory } {
global dir
puts $dir(lib)
puts $dirLib
# puts $dir(lib)
# puts $dirLib
# переменная с указанием ваших действия перед порождением потока
set threadinit {
# если необходимо, загружаем исходный tcl код, расположенный в других файлах

View File

@@ -18,7 +18,8 @@ namespace eval Tree {
# puts "$tree $parent $item $type $text"
switch $type {
file {
regsub -all {\.|/|\\|\s} $item "_" subNode
regsub -all {\.|/|\\|\s|:} $item "_" subNode
set subNode [string tolower $subNode]
# puts "Inserted tree node: $subNode"
set fileExt [string trimleft [file extension $text] "."]
#set fileName [string trimleft [file extension $text] "."]
@@ -41,7 +42,8 @@ namespace eval Tree {
}
}
directory {
regsub -all {\.|/|\\|\s} $item "_" subNode
regsub -all {\.|/|\\|\s|:} $item "_" subNode
set subNode [string tolower $subNode]
# puts $subNode
if {[string match {*debian*} [string tolower [file tail $item]]]} {
set image [::FindImage debian]
@@ -104,7 +106,7 @@ namespace eval Tree {
set key [lindex [split $id "::"] 0]
if {$values eq "" || $key eq ""} {return}
# puts "$key $tree $values"
puts "$key $tree $values"
switch -regexp $key {
directory {
FileOper::ReadFolder $values
@@ -112,6 +114,7 @@ namespace eval Tree {
}
file {
set v [FileOper::Edit $values $nbEditor]
puts $v
if {$v eq false} {
$tree delete $id
}

View File

@@ -1,6 +1,6 @@
#!/bin/sh
# Tcl ignores the next line -*- tcl -*- \
exec wish "$0" -- "$@"
exec wish9.0 "$0" -- "$@"
######################################################
# Tcl/Tk Project manager 2.0
@@ -9,8 +9,8 @@ exec wish "$0" -- "$@"
# Home page: https://nuk-svk.ru
######################################################
# Version: 2.0.0
# Release: alpha
# Build: 09122022154416
# Release: alpha19
# Build: 30102025145246
######################################################
# определим текущую версию, релиз и т.д.
@@ -34,6 +34,38 @@ while {[gets $f line] >=0} {
}
close $f
package require msgcat
package require inifile
package require ctext
package require base64
package require fileutil
# package require Thread
package require fileutil::magic::filetype
# Определим установлен ли пакет Img для расширенной поддержки изображений
proc PackagePresent {pkg} {
# puts $pkg
foreach item [package names] {
# puts [string match -nocase Img $item]
if {[string match -nocase Img $item] == 1} {
puts "The $pkg package was found"
return true
}
}
}
if {[PackagePresent "Img"] eq "true"} {
package require Img
} else {
puts "Img not present"
}
# Устанавливаем текущий каталог
set dir(root) [pwd]
set dir(doc) [file join $dir(root) doc]
# ДОбавляем в список файлы (каталоги) из командной строки
if { $::argc > 0 } {
foreach arg $::argv {
lappend opened $arg
@@ -41,17 +73,6 @@ if { $::argc > 0 } {
puts $opened
}
package require msgcat
package require inifile
package require ctext
package require base64
package require fileutil
package require Thread
package require fileutil::magic::filetype
# Устанавливаем текущий каталог
set dir(root) [pwd]
set dir(doc) [file join $dir(root) doc]
# Устанавливаем рабочий каталог, если его нет то создаём.
# Согласно спецификации XDG проверяем наличие переменных и каталогов
@@ -109,13 +130,14 @@ puts "Setting the locale... [::msgcat::mclocale]"
source [file join $dir(lib) gui.tcl]
Git::CommandPathSetting
# Open the PATH if command line argument has been setting
if [info exists opened] {
# puts ">$opened"
foreach path $opened {
# Приводим путь к полному виду
if {[file pathtype $path] ne "absolute"} {
puts "\n\t[::msgcat::mc "Specify the absolute path to the directory or file"]: $path\n"
exit
set path [file normalize $path]
}
if [file isdirectory $path] {
# set activeProject $path

View File

@@ -6,8 +6,8 @@
#
# $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
package require Tk; # minimum version for Tile
package require tile; # depends upon tile
namespace eval ttk {
@@ -39,6 +39,7 @@ namespace eval ttk::theme::black {
-lightest "#ffffff"
-selectbg "#4a6984"
-selectfg "#ffffff"
-font "#c8c8c8"
}
if {[info commands ::ttk::style] ne ""} {
set styleCmd ttk::style
@@ -46,77 +47,83 @@ namespace eval ttk::theme::black {
set styleCmd style
}
$styleCmd theme create black -parent clam -settings {
$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" \
;
# -----------------------------------------------------------------
# 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] \
;
$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}
# ttk widgets.
$styleCmd configure TButton \
-width -8 -padding {5 1} -relief link
$styleCmd configure TMenubutton \
-relief flat -arrowsize 0
$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 TCheckbutton \
-indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1}
$styleCmd configure TRadiobutton \
-indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1}
$styleCmd configure TNotebook \
-border -1
$styleCmd configure TNotebook.Tab \
-padding {6 2 6 2} \
-border -1
$styleCmd configure TEntry \
-fieldbackground gray20 -foreground $colors(-font) \
-padding {2 0} -border -1
$styleCmd configure TCombobox \
-fieldbackground white -foreground $colors(-font)\
-padding {2 0}
$styleCmd configure TSpinbox \
-fieldbackground white -foreground $colors(-font) \
-padding {2 0}
$styleCmd map TNotebook.Tab -background [list \
selected $colors(-lighter)]
$styleCmd configure TNotebook \
-border -1
$styleCmd configure TNotebook.Tab \
-padding {6 2 6 2} \
-border -1
# tk widgets.
$styleCmd map Menu \
-background [list active $colors(-lighter)] \
-foreground [list disabled $colors(-disabledfg)]
$styleCmd map TNotebook.Tab -background [list \
selected $colors(-lighter)]
$styleCmd configure TreeCtrl \
-background gray30 -itembackground {gray60 gray50} \
-itemfill white -itemaccentfill yellow -border -1
# tk widgets.
$styleCmd map Menu \
-background [list active $colors(-dark)] \
-foreground [list disabled $colors(-lightest)] \
$styleCmd map Treeview\
-background [list selected $colors(-lighter)] \
-foreground [list selected $colors(-selectfg)]
# -background [list selected $colors(-selectbg)] \
$styleCmd configure TreeCtrl \
-background gray30 -itembackground {gray60 gray50} \
-itemfill white -itemaccentfill yellow -border -1
$styleCmd configure Treeview -fieldbackground gray25
}
$styleCmd map Treeview\
-background [list selected $colors(-lighter)] \
-foreground [list selected $colors(-selectfg)]
# -background [list selected $colors(-selectbg)] \
$styleCmd configure Treeview -fieldbackground gray25
$styleCmd map Canvas \
-background [list selected $colors(-lighter)] \
-foreground [list selected $colors(-selectfg)] \
-highlightbackground [list selected $colors(-lighter)]
}
puts [ttk::style element names]
}

View File

@@ -1,7 +1,7 @@
#!/bin/sh
#-*-tcl-*-
# the next line restarts using wish \
exec wish "$0" -- ${1+"$@"}
exec wish8.6 "$0" -- ${1+"$@"}
set version 3.0
@@ -1365,6 +1365,3 @@ proc make-regexp::make-regexp {words} {
set regexp
}
#==============================================================================================