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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 14354
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 475 times
Contact:

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

Post by John Doe »

Возможность фильтрации меню и списков появилась в фаре как экспериментальная, и до логического завершения так и не доведена.
В частности, неудобны такие вещи:
  • для работы с фильтром надо комбинацией клавиш предварительно активировать режим фильтрации.
  • будучи режимным, фильтр не позволяет обычным образом пользоваться шорткатами и клавишей Backspace
В данной теме я предлагаю макросы, позволяющие некоторым образом компенсировать перечисленные недостатки.
(у фильтров в фаре конечно есть и другие проблемы, но их я тут не затрагиваю)
  1. Автофильтр меню — автоматическая активация режима фильтрации в заданных меню.
    • По умолчанию во всех 3х историях, в меню плагинов и их конфигурации, в far:config, в историях полей ввода и кое-где ещё.
    • Комбинация CtrlAltF служит для того чтобы включить или отключить автоматическую активацию для какого-либо меню (или диалога в котором первый фокусный элемент — листбокс).
    • Это возможно в любых меню и диалогах, в том числе плагиновых и созданных скриптом или макросом.
      Для различения меню/списков используется гуид (если определён), или заголовок (если не пустой).
    • Автофильтр можно отдельно активировать для:
      • MainMenu (нажать CtrlAltF в главном меню)
      • Историй полей ввода (открыть историю любого из полей и нажать CtrlAltF, после этого автофильтр будет активироваться во всех историях)
    Минимальный требуемая версия фара: 3.0.3892
  2. Если пункты меню снабжены хоткеями, то очевидно что в режиме фильтрации невозможно ими воспользоваться напрямую (только через Alt, что не совсем привычно).
    Поэтому с помощью макроса я реализовал альтернативное поведение (для режима фильтрации):
    Для активации пункта с каким-либо хоткеем достаточно нажать соответствующую клавишу дважды.
  3. В качестве альтернативы вышеприведённым макросам можно рассмотреть реализацию немодального фильтра меню.
    Помимо всех меню поддерживается работа в автодополнении, в выпадающих и прочих списках.
    • Работает подобно Быстрому Поиску в панелях: для работы с фильтром необходимо удерживать Alt.
    • После отпускания Alt фильтр не сбрасывается. Полностью сбросить можно одиночным нажатием на правый Alt.
      Или же как обычно использовать Backspace (Alt-BS) для посимвольного удаления.
    • Есть поддержка символов, требующих Shift (вряд ли востребовано, слишком много модификаторов).
    • По техническим причинам ввод кириллицы реализован через одно место, но на первый взгляд всё работает.
  4. И для коллекции ещё пара простых макросов:
Last edited by John Doe on Wed 18 Jun, 2025 20:00, edited 1 time in total.
Reason: Обновление MenuAutoFilter.lua
User avatar
John Doe
Бюрократ
Posts: 14354
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 475 times
Contact:

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

Post by John Doe »

Latest post of the previous page:

Возьму на заметку.
Однако для вашего случая ещё удобнее было бы запоминать позицию в списке, безо всяких фильтров.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14354
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 475 times
Contact:

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

Post by John Doe »

Shmuel wrote: Fri 22 Jan, 2021 13:02 Это любопытно. Проверка показала, что Menu.Id вне меню уже было пустой строкой (ещё до Lua), а стало nil только в одном из билдов диапазона [4693-4695]. Так что, можно сказать, вернулось в исходное состояние.
Скрипт в шапке датируется 14 годом, соответствующие билды фара 3784-3821.
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7054
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 45 times
Been thanked: 593 times

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

Post by Shmuel »

John Doe wrote: Fri 22 Jan, 2021 15:05 Скрипт в шапке датируется 14 годом, соответствующие билды фара 3784-3821.
На самом деле тут сложнее: я делал проверку Menu.Id для области Shell, и была пустая строка. Сейчас посмотрел для области Dialog, там оказался nil.
User avatar
HaRT
Moderator
Posts: 11290
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 253 times
Been thanked: 392 times

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

Post by HaRT »

