Синхронизация редактора с результатами поиска (Show All)

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

У плагина LuaFAR Search имеется удобная фишка, почему-то не реализованная в стандартном поиске: при показе ВСЕХ найденных строк при переходе по найденным строкам редактор позиционируется на соответствующей строке. Сделал я небольшой макрос, делающий аналогичную вещь.
Макрос состоит из четырёх обработчиков событий (два для стандартного диалога поиска и два для поиска по плагину RESearch). Первый Event читает параметры поиска, второй поддерживает переход по найденным строкам. Общая функция преобразовывает строку в координаты и реализует позиционирование и раскраску найденного.




В скрипте используется мой модуль "Расширение GetMsg" Уже не используется.
EditorFindAllList.lua.1_4_1.7z
(3.86 KiB) Downloaded 317 times
Версия 1.5.1 - обещанная фильтрация по вхождению в блок (CtrlH)
EditorFindAllList.lua.1_5_1.7z
С фильтрацией. Увы, в списке айденного пропадает раскраска .
(4.39 KiB) Downloaded 324 times
Версия 1.5.5
EditorFindAllList.lua-1-5-5.7z
(4.67 KiB) Downloaded 167 times
Версия 1.5.7
EditorFindAllList.lua-1-5-7.7z
(4.95 KiB) Downloaded 39 times
Версия 1.5.9
EditorFindAllList.lua-1-5-9.7z
(5.2 KiB) Downloaded 24 times
Last edited by buniak_a_h on Thu 02 Oct, 2025 05:10, edited 12 times in total.
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

Latest post of the previous page:

Версия 1.5.5
Опять исправлен разбор элемента в связи с этим:
Kadaner wrote: Wed 07 May, 2025 00:29 Сейчас в строке пункта меню, на номер строки выделяется столько позиций, сколько может понадобиться, учитывая количество строк в файле.
… … …
На номера колонок всегда выделяется 6 позиций
Исхожу из предположения, что реальный номер позиции занимает меньше 6-ти символов; соответственно, между номером строки и номером позиции всегда будет хотя бы один пробел
Last edited by buniak_a_h on Fri 09 May, 2025 07:04, edited 1 time in total.
User avatar
SUSim
Posts: 1735
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 15 times
Been thanked: 45 times

Синхронизация редактора с результатами поиска (Show All)

Post by SUSim »

я вот так сделал:

Code: Select all

--      Row,Col = v.Text:sub(1,5), v.Text:sub(7,11) -- - SimSU
      local RowLen = math.ceil(math.log10(editor.GetInfo().TotalLines+1)) --+ SimSU
      -- local RowLen = tostring(editor.GetInfo().TotalLines):len()       --+ SimSU
      Row,Col = v.Text:sub(1,RowLen), v.Text:sub(RowLen+1,RowLen+6)       --+ SimSU
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by John Doe »

Kadaner wrote: Wed 07 May, 2025 00:29 Разделители вообще не занимают места во внутреннем представлении. Так что кое-что удаётся сэкономить, хотя немного.
Спорная экономия места выливается в сложности в использовании сторонними средствами.
Можно же и намного больше сэкономить, давайте уже RLE encoding тогда.
Kadaner wrote: Tue 06 May, 2025 01:41 Я регулярно работаю с меню, содержащими десятки тысяч "пунктов", так что эти байты накапливаются.
Честно говоря я затрудняюсь представить что полезного можно сделать в меню на 10000 пунктов.
Глазами так ничего не найдёшь, пока не отфильтруешь до разумного количества.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

SUSim wrote: Sun 11 May, 2025 09:21 я вот так сделал:

Code: Select all

--      Row,Col = v.Text:sub(1,5), v.Text:sub(7,11) -- - SimSU
      local RowLen = math.ceil(math.log10(editor.GetInfo().TotalLines+1)) --+ SimSU
      -- local RowLen = tostring(editor.GetInfo().TotalLines):len()       --+ SimSU
      Row,Col = v.Text:sub(1,RowLen), v.Text:sub(RowLen+1,RowLen+6)       --+ SimSU
