Автофильтр вместо быстрого поиска

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Автофильтр вместо быстрого поиска

Post by John Doe »

Предлагаемый набор макросов реализует в панелях автофильтр, применяющийся динамически, по мере набора текста.
В качестве поля ввода используется панель Быстрого поиска (Search).
Автофильтр может использоваться как вместо Быстрого поиска, так и независимо от него.

Использование:
  • Клавиша активации: Alt (одиночное нажатие) в панелях — открывает панельку автофильтра.
    — Если в активной панели в настоящий момент не установлен фильтр, то подставляется маска *.
    — Если панель уже отфильтрована, то подставляется строка активного фильтра (по возможности: ).
  • По умолчанию действия левой и правой клавиши несколько отличаются:
    • LAlt запускает автофильтр в "немодальном" режиме, удобном для использования вместо Быстрого поиска:
      NB! При закрытии панельки (по Esc, или после выполнения какого-либо действия) фильтр панели сразу снимается.
    • RAlt запускает автофильтр в "постоянном" режиме, т.е. фильтр панели панели не сбросится до тех пор, пока пользователь не снимет его явно.
      NB! Для быстрого снятия фильтра достаточно нажать Esc в панелях.
    • Любое из действий (или оба) можно переназначить на другую комбинацию клавиш:
  • В панельке автофильтра действуют те же клавиши, что и при Быстром поиске, в частности:
    Большинство остальных клавиш передаются в панели, выполняя соответствующие действия в панелях, при этом панелька автофильтра закрывается.
    NB: есть возможность в options задать список клавиш, которые не будут закрывать автофильтр:
Дополнительно:

Credits:

Требования: FAR 3.0 build >= 5416
Attachments
PanelAutoFilter.lua
v2.9.3
(10.76 KiB) Downloaded 177 times
Last edited by John Doe on Wed 10 Jul, 2019 08:50, edited 1 time in total.
fml2
Posts: 522
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Автофильтр вместо быстрого поиска

Post by fml2 »

Latest post of the previous page:

John Doe wrote: Потому что на текущей уже отфильтрованной панели нет файлов, содержащих g.
Это объяснение сошло бы, если бы ввод фильтра при уже действующем фильтре фильтровал бы "повторно" (или "дополнительным уровнем"). Но это не так: если при имеющемся фильтре "fo" ввести фильтр "*2", то показаваются все файлы на панели, имеющие 2 в имени, а не только те, что начинаются с "fo" и содержат 2.

Дождемся новой версии, зачем обсуждать уже не существующие?
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Автофильтр вместо быстрого поиска

Post by John Doe »

fml2 wrote: Дождемся новой версии, зачем обсуждать уже не существующие?
В данном случае речь о функционировании штатной панели быстрого поиска.
fml2 wrote: Это объяснение сошло бы, если бы ввод фильтра при уже действующем фильтре фильтровал бы "повторно"
Обратите внимание, что Alt-<символ> активирует быстрый поиск.
Скрипт фильтра ничего тут не делает, т.к. ему ещё неизвестно, что открыт быстрый поиск.

Если так не устраивает, то можно пойти 2мя разными путями
  • активировать фильтр только выделенной комбинацией (например одиночным нажатием Alt)
    А при нажатии комбинаций Alt-символ оставить штатную функцию быстрого поиска.
  • альтернативно: в отдельной нити по таймеру опрашивать текущую макрообласть, и при обнаружении открытого быстрого поиска подставлять в поле строку фильтра
fml2
Posts: 522
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Автофильтр вместо быстрого поиска

Post by fml2 »

Наверное, для того, чтобы осмысленно ответить, нужно знать, как реализован скрипт.
John Doe wrote: Обратите внимание, что Alt-<символ> активирует быстрый поиск.
Но я наблюдаю, что при нажатии Alt+символ не только показывается поле фильтра, но этот симбол туда вводится и уже производится фильтрация по нему. Т.е. кроме активирования поиска производится и кое-что сверх этого.

А-а-а, кажется, я понял: скрипт "подсаживается" на быстрый поиск. Но сначала этот поиск должен что-то сделать. И только тогда скрипт может распознать, что он что-то должен сделать, так?

Ладно, как бы там ни было: очень полезная штука!
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Автофильтр вместо быстрого поиска

Post by John Doe »

fml2 wrote: А-а-а, кажется, я понял: скрипт "подсаживается" на быстрый поиск. Но сначала этот поиск должен что-то сделать. И только тогда скрипт может распознать, что он что-то должен сделать, так?
Скрипт активируется нажатиями любых клавиш в макрообласти Search.
Но сама панель Search должна сначала как-то открыться, так ведь?
Нажимая Alt-символ в области Shell вы открываете панель Search, но скрипт автофильтра не получит управление до тех пор, пока вы не нажмёте ещё одну клавишу.

На самом деле "паразитировать" на быстром поиске вовсе не необходимо.
В шапке темы есть ссылки на альтернативные реализации, никак не использующие Search.
fml2
Posts: 522
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Автофильтр вместо быстрого поиска

Post by fml2 »

John Doe wrote: Нажимая Alt-символ в области Shell вы открываете панель Search, но скрипт автофильтра не получит управление до тех пор, пока вы не нажмёте ещё одну клавишу.
Так ведь я же и нажимаю еще одну клавишу (в моем случае -- g)! Т.е. я нажимаю не просто Alt, а Alt+g.
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Post by John Doe »

Вы жмете Alt-символ, после этого открывается быстрый поиск. Для того чтобы фильтр получил управление нужно еще одно нажатие.
(Я просто объясняю детали реализации, и не имею ввиду, что "еще одно нажатие" тут поможет).

