MacroLib — Far Macro Library

Здесь можно обсудить ваш любимый плагин.
User avatar
John Doe
Бюрократ
Posts: 11395
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

MacroLib — Far Macro Library

Post by John Doe » Tue 17 Feb, 2015 13:31

Latest post of the previous page:

Запускаю в 4269:

Code: Select all

╔═══════ Message ═══════╗
║ Key: AltZ - AltX:Hold ║
╟───────────────────────╢
║        { OK }         ║
╚═══════════════════════╝
P.S.
Кстати akey принимает только 1|0, поэтому 2 равнозначно 0

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

MacroLib — Far Macro Library

Post by Max Rusov » Tue 17 Feb, 2015 13:36

Да, обновил Far - заработало :). Тогда остается только проблема с condition, вроде...
John Doe wrote: Кстати akey принимает только 1|0, поэтому 2 равнозначно 0
2 == 1, скорее

User avatar
John Doe
Бюрократ
Posts: 11395
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

MacroLib — Far Macro Library

Post by John Doe » Tue 17 Feb, 2015 13:53

Max Rusov wrote: остается только проблема с condition
Замена на посылку макроса с Key решением считается?
Например так:

Code: Select all

if mf.eval("Key:Release")==-2 and mf.eval("Key")==-2 then Keys("Key") end
Max Rusov wrote: вроде...
Стоит только начать, найдутся и другие )

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

MacroLib — Far Macro Library

Post by Max Rusov » Tue 17 Feb, 2015 14:02

John Doe wrote: Замена на посылку макроса с Key решением считается?
Либо Вы не поняли проблему, либо я не понял Вашего предложения.
Мне нужно в момент нажатия кнопки знать сработает ли макрос на отпускание, чтобы "съесть" это нажатие. В общем случае, для этого нужно вычислить condition, причем последовательно для всех макросов которые попадают под условие Кнопка/Область/Флаги. Если в результате осталось >= 1 макроса - нажатие "съедается".

User avatar
John Doe
Бюрократ
Posts: 11395
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

MacroLib — Far Macro Library

Post by John Doe » Tue 17 Feb, 2015 14:08

Max Rusov wrote: Мне нужно в момент нажатия кнопки знать сработает ли макрос на отпускание, чтобы "съесть" это нажатие
Моё предложение состоит в том, что можно съедать его в любом случае.
А после отпускания выполнять макрос из предыдущего сообщения, который в случае невыполнения будет сам посылать Key.

В результате всю подготовительную работу по отбору подходящего макроса выполнит LuaMacro.

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

MacroLib — Far Macro Library

Post by Max Rusov » Tue 17 Feb, 2015 14:19

Нет, так не пойдет. Если макрос неактивен (Condition вернул False) то все должно работать так, как будто макроса просто нет. Нельзя при менять порядок прохождения нажатий. Если сделать как Вы предлагаете, то у этого нажатия вообще не будет автоповтора, например.

User avatar
John Doe
Бюрократ
Posts: 11395
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

MacroLib — Far Macro Library

Post by John Doe » Tue 17 Feb, 2015 14:31

Max Rusov wrote: Нет, так не пойдет.
В идеале может и нет, но мне кажется это неплохой компромисс.
Я никогда не использовал :Release, поэтому мне сложно судить какие на практике там могут быть условия, и действительно ли автоповтор критичен в случае их невыполнения.

Имхо в общем случае проверка условий при обработке ProcessConsoleInputW это опасная операция.
Что если в условии у нас вылезет ошибка? отобразится диалог?
Я правильно понимаю, что мы получим dead lock?

Update: ...а может и не получим, если в диалоге отдельная очередь событий.

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

MacroLib — Far Macro Library

Post by Max Rusov » Tue 17 Feb, 2015 14:53

Вообщем, надо попробовать.

User avatar
John Doe
Бюрократ
Posts: 11395
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

MacroLib — Far Macro Library

Post by John Doe » Tue 17 Feb, 2015 15:24

Правильно ли я понимаю что сейчас (при условии что все condition верны) из всех модификаторов Release имеет наибольший приоритет (т.е. Double/Hold игнорируются)?

И верно ли что Key:Down, Key:Up работают независимо от прочих модификаторов?
Т.е. если назначены Key:Down, Key:Hold, и Key:Up, то при удержании Key поочерёдно сработают все 3 макроса?

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

MacroLib — Far Macro Library

Post by Max Rusov » Tue 17 Feb, 2015 15:36

Не возбраняется попробовать - я не помню все комбинации. Hold/Release точно могут работать совместно. При этом, если сработал Hold, то Release уже не сработает.

User avatar
John Doe
Бюрократ
Posts: 11395
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

MacroLib — Far Macro Library

Post by John Doe » Tue 17 Feb, 2015 16:00

И интересует не столько реальное поведение плагина, сколько ваши соображения о целесообразности.
John Doe wrote: Key:Down, Key:Hold, и Key:Up
Пожалуй если сработал Key:Down, то дальше правильнее игнорировать всё сочетания кроме Key:Release и Key:Up.

А Key:Up наверно есть смысл посылать даже после срабатывания Key:Hold/Double.
Но при одновременном наличии Key:Up и Key:Release предпочтение должно отдаваться последней (если после нажатия клавиши не нажималось ничего другого).

P.S.
Max Rusov wrote: Не возбраняется попробовать
Согласен, но это ж целое дело )
При случае попробую конечно.

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

MacroLib — Far Macro Library

Post by Max Rusov » Tue 17 Feb, 2015 16:44

Ну, я исходил из соображений, что Up/Down это вспомогательные модификаторы для реализации "аккордных" макросов.
"Alt:Down" - начинает аккорд, "Alt:Up" - завершает. Исходя из этого они должны вызываться всегда, безотносительно к другим модификаторам.

На практике, после срабатывания Hold не срабатывает Up, но мне это не мешает.

User avatar
John Doe
Бюрократ
Posts: 11395
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

MacroLib — Far Macro Library

Post by John Doe » Wed 18 Feb, 2015 08:44

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

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

MacroLib — Far Macro Library

Post by Max Rusov » Sat 21 Feb, 2015 18:55

Можно осторожно попробовать. Фича по умолчанию отключена, надо включить в меню настроек.

Вызов сделал иначе, без eval. Работает с регулярными выражениями, mf.akey возвращает нажатие без модификатора.

User avatar
sToLp
Posts: 763
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 56 times
Been thanked: 5 times

MacroLib — Far Macro Library

Post by sToLp » Sat 21 Feb, 2015 20:37

в 4274x86 на Win7 выдаёт такое:

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

MacroLib — Far Macro Library

Post by Max Rusov » Sat 21 Feb, 2015 21:02

Не знаю, у меня не получается такого добиться. Возможно, какой-то "особый" макрос.
Можете в MacroLib.lua поправить

local vRow = debug.getinfo(m.action).linedefined
на
local vRow = 0

Или, если есть желание помочь разобраться, добавить перед этой строчкой:

far.Message(m.FileName .. ", " .. (m.description or ""))

Посмотреть на какой макрос она ругается и показать его текст.

User avatar
sToLp
Posts: 763
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 56 times
Been thanked: 5 times

MacroLib — Far Macro Library

Post by sToLp » Sat 21 Feb, 2015 21:20

По первой части: сообщения об ошибках прекратились.

По второй: макросов выдаёт много, больше дюжины (не стал дожидаться всех).


Post Reply

Return to “Обсуждение плагинов”