View previous topic :: View next topic |
Author |
Message |
yozhik

Joined: 04 May 2014 Posts: 300 Location: Электросталь
|
(Separately) Posted: Tue Sep 23, 2025 13:51 Post subject: Подсветка синтаксиса конфигурационных файлов TC |
|
|
Для редактирования файлов конфигурации Total Commander, как известно, располагает собственными, встроенными средствами. Кроме того, удобные для редактирования инструменты предоставляет программа Ultra TC Editors от другого разработчика. Но тем, кто иногда предпочитает делать это в текстовых редакторах, могут пригодиться настройки подсветки синтаксиса упомянутых файлов. Синтаксису конфигурации TC (точнее, синтаксисам, т.к. конфигурации различаются по типам) присущи некоторые характерные особенности, восприятие которых мы можем сделать более комфортным, используя подсветку.
Нелишним будет уточнить, что кроме собственно подсветки, текстовые редакторы могут располагать и другими удобствами для работы с кодом: сворачивание блоков (структурирование), автодополнение ключевых слов и блоков, всплывающие подсказки правил синтаксиса, и др. Всё это также доступно настройке с учётом особенностей TC. Употребляя для краткости слово «подсветка», мы также подразумеваем и другие, перечисленные здесь функции.
В этой теме предлагается обнародовать и обсуждать настройки подсветки конфигурационных файлов Total Commander и его плагинов. В разных текстовых редакторах разные подсветки для разных типов конфигурации.
Редактор AkelPad:
- Подсветка usercmd.ini и *.bar — конфигурация пользовательских команд и панелей кнопок:
- Подсветка *.mnu — конфигурация выпадающих меню:
- Подсветка *.aucfg — конфигурация плагина Autorun.wdx:

