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.
dmitrik
Posts: 124
Joined: Mon 30 Nov, 2009 21:58
Has thanked: 1 time
Been thanked: 4 times

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

Post by dmitrik »

Latest post of the previous page:

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

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. К чему плохому, кроме хорошего, это может привести, я не знаю. Убедить авторов в том, что "нынче не то что давеча" мне не удалось - вот и пришлось придумывать заплатку.
Лучше, все-таки скрипт исправить, чем хак с сайд эффектами применять. Без крайней необхомости это — излишний риск, ИМХО.
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 11:07 Лучше, все-таки скрипт исправить, чем хак с сайд эффектами применять. Без крайней необхомости это — излишний риск, ИМХО.
1. Когда это началось, посыпалось много («не много, а очень много» ©Чубайс) скриптов, в том числе не моих.
2. Скрипт сделан так, что либо результаты совпадают как было бы без него, либо работает, когда без него - крах.Разница - пара лишних микросекунд и лишний вызов (лишняя строка в бэктрейсе). Не смог я придумать, чем это может помешать!
3. Лично я дополнил логирование случаев, когда бы без скрипта был бы вылет. Чтобы не заплатки плодить, а искать настоящую причину (откуда берётся невалидная utf-строка). Увы, у меня с тех пор, как сделал логирование, ошибок не возникало.
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

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

Post by LAT »

Last edited by HaRT on Wed 16 Sep, 2020 16:31, edited 1 time in total.
Reason: Спрятан офтопик
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 »

на всякий случай еще раз повторю за А. Буняк,
что для УТФ-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,
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 16 Sep, 2020 16:54 есть вариант взять DLL прежней УТФ-библитеки
Покинувший нас Shmuel предлагал заменить (вернуться) желающим. Если б можно было "на лету" переключаться с одной библиотеки (DLL) на другую, я бы, конечно, так и сделал.
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 »

citRiks wrote: Wed 16 Sep, 2020 16:54 будут валиться при всяких some_string_var:len(..), some_string_var:match(..)
Сейчас при написании скриптов достаточно пользоваться довольно простым правилом: применять юникодные функции только для заведомо юникодных строк.
А в случаях когда это не гарантированно (например чтение из файла) - проверять валидность строки.
Да, приходится думать чуть больше, но зато позволяет дополнительно отловить определённый класс ошибок.
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 »

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: 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 чат
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 »

Вышла версия 1.1.3 . Восстановлена возможность указания в качестве маски файлов одного имени файловых масок (например, <arc>). Возможность было утеряна, когда я сделал фишку: указывать в угловых скобках (<…>) выражение над именем файла.
skipik
Posts: 318
Joined: Wed 03 Jun, 2015 15:24
Has thanked: 67 times
Been thanked: 29 times

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

Post by skipik »

buniak_a_h,
Скажите, пожалуйста, это можно поправить?
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 »

skipik wrote: Fri 08 Jan, 2021 21:26 Скажите, пожалуйста, это можно поправить?
См. тут. Хотя разработчики против такого выхода, я написал и с тех пор не имею проблем с UTF8. Увы, другого способа я до сих пор не знаю.
P/S. А главное - я не вижу никаких отрицательных последствий, кроме нарушения "чистоты кода"
Last edited by buniak_a_h on Fri 08 Jan, 2021 21:56, edited 1 time in total.
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: Fri 08 Jan, 2021 21:54См. тут. Хотя разработчики против такого выхода, я написал и с тех пор не имею проблем с UTF8. Увы, другого способа я до сих пор не знаю.
Вроде вот: viewtopic.php?p=161010#p161010
buniak_a_h wrote: Fri 08 Jan, 2021 21:54P/S. А главное - я не вижу никаких отрицательных последствий, кроме нарушения "чистоты кода"
Ну ... Вашим скриптом не смогут пользоваться люди, которые не узнают/не захотят/не смогут использовать Ваш подход с подменой. Может, для Вас это и не отрицательное последствие.
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 »


Тема надоела. Вы в этой конференции уже высказывались. Моё мнение не изменилось. Изменится, если кто-нить приведёт пример реального отрицательного эффекта. Было одно: что ошибка в данных исправляется незаметно для юзера. Этот минус легко решается логированием, что у меня делается.
Last edited by buniak_a_h on Sat 09 Jan, 2021 00:44, edited 1 time in total.
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: Sat 09 Jan, 2021 00:40Вы в этой конференции уже высказывались.
Вы опять спросили - я опять высказался.
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: Sat 09 Jan, 2021 01:01 Вы опять спросили
Я??? Вроде, не спрашивал…
Post Reply

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