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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 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_4.7z
(28.94 KiB) Downloaded 49 times
Last edited by buniak_a_h on Wed 10 Mar, 2021 19:29, edited 28 times in total.
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

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

Post by buniak_a_h »

Latest post of the previous page:

LAT wrote: Sat 09 Jan, 2021 01:01 Вы опять спросили
Я??? Вроде, не спрашивал…
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

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

Post by citRiks »

Last edited by HaRT on Sat 09 Jan, 2021 20:52, edited 1 time in total.
Reason: Спрятан офтопик
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Sat 09 Jan, 2021 17:45 Наверное оптимально заменять DLL на другую (прежнюю)
Увы! Там были ещё худшие ошибки! Например:
lua:=('abc'):match('.*()$'),('абв'):match('.*()$')
По идее, это должно быть тоже самое, что
lua:=('abc'):len()+1,('абв'):len()+1
Сейчас это - так. На старой библиотеке - нет!!! Причём, я бы понял, если бы выражение над 'абв' отличалось от него же над 'abc', но совпадало с len()+1 (типа одинаковая интерпретация терминов "позиция" и "длина"). Но len() выдавало "правильное" (на мой взгляд) значение, а match - совсем туфту. Так что и не вернуться.
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

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

Post by aflexus »

buniak_a_h, English для вашего Find_n_GoEng - https://www.upload.ee/files/12979038/Fi ... ng.7z.html
Глючит периодически, но в целом удобно. Благодарю
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

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

Post by buniak_a_h »

aflexus, спасибо.
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

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

Post by aflexus »

Это как-то лечится?

Code: Select all

...\Far3\Profile\Macros\scripts\BAX\Find_n_Go\Find_n_Go.lua:564: invalid UTF-8 code
 stack traceback:
    [C]: in function 'lower'
    ...\Far3\Profile\Macros\scripts\BAX\Find_n_Go\Find_n_Go.lua:564: in function 'SearchFunc'
    ...\Far3\Profile\Macros\scripts\BAX\Find_n_Go\Find_n_Go.lua:644: in function 'Find_n_Go'
    ...\Far3\Profile\Macros\scripts\BAX\Find_n_Go\Find_n_Go.lua:1076: in function <...\Far3\Profile\Macros\scripts\BAX\Find_n_Go\Find_n_Go.lua:1073>
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

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

Post by buniak_a_h »

aflexus wrote: Wed 10 Mar, 2021 15:22 Это как-то лечится?
Ох, опять вылезло …
Лечится. Меня сильно ругают за мой метод лечения. Чтобы вылечить именно этот скрипт, мне нужно:
(а) как Вы настроили поиск (меня интересует переключатель кодировки)
(б) файл, на котором вылетает (если не секретный). Ну или хотя бы в какой он кодировке и особенности (есть ли кириллица, есть ли BOM). В принципе мне присылали, я постараюсь найти, но для ускорения, если возможно, дайте эти вещи…
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

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

Post by buniak_a_h »

aflexus,
1. замените в строке 639 l на ll
2. замените строку 644 на: local l = ToUTFFuncs[iCP](ll)
3.после строки 644 вставьте строку: if not utf8.utf8valid(l) then break end -- Не угадали с кодировкой. Просто прекращаю обработку файла в iCP-й кодировке
Last edited by buniak_a_h on Wed 10 Mar, 2021 18:54, edited 1 time in total.
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

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

Post by aflexus »

buniak_a_h, все настройки по-дефолту.
(а) поиск во всех файлах (маска *.*), простая строка, исппользуя ВСЕ кодировки.
(б) да вроде не секретный, но там пачка файлов в папке (и бинарные в том числе) и на каком вылетает не знаю. И да они в разных кодировках: ANSI, UTF8, UTF8 with BOM и пр.

Немного потестировал - вылетает на ansi-файлах. utf-8 - полет нормальный.

И лечение работает :) Спасибо! Теперь ищет во всех.
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

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

Post by buniak_a_h »

Версия 1.1.4
  1. В случае, если кодировка файла не соответствует той, что была указана в поисковом запросе (а в случае выбора кодировки All - той, в которой скрипт пытается читать файл) обработка файла в этой кодировке прекращается. Для варианта All происходит переход на следующую кодировку.
  2. Добавлен английский языковой файл (спасибо aflexus-у)
dmitrik
Posts: 70
Joined: Mon 30 Nov, 2009 21:58
Been thanked: 1 time

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

Post by dmitrik »

