ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Здесь выкладываются готовые к использованию макросы и скрипты.
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »

ViewColor с конфигуратором (клавиша F11)










Attachments
ViewColor_v55.lua
ver 55 (11.05.26) - beta
- Add RealTime3-noBlink (not work in ConEmu with Far-RGB)
(255.99 KiB) Downloaded 11 times
ViewColor_v54.lua
ver 54 (29.04.26)
- ускорения 5% (меньше Lua-сборки-мусора)
- ScrollFast (клавиша Up/Down)
- Standby после 1мин экономит батареи ноута
(256 KiB) Downloaded 16 times
ViewColor_v53.lua
ver 53 (29.03.26)
- Конфигуратор цветов
- Добавить / Удалить новые схемы
- Export / Import Scheme
(254.32 KiB) Downloaded 16 times
ViewColor_v52.lua
ver 52 (22.03.26)
- ускорения 5% за счёт пропусков повторяющихся знаков
- баг-фикс со скобками, не портит экран
- Palette для 16-цветного консоля (от WinVista/7 и выше)
- поддержка v3900 (без конфига) или v4242 (с конфигом)
(250.35 KiB) Downloaded 6 times
ViewColor_v51.lua
ver 51 (20.02.26)
- конфигуратор (без цветов, только системные)
- ускорения +10% (убрана string конвертация)
(254.87 KiB) Downloaded 14 times
Last edited by Ultrabyte on Thu 28 May, 2026 20:48, edited 104 times in total.
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »

Latest post of the previous page:

zg wrote: Fri 24 Nov, 2023 18:51 я именно так и сделал, а так же пробовал версию 0.32.
Вы правы. Попробовал версию 6161_x86 ошибка не воспроизводится. В старом 5787_x64 - устойчиво воспроизводится "vi is nil".

Оставлю код исключения, чтобы была совместимость со старыми FAR'ами.
Last edited by Ultrabyte on Sat 25 Nov, 2023 03:31, edited 3 times in total.
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »

Прошло полгода с момента 0.34 версии - зафиксировал 65 скачивании.
Судя по всему - это удачная и стабильная версия, не увидел здесь жалоб :) Да и у меня на рабочем компе исправно служит 0.34 без глюков.
Но решил таки доработать и "закрыть гештальт": раскрашивать списки. Это то, что умел делать в FarColor при редактировании текста.

Версия 0.35 (выложен в первом посте).
  • Добавил ColorSpisok=(цвет), позволяет раскрашивать списки или перечисления, т.е. раскраска на скобку, точку, двоеточие.
    Обратите внимание на розовый цвет:
    Spisok.png
    Допускается замены на другой цвет, например, светло-серый.
    ColorSpisok = 0 или отрицательное - отключает данный функционал, если показалось излишне разноцветно.
  • Добавил ViewTextClean=true который выполняет также как раннее ViewDumpClean: не раскрашивает бинарный код в текстовом окне (не dump/hex, а именно в "text")
    Удобнее читать, если внутри EXE, есть какие-то куски HTML.
    Обратите внимание режим "t" в верхней строке и часть кода не раскрашиваются:
    TextClean.png
    Хотя иногда возникают неудобства, в обычных TXT-файлах есть спец-коды для красоты оформления и из-за них срабатывает ложный триггер
    ViewTextClean = false - отключает данный функционал (вернуть как раньше)
Last edited by Ultrabyte on Mon 01 Jul, 2024 22:06, edited 8 times in total.
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »

Выложил версию 0.36.
  • Исправлен старый баг: если нажать мышкой на F3-View, то нет раскраски. Если нажать клавиатурой F3, то раскраска есть.
    (обнаружил этот баг на ноутбуке с тачкрином, где пытался пальцем тыкнуть на экран и открыть просмотрщик. Теперь всё ок).
  • Исправлен MouseWheel (колёсико) для версии Far ~ 6132 и выше. Раньше работало колёсико только в Far ~ 5787 и ниже. Теперь всё ок.
    (более точную версию Far'а когда "поломалось" - не интересовался)
Если будут новые глюки - сообщайте :) На всякий случай оставил предыдущую версию 0.34
Last edited by Ultrabyte on Mon 01 Jul, 2024 21:24, edited 5 times in total.
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »

