Улучшение меню с дублирующимися хоткеями

Здесь обсуждается всё, что касается макросов.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

Latest post of the previous page:

Ранее я упоминал о попытке приспособить макрос №3 (немодальный фильтр) из набора SmartMenuFilter для совместной работы с сабжевыми макросами.

Однако сочетание модификаторов AltShift оказалось весьма неудобным. И из-за того, что занимает Shift, который может понадобиться для ввода завязанного на него хоткея. И из-за того, что само по себе очень часто по умолчанию применяется в качестве переключателя раскладок клавиатуры (что чревато сбивками при вводе букв в фильтр).

А так как одиночный Ctrl занят, то попробовал я посадить этот макрос на сочетание модификаторов LCtrlLAlt. И пока что вроде бы работает эта связка хорошо, немодальный фильтр обслуживает, нативному фильтру не препятствует, правой спайке Ctrl`а и Alt`а реализовывать макросы по CtrlAlt-знак не мешает.



Другие попытки приспособить другие макросы из набора SmartMenuFilter к бесконфликтной работе с сабжевыми продолжаются.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

sToLp wrote: local key = akey(1):match(("CtrlAlt(.+)") or RAlt)
А что тут делает RAlt?
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

В пункте 3 кроме прочего сказано:
Полностью сбросить можно одиночным нажатием на правый Alt.
Но если or RAlt не добавить, то данное условие не работает.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

Вы не указали к каким файлам относятся ваши изменения.
sToLp wrote: и строку local key = akey(1):match("R?AltShift(.+)")
Это я не нашёл.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

В моём посте приведена отсылка на правленый уже к тому времени макрос №3:
sToLp wrote:Ранее я упоминал о попытке приспособить макрос №3 ...
а это было:
sToLp wrote:Для этого я внёс следующие немудрёные дополнения в 2 его строки:
key="/^[RL]Alt[b]Shift[/b](BS|Add|Subtract|Multiply|Divide|BackSlash|ShiftBackSlash|.|Shift.[b]|Space[/b])$/";
и
local key = akey(1):match("R?Alt[b]Shift[/b](.+)").
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

sToLp, Бррр.
Рекомендую объединить ваши рекомендации в одном посте.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

"Рекомендации" — это громко сказано. Скорее уж, мои консультации у Вас.
Добавил в свой первый сегодняшний пост (в спойлер) макрос в последней по времени используемой мною редакции.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

sToLp wrote:попытки приспособить другие макросы из набора SmartMenuFilter к бесконфликтной работе с сабжевыми продолжаются

Докладываю о результатах на текущий момент.

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

Следующим по удобству использования, по моему убеждению, является немодальный фильтр меню — это №3 из SmartMenuFilter (по-моему, всё-таки удобнее набирать искомый текст с нажатыми модификаторами, чем отдельно включать/выключать фильтр).

На третьем месте — штатный фильтр, вызываемый правым альтом (вполне достаточно чтобы периодически при необходимости включать\выключать его).

Автофильтр же из SmartMenuFilter я фактически не использую. Очень уж непрактичным показалось мне оставлять фильтр в режиме "авто" — мешает и работе с хоткеями, и немодальному фильтру. Но и даже если бы был возможен только один фильтр (нативный) без других вариантов, то всё равно как-то удобнее включать\выключать его, когда необходимо, чем держать его постоянно включённым.

На нижеприведённой картинке видно на какие шорткаты в конце концов оказались повешены применяемые мною макросы фильтрации в меню:
hotkey_filter.png
hotkey_filter.png (105.41 KiB) Viewed 9781 times
Может быть не лишне отметить, что поскольку сочетания CtrlAlt-key заняты в фильтре немодальных меню, то CtrlAltBS не вяжется в систему данных макросов, и поэтому этот шорткат заменён на CtrlAltShiftBS. И, между прочим, он прижился не только в фильтрах, но вообще во всех случаях применения XLat.

В целом получился замечательный комбайн. Большое Вам спасибо за разработку составляющих его макросов и их публикацию!
Last edited by sToLp on Mon 05 Jan, 2015 18:30, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

sToLp wrote: Автофильтр же из SmartMenuFilter я фактически не использую. Очень уж непрактичным показалось мне оставлять фильтр в режиме "авто" — мешает и работе с хоткеями, и немодальному фильтру
Хоткеям мешать может. Но напомню, что автофильтр включается раздельно для каждого меню/списка, а значит можно активировать выборочно только там, где нет хоткеев (например в историях).

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

Конец фразы я не совсем понял: зачем использовать немодальный фильтр одновременно с автофильтром?
sToLp wrote: CtrlAltL не вяжется в систему данных макросов
Там вообще-то функцию CtrlAltL выполняет макрос на LAlt.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

John Doe wrote:напомню, что автофильтр включается раздельно для каждого меню/списка, а значит можно активировать выборочно только там, где нет хоткеев (например в историях).

