SmartMenuFilter — макросы для фильтров меню/списков

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

SmartMenuFilter — макросы для фильтров меню/списков

Postby John Doe » Wed 22 Jan, 2014 16:01

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

  1. Автофильтр меню — автоматическая активация режима фильтрации в заданных меню.
    • По умолчанию во всех 3х историях, в меню плагинов и их конфигурации, в far:config, в историях полей ввода и кое-где ещё.
    • Комбинация CtrlAltF служит для того чтобы включить или отключить автоматическую активацию для какого-либо меню (или диалога в котором первый фокусный элемент — листбокс).
    • Это возможно в любых меню и диалогах, в том числе плагиновых и созданных скриптом или макросом.
      Для различения меню/списков используется гуид (если определён), или заголовок (если не пустой).
    • Автофильтр можно отдельно активировать для:
      - MainMenu (нажать CtrlAltF в главном меню)
      - Историй полей ввода (открыть историю любого из полей и нажать CtrlAltF, после этого автофильтр будет активироваться во всех историях)
    Минимальный требуемая версия фара: 3.0.3821
  2. Если пункты меню снабжены хоткеями, то очевидно что в режиме фильтрации невозможно ими воспользоваться напрямую (только через Alt, что не совсем привычно).
    Поэтому с помощью макроса я реализовал альтернативное поведение (для режима фильтрации):
    Для активации пункта с каким-либо хоткеем достаточно нажать соответствующую клавишу дважды.

  3. В качестве альтернативы вышеприведённым макросам можно рассмотреть реализацию немодального фильтра меню.
    Помимо всех меню поддерживается работа в автодополнении, в выпадающих и прочих списках.
    • Работает подобно Быстрому Поиску в панелях: для работы с фильтром необходимо удерживать Alt.
    • После отпускания Alt фильтр не сбрасывается. Полностью сбросить можно одиночным нажатием на правый Alt.
      Или же как обычно использовать Backspace (Alt-BS) для посимвольного удаления.
    • Есть поддержка символов, требующих Shift (вряд ли востребовано, слишком много модификаторов).
    • По техническим причинам ввод кириллицы реализован через одно место, но на первый взгляд всё работает.
  4. И для коллекции ещё пара простых макросов:
Attachments
SmartMenuFilter.7z
8/03/2014
(2.86 KiB) Downloaded 77 times

Shmuel
Posts: 4911
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 118 times

Re: SmartMenuFilter — макросы для фильтров меню/списков

Postby Shmuel » Wed 22 Jan, 2014 16:12

А зачем регулярное выражение key="/^[RL]Ctrl[RL]AltBS$/", почему не просто key="CtrlAltBS" ?

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

Re: SmartMenuFilter — макросы для фильтров меню/списков

Postby John Doe » Wed 22 Jan, 2014 16:13

Перемудрил )

P.S.
Перезалил.
"Немодальный фильтр" должен работать не только во всех меню, но и в списках историй, в автодополнении, и прочих выпадающих списках и листбоксах (например в диалоге плагина UpdateEx)

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby John Doe » Thu 23 Jan, 2014 16:00

Автоактивацию фильтра можно добавить и в другие меню, например:

А меню File associations я вызываю консольным алиасом ass=lm:post Keys "F9 c a RAlt" print("$*")

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby John Doe » Mon 27 Jan, 2014 14:41

Макросы для автоматической активации фильтра в некоторых меню отправлены в отставку.
Вместо этого используется новый скрипт, позволяющий пользователю динамически включать/отключать автофильтр для любого меню/списка (перечень выбранных сохраняется в базе).

Автофильтр меню — автоматическая активация режима фильтрации в заданных меню.

  • По умолчанию во всех 3х историях, в меню плагинов и их конфигурации, в far:config и кое-где ещё.
  • Комбинация CtrlAltF служит для того чтобы включить или отключить автоматическую активацию для какого-либо меню, листбокса, или выпадающего списка (предварительно открытого). [пока что не работает, мантис 0002586]
  • Это возможно для любых меню и диалогов, в том числе плагиновых и созданных скриптом или макросом.
    Для различения меню/списков используется гуид (если определён), или заголовок (если не пустой).


Шапка обновлена
Last edited by HaRT on Mon 09 May, 2016 18:02, edited 1 time in total.
Reason: Добавлена ссылка на тикет

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby John Doe » Thu 30 Jan, 2014 16:39

