Page 1 of 1

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

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


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

Posted: Thu 16 Jan, 2014 18:11
by John Doe
IgorZ wrote:Теперь не надо с матом или без оного переключать раскладку и повторять попытку, если вместо "G" нажалась "П"
Это как?
Если у меня в меню есть пункт с хоткеем "G", то он без всяких скриптов отреагирует и на "G" и на "П".

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

P.S.
Почему не используете gethotkey/checkhotkey?

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

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

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

(для пользовательского меню мне надо бы из обработки исключить Alt, Esc и Bs или проверять, if AKey == 'Bs' then — а как правильно это сделать — не соображу. А для меню плагинов совместить с макросом от SimSU Common_RememberPlugin.lua и тоже Alt убрать из обработки. И может быть я о чём-то забыл.)

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

Posted: Fri 17 Jan, 2014 05:11
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-у. Вы об этом?

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

Posted: Fri 17 Jan, 2014 08:03
by Wave
Нет, я о том, что у меня свои макросы, прицепленные на Alt, Esc и Bs. Либо их функционал надо внести в ваш, либо ваш к себе, я не рылся в документации, но то, что пробовал интуитивно — if AKey == 'Bs' then — не срабатывает. Переписывать регулярку key="/.*/" чтобы она не ловила эти клавиши ещё непонятней сходу.
Впрочем, глянув ещё раз, akey(1,1) помогает. Теперь придумать, как подружить с макросом SimSU, уж очень там уровней абстракции много.
Поясняю. У меня есть пользовательское меню. В нём довольно много команд, причём логически разбивающихся на подгруппы. С другой стороны, выделять их в подменю неохота, поскольку мне удобно, чтобы все команды данного меню были видны одновременно. Вот и родилось такое решение, как альтернатива подменю.
Во-во. Оно самое, ещё один вариант фильтра, интеллектуальный. Следующее применение — это страховка от того, что случайно по запаре одинаковые хоткеи назначишь. Особенно при динамическом меню легко пропустить.

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

Posted: Fri 17 Jan, 2014 09:54
by John Doe
IgorZ wrote:Там почему-то хоткей не срабатывал, если не на той раскладке
Следует учитывать, что xlat тут работает только в одну сторонгу, т.е. если хоткей "П", то по нажатию "G" ничего не произойдёт (всё это когда-то обсуждалось, вот какая-то тема)
IgorZ wrote:
John Doe wrote:Вторую фичу тоже не совсем понял: вы специально даёте пунктам одинаковые хоткеи, чтобы скриптом получать меню?
Поясняю. У меня есть пользовательское меню. В нём довольно много команд, причём логически разбивающихся на подгруппы. С другой стороны, выделять их в подменю неохота, поскольку мне удобно, чтобы все команды данного меню были видны одновременно. Вот и родилось такое решение, как альтернатива подменю.
Вот с этого надо начать шапку.
Wave wrote:Нет, я о том, что у меня свои макросы, прицепленные на Alt, Esc и Bs.
Эти клавиши не будут опознаны как хоткеи, и будет предпринята попытка выполнить их как макросы. См. в коде eval(key,2)

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

Posted: Fri 17 Jan, 2014 10:33
by Max Rusov
John Doe wrote:Следует учитывать, что xlat тут работает только в одну сторонгу, т.е. если хоткей "П", то по нажатию "G" ничего не произойдёт (всё это когда-то обсуждалось, вот какая-то тема)
С чего это? Все работает в обе стороны.

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

Posted: Fri 17 Jan, 2014 10:39
by John Doe
facepalm2
Вот блин...
Может действительно не везде работает, проверю вечером.

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

Posted: Fri 17 Jan, 2014 12:46
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.
Забейте.

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

Posted: Fri 17 Jan, 2014 12:50
by John Doe
...или просто отрегулировать приоритеты, т.е. добавить поле priority=40; (можно и наоборот повысить приоритет, в данном случае без разницы)

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

Posted: Fri 17 Jan, 2014 13:29
by Wave
О, а за приоритеты я забыл! Это проще всего. Спасибо!

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

Posted: Mon 20 Jan, 2014 03:32
by IgorZ
IgorZ wrote:Писал дома. Там почему-то хоткей не срабатывал, если не на той раскладке. Возможно, потому что под WINE. Возможно, из-за причины, указанной в ответе на постскриптум. Сейчас проверил на работе под XP. Действительно, Вы правы, работает. Надо бы и дома ещё раз проверить. На всякий случай.
Проверил. Действительно, под WINE не работает, т. е., если хоткей="G", то "П" не активирует данный пункт меню. Так что, по крайней мере, для меня данный код не является избыточным. А, стало быть, пусть будет.

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

Posted: Fri 05 Dec, 2014 05:05
by sToLp
IgorZ

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

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

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