Find & Go - Поиск с предпросмотром и переходом

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

Find & Go - Поиск с предпросмотром и переходом

Post by buniak_a_h »

Мне надоело после окончания поиска файлов, содержащих строки, открывать найденные файлы и повторять поиск (особенно, если поиск в файлах по регэкспу с помощь. плагинов, а поиск в файле настроен не через эти плагины. А также если имеется несколько строк, удовлетворяющих критерию поиска, и надо перейти на конкретную). В результате родился предлагаемый к обсуждению макрос.
Его отличия от поиска по CtrlF7:
  1. Образец может быть регэкспом в формате LUA или Perl
  2. В результатах показывается найденная строка (как GREP), а также 3 строки выше и ниже найденной
  3. При переходе на выбранную строку редактор сразу позиционируется на неё.
  4. Можно отметить несколько найденных строк (по одной в каждом файле), и тогда в редакторе будут открыты все отмеченные файлы (также с позиционированием на отмеченных строках)
  5. Из результатов поиска можно удалять "мешающие" строки
  6. Можно сворачивать - разворачивать строки, принадлежащие одному файлу
Окно поиска:
Image
Процесс поиска:
Image
Результат:
Image
Обратите внимание: в результате строки файлов BaseLoad.pas b CHECK2TU.PAS "схлопнуты" (Condensed); несколько строк помечены. Внизу окна выведены 7 строк возле текущей (3 выше и 3 ниже)
Find_n_Go.1_1_7.7z
(31.34 KiB) Downloaded 27 times
Last edited by buniak_a_h on Wed 07 Feb, 2024 18:16, edited 31 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Find & Go - Поиск с предпросмотром и переходом

Post by citRiks »

Latest post of the previous page:

Тут модуль для поиска в глубину или ширину
https://github.com/chen0040/lua-graph
Про графы, "дерево" - это частный случай графа

Могу еще подкинуть кода на эту тему
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Find & Go - Поиск с предпросмотром и переходом

Post by buniak_a_h »

citRiks wrote: Wed 22 Jul, 2020 06:12 Да, а может стоит возможно визуализировать?
Вот это я точно не буду делать
dmitrik
Posts: 124
Joined: Mon 30 Nov, 2009 21:58
Has thanked: 1 time
Been thanked: 4 times

Find & Go - Поиск с предпросмотром и переходом

Post by dmitrik »

В свежем Far'е 5665 x86 на UTF-8-файлах вот такая ошибка вываливается:
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Find & Go - Поиск с предпросмотром и переходом

Post by citRiks »

dmitrik,
это utf8-related, проверьте что вы сделали по этой ссылке в этой же теме:
viewtopic.php?p=161013#p161013
помогло?
dmitrik
Posts: 124
Joined: Mon 30 Nov, 2009 21:58
Has thanked: 1 time
Been thanked: 4 times

Find & Go - Поиск с предпросмотром и переходом

Post by dmitrik »

citRiks wrote: Tue 15 Sep, 2020 13:14помогло?
Пока нет, поскольку у меня вообще нет файла _macroinit.lua. Я так понимаю, что я должен его создать, но где именно?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Find & Go - Поиск с предпросмотром и переходом

Post by buniak_a_h »

dmitrik wrote: Tue 15 Sep, 2020 15:24 Я так понимаю, что я должен его создать, но где именно?
%FarHome%\Encyclopedia\Decompiled\macroapi_manual.ru\94.html wrote: Для каждого дерева rootN первым всегда исполняется макрофайл
rootN\_macroinit.lua, если такой файл существует. Порядок исполнения прочих макрофайлов в данном дереве не определён
Т.е., в любом подкаталоге %FARPROFILE%\Macros\SCripts. Я лично написал прямо в него.
dmitrik
Posts: 124
Joined: Mon 30 Nov, 2009 21:58
Has thanked: 1 time
Been thanked: 4 times

Find & Go - Поиск с предпросмотром и переходом

Post by dmitrik »

Помогли исправления двух файлов, выложенные в архиве тремя постами выше вашего, но мне всё равно любопытно, поскольку с LUA я дела не имел.

Я правильно понял, что в новой версии Far в движке LUA изменились сигнатуры функций len, match, find, gmatch, gsub, lower (как раз используется в Find & Go) и upper, и вы там исправляете несовместимость старых скриптов хаком "на лету"? Т.е., если я создам _macroinit.lua и положу его и в %FARPROFILE%\Macros\scripts, и в %FARPROFILE%\Macros\modules, то он будет отрабатывать перед исполнением любого макроса в этих папках и их подпапках и параметры вызовов этих функций для любого из них?
Last edited by dmitrik on Wed 16 Sep, 2020 07:00, edited 2 times in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Find & Go - Поиск с предпросмотром и переходом

Post by John Doe »

dmitrik wrote: Wed 16 Sep, 2020 06:59 и вы там исправляете несовместимость старых скриптов хаком "на лету"
Не стоит так делать.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Find & Go - Поиск с предпросмотром и переходом

Post by buniak_a_h »

John Doe wrote: Wed 16 Sep, 2020 07:32 Не стоит так делать.
Стоит! Если подсистема контроля рушит контролируемую систему, приходится её обманывать. Вместо того, чтоб починить, боретесь "за чистоту кода". Ведь было же нормально! Взяли и всё испортили, перейдя на новую версию UFT8
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Find & Go - Поиск с предпросмотром и переходом

