MacroLib — Far Macro Library

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

MacroLib — Far Macro Library

Post by John Doe »

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: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

MacroLib — Far Macro Library

Post by Max Rusov »

Да, обновил Far - заработало :). Тогда остается только проблема с condition, вроде...
John Doe wrote: Кстати akey принимает только 1|0, поэтому 2 равнозначно 0
2 == 1, скорее
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

MacroLib — Far Macro Library

Post by John Doe »

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: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

MacroLib — Far Macro Library

Post by Max Rusov »

John Doe wrote: Замена на посылку макроса с Key решением считается?
Либо Вы не поняли проблему, либо я не понял Вашего предложения.
Мне нужно в момент нажатия кнопки знать сработает ли макрос на отпускание, чтобы "съесть" это нажатие. В общем случае, для этого нужно вычислить condition, причем последовательно для всех макросов которые попадают под условие Кнопка/Область/Флаги. Если в результате осталось >= 1 макроса - нажатие "съедается".
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

MacroLib — Far Macro Library

Post by John Doe »

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

В результате всю подготовительную работу по отбору подходящего макроса выполнит LuaMacro.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

MacroLib — Far Macro Library

Post by Max Rusov »

Нет, так не пойдет. Если макрос неактивен (Condition вернул False) то все должно работать так, как будто макроса просто нет. Нельзя при менять порядок прохождения нажатий. Если сделать как Вы предлагаете, то у этого нажатия вообще не будет автоповтора, например.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

MacroLib — Far Macro Library

Post by John Doe »

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

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

Update: ...а может и не получим, если в диалоге отдельная очередь событий.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

MacroLib — Far Macro Library

Post by Max Rusov »

Вообщем, надо попробовать.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

MacroLib — Far Macro Library

Post by John Doe »

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

И верно ли что Key:Down, Key:Up работают независимо от прочих модификаторов?
Т.е. если назначены Key:Down, Key:Hold, и Key:Up, то при удержании Key поочерёдно сработают все 3 макроса?
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

MacroLib — Far Macro Library

Post by Max Rusov »

Не возбраняется попробовать - я не помню все комбинации. Hold/Release точно могут работать совместно. При этом, если сработал Hold, то Release уже не сработает.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

MacroLib — Far Macro Library

Post by John Doe »

И интересует не столько реальное поведение плагина, сколько ваши соображения о целесообразности.
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: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

MacroLib — Far Macro Library

Post by Max Rusov »

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

На практике, после срабатывания Hold не срабатывает Up, но мне это не мешает.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

MacroLib — Far Macro Library

Post by John Doe »

Ещё одна вещь, которой не хватает в фаре — это возможность использования клавиши Win в качестве модификатора.
Насколько я понимаю реализовать несложно, и не только Win, но и в принципе любые другие клавиши, для которых не жалко лишиться автоповтора.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

MacroLib — Far Macro Library

Post by Max Rusov »

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

Вызов сделал иначе, без eval. Работает с регулярными выражениями, mf.akey возвращает нажатие без модификатора.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

MacroLib — Far Macro Library

Post by sToLp »

в 4274x86 на Win7 выдаёт такое:
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

MacroLib — Far Macro Library

Post by Max Rusov »

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

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

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

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

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

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