_________________ Amo ergo sum
Last edited by yozhik on Wed Oct 01, 2025 16:30; edited 1 time in total |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 890
|
(Separately) Posted: Tue Sep 23, 2025 18:01 Post subject: |
|
|
yozhik
Дело нужное, спасибо за ваш труд! Взял последний aucfg.coder, полёт нормальный. Почему-то в заголовке файла указана дата от 20.09.2025, хотя актуальная версия на 2-3 дня новее, но это так, мелочи.
aucfg.coder
Небольшое наблюдение. Свойства и методы объектов выделяются сейчас вместе с переменной. В некоторых случаях это смотрится хорошо, как например в этом вызове buf.size и buf.ptr:
Code: | Static buf = Buffer(256)
buf.Zero()
Local nSymb = DllCall("GetLogicalDriveStringsW", "dword", buf.size, "ptr", buf.ptr)
If Not nSymb Then |
Хотя видно, что "buf =" выделяется одним цветом, а "buf." другим. Но если взять более длинные имена переменных, то свойства и методы, указанные после точки, начинают еще больше с ними сливаться. В итоге получается разный цвет одних тех же переменных в соседних строках.
Code: | For i = 0 To aFiles.Count - 1
If aSnap.IndexOf(aFiles[i]) = -1 Then
aNewFiles.Add(aFiles[i])
aSnap = aFiles.Clone()
aSnap.SaveToFile(TEMP & "\tc_dir_snap.lst") |
Может стоит попробовать выделять только после точки? Не уверен, что это будет хорошо, но вы попробуйте. Если вам самому понравится, оставьте в будущих версиях.
bar.coder
Ключи с cm_командами сливаются с самими командами:
Code: | cmdxx=cm_SwitchHidSys
cmdxx=cm_SetAttrib |
Хотелось бы, чтобы ключ "cmdxx=" (именно только этот ключ до знака =) выделялся отдельным фоном. И именно фоном, а не просто цветом шрифта. Когда открываешь бар-фай в редакторе, первым делом пытаешь различить номера ключей, но сделать это не так просто, когда все сливается одним цветом и нет никаких маркеров:
Code: | button50=
cmd50=
param50=
iconic50=
menu50=
button51=
cmd51=
param51=
iconic51=
menu51=
button52=
cmd52=
param52=
iconic52=
menu52=
button53=
cmd53=
param53=
iconic53=
menu53=
button54=
cmd54=
param54=
iconic54=
menu54= |
|
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 300 Location: Электросталь
|
(Separately) Posted: Sat Sep 27, 2025 03:36 Post subject: |
|
|
Orion9
Пардон, я тут чуть запропал.
Orion9 wrote: | Хотелось бы, чтобы ключ "cmdxx=" (именно только этот ключ до знака =) выделялся отдельным фоном |
Вообще-то блок кнопки начинается с ключа buttonxx, и если подсвечивать, то логичней его. Ключ cmdxx по отношению к нему на втором месте. Тем более, что в кнопках попадаются разделители, в которых всего лишь два ключа: buttonxx и iconicxx, а cmd отсутствует.
Orion9 wrote: | Когда открываешь бар-фай в редакторе, первым делом пытаешь различить номера ключей |
Я их по узлам слева различаю и в панели CodeFold они чётко видны списком — мне достаточно. Вот как это выглядит:
И поскольку глазу есть «за что ухватиться», я стараюсь цветом не пестрить. Вместе с тем
Orion9 wrote: | Ключи с cm_командами сливаются с самими командами |
у Вас, насколько я знаю, отключены Bold/Italic, а в исходном варианте они вносят достаточно отчётливости, на скрине видно.
Вообще, при создании подсветки (в AP), условия каковы? 1) — пользоваться лучше встроенными переменными (OP, TYPE, AREA и т.д.), а не указывать цвет напрямую, чтобы работало одинаково корректно во всех темах, как светлых, так и тёмных. А переменных этих немного — 12, из которых 3 (STR, COMM, DEL2) выпадают из палитры доступного. Потому и вводится стиль шрифта, как дополнительный отличитель. А ещё — 2) — bar.coder не только для bar, но и для usercmd.ini — у них синтаксис одинаковый, а имена ключей различаются. И надо так подсвечивать одни, чтобы не задевать другие.
В общем, я сделал, как Вы писали (постоянная подсветка фона начала кнопок), но код мне самому кажется громоздким (может и напрасно). Хотя на быстродействие подсветки это не влияет. Посмотрите здесь, пожалуйста (жёлтым я выделил строки, которые отвечают за подсветку фона):
https://github.com/yozhic/AkelPad-coders/blob/test/gh_preview_only/bar.utf8.coder#L64-L72
Это branch, и если Вам понравится, то я перенесу эти строки в основную ветку. Но оставлять их активными пока не хочется, т.к. если Bold/Italic не отключать и CodeFold держать открытым, то яркости достаточно. Думаю, закомментирую их с объяснением, и кто захочет, раскомментирует и будет пользоваться. (Этот файл, который по ссылке откроется, в «нерабочей» кодировке (UTF-8 ), поэтому содержимое лучше копипастой переносить к себе в bar.coder.)
Собственно, поэтому также и подсветку TC-шных команд cm_ и em_ не хочется менять, что она рассчитана на доп. выделение стилем шрифта. Может быть так попробуем: Вы бы пока в этих двух строках (два комментария не в счёт)
https://github.com/yozhic/AkelPad-coders/blob/test/gh_preview_only/bar.utf8.coder#L84-L87
раскрасили бы себе фон, например как-нибудь так (вместо последнего 0 перед закр. скобкой):
Code: | ;--TC internal commands--
0 `(?<=\W)cm_[a-z0-9]++` `\0=(4,${OP},#FFF2E6)`
;--TC extended commands--
0 `(?<=\W)em_[a-z0-9_]++` `\0=(3,${TYPE},#FFF2E6)` |
Если в целом нормуль, то может добавим так же закомментированным вариантом.
Теперь aucfg. В этом примере:
Code: | aSnap = aFiles.Clone()
aSnap.SaveToFile(TEMP & "\tc_dir_snap.lst") |
меня не смущает, что второе aSnap подсвечивается, а первое — нет. Ведь первый aSnap ещё не стал объектом, он только назначается, а второй уже стал, вот он и засветился (и это уже не просто aSnap, а объект). И опять же, при включенных Bold/Italic элементы не сливаются (а я ещё вдобавок сейчас и точку между объектом и методом выделил, чуть более внятно стало). Но я понимаю, Вам Bold/Italic вообще не «зашли». Но тут что-либо менять сложнее, чем в bar. Aucfg — подсветка более комплексная, и поэтому я пока не придумал, как сделать аккуратно, чтобы можно было закомментировать и использовать по желанию либо один вариант, либо другой. Ведь не хочется делать второй вариант отдельным файлом. _________________ Amo ergo sum |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 890
|
(Separately) Posted: Sun Sep 28, 2025 00:37 Post subject: |
|
|
yozhik wrote: | Вообще-то блок кнопки начинается с ключа buttonxx, и если подсвечивать, то логичней его. Ключ cmdxx по отношению к нему на втором месте. Тем более, что в кнопках попадаются разделители, в которых всего лишь два ключа: buttonxx и iconicxx, а cmd отсутствует. |
Вы абсолютно правы. Я исходил из последнего опыта использования. Но подсвечивать buttonxx куда более правильно и логично.
yozhik wrote: | Я их по узлам слева различаю и в панели CodeFold они чётко видны списком — мне достаточно. |
Я понял. Но узлы меня не сильно спасают. Хочется, чтобы именно фон выделялся, как маркером на бумаге.
yozhik wrote: | у Вас, насколько я знаю, отключены Bold/Italic, а в исходном варианте они вносят достаточно отчётливости, на скрине видно. |
Да, не зашла мне эта тема с жирным и курсивом, даже не знаю почему, нет объяснений. Может и правда еще раз стоит попробовать.
yozhik wrote: | 1) — пользоваться лучше встроенными переменными (OP, TYPE, AREA и т.д.), а не указывать цвет напрямую..
2) — bar.coder не только для bar, но и для usercmd.ini — у них синтаксис одинаковый, а имена ключей различаются.. |
Спасибо за объяснение и напоминание про usercmd.ini. Я внёс предложенные изменения (вернее пресохранил файл bar.utf8.coder в юникод) и добавил цвет шрифта через переменную CodeFold_TagMarkTextColor:
Code: | 773 0 ${CodeFold_TagMarkTextColor} ${CodeFold_TagMarkBkColor} "button1" "=" "" "" "" 0 0
773 0 ${CodeFold_TagMarkTextColor} ${CodeFold_TagMarkBkColor} "button2" "=" "" "" "" 0 0
773 0 ${CodeFold_TagMarkTextColor} ${CodeFold_TagMarkBkColor} "button3" "=" "" "" "" 0 0
773 0 ${CodeFold_TagMarkTextColor} ${CodeFold_TagMarkBkColor} "button4" "=" "" "" "" 0 0
773 0 ${CodeFold_TagMarkTextColor} ${CodeFold_TagMarkBkColor} "button5" "=" "" "" "" 0 0
773 0 ${CodeFold_TagMarkTextColor} ${CodeFold_TagMarkBkColor} "button6" "=" "" "" "" 0 0
773 0 ${CodeFold_TagMarkTextColor} ${CodeFold_TagMarkBkColor} "button7" "=" "" "" "" 0 0
773 0 ${CodeFold_TagMarkTextColor} ${CodeFold_TagMarkBkColor} "button8" "=" "" "" "" 0 0
773 0 ${CodeFold_TagMarkTextColor} ${CodeFold_TagMarkBkColor} "button9" "=" "" "" "" 0 0 |
Надеюсь, все правильно сделал и в других местах ничего не нарушится. Результатом доволен! Именно то, что я хотел. Спасибо!
В будущих версиях, конечно, можете закомментировать этот блок.
Это тоже добавил, и результатом тоже доволен.
yozhik wrote: | Aucfg — подсветка более комплексная, и поэтому я пока не придумал, как сделать аккуратно, чтобы можно было закомментировать и использовать по желанию либо один вариант, либо другой. Ведь не хочется делать второй вариант отдельным файлом. |
Это было необязательно и только на ваше усмотрение. Оно и сейчас нормально смотрится, если пользоваться короткими именами переменных. Подсветка только бросается в глаза, когда имена и методы длинные, например:
Code: | oVeryLongName.AndLongMethod |
Вся строчка горит одним цветом. А когда таких строчек много и все они рядом друг с другом, начинает все немного сливаться.
Ладно. Время покажет. Будем дальше пользоваться вашими хайлатерами. Если что-то обнаружется, обязательно сообщим в эту тему. Спасибо! |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 300 Location: Электросталь
|
(Separately) Posted: Mon Sep 29, 2025 16:34 Post subject: |
|
|
Orion9
Выделение «маркером» buttonNN в bar.coder добавил на постоянной основе — самому зашло
«Маркер» cm_ и em_ тоже добавил, но закомментировал. Обновитесь, пожалуйста. Я перечитал справку к 11.56 и внёс в подсветку все недостающие параметры и «механизм» извлечения подстрок.
aucfg.coder обновил до Autorun.wdx 2.2.21 beta. _________________ Amo ergo sum |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 890
|
(Separately) Posted: Mon Sep 29, 2025 19:33 Post subject: |
|
|
yozhik
Спасибо за обнову. Loopback действительно добавил с десяток новых функций в последней версии, т.ч. очень оперативное и нужное от вас обновление.
Забыл спросить. А mnu-файл сейчас поддерживает расширенный формат меню, который недавно появился в Autorun? Просто не было времени самому проверить. |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 300 Location: Электросталь
|
(Separately) Posted: Mon Sep 29, 2025 19:39 Post subject: |
|
|
Orion9 wrote: | mnu-файл сейчас поддерживает расширенный формат меню, который недавно появился в Autorun? |
Нет, спасибо, что сфокусировали, я упустил из виду, конечно надо добавить. В mnu.coder и помимо этого нужны переделки, я пока не добрался до него. _________________ Amo ergo sum |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 890
|
(Separately) Posted: Tue Sep 30, 2025 20:18 Post subject: |
|
|
yozhik
Да нормально всё. Я тоже ещё не скоро доберусь до расширенного меню, но подумал, что не лишним будет сразу спросить. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 890
|
(Separately) Posted: Mon Oct 06, 2025 00:35 Post subject: |
|
|
yozhik
Возможно и не стоило об этом писать, но в последнем обновлении плагина Autorun добавились функции Min() и Max(). Если создать переменные с такими именами, они будут подсвечиваться как ключевые слова. Наверное, это не правильно:
|
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 300 Location: Электросталь
|
(Separately) Posted: Mon Oct 06, 2025 12:44 Post subject: |
|
|
Orion9 wrote: | функции Min() и Max(). Если создать переменные с такими именами |
Вот тут бы посоветоваться. Технически можно сделать проверку, чтобы имена ф-ций подсвечивались только в случаях, когда справа от них скобка, а слева нет точки (чтобы не перепутались с методами объектов). Но это добавит глобальную фоновую обработку. Когда в подсветке слишком много обработок (и они ещё не оптимизированы), то перерисовка может начать подтормаживать, и визуально при наборе кода изображение на экране начинает подрагивать — это утомляет. Поэтому я колеблюсь, стоит ли пробовать.
Тут ведь ещё вот что: где-то я читал, кажется когда AutoIt изучал, что давать переменным имена ф-ций можно, но не рекомендуется во избежание путаниц. Ну, т.е. в нашем случае, это могло бы выглядеть sMin (string + Min), sMax и т.п.
Но в целом, мне не сложно добавить упомянутую обработку. Как сделаем? Добавим и посмотрим, будет ли тормозить? Или не будем связываться, а ограничимся соглашением имя_переменной <> имя_функции?
Кстати, я пару косяков в aucfg поправил, и переписал mnu, осталось только обработку em_aucmd дописать. В первом посте теперь интерактивные кнопки — новые версии отображают автоматом, без редактирования поста — так что можно поглядывать ))
UPD: добавил обработку em_aucmd, пока основное, а потом посмотрим что ещё прикрутить. _________________ Amo ergo sum |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 890
|
(Separately) Posted: Mon Oct 06, 2025 20:40 Post subject: |
|
|
yozhik wrote: | Вот тут бы посоветоваться. |
Да какие могут быть советы. Мы в этих делах люди маленькие, т.к. все это сугубо на ваше усмотрение и понимание вопроса. Было время я и хайлайтером AutoIt подсвечивал синтаксис Autorun и не жаловался
yozhik wrote: | Тут ведь ещё вот что: где-то я читал, кажется когда AutoIt изучал, что давать переменным имена ф-ций можно, но не рекомендуется во избежание путаниц. Ну, т.е. в нашем случае, это могло бы выглядеть sMin (string + Min), sMax и т.п. |
Резонно. Может и правда лучше ничего не трогать. Спасибо за ответ. |
|
Back to top |
|
 |
