Colorer — гибкая раскраска синтаксиса в редакторе и др.

Здесь можно обсудить ваш любимый плагин.
User avatar
ctapmex
Posts: 1240
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by ctapmex »

Far Colorer — плагин подсветки синтаксиса в редакторе, основанный на Colorer Library Игоря Русских.
  • Изначальный автор плагина — Игорь Русских (lomecb, он же cail).
  • После того как плагин портирован на Far 2, поддержкой занимается Алексей Добрунов (ctapmex, он же на форуме ctapmex).
  • Официальная поддержка осуществляется через google-группу colorer_ru (на форуме бывает только ctapmex).
  • Актуальные версии основаны на Colorer Library версии take5.
GitHub | Анонс | Старые домашние страницы библиотеки Colorer и плагина для FAR

Плагин входит в дистрибутив Far Manager с v3.0.2948 (старые версии доступны тут)
Поддержка Windows XP
Начиная с версии FarColorer 1.4.0 в плагине прекращена поддержка Windows XP. Полностью поддерживается и тестируется на Windows 10. Несколько версий Windows назад - по запросу. Но кажется, что всегда должно работать начиная с Windows 2008.
Far Manager 3.0.5797 (2021.05.10) и более новые в дистрибутиве содержат FarColorer версии 1.4.
Поддержка Windows XP осталась только на FarColorer 1.3.x. В данной ветке будут выходить только критичные исправления. Скачать можно на GitHub странице плагина. Последняя версия 1.3.30



Что не разжёвано в документации плагина:
  • Как подключить собственные цветовые стили *.hrd
  • Как подключить собственную схему:
    • используя пользовательский файл прототипов:
    • используя папку auto:
    • через пользовательский catalog.xml:
  • Как переопределить существующую схему
  • Как правильно "удалить" какую-либо стандартную схему
  • Как использовать относительные пути и переменные окружения
  • Если раскраска неправильна:
  • Неочевидные настройки: maxlinelength (в теме)
  • Тонкая настройка подсветки для отдельной схемы: в теме.
Last edited by ctapmex on Mon 18 Oct, 2021 19:17, edited 5 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by citRiks »

Latest post of the previous page:

HaRT wrote: Thu 23 Apr, 2020 20:17 Колорер — это не вполне подходящий для этой задачи инструмент. Посмотрите лучше в сторону Language Server Protocol.
А почему неподходящий?
Он штатный без внешних зависимостей
Уже умеет для анализа кода или все или почти все.
АПИ вон какой замечательный делается
не надо изучать CTags/LangServer.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by John Doe »

В справке все примеры с Plugin.Call, тогда как в ряде случаев требуется Plugin.SyncCall (например во всех случаях когда надо вернуть значение, или дождаться закрытия диалогов пользователем).

Code: Select all

Plugin.Call("D2F36B62-A470-418d-83A3-ED7A3710E5B5","Settings",<Name>, <Param>)
(И сейчас так для каждой команды)
И я бы исключил повторяющиеся части(Plugin.Call и гуид), получится компактнее и нагляднее.

Code: Select all

   Функция для работы с глобальными настройками. Ограничений на макрорегионы не установлено.
Видимо это примечание в команде Settings лишнее
Last edited by John Doe on Mon 04 May, 2020 11:47, edited 1 time in total.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by John Doe »

Code: Select all

        "Status" - Статус активности плагина
          <Param> - Число: 0 - выключен; 1 - включен;
          Если задан, то применяется новый статус с перезагрузкой всех настроек. Возвращает предыдущее значение
          Если не задан, возвращает текущее значение
На самом деле:
- Возвращается true/false
- Применить новый статус не получается ни с 0/1, ни с false/true (пробую из панелей)

Вообще false/true кажутся предпочтительнее, но надо помнить о том, что false может вернуться и в случае ошибки в команде.
Пока не предлагаю решения, надо сначала посмотреть все команды.
https://t.me/FarManager — Telegram чат
User avatar
ctapmex
Posts: 1240
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by ctapmex »

проблему с set Status исправил. добавил так же обработку на вход true/false.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by John Doe »

ctapmex wrote: Wed 06 May, 2020 18:09 проблему с set Status исправил. добавил так же обработку на вход true/false.
Plugin.Call("D2F36B62-A470-418d-83A3-ED7A3710E5B5","Status") всегда возвращает false.
Параметр ни на что не влияет.
Edit похоже проблема в регистре - "status" вроде работает.
Last edited by John Doe on Wed 13 May, 2020 10:24, edited 2 times in total.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by John Doe »