Post by buniak_a_h »

dmitrik wrote: Wed 16 Sep, 2020 06:59 Помогли исправления двух файлов, выложенные в архиве тремя постами выше вашего
Я не понял, в каком архиве… Тремя постами выше - ссылка на _macroinit.lua, а там нет ни архива, ни двух файлов. Текст скрипта прямо в посте…
dmitrik wrote: Wed 16 Sep, 2020 06:59 Я правильно понял…
Новая версия библиотеки utf-8 "критично" относится к некорректности строки (т.е. если строка - не UTF-строка). И, хотя на самом деле она в ранней версии библиотеки обрабатывалась этими функциями корректно (и даже правильно! Т.е. соответственно интуитивному ожиданию), в новой версии при попытке применить перечисленные функции к не-utf строкам вызывает exception. Я сделал "заплатку": подменил функции из таблицы utf8 на костылик: проверяю, utf-валидные ли строи, передаваемые в эти функции, и если нет - вызываю string-функции, работающие с однобайтовыми символами. Иногда это приводит к неожиданным результатам (функции len, match возвращают позиции в байтах, а не символах), но, как правило, это всё же лучше, чем вылет. И, кстати, если строка utf-валидная, то вызывается предыдущая (стандартная) функция из исходной таблицы utf8. К чему плохому, кроме хорошего, это может привести, я не знаю. Убедить авторов в том, что "нынче не то что давеча" мне не удалось - вот и пришлось придумывать заплатку.
Last edited by buniak_a_h on Wed 16 Sep, 2020 08:23, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Find & Go - Поиск с предпросмотром и переходом

Post by buniak_a_h »

dmitrik wrote: Wed 16 Sep, 2020 06:59 Помогли исправления двух файлов, выложенные в архиве тремя постами выше вашего
Я понял! Архив с исправлениями от citRiks-а. На самом деле он там явно заменяет строка:len() на string.len(строка) и т.п. . Т.е. то, что делает "заплатка", только на постоянной основе. И если в выражении w = math.max(w, string.len(v.text)+2) это, наверно, и правильно, то в дальнейшем значение переменной w будет некорректным (каждая буква кириллицы учитывается как два байта). Ну и это - тоже "заплатка", только "локальная"
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

Find & Go - Поиск с предпросмотром и переходом

Post by LAT »

buniak_a_h wrote: Wed 16 Sep, 2020 08:22Я сделал "заплатку": подменил функции из таблицы utf8 на костылик: проверяю, utf-валидные ли строи, передаваемые в эти функции, и если нет - вызываю string-функции, работающие с однобайтовыми символами. Иногда это приводит к неожиданным результатам (функции len, match возвращают позиции в байтах, а не символах), но, как правило, это всё же лучше, чем вылет. И, кстати, если строка utf-валидная, то вызывается предыдущая (стандартная) функция из исходной таблицы utf8. К чему плохому, кроме хорошего, это может привести, я не знаю.
Ваши скрипты будут работать только у тех, кто исправит _macroinit, а тогда спецэффекты неожиданных результатов могут сказаться на работе чужих скриптов. Ваше недовольство новой версией luautf8 разделяю. Но, имхо, лучше всё-таки исправить скрипт, согласно новой библиотеке, какой бы неудобной она ни казалась, чем вынуждать всех желающих вносить изменения в _macroinit.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Find & Go - Поиск с предпросмотром и переходом

Post by buniak_a_h »

LAT wrote: Wed 16 Sep, 2020 08:58 спецэффекты неожиданных результатов могут сказаться на работе чужих скриптов.
На самом деле есть только два варианта: либо вылет, либо использование string. Отсюда вывод: если спецэффекты от _macroinit скажутся на работе других скриптов, то без _macroinit эти скрипты работать вообще не будут! Поэтому ничего плохого в этом _macroinit-е нету.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Find & Go - Поиск с предпросмотром и переходом

Post by John Doe »

buniak_a_h wrote: Wed 16 Sep, 2020 07:37 Стоит! Если подсистема контроля рушит контролируемую систему, приходится её обманывать.
Обманывайте себе на здоровье. Если понимаете что делаете и зачем.

Но рекомендовать это другим пользователям как универсальное решение ни в коем случае нельзя.
buniak_a_h wrote: Wed 16 Sep, 2020 09:08 На самом деле есть только два варианта: либо вылет, либо использование string.[...]
Это даже комментировать не буду. Всё уже обсуждалось в соответствующей теме.
Last edited by John Doe on Wed 16 Sep, 2020 10:01, edited 1 time in total.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Find & Go - Поиск с предпросмотром и переходом

Post by buniak_a_h »

John Doe wrote: Wed 16 Sep, 2020 09:59 Это даже комментировать не буду. Всё уже обсуждалось в соответствующей теме.
А я не Вам писал…
dmitrik
Posts: 124
Joined: Mon 30 Nov, 2009 21:58
Has thanked: 1 time
Been thanked: 4 times

Find & Go - Поиск с предпросмотром и переходом

Post by dmitrik »

John Doe wrote: Wed 16 Sep, 2020 07:32 Не стоит так делать.
Да, сомнительная практика. Поэтому и предпочел изменения скрипта от citRiks.
Post Reply

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