Подсветка синтаксиса конфигурационных файлов TC
Модераторы: Nik, d-view, Моторокер, Avada, CaptainFlint
Подсветка синтаксиса конфигурационных файлов TC
Для редактирования файлов конфигурации Total Commander, как известно, располагает собственными, встроенными средствами. Кроме того, удобные для редактирования инструменты предоставляет программа Ultra TC Editors от другого разработчика. Но тем, кто иногда предпочитает делать это в текстовых редакторах, могут пригодиться настройки подсветки синтаксиса упомянутых файлов. Синтаксису конфигурации TC (точнее, синтаксисам, т.к. конфигурации различаются по типам) присущи некоторые характерные особенности, восприятие которых мы можем сделать более комфортным, используя подсветку.
Нелишним будет уточнить, что кроме собственно подсветки, текстовые редакторы могут располагать и другими удобствами для работы с кодом: сворачивание блоков (структурирование), автодополнение ключевых слов и блоков, всплывающие подсказки правил синтаксиса, и др. Всё это также доступно настройке с учётом особенностей TC. Употребляя для краткости слово «подсветка», мы также подразумеваем и другие, перечисленные здесь функции.
В этой теме предлагается обнародовать и обсуждать настройки подсветки конфигурационных файлов Total Commander и его плагинов. В разных текстовых редакторах разные подсветки для разных типов конфигурации.
Редактор AkelPad:
Нелишним будет уточнить, что кроме собственно подсветки, текстовые редакторы могут располагать и другими удобствами для работы с кодом: сворачивание блоков (структурирование), автодополнение ключевых слов и блоков, всплывающие подсказки правил синтаксиса, и др. Всё это также доступно настройке с учётом особенностей TC. Употребляя для краткости слово «подсветка», мы также подразумеваем и другие, перечисленные здесь функции.
В этой теме предлагается обнародовать и обсуждать настройки подсветки конфигурационных файлов Total Commander и его плагинов. В разных текстовых редакторах разные подсветки для разных типов конфигурации.
Редактор AkelPad:
Последний раз редактировалось yozhik Ср окт 01, 2025 15:30, всего редактировалось 1 раз.
Amo ergo sum
yozhik
Дело нужное, спасибо за ваш труд! Взял последний aucfg.coder, полёт нормальный. Почему-то в заголовке файла указана дата от 20.09.2025, хотя актуальная версия на 2-3 дня новее, но это так, мелочи.
aucfg.coder
Небольшое наблюдение. Свойства и методы объектов выделяются сейчас вместе с переменной. В некоторых случаях это смотрится хорошо, как например в этом вызове buf.size и buf.ptr:
Хотя видно, что "buf =" выделяется одним цветом, а "buf." другим. Но если взять более длинные имена переменных, то свойства и методы, указанные после точки, начинают еще больше с ними сливаться. В итоге получается разный цвет одних тех же переменных в соседних строках.
Может стоит попробовать выделять только после точки? Не уверен, что это будет хорошо, но вы попробуйте. Если вам самому понравится, оставьте в будущих версиях.
bar.coder
Ключи с cm_командами сливаются с самими командами:
Хотелось бы, чтобы ключ "cmdxx=" (именно только этот ключ до знака =) выделялся отдельным фоном. И именно фоном, а не просто цветом шрифта. Когда открываешь бар-фай в редакторе, первым делом пытаешь различить номера ключей, но сделать это не так просто, когда все сливается одним цветом и нет никаких маркеров:
Дело нужное, спасибо за ваш труд! Взял последний aucfg.coder, полёт нормальный. Почему-то в заголовке файла указана дата от 20.09.2025, хотя актуальная версия на 2-3 дня новее, но это так, мелочи.
aucfg.coder
Небольшое наблюдение. Свойства и методы объектов выделяются сейчас вместе с переменной. В некоторых случаях это смотрится хорошо, как например в этом вызове buf.size и buf.ptr:
Код: Выделить всё
Static buf = Buffer(256)
buf.Zero()
Local nSymb = DllCall("GetLogicalDriveStringsW", "dword", buf.size, "ptr", buf.ptr)
If Not nSymb ThenКод: Выделить всё
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_командами сливаются с самими командами:
Код: Выделить всё
cmdxx=cm_SwitchHidSys
cmdxx=cm_SetAttribКод: Выделить всё
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=Orion9
Пардон, я тут чуть запропал.

