Мне надоело после окончания поиска файлов, содержащих строки, открывать найденные файлы и повторять поиск (особенно, если поиск в файлах по регэкспу с помощь. плагинов, а поиск в файле настроен не через эти плагины. А также если имеется несколько строк, удовлетворяющих критерию поиска, и надо перейти на конкретную). В результате родился предлагаемый к обсуждению макрос.
Его отличия от поиска по 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
Добавлена настройка скрипта «Показывать результаты поиска в распахнутом окне».
Find & Go - Поиск с предпросмотром и переходом
Posted: Sun 15 Dec, 2019 10:51
by citRiks
Latest post of the previous page:
buniak_a_h,
После установки обновления, стала вылезать ошибка с другим Вашим скриптом.
Возможно модули недостаточно чётко синхронизированы с макросами?
LuaMacro
C:\FarTest86\Profile\Macros\scripts\CopyFiles.TempPanel.lua:58: attempt to index field 'BAX' (a nil value)
stack traceback:
C:\FarTest86\Profile\Macros\scripts\CopyFiles.TempPanel.lua:58: in main chunk
[C]: in function 'xpcall'
C:\FarTest86\Plugins\LuaMacro\utils.lua:772: in function <C:\FarTest86\Plugins\LuaMacro\utils.lua:749>
[C]: in function 'RecursiveSearch'
C:\FarTest86\Plugins\LuaMacro\utils.lua:841: in function <C:\FarTest86\Plugins\LuaMacro\utils.lua:672>
OK Edit
Find & Go - Поиск с предпросмотром и переходом
Posted: Sun 15 Dec, 2019 11:41
by buniak_a_h
citRiks, да, меня раскритиковали за то, что я свои функции, определённые в модулях, записывал в глобальную таблицу _G.BAX . Я стал убирать, а некоторые старые макросы расчтаны были на это - стали вылетать.
Это - копирование файлов со временной панели с сохранением структуры? Наверно, надо загрузить новую версию … Гляну.
Find & Go - Поиск с предпросмотром и переходом
Posted: Sun 15 Dec, 2019 12:03
by buniak_a_h
citRiks, у меня проблема. Не могу найти скрипта CopyFiles.TempPanel.lua … Видимо, у меня его уже нету. Не могли бы Вы или прислать (в личку), или (если не потерялось) написать, откуда брали?
Find & Go - Поиск с предпросмотром и переходом
Posted: Sun 15 Dec, 2019 12:59
by buniak_a_h
citRiks, возьмите версию 1.5.2 . скрипта CopyFiles.TempPanel.lua
Find & Go - Поиск с предпросмотром и переходом
Posted: Tue 31 Dec, 2019 12:51
by buniak_a_h
Опубликована версия 1.0.13. Исправлен вызов panel.GetPanelInfo в связи с новыми требованиями к параметрам
Find & Go - Поиск с предпросмотром и переходом
Posted: Fri 03 Jan, 2020 22:59
by DV
Спасибо за макрос! Попробовал, есть несколько пожеланий:
1. Добавить возможность Свернуть Все / Развернуть Все (полезно, когда в окне результатов очень много элементов)
2. Добавить возможность фильтрации (тот же стандартный Ctrl+Alt+F) или поиска в окне результатов (полезно, когда в окне результатов очень много элементов)
3. Что-то у меня макрос не подружился с кириллицей:
Файл "ContextMenu-Rus.txt" имеет кодировку 1251...
Find & Go - Поиск с предпросмотром и переходом
Posted: Fri 03 Jan, 2020 23:34
by buniak_a_h
DV wrote: ↑Fri 03 Jan, 2020 22:59
1. Добавить возможность Свернуть Все / Развернуть Все (полезно, когда в окне результатов очень много элементов)
Сам собирался сделать. Спасибо за (ой!)
палка с острым концом для тыканья, древнеримск.
DV wrote: ↑Fri 03 Jan, 2020 22:59
2. Добавить возможность фильтрации (тот же стандартный Ctrl+Alt+F) или поиска в окне результатов (полезно, когда в окне результатов очень много элементов)
Фильтр, вроде, работает (тока-што попробовал), и как раз CtrlAltF. Правда, не отображается. Отображается только когда отфильтрованы все строки. Причём оно само, я к этому усилий не прикладывал…
DV wrote: ↑Fri 03 Jan, 2020 22:59
3. Что-то у меня макрос не подружился с кириллицей:
В форме инициализации поиска есть радио-бутоны - переключение кодировки. Отсюда вопросы:
1. Какая кодировка была выбрана радиобутонами при начале поиска?
2. В какой кодировке файл Docs\ContextMenu-Rus.txt (ну, тот что неправильно кириллицу отобразил? Небольшое замечание. Там есть вариант Auto- так вот он не отлажен до конца. Более того, я его даже не пробовал - написал чисто теоретически. Тупо открываю в редакторе, нём же делаю поиск. В надежде, что редактор-то уж определит кодировку правильно. У меня самого настроены кодировки в зависимости от расширения, как правило это спасает. Правда, в некоторых lua-скриптах, поставляемых с некоторыми плагинами, применена ASCII-кодировка. Ну... Что тут поделать …
Первое замечание
Второе замечание -
Find & Go - Поиск с предпросмотром и переходом
Posted: Fri 03 Jan, 2020 23:48
by DV
buniak_a_h wrote: ↑Fri 03 Jan, 2020 23:34Фильтр, вроде, работает (тока-што попробовал), и как раз CtrlAltF. Правда, не отображается
Точно! Я увидел, что фильтр не отображается - и подумал, что он не работает. Визуализация не помешала бы
buniak_a_h wrote: ↑Fri 03 Jan, 2020 23:341. Какая кодировка была выбрана радиобутонами при начале поиска?
2. В какой кодировке файл Docs\ContextMenu-Rus.txt
Была выбрана та, что по умолчанию - Все(All). Это с ней так.
Что интересно, с Авто(Auto) отображает нормально (правильно).
Кодировка файла - стандартная Windows-1251. Я потому и удивился.
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 04 Jan, 2020 02:37
by buniak_a_h
DV wrote: ↑Fri 03 Jan, 2020 23:48
Была выбрана та, что по умолчанию - Все(All). Это с ней так.
Что интересно, с Авто(Auto) отображает нормально (правильно).
Кодировка файла - стандартная Windows-1251. Я потому и удивился.
Я, возможно, неправильно сформулировал. [ All ] означает поиск во всех трёх кодировках. Как только найденный образец будет найден, результаты будут сформированы. При этом если поиск не зависит от кодировки (как у Вас - ищется строка на латинице, соответственно, она найдена независимо от кодировки), то могут быть глюки. Я не знаю, как определить кодировку. Единственное, что пришло в голову - это анализировать первые 3 байта на BOM для UTF-8. Открывать каждый раз редактор - получается, вроде, накладно. Принимаются любые идеи. Возможно, имеет смысл уже в результате сделать переключение кодировки вручную. Но я пока не готов. Как определяет кодировку сам ФАР - я не знаю (да он зачастую ошибается). Может, есть какой системный вызов? Если кто ответит - сделаю.
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 04 Jan, 2020 04:55
by buniak_a_h
DV wrote: ↑Fri 03 Jan, 2020 22:59
1. Добавить возможность Свернуть Все / Развернуть Все (полезно, когда в окне результатов очень много элементов)
Реализовано (заменой модуля BaxUtils). Можно просто заменить. Номер версии модуля пока не менял. Если соберусь делать "нормальную" библиотеку своих модулей - актуализирую номер версии.
Функции Expand all и Collapse all "повешены" на CtrlShiftLeft / CtrlShiftRight (аналогично Expand / Collapse с добавлением Shift).
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 04 Jan, 2020 10:29
by John Doe
На скриншоте выше видно что правая рамка не на месте, и что вы по какой-то причине не хотите использовать сепараторы.
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 04 Jan, 2020 17:40
by buniak_a_h
John Doe wrote: ↑Sat 04 Jan, 2020 10:29
На скриншоте выше видно что правая рамка не на месте, и что вы по какой-то причине не хотите использовать сепараторы.
Правую рамку я уже (у себя) исправил. Про сепараторы не понял. Изначально список и "подвал" разделялись сепаратором (DI_TEXT с флагом DIF_SEPARATOR), но потом я изменил цвет "подвала" и внёс его в рамку.
Если сообщение "родилось" по причине не-визуализации фильтра, то, как выяснилось, я его (фильтр) вывожу в первую строку, и DI_LIST также с первоё строки вывожу. В результате фильтр "затирается". Сейчас я переделываю работу с фильтрацией.
Find & Go - Поиск с предпросмотром и переходом
Posted: Tue 14 Apr, 2020 23:21
by citRiks
Только что дошли руки попробовать как следует, скажу вам - СУПЕР
Одна из лучших реализаций GREP-а в ФАРе, уря!
Лишь небольшие придирки:
* Фильтр результатов сейчас невидим, сделать видимым
* Диалог результатов раскрывать на всю ширину ФАРа, или переключаться на всю ширину
* В диалог результатов добавить нумерацию строк
* Разделитель файлов, на котором можно сделать collapse, сделать как и предлагал @JD, type=separator
* .. и тогда collapse теперь делать по какому-то нажатию, в принципе любому, на ваш выбор
Ну пожаааалуста ))
И еще вот, но это я не знаю, наверное будет труднee?
Интегрировать с редактором/вьювером,
так чтобы тот же или похожий диалог вызывался на открытом файле
Find & Go - Поиск с предпросмотром и переходом
Posted: Wed 15 Apr, 2020 05:35
by buniak_a_h
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
Только что дошли руки попробовать как следует, скажу вам - СУПЕР
Одна из лучших реализаций GREP-а в ФАРе, уря!
Спасибо на добром слове!
Смешно сказать, но сам этим скриптом пользуюсь часто…
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
Лишь небольшие придирки:
* Фильтр результатов сейчас невидим, сделать видимым
Надо что-то придумывать: либо делать (симулировать) фильтрацию вручную, либо пожертвовать заголовком окна. Я пробовал, честно. С наскока не всё получилось, потом забросил…
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
* Диалог результатов раскрывать на всю ширину ФАРа, или переключаться на всю ширину
Ок, сделаю.
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
* В диалог результатов добавить нумерацию строк
Я пока не знаю, зачем, но если надо - сделаю настройку. Просто горизонтального скроллинга в "подвале" нет, а номер строки будет отжирать полезное место.
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
* Разделитель файлов, на котором можно сделать collapse, сделать как и предлагал @JD, type=separator
* .. и тогда collapse теперь делать по какому-то нажатию, в принципе любому, на ваш выбор
Вообще-то, эти строки и так Separator = true
По поводу «collapse теперь делать по какому-то нажатию» я не понял. И так делается по Enter на разделителе или по Ctrl← на любой найденной строке.
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
И еще вот, но это я не знаю, наверное будет труднее?
Интегрировать с редактором/вьювером,
так чтобы тот же или похожий диалог вызывался на открытом файле
Это я не понял. Т.е. при поиске смотреть, и если файл открыт в редакторе, то искать не на диске, а в редакторе? Или искать только в редактируемом файле?
Второй случай - возьмите стандартный поиск, активируйте кнопкой Show All и прикрутить мой же макрос для синхронизации результатов поиска с редактором.
Find & Go - Поиск с предпросмотром и переходом
Posted: Wed 15 Apr, 2020 13:42
by citRiks
buniak_a_h wrote: ↑Wed 15 Apr, 2020 05:35
* В диалог результатов добавить нумерацию строк
Я пока не знаю, зачем, но если надо - сделаю настройку. Просто горизонтального скроллинга в "подвале" нет, а номер строки будет отжирать полезное место.
думаю что польза есть, ну можно еще номер строки ставить только в самом списке,
насчет места - можно сделать номер строки только в списке найденного, и/или сделать горизнтальлный скроллинг,
но согласен что это не must feature в принципе, если не особо укладывается в концепт
Find & Go - Поиск с предпросмотром и переходом
Posted: Wed 15 Apr, 2020 13:45
by citRiks
buniak_a_h wrote: ↑Wed 15 Apr, 2020 05:35
Вообще-то, эти строки и так Separator = true
По поводу «collapse теперь делать по какому-то нажатию» я не понял. И так делается по Enter на разделителе или по Ctrl← на любой найденной строке
да, странно получается, флаг сепаратора есть, но это явно не сепаратор почему то,
а хоткеи действительно уже есть, да, спасибо