Автофильтр меню пришлось переделать, теперь он не пытается активироваться на каждом фокусном элементе диалога (это сейчас нельзя сделать как следует, по причине неувязок в FAR API).
  • В диалогах автофильтр можно активировать для листбокса в случае если он является первым фокусным элементом.
  • Отдельно поддерживаются истории полей ввода: автофильтр включается/отключается сразу для всех.
    (ввиду отсутствия поддержки в API используется довольно кривое условие )

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby John Doe » Sun 02 Feb, 2014 11:48

Если меню открывать сразу с включенным фильтром, то возникает одно неудобство: не будет видно верхнего заголовка, т.к. вместо него отобразится пустой фильтр [].
Поэтому ранее в скрипте была организована задержка включения фильтра, чтобы сохранить заголовок видимым до нажатия какой-либо клавиши (waitkey/eval).
Как по мне этого вполне достаточно, если бы не баг 0002580, который портит некоторые макросы, если их вызывать через eval.

В связи с этим скрипт в очередной раз переделан.
  • Теперь фильтр включается только после нажатия буквы/цифры.
  • Заголовок при пустом фильтре теперь видим, а активность автофильтра индицируется как [] в конце заголовка.
  • MenuAutoFilter.lua теперь отдельным файлом

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby John Doe » Sat 08 Mar, 2014 13:14

MenuAutoFilter.lua:
  • Расширен диапазон клавиш, активирующих фильтр (символы с кодом >=32, сочетания с Shift, NumPad)
  • Исправлен баг, при определённых условиях способный вызвать падение плагина (независимо от этого с билда 3821 в фаре появилась защита от таких ошибок)
  • В скрипте используется метод rawhandle (luafar_manual.chm::/285.html), поэтому минимальный требуемый билд фара теперь 3821.

User avatar
HaRT
Moderator
Posts: 7884
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 62 times
Been thanked: 93 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby HaRT » Mon 09 May, 2016 18:19

John Doe wrote:Source of the post MenuAutoFilter.lua
Спасибо за ещё один удобный скрипт.
Как сделать, чтобы BS стирал не весь фильтр, а только его последний символ (так же, как в голом Фаре)?
А весь фильтр можно было бы удалять, например, по CtrlBS. (Или кто-то захочет задавать длинный фильтр и удалять его по словам?)
Last edited by HaRT on Mon 09 May, 2016 22:33, edited 1 time in total.
Reason: Вычеркнуто неактуальное
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby John Doe » Mon 09 May, 2016 19:32

HaRT wrote:Source of the post Как сделать, чтобы BS стирал не весь фильтр, а только его последний символ (так же, как в голом Фаре)?
Так и должно работать, наверно что-то в фаре изменилось, а я слишком давно не обновлялся...
Проверю всё когда обновлюсь (то же насчёт пожеланий в других темах)

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby John Doe » Mon 09 May, 2016 21:35

HaRT wrote:Source of the post Как сделать, чтобы BS стирал не весь фильтр, а только его последний символ (так же, как в голом Фаре)?
Не воспроизводится, возможно у вас конфликт с каким-то другим макросом.

User avatar
HaRT
Moderator
Posts: 7884
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 62 times
Been thanked: 93 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby HaRT » Mon 09 May, 2016 21:50

John Doe wrote:Source of the post возможно у вас конфликт с каким-то другим макросом
Вот ведь интересная ситуация выходит: если запускаю Фар без ConcurrentHotkeys или с ключом /p"%FARHOME%\Plugins\LuaMacro" (т.е. без прочих плагинов), то проблема пропадает (проверял в меню плагинов). Что-то я сомневаюсь, что может быть виноват какой-то из не-скриптовых плагинов…
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby John Doe » Mon 09 May, 2016 21:59

HaRT wrote:Source of the post Что-то я сомневаюсь, что может быть виноват какой-то из не-скриптовых плагинов…
но факты намекают..

User avatar
HaRT
Moderator
Posts: 7884
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 62 times
Been thanked: 93 times

SmartMenuFilter — макросы для фильтров меню/списков

Postby HaRT » Mon 09 May, 2016 22:32

John Doe wrote:Source of the post но факты намекают..
Разобрался, я сам дурак — добавил BS в ConcurrentHotkeys следом за Esc и F10, не подумав толком. Прошу прощения.
Фар есть инструмент, а не нянька. © 2009 DrKnS


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

Who is online

Users browsing this forum: No registered users and 4 guests