Но даже если в меню хоткеи есть, всё зависит от того, как вы с ними хотите работать: например я даже в таких меню чаще использую фильтр (напомню что при включенном автофильтре хоткеи тоже доступны, посредством двойного нажатия).
Спасибо за разъясняющие рекомендации! Похоже, что к автофильтру надо бы ещё присмотреться.
John Doe wrote:зачем использовать немодальный фильтр одновременно с автофильтром?
Так вместе их я и не использую. Потому что пока немодальный фильтр мне кажется сподручнее автофильтра.
John Doe wrote:
sToLp wrote: CtrlAltL не вяжется в систему данных макросов
Там вообще-то функцию CtrlAltL выполняет макрос на LAlt.
LAlt у меня занят совсем другим макросом. И речь не о фиксации фильтра, а о переключении из режима модального фильтра в режим нативного фильтра и обратно. Порой это бывает полезно, когда надо отвлечься на некоторое время, например, и при опробовании и сопоставлении фильтров тоже.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Улучшение меню с дублирующимися хоткеями

Post by HaRT »

Спасибо за удобный скрипт.
Пара багрепортов (Far Manager v3.0 build 4665 x86 (2016-05-09)):
John Doe wrote: Если использовать хоткей с модификатором Ctrl, то хоткей срабатывает независимо от того, есть ли в списке дубликаты.
1. Не то чтобы мне это было очень важно, но при нажатии Ctrl-ГорячаяКлавиша не происходит ровно ничего — ни в изначальном меню, ни в отфильтрованном по хоткею (проверял на меню Plugin commands, User menu, EMenu).
John Doe wrote: При первом нажатии в списке остаются только элементы с хоткеем, соответствующем нажатой клавише.
2. Очень странно взаимодействует с выпадающими списками в диалогах. Например (язык интерфейса английский, пользуюсь только шоткатами/хоткеями), открываю Find file (AltF7), там открываю search area (AltA), там выбираю In PATH folders (P), затем снова открываю выпадашку (CtrlDown) и вижу, что в ней , притом тот, который был в тот момент текущим. Я бы ожидал, что раз уж скрипт обслуживает этот список, то чтобы, как в меню, элементы отфильтровались, но список бы не закрылся.
В аналогичном сценарии для RESearch после выбора первого элемента (N) получается и вовсе .
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Улучшение меню с дублирующимися хоткеями

Post by HaRT »

И несколько пожеланий:
1. Как-то индицировать, что меню отфильтровано, — например, как для обычного фильтра “[ТутГорячаяКлавиша]” в заголовке меню, тем более, что использование „горячего символа“ в качестве обычного фильтра даёт именно такой результат.
2. Добавить Backspace в качестве клавиши, отменяющей фильтр по хоткею (а в идеале также предоставить возможность оставить только его). Базовую часть я себе тривиальным образом сделал; сюда же написал, чтобы дать шанс другим получить это из коробки.
3. Поддержать Alt-позиционирование на горячие клавиши, для ввода которых требуется нажатие Shift (например ‘#’, ‘_’).
Last edited by HaRT on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Тривиальное добавление BS приводит к закономерному нарушению поведения
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Улучшение меню с дублирующимися хоткеями

Post by HaRT »

И ещё одна неприятность: в присутствии ConcurrentHotkeys стандартный скрипт AltScreens перестаёт работать — открывается список окон, а в нём происходит всего лишь позиционирование. Добавление flags = 'NoSendKeysToPlugins'; не помогает; пришлось дописать if Area.Menu then Keys'Enter' end.
Last edited by HaRT on Thu 12 Sep, 2019 23:30, edited 2 times in total.
Reason: Исправлено поведение в модальных диалогах (не срабатывали мнемоники Alt+Цифра из полей ввода)
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Улучшение меню с дублирующимися хоткеями

Post by Shmuel »

User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

Прежде всего, скрипт надо бы пересмотреть, т.к. в своё время было сделано немало приседаний вокруг багов фара (ссылки на мантис в коде), а в фаре кое-что правилось (билд 4640).
HaRT wrote: Очень странно взаимодействует с выпадающими списками в диалогах
Возможно связано с недавними изменениями, в данном случае скорее всего стоит запретить работу скрипта в комбобоксах.
HaRT wrote: стандартный скрипт AltScreens перестаёт работать
Кто-то добрый решил что нам это не надо

Update
Обойти можно изменив в событии D91B58E5-4C32-4384-B205-D7895A4EC037 condition на следующий:

Code: Select all

  condition=function(Event,param) return Event==F.DE_DLGPROCINIT and far.MacroGetState()==F.MACROSTATE_EXECUTING_COMMON end;
В идеале проверять также на MACROSTATE_RECORDING_COMMON.

А MACROSTATE_NOMACRO у нас не бывает никогда, извините.
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

Улучшение меню с дублирующимися хоткеями

Post by siberia-man »

Встретился баг. Куда писать? Наверно это сюда.

Windows 7 Enterprise SP1
Far3.0.5454 x86
Стандартный плагин поиска
Стандартный FarColorer
Макрос из первого сообщения

Как воспроизвести
  1. Поиск по Alt-F7
  2. Открыть любой файл в редакторе
  3. Команды плагинов
  4. FarColorer
  5. Список типов
  6. Нажать грячую клавишу (ВАЖНО: одна горячая клавиша должна быть назначена для нескольких пунктов меню выбора синтаксиса)
Так получается, если выполнить всю последовательность, не переключаясь на другие окна


Так получается, если выполнить всю последовательность, переключится на другое окно и вернуться в ФАР между пунктами 5 и 6
Last edited by siberia-man on Tue 27 Aug, 2019 15:37, edited 1 time in total.
Post Reply

Return to “Обсуждение макросов”