Если логгирование включено, но путь к логу указан некорректный, то при попытке включить колорер из редактора фар падает:

Code: Select all

Exception:    0xC00000FD - EXCEPTION_STACK_OVERFLOW
Details:      A new guard page for the stack cannot be created.
errno:        0x00000000 - No error
LastError:    0x00000000 - The operation completed successfully.
NTSTATUS:     0xC000000D - An invalid parameter was passed to a service or function.
Address:      0xFE9D71 - Far.exe!KeyMacro::CallFar
Function:     ProcessDialogEventW
Source:       C:\src\far\macro.cpp:1539
File:         C:\APPs\Far3\Plugins\LuaMacro\luamacro.dll
Plugin:       LuaMacro 3.0.0.746 (Far macros in Lua, Shmuel Zeigerman & Far Group)
Far:          3.0.0.5596 x86 (96933a8)
OS:           10.0.17763.2.0.0.256.1 (version 1809, OS build 17763.1192)

0x00FE9D71 Far.exe!KeyMacro::CallFar (C:\src\far\macro.cpp:1539)
0x0103C17C Far.exe!pluginapi::apiCallFar (C:\src\far\plugapi.cpp:3026)
0x6627CEF1 luafar3.dll!LF_LoadFile
0x66FD026B lua51.dll!lua_dump
0x662868A8 luafar3.dll!LF_LoadFile
0x66F8608B lua51.dll!<unknown> (get the pdb)
0x66F88B93 lua51.dll!luaL_error
0x66F88DB0 lua51.dll!luaL_error
0x66F88695 lua51.dll!luaL_error
0x66F89AEB lua51.dll!luaL_error
0x66F89961 lua51.dll!luaL_error
Под этим сообщением находится другое:

Code: Select all

╔════════════════════ FarColorer ════════════════════╗
║ editorEvent: Bad BaseEditor constructor parameters ║
╟────────────────────────────────────────────────────╢
║                       { Ok }                       ║
╚════════════════════════════════════════════════════╝
А за ним ещё сообщении о невозможности открыть лог.
https://t.me/FarManager — Telegram чат
User avatar
ctapmex
Posts: 1240
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by ctapmex »

John Doe wrote: Wed 13 May, 2020 09:55
ctapmex wrote: Wed 06 May, 2020 18:09 проблему с set Status исправил. добавил так же обработку на вход true/false.
Plugin.Call("D2F36B62-A470-418d-83A3-ED7A3710E5B5","Status") всегда возвращает false.
Параметр ни на что не влияет.
Edit похоже проблема в регистре - "status" вроде работает.
это старая функция. которая не менялась.
новая

Code: Select all

 #Работа с глобальными настройками#
   Ограничений на макрорегионы не установлено.
   #...,"Settings",<Name>, <Param>)#
     <Name>: принимает следующие значения
...
        "Status" - Статус активности плагина
          <Param> - Число: 0 - выключен; 1 - включен; Либо boolean: false -выкл, true - вкл.
          Если задан, то применяется новый статус с перезагрузкой всех настроек. Возвращает предыдущее значение
          Если не задан, возвращает текущее значение
User avatar
ctapmex
Posts: 1240
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by ctapmex »

John Doe wrote: Wed 13 May, 2020 10:29 Если логгирование включено, но путь к логу указан некорректный, то при попытке включить колорер из редактора фар падает:

Code: Select all

Exception:    0xC00000FD - EXCEPTION_STACK_OVERFLOW
Details:      A new guard page for the stack cannot be created.
errno:        0x00000000 - No error
LastError:    0x00000000 - The operation completed successfully.
NTSTATUS:     0xC000000D - An invalid parameter was passed to a service or function.
Address:      0xFE9D71 - Far.exe!KeyMacro::CallFar
Function:     ProcessDialogEventW
Source:       C:\src\far\macro.cpp:1539
File:         C:\APPs\Far3\Plugins\LuaMacro\luamacro.dll
Plugin:       LuaMacro 3.0.0.746 (Far macros in Lua, Shmuel Zeigerman & Far Group)
Far:          3.0.0.5596 x86 (96933a8)
OS:           10.0.17763.2.0.0.256.1 (version 1809, OS build 17763.1192)