И поскольку глазу есть «за что ухватиться», я стараюсь цветом не пестрить. Вместе с тем
Вообще, при создании подсветки (в AP), условия каковы? 1) — пользоваться лучше встроенными переменными (OP, TYPE, AREA и т.д.), а не указывать цвет напрямую, чтобы работало одинаково корректно во всех темах, как светлых, так и тёмных. А переменных этих немного — 12, из которых 3 (STR, COMM, DEL2) выпадают из палитры доступного. Потому и вводится стиль шрифта, как дополнительный отличитель. А ещё — 2) — bar.coder не только для bar, но и для usercmd.ini — у них синтаксис одинаковый, а имена ключей различаются. И надо так подсвечивать одни, чтобы не задевать другие.
В общем, я сделал, как Вы писали (постоянная подсветка фона начала кнопок), но код мне самому кажется громоздким (может и напрасно). Хотя на быстродействие подсветки это не влияет. Посмотрите здесь, пожалуйста (жёлтым я выделил строки, которые отвечают за подсветку фона):
https://github.com/yozhic/AkelPad-coder ... er#L64-L72
Это branch, и если Вам понравится, то я перенесу эти строки в основную ветку. Но оставлять их активными пока не хочется, т.к. если Bold/Italic не отключать и CodeFold держать открытым, то яркости достаточно. Думаю, закомментирую их с объяснением, и кто захочет, раскомментирует и будет пользоваться. (Этот файл, который по ссылке откроется, в «нерабочей» кодировке (UTF-8 ), поэтому содержимое лучше копипастой переносить к себе в bar.coder.)
Собственно, поэтому также и подсветку TC-шных команд cm_ и em_ не хочется менять, что она рассчитана на доп. выделение стилем шрифта. Может быть так попробуем: Вы бы пока в этих двух строках (два комментария не в счёт)
https://github.com/yozhic/AkelPad-coder ... er#L84-L87
раскрасили бы себе фон, например как-нибудь так (вместо последнего 0 перед закр. скобкой):
Если в целом нормуль, то может добавим так же закомментированным вариантом.
Теперь aucfg. В этом примере:
меня не смущает, что второе aSnap подсвечивается, а первое — нет. Ведь первый aSnap ещё не стал объектом, он только назначается, а второй уже стал, вот он и засветился (и это уже не просто aSnap, а объект). И опять же, при включенных Bold/Italic элементы не сливаются (а я ещё вдобавок сейчас и точку между объектом и методом выделил, чуть более внятно стало). Но я понимаю, Вам Bold/Italic вообще не «зашли». Но тут что-либо менять сложнее, чем в bar. Aucfg — подсветка более комплексная, и поэтому я пока не придумал, как сделать аккуратно, чтобы можно было закомментировать и использовать по желанию либо один вариант, либо другой. Ведь не хочется делать второй вариант отдельным файлом.
Пардон, я тут чуть запропал.
Вообще-то блок кнопки начинается с ключа buttonxx, и если подсвечивать, то логичней его. Ключ cmdxx по отношению к нему на втором месте. Тем более, что в кнопках попадаются разделители, в которых всего лишь два ключа: buttonxx и iconicxx, а cmd отсутствует.Orion9 писал(а):Хотелось бы, чтобы ключ "cmdxx=" (именно только этот ключ до знака =) выделялся отдельным фоном
Я их по узлам слева различаю и в панели CodeFold они чётко видны списком — мне достаточно. Вот как это выглядит:Orion9 писал(а):Когда открываешь бар-фай в редакторе, первым делом пытаешь различить номера ключей
И поскольку глазу есть «за что ухватиться», я стараюсь цветом не пестрить. Вместе с тем
у Вас, насколько я знаю, отключены Bold/Italic, а в исходном варианте они вносят достаточно отчётливости, на скрине видно.Orion9 писал(а):Ключи с cm_командами сливаются с самими командами
Вообще, при создании подсветки (в AP), условия каковы? 1) — пользоваться лучше встроенными переменными (OP, TYPE, AREA и т.д.), а не указывать цвет напрямую, чтобы работало одинаково корректно во всех темах, как светлых, так и тёмных. А переменных этих немного — 12, из которых 3 (STR, COMM, DEL2) выпадают из палитры доступного. Потому и вводится стиль шрифта, как дополнительный отличитель. А ещё — 2) — bar.coder не только для bar, но и для usercmd.ini — у них синтаксис одинаковый, а имена ключей различаются. И надо так подсвечивать одни, чтобы не задевать другие.
В общем, я сделал, как Вы писали (постоянная подсветка фона начала кнопок), но код мне самому кажется громоздким (может и напрасно). Хотя на быстродействие подсветки это не влияет. Посмотрите здесь, пожалуйста (жёлтым я выделил строки, которые отвечают за подсветку фона):
https://github.com/yozhic/AkelPad-coder ... er#L64-L72
Это branch, и если Вам понравится, то я перенесу эти строки в основную ветку. Но оставлять их активными пока не хочется, т.к. если Bold/Italic не отключать и CodeFold держать открытым, то яркости достаточно. Думаю, закомментирую их с объяснением, и кто захочет, раскомментирует и будет пользоваться. (Этот файл, который по ссылке откроется, в «нерабочей» кодировке (UTF-8 ), поэтому содержимое лучше копипастой переносить к себе в bar.coder.)
Собственно, поэтому также и подсветку TC-шных команд cm_ и em_ не хочется менять, что она рассчитана на доп. выделение стилем шрифта. Может быть так попробуем: Вы бы пока в этих двух строках (два комментария не в счёт)
https://github.com/yozhic/AkelPad-coder ... er#L84-L87
раскрасили бы себе фон, например как-нибудь так (вместо последнего 0 перед закр. скобкой):
Код: Выделить всё
;--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. В этом примере:
Код: Выделить всё
aSnap = aFiles.Clone()
aSnap.SaveToFile(TEMP & "\tc_dir_snap.lst")Amo ergo sum
Вы абсолютно правы. Я исходил из последнего опыта использования. Но подсвечивать buttonxx куда более правильно и логично.yozhik писал(а):Вообще-то блок кнопки начинается с ключа buttonxx, и если подсвечивать, то логичней его. Ключ cmdxx по отношению к нему на втором месте. Тем более, что в кнопках попадаются разделители, в которых всего лишь два ключа: buttonxx и iconicxx, а cmd отсутствует.
Я понял. Но узлы меня не сильно спасают. Хочется, чтобы именно фон выделялся, как маркером на бумаге.yozhik писал(а):Я их по узлам слева различаю и в панели CodeFold они чётко видны списком — мне достаточно.
Да, не зашла мне эта тема с жирным и курсивом, даже не знаю почему, нет объяснений. Может и правда еще раз стоит попробовать.yozhik писал(а):у Вас, насколько я знаю, отключены Bold/Italic, а в исходном варианте они вносят достаточно отчётливости, на скрине видно.
Спасибо за объяснение и напоминание про usercmd.ini. Я внёс предложенные изменения (вернее пресохранил файл bar.utf8.coder в юникод) и добавил цвет шрифта через переменную CodeFold_TagMarkTextColor:yozhik писал(а):1) — пользоваться лучше встроенными переменными (OP, TYPE, AREA и т.д.), а не указывать цвет напрямую..
2) — bar.coder не только для bar, но и для usercmd.ini — у них синтаксис одинаковый, а имена ключей различаются..
Код: Выделить всё
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 писал(а): https://github.com/yozhic/AkelPad-coder ... er#L84-L87
Это было необязательно и только на ваше усмотрение. Оно и сейчас нормально смотрится, если пользоваться короткими именами переменных. Подсветка только бросается в глаза, когда имена и методы длинные, например:yozhik писал(а):Aucfg — подсветка более комплексная, и поэтому я пока не придумал, как сделать аккуратно, чтобы можно было закомментировать и использовать по желанию либо один вариант, либо другой. Ведь не хочется делать второй вариант отдельным файлом.
Код: Выделить всё
oVeryLongName.AndLongMethodЛадно. Время покажет. Будем дальше пользоваться вашими хайлатерами. Если что-то обнаружется, обязательно сообщим в эту тему. Спасибо!
Orion9
Выделение «маркером» buttonNN в bar.coder добавил на постоянной основе — самому зашло
«Маркер» cm_ и em_ тоже добавил, но закомментировал. Обновитесь, пожалуйста. Я перечитал справку к 11.56 и внёс в подсветку все недостающие параметры и «механизм» извлечения подстрок.
aucfg.coder обновил до Autorun.wdx 2.2.21 beta.
Выделение «маркером» buttonNN в bar.coder добавил на постоянной основе — самому зашло
«Маркер» cm_ и em_ тоже добавил, но закомментировал. Обновитесь, пожалуйста. Я перечитал справку к 11.56 и внёс в подсветку все недостающие параметры и «механизм» извлечения подстрок.
aucfg.coder обновил до Autorun.wdx 2.2.21 beta.
Amo ergo sum
yozhik
Спасибо за обнову. Loopback действительно добавил с десяток новых функций в последней версии, т.ч. очень оперативное и нужное от вас обновление.
Забыл спросить. А mnu-файл сейчас поддерживает расширенный формат меню, который недавно появился в Autorun? Просто не было времени самому проверить.
Спасибо за обнову. Loopback действительно добавил с десяток новых функций в последней версии, т.ч. очень оперативное и нужное от вас обновление.
Забыл спросить. А mnu-файл сейчас поддерживает расширенный формат меню, который недавно появился в Autorun? Просто не было времени самому проверить.
yozhik
Возможно и не стоило об этом писать, но в последнем обновлении плагина Autorun добавились функции Min() и Max(). Если создать переменные с такими именами, они будут подсвечиваться как ключевые слова. Наверное, это не правильно:
Возможно и не стоило об этом писать, но в последнем обновлении плагина Autorun добавились функции Min() и Max(). Если создать переменные с такими именами, они будут подсвечиваться как ключевые слова. Наверное, это не правильно:
Код: Выделить всё
Local min, maxВот тут бы посоветоваться. Технически можно сделать проверку, чтобы имена ф-ций подсвечивались только в случаях, когда справа от них скобка, а слева нет точки (чтобы не перепутались с методами объектов). Но это добавит глобальную фоновую обработку. Когда в подсветке слишком много обработок (и они ещё не оптимизированы), то перерисовка может начать подтормаживать, и визуально при наборе кода изображение на экране начинает подрагивать — это утомляет. Поэтому я колеблюсь, стоит ли пробовать.Orion9 писал(а):функции Min() и Max(). Если создать переменные с такими именами
Тут ведь ещё вот что: где-то я читал, кажется когда AutoIt изучал, что давать переменным имена ф-ций можно, но не рекомендуется во избежание путаниц. Ну, т.е. в нашем случае, это могло бы выглядеть sMin (string + Min), sMax и т.п.
Но в целом, мне не сложно добавить упомянутую обработку. Как сделаем? Добавим и посмотрим, будет ли тормозить? Или не будем связываться, а ограничимся соглашением имя_переменной <> имя_функции?
Кстати, я пару косяков в aucfg поправил, и переписал mnu, осталось только обработку em_aucmd дописать. В первом посте теперь интерактивные кнопки — новые версии отображают автоматом, без редактирования поста — так что можно поглядывать ))
UPD: добавил обработку em_aucmd, пока основное, а потом посмотрим что ещё прикрутить.
Amo ergo sum
Да какие могут быть советы. Мы в этих делах люди маленькие, т.к. все это сугубо на ваше усмотрение и понимание вопроса. Было время я и хайлайтером AutoIt подсвечивал синтаксис Autorun и не жаловалсяyozhik писал(а):Вот тут бы посоветоваться.
Резонно. Может и правда лучше ничего не трогать. Спасибо за ответ.yozhik писал(а):Тут ведь ещё вот что: где-то я читал, кажется когда AutoIt изучал, что давать переменным имена ф-ций можно, но не рекомендуется во избежание путаниц. Ну, т.е. в нашем случае, это могло бы выглядеть sMin (string + Min), sMax и т.п.
yozhik
Обновил mnu.coder и при открытии получаю
Обновил mnu.coder и при открытии получаю
Код: Выделить всё
---------------------------
Coder плагин
---------------------------
"Mnu.coder" содержит неизвестную переменную "${XNUM}", которая отсутствует в активной теме "Default2". Продолжить?
---------------------------
ОК Отмена
---------------------------
TC 11.58 combo, Windows 11 x64


