Мне надоело после окончания поиска файлов, содержащих строки, открывать найденные файлы и повторять поиск (особенно, если поиск в файлах по регэкспу с помощь. плагинов, а поиск в файле настроен не через эти плагины. А также если имеется несколько строк, удовлетворяющих критерию поиска, и надо перейти на конкретную). В результате родился предлагаемый к обсуждению макрос.
Его отличия от поиска по CtrlF7:
Образец может быть регэкспом в формате LUA или Perl
В результатах показывается найденная строка (как GREP), а также 3 строки выше и ниже найденной
При переходе на выбранную строку редактор сразу позиционируется на неё.
Можно отметить несколько найденных строк (по одной в каждом файле), и тогда в редакторе будут открыты все отмеченные файлы (также с позиционированием на отмеченных строках)
Из результатов поиска можно удалять "мешающие" строки
Можно сворачивать - разворачивать строки, принадлежащие одному файлу
Окно поиска:
Процесс поиска:
Результат:
Обратите внимание: в результате строки файлов BaseLoad.pas b CHECK2TU.PAS "схлопнуты" (Condensed); несколько строк помечены. Внизу окна выведены 7 строк возле текущей (3 выше и 3 ниже)
Исправлена ошибка, в результате которой языковой файл находился только если язык либо ФАРа, либо помощи был Rus
В полной мере использована возможность указания в BreakKey Action; в результате ушла ошибка, в результате которой после удаления и предпросмотра файла пропадало "схлопывание" подразделов
Исправлен мелкий недочёт: можно было удалить строку-разделитель, а также вызвать редактор для этих строк
Добавлены хоткеи для разворачивания/сворачивания строк одного файла (Ctrl+Left, Ctrl+Right)
Добавлен хоткей для перехода к файлу в панели (Ctrl+G, Ctrl+Shift+G)
Добавлена возможность в настройках указать количество строк, выводимых в оне предпросмотра ДО и ПОСЛЕ найденной строки. Настройка вызывается или при помощи плагина Scripts Browser, либо из запроса на поиск, если выбрать "кодировку по расширению" и вызвать [ Настройка CP в зависимости от расширения ]
Версия 1.0.4
Исправлена ошибка (реакция на недокументированные кнопки)
Реализован переход на файл, если нажата CtrlG на разделителе
Название файлов в разделителе центрируется по окну, а не по самой длинной строке
В заголовок окна предпросмотра добавлено имя файла
Версия 1.0.5
Добавлена возможность поиска не только в папке на диске, но и на панели. Например, на временной панели. Если на панели - каталог, то поиск производится во вложенных каталогах.
При поиске на панели добавлена возможность ограничить поиск отмеченными файлами / папками.
Добавлена возможность поместить найденные файлы на временную панель, а при поиске на временной панели - наоборот, вычеркнуть файлы с временной панели.
Версия 1.0.6
Восстановлена возможность перетаскивания окна результатов поиска мышкой. Версия 1.0.7
Сделана возможность при узких экранах переносить элементы диалога на следующую строку
Сделана настройка на предпочтительную область поиска (диск/панель) (забыл отметить в новостях…)
Версия 1.0.8
Исправлена ошибка, проявлявшаяся при запуске макроса без настроек
Версия 1.0.9
Реализован поиск файлов не по маске, а по lua-выражению
Версия 1.0.10
Рефакторинг. Изменён полностью порядок просмотра файлов в разных кодировках. Для этого сначала весь файл читается в память. В результате сильно упрощена работа скрипта, алгоритм стал более понятным и прозрачным
Исправлена ошибка, проявлявшаяся в том, что при выборе кодировки «All» строки в предпросмотре дублировались.
При наличии у файла «Маркера последовательности байтов» (BOM), соответствующего кодировке UTF-8, он имеет наивысший приоритет перед остальными настройками
Версии 1.0.11, 1.0.12
Исправлена ошибка, появившаяся в версии 1.0.7 (пропала кнопка вызова настройки кодовой страницы в зависимости от расширения файла, а также количества строк предпросмотра). Изменения внесены только в языковой файл.
Добавлено расширение табуляций пробелами в строках предпросмотра. Функция взята из сообщения (отдельное спасибо John Doe)
Если активная панель видна, и она - файловая и не плагинновая, то в качестве "стартового" каталога теперь берётся не текущий системный каталог, а каталог, который отображён на панели.
При повторном вызове поиска в одной сессии (при неудаче поиска) стартовый каталог не изменяется.
Версия 1.0.13
Изменён вызов panel.GetPanelInfo в связи с изменившимися требованиями к параметрам
Версия 1.1.1
Нормализованы модули (сгруппированы по тематике). В результате изменены команды загрузки модулей
Добавлена возможность распахивать окно результатов на весь экран. Тулза повешена на кнопку F5
Версия 1.1.2
Добавлена возможность вызова настройки из меню Параметры плагинов (F9 -> Optons -> Plugins).
Добавлен вывод номеров строк (см. замечание от citRiks).
[/list] Версия 1.1.3
Восстановлена возможность использования в качестве маски файлов имени группы масок в виде #<<имя_маски>#. Работае только в том случае, если имя группы масок состоит только из букв, цифр и подчёрка.
Версия 1.1.4
В случае, если кодировка файла не соответствует той, что была указана в поисковом запросе (а в случае выбора кодировки All - той, в которой скрипт пытается читать файл) обработка файла в этой кодировке прекращается. Для варианта All происходит переход на следующую кодировку.
Версия 1.1.5
Изменён эвристический алгоритм автоматического распознавания кодировки. В некоторых случаях показывает значительно более устойчивый результат.
Добавлена возможность ограничить поиск образца первыми n строками
Версия 1.1.6
Исправлен английский языковой файл Find_n_GoEng.lng.
Версия 1.1.7
Добавлена настройка скрипта «Показывать результаты поиска в распахнутом окне».
return _G.BAX.BaxUtils
else -- Не модуль - для отладки
--------- Конец отладки ---------
return
end
end
Find & Go - Поиск с предпросмотром и переходом
Posted: Fri 01 Nov, 2019 21:56
by buniak_a_h
Я, оказывается, вообще модули в архив не включил. Сейчас перезалью...
Перезалил. Извините... Перепроверьте также и другие модули...
Find & Go - Поиск с предпросмотром и переходом
Posted: Fri 01 Nov, 2019 22:26
by citRiks
В TmpPanelUtils.lua последняя строка: return TmpPanelUtils,
в TabUtils.lua — return _G.BAX.TabUtils.
Find & Go - Поиск с предпросмотром и переходом
Posted: Fri 01 Nov, 2019 22:59
by buniak_a_h
citRiks wrote: ↑Fri 01 Nov, 2019 22:26
В TmpPanelUtils.lua последняя строка: return TmpPanelUtils,
в TabUtils.lua — return _G.BAX.TabUtils.
Да, не везёт мне... Удобно завести глобальную таблицу собственных процедур, но для поставки неудобно...
Наверно, это не мешает.
думаю, _G.BAX. в данном контексте мешать не будет: эту таблицу как раз этот модуль и делает.
А последней строки не было только в GetMsg - я эту функция прямо в _G.BAX записывал.
Лучше даже не привыкать к такому.
require'BAX' не сложно добавлять и в каждый скрипт.
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 02 Nov, 2019 09:20
by buniak_a_h
John Doe wrote: ↑Sat 02 Nov, 2019 09:09
Лучше даже не привыкать к такому.
require'BAX' не сложно добавлять и в каждый скрипт.
У меня есть макрос, который выводит меню выбора именованных полей таблицы. Т.е. я не запоминаю, как функции называются, а пишу, например, far.S, жму кнопочку и получаю список всех полей, начинающихся с "S". Ну очень удобно! Но этот макрос должен "видеть" таблицу. Т.е. она должна быть глобальной.
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 02 Nov, 2019 09:22
by buniak_a_h
John Doe, P/S. Особенно это актуально в связи с тем, что есть far, и есть Far - попробуйте запомнить что где!
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 02 Nov, 2019 11:15
by John Doe
buniak_a_h wrote: ↑Sat 02 Nov, 2019 09:20
Но этот макрос должен "видеть" таблицу. Т.е. она должна быть глобальной.
Не обязательно.
Макрос можно усовершенствовать.
buniak_a_h wrote: ↑Sat 02 Nov, 2019 09:22
есть far, и есть Far - попробуйте запомнить что где!
Это очевидно, но только если чётко уяснить разницу между LuaFAR и luamacro.
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 02 Nov, 2019 11:28
by buniak_a_h
John Doe wrote: ↑Sat 02 Nov, 2019 11:15
Это очевидно
Почему есть Panel.SetPath и panel.SetPanelDirectory (по функционалу - одно и то же)?
Почему у функций panel аргумент whatpanel (активная/пассивная) как раз наоборот от аналогичного параметра функций таблицы Panel?
Так и представляю себе две конкурирующие (соперничающие) бригады. Как в том анекдоте бригада левых перчаток победила в соц.соревновании
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 02 Nov, 2019 11:29
by buniak_a_h
John Doe wrote: ↑Sat 02 Nov, 2019 11:15
Макрос можно усовершенствовать.
Ниасилю...
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 02 Nov, 2019 11:38
by John Doe
buniak_a_h wrote: ↑Sat 02 Nov, 2019 11:28
Почему есть Panel.SetPath и panel.SetPanelDirectory (по функционалу - одно и то же)?
far - LuaFAR, почти прямая трансляция апи плагинов.
Far - luamacro, исходно же из старого макроязыка.
Исторически происхождение функций разное.
По сути в большинстве случаев следует отдавать предпочтение использованию LuaFAR (таблицы в нижнем регистре).
А luamacro (таблицы с заглавной буквы) сейчас в режиме минимальной поддержки, оставлено для совместимости.
Уверен в обратном.
Минимально изменение такое: в том месте, где макрос проверяет _G[keyword] условие можно дополнить своими личными предпочтениями.
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 02 Nov, 2019 12:32
by buniak_a_h
John Doe wrote: ↑Sat 02 Nov, 2019 11:41
Минимально изменение такое: в том месте, где макрос проверяет _G[keyword] условие можно дополнить своими личными предпочтениями.
Я сильно перемудрил, когда тот писал (не знал ещё про next), но:
1. он намного "умнее", чем просто список полей _G (позволяет составить список на любом уровне, а также ключевые слова языка)
2. даёт возможность регистронезависимого поиска (ну очень полезно!)
3. дает возможность поиска функции по началу имени во всех таблицах
Ну и...
Я не понял, что значит "свои личные предпочтения". Не добавлять же вручную все таблицы и поля, имеющиеся в модулях! Да и куда добавлять? В таблицу, которая видна как из модуля, так и из скрипта, составляющего список? Тогда чем эта таблица отличается от _G.BAX (ну назвал я её так!) А так все мои модули пишут "себя" в _G.BAX и все таблицы из модулей видны маросу, составляющему список. Ну или я не понял Вашей идеи.
Я видел аналогичный макрос тут на форуме, но мой мне нравится намного больше. Я когда-то публиковал свой, но его раскритиковали, я и не сопровождал.
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 02 Nov, 2019 13:30
by John Doe
buniak_a_h wrote: ↑Sat 02 Nov, 2019 12:32
Я не понял, что значит "свои личные предпочтения". Не добавлять же вручную все таблицы и поля, имеющиеся в модулях! Да и куда добавлять?