Со следующей версии быстрый поиск, открытый таким способом, будет работать штатным образом (не будет даже пытаться фильтровать).

Для запуска фильтра необходимо использовать одиночный Alt (или другой шорткат на ваш выбор).
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Автофильтр вместо быстрого поиска

Post by John Doe »

Новая версия:
  • Глобального переключения режима (CtrlAltF) больше нет. Вместо этого, автофильтр включается только по шорткату.
  • Любое действие (кроме Ctrl[Shift]Enter) отключает автофильтр, и снимает фильтр панели.
    Чтобы выйти из автофильтра, сохранив фильтр панели, можно повторно нажать клавишу вызова (Alt).
  • Если фильтр панели сброшен, то при следующей активации автофильтра подставится пустая строка.
    Но можно восстановить предыдущее значение автофильтра повторным нажатием клавиши вызова (Alt)
  • Нажатие \,/ в автофильтре отключает/включает фильтрацию папок.
  • Нажатие Esc в панели сбрасывает ранее установленный автофильтром фильтр.
  • Экспериментально: при наличии активного фильтра меняется цвет рамки панелей.
    К сожалению в фаре невозможно изменить цвет только одной панели, со всеми вытекающими.
    Цвета (4-битные) заданы в таблице FG.
Вложение в шапке (описание ещё не обновил)
fml2
Posts: 522
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Автофильтр вместо быстрого поиска

Post by fml2 »

John Doe wrote: Глобального переключения режима (CtrlAltF) больше нет. Вместо этого, автофильтр включается только по шорткату.
Гм... Возникает вопрос: если эта функциональность теперь вызывается отдельно, то зачем "притворяться", что это быстрый поиск? Т.е. зачем использовать ГУИ быстрого поиска? Почему не сделать собственный диалог (возможно, с какими-то элементами, которых нет в диалоге быстрого поиска -- например, птичкой для фильтрации папок).
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Re: Автофильтр вместо быстрого поиска

Post by John Doe »

fml2 wrote:Возникает вопрос: если эта функциональность теперь вызывается отдельно, то зачем "притворяться", что это быстрый поиск? Т.е. зачем использовать ГУИ быстрого поиска?
Известно зачем - это уже отлажено, и вполне выполняет свою задачу.

Если буду развивать, то рано или поздно придется переделать на собственный диалог (например фильтр по обоим раскладкам в быстром поиске сделать проблематично).
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Автофильтр вместо быстрого поиска

Post by John Doe »

Сейчас автофильтр реализован как обычный фильтр включения.
Но что если панель уже отфильтрована другим фильтром?
Наш автофильтр (в текущей реализации) уже не способен уменьшить количество элементов на панели, он может разве что добавить.

Вопрос ко всем заинтересованным: следует ли принять это как фичу, или надо переделать автофильтр на фильтр исключения?
(Ещё вчера я ориентировался на первый вариант, и уже начал развивать, но...)
fml2
Posts: 522
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 8 times

Автофильтр вместо быстрого поиска

Post by fml2 »

John Doe wrote: Наш автофильтр (в текущей реализации) уже не способен уменьшить количество элементов на панели, он может разве что добавить.
Правильно ли я понимаю, что эта "фича" обусловлена тем, что выбранные пункты в меню фильтрации соединяются по "или"? И что интуитивно ожидаемого эффекта (т.е. дальнейшего ограничения показываемых файлов) легко было бы достичь, если бы была возможность создавать (по крайней мере, в памяти, т.е. с помощью АПИ) сложные структуры вложенности, т.е. выражения типа "(А или Б) и В"? В нашем случае "А или Б" это то, что установлено фильтром через ГУИ, а добавка "и В" -- это то, что привносилось бы вашим доплонительным фильтром.
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Автофильтр вместо быстрого поиска

Post by John Doe »

fml2 wrote: если бы была возможность создавать (по крайней мере, в памяти, т.е. с помощью АПИ) сложные структуры вложенности
Сложность в том, что нет никакого апи, и всё приходится проводить через имитацию клавиатурных нажатий.

Что касается "интуитивно ожидаемого эффекта", то я же написал, что это решаемо.
User avatar
John Doe
Бюрократ
Posts: 12895
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 296 times

Автофильтр вместо быстрого поиска

Post by John Doe »

Обновление:
  • Переделано на фильтр исключения, для того чтобы сочетание с другими фильтрами приводило к ожидаемым результатам.
  • При открытом (и активном) автофильтре комбинация CtrlF4 открывает установки текущего фильтра в диалоге.
    Тот же диалог открывается вместо панельки автофильтра в случае, если панель ни содержит ни одного подходящего под активный фильтр элемента.
  • Настройки ClearOnCommand больше нет.
    Вместо неё теперь можно задать отдельные хоткеи для "немодального" и "постоянного" режимов (по умолчанию LAlt и RAlt соответственно).
  • Описание в шапке переработано.
User avatar
4ekucT
Posts: 507
Joined: Tue 05 Apr, 2005 23:44
Location: Беларусь, Минск

Автофильтр вместо быстрого поиска

Post by 4ekucT »

В последних билдах FAR скрипт конфликтует с макросами назначенными на кнопки Alt. Например, у меня был переназначен поиск LFSearch на AltF7 - отвалился...
IgorZ
Posts: 704
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 13 times
Been thanked: 66 times

Автофильтр вместо быстрого поиска

Post by IgorZ »

Попробовал. Интересная и полезная штука, беру на вооружение. Но обнаружена бага: у меня цвет панелей Фара - синий с белыми рамками. После снятия фильтра цвет рамок изменяется на голубой, а не восстанавливается белый.
Post Reply

Return to “Полезные макросы и скрипты”