Compare commits

...

102 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
32 changed files with 2203 additions and 391 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/projman.substvars
debian/files debian/files
debian/projman.debhelper.log debian/projman.debhelper.log
debian/*.tmp
debian/errors
*.tmp
errors

432
CHANGELOG
View File

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

@@ -29,10 +29,60 @@ For UNIX-like OS
Tcl/Tk >= 8.6 http://tcl.tk Tcl/Tk >= 8.6 http://tcl.tk
tcllib, tklib 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 ## 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: Or use git:
@@ -81,7 +131,6 @@ Or type "projman" into terminal, Or choose the name of the program "Projman" on
- Ctrl-N - Create new file - Ctrl-N - Create new file
- Ctrl-O - Open file - Ctrl-O - Open file
- Ctrl-W - Close editor (file) - Ctrl-W - Close editor (file)
- Ctrl-K - Open folder
- Ctrl-Q - Quit from ProjMan - Ctrl-Q - Quit from ProjMan
- Ctrl-J - Show procedures (functions) list for navigation in open editor - Ctrl-J - Show procedures (functions) list for navigation in open editor
- Ctrl-L - Find and display files where the variable is defined, the name of which is located under the cursor in the editor - Ctrl-L - Find and display files where the variable is defined, the name of which is located under the cursor in the editor
@@ -95,6 +144,10 @@ Or type "projman" into terminal, Or choose the name of the program "Projman" on
- Ctrl-G - Go to line dialog - Ctrl-G - Go to line dialog
- Ctrl-C - Copy selected text into buffer - Ctrl-C - Copy selected text into buffer
- Ctrl-V - Paste text from 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-P - Show/Hide the file tree panel
- Alt-W - Delete the current word - Alt-W - Delete the current word
@@ -103,6 +156,7 @@ Or type "projman" into terminal, Or choose the name of the program "Projman" on
- Alt-R - Delete current line - Alt-R - Delete current line
- Alt-Y - Copy current line into buffer - Alt-Y - Copy current line into buffer
- Alt-S - Split the edited window horizontally - Alt-S - Split the edited window horizontally
- Alt-K - Open folder
## Credits ## Credits

5
TODO
View File

@@ -7,7 +7,7 @@
--- Ansible --- --- Ansible ---
1. Определение всех переменных в отдельный список 1. Определение всех переменных в отдельный список
- внутри файла, конструкции вида: - внутри файла, конструкции вида:
set_fact: set_fact:
varName: value varName: value
set_fact varName value set_fact varName value
@@ -18,5 +18,4 @@
- var1.yml - var1.yml
- var2.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 sed -i "/# Build:.*/c$TXT" projman.tcl
cp projman.tcl projman cp projman.tcl projman
cp changelog-gen.tcl changelog-gen
./changelog-gen.tcl --project-name projman --project-version ${VERSION} --project-release ${RELEASE} --out-file debian/changelog --deb --last
sed -i "s+^set\ dir(lib)+set\ dir(lib)\ /usr/share/projman/lib ;#+g" projman sed -i "s+^set\ dir(lib)+set\ dir(lib)\ /usr/share/projman/lib ;#+g" projman
@@ -19,9 +21,9 @@ sed -i "s+\[pwd\]+/usr/share/projman+g" projman
tar czf ../projman_${VERSION}.orig.tar.gz . tar czf ../projman_${VERSION}.orig.tar.gz .
dpkg-buildpackage dpkg-buildpackage -d
#cp ../projman_${VERSION}-${RELEASE}_amd64.deb /files/ #cp ../projman_${VERSION}-${RELEASE}_amd64.deb /files/
rm -v projman rm -v projman changelog-gen
rm -r -v debian/{projman,.debhelper} 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/ projman /usr/bin/
changelog-gen /usr/bin/
lib/*.tcl /usr/share/projman/lib lib/*.tcl /usr/share/projman/lib
lib/msgs/* /usr/share/projman/lib/msgs lib/msgs/* /usr/share/projman/lib/msgs
theme /usr/share/projman/ theme /usr/share/projman/

0
errors Normal file
View File

View File

@@ -25,7 +25,7 @@ set ::configDefault "\[General\]
cfgModifyDate='' cfgModifyDate=''
searchCommand=/usr/bin/grep searchCommand=/usr/bin/grep
searchCommandOptions=-r -n -H searchCommandOptions=-r -n -H
gitCommand=/usr/bin/git gitCommand=
# must return a mime type of file # must return a mime type of file
fileTypeCommand=/usr/bin/file fileTypeCommand=/usr/bin/file
fileTypeCommandOptions=-i -b fileTypeCommandOptions=-i -b
@@ -37,7 +37,7 @@ menuShow=true
statusBarShow=true statusBarShow=true
filesPanelShow=true filesPanelShow=true
filesPanelPlace=left filesPanelPlace=left
geometry=1024x768 geometry=800x600
guiFont={Droid Sans Mono} 9 guiFont={Droid Sans Mono} 9
guiFontBold={Droid Sans Mono} 9 bold guiFontBold={Droid Sans Mono} 9 bold
guiFG=#cccccc guiFG=#cccccc
@@ -64,6 +64,7 @@ multilineComments=true
\[UserSession\] \[UserSession\]
opened= opened=
editedFiles= editedFiles=
recentFolder=
" "
proc Config::create {dir} { proc Config::create {dir} {
set cfgFile [open [file join $dir projman.ini] "w+"] set cfgFile [open [file join $dir projman.ini] "w+"]

View File

@@ -94,7 +94,7 @@ namespace eval Editor {
# } # }
set commentProcedure "GetComment" set commentProcedure "GetComment"
puts "$fileType, $commentProcedure" # puts "$fileType, $commentProcedure"
if {$selIndex != ""} { if {$selIndex != ""} {
set lineBegin [lindex [split [lindex $selIndex 0] "."] 0] set lineBegin [lindex [split [lindex $selIndex 0] "."] 0]
set lineEnd [lindex [split [lindex $selIndex 1] "."] 0] set lineEnd [lindex [split [lindex $selIndex 1] "."] 0]
@@ -140,10 +140,10 @@ namespace eval Editor {
set cmd "regexp -nocase -indices -- {(^|\s+)\\s*($symbol\\s*)(.*)} {$str} match v1 v2 v3" set cmd "regexp -nocase -indices -- {(^|\s+)\\s*($symbol\\s*)(.*)} {$str} match v1 v2 v3"
puts $cmd # puts $cmd
# puts [eval $cmd] # puts [eval $cmd]
if [eval $cmd] { if [eval $cmd] {
puts "$match, $v2, $v3" # puts "$match, $v2, $v3"
return [list [lindex [split $v2] 0] [lindex [split $v3] 0]] return [list [lindex [split $v2] 0] [lindex [split $v3] 0]]
} else { } else {
return 0 return 0
@@ -253,7 +253,7 @@ namespace eval Editor {
$txt highlight $lineBegin.0 $lineEnd.end $txt highlight $lineBegin.0 $lineEnd.end
} else { } else {
set str [$txt get $lineNum.0 $lineNum.end] set str [$txt get $lineNum.0 $lineNum.end]
puts ">>>>> $str" # puts ">>>>> $str"
if {[regexp -nocase -indices -- {(^\s*)(.*?)} $str match v1]} { if {[regexp -nocase -indices -- {(^\s*)(.*?)} $str match v1]} {
set posBegin [lindex [split $v1] 0] set posBegin [lindex [split $v1] 0]
set posEnd [lindex [split $v1] 1] set posEnd [lindex [split $v1] 1]
@@ -277,7 +277,7 @@ namespace eval Editor {
set pos [$txt index insert] set pos [$txt index insert]
set lineNum [lindex [split $pos "."] 0] set lineNum [lindex [split $pos "."] 0]
set posNum [lindex [split $pos "."] 1] set posNum [lindex [split $pos "."] 1]
puts "$pos" # puts "$pos"
if {$lineNum > 1} { if {$lineNum > 1} {
# get current text # get current text
set curText [$txt get $lineNum.0 "$lineNum.0 lineend"] set curText [$txt get $lineNum.0 "$lineNum.0 lineend"]
@@ -398,7 +398,7 @@ namespace eval Editor {
set win .varhelper set win .varhelper
# if { [winfo exists $win] == 0 } { return } # if { [winfo exists $win] == 0 } { return }
set ind [$win.lBox curselection] set ind [$win.lBox curselection]
puts ">>>>>>>>>>>> VarHelperBind <<<<<<<<<<<<<<<<" # puts ">>>>>>>>>>>> VarHelperBind <<<<<<<<<<<<<<<<"
switch -- $K { switch -- $K {
Prior { Prior {
@@ -443,7 +443,7 @@ namespace eval Editor {
} }
} ;# proc auto_completition_key } ;# proc auto_completition_key
proc VarHelperEscape {w} { proc VarHelperEscape {w} {
puts ">>>>>>>>>>>> VarHelperEscape <<<<<<<<<<<<<<<<" # puts ">>>>>>>>>>>> VarHelperEscape <<<<<<<<<<<<<<<<"
# bindtags $w [list [winfo parent $w] $w Text sysAfter all] # bindtags $w [list [winfo parent $w] $w Text sysAfter all]
bindtags $w [list [winfo toplevel $w] $w Ctext sysAfter all] bindtags $w [list [winfo toplevel $w] $w Ctext sysAfter all]
catch { destroy .varhelper } catch { destroy .varhelper }
@@ -459,7 +459,12 @@ namespace eval Editor {
# блокировка открытия диалога если запущен другой # блокировка открытия диалога если запущен другой
set txt $w set txt $w
# set win .varhelper # set win .varhelper
puts "$x $y $w $word $wordType" # Проверяем если есть выделение то блокировать появление диалога
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] set fileType [dict get $editors $txt fileType]
if {[dict exists $editors $txt variableList] != 0} { if {[dict exists $editors $txt variableList] != 0} {
@@ -575,6 +580,8 @@ namespace eval Editor {
if { [set height [llength $findedVars]] > 10 } { set height 10 } if { [set height [llength $findedVars]] > 10 } { set height 10 }
$win.lBox configure -height $height $win.lBox configure -height $height
# focus $win.lBox
bind $win <Escape> { bind $win <Escape> {
destroy $Editor::win destroy $Editor::win
focus -force $Editor::txt.t focus -force $Editor::txt.t
@@ -755,7 +762,7 @@ namespace eval Editor {
} }
## GET KEYS CODE ## ## GET KEYS CODE ##
proc Key {key str} { 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 >= 10 && $key <= 22} {return "true"}
if {$key >= 24 && $key <= 36} {return "true"} if {$key >= 24 && $key <= 36} {return "true"}
if {$key >= 38 && $key <= 50} {return "true"} if {$key >= 38 && $key <= 50} {return "true"}
@@ -779,8 +786,11 @@ namespace eval Editor {
bind $txt <Control-eacute> Quit bind $txt <Control-eacute> Quit
bind $txt <Control-igrave> "Editor::SelectionPaste $txt" bind $txt <Control-igrave> "Editor::SelectionPaste $txt"
bind $txt <Control-v> "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-l> "SearchVariable $txt; break"
bind $txt <Control-Cyrillic_de> "SearchVariable $txt; break"
bind $txt <Control-i> "ImageBase64Encode $txt" bind $txt <Control-i> "ImageBase64Encode $txt"
bind $txt <Control-Cyrillic_sha> "ImageBase64Encode $txt"
bind $txt <Control-bracketleft> "Editor::InsertTabular $txt" bind $txt <Control-bracketleft> "Editor::InsertTabular $txt"
bind $txt <Control-bracketright> "Editor::DeleteTabular $txt" bind $txt <Control-bracketright> "Editor::DeleteTabular $txt"
bind $txt <Control-comma> "Editor::Comment $txt $fileType" bind $txt <Control-comma> "Editor::Comment $txt $fileType"
@@ -790,25 +800,35 @@ namespace eval Editor {
bind $txt <ButtonRelease-1> "Editor::SearchBrackets $txt" bind $txt <ButtonRelease-1> "Editor::SearchBrackets $txt"
bind $txt <Button-1><ButtonRelease-1> "Editor::SelectionHighlight $txt" bind $txt <Button-1><ButtonRelease-1> "Editor::SelectionHighlight $txt"
bind $txt <<Modified>> "SetModifiedFlag $w $nb" bind $txt <<Modified>> "SetModifiedFlag $w $nb"
bind $txt <Control-i> ImageBase64Encode
bind $txt <Control-u> "Editor::SearchBrackets %W" 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}"
bind $txt <Control-j> "catch {Editor::GoToFunction $txt}; break" 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-w> "$txt delete {insert wordstart} {insert wordend}"
bind $txt <Alt-odiaeresis> "$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-r> "$txt delete {insert linestart} {insert lineend + 1char}"
bind $txt <Alt-ecircumflex> "$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-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-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-s> "Editor::SplitEditorH $w $fileType"
bind $txt <Alt-ucircumflex> "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-y> "Editor::TextCopy $txt"
bind $txt <Alt-Cyrillic_en> "Editor::TextCopy $txt"
bind $txt <Control-g> "Editor::GoToLineNumberDialog $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-agrave> "Editor::FindDialog $w"
bind $txt <Control-f> "Editor::FindDialog $txt" 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-F> "Editor::FindDialog $txt"
bind $txt <Control-odiaeresis> FileOper::Close bind $txt <Control-odiaeresis> FileOper::Close
bind $txt <Control-w> FileOper::Close bind $txt <Control-w> FileOper::Close
bind $txt <Control-Cyrillic_tse> FileOper::Close
bind $txt <Control-o> { bind $txt <Control-o> {
set filePath [FileOper::OpenDialog] set filePath [FileOper::OpenDialog]
if {$filePath != ""} { if {$filePath != ""} {
@@ -823,6 +843,16 @@ namespace eval Editor {
} }
break 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 <KeyRelease> "Editor::ReleaseKey %K $txt.t $fileType"
# bind $txt.t <KeyPress> "Editor::PressKey %K $txt.t" # bind $txt.t <KeyPress> "Editor::PressKey %K $txt.t"
# bind $txt <KeyRelease> "Editor::Key %k %K" # bind $txt <KeyRelease> "Editor::Key %k %K"
@@ -883,20 +913,31 @@ namespace eval Editor {
set lineNum [lindex [split $pos "."] 0] set lineNum [lindex [split $pos "."] 0]
set posNum [lindex [split $pos "."] 1] set posNum [lindex [split $pos "."] 1]
set symbol [string trim [string trimleft $symbol "\\"]] set symbol [string trim [string trimleft $symbol "\\"]]
# puts "Selindex : $selIndex, cursor position: $pos" # puts "Selindex : $selIndex, cursor position: $pos, Symbol: $symbol"
if {$selIndex != ""} { if {$selIndex != ""} {
set lineBegin [lindex [split [lindex $selIndex 0] "."] 0] set lineBegin [lindex [split [lindex $selIndex 0] "."] 0]
set posBegin [lindex [split [lindex $selIndex 0] "."] 1] set posBegin [lindex [split [lindex $selIndex 0] "."] 1]
set lineEnd [lindex [split [lindex $selIndex 1] "."] 0] set lineEnd [lindex [split [lindex $selIndex 1] "."] 0]
set posEnd [lindex [split [lindex $selIndex 1] "."] 1] set posEnd [lindex [split [lindex $selIndex 1] "."] 1]
# set selText [$txt get $lineBegin.$posBegin $lineEnd.$posEnd] set selText [$txt get $lineBegin.$posBegin $lineEnd.$posEnd]
set selText $selectionText # set selText $selectionText
# puts "Selected text: $selText, pos: $pos, lineBegin: $lineBegin, posBegin: $posBegin, pos end: $posEnd" # puts "Selected text: $selText, pos: $pos, lineBegin: $lineBegin, posBegin: $posBegin, pos end: $posEnd"
if {$posNum == $posEnd} { if {$posNum == $posEnd} {
$txt insert $lineBegin.$posBegin "$symbol" $txt insert $lineBegin.$posBegin "$symbol"
} }
if {$posNum == $posBegin} { 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 highlight $lineBegin.$posBegin $lineEnd.end
# $txt insert $lineBegin.[expr $posBegin + 1] "$symbol" # $txt insert $lineBegin.[expr $posBegin + 1] "$symbol"
@@ -924,7 +965,8 @@ namespace eval Editor {
set nbEditorItem [NB::InsertItem $nbEditor $fileFullPath "file"] set nbEditorItem [NB::InsertItem $nbEditor $fileFullPath "file"]
# puts "$nbEditorItem, $nbEditor" # puts "$nbEditorItem, $nbEditor"
Editor $fileFullPath $nbEditor $nbEditorItem Editor $fileFullPath $nbEditor $nbEditorItem
SetModifiedFlag $nbEditorItem SetModifiedFlag $nbEditorItem $nbEditor
focus -force $nbEditorItem.frmText.t.t
} }
proc ReadStructure {txt treeItemName} { proc ReadStructure {txt treeItemName} {
@@ -941,7 +983,7 @@ namespace eval Editor {
if {[eval [dict get $lexers $fileType procRegexpCommand]]} { if {[eval [dict get $lexers $fileType procRegexpCommand]]} {
set procName_ [string trim $procName] set procName_ [string trim $procName]
if {$treeItemName ne ""} { 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] lappend procList [list $procName_ $params]
unset procName_ unset procName_
@@ -965,7 +1007,7 @@ namespace eval Editor {
} else { } else {
set varType "" set varType ""
} }
puts "variable: $varName, value: $varValue, type: $varType" # puts "variable: $varName, value: $varValue, type: $varType"
lappend varList [list $varName $varValue] lappend varList [list $varName $varValue]
} }
} }
@@ -975,7 +1017,7 @@ namespace eval Editor {
} }
proc FindFunction {txt findString} { proc FindFunction {txt findString} {
puts "txt: $txt, $findString" # puts "txt: $txt, $findString"
set pos "0.0" set pos "0.0"
$txt see $pos $txt see $pos
set line [lindex [split $pos "."] 0] set line [lindex [split $pos "."] 0]
@@ -1042,7 +1084,7 @@ namespace eval Editor {
# Вызов диалога со списком процедур или функций присутствующих в тексте # Вызов диалога со списком процедур или функций присутствующих в тексте
proc GoToFunction { w } { proc GoToFunction { w } {
global tree editors global tree editors
puts $w # puts $w
# set txt $w.frmText.t # set txt $w.frmText.t
set txt $w set txt $w
set box [$txt bbox insert] set box [$txt bbox insert]
@@ -1052,7 +1094,7 @@ namespace eval Editor {
# puts "--$txt" # puts "--$txt"
# puts $editors($txt) # puts $editors($txt)
foreach item [dict get $editors $txt procedureList] { foreach item [dict get $editors $txt procedureList] {
puts $item # puts $item
lappend l [lindex $item 0] lappend l [lindex $item 0]
} }
if {$l ne ""} { if {$l ne ""} {
@@ -1144,7 +1186,7 @@ namespace eval Editor {
proc FindReplaceText {txt findString replaceString regexp} { proc FindReplaceText {txt findString replaceString regexp} {
global nbEditor global nbEditor
puts [focus] # puts [focus]
# set txt [$nbEditor select].frmText.t # set txt [$nbEditor select].frmText.t
$txt tag remove sel 1.0 end $txt tag remove sel 1.0 end
# $txt see $pos # $txt see $pos
@@ -1176,8 +1218,13 @@ namespace eval Editor {
# puts $lstFindIndex # puts $lstFindIndex
# puts $matchIndexPair # puts $matchIndexPair
# set lstFindIndex [$txt search -all "$selectionText" 0.0] # set lstFindIndex [$txt search -all "$selectionText" 0.0]
# Найдем разницу в длине строк для установки правильного
# индекса для выделения текста после вставки
set stringLengthDiff [expr [string length $findString] - [string length $replaceString]]
set i 0 set i 0
foreach ind $lstFindIndex { foreach ind [lsort -dictionary -decreasing $lstFindIndex] {
set selFindLine [lindex [split $ind "."] 0] set selFindLine [lindex [split $ind "."] 0]
set selFindRow [lindex [split $ind "."] 1] set selFindRow [lindex [split $ind "."] 1]
# set endInd "$selFindLine.[expr $selFindRow + $symNumbers]" # set endInd "$selFindLine.[expr $selFindRow + $symNumbers]"
@@ -1185,8 +1232,15 @@ namespace eval Editor {
# puts "$ind; $selFindLine, $selFindRow; $endInd " # puts "$ind; $selFindLine, $selFindRow; $endInd "
if {$replaceString ne ""} { if {$replaceString ne ""} {
$txt replace $ind $endInd $replaceString $txt replace $ind $endInd $replaceString
# Вычисляем индекс вхождения строки после замены для выделения в тексте
if {$stringLengthDiff > 0} {
$txt tag add sel $ind "$endInd - [expr [tcl::mathfunc::abs $stringLengthDiff]] chars"
} else {
$txt tag add sel $ind "$endInd + [expr [tcl::mathfunc::abs $stringLengthDiff]] chars"
} }
} else {
$txt tag add sel $ind $endInd $txt tag add sel $ind $endInd
}
incr i incr i
} }
.finddialog.lblCounter configure -text "[::msgcat::mc "Finded"]: $i" .finddialog.lblCounter configure -text "[::msgcat::mc "Finded"]: $i"
@@ -1228,7 +1282,7 @@ namespace eval Editor {
} else { } else {
if {[$nbEditor select] ne ""} { if {[$nbEditor select] ne ""} {
set txt [$nbEditor select].frmText.t set txt [$nbEditor select].frmText.t
puts $txt # puts $txt
} else { } else {
return return
} }
@@ -1316,7 +1370,7 @@ namespace eval Editor {
# Horizontal split the Editor text widget # Horizontal split the Editor text widget
proc SplitEditorH {w fileType nb} { proc SplitEditorH {w fileType nb} {
global cfgVariables global cfgVariables
puts [$w.panelTxt panes] # puts [$w.panelTxt panes]
if [winfo exists $w.frmText2] { if [winfo exists $w.frmText2] {
$w.panelTxt forget $w.frmText2 $w.panelTxt forget $w.frmText2
destroy $w.frmText2 destroy $w.frmText2
@@ -1336,7 +1390,7 @@ namespace eval Editor {
proc SplitEditorV {fileFullPath} { proc SplitEditorV {fileFullPath} {
global cfgVariables global cfgVariables
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName regsub -all {\.|/|\\|\s|:} $fileFullPath "_" itemName
set itemName ".frmWork.nbEditor2.$itemName" set itemName ".frmWork.nbEditor2.$itemName"
# puts $itemName # puts $itemName
if {[winfo exists $itemName] == 1} { if {[winfo exists $itemName] == 1} {
@@ -1359,8 +1413,6 @@ namespace eval Editor {
# grid rowconfigure .frmWork .frmWork.nbEditor2 -weight 1 # grid rowconfigure .frmWork .frmWork.nbEditor2 -weight 1
.frmWork.panelNB add .frmWork.nbEditor2 -weight 0 .frmWork.panelNB add .frmWork.nbEditor2 -weight 0
puts [FileOper::Edit $fileFullPath .frmWork.nbEditor2] puts [FileOper::Edit $fileFullPath .frmWork.nbEditor2]
} }
proc GoToLineNumber {text lineNumber} { proc GoToLineNumber {text lineNumber} {
@@ -1458,8 +1510,8 @@ namespace eval Editor {
dict set editors $txt fileType $fileType dict set editors $txt fileType $fileType
dict set editors $txt procedureList [list] dict set editors $txt procedureList [list]
puts ">>[dict get $editors $txt fileType]" # puts ">>[dict get $editors $txt fileType]"
puts ">>[dict get $editors $txt procedureList]" # puts ">>[dict get $editors $txt procedureList]"
# puts ">>>>> $editors" # puts ">>>>> $editors"
if {[info procs ::Highlight::$fileType] ne ""} { if {[info procs ::Highlight::$fileType] ne ""} {
@@ -1484,6 +1536,7 @@ namespace eval Editor {
ICO ICO
XPM XPM
} }
# puts "$itemName"
set fr $itemName set fr $itemName
if ![string match "*untitled*" $itemName] { if ![string match "*untitled*" $itemName] {
set lblText $fileFullPath set lblText $fileFullPath
@@ -1505,9 +1558,13 @@ namespace eval Editor {
-command "Editor::SplitEditorH $fr $fileType $nb" -command "Editor::SplitEditorH $fr $fileType $nb"
ttk::button $fr.header.$btnSplitV -image split_vertical_11x11 \ ttk::button $fr.header.$btnSplitV -image split_vertical_11x11 \
-command "Editor::SplitEditorV $fileFullPath" -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.$btnSplitH $fr.$btnSplitV -side right -anchor e
pack $fr.header.$lblName -side left -expand true -fill x pack $fr.header.$lblName -side left -expand true -fill x
pack $fr.header.$btnSplitV $fr.header.$btnSplitH -side right pack $fr.header.$btnSplitV $fr.header.$btnSplitH $fr.header.$btnSplitExecute -side right
pack $fr.header -side top -fill x pack $fr.header -side top -fill x
@@ -1525,4 +1582,27 @@ namespace eval Editor {
return $fr 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 { namespace eval FileOper {
global packages
variable types variable types
set ::types { set ::types {
{"All files" *} {"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 ""}} { proc GetFileMimeType {fileFullPath {opt ""}} {
global cfgVariables global cfgVariables
@@ -31,6 +61,7 @@ namespace eval FileOper {
# lappend cmd $activeProject # lappend cmd $activeProject
lappend cmd $fileFullPath lappend cmd $fileFullPath
# puts $cmd
catch $cmd pipe catch $cmd pipe
# puts $pipe # puts $pipe
if [regexp -nocase -- {(\w+)/([\w\-_\.]+); charset=([[:alnum:]-]+)} $pipe m fType fExt fCharset] { if [regexp -nocase -- {(\w+)/([\w\-_\.]+); charset=([[:alnum:]-]+)} $pipe m fType fExt fCharset] {
@@ -43,18 +74,75 @@ 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 { switch $fType {
"application" { "binary" {
if {$fExt ne "json"} { 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 return false
} }
} }
}
}
default {
return binary
}
}
} else {
return binary
}
}
"text" { "text" {
return text return text
} }
"image" { "image" {
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 return false
} }
}
}
}
"empty" {
return text
}
default { default {
return false return false
} }
@@ -145,6 +233,7 @@ namespace eval FileOper {
# } # }
# .frmStatus.lblGitLogo configure -image git_logo_20x20 # .frmStatus.lblGitLogo configure -image git_logo_20x20
# .frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]" # .frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
AddRecentEditedFolder $fullPath
return $fullPath return $fullPath
} }
@@ -201,11 +290,10 @@ namespace eval FileOper {
if {[lsearch -exact [.frmWork.panelNB panes] .frmWork.nbEditor2] != -1} { if {[lsearch -exact [.frmWork.panelNB panes] .frmWork.nbEditor2] != -1} {
.frmWork.panelNB forget .frmWork.nbEditor2 .frmWork.panelNB forget .frmWork.nbEditor2
} }
foreach nbItem [array names modified] { foreach nbItem [$nbEditor tabs] {
if {[info exists modified($nbItem)] == 1 && $modified($nbItem) eq "true"} {
catch {$nbEditor select $nbItem} catch {$nbEditor select $nbItem}
# puts "close tab $nbItem" if {[Close] eq "cancel"} {
if {[Close] eq "cancel"} {return "cancel"} return "cancel"
} }
} }
} }
@@ -255,18 +343,18 @@ namespace eval FileOper {
} }
proc Save {} { proc Save {} {
global nbEditor tree env activeProject global nbEditor tree env activeProject dir
if [info exists activeProject] { if [info exists activeProject] {
set dir $activeProject set dirProject $activeProject
} else { } else {
set dir $env(HOME) set dirProject $env(HOME)
} }
set nbEditorItem [$nbEditor select] set nbEditorItem [$nbEditor select]
puts "Saved editor text: $nbEditorItem" # puts "Saved editor text: $nbEditorItem"
if [string match "*untitled*" $nbEditorItem] { if [string match "*untitled*" $nbEditorItem] {
set filePath [tk_getSaveFile -initialdir $dir -filetypes $::types -parent .] set filePath [tk_getSaveFile -initialdir $dirProject -filetypes $::types -parent .]
if {$filePath eq ""} { if {$filePath eq ""} {
return return
} }
@@ -283,9 +371,12 @@ namespace eval FileOper {
set editedText [$nbEditorItem.frmText.t get 0.0 end] set editedText [$nbEditorItem.frmText.t get 0.0 end]
set f [open $filePath "w+"] set f [open $filePath "w+"]
puts -nonewline $f $editedText puts -nonewline $f $editedText
puts "$f was saved" # puts "$f was saved"
close $f close $f
ResetModifiedFlag $nbEditorItem $nbEditor ResetModifiedFlag $nbEditorItem $nbEditor
if {[file tail $filePath] eq "projman.ini"} {
Config::read $dir(cfg)
}
} }
proc SaveAll {} { proc SaveAll {} {
@@ -312,7 +403,7 @@ namespace eval FileOper {
proc ReadFolder {directory {parent ""}} { proc ReadFolder {directory {parent ""}} {
global tree dir lexers project global tree dir lexers project
puts "Read the folder $directory" # puts "Read the folder $directory"
set rList "" set rList ""
if {[catch {cd $directory}] != 0} { if {[catch {cd $directory}] != 0} {
return "" return ""
@@ -384,33 +475,58 @@ namespace eval FileOper {
# Delete emty last line # Delete emty last line
if {[$txt get {end-1 line} end] eq "\n" || [$txt get {end-1 line} end] eq "\r\n"} { if {[$txt get {end-1 line} end] eq "\n" || [$txt get {end-1 line} end] eq "\r\n"} {
$txt delete {end-1 line} end $txt delete {end-1 line} end
puts ">[$txt get {end-1 line} end]<" # puts ">[$txt get {end-1 line} end]<"
} }
$txt see 1.0 $txt see 1.0
} }
proc Edit {fileFullPath {nbEditor .frmWork.nbEditor}} { proc Edit {fileFullPath {nbEditor .frmWork.nbEditor}} {
global tree global tree
puts "$fileFullPath"
if {[file exists $fileFullPath] == 0} { if {[file exists $fileFullPath] == 0} {
return false return false
} else { } else {
# puts [::fileutil::magic::filetype $fileFullPath] # puts "$fileFullPath File type [::fileutil::magic::filetype $fileFullPath]"
set fileType [FileOper::GetFileMimeType $fileFullPath] set fileType [FileOper::GetFileMimeType $fileFullPath]
} }
# puts "$fileType <<<<<<<<<<<"
switch $fileType { switch $fileType {
"text" { "text" {
# return text # return text
} }
"image" { "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 { false {
return 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 filePath [file dirname $fileFullPath]
set fileName [file tail $fileFullPath] set fileName [file tail $fileFullPath]
regsub -all {\.|/|\\|\s} $fileFullPath "_" itemName
regsub -all {\.|/|\\|\s|:} $fileFullPath "_" itemName
set itemName [string tolower $itemName]
set itemName "$nbEditor.$itemName" set itemName "$nbEditor.$itemName"
set treeItemName [Tree::InsertItem $tree {} $fileFullPath "file" $fileName] set treeItemName [Tree::InsertItem $tree {} $fileFullPath "file" $fileName]
@@ -419,6 +535,11 @@ namespace eval FileOper {
if {[winfo exists $itemName] == 0} { if {[winfo exists $itemName] == 0} {
NB::InsertItem $nbEditor $fileFullPath "file" NB::InsertItem $nbEditor $fileFullPath "file"
if {$fileType eq "image"} {
ImageViewer $fileFullPath $itemName $itemName
return $itemName
}
Editor::Editor $fileFullPath $nbEditor $itemName Editor::Editor $fileFullPath $nbEditor $itemName
ReadFile $fileFullPath $itemName ReadFile $fileFullPath $itemName
$itemName.frmText.t highlight 1.0 end $itemName.frmText.t highlight 1.0 end
@@ -426,6 +547,11 @@ namespace eval FileOper {
$itemName.frmText.t see 1.1 $itemName.frmText.t see 1.1
} }
$nbEditor select $itemName $nbEditor select $itemName
focus -force $itemName
if {$fileType eq "image"} {
# ImageViewer $fileFullPath $itemName $itemName
return $itemName
}
Editor::ReadStructure $itemName.frmText.t $treeItemName Editor::ReadStructure $itemName.frmText.t $treeItemName
GetVariablesFromFile $fileFullPath GetVariablesFromFile $fileFullPath
$itemName.frmText.t.t mark set insert 1.0 $itemName.frmText.t.t mark set insert 1.0
@@ -433,6 +559,8 @@ namespace eval FileOper {
focus -force $itemName.frmText.t.t focus -force $itemName.frmText.t.t
.frmStatus.lblSize configure -text [GetFileAttr $fileFullPath "size"] .frmStatus.lblSize configure -text [GetFileAttr $fileFullPath "size"]
.frmStatus.lblEncoding configure -text [GetFileMimeType $fileFullPath "charset"] .frmStatus.lblEncoding configure -text [GetFileMimeType $fileFullPath "charset"]
# puts ">> $itemName"
return $itemName return $itemName
} }

View File

@@ -12,6 +12,28 @@
namespace eval Git { namespace eval Git {
variable gitCommand 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} { proc GetConfig {option} {
global activeProject cfgVariables global activeProject cfgVariables
set confOptions { set confOptions {
@@ -69,8 +91,8 @@ namespace eval Git {
} }
} }
catch $cmd pipe catch $cmd pipe
puts $cmd # puts $cmd
puts $pipe # puts $pipe
if [regexp -nocase -- {^error:} $pipe match] { if [regexp -nocase -- {^error:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe ShowMessage "Command: '$cmd' error" $pipe
return return
@@ -100,7 +122,7 @@ namespace eval Git {
} else { } else {
return "" return ""
} }
puts $activeProject # puts $activeProject
lappend cmd $cfgVariables(gitCommand) lappend cmd $cfgVariables(gitCommand)
lappend cmd "branch" lappend cmd "branch"
# lappend cmd "-s" # lappend cmd "-s"
@@ -145,7 +167,7 @@ namespace eval Git {
lappend cmd "--" lappend cmd "--"
lappend cmd $activeProject lappend cmd $activeProject
catch $cmd pipe catch $cmd pipe
puts $cmd # puts $cmd
if [regexp -nocase -- {^fatal:} $pipe match] { if [regexp -nocase -- {^fatal:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe ShowMessage "Command: '$cmd' error" $pipe
return return
@@ -167,7 +189,7 @@ namespace eval Git {
lappend cmd "--" lappend cmd "--"
lappend cmd [file join $activeProject [string trimleft $f "../"]] lappend cmd [file join $activeProject [string trimleft $f "../"]]
catch $cmd pipe catch $cmd pipe
puts $cmd # puts $cmd
if [regexp -nocase -- {^fatal:} $pipe match] { if [regexp -nocase -- {^fatal:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe ShowMessage "Command: '$cmd' error" $pipe
return return
@@ -228,7 +250,7 @@ namespace eval Git {
# set cmd exec # set cmd exec
cd $activeProject cd $activeProject
set url [Git::GetConfig remote.origin.url] set url [Git::GetConfig remote.origin.url]
puts $url # puts $url
if [regexp -nocase -all -- {^(http|https)://(.+)} $url match proto address] { if [regexp -nocase -all -- {^(http|https)://(.+)} $url match proto address] {
Git::AuthorizationDialog "[::msgcat::mc "Authorization required"] [::msgcat::mc "for"] Git" $url Git::AuthorizationDialog "[::msgcat::mc "Authorization required"] [::msgcat::mc "for"] Git" $url
} else { } else {
@@ -248,7 +270,7 @@ namespace eval Git {
# lappend cmd "$activeProject" # lappend cmd "$activeProject"
# puts "$cmd" # puts "$cmd"
catch $cmd pipe catch $cmd pipe
puts $pipe # puts $pipe
if [regexp -nocase -- {^fatal:} $pipe match] { if [regexp -nocase -- {^fatal:} $pipe match] {
ShowMessage "Command: '$cmd' error" $pipe ShowMessage "Command: '$cmd' error" $pipe
return return
@@ -301,7 +323,7 @@ namespace eval Git {
$w.body.lCommit delete $itemNumber $w.body.lCommit delete $itemNumber
} }
catch $cmd pipe catch $cmd pipe
puts $cmd # puts $cmd
$w.body.t delete 1.0 end $w.body.t delete 1.0 end
} }
@@ -357,7 +379,7 @@ namespace eval Git {
$w.body.t delete 1.0 end $w.body.t delete 1.0 end
set i 0 set i 0
foreach line [Git::Diff $fileName] { foreach line [Git::Diff $fileName] {
puts $line # puts $line
if {$i > 3} { if {$i > 3} {
$w.body.t inser end "$line\n" $w.body.t inser end "$line\n"
} }
@@ -381,7 +403,7 @@ namespace eval Git {
$w.body.lBox delete $itemNumber $w.body.lBox delete $itemNumber
} }
catch $cmd pipe catch $cmd pipe
puts $cmd # puts $cmd
$w.body.t delete 1.0 end $w.body.t delete 1.0 end
} }
@@ -396,7 +418,7 @@ namespace eval Git {
puts $cmd puts $cmd
catch $cmd pipe catch $cmd pipe
puts $pipe # puts $pipe
return return
} }
proc Config {repo user email} { proc Config {repo user email} {
@@ -407,7 +429,7 @@ namespace eval Git {
lappend cmd "config" lappend cmd "config"
lappend cmd $repo lappend cmd $repo
lappend cmd $dir lappend cmd $dir
puts $cmd # puts $cmd
# catch $cmd pipe # catch $cmd pipe
# puts $pipe # puts $pipe
@@ -425,7 +447,7 @@ namespace eval Git {
lappend cmd $cfgVariables(gitCommand) lappend cmd $cfgVariables(gitCommand)
lappend cmd "init" lappend cmd "init"
lappend cmd $activeProject lappend cmd $activeProject
puts $cmd # puts $cmd
catch $cmd pipe catch $cmd pipe
if [regexp -nocase -- {^fatal:} $pipe match] { if [regexp -nocase -- {^fatal:} $pipe match] {

View File

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

View File

@@ -190,5 +190,25 @@ namespace eval Highlight {} {
ctext::addHighlightClassForRegexp $txt namespaces #0093ff {->|\+\+|::} ctext::addHighlightClassForRegexp $txt namespaces #0093ff {->|\+\+|::}
ctext::addHighlightClass $txt bool #3e803b {null false true} 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 rA8mrK6XByzl3QaSIFac9xqEuFa2XxzygDJS7dv2U3oGIh75yu7ibF0AAN5NOFR9hOAAAAAASUVO
RK5CYII= RK5CYII=
} }
image create photo deb_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
4AeIo5OToouU+L+k0CLGg+N+vLv3uHsH+BsVpppd44CqWUY6mRCyuVWh5xVBDCKCEPolZupzopiC
5/i6h4+vd3Ge5X3uzxFR8iYDfALxLNMNi3iDeHrT0jnvE0dZSVKIz4nHDLog8SPXZZffOBcd9vPM
qJFJzxNHiYViB8sdzEqGSjxFHFNUjfL9WZcVzluc1UqNte7JXxjOayvLXKc5jCQWsQQRAmTUUEYF
FuK0aqSYSNN+wsM/5PhFcsnkKoORYwFVqJAcP/gf/O7WLExOuEnhBND9YtsfI0DPLtCs2/b3sW03
T4DAM3Cltf3VBjDzSXq9rcWOgN5t4OK6rcl7wOUOMPCkS4bkSAGa/kIBeD+jb8oBfbdAaM3trbWP
0wcgQ12lboCDQ2C0SNnrHu8Odvb275lWfz803nKOXMrtNAAAAAZiS0dEALwAvAC8IuemuQAAAAlw
SFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+YIGgYBD440/mcAAADnSURBVCjPlZIxbsIwGIU/O6Ei
CEGkzukJOkRi4A7sCIYuPQlcgx2J0FNwBNQVpogVRKuqCQhsFixZjkHwNj89f37/LwtuKCPV9vmE
Sj743rg54RpTuq2Qww+QA2/G17AV8DpkKW4CJnRqbc5HgII4+mRR+hrZkNAGmMsmMOM9EYS58dyx
KgBbX/QDxSo3sDFIX65iFsQRgGJ1Mt4Y5Ai0D1Bp8MI2AsoWf/VfmmVGqiVRY07x787vbRAQ7AB6
rA8mrK6XByzl3QaSIFac9xqEuFa2XxzygDJS7dv2U3oGIh75yu7ibF0AAN5NOFR9hOAAAAAASUVO
RK5CYII=
}
image create photo redhat_16x12 -data { image create photo redhat_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9 iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
@@ -616,6 +632,26 @@ image create photo redhat_16x12 -data {
JoP7vsKvmscGvwDMplK1fiHiel7hCqIFNKp8a+dBC1kyMF5IOm1we9PY8Fgu0XnYsAsSizJ8Q9+B JoP7vsKvmscGvwDMplK1fiHiel7hCqIFNKp8a+dBC1kyMF5IOm1we9PY8Fgu0XnYsAsSizJ8Q9+B
fWB7/vyA9Yr/YLa1I25OKGgYfz6Rjbv9EqdKrq/6GWz7DaI/0EnQtYARAAAAAElFTkSuQmCC fWB7/vyA9Yr/YLa1I25OKGgYfz6Rjbv9EqdKrq/6GWz7DaI/0EnQtYARAAAAAElFTkSuQmCC
} }
image create photo rpm_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
4AeIo5OToouU+L+k0CLGg+N+vLv3uHsH+BsVpppd44CqWUY6mRCyuVWh5xVBDCKCEPolZupzopiC
5/i6h4+vd3Ge5X3uzxFR8iYDfALxLNMNi3iDeHrT0jnvE0dZSVKIz4nHDLog8SPXZZffOBcd9vPM
qJFJzxNHiYViB8sdzEqGSjxFHFNUjfL9WZcVzluc1UqNte7JXxjOayvLXKc5jCQWsQQRAmTUUEYF
FuK0aqSYSNN+wsM/5PhFcsnkKoORYwFVqJAcP/gf/O7WLExOuEnhBND9YtsfI0DPLtCs2/b3sW03
T4DAM3Cltf3VBjDzSXq9rcWOgN5t4OK6rcl7wOUOMPCkS4bkSAGa/kIBeD+jb8oBfbdAaM3trbWP
0wcgQ12lboCDQ2C0SNnrHu8Odvb275lWfz803nKOXMrtNAAAAAZiS0dEALwAvAC8IuemuQAAAAlw
SFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+YIGgYbDKcQVQYAAAH8SURBVCjPhZJNSJMBGMd//3dr
01KpQGdqRUF1CsrNBq1IXwnxYFFRl255jKhDhzp2qGvXAqFLFBL0YUWg6aSCIB3aoUsUpYFsM0kL
rc33fZ8ObrSE6A8PPP/ni+dLrMKn9vaqdT+cHmRdJqcFgMCmJQ0uzEce7/jwrFAZr0qSS3ScMLgu
tLnC/Ksk64Epw843jqcflZ1OWcnH3Uuge0JNwmltsIVItFDc6Cm8EyMt4zKwVehBrs29+FcH+bh7
0kT/CtckZjeRtpsFk42Z9B0rxyXc10ASMEzHY5nhh5qJ96wNsfge0QzMI4a0FJyxKicWy4x8rBwx
m+jsFdZXotNLNcEuJ+QsHUNEzQlvj42PbJBZQLX6JO2dTaVqKwuYXxyooFuqF0NHHcy6gMgaFZcB
fN87ZzBv2K2gEM3m2tz95YxIJBQ1gt3IzgIeZl3KJtxRwSFgGseOxN6k3wLMJbvrPK/oOgTL9Zn0
09XnzifcAaBGuUTHS9CB0kq/EeiqEzh36yeGZvgH5pLddZ5feAf2OYwxhVgpYDyx5dANP+pfyyXc
JoP7vsKvmscGvwDMplK1fiHiel7hCqIFNKp8a+dBC1kyMF5IOm1we9PY8Fgu0XnYsAsSizJ8Q9+B
fWB7/vyA9Yr/YLa1I25OKGgYfz6Rjbv9EqdKrq/6GWz7DaI/0EnQtYARAAAAAElFTkSuQmCC
}
image create photo spec_16x12 -data { image create photo spec_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9 iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC kT1Iw0AcxV9bxVJaHCz4gUOG6mRBVMRRq1CECqFWaNXB5NIvaNKQpLg4Cq4FBz8Wqw4uzro6uAqC
@@ -1447,6 +1483,40 @@ image create photo csr_16x12 -data {
kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu kfgEeiV9/DDABoBBIAN6igxorfE0CIJNgNJNelcoC7oETqyp+S4GkvTrZ0lnwEPpJr2LUUTsLWfu
VqIgPjvnLr45mBnAGkZRxv7SRG0lagtfFWR2IQ04e8UAAAAASUVORK5CYII= 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 { image create photo git_16x12 -data {
iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9 iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw0AcxV9TS0UqDnYQcchQnSz4hYiTVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ kT1Iw0AcxV9TS0UqDnYQcchQnSz4hYiTVqEIFUKt0KqDyaUfQpOGJMXFUXAtOPixWHVwcdbVwVUQ
@@ -1729,3 +1799,151 @@ image create photo lua_16x12 -data {
A8TB5iOAVKQWCjQFtgqIx94M0I6D3lzlAY0B2wO+qesqyc4jCVHdcX1x64AeZX6JGOpYJgj6DlhL A8TB5iOAVKQWCjQFtgqIx94M0I6D3lzlAY0B2wO+qesqyc4jCVHdcX1x64AeZX6JGOpYJgj6DlhL
nyEr/QEd077c+0K/7XAFjyKwCIyCrjA7IJc6ct9yegcG+1TkMUCBoAAAAABJRU5ErkJggg== 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} { proc ImageViewer {f w node} {
global factor cfgVariables
set factor($node) 1.0 set factor($node) 1.0
ttk::frame $w.f ttk::frame $w.f
pack $w.f -side left -fill both -expand true 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.f.x -ori hori -command "$w.f.c xview"
ttk::scrollbar $w.y -ori vert -command "$w.f.c yview" 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} { proc openImg {fn w node} {
global im1 global im1 factor
set im1 [image create photo -file $fn] 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] list [file size $fn] bytes, [image width $im1]x[image height $im1]
$w create image 1 1 -image $im1 -anchor nw -tag img $w create image 1 1 -image $im1 -anchor nw -tag img
} }
proc scale {w {n 1} node} { 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}] set factor($node) [expr {$factor($node) * $n}]
$w delete img $w delete img
catch {image delete $im2} catch {image delete $im2}
@@ -41,7 +42,8 @@ proc scale {w {n 1} node} {
$im2 copy $im1 -subsample $f $f $im2 copy $im1 -subsample $f $f
} }
$w create image 1 1 -image $im2 -anchor nw -tag img $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] $w config -scrollregion [$w bbox all]
} }
@@ -52,6 +54,7 @@ proc ImageBase64Encode {text} {
{"GIF" {.gif}} {"GIF" {.gif}}
{"JPEG" {.jpg}} {"JPEG" {.jpg}}
{"BMP" {.bmp}} {"BMP" {.bmp}}
{"SVG" {.svg}}
{"All files" *} {"All files" *}
} }
set img [tk_getOpenFile -initialdir $env(HOME) -filetypes $types -parent .] 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}" $text insert [Position] "image create photo $name -data {\n$data\n}"
} }
} }

View File

@@ -20,6 +20,7 @@ dict set lexers GO commentMultilineSymbolEnd {*/}
dict set lexers GO procFindString {func.*?PROCNAME} dict set lexers GO procFindString {func.*?PROCNAME}
dict set lexers GO procRegexpCommand {regexp -nocase -all -- {\s*?func\s*?(\(\w+\s*?\**?\w+\)|)\s*?(\w+)\((.*?)\)\s+?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match linkName procName params returns} dict set lexers GO procRegexpCommand {regexp -nocase -all -- {\s*?func\s*?(\(\w+\s*?\**?\w+\)|)\s*?(\w+)\((.*?)\)\s+?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match linkName procName params returns}
dict set lexers GO varRegexpCommand {regexp -nocase -all -line -- {^\s*?var\s+([a-zA-Z0-9\-_$]+)\s+(.+?)(\s*$)} $line match varName varType lineEnd} dict set lexers GO varRegexpCommand {regexp -nocase -all -line -- {^\s*?var\s+([a-zA-Z0-9\-_$]+)\s+(.+?)(\s*$)} $line match varName varType lineEnd}
#-------------------------------------------------- #--------------------------------------------------
# SHELL (Bash) # SHELL (Bash)
dict set lexers SH commentSymbol {#} dict set lexers SH commentSymbol {#}
@@ -43,6 +44,7 @@ dict set lexers RB tabSize 2
dict set lexers RB procFindString {(def |class )\s*?PROCNAME} 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 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} dict set lexers RB varRegexpCommand {regexp -nocase -all -line -- {^\s*?(\w+)\s*=\s*(.+)($)} $line match varName varValue lineEnd}
#-------------------------------------------------- #--------------------------------------------------
# YAML (ansible) # YAML (ansible)
dict set lexers YML commentSymbol {#} dict set lexers YML commentSymbol {#}
@@ -95,6 +97,8 @@ dict set lexers HTM tabSize 4
dict set lexers HTM procFindString {<h[0-9]>(<.+>|)PROCNAME(</.+>|)</h[0-9]>} 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} 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 commentSymbol {--}
dict set lexers LUA procFindString {function\s*?PROCNAME} 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 procRegexpCommand {regexp -nocase -all -- {^(local|)\s*?(function)\s([a-zA-Z0-9\-_:]+?)\s+\((.+?)\)} $line match v1 keyWord procName params}

View File

@@ -9,7 +9,7 @@
###################################################### ######################################################
proc GetFileMenu {m} { proc GetFileMenu {m} {
global activeProject global activeProject cfgVariables
$m add command -label [::msgcat::mc "New file"] -command Editor::New\ $m add command -label [::msgcat::mc "New file"] -command Editor::New\
-accelerator "Ctrl+N" -accelerator "Ctrl+N"
$m add command -label [::msgcat::mc "Open file"] -accelerator "Ctrl+O" -command { $m add command -label [::msgcat::mc "Open file"] -accelerator "Ctrl+O" -command {
@@ -25,8 +25,15 @@ proc GetFileMenu {m} {
$m add command -label [::msgcat::mc "Close all"] -command {FileOper::CloseAll} $m add command -label [::msgcat::mc "Close all"] -command {FileOper::CloseAll}
$m add separator $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] set folderPath [FileOper::OpenFolderDialog]
if {$folderPath != ""} { if {$folderPath != ""} {
# set activeProject $folderPath # set activeProject $folderPath
@@ -69,7 +76,8 @@ proc GetEditMenu {m} {
$m add separator $m add separator
$m add command -label [::msgcat::mc "Insert image"] -accelerator "Ctrl+I"\ $m add command -label [::msgcat::mc "Insert image"] -accelerator "Ctrl+I"\
-command ImageBase64Encode -command ImageBase64Encode
$m add separator
$m add command -label [::msgcat::mc "Settings"] -command Settings
} }
proc GetViewMenu {m} { proc GetViewMenu {m} {

View File

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

View File

@@ -59,12 +59,16 @@
::msgcat::mcset en "Editor font bold" ::msgcat::mcset en "Editor font bold"
::msgcat::mcset en "Error open URL" ::msgcat::mcset en "Error open URL"
::msgcat::mcset en "Editor settings" ::msgcat::mcset en "Editor settings"
::msgcat::mcset en "Enter command for execute file"
::msgcat::mcset en "Exit" ::msgcat::mcset en "Exit"
::msgcat::mcset en "File" ::msgcat::mcset en "File"
::msgcat::mcset en "File already exists. Overwrite?" ::msgcat::mcset en "File already exists. Overwrite?"
::msgcat::mcset en "File modify" ::msgcat::mcset en "File modify"
::msgcat::mcset en "File was modifyed. Close?" ::msgcat::mcset en "File was modifyed. Close?"
::msgcat::mcset en "File was modifyed. Save?" ::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 "File saved"
::msgcat::mcset en "Files" ::msgcat::mcset en "Files"
::msgcat::mcset en "Find" ::msgcat::mcset en "Find"
@@ -108,6 +112,7 @@
::msgcat::mcset en "Open file" ::msgcat::mcset en "Open file"
::msgcat::mcset en "Open project" ::msgcat::mcset en "Open project"
::msgcat::mcset en "Opened file in progress" ::msgcat::mcset en "Opened file in progress"
::msgcat::mcset en "Open recent"
::msgcat::mcset en "Operators" ::msgcat::mcset en "Operators"
::msgcat::mcset en "Overwrite" ::msgcat::mcset en "Overwrite"
::msgcat::mcset en "Parameters" ::msgcat::mcset en "Parameters"
@@ -181,7 +186,3 @@

View File

@@ -27,7 +27,7 @@
::msgcat::mcset ru "Close" "Закрыть" ::msgcat::mcset ru "Close" "Закрыть"
::msgcat::mcset ru "Close all" "Закрыть все" ::msgcat::mcset ru "Close all" "Закрыть все"
::msgcat::mcset ru "Close file" "Закрыть файл" ::msgcat::mcset ru "Close file" "Закрыть файл"
::msgcat::mcset ru "Close folder" "Закрыть папку" ::msgcat::mcset ru "Close folder" "Закрыть каталог"
::msgcat::mcset ru "Close Project Manager?" "Выйти из программы?" ::msgcat::mcset ru "Close Project Manager?" "Выйти из программы?"
::msgcat::mcset ru "Comments" "Коментарии" ::msgcat::mcset ru "Comments" "Коментарии"
::msgcat::mcset ru "Comment selected" "Закоментировать" ::msgcat::mcset ru "Comment selected" "Закоментировать"
@@ -77,6 +77,7 @@
::msgcat::mcset ru "Editor settings" "Настройки редактора" ::msgcat::mcset ru "Editor settings" "Настройки редактора"
::msgcat::mcset ru "Editor helpers" "Подсказки при вводе" ::msgcat::mcset ru "Editor helpers" "Подсказки при вводе"
::msgcat::mcset ru "Encode" "Перекодировка" ::msgcat::mcset ru "Encode" "Перекодировка"
::msgcat::mcset ru "Enter command for execute file" "Введите команду для запуска текущего файла"
::msgcat::mcset ru "Authorisation required" "Требуется авторизация" ::msgcat::mcset ru "Authorisation required" "Требуется авторизация"
::msgcat::mcset ru "Error open URL" "Ошибка открытия URL" ::msgcat::mcset ru "Error open URL" "Ошибка открытия URL"
::msgcat::mcset ru "Exit" "Выход" ::msgcat::mcset ru "Exit" "Выход"
@@ -88,6 +89,9 @@
::msgcat::mcset ru "File was modifyed" "Файл был изменен" ::msgcat::mcset ru "File was modifyed" "Файл был изменен"
::msgcat::mcset ru "File modify" "Файл изменен" ::msgcat::mcset ru "File modify" "Файл изменен"
::msgcat::mcset ru "File saved" "Файл сохранен" ::msgcat::mcset ru "File saved" "Файл сохранен"
::msgcat::mcset ru "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 "Find" "Найти"
::msgcat::mcset ru "Found" "Найдено" ::msgcat::mcset ru "Found" "Найдено"
::msgcat::mcset ru "Find in files" "Найти в файлах" ::msgcat::mcset ru "Find in files" "Найти в файлах"
@@ -138,9 +142,10 @@
::msgcat::mcset ru "No" "Нет" ::msgcat::mcset ru "No" "Нет"
::msgcat::mcset ru "Open" "Открыть" ::msgcat::mcset ru "Open" "Открыть"
::msgcat::mcset ru "Open file" "Открыть файл" ::msgcat::mcset ru "Open file" "Открыть файл"
::msgcat::mcset ru "Open folder" "Открыть папку" ::msgcat::mcset ru "Open folder" "Открыть каталог"
::msgcat::mcset ru "Open project" "Открыть проект" ::msgcat::mcset ru "Open project" "Открыть проект"
::msgcat::mcset ru "Opened file in progress" "Открытие файла" ::msgcat::mcset ru "Opened file in progress" "Открытие файла"
::msgcat::mcset ru "Open recent" "Открыть недавнее"
::msgcat::mcset ru "Operators" "Операторы" ::msgcat::mcset ru "Operators" "Операторы"
::msgcat::mcset ru "Overwrite" "Замена" ::msgcat::mcset ru "Overwrite" "Замена"
::msgcat::mcset ru "Parameters" "Параметры" ::msgcat::mcset ru "Parameters" "Параметры"
@@ -195,7 +200,7 @@
::msgcat::mcset ru "Select directory" "Выбор директории" ::msgcat::mcset ru "Select directory" "Выбор директории"
::msgcat::mcset ru "Selected directory" "Директория" ::msgcat::mcset ru "Selected directory" "Директория"
::msgcat::mcset ru "Selection color" "Цвет выделения" ::msgcat::mcset ru "Selection color" "Цвет выделения"
::msgcat::mcset ru "Settings" "Установки" ::msgcat::mcset ru "Settings" "Настройки"
::msgcat::mcset ru "Statusbar" "Строка статуса" ::msgcat::mcset ru "Statusbar" "Строка статуса"
::msgcat::mcset ru "Show backup files" "Показывать временные файлы" ::msgcat::mcset ru "Show backup files" "Показывать временные файлы"
::msgcat::mcset ru "Show the Menu" "Показывать меню" ::msgcat::mcset ru "Show the Menu" "Показывать меню"

View File

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

View File

@@ -239,6 +239,7 @@ proc FindImage {ext} {
JP2 JP2
ICO ICO
XPM XPM
SVG
} }
foreach img [image names] { foreach img [image names] {
if [regexp -nocase -all -- "^($ext)(_16x12)" $img match v1 v2] { if [regexp -nocase -all -- "^($ext)(_16x12)" $img match v1 v2] {
@@ -276,17 +277,17 @@ namespace eval Help {
proc SearchVariable {txt} { proc SearchVariable {txt} {
global fileStructure project variables global fileStructure project variables
set varName [$txt get {insert wordstart} {insert wordend}] set varName [$txt get {insert wordstart} {insert wordend}]
puts ">>>$varName<<<" # puts ">>>$varName<<<"
if {[info exists project] == 0} {return} if {[info exists project] == 0} {return}
foreach f [array names project] { foreach f [array names project] {
puts "--$f" # puts "--$f"
puts "----" # puts "----"
foreach a $project($f) { foreach a $project($f) {
puts "-----$variables($a)" # puts "-----$variables($a)"
foreach b $variables($a) { foreach b $variables($a) {
puts "------$b -- [lindex $b 0]" # puts "------$b -- [lindex $b 0]"
if {$varName eq [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]" # FindVariablesDialog $txt "$varName: \[...\][file tail $a]"
lappend l [list $varName [lindex $b 1] $a] lappend l [list $varName [lindex $b 1] $a]
} }
@@ -354,7 +355,7 @@ proc FindVariablesDialog {txt args} {
foreach { word } $args { foreach { word } $args {
foreach lst $word { foreach lst $word {
# set l [split $lst " "] # 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]] # 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 -values $lst -text {1 2 3}
$win.lBox insert end "[lindex $lst 0] > [lindex $lst 1] > [lindex $lst 2]\n" $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"} { if {$tcl_platform(platform) == "windows"} {
} elseif {$tcl_platform(platform) == "mac"} { } elseif {$tcl_platform(platform) == "mac"} {
} elseif {$tcl_platform(platform) == "unix"} { } elseif {$tcl_platform(platform) == "unix"} {
puts "$cfgVariables(searchCommand) $cfgVariables(searchCommandOptions) $str $activeProject" # puts "$cfgVariables(searchCommand) $cfgVariables(searchCommandOptions) $str $activeProject"
# Составляем строку (точнее список) для запуска команды # Составляем строку (точнее список) для запуска команды
set cmd exec set cmd exec
regsub -all {\[} $str {\\[} str regsub -all {\[} $str {\\[} str
@@ -682,3 +683,297 @@ proc SetActiveProject {path} {
.frmStatus.lblGitLogo configure -image git_logo_20x20 .frmStatus.lblGitLogo configure -image git_logo_20x20
.frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]" .frmStatus.lblGit configure -text "[::msgcat::mc "Branch"]: [Git::Branches current]"
} }
# 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 fileutil
package require Thread # package require Thread
# TCL procedure # TCL procedure
@@ -20,7 +20,7 @@ proc GetVariablesFromFile {fileName} {
set varList "" set varList ""
set params "" set params ""
set varsBegin false set varsBegin false
puts $fileName # puts $fileName
set f [open "$fileName" r] set f [open "$fileName" r]
if {[dict exists $lexers $fileType] == 0} {return} if {[dict exists $lexers $fileType] == 0} {return}
while {[gets $f line] >=0 } { while {[gets $f line] >=0 } {
@@ -32,7 +32,7 @@ proc GetVariablesFromFile {fileName} {
set indentSize 0 set indentSize 0
} }
set varsBegin true set varsBegin true
puts "====== $varsBegin $indentSize" # puts "$varsBegin $indentSize"
continue continue
# lappend varList [list $varName $varValue] # lappend varList [list $varName $varValue]
} }
@@ -41,13 +41,13 @@ proc GetVariablesFromFile {fileName} {
set l [GetVarFromLine $line $fileType] set l [GetVarFromLine $line $fileType]
if {$line eq ""} { if {$line eq ""} {
set varsBegin false set varsBegin false
puts "====== $varsBegin $indentSize [lindex $l 3]" # puts "$varsBegin $indentSize [lindex $l 3]"
continue continue
} }
if {[lindex $l 3] ne ""} { if {[lindex $l 3] ne ""} {
if [expr [lindex $l 3] <= $indentSize] { if [expr [lindex $l 3] <= $indentSize] {
set varsBegin false set varsBegin false
puts "====== $varsBegin $indentSize >[lindex $l 3]<" # puts "$varsBegin $indentSize >[lindex $l 3]<"
continue continue
} }
} }
@@ -79,7 +79,7 @@ proc GetVarFromLine {line fileType} {
set varType "" set varType ""
} }
set indentLength [string length $indent] 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] return [list $varName $varValue $varType $indentLength]
} }
} }
@@ -90,7 +90,7 @@ proc GetVariablesFromVarFile {fileName} {
set procList "" set procList ""
set varList "" set varList ""
set params "" set params ""
puts $fileName # puts $fileName
set f [open "$fileName" r] set f [open "$fileName" r]
if {[dict exists $lexers $fileType] == 0} {return} if {[dict exists $lexers $fileType] == 0} {return}
while {[gets $f line] >=0 } { while {[gets $f line] >=0 } {
@@ -122,7 +122,7 @@ proc ReadFilesFromDirectory {directory root {type ""}} {
return "" return ""
} }
foreach fileName [glob -nocomplain *] { 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} { if {[lsearch -exact $l $fileName] != -1 && [file isdirectory [file join $root $directory $fileName]] == 1} {
# puts "--- $root $fileName" # puts "--- $root $fileName"
ReadFilesFromDirectory [file join $directory $fileName] $root "var" ReadFilesFromDirectory [file join $directory $fileName] $root "var"
@@ -179,8 +179,8 @@ proc ReadFilesFromDirectory {directory root {type ""}} {
# #
proc Accept { dirLib directory } { proc Accept { dirLib directory } {
global dir global dir
puts $dir(lib) # puts $dir(lib)
puts $dirLib # puts $dirLib
# переменная с указанием ваших действия перед порождением потока # переменная с указанием ваших действия перед порождением потока
set threadinit { set threadinit {
# если необходимо, загружаем исходный tcl код, расположенный в других файлах # если необходимо, загружаем исходный tcl код, расположенный в других файлах

View File

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

View File

@@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# Tcl ignores the next line -*- tcl -*- \ # Tcl ignores the next line -*- tcl -*- \
exec wish "$0" -- "$@" exec wish9.0 "$0" -- "$@"
###################################################### ######################################################
# Tcl/Tk Project manager 2.0 # Tcl/Tk Project manager 2.0
@@ -9,8 +9,8 @@ exec wish "$0" -- "$@"
# Home page: https://nuk-svk.ru # Home page: https://nuk-svk.ru
###################################################### ######################################################
# Version: 2.0.0 # Version: 2.0.0
# Release: alpha # Release: alpha19
# Build: 19122022152600 # Build: 30102025145246
###################################################### ######################################################
# определим текущую версию, релиз и т.д. # определим текущую версию, релиз и т.д.
@@ -34,6 +34,38 @@ while {[gets $f line] >=0} {
} }
close $f 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 } { if { $::argc > 0 } {
foreach arg $::argv { foreach arg $::argv {
lappend opened $arg lappend opened $arg
@@ -41,17 +73,6 @@ if { $::argc > 0 } {
puts $opened 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 проверяем наличие переменных и каталогов # Согласно спецификации XDG проверяем наличие переменных и каталогов
@@ -109,13 +130,14 @@ puts "Setting the locale... [::msgcat::mclocale]"
source [file join $dir(lib) gui.tcl] source [file join $dir(lib) gui.tcl]
Git::CommandPathSetting
# Open the PATH if command line argument has been setting # Open the PATH if command line argument has been setting
if [info exists opened] { if [info exists opened] {
# puts ">$opened"
foreach path $opened { foreach path $opened {
# Приводим путь к полному виду
if {[file pathtype $path] ne "absolute"} { if {[file pathtype $path] ne "absolute"} {
puts "\n\t[::msgcat::mc "Specify the absolute path to the directory or file"]: $path\n" set path [file normalize $path]
exit
} }
if [file isdirectory $path] { if [file isdirectory $path] {
# set activeProject $path # set activeProject $path

View File

@@ -6,8 +6,8 @@
# #
# $Id: black.tcl,v 1.2 2009/10/25 19:21:30 oberdorfer Exp $ # $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 Tk; # minimum version for Tile
package require tile 0.8; # depends upon tile package require tile; # depends upon tile
namespace eval ttk { namespace eval ttk {
@@ -39,6 +39,7 @@ namespace eval ttk::theme::black {
-lightest "#ffffff" -lightest "#ffffff"
-selectbg "#4a6984" -selectbg "#4a6984"
-selectfg "#ffffff" -selectfg "#ffffff"
-font "#c8c8c8"
} }
if {[info commands ::ttk::style] ne ""} { if {[info commands ::ttk::style] ne ""} {
set styleCmd ttk::style set styleCmd ttk::style
@@ -75,21 +76,22 @@ namespace eval ttk::theme::black {
# ttk widgets. # ttk widgets.
$styleCmd configure TButton \ $styleCmd configure TButton \
-width -8 -padding {5 1} -relief link -width -8 -padding {5 1} -relief link
$styleCmd configure TMenubutton\ $styleCmd configure TMenubutton \
-relief flat -arrowsize 0 -relief flat -arrowsize 0
$styleCmd configure TCheckbutton \ $styleCmd configure TCheckbutton \
-indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1} -indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1}
$styleCmd configure TRadiobutton \ $styleCmd configure TRadiobutton \
-indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1} -indicatorbackground $colors(-lighter) -indicatormargin {1 1 4 1}
$styleCmd configure TEntry \ $styleCmd configure TEntry \
-fieldbackground gray20 -foreground black \ -fieldbackground gray20 -foreground $colors(-font) \
-padding {2 0} -border -1 -padding {2 0} -border -1
$styleCmd configure TCombobox \ $styleCmd configure TCombobox \
-fieldbackground white -foreground black \ -fieldbackground white -foreground $colors(-font)\
-padding {2 0} -padding {2 0}
$styleCmd configure TSpinbox \ $styleCmd configure TSpinbox \
-fieldbackground white -foreground black \ -fieldbackground white -foreground $colors(-font) \
-padding {2 0} -padding {2 0}
$styleCmd configure TNotebook \ $styleCmd configure TNotebook \
@@ -103,8 +105,8 @@ namespace eval ttk::theme::black {
# tk widgets. # tk widgets.
$styleCmd map Menu \ $styleCmd map Menu \
-background [list active $colors(-lighter)] \ -background [list active $colors(-dark)] \
-foreground [list disabled $colors(-disabledfg)] -foreground [list disabled $colors(-lightest)] \
$styleCmd configure TreeCtrl \ $styleCmd configure TreeCtrl \
-background gray30 -itembackground {gray60 gray50} \ -background gray30 -itembackground {gray60 gray50} \
@@ -116,6 +118,11 @@ namespace eval ttk::theme::black {
# -background [list selected $colors(-selectbg)] \ # -background [list selected $colors(-selectbg)] \
$styleCmd configure Treeview -fieldbackground gray25 $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] puts [ttk::style element names]
} }

View File

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