Это - круто! Я сначала тоже хотел привязаться к количеству строк, но так, как у Вас написано в закомментированной 3-й строке. А потом решил, что предположение о наличии хотя бы одного пробела в шестизначном номере позиции - вполне безобидно. Поэтому не вычисляю количество символов, а просто разбиваю по пробелу: до пробела - номер строки, следующие 6 - номер позиции.
Резоны:
(1) так гибче
(2) мне кажется - и проще. Чем вычисление логарифмов… ;-)
User avatar
Kadaner
Posts: 70
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

Синхронизация редактора с результатами поиска (Show All)

Post by Kadaner »

John Doe wrote: Sun 11 May, 2025 12:48 Честно говоря я затрудняюсь представить что полезного можно сделать в меню на 10000 пунктов.
Глазами так ничего не найдёшь, пока не отфильтруешь до разумного количества.
Не могу сказать, что я получаю удовольствие от этих развлечений, но это реальность, данная мне в ощущениях. Логи от клиентов, у которых были проблемы с нашим продуктом. Мне случается и сотни тысяч строк просматривать глазами, и замечать в них (spot) странности, которые иногда указывают на проблему. Pattern recognition. Надо бы это отдать на откуп какому-нибудь ИИ, но...

Я собираюсь сделать Lua API для получения координат и длины найденного образца из меню результатов поиска. Следите за рекламой.
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

Kadaner wrote: Mon 12 May, 2025 00:43 собираюсь сделать Lua API для получения координат и длины найденного образца
У редактора есть "два вида" горизонтальных координат: исходные и экранные (расширение табуляций). Будете учитывать?
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by John Doe »

Kadaner wrote: Mon 12 May, 2025 00:43 Я собираюсь сделать Lua API для получения координат и длины найденного образца из меню результатов поиска. Следите за рекламой.
Как по мне это уже слегка overengineering. Раньше координаты извлекались простейшим паттерном и было достаточно.

Что насчёт rle encoding?
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

John Doe wrote: Mon 12 May, 2025 07:32
Kadaner wrote: Mon 12 May, 2025 00:43 Я собираюсь сделать Lua API для получения координат и длины найденного образца из меню результатов поиска. Следите за рекламой.
Как по мне это уже слегка overengineering. Раньше координаты извлекались простейшим паттерном и было достаточно.
Полностью согласен. Все проблемы решились бы простейшим добавлением пробела между номером позиции и цитатой. Первая группа цифр - номер строки: вторая - номер позиции. И парсится легко, и символы можно сэкономить (всё же 5-ти-значный номер позиции - это экзотика!).
User avatar
Kadaner
Posts: 70
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

Синхронизация редактора с результатами поиска (Show All)

Post by Kadaner »

John Doe wrote: Mon 12 May, 2025 07:32 Как по мне это уже слегка overengineering.
buniak_a_h wrote: Mon 12 May, 2025 08:41 Полностью согласен. Все проблемы решились бы простейшим добавлением пробела между номером позиции и цитатой.
Забыл сказать, что я собираюсь вообще убрать координаты из строк меню. Для отрисовки я собираюсь спрашивать их у хозяина меню, т.е. у редактора. Это полностью лишит этот макрос возможности что-то там извлекать простейшим паттерном. Поэтому сперва я сделаю API и попрошу Вас изменить макрос ещё раз, надеюсь последний.
buniak_a_h wrote: Mon 12 May, 2025 02:44 У редактора есть "два вида" горизонтальных координат: исходные и экранные (расширение табуляций). Будете учитывать?
А какие нужны, чтобы подсветить образец в тексте?
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