buniak_a_h wrote: Wed 10 Mar, 2021 19:34 Версия 1.1.4
  1. В случае, если кодировка файла не соответствует той, что была указана в поисковом запросе (а в случае выбора кодировки All - той, в которой скрипт пытается читать файл) обработка файла в этой кодировке прекращается. Для варианта All происходит переход на следующую кодировку.
  2. Добавлен английский языковой файл (спасибо aflexus-у)
У меня вылетает:

Code: Select all

...\Work\Profile\Macros\scripts\BAX\Find_n_Go\Find_n_Go.lua:676: bad argument #2 to 'max' (number expected, got nil)
stack traceback:
   [C]: in function 'max'
   ...\Work\Profile\Macros\scripts\BAX\Find_n_Go\Find_n_Go.lua:676: in function 'Find_n_Go'
   ...\Work\Profile\Macros\scripts\BAX\Find_n_Go\Find_n_Go.lua:1077: in function <...\Work\Profile\Macros\scripts\BAX\Find_n_Go\Find_n_Go.lua:1074>
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

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

Post by buniak_a_h »

Экспериментально!!!
Я сделал какой-то идиотский алгоритм определения кодировки файла. У меня пока не удаётся запутать, кроме случая, когда некоторые строки в кодировке OEM, а некоторые - в ANSI. Ну или в принципе кодировку не определить (не текстовый файл). У меня очень большая просьба всем заинтересованным: проверьте, пожалуйста! Переключатель кодировки - на All (хотя теперь, по-моему, это значения не имеет)
Скрипт - во вложении. Если будет всё хорошо, то оформлю и выложу позже.
P/S. Если проверите - не побрезгуйте, напишите результат при любом результате.
Find_n_Go.lua.7z
Для тестирования. Экспериментально.
(12.49 KiB) Downloaded 22 times
dmitrik
Posts: 70
Joined: Mon 30 Nov, 2009 21:58
Been thanked: 1 time

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

Post by dmitrik »

buniak_a_h wrote: Sun 14 Mar, 2021 01:27 Если проверите - не побрезгуйте, напишите результат при любом результате.
У меня всё отлично работает! 👍
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

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

Post by buniak_a_h »

dmitrik, спасибо. Ещё пару дней подожду, и если не будет нареканий - выложу в основной.
aflexus
Posts: 74
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 23 times
Been thanked: 1 time

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

Post by aflexus »

buniak_a_h, работает отлично, но вопрос в другом - есть ли теперь смысл в опциях выбора кодировки при поиске? Если раньше, при указании в какой кодировке искать, скрипт искал в ней (ну или так казалось по крайней мере), то теперь вне зависимости от установки (All, Auto, UTF-8, OEM, ANSI...) ищет во всех :)
buniak_a_h
Posts: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 times
Contact:

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

Post by buniak_a_h »

aflexus wrote: Sun 14 Mar, 2021 13:22 buniak_a_h, работает отлично, но вопрос в другом - есть ли теперь смысл в опциях выбора кодировки при поиске? Если раньше, при указании в какой кодировке искать, скрипт искал в ней (ну или так казалось по крайней мере), то теперь вне зависимости от установки (All, Auto, UTF-8, OEM, ANSI...) ищет во всех :)
  1. Эти опции пока оставлены "на всякий случай". Планирую убать.
  2. Я попробовал сделать одну строку из кириллицы в кодировке ANSI, а другую - в кодировке OEM. Ну и где-то между ними искомая строка, которая тоже в кириллице. Прога должна была запутаться и применить "старую" логику. Пока не получилось запутать. Получилось только если строки в разных кодировках "слепить" в одну. И ещё включался старый механизм при попытке поиска в вообще не-текстовом файле (*.7z). На такой случай я оставил отладочный вывод (OutputDebugString); если у Вас есть Debug Viewer, то было бы интересно узнать, включается ли "старый механизм). :-)
  3. На самом деле там не совсем "все" кодировки проверяются, а нечто типа адаптивной логики: если хоть на одной строке однозначно установлена кодировка, то остальные строки рассматриваются только в этой кодировке. "Однозначно" - это значит, что (а) не UTF-8; (б) при интерпретации как OEM в результирующей строке появляются "кракозябры", которых нет при интерпретации как в ANSI и наоборот.
    Именно поэтому в файле, состоящем из строк в обеих кодировках результат может зависеть от порядка строк. Но я пока не понимаю, почему у меня всё равно ищет. Просто разбираться неохота ( «работает - вот и не трожь» :-) )
  4. Я думал, что, возможно, тормоза будут неприемлемые - тогда, если юзер точно знает кодировку, это может дать возможность ускорить. Пока, правда, особого замедления не заметил. Так как-то…
Post Reply

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