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

Здесь обсуждается всё, что касается макросов.
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:

John Doe wrote:All, из макроса "Reset filters" необходимо убрать область MainMenu
Хорошо. Тем более, что Главное меню ещё и не затрагивалось практически. Поскольку, кажется, что оно ни с точки зрения дублирования хоткеев, ни в плане простой фильтрации, особого интереса вроде бы пока и не представляет. Разве что тогда, когда пользователю будет позволено расширять и дополнять его.
John Doe wrote:sToLp, если интересно, то этот же макрос можно переписать и в виде события
Очень даже интересно!
John Doe wrote:Никаких бонусов это впрочем не даёт.
Может быть на практике в конечной реализации особой разницы и нету. Но при этом в сравнении ведь легче усвоить различия между обычным макросом и макросом по событиям. А это само по себе тоже дополнительная польза. Большое спасибо за обнародование вариации макроса!
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: Тем более, что Главное меню ещё и не затрагивалось практически. Поскольку, кажется, что оно ни с точки зрения дублирования хоткеев, ни в плане простой фильтрации, особого интереса вроде бы пока и не представляет.
Уточню на всякий случай: макрос отвечал только за сброс фильтра по Esc, всё остальное потенциально работает в главном меню так же как и в любом другом.
Например сейчас в меню Параметры дублируется хоткей "ы".

Режимы панели файлов
Кодовые страницы
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

Да! ConcurrentHotkeys и в Главном меню тоже обеспечивает фильтрацию по конкурирующим хоткеям:
2sMainMenu.png
2sMainMenu.png (29.75 KiB) Viewed 7519 times
Но когда я писал о том, что Главное меню в плане применения ConcurrentHotkeys "особого интереса пока не представляет", то подразумевал под этим не то, что в этом меню мало конкурирующих хоткеев, и не то, что по одиночным хоткеям Главное меню не фильтруется. В данном случае это, по-моему, пока не так важно. Существенное отличие Главного меню от других в том, что хоткеи в нём не зависят от текущей раскладки клавиатуры. Безразлично, нажимаю ли я на клавишу с буквами S/Ы в английской или в русской раскладке, всё равно сработает хоткей ы. Поскольку в русском интерфейсе английских хоткеев в Главном меню и не дано.

И для работы с Главным меню это уже привычно. А вот для работы с теми меню, которые я как пользователь имею возможность настраивать сам, лично для меня такой принцип срабатывания хоткеев представляется нежелательным ограничением. Поскольку предпочитаю и считаю намного более удобным различать в качестве хоткеев РУССКИЕ БУКВЫ и english letters. И мой в целом положительный опыт опробования и применения ConcurrentHotkeys с этой позиции показывает следующее.

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

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

Это опробовано по каждой из букв обоих алфавитов в меню "Ассоциации для файлов (File associations)". В других меню — пока выборочно.
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: в этом меню мало конкурирующих хоткеев
В этом меню вообще не должно быть конкурирующих хоткеев...
sToLp wrote: С неповторяющимися же хоткеями иная ситуация. Для аглицких хоткеев тоже вызывается отфильтрованное меню (в котором только одна позиция).
Да, это неправильно (причина описана на багтрекере http://bugs.farmanager.com/view.php?id=2881).
Стоит подправить "Concurrent hotkeys menu filter". Добавьте перед return 0 вот эту строку:

Code: Select all

if Object.ItemCount==1 then return param.hDlg:send"DM_CLOSE" end
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 »

  • Нажатие Esc или F10 отменяет фильтр.

Esc сбрасывает отфильтрованное меню и возвращает к родительскому. И это хорошо.
А вот когда макрос "Reset filters" заменён на обработчик F10 отменяет также и родительское меню.
И это, по-моему, тоже хорошо.
И я за то, чтобы так и было — и можно бы просто уточнить анонс.
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: А вот F10 отменяет также и родительское меню.
У варианта в шапке это не так, потому что в макросе указаны обе клавиши.
Исправить сами понимаете элементарно.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

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


С другими типами меню пока такого не встречал — все доселе опробованные меню на макрос-обработчик и на обычный макрос реагировали однотипно.
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 »

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

Похоже какая-то особенность фара, или даже баг.
В скрипте исправить просто, достаточно вызов Menu.Filter переставить ниже, перед return 1
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:В скрипте исправить просто, достаточно вызов Menu.Filter переставить ниже, перед return 1
Да, это тоже подтверждаю: переставил, и теперь меню "Выберите ассоциацию" на обработчик реагирует правильно. Благодарю Вас!
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 »

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 »

Прошу прощения, в обработчике Ctrl-<хоткей> забыл убрать отладочный код: .
Обновил в шапке.

sToLp, спасибо за репорт.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

Ранее я упоминал о попытке приспособить макрос №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(.+)")
Это я не нашёл.
Post Reply

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