Мне надоело после окончания поиска файлов, содержащих строки, открывать найденные файлы и повторять поиск (особенно, если поиск в файлах по регэкспу с помощь. плагинов, а поиск в файле настроен не через эти плагины. А также если имеется несколько строк, удовлетворяющих критерию поиска, и надо перейти на конкретную). В результате родился предлагаемый к обсуждению макрос.
Его отличия от поиска по 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: Wed 15 Apr, 2020 21:10
by citRiks
Latest post of the previous page:
buniak_a_h wrote: ↑Wed 15 Apr, 2020 18:31
В аудиоплейере диалог не закрывается независимо от настройки
Ну значит остается вариант с нейтрализацией в AudioPlayer мыше-клика, не?
Find & Go - Поиск с предпросмотром и переходом
Posted: Wed 15 Apr, 2020 21:25
by buniak_a_h
Думаю, там скорее блокировка именно закрытия диалога. По Esc и DN_BTNCLICK - разрешается, в остальных случаях - нет.
2useven10, да-да, я именно это и имел в виду, когда писал:
buniak_a_h wrote: ↑Wed 15 Apr, 2020 16:32
Мне кто-то написал, как сделать, чтоб не закрывался. Пришлось ФАР снимать - он вообще никак не закрывался:-)
Правда, теперь я, кажется, придумал: надо запоминать факт нажатия Esc и кнопки и если было нажато - разрешать, иначе - запрещать.
Find & Go - Поиск с предпросмотром и переходом
Posted: Thu 07 May, 2020 09:02
by buniak_a_h
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
* Диалог результатов раскрывать на всю ширину ФАРа, или переключаться на всю ширину
Версия 1.1.1 . Кнопка F5.
Find & Go - Поиск с предпросмотром и переходом
Posted: Thu 07 May, 2020 09:31
by buniak_a_h
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
* Разделитель файлов, на котором можно сделать collapse, сделать как и предлагал @JD, type=separator
Я посмотрел. Там действительно не выставляется флаг LIF_SEPARATOR для сепараторов, причём для списков с группировкой это сделано специально.
1. Есть возможность выводить признак, что узел распахнут/свёрнут
2. Есть возможность встать на разделитель и удалить все записи, относящиеся к этому файлу.
3. Можно мышкой сворачивать-распахивать.
А тогда зачем?
Find & Go - Поиск с предпросмотром и переходом
Posted: Thu 07 May, 2020 23:52
by buniak_a_h
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
Лишь небольшие придирки:
* Фильтр результатов сейчас невидим, сделать видимым
Пока не получилось с использованием своего фильтра, а "встроенный" использовать не хочется.
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
* Диалог результатов раскрывать на всю ширину ФАРа, или переключаться на всю ширину
Сделано. Кнопка F5.
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
* В диалог результатов добавить нумерацию строк
Сделано. В настройке включить…
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
* Разделитель файлов, на котором можно сделать collapse, сделать как и предлагал @JD, type=separator
Есть возражения. Главное: (а)невозможно "встать" на разделитель и, соответственно, распахивать / сворачивать мышкой: (б) невозможно (ну или я не умею) вывести значок-признак, что узел распахнут / свёрнут.
citRiks wrote: ↑Tue 14 Apr, 2020 23:21
* .. и тогда collapse теперь делать по какому-то нажатию, в принципе любому, на ваш выбор
Это и так можно было. Ctrl+стрелки - один файл; ShiftCtrl+стрелки - свернуть/распахнуть все
Find & Go - Поиск с предпросмотром и переходом
Posted: Thu 07 May, 2020 23:59
by buniak_a_h
Версия 1.1.2 - добавлена нумерация.
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 09 May, 2020 10:02
by citRiks
buniak_a_h wrote: ↑Thu 07 May, 2020 09:31Я посмотрел. Там действительно не выставляется флаг LIF_SEPARATOR для сепараторов, причём для списков с группировкой это сделано специально.
1. Есть возможность выводить признак, что узел распахнут/свёрнут
2. Есть возможность встать на разделитель и удалить все записи, относящиеся к этому файлу.
3. Можно мышкой сворачивать-распахивать.
А тогда зачем?
buniak_a_h wrote: ↑Thu 07 May, 2020 23:52Есть возражения. Главное: (а)невозможно "встать" на разделитель и, соответственно, распахивать / сворачивать мышкой: (б) невозможно (ну или я не умею) вывести значок-признак, что узел распахнут / свёрнут.
Для сепаратора текст задается ровно так же как и у не сепаратора, и в этом тексте вы и продолжаете выводить плюсик - свернуто, н...
.. ну Ок, там типа можно еще свернуть все до уровня одна строка - один файл, так что могу согласится что логика в этом есть
Про нумерацию, возможно я что-то делаю не так, но у меня ее все еще нигде нет (хде?)
искал окно конфигурации, думал может там задается, однако не нашел,
и кстати хелп не открывается из диалога (- но это совсем уже мелочи, можно открыть и из файла)
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 09 May, 2020 10:08
by citRiks
buniak_a_h wrote: ↑Thu 07 May, 2020 23:52
citRiks писал(а): ↑
Ср 15 апр, 2020 01:21
* В диалог результатов добавить нумерацию строк
Сделано. В настройке включить…
А где эта настройка? пробовал на диалоге АльтФ9, АльтШифтФ9, чета не ..
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 09 May, 2020 10:12
by buniak_a_h
citRiks wrote: ↑Sat 09 May, 2020 10:02
Для сепаратора текст задается ровно так же как и у не сепаратора, и в этом тексте вы и продолжаете выводить плюсик - свернуто
У сепаратора текст центрируется горизонтальной линией. Если я вставлю перед именем файла «+ », то он будет выводиться не слева, а мне это как бы не надо. Значит, придётся самому формировать текст (считать ширину, вставлять горизоньальную линию), что я и так делаю.
citRiks wrote: ↑Sat 09 May, 2020 10:02
Ок, там типа можно еще свернуть все до уровня одна строка - один файл, так что могу согласится что логика в этом есть
Да-да-да! Вы напомнили. Если сделать все строки между сепараторами невидимыми, то и сам сепаратор станет невидимым - и всё, обратно не вернуть!
citRiks wrote: ↑Sat 09 May, 2020 10:02
Про нумерацию, возможно я что-то делаю не так, но у меня ее все еще нигде нет (хде?)
Настройки не нашли?
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 09 May, 2020 10:16
by buniak_a_h
Настройка F9->o->u->BAX - Скрипт Find_n_Go
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 09 May, 2020 10:17
by citRiks
Ну и традиционно, падает в связи последними проблем со строками,
присоединяю то что успел пофиксить, думаю это вам поможет, просто любой сравнивалкой посмотрите изменения
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 09 May, 2020 10:18
by citRiks
buniak_a_h wrote: ↑Sat 09 May, 2020 10:16
Настройка F9 -> o -> u -> BAX - Скрипт Find_n_Go
А Ф9 делать на диалоге поиске же, да?
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 09 May, 2020 10:32
by buniak_a_h
Нет, просто в панелях
Find & Go - Поиск с предпросмотром и переходом
Posted: Sat 09 May, 2020 10:33
by buniak_a_h
citRiks wrote: ↑Sat 09 May, 2020 10:17
в связи последними проблем со строками,
Я в теме, посвящённой этой проблеме, опубликовал простой и надёжный выход. Бороться с Shmuel-ем и zg больше не буду. За оптимизацию отдельное спасибо jd.
В _macroinit.lua вставил такой блок:
for _,v in ipairs({'len','match','find','gmatch','gsub','lower','upper'}) do
local savedName = 'Utf8_'..v
if not utf8[savedName] then
utf8[savedName] = utf8[v]
utf8[v] = function(s,...)
return (utf8.utf8valid(s) and utf8[savedName] or string[v])(s,...)
end
end
end
Т.к. там всё правильно, то мы имеем дело с одним из следствий закона Мерфи: блок, предназначенный для защиты всей системы от повреждения, выходит из строя первым и выводит из строя всю систему.