John Doe wrote: Fri 22 Jan, 2021 10:33Фикс такой:
К сожалению, этот фикс ломает как минимум ввод в поле маски при поиске файлов: при вводе первого символа открывается история ввода (ожидаемо), но со включённой фильтрацией (неожиданно), и фильтр перехватывает ввод, а автоматически выбранное непустое значение подставляется в поле ввода. Пришлось откатиться к опубликованной версии, т.к. поиском пользуюсь всё-таки куда чаще, чем редактором конфига.
John Doe wrote: Fri 22 Jan, 2021 13:40 для вашего случая ещё удобнее было бы запоминать позицию в списке, безо всяких фильтров
Для описанного сценария согласен (ещё одно предложение–пожелание). Но, например, когда играешь с несколькими родственными настройками, которые лексикографически не подряд, одной текущей позицией не всегда обойдёшься, и быстрое восстановление фильтра всё-таки не помешало бы.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14354
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 475 times
Contact:

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

Post by John Doe »

HaRT wrote: Wed 27 Jan, 2021 00:46 при вводе первого символа открывается история ввода (ожидаемо), но со включённой фильтрацией (неожиданно)
При вводе первого символа открывается не история, а автодополнение.

Это похоже что-то у вас поломалось.
Сбросьте настройки: lua:mf.msave("JD","MenuAutoFilter")
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7054
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 45 times
Been thanked: 593 times

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

Post by Shmuel »

John Doe wrote: Thu 21 Jan, 2021 18:55 Чрезвычайно полезный скрипт для таких случаев, было бы здорово если бы вы им поделились.
Сегодня скрипту исполнился год. Выложил у себя на гитхабе.
User avatar
HaRT
Moderator
Posts: 11290
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 253 times
Been thanked: 392 times

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

Post by HaRT »

John Doe wrote: Wed 27 Jan, 2021 11:22
HaRT wrote: Wed 27 Jan, 2021 00:46 при вводе первого символа открывается история ввода (ожидаемо), но со включённой фильтрацией (неожиданно)
При вводе первого символа открывается не история, а автодополнение.

Это похоже что-то у вас поломалось.
Сбросьте настройки: lua:mf.msave("JD","MenuAutoFilter")
Вспомнил об этой проблеме, решил посмотреть ещё разок. Проверяю на пустом профиле, с единственным плагином и единственным скриптом (из архива в шапке с применённым исправлением). фокус в поле ввода (подчерком обозначено положение каретки). фокус уже в выпадающем меню, первое непустое значение подставилось в поле ввода. Это ровно то, на что я тогда жаловался и почему отменил предложенное исправление, пожертвовав автоматическим включением фильтра в редакторе конфигурации (far:config).
Far Manager, version 3.0.6492.0 x86

P.S.
Примечательно, что в режиме записи макроса автодополнение не открывается и, соответственно, проблема не проявляется.
Last edited by HaRT on Tue 17 Jun, 2025 23:05, edited 1 time in total.
Reason: Добавлен постскриптум
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14354
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 475 times
Contact:

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

Post by John Doe »

Code: Select all

moon:far.Menu {Title:"History"}, {}
В меню нажмите CtrlAltF.

После чего проверьте снова в диалоге поиска файлов.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 11290
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 253 times
Been thanked: 392 times

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

Post by HaRT »

John Doe wrote: Wed 18 Jun, 2025 10:16 После чего проверьте снова в диалоге поиска файлов.
К сожалению, в диалоге поиска файлов ничего не меняется, вне зависимости от того, включаю я в том меню фильтр или выключаю. (Проверял снова с чистым профилем, притом и с -ro, и без.)
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14354
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 475 times
Contact:

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

Post by John Doe »

Обнаружил что у меня в локальной версии "фикс" был не только в этом месте.
В шапке обновил (не во вложении!)
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 11290
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 253 times
Been thanked: 392 times

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

Post by HaRT »

John Doe wrote: Wed 18 Jun, 2025 19:02 Обнаружил что у меня в локальной версии "фикс" был не только в этом месте.
В шапке обновил (не во вложении!)
Спасибо большое, всё починилось!
Может, тогда стоит вложение оттуда удалить, чтобы людей не путать? Заодно прописать причину изменения, чтобы было видно, что жизнь не стоит на месте. Ну и хорошо бы в качестве заголовка spoiler'а задать предлагаемое имя файла. Я готов сам это всё проделать, если вы не против.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14354
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 475 times
Contact:

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

Post by John Doe »

Сделал.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14354
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 80 times
Been thanked: 475 times
Contact:

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

Post by John Doe »

Ещё пара изменений. Заработали Divide (/) и символы нажимаемые с помощью AltGr.
https://t.me/FarManager — Telegram чат
Post Reply

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