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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 2517
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 308 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_3.7z
(27.82 KiB) Downloaded 30 times
Last edited by buniak_a_h on Mon 12 Oct, 2020 22:46, edited 27 times in total.
buniak_a_h
Posts: 2517
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 308 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.
buniak_a_h
Posts: 2517
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 308 times
Contact:

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

Post by buniak_a_h »

P/S.
Тем более, что я не уверен, что замена utf8.len на string.len возможна и корректна везде. Я даже больше скажу! В данном случае (я имею в виду far_Menu.lua) нужна именно длина строки в символах (для определения ширины окна). Ну а если это не строка utf8, то как компромисс можно посчитать и в байтах. Будет слишком широко, но что ж делать…
User avatar
John Doe
Бюрократ
Posts: 13055
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 318 times

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

Post by John Doe »

Некорректную строку можно 'исправить'.
https://t.me/FarManager — Telegram чат
buniak_a_h
Posts: 2517
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 308 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Sat 09 May, 2020 11:23 Некорректную строку можно 'исправить'.
Видимо, не в этой теме. Вас то не забанят, а мне оно надо?
User avatar
John Doe
Бюрократ
Posts: 13055
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 40 times
Been thanked: 318 times

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

Post by John Doe »

buniak_a_h wrote: Sat 09 May, 2020 12:46 а мне оно надо?
А вы напишите в "ту", видимо.
https://t.me/FarManager — Telegram чат
buniak_a_h
Posts: 2517
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 308 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 а мне оно надо?
А вы напишите в "ту", видимо.
Уже и написал, и Вас процитировал.
citRiks
Posts: 1272
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 380 times
Been thanked: 73 times

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

Post by citRiks »

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

Еще наверное надо бы чтобы пустая строка в маске файла трактовалась как "любой файл", или звездочка
Сейчас при этом пустом поле просто ничего не находится, что может смущать умы
Last edited by citRiks on Mon 20 Jul, 2020 21:32, edited 2 times in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2517
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 308 times
Contact:

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

Post by buniak_a_h »

citRiks, я уже старенький, вашего молодёжного сленга не понимаю…
Что такое поиск по файлам depth-first? Ограничит глубину поиска при поиске по подкаталогам? Немного усложнит диалог задания поиска.
С пустой строкой - согласен.
citRiks
Posts: 1272
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 380 times
Been thanked: 73 times

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

Post by citRiks »

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

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

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

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

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

Но, Depth First бесхитростнее, технически проще реализуется, так как не надо составлять список папок по уровням, а просто заходить рекурсивно во все что попадается.
Поэтому у нас везде есть Depth First, что не очень правильно
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1272
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 380 times
Been thanked: 73 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.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2517
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 308 times
Contact:

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

Post by buniak_a_h »

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

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

Post by HaRT »

Фар есть инструмент, а не нянька. © 2009 DrKnS
citRiks
Posts: 1272
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 380 times
Been thanked: 73 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 это чуть сложнее реализовать, но других ваших подвигов не должно быть сложнее :)
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2517
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 308 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Tue 21 Jul, 2020 19:39 Смысл предложения - избавится от длинных ненужных поисков по закоулкам одной ветки
Либо надо лимитировать уровень, либо порядок обхода на поиск не влияет: просматриваться будут все файлы. Или вы имеете в виду что юзер прервёт поиск, когда увидит, что что-то найдено? Так я, вроде, в процессе поиска результат не визуализирую …
citRiks
Posts: 1272
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 380 times
Been thanked: 73 times

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

Post by citRiks »

buniak_a_h wrote: Tue 21 Jul, 2020 20:46 Или вы имеете в виду что юзер прервёт поиск, когда увидит, что что-то найдено? Так я, вроде, в процессе поиска результат не визуализирую …
Да, а может стоит возможно визуализировать?
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1272
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 380 times
Been thanked: 73 times

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

Post by citRiks »

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

Могу еще подкинуть кода на эту тему
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Post Reply

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