jentoso

Joined: 20 Dec 2007 Posts: 405
|
(Separately) Posted: Mon Oct 06, 2025 21:05 Post subject: |
|
|
yozhik
Обновил mnu.coder и при открытии получаю
Code: | ---------------------------
Coder плагин
---------------------------
"Mnu.coder" содержит неизвестную переменную "${XNUM}", которая отсутствует в активной теме "Default2". Продолжить?
---------------------------
ОК Отмена
---------------------------
|
_________________ TC 11.56 combo, Windows 10 x64 |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 300 Location: Электросталь
|
(Separately) Posted: Mon Oct 06, 2025 21:14 Post subject: |
|
|
Ух, пардон, опять забыл )) Обновите, исправил.
Там у меня свои переменные, и я при дублировании изменений на github забываю их переключать на стандартные. Вот они, сейчас закомментированы: одна и вторая. _________________ Amo ergo sum |
|
Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 300 Location: Электросталь
|
(Separately) Posted: Tue Oct 07, 2025 00:24 Post subject: |
|
|
Ещё один фикс для CodeFold в aucfg — теперь вся иерархия в Torrent.aucfg отображается корректно. _________________ Amo ergo sum |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 890
|
(Separately) Posted: Tue Oct 07, 2025 00:25 Post subject: |
|
|
yozhik
Обновился. Спасибо. Особенно за коммиты - сразу видно что и куда. Теперь бы еще добраться до того самого расширенного меню, функционал-то Loopback классный добавил на самом деле. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|