0x00FE9D71 Far.exe!KeyMacro::CallFar (C:\src\far\macro.cpp:1539)
0x0103C17C Far.exe!pluginapi::apiCallFar (C:\src\far\plugapi.cpp:3026)
0x6627CEF1 luafar3.dll!LF_LoadFile
0x66FD026B lua51.dll!lua_dump
0x662868A8 luafar3.dll!LF_LoadFile
0x66F8608B lua51.dll!<unknown> (get the pdb)
0x66F88B93 lua51.dll!luaL_error
0x66F88DB0 lua51.dll!luaL_error
0x66F88695 lua51.dll!luaL_error
0x66F89AEB lua51.dll!luaL_error
0x66F89961 lua51.dll!luaL_error
Под этим сообщением находится другое:

Code: Select all

╔════════════════════ FarColorer ════════════════════╗
║ editorEvent: Bad BaseEditor constructor parameters ║
╟────────────────────────────────────────────────────╢
║                       { Ok }                       ║
╚════════════════════════════════════════════════════╝
А за ним ещё сообщении о невозможности открыть лог.
прикольная ошибка. при отображении msgbox с ошибкой логирования, far посылает сообщения всем, в том числе редактору. колорер получает это сообщение, и пытается его обработать. получает ошибку, т.к. еще не инициализировался и показывает новый mgsbox. и так по кругу, пока у фара влазит строка для форматирования.
User avatar
ctapmex
Posts: 1240
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by ctapmex »

в версии 1.3.13 решил проблему зависания редактора при работе с длинными строками.
сейчас у меня при отключении maxlinelength редактор открывает любые файлы за вменяемое время (на моей машине несколько секунд). проверял на разных json с длинной строк до 70 тыс. Так же открывает разные проблемные файлы, отличительной особенностью которых был непрерывный блок символов, относящихся к одной схеме/regexp hrc схемы.

для этого добавлен параметр новый параметр схемы maxblocksize - указывает максимальный размер подстроки, которая может быть частью отдельной схемы/regexp/слова. Значение по умолчанию 300 символов.
Можно воспринимать его как максимальный размер одной строки в редакторе. Для обычного файла это не должно иметь последствий, т.к. размер строки при редактировании часто меньше 200 символов. Для других файлов, где например есть длинная непрерывная последовательность символов без пробелов, это прервет попытку захватить в регулярное выражение всю строку. Чем выше значение параметра, тем ближе поведение к предыдущей версии.

работать с длинными строками конечно так себе. но в свое оправдание могу сказать - в других редакторах не лучше -)
Last edited by ctapmex on Mon 15 Jun, 2020 19:58, edited 1 time in total.
User avatar
Sim
Posts: 435
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 11 times
Been thanked: 2 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by Sim »

ctapmex, в последних билдах плагин стал ощутимо грузить процессор и мешать редактировать файлы, стоит выключить раскраску так сразу все становится нормально.
Случайности не случайны.
User avatar
ctapmex
Posts: 1240
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by ctapmex »

Sim, какой примерно проц и размер файла?
я увеличил частоту вызова построения раскраски в 5 раз. что примерно равно тому, что было во времена far2. буду выносить в параметр это поведение
User avatar
Sim
Posts: 435
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 11 times
Been thanked: 2 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by Sim »

ctapmex,
CPU: Intel Pentium N3540 2.16GHz, размер файла не большой около 10Кб, и длинных строк в нем нет.
Да надо бы пореже перекрашивать синтаксис, чтобы это не мешало работе с текстом. В идеале чтобы раскраска вообще не влияла на скорость ввода текста, работала полностью в фоне.
Last edited by Sim on Fri 03 Jul, 2020 15:27, edited 1 time in total.
Случайности не случайны.
User avatar
Sim
Posts: 435
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 11 times
Been thanked: 2 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by Sim »

ctapmex wrote: Fri 03 Jul, 2020 07:27 буду выносить в параметр это поведение
напиши когда сделаешь, пока приходится пользоваться более старой версией
Случайности не случайны.
User avatar
ctapmex
Posts: 1240
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by ctapmex »

Sim, ок. попытаюсь.

User avatar
ctapmex
Posts: 1240
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by ctapmex »

Sim wrote: Tue 07 Jul, 2020 08:28
ctapmex wrote: Fri 03 Jul, 2020 07:27 буду выносить в параметр это поведение
напиши когда сделаешь, пока приходится пользоваться более старой версией
сделал, в ночной сборке будет
User avatar
Sim
Posts: 435
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 11 times
Been thanked: 2 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by Sim »

ctapmex wrote: Sat 18 Jul, 2020 18:07 сделал, в ночной сборке будет
что-то нет пока новой ночной сборки :(
Случайности не случайны.
Post Reply

Return to “Обсуждение плагинов”