Скрипт фильтра пользовательского меню

Здесь обсуждается всё, что касается макросов.
Post Reply
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Скрипт фильтра пользовательского меню

Post by IgorZ »

У меня есть пользовательское меню. В нём довольно много команд, причём логически разбивающихся на подгруппы. С другой стороны, выделять их в подменю неохота, поскольку мне удобно, чтобы все команды данного меню были видны одновременно. Вот и родилось такое решение, как альтернатива подменю.
Данный скрипт улучшает работу с пользовательским меню. А именно, делает две вещи:
  • Если нажатая клавиша не найдена в списке горячих, то пытается найти её на другой раскладке. Теперь не надо с матом или без оного переключать раскладку и повторять попытку, если вместо "G" нажалась "П".
  • Если в меню есть более одного пункта с одной и той же горячей клавишей, вместо безусловного выбора первого из таких пунктов, выводится меню, состоящее из пунктов с данной горячей клавишей.
Версия 1.0 - Первый релиз.

Attachments
UserMenuFilter.1.0.7z
(646 Bytes) Downloaded 142 times
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Скрипт фильтра пользовательского меню

Post by John Doe »

IgorZ wrote:Теперь не надо с матом или без оного переключать раскладку и повторять попытку, если вместо "G" нажалась "П"
Это как?
Если у меня в меню есть пункт с хоткеем "G", то он без всяких скриптов отреагирует и на "G" и на "П".

Вторую фичу тоже не совсем понял: вы специально даёте пунктам одинаковые хоткеи, чтобы скриптом получать меню?

P.S.
Почему не используете gethotkey/checkhotkey?
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Скрипт фильтра пользовательского меню

Post by Wave »

Если у меня в меню есть пункт с хоткеем "G", то он без всяких скриптов отреагирует и на "G" и на "П".
Безотносительно: если у одного пункта меню хоткей G, а у другого П, то при нажатии кнопки выберется тот пункт, на котором языке мы сейчас. Как себя ведёт данный макрос в таком случае, я не смотрел.

Вторая фича очень удобна на больших списках меню. Скажем, я бы дорого за неё дал несколько лет назад, когда ФАР не умел динамически загружать-выгружать плагины и фильтровать списки и всех латинских букв на хоткеи меню плагинов не хватало. В общем, отличная идея, я её себе позаимствовал бы, если б всё ещё были б у меня длинные списки меню. Сейчас такой необходимости нет (конкурирующие плагины с одинаковыми хоткеями подгружаются по одному или вызываются макросами), зато надо разруливать конфликты макров — лень.

(для пользовательского меню мне надо бы из обработки исключить Alt, Esc и Bs или проверять, if AKey == 'Bs' then — а как правильно это сделать — не соображу. А для меню плагинов совместить с макросом от SimSU Common_RememberPlugin.lua и тоже Alt убрать из обработки. И может быть я о чём-то забыл.)
Пользуюсь ФАРом больше 20 лет © собирательный.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Скрипт фильтра пользовательского меню

Post by IgorZ »

John Doe wrote:
IgorZ wrote:Теперь не надо с матом или без оного переключать раскладку и повторять попытку, если вместо "G" нажалась "П"
Это как?
Если у меня в меню есть пункт с хоткеем "G", то он без всяких скриптов отреагирует и на "G" и на "П".
Писал дома. Там почему-то хоткей не срабатывал, если не на той раскладке. Возможно, потому что под WINE. Возможно, из-за причины, указанной в ответе на постскриптум. Сейчас проверил на работе под XP. Действительно, Вы правы, работает. Надо бы и дома ещё раз проверить. На всякий случай.
John Doe wrote:Вторую фичу тоже не совсем понял: вы специально даёте пунктам одинаковые хоткеи, чтобы скриптом получать меню?
Поясняю. У меня есть пользовательское меню. В нём довольно много команд, причём логически разбивающихся на подгруппы. С другой стороны, выделять их в подменю неохота, поскольку мне удобно, чтобы все команды данного меню были видны одновременно. Вот и родилось такое решение, как альтернатива подменю.
John Doe wrote:Почему не используете gethotkey/checkhotkey?
Делалось в постпраздничном состоянии, голова работала странно.
Wave wrote:
Если у меня в меню есть пункт с хоткеем "G", то он без всяких скриптов отреагирует и на "G" и на "П".
Безотносительно: если у одного пункта меню хоткей G, а у другого П, то при нажатии кнопки выберется тот пункт, на котором языке мы сейчас. Как себя ведёт данный макрос в таком случае, я не смотрел.
Сейчас обрабатывает нажатые хоткеи на данной раскладке, а если не найдены, то на альтернативной. Предлагаете рассматривать их как одну и ту же клавишу? Возможно, сделаю.
Wave wrote:(для пользовательского меню мне надо бы из обработки исключить Alt, Esc и Bs или проверять, if AKey == 'Bs' then — а как правильно это сделать — не соображу. А для меню плагинов совместить с макросом от SimSU Common_RememberPlugin.lua и тоже Alt убрать из обработки. И может быть я о чём-то забыл.)
Все клавиши, которые не опознаны как хоткеи, возвращаются Far-у. Вы об этом?
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Скрипт фильтра пользовательского меню

