Здесь можно обсуждать плагин LuaFAR Search. (Анонс).
LuaFAR Search
Posted: Sat 01 Jul, 2017 17:15
by Dennis_Moore
Latest post of the previous page:
buniak_a_h wrote: ↑Sat 01 Jul, 2017 12:22 Вместо того, чтоб указать размер и возраст, приходится настраивать фильтр, который нужен только на один раз - для поиска.
Извините что встряю, но эту проблему можно решить макросом. По нажатию того же Alt+L можно выдавать диалог который запрашивает только то что вам нужно и по Enter создает фильтр и начинает поиск. Выше по теме несколько способов узнать ID диалога.
Macro
{
area="Dialog"; key="AltQ";
description="LFS Panels: filtered search by size and date";
condition=function() return Dlg.Id=="3CD8A0BB-8583-4769-BBBC-5B6667D13EF9" end;
action = function()
local ptf, dt = 0, 'H'
local size = prompt("Size >=/<=")
local date = prompt("Date <=/>=")
--dt = prompt("Date of (w)rite, (c)reation, (a)ccess, c(h)ange")
--if type(dt) ~= "string" or dt == "" then dt = 'H' end
Keys("AltF"); local mask = Dlg.GetValue(-1)
Keys("AltL Add AltU RAlt"); print("_lfs-fltr_"); Keys("Del Enter")
Keys("AltL Add AltU Ins"); print("_lfs-fltr_")
Keys("Tab Tab"); print(mask)
if type(size) == "string" and size ~= "" then
Keys("AltZ Tab")
ptf = string.find(size, '/')
if ptf == nil then print(size) else
if ptf == 1 then
Keys("Tab")
print(string.sub(size, 2, #size))
else
print(string.sub(size, 1, ptf-1))
Keys("Tab")
print(string.sub(size, ptf+1, #size))
end
end
end
Keys("AltT Tab CtrlDown " .. dt)
--Keys("AltI ShiftTab") -- relative date
if type(date) == "string" and date ~= "" then
Keys("Tab Tab")
ptf = string.find(date, '/')
if ptf == nil then print(date) else
if ptf == 1 then
Keys("Tab Tab")
print(string.sub(date, 2, #date))
else
print(string.sub(date, 1, ptf-1))
Keys("Tab Tab")
print(string.sub(date, ptf+1, #date))
end
end
end
Keys("CtrlEnter I Enter CtrlEnter")
end;
}
Файл поместить в %FARPROFILE%\Macros\scripts, сочетание для вызова Alt+Q (из диалога поиска плагина), формат ввода такой: xxx , /xxx, xxx/xxx. Если не хотим фильтровать по одному из значений нажимаем Esc или Enter в пустом поле. Ввод не фильтруется.
Если раскомментировать строки 12 и 13 то можно будет выбрать какую дату брать (создания, изменения, доступа, чтения), еcли раскомментировать строку 34 то дата будет относительной (напр. за последие 5 дней).
LuaFAR Search
Posted: Sat 08 Jul, 2017 00:06
by Dennis_Moore
Заметил странность при использовании своего макроса из поста выше (ссылка).
Проиллюстрирую на чейнджлоге плагина. Открываю поиск в редакторе, ввожу в строку поиска 39, нажимаю Enter (макрос нажимает Alt4). Подсвечивается только одно совпадение из трех, но после нажатия стрелки вниз подсвечиваются все три. Жму Esc, подсветка найденного остается. Снова открываю поиск, ввожу 2017, опять же подсвечивается только одно совпадение из 25-ти и еще при этом остаются выделенными три найденных 39. При нажатии стрелки вниз все приходит в норму.
Если в диалоге нажимать Alt4, а не Enter который перехватывает макрос, то таких эффектов нет.
Ни в какую не могу понять в чем дело. Прошу помощи.
LuaFAR Search
Posted: Sat 08 Jul, 2017 00:25
by Shmuel
Dennis_Moore,
По умолчанию, при исполнении макроса запрещена перерисовка экрана.
Либо поставьте в макросе Flags="EnableOutput", либо замените Keys("Alt4") на Keys("EnOut Alt4").
LuaFAR Search
Posted: Sat 08 Jul, 2017 01:16
by buniak_a_h
Dennis_Moore wrote: ↑Sat 01 Jul, 2017 20:58Вот. Топорно, зато работает и вашу задачу решает
На самом деле не так "топорно", но задача установки фильтра из макроса (более корректно) решена в макросе panelfilter.lua (Author: Maxim Gonchar; Modifications: Shmuel Zeigerman). Во всяком случае там не последовательность нажатий DOWN, TAB и т.п., а переход на элементы меню по имени (командой Menu.Select). Но - спасибо.
На самом деле хотелось бы иметь "активный" ("процедурный") фильтр: не перечень условий, а вызов некой процедура: на входе - panel.item, на выходе - visible. Так можно было бы отфильтровывать по совершенно неожиданным условиям (например, модули, отличающиеся от сохранённых в репозитории SVN/GIT).
Такая же идеология была бы полезна для раскраски файлов (например, к примеру с SVN/GIT: среди отфильтрованных файлов изменённые - одним цветом, конфликтные - другим, устаревшие - третьим и т.д.).
Может, такая возможность есть, просто я не знаю? Напрашивается...
LuaFAR Search
Posted: Sat 08 Jul, 2017 20:38
by HaRT
buniak_a_h wrote: ↑Sat 08 Jul, 2017 01:16"активный" ("процедурный") фильтр: не перечень условий, а вызов некой процедура: на входе - panel.item, на выходе - visible
В таком виде это бы дико тормозило при большом кол-ве файлов. Если что-то подобное и делать, то фильтровать надо сразу целую директорию, а это и так можно сделать — панельным плагином.
buniak_a_h wrote: ↑Sat 08 Jul, 2017 01:16"активный" ("процедурный") фильтр: не перечень условий, а вызов некой процедура: на входе - panel.item, на выходе - visible
В таком виде это бы дико тормозило при большом кол-ве файлов.
Никто ж не заставляет пользоваться такой фичей! Но... Бывает, что в не особо больших папках фильтр очень хитрый (например, *.db и чтоб было поле с именем G32, и чтоб G32 > 5). Сейчас я такие задачи решаю помещением отобранных файлов в список, который используется как временная панель. Работает, но через задний проход как-то...
Если что-то подобное и делать, то фильтровать надо сразу целую директорию, а это и так можно сделать — панельным плагином.
Вот это я не понял. Что за панельный плагин? Или имеется в виду самому написать?
Кстати, интересная появилась идея: на входе - имя папки (или список всех item-ов без фильтрации); на выходе (StdOut) - список отфильтрованных item-ов. Процедура (или макрос) вызывается при смене папки либо при обновлении содержимого. Это был бы красивый компромисс: и эффективно, и гибко.
LuaFAR Search
Posted: Sat 08 Jul, 2017 21:29
by Shmuel
buniak_a_h, HaRT, нельзя ли эту интересную тему обсудить где-то в другом месте?
Очень не хватает статистики. Сколько найдено вхождений в стольких-то файлах.
LuaFAR Search
Posted: Mon 04 Sep, 2017 06:20
by Shmuel
В режиме поиска файлов из панелей с заданным образцом поиска каждый файл ищется до первого найденного вхождения - для повышения быстродействия. Поэтому в этом режиме вывод статистики невозможен.
Можно было бы сделать опцию типа "искать все вхождения", но я не уверен, что это необходимо.
А вот я, наверно, ошибку нашёл.
Windows 10x64
Far 3.0.5123 x64
В комплекте с плагином поставляются reader.dl, rex_onig.dl, rex_pcre.dl и ucd.dl. Не знаю, как остальные, но при загрузке rex_pcre.dl возникает ошибка:
Подозреваю, что ДЛЛ не 64-разрядная.
LuaFAR Search
Posted: Fri 19 Jan, 2018 08:36
by Shmuel
rex_pcre.dl работает вместе с pcre.dll той же разрядности.
Скачайте lfsearch-addon (там же, где брали плагин), вытащите оттуда 64-битные pcre.dll и onig.dll, и положите их в %FARHOME%.