Page 2 of 4

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

Posted: Mon 22 Dec, 2014 20:53
by John Doe
Предлагаемый набор макросов реализует в панелях автофильтр, применяющийся динамически, по мере набора текста.
В качестве поля ввода используется панель Быстрого поиска (Search).
Автофильтр может использоваться как вместо Быстрого поиска, так и независимо от него.

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

Credits:

Требования: FAR 3.0 build >= 5416

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

Posted: Thu 25 Dec, 2014 21:01
by John Doe

Latest post of the previous page:

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

Если так не устраивает, то можно пойти 2мя разными путями
  • активировать фильтр только выделенной комбинацией (например одиночным нажатием Alt)
    А при нажатии комбинаций Alt-символ оставить штатную функцию быстрого поиска.
  • альтернативно: в отдельной нити по таймеру опрашивать текущую макрообласть, и при обнаружении открытого быстрого поиска подставлять в поле строку фильтра

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

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

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

Ладно, как бы там ни было: очень полезная штука!

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

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

На самом деле "паразитировать" на быстром поиске вовсе не необходимо.
В шапке темы есть ссылки на альтернативные реализации, никак не использующие Search.

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

Posted: Fri 26 Dec, 2014 00:39
by fml2
John Doe wrote: Нажимая Alt-символ в области Shell вы открываете панель Search, но скрипт автофильтра не получит управление до тех пор, пока вы не нажмёте ещё одну клавишу.
Так ведь я же и нажимаю еще одну клавишу (в моем случае -- g)! Т.е. я нажимаю не просто Alt, а Alt+g.

Posted: Fri 26 Dec, 2014 06:31
by John Doe
Вы жмете Alt-символ, после этого открывается быстрый поиск. Для того чтобы фильтр получил управление нужно еще одно нажатие.
(Я просто объясняю детали реализации, и не имею ввиду, что "еще одно нажатие" тут поможет).

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

Для запуска фильтра необходимо использовать одиночный Alt (или другой шорткат на ваш выбор).

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

Posted: Fri 26 Dec, 2014 19:36
by John Doe
Новая версия:
  • Глобального переключения режима (CtrlAltF) больше нет. Вместо этого, автофильтр включается только по шорткату.
  • Любое действие (кроме Ctrl[Shift]Enter) отключает автофильтр, и снимает фильтр панели.
    Чтобы выйти из автофильтра, сохранив фильтр панели, можно повторно нажать клавишу вызова (Alt).
  • Если фильтр панели сброшен, то при следующей активации автофильтра подставится пустая строка.
    Но можно восстановить предыдущее значение автофильтра повторным нажатием клавиши вызова (Alt)
  • Нажатие \,/ в автофильтре отключает/включает фильтрацию папок.
  • Нажатие Esc в панели сбрасывает ранее установленный автофильтром фильтр.
  • Экспериментально: при наличии активного фильтра меняется цвет рамки панелей.
    К сожалению в фаре невозможно изменить цвет только одной панели, со всеми вытекающими.
    Цвета (4-битные) заданы в таблице FG.
Вложение в шапке (описание ещё не обновил)

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

Posted: Mon 29 Dec, 2014 15:34
by fml2
John Doe wrote: Глобального переключения режима (CtrlAltF) больше нет. Вместо этого, автофильтр включается только по шорткату.
Гм... Возникает вопрос: если эта функциональность теперь вызывается отдельно, то зачем "притворяться", что это быстрый поиск? Т.е. зачем использовать ГУИ быстрого поиска? Почему не сделать собственный диалог (возможно, с какими-то элементами, которых нет в диалоге быстрого поиска -- например, птичкой для фильтрации папок).

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

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

Если буду развивать, то рано или поздно придется переделать на собственный диалог (например фильтр по обоим раскладкам в быстром поиске сделать проблематично).

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

Posted: Tue 30 Dec, 2014 12:04
by John Doe
Сейчас автофильтр реализован как обычный фильтр включения.
Но что если панель уже отфильтрована другим фильтром?
Наш автофильтр (в текущей реализации) уже не способен уменьшить количество элементов на панели, он может разве что добавить.

Вопрос ко всем заинтересованным: следует ли принять это как фичу, или надо переделать автофильтр на фильтр исключения?
(Ещё вчера я ориентировался на первый вариант, и уже начал развивать, но...)

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

Posted: Thu 01 Jan, 2015 21:57
by fml2
John Doe wrote: Наш автофильтр (в текущей реализации) уже не способен уменьшить количество элементов на панели, он может разве что добавить.
Правильно ли я понимаю, что эта "фича" обусловлена тем, что выбранные пункты в меню фильтрации соединяются по "или"? И что интуитивно ожидаемого эффекта (т.е. дальнейшего ограничения показываемых файлов) легко было бы достичь, если бы была возможность создавать (по крайней мере, в памяти, т.е. с помощью АПИ) сложные структуры вложенности, т.е. выражения типа "(А или Б) и В"? В нашем случае "А или Б" это то, что установлено фильтром через ГУИ, а добавка "и В" -- это то, что привносилось бы вашим доплонительным фильтром.

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

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

Что касается "интуитивно ожидаемого эффекта", то я же написал, что это решаемо.

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

Posted: Tue 13 Jan, 2015 13:41
by John Doe
Обновление:
  • Переделано на фильтр исключения, для того чтобы сочетание с другими фильтрами приводило к ожидаемым результатам.
  • При открытом (и активном) автофильтре комбинация CtrlF4 открывает установки текущего фильтра в диалоге.
    Тот же диалог открывается вместо панельки автофильтра в случае, если панель ни содержит ни одного подходящего под активный фильтр элемента.
  • Настройки ClearOnCommand больше нет.
    Вместо неё теперь можно задать отдельные хоткеи для "немодального" и "постоянного" режимов (по умолчанию LAlt и RAlt соответственно).
  • Описание в шапке переработано.

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

Posted: Tue 14 Apr, 2015 21:32
by 4ekucT
В последних билдах FAR скрипт конфликтует с макросами назначенными на кнопки Alt. Например, у меня был переназначен поиск LFSearch на AltF7 - отвалился...

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

Posted: Wed 15 Apr, 2015 01:24
by 2useven10

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

Posted: Wed 17 Jun, 2015 12:20
by IgorZ
Попробовал. Интересная и полезная штука, беру на вооружение. Но обнаружена бага: у меня цвет панелей Фара - синий с белыми рамками. После снятия фильтра цвет рамок изменяется на голубой, а не восстанавливается белый.

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

Posted: Wed 17 Jun, 2015 14:40
by John Doe
Бага в том, что функция изменения цвета должна быть в релизе закомментирована, т.к. нет надёжного способа изменить цвет временно.
При нестандартной цветовой схеме единственное приемлемое решение — это вручную вписать нужные константы цветов.
Определить нужное значение можно например запустив из командной строки lua:=far.AdvControl("ACTL_GETCOLOR",far.Colors.COL_PANELBOX).ForegroundColor