Post by Wave »

Нет, я о том, что у меня свои макросы, прицепленные на Alt, Esc и Bs. Либо их функционал надо внести в ваш, либо ваш к себе, я не рылся в документации, но то, что пробовал интуитивно — if AKey == 'Bs' then — не срабатывает. Переписывать регулярку key="/.*/" чтобы она не ловила эти клавиши ещё непонятней сходу.
Впрочем, глянув ещё раз, akey(1,1) помогает. Теперь придумать, как подружить с макросом SimSU, уж очень там уровней абстракции много.
Поясняю. У меня есть пользовательское меню. В нём довольно много команд, причём логически разбивающихся на подгруппы. С другой стороны, выделять их в подменю неохота, поскольку мне удобно, чтобы все команды данного меню были видны одновременно. Вот и родилось такое решение, как альтернатива подменю.
Во-во. Оно самое, ещё один вариант фильтра, интеллектуальный. Следующее применение — это страховка от того, что случайно по запаре одинаковые хоткеи назначишь. Особенно при динамическом меню легко пропустить.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Скрипт фильтра пользовательского меню

Post by John Doe »

IgorZ wrote:Там почему-то хоткей не срабатывал, если не на той раскладке
Следует учитывать, что xlat тут работает только в одну сторонгу, т.е. если хоткей "П", то по нажатию "G" ничего не произойдёт (всё это когда-то обсуждалось, вот какая-то тема)
IgorZ wrote:
John Doe wrote:Вторую фичу тоже не совсем понял: вы специально даёте пунктам одинаковые хоткеи, чтобы скриптом получать меню?
Поясняю. У меня есть пользовательское меню. В нём довольно много команд, причём логически разбивающихся на подгруппы. С другой стороны, выделять их в подменю неохота, поскольку мне удобно, чтобы все команды данного меню были видны одновременно. Вот и родилось такое решение, как альтернатива подменю.
Вот с этого надо начать шапку.
Wave wrote:Нет, я о том, что у меня свои макросы, прицепленные на Alt, Esc и Bs.
Эти клавиши не будут опознаны как хоткеи, и будет предпринята попытка выполнить их как макросы. См. в коде eval(key,2)
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Скрипт фильтра пользовательского меню

Post by Max Rusov »

John Doe wrote:Следует учитывать, что xlat тут работает только в одну сторонгу, т.е. если хоткей "П", то по нажатию "G" ничего не произойдёт (всё это когда-то обсуждалось, вот какая-то тема)
С чего это? Все работает в обе стороны.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Скрипт фильтра пользовательского меню

Post by John Doe »

facepalm2
Вот блин...
Может действительно не везде работает, проверю вечером.
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Скрипт фильтра пользовательского меню

Post by Wave »

John Doe wrote:
Wave wrote:Нет, я о том, что у меня свои макросы, прицепленные на Alt, Esc и Bs.
Эти клавиши не будут опознаны как хоткеи, и будет предпринята попытка выполнить их как макросы. См. в коде eval(key,2)

Code: Select all

 ╔══════════════ Исполнить макрос ══════════════╗
 ║  Common: BS в меню переходит на уровень выше ║
 ║  User menu auto filter                       ║
 ╚════════ AltF4 - открыть в редакторе ═════════╝
Так что надо или текст моего макроса внести в текст этого, обернув ифом, или в key этого макроса не /.*/ вписать, а что-то, что не ловит BS.
Забейте.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Скрипт фильтра пользовательского меню

Post by John Doe »

...или просто отрегулировать приоритеты, т.е. добавить поле priority=40; (можно и наоборот повысить приоритет, в данном случае без разницы)
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: Скрипт фильтра пользовательского меню

Post by Wave »

О, а за приоритеты я забыл! Это проще всего. Спасибо!
Пользуюсь ФАРом больше 20 лет © собирательный.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

Re: Скрипт фильтра пользовательского меню

Post by IgorZ »

IgorZ wrote:Писал дома. Там почему-то хоткей не срабатывал, если не на той раскладке. Возможно, потому что под WINE. Возможно, из-за причины, указанной в ответе на постскриптум. Сейчас проверил на работе под XP. Действительно, Вы правы, работает. Надо бы и дома ещё раз проверить. На всякий случай.
Проверил. Действительно, под WINE не работает, т. е., если хоткей="G", то "П" не активирует данный пункт меню. Так что, по крайней мере, для меня данный код не является избыточным. А, стало быть, пусть будет.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Скрипт фильтра пользовательского меню

Post by sToLp »

IgorZ

Написал я вчера хотелку на мантис, во многом навеянную сабжем .

А вот теперь подумалось: а может быть Вы сможете универсальный макрос предложить?

Примечание модератора: http://forum.farmanager.com/viewtopic.php?f=60&t=9197
Post Reply

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