Kadaner wrote: Tue 13 May, 2025 00:49 А какие нужны, чтобы подсветить образец в тексте?
А вот в описании editor.AddColor про это - ни гу-гу. Экспериментировать надо, а это довольно трудоёмко: надо выключить расширение табуляций и проверять, можно ли раскрасить часть табуляции. Да ещё этот параметр рулится не только far-настройками редактора, но и плагином ESC-24.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by John Doe »

Kadaner wrote: Tue 13 May, 2025 00:49 Для отрисовки я собираюсь спрашивать их у хозяина меню, т.е. у редактора
Это как?
https://t.me/FarManager — Telegram чат
User avatar
Kadaner
Posts: 70
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

Синхронизация редактора с результатами поиска (Show All)

Post by Kadaner »

buniak_a_h wrote: Tue 13 May, 2025 07:26 Экспериментировать надо, а это довольно трудоёмко: надо выключить расширение табуляций и проверять, можно ли раскрасить часть табуляции.
ОК, я постараюсь сделать, что могу.
John Doe wrote: Tue 13 May, 2025 09:40
Kadaner wrote: Tue 13 May, 2025 00:49 Для отрисовки я собираюсь спрашивать их у хозяина меню, т.е. у редактора
Это как?
Ну, все, кто хотят показывать что-нибудь в приклеенных колонках (сейчас только редактор), вместо вклеивания содержимого этих колонок в текст элемента меню, будут обязаны предоставить callback, который должен возвращать текст колонки для данного элемента меню. Как-то так.
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

Kadaner, есть народная мудрость: лучшее - враг хорошего. Зря Вы ей не руководствуетесь. Плюсов нет, а минусов - полно.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by John Doe »

Kadaner wrote: Wed 14 May, 2025 02:27 Ну, все, кто хотят показывать что-нибудь в приклеенных колонках (сейчас только редактор), вместо вклеивания содержимого этих колонок в текст элемента меню, будут обязаны предоставить callback, который должен возвращать текст колонки для данного элемента меню. Как-то так.
Вы имеете в виду что это даст экономию за счёт того, что координаты (в данном случае) не будут отображаться (как я понял написанное вами в прошлом сообщении)?

В принципе идея мне нравится, если действительно распространить её на все меню - всегда найдутся дополнительные данные которые захочется получить в макросе.

Но что касается именно данного меню, то я пожалуй предпочёл бы видеть координаты и в меню.
https://t.me/FarManager — Telegram чат
User avatar
Kadaner
Posts: 70
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

Синхронизация редактора с результатами поиска (Show All)

Post by Kadaner »

buniak_a_h wrote: Wed 14 May, 2025 04:39 Плюсов нет, а минусов - полно.
С точки зрения имплементации макроса разница не очень большая (хотя я думаю, что API со стабильным контрактом всегда лучше, чем извлечение данных из недокументированного источника). А вот с точки зрения внутреннего устройства Far'а, это будет более чистое решение, которое позволит расширять функциональность меню в разные интересные стороны.
John Doe wrote: Wed 14 May, 2025 09:32 Вы имеете в виду что это даст экономию за счёт того, что координаты (в данном случае) не будут отображаться
Координаты будут отображаться, но не будут частью строки элемента меню. Для демонстрации на экране их тоже будут генерировать на лету. А реальная экономия произойдёт, когда мне удастся не материализовывать строку меню вообще. Для отрисовки её тоже будут спрашивать у хозяина меню. В случае редактора, она уже существует, надо просто её напечатать. Остальные меню будут работать, как и сейчас. Это очень простая оптимизация, и, в моих сценариях, может сэкономить несколько мегабайт оперативки. Придётся, правда, повозиться, чтобы не сломать API получения текста элемента меню. У меня есть пара идей, как это сделать.
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

Kadaner wrote: Thu 15 May, 2025 02:05 А реальная экономия произойдёт, когда мне удастся не материализовывать строку меню вообще
Судя по всему, Вы планомерно движетесь от МЕНЮ к диалогу с DI_USERCONTROL-ем. Там тоже строки не хранятся, а формируются "на лету"
Post Reply

Return to “Обсуждение макросов”