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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 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 18 times
Last edited by buniak_a_h on Mon 12 Oct, 2020 22:46, edited 27 times in total.
dmitrik
Posts: 42
Joined: Mon 30 Nov, 2009 21:58
Been thanked: 1 time

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

Post by dmitrik »

Latest post of the previous page:

John Doe wrote: Wed 16 Sep, 2020 07:32 Не стоит так делать.
Да, сомнительная практика. Поэтому и предпочел изменения скрипта от citRiks.
dmitrik
Posts: 42
Joined: Mon 30 Nov, 2009 21:58
Been thanked: 1 time

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

Post by dmitrik »

buniak_a_h wrote: Wed 16 Sep, 2020 08:22 Новая версия библиотеки utf-8 "критично" относится к некорректности строки (т.е. если строка - не UTF-строка). И, хотя на самом деле она в ранней версии библиотеки обрабатывалась этими функциями корректно (и даже правильно! Т.е. соответственно интуитивному ожиданию), в новой версии при попытке применить перечисленные функции к не-utf строкам вызывает exception. Я сделал "заплатку": подменил функции из таблицы utf8 на костылик: проверяю, utf-валидные ли строи, передаваемые в эти функции, и если нет - вызываю string-функции, работающие с однобайтовыми символами. Иногда это приводит к неожиданным результатам (функции len, match возвращают позиции в байтах, а не символах), но, как правило, это всё же лучше, чем вылет. И, кстати, если строка utf-валидная, то вызывается предыдущая (стандартная) функция из исходной таблицы utf8. К чему плохому, кроме хорошего, это может привести, я не знаю. Убедить авторов в том, что "нынче не то что давеча" мне не удалось - вот и пришлось придумывать заплатку.
Лучше, все-таки скрипт исправить, чем хак с сайд эффектами применять. Без крайней необхомости это — излишний риск, ИМХО.
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

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

Post by buniak_a_h »

dmitrik wrote: Wed 16 Sep, 2020 11:07 Лучше, все-таки скрипт исправить, чем хак с сайд эффектами применять. Без крайней необхомости это — излишний риск, ИМХО.
1. Когда это началось, посыпалось много («не много, а очень много» ©Чубайс) скриптов, в том числе не моих.
2. Скрипт сделан так, что либо результаты совпадают как было бы без него, либо работает, когда без него - крах.Разница - пара лишних микросекунд и лишний вызов (лишняя строка в бэктрейсе). Не смог я придумать, чем это может помешать!
3. Лично я дополнил логирование случаев, когда бы без скрипта был бы вылет. Чтобы не заплатки плодить, а искать настоящую причину (откуда берётся невалидная utf-строка). Увы, у меня с тех пор, как сделал логирование, ошибок не возникало.
LAT
Posts: 326
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 19 times
Been thanked: 34 times

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

Post by LAT »

Last edited by HaRT on Wed 16 Sep, 2020 16:31, edited 1 time in total.
Reason: Спрятан офтопик
citRiks
Posts: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

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

Post by citRiks »

на всякий случай еще раз повторю за А. Буняк,
что для УТФ-8 string.len() действительно возвращает двойной размер для УТФных буков.
Т.е., если смешанная строка с УТФными и не-УТФными символами, то длина ее будет:
(кол-во УТФ-ных буков) * 2 + (кол-во не-УТФ-ных буков) * 1
что, в общем, не дает бездумно везде ставить string.len(..)
и что, в общем, говорит в пользу предложенного А. Буняк.
для меня дико что разработчик УТФ-бибилиотеки (это не есть "стандартная" библиотека)
не предусмотрел задания уровня терпимости к неправильным УТФ8.
Для меня проблема с новой УТФ-библиотекой даже не в том что ломается там то и се в ФАРовских скриптах,
а в том что если брать невинные луа-скрипты которые "везде работают",
т.е. те которые придуманы не ФАроводами и не для ФАРа,
то они тоже будут валиться при всяких some_string_var:len(..), some_string_var:match(..), итд.
Например debugger для ЗБС, корорый нужно класть в ФАР.
Я то его чинил "своим" методом, и вроде починился,
но сейчас думаю что надо найти свои починки и правильнее будет переставить их на починку от А. Буняк.
далее, не обязательно починку "от А. Буняк" ставить в _macroinit.lua.
Можно задать ее для конкретных скриптов/функций через setfenv,
и наверное еще какими-то способами.
Хотя конечно через _macroinit.lua проще.
Еще, для справки, есть вариант взять DLL прежней УТФ-библитеки, положить его в %FarHome%.
В соответсвующей теме Шмуэль любезно предоставил этот вариант,
подробностей которого я не помню, лучше там и уточнить.
Может этот вариант и наиболее правильным будет.

LAT,
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

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

Post by buniak_a_h »

citRiks wrote: Wed 16 Sep, 2020 16:54 есть вариант взять DLL прежней УТФ-библитеки
Покинувший нас Shmuel предлагал заменить (вернуться) желающим. Если б можно было "на лету" переключаться с одной библиотеки (DLL) на другую, я бы, конечно, так и сделал.
User avatar
John Doe
Бюрократ
Posts: 12896
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

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

Post by John Doe »

citRiks wrote: Wed 16 Sep, 2020 16:54 будут валиться при всяких some_string_var:len(..), some_string_var:match(..)
Сейчас при написании скриптов достаточно пользоваться довольно простым правилом: применять юникодные функции только для заведомо юникодных строк.
А в случаях когда это не гарантированно (например чтение из файла) - проверять валидность строки.
Да, приходится думать чуть больше, но зато позволяет дополнительно отловить определённый класс ошибок.
https://t.me/FarManager — Telegram чат
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

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

Post by buniak_a_h »

User avatar
John Doe
Бюрократ
Posts: 12896
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

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

Post by John Doe »

buniak_a_h wrote: Thu 17 Sep, 2020 11:38 Ваш luacheck_editor.lua стал валиться при проверке заведомо utf8-валидных текстов
Неверно.
buniak_a_h wrote: Thu 17 Sep, 2020 11:38Вы сами посоветовали указать ConvertToAnsi = false.
Да, и после этого они стали юникодными, и ошибка пропала.
https://t.me/FarManager — Telegram чат
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

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

Post by buniak_a_h »

Вышла версия 1.1.3 . Восстановлена возможность указания в качестве маски файлов одного имени файловых масок (например, <arc>). Возможность было утеряна, когда я сделал фишку: указывать в угловых скобках (<…>) выражение над именем файла.
Post Reply

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