Latest post of the previous page:
Вроде, "съедаются" до отпускания.MacroLib — Far Macro Library
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Re: MacroLib — Far Macro Library
А что за Up?Max Rusov wrote: Еще, кстати, есть "Release" и "Up"
В документации не вижу.
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
MacroLib — Far Macro Library
Мне это было нужно для макросов, которые срабатывают при отпускании префиксной клавиши после набора текста, типа ShellBookmark/PanelFilter. Возможно, в LUA это можно сделать иначе и эти модификаторы уже лишние...- Новые модификаторы нажатий - Down и Up:
Down - Макрос срабатывает только при нажатии (без автоповтора)
Up - Макрос срабатывает при отпускании. В отличии от Release
макрос срабатывает при отпускании префиксных клавиш, даже
если были комбинированные нажатия
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
Иначе можно, например запуская в момент нажатия отдельный поток, который будет по таймеру опрашивать состояние клавиши.
Или же можно (в корне изменив подход) объединить все в одном цикле, в конце которого проверять состояние клавиши-модификатора.
Но я хочу поговорить совсем о другом: что если научить макролиб запускать обычные макросы luamacro?
Ну не совсем обычные, а с модификаторами (Hold, Double, Release, Up, Down,…), а обычные в том плане, что загружаться они будут наряду с прочими штатным образом, а функция макролиб будет состоять только в их запуске.
Или же можно (в корне изменив подход) объединить все в одном цикле, в конце которого проверять состояние клавиши-модификатора.
Но я хочу поговорить совсем о другом: что если научить макролиб запускать обычные макросы luamacro?
Ну не совсем обычные, а с модификаторами (Hold, Double, Release, Up, Down,…), а обычные в том плане, что загружаться они будут наряду с прочими штатным образом, а функция макролиб будет состоять только в их запуске.
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
MacroLib — Far Macro Library
Я особо не думал на эту тему. LUA принес много возможностей, и я их, наверное, не все осознаю. Что Вы имеете ввиду:
- Оставить в FML файлах только привязку кнопок а макросы описывать в LUA и вызывать по именам/GUID'ам?...
- Изменить формат FML на "чистый" LUA и как то интегрировать с LuaMacro?
- Что-то еще?...
- Оставить в FML файлах только привязку кнопок а макросы описывать в LUA и вызывать по именам/GUID'ам?...
- Изменить формат FML на "чистый" LUA и как то интегрировать с LuaMacro?
- Что-то еще?...
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
MacroLib — Far Macro Library
Изменять ничего не предлагаю.
Предлагаю добавить новую возможность:
LuaMacro загружая макросы не интересуется насколько назначенные сочетания "корректны", поэтому можно использовать клавиши вроде Key:Hold, Key:Double, и т.д. Но конечно сами по себе такие макросы не запустятся, поэтому и нужен макролиб.
Макролиб может запускать такие макросы как свои родные, через MCTL_EXECSTRING MCTL_SENDSTRING, но передавать не полный текст макроса, а
Насколько я могу судить, реализовать это не сложно.
Для работы понадобиться полный список назначенных сочетаний, его легко получить с помощью mf.GetMacroCopy.
Предлагаю добавить новую возможность:
LuaMacro загружая макросы не интересуется насколько назначенные сочетания "корректны", поэтому можно использовать клавиши вроде Key:Hold, Key:Double, и т.д. Но конечно сами по себе такие макросы не запустятся, поэтому и нужен макролиб.
Макролиб может запускать такие макросы как свои родные, через MCTL_EXECSTRING MCTL_SENDSTRING, но передавать не полный текст макроса, а
return eval("Keys:Hold",2)
.Насколько я могу судить, реализовать это не сложно.
Для работы понадобиться полный список назначенных сочетаний, его легко получить с помощью mf.GetMacroCopy.
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
MacroLib — Far Macro Library
Я подумаю на над этим. На первый взгляд это должно быть несложно. Правда MacroLib сейчас не умеет проверять произвольный Condition, и я не уверен, что это можно сделать, хотя там что-то добавлялось в API, надо посмотреть.
Другой вопрос: возможно стоит назначать макросу "расширенные" кнопки через другое свойство, например, KeyEx="Key:Hold" ?
Другой вопрос: возможно стоит назначать макросу "расширенные" кнопки через другое свойство, например, KeyEx="Key:Hold" ?
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
MacroLib — Far Macro Library
А зачем? Luamacro это сделает самостоятельно (и это большой плюс, имхо).
Для чего?
И luamacro сейчас не хранит нестандартные свойства.
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
MacroLib — Far Macro Library
Так не получится. MаcroLib должен знать запуститься макрос или нет. Если Condition возвращает False, то нажатие не должно "съедаться".
Чтобы MacroLib не начал сразу перехватывать все имеющиеся у пользователя макросы, потому что при этом 100% что нибудь сломается. Например, MacroLib по другому интерпретирует регулярные выражения.
ФиговоJohn Doe wrote:И luamacro сейчас не хранит нестандартные свойства.
Upd: Хотя, можно в key запихнуть какой-нибудь признак, чтобы MacroLib определял "свои" макросы. Типа key="#Key:Hold "
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
MacroLib — Far Macro Library
Нажатие должно съедаться если eval вернул 0.
Так макролиб может легко узнать "свои" макросы и по key.
FML-регэкспы тоже можно как-то задавать в key (хотя мне они пока не понадобились на практике с модификаторами Hold/Double/...)
Решаемо. В любом случае это не препятствие.Max Rusov wrote:Фигово
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
MacroLib — Far Macro Library
Двоеточие в середине это и есть определяющий признак, даже без #
MacroEx у меня именно так и работает, это не фантазии, а опробованный подход.
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
MacroLib — Far Macro Library
Нет, так не получится. Например, привязка Key:Release должно "съедать" _нажатие_ Key, еще до того как придет отпускание. Т.е. знать заранее, будет ли макрос исполнен.
И сомневаюсь, что получится вызов через eval, в случае если назначено > 1 кнопки или регулярное выражение. И с AKey проблемы будут. Вообщем, не так все просто...
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
MacroLib — Far Macro Library
Даже так, вместо клавиши можно отправить макрос (Keys).
Если я правильно понял, то проблема в том, что получив отпускание нельзя будет отправить фару сразу 2 события.
Может быть стоит доработать ProcessConsoleInputW?
Не сомневайтесь. Проверено, работает Хотя может и не так, как вам требуется, т.к. при конфликте выводится меню, а eval возвращает управление только после исполнения макроса.
Что касается регулярных выражений (если они вообще нужны), то есть только одна проблема: синтаксис eval. Решаемо.
Keys"AKey"?
А по задумке оно должно выполнять клавишу без модификатора?
Не уверен в необходимости, но можно решить, возвращая из макроса значение. (для Luamacro я тоже предлагал использовать это вместо AKey)
Есть же готовое, работающее решение в виде MacroEx.
MacroEx конечно работает иначе, но всё можно решить доработкой фара.
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
MacroLib — Far Macro Library
Есть макрос:
Как его вызвать, чтобы mf.akey вернула AltX или AltY ?
Code: Select all
Macro
{
description="test1"; area="Editor"; key="AltX:Hold AltY:Hold";
action=function()
far.Message( 'Key: ' .. mf.akey() .. " - " .. mf.akey(2) );
end;
}
- John Doe
- Бюрократ
- Posts: 13867
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 74 times
- Been thanked: 428 times
- Contact:
MacroLib — Far Macro Library
mf.eval("AltX:Hold",2)
akey(1,1) вернёт "AltX:Hold" либо "AltY:Hold", и я не знаю чего ещё желать.
Собственно плагин может и не ждать завершения eval.
Вместо этого плагин может перевызывать себя из макроса, т.е. постить что-то типа
Code: Select all
local key,op_id = ...
local ret = eval(key,2)
Plugin.Call(macrolib,ret,op_id)
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
MacroLib — Far Macro Library
Может я туплю, но у меня не получается. Возвращает только реально нажатую кнопку - AltZ. ЧЯДНТ?
Code: Select all
Macro
{
description="test1"; area="Editor"; key="AltX:Hold AltY:Hold";
action=function()
far.Message( 'Key: ' .. akey(2) .. " - " .. akey(1,1));
end;
}
Macro
{
description="test"; area="Editor"; key="AltZ";
action=function()
eval("AltX:Hold",2)
mf.beep(0x10)
end;
}