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
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 »

Latest post of the previous page:

citRiks wrote: Sat 09 May, 2020 10:17 в связи последними проблем со строками,
Я в теме, посвящённой этой проблеме, опубликовал простой и надёжный выход. Бороться с Shmuel-ем и zg больше не буду. За оптимизацию отдельное спасибо jd.

Code: Select all

В _macroinit.lua вставил такой блок:
for _,v in ipairs({'len','match','find','gmatch','gsub','lower','upper'}) do
 local savedName = 'Utf8_'..v
 if not utf8[savedName] then
  utf8[savedName] = utf8[v]
  utf8[v] = function(s,...)
   return (utf8.utf8valid(s) and utf8[savedName] or string[v])(s,...)
  end
 end
end
Т.к. там всё правильно, то мы имеем дело с одним из следствий закона Мерфи: блок, предназначенный для защиты всей системы от повреждения, выходит из строя первым и выводит из строя всю систему.
Last edited by buniak_a_h on Sat 09 May, 2020 10:34, 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 »

P/S.
Тем более, что я не уверен, что замена utf8.len на string.len возможна и корректна везде. Я даже больше скажу! В данном случае (я имею в виду far_Menu.lua) нужна именно длина строки в символах (для определения ширины окна). Ну а если это не строка utf8, то как компромисс можно посчитать и в байтах. Будет слишком широко, но что ж делать…
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 »

Некорректную строку можно 'исправить'.
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: Sat 09 May, 2020 11:23 Некорректную строку можно 'исправить'.
Видимо, не в этой теме. Вас то не забанят, а мне оно надо?
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: Sat 09 May, 2020 12:46 а мне оно надо?
А вы напишите в "ту", видимо.
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: Sat 09 May, 2020 14:01
buniak_a_h wrote: Sat 09 May, 2020 12:46 а мне оно надо?
А вы напишите в "ту", видимо.
Уже и написал, и Вас процитировал.
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 »

У меня есть идея, реализуется вроде не очень сложно
Сделать поиск по файлам depth-first

Еще наверное надо бы чтобы пустая строка в маске файла трактовалась как "любой файл", или звездочка
Сейчас при этом пустом поле просто ничего не находится, что может смущать умы
Last edited by citRiks on Mon 20 Jul, 2020 21:32, edited 2 times 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 »

citRiks, я уже старенький, вашего молодёжного сленга не понимаю…
Что такое поиск по файлам depth-first? Ограничит глубину поиска при поиске по подкаталогам? Немного усложнит диалог задания поиска.
С пустой строкой - согласен.
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 »

buniak_a_h,
(ой, я имел в виду наоборт bredth first)

ну вопчем звиняюсь за сленг, а значит это вот что
Поиск в иерархиях (или деревьях, или графах) можно разделить на два типа:

1.) Depth first - Рекурсивно заходим в каждый попавшийся каталог (ветку) пока не исчерпали всю его глибину,
когдаисчерпали - только переходим к следующему.

2.) Breadth first - заходим во все каталоги первого уровня по очереди, не углублясь
Когда обшарили первый уровень - только тогда переходим ко второму по глубине и так далее, до исчерпания

Breadth first имеет больше смысла при поиске файлов, так нам обычно нужнее то что зарыто неглубоко, в первых уровнях.
Тем более что, может попасться первой глубокая папка с кучами мусорных файлов

Но, Depth First бесхитростнее, технически проще реализуется, так как не надо составлять список папок по уровням, а просто заходить рекурсивно во все что попадается.
Поэтому у нас везде есть Depth First, что не очень правильно
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 »

PS
buniak_a_h wrote: Mon 20 Jul, 2020 21:46 Ограничит глубину поиска при поиске по подкаталогам? Немного усложнит диалог задания поиска.
в обоих случаях поиск не должен быть ограничен по глубине,
поэтому в UI не обязатательно привносить задаваемую глубину, хотя наверное и имеет смысл в целом.
С другой стороны, да, в стандартном поиске можно задать ограничение на глубину захода,
и это действительно является некоторым примитивнейшим и неудобным способом делать "breadth first"
Last edited by citRiks on Mon 20 Jul, 2020 22:06, 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 »

citRiks, правильно ли я понял, что претензия - к порядку найденных файлов?
Ещё. Я для поиска использую (как ни странно ;-) ) far.RecursiveSearch. Я точно не смотрел, как сейчас, но раньше, по-моему, порядок сортировки не гарантировался. А это - ЖАЛЬ!
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

Фар есть инструмент, а не нянька. © 2009 DrKnS
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 »

buniak_a_h wrote: Mon 20 Jul, 2020 22:23 citRiks, правильно ли я понял, что претензия - к порядку найденных файлов?
неправильно :)
Смысл предложения - избавится от длинных ненужных поисков по закоулкам одной ветки,
когда искомое лежит в другой соседней ветке, уровнем ниже точки начала поиска.
Но при этом да, первыми появятся результаты первых уровней вложения,
что и является преимуществом.

Опять же, чще всего искать в закоулках "depth first" это потеря времени чаще всего,
а когда первыми появляются резултаты из первых уровней релевантность их скорее всего выше,
и найдя искомое тогда можно уже остановить поиск в закоулочных уровней.
far.RecursiveSearch. Я точно не смотрел, как сейчас, но раньше, по-моему, порядок сортировки не гарантировался. А это - ЖАЛЬ!
RecursiveSearch это же не UI, это чисто внутренняя кухня поиска.
Можно сортировать результаты, в промежуточной таблице как-нибудь, или уже при отображении.
RecursiveSearch хоть он и рекурсивный, можно же задать ему куда и в каком порядке ходить.
Да, в для breadth first это чуть сложнее реализовать, но других ваших подвигов не должно быть сложнее :)
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: Tue 21 Jul, 2020 19:39 Смысл предложения - избавится от длинных ненужных поисков по закоулкам одной ветки
Либо надо лимитировать уровень, либо порядок обхода на поиск не влияет: просматриваться будут все файлы. Или вы имеете в виду что юзер прервёт поиск, когда увидит, что что-то найдено? Так я, вроде, в процессе поиска результат не визуализирую …
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 »

buniak_a_h wrote: Tue 21 Jul, 2020 20:46 Или вы имеете в виду что юзер прервёт поиск, когда увидит, что что-то найдено? Так я, вроде, в процессе поиска результат не визуализирую …
Да, а может стоит возможно визуализировать?
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 »

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

Могу еще подкинуть кода на эту тему
Post Reply

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