Выложил версию 0.37.
  • (продолжение с v0.29) исправлена ошибка в MultiTask (нажать на Ctrl-Tab -> мусор);
  • (продолжение с v0.36) исправлен глюк MouseWheel (колёсико) при ConEmuRefreshApiFar=true
  • Улучшено клавиатурное ожидание KeyPress(), теперь "слышит" знаки/рус-клавиши.
    Актуально при включенном ConEmuRefreshApiFar=true.
  • Для ConEmuRefreshApiFar=true установлен таймер на 30 минут и отключается
    "удержания экрана", иначе происходило непонятное, замирал на 5 мин (чистка мусора?).
  • (продолжение с v0.35) теперь автоматически отключает "расцветку цветов" при
    предварительном анализе и нахождения машинного-hex-кода в TEXT-экране.
    Плюсы: теперь НЕ отключает расцветку в любом нормальном текстовом файле.
    Раз получился автоматически, то убран флажок ViewTextClean.
  • (продолжение с v0.31) исправлена ошибка в Windows Terminal при ConEmuRefreshForcibly=true,
    из-за этого флажка экран разбивался (сдвигаются символы из-за иероглифов),
    причем в ConEmu не портится (этот флаг как и задуман для ConEmu). Таким образом
    добавлен код определения: если экран "разбился", то автоматически переводит в false,
    и выдаст соответствующее сообщение: "ViewColor: auto-turn ConEmuRefreshForcibly=false"
    "разбитый" экран из-за иероглифов и соответствующее сообщение, после этого автоматически исправится, все будет Ок.
    "разбитый" экран из-за иероглифов и соответствующее сообщение, после этого автоматически исправится, все будет Ок.
    Лучше самому перевести в false, чтобы не тратить ресурс постоянной проверки экрана.
  • Для Dump'а добавлено "игнорирования ScrollBar" (долгое время у меня по дефолту
    был отключен ScrollBar, и ViewColor создан без учета этой вертикальной полоски,
    позже познал дзен с полоской ScrollBar, соответственно пришлось доработать код)
  • Улучшил алгоритм чистки экрана в Dump-просмотре, не засвечивает бессмыслицу
    наподобие "ATAWA" во всех x64 EXE-файлах (вестимо VisualStudio так оскверняет);
    не засвечивает AVVAW, AVVWUSH. Теперь легко читаются куски: PDS_VERSION_IDI, Recurse/tags (читать задом на перед)
    не засвечивает AVVAW, AVVWUSH. Теперь легко читаются куски: PDS_VERSION_IDI, Recurse/tags (читать задом на перед)
  • Авто-пролистывания вперед/назад в режиме Dump'а при просмотре EXE/DLL на
    выявления куски текста (много мусора, но кое-что интересное попадаются).
    Клавиши: Space (если был поиск F7, то нет), >, Alt+Down - вперед или <, Alt+Up - назад
    На всякий случай добавил в режиме Dump'а (в exe,dll файлах) - подсказку:
    Всплывающая подсказка, чтобы не забыть об клавишах. Легко читаются: about:client
    Всплывающая подсказка, чтобы не забыть об клавишах. Легко читаются: about:client
    Подсказка всплывает только один раз, до следующей перегрузки самого FAR'а.
    Если раздражают подсказки, то найти и переключить HintForDumpKey=false
  • Расширил возможности Комментирования в файлах "python, pascal".
    Пришлось изрядно утяжелять код, чтобы исправно работало: /*/ или """
    И добавлен поиск по маске CmntFileMask="" и исключения CmntDontMask=""
    Это полезно, т.к. в Python'e запрещено триггерить знаком "//" или в С++ знаком "--"
  • Добавлен простецкий алгоритм выделения цветов русских синтаксисов (названия, имена)
    Образец текста с выделенным желтым цветом в схеме -rus-
    Образец текста с выделенным желтым цветом в схеме -rus-
    Пока работает в схеме -rus- (это настраивается в NazvanieRus по-желанию user'ом).
  • Увеличено быстродействие, что на пользу для нетбука Atom. Для примера: в версии 0.35
    при зацикленном 300 раз - тратилось от 40-50сек, то в текущей 0.37 тратится 9-14сек.
    Однако, иногда замечаю какое-то подтормаживание самого Lua-интерпретатора:
    иногда быстро отрисовывается, иногда статоры-лаги.
В итоге это значительное улучшение за весь год. Правда изначально, планировал добавить Диалоговые окна "Настройки", чтобы не копаться внутри ViewColor.lua. Но в процессе ковыряния кода - находил старые глюки, кривости, проводил оптимизации и "случайно" сделал автопоиск слов в Dump в качестве дебага (проверял работу функции распознания слов в тексте), потом подумал: "А что, интересно получилось, может людям тоже нужен автопоиск.. Пусть будет...". Улучшал то тут, то там, и пошло-поехало...
Для диалогового окна "Настройки" теперь нет места (на форуме максимально 260кб) и также в lua достиг предела "60 upvalues".
Last edited by Ultrabyte on Mon 07 Oct, 2024 21:36, edited 13 times in total.
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »

Осторожно выкатываю новую версию 0.38
  • Исправлен баг раскраски Hex-экрана, если в файле сплошные "00". Теперь всё Ок.
  • Доработал "прозрачность" в Hex-экране: теперь в маленьком hex-экране "видится" программой как один большой неразрывный массив (раньше разбивался с каждой строки и соответственно программа не очень понимала как раскрашивать "разбитые из двух полуслов").
  • Добавил флажок ColorHexScreen=true - включает "красивости" в Hex-экране:
    цветные цифры и фиолетовая вертикальная полоса. Если переключить в &quot;false&quot;, то вернет как прежде &quot;голубой на синем фоне&quot;
    цветные цифры и фиолетовая вертикальная полоса. Если переключить в "false", то вернет как прежде "голубой на синем фоне"
    Если нужны "красивости", но с другими цветами под себя, то самому найти фразу "ColorHexScreen" в коде и после несложного вдумчивого осмотра - поменять на соответствующие коды-цветов под себя. Если лень копаться в кодах, то проще переключить в false (ColorHexScreen=false) и успокоится =)
  • Исправил старый баг, который НЕ показывал окно ProgressBar, если нажать Shift-F7 на много-гиговый файл:
    Раньше не показывал ProgressBar, теперь всё Ок.
    Раньше не показывал ProgressBar, теперь всё Ок.
Last edited by Ultrabyte on Fri 18 Oct, 2024 08:29, edited 6 times in total.
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »

Выложена новая версия v0.39.
  • досрочный выход новой версии, в связи с тем, что другой скрипт Dialog.ConvertTo16bit.lua конфликтовал с ViewColor.
  • оптимизировал часть кода, высвободив где-то 5кб, это позволит в будущем добавить новых фичей (например, "Диалог настройка" ?)
  • выделенный блок в просмотрщике - больше не теряются. Но пока до сих пор не ясен вопрос, как посредством стандартной функции получить "пользовательские настройки цветов в FARе для выделенного блока". Я получаю только RGB цветов, а нужны 1-байтовый: от 0x00 до 0xFF (все 16 цветов). Если будет найдено решение, то высвободится ~ 3кб кода.
  • Чуть улучшил быстродействие работы с консолями. Хотя этого не требовалось, но возможно, поможет уменьшить утечки памяти, не потребуется много работы "уборщику мусора".
  • Оставил временный код "бенчмарк" - вызывается нажатием Shift-F12. Возможно кому-то интересно сравнить/изучать проблему LUA.
=== Бенчмарк ====

В прошлой версии упомянул, что есть какие-то статоры-подлагивания в интерпретаторе LUA.
Решил исследовать, с какого момента начинают "статоры" и от чего. Добавил код "бенчмарк", который показывает статистику: "стрелку вниз" - это минимальное число FPS, и "стрелку вверх" максимальное число FPS. Подсчитывает 10 раз по 5 секунд. Длительность 1 минута.
"И шо вы думаете?"(с) - вопросов стало больше :(

Попробую изложить краткую суть:
  • в каждой версии (v28, v36, v38, v39) добавил идентичный код-бенчмарка, и у каждой своя клавиша вызова.
  • запускаю один Far v6388 x64 на готовые четыре версии ViewColor (в папке Script лежат одновременно четыре Lua-файлы)
  • открываю просмотрщиком файл NIL (нулевой размер файла), на экране пусто, нажимаю соответствующие клавиши бенчмарки, заскриншотил несколько вариантов:
    51-6388_NIL_без_scrollBar_без_ВерхВниз-OK_.png
    Действительно, появилась путаница и шатания в цифрах, в верхнем случае - дикие статоры/подлагивания (условно скажем "приуныл"). Несколько раз нажимал (~ 5 раз), вдруг устаканивается в лучшие показатели (почти в 2 раза) по всем показателям, условно назовем "борзый".
  • Включил ScrollBar - это заставляет запускать другая часть программного кода для "обхода вертикальной полоски". Другими словами, ViewColor начинает "напрягаться" сильнее, чтобы слова и тексты не разрывались при переходе на следующей строки. И как видим, FPS значительно просел, чуть меньше в 10 раз:
    52-6388_NIL_с_scrollBar_без_ВерхВниз_OK.png
    Результаты аналогичны: заметны статоры/подлагивания (разница "сверху" и "снизу"), которые занижают в 2 раза показатели.
  • Закрались сомнения насчет правдивости, а нет ли пропуски кадров? Возможно LUA как-то задействовал "Skipped" часть кода, если вводные данные не меняются (экран статичен)? или Windows Console делает Skipped кадров, если "цвета" не меняются?
    После недолгих раздумий, решил добавить в бенчмарке "нажатия стрелки вниз", автоматически пролистает экран вниз. И тут, меня ошеломило, теперь видно глазами какие жуткие статоры: иногда останавливается чуть менее 1 секунды, чаще всего в версии ViewColor_v28. У остальных версии - равномерные тормоза. И вдруг, будто срывается с цепи и мгновенно мелькает перед глазами как ракета, что едва успеваешь зацепиться глазами (скорость возросла в 3 раза).
    01_googledll_двигает_вниз_OK3.png
    Проверил по стоп-кадрам - действительно, цветовые раскраски присутствуют, значит "Skipped" не было.
    Интересный момент: в версии v39 никак не удавалось "раздуплится" на максимальную скорость, многократно нажимал на бенчмарк - бесполезно. Перешел на Far x32 и сработало, что и продемонстрировано на скриншоте - скорость в 5 раз выше. Также интересное наблюдение: иногда попеременно то быстро, то медленно - видим большую разницу дельта значении "min" и "max" (18fps и 84fps у v39)
  • Пробовал также собрать статистику на просмотр файла ViewColor.lua (достаточно объемный) и требуют значительного ресурса на "знаки комментирования". Или как вариант на просмотр объемного файла Far-Changelog. В итоге - статистика сложилась аналогичной "туда-сюда" разброд и шатания. Не стал добавлять скриншоты, чтобы не засорять лишними цифрами.
Что пробовал сделать:
  • разные версии Far 5225, 5787, 6388 (это 18г...24г.) - не влияет.
  • разные архитектуры Far x32/x64 - абсолютно другой "рандом", может повезти с первого захода, а может "тугодумить" вечно.
  • удалял всё в папке Plugins (кроме LuaMacro) и удалял всё в "Script" (кроме четырёх ViewColor.lua) - не влияет.
  • удалял преднастройки Far-Config. Чистый дефолтный Far, оставив только размер консоля 100x35 - не влияет.
  • Win10, Terminal, векторный шрифт -vs- Win7, WinConsole, растровый шрифт - не влияет.
  • файл ViewColor.lua содержит кодировку Ansi или UTF8 - не влияет
  • Добавлял в коде остановку сборщика мусора - заметил как резко возрастает выделенную память Far.exe до 1,6гигабайт и статоры усиливаются.
    Но если удалось с первого захода "раздуплиться" на максимальную скорость (без лагов и статоров), то память достигает скромных значении (начинает рост от 8мб и останавливается до 180мб).
  • убрал все слова "local" (сделав переменные/функции глобальными) - особо роли не играют, статоры и лаги остались. Лучше или хуже - не вдавался.
Подвожу итог:
  • Никак не удается стабилизировать показатели бенчмарка, т.к. бывают неожиданные статоры (1 секунда в v28) или "ракета".
  • Если отсеять "неудачные цифры", то в целом прослеживаются значительные улучшения программного кода по ускорению ViewColor от v28 до v39. В некоторых случаев, возрос в 2 раза по среднему FPS.
  • требуется серьезная консультация специалистов по теме лаги/статоры, или обратить внимание разработчикам по этой проблеме.
    В противном случае, весьма трудно получать достоверные данные FPS, при замене какого либо кода, например, что быстрее: работа string.xxx или utf8.xxx или ffi.string? таблица или множество локальных переменных ? функция внутри функции или сделать внешней? "разбивать" ли сложные функции на составные функции? и так далее...
Shmuel
Posts: 7253
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 636 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Shmuel »

Извиняюсь, но что такое статор ?
Википедия говорит
Ста́тор (англ. stator, от лат. sto — стою) — неподвижная часть электрической, лопаточной и другой машины, взаимодействующая с подвижной частью — ротором.
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »

Shmuel wrote: Mon 11 Nov, 2024 20:54 от лат. sto — стою
Это устоявшиеся жаргон среди игроманов, разве не?
Проверил, действительно, у "английского гугла" не встречаются "stator in game" :( только "stutter in games" (заикания).
Shmuel
Posts: 7253
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 636 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Shmuel »

Благодарю за пояснение. Игроманом не был, поэтому сразу не понял.
Shmuel
Posts: 7253
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 636 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Shmuel »

например, что быстрее: работа string.xxx или utf8.xxx или ffi.string?
Скорее всего string.xxx быстрее, чем utf8.xxx, но ведь они часто не взаимозаменяемы.
А ffi.string совсем с этими не взаимозаменяема.
таблица или множество локальных переменных ?
Локальные переменные.
функция внутри функции или сделать внешней?
Примерно одно и то же.
"разбивать" ли сложные функции на составные функции? и так далее...
Разбивать в разумных пределах, ориентируясь на читаемость кода, а не на быстродействие.

Однако всё вышесказанное не поможет, пока не будет произведёно профилирование, которое позволит точно определить, на что уходит большая часть времени. Есть разные "профайлеры" для Луа, в том числе встроенный в LuaJIT (https://luajit.org/ext_profiler.html)
Shmuel
Posts: 7253
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 636 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Shmuel »

Добавлю (в общем-то общеизвестное) - часто алгоритм обработки имеет определяющее значение в быстродействии. Какие-то локальные оптимизации могут улучшить быстродействие на 10 процентов, а выбор оптимальных алгоритмов - в разы.
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »



to All:
В первом посте, перевыложил "чуть переделанную" ту-же версию v39, а точнее, вернул удаленную функцию DeleteColorProgress().
С этой функцией, всё-же приятнее, нет кратковременных "дребезгов" на экране, когда пользуешься поиском F7.

Хотя это не критично, но всё-же... И да, не получилось таки сэкономить "драгоценные килобайты" :)

update: чтобы не было путаницы - внутри ViewColor.lua обновил даты: с 11.11.24 на 13.11.24
Last edited by Ultrabyte on Thu 14 Nov, 2024 03:10, edited 7 times in total.
Shmuel
Posts: 7253
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 636 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Shmuel »

Если был выбран "стринговый" (с прицепом на RegExp), то как практика показала, требуется невероятных усилии. Причина: отсутствия наличии такового на форуме (я ждал 10 лет).
Не очень понятно, что отсутствует на форуме? Чего вы ждали 10 лет?
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »

раскраску просмотрщика (на форуме и на плагринге)
Shmuel
Posts: 7253
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 636 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Shmuel »

Ну отлично, вы это сделали! Кому-то другому уже не придётся ждать :)
Ultrabyte
Posts: 222
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 23 times

ViewColor — Монструозная раскраска некоторых синтаксисов в консоли поверх просмотрщика

Post by Ultrabyte »

так как все таки вытащить из far однобайтовый цвет? )
Color=far.AdvControl("ACTL_GETCOLOR", far.Colors.COL_VIEWERTEXT)
Color должен получить 0x1B, согласно по таблице цветов, а получаю RGB...
Этот вопрос висит с прошлого года... Кто нибудь понимает "в этом вашем интернете"(c) ?
Post Reply

Return to “Полезные макросы и скрипты”