Не хватает возможности назначать макросы на клавиши Win|RWin (особенно в сочетаниях с модификаторами CAS).
Очевидно что фар распознаёт эти нажатия: lua:=mf.waitkey(), а раз так, то вероятно несложно разрешить и назначать на них макросы.
Или есть какие-то подводные камни?
Разрешить макросы на Win
Posted: Sun 03 Jul, 2016 21:22
by Shmuel
Да вроде такая возможность есть, и даже работает. С модификаторами. А вот без модификаторов макрос срабатывает, но ключ и системой обрабатывается, что уже нежелательно.
Shmuel wrote: без модификаторов макрос срабатывает, но ключ и системой обрабатывается, что уже нежелательно.
В общем случае нежелательно, но для моих целей это значения не имеет (а мне надо и Win в чистом виде).
Разрешить макросы на Win
Posted: Sun 03 Jul, 2016 21:33
by Shmuel
John Doe wrote: Потому что у меня не работает
Надо указывать CtrlLWin.
Разрешить макросы на Win
Posted: Sun 03 Jul, 2016 21:50
by John Doe
Действительно, спасибо!
Назначать макросы на Win
Posted: Mon 04 Jul, 2016 05:52
by sToLp
Уважаемые John Doe и Shmuel!
Но ведь эдак Win используется как рядовая клавиша, а она явно напрашивается на роль клавиши-модификатора. Памятуя, например, нередко употребимое в системе WinR и др.
Назначать макросы на Win
Posted: Mon 04 Jul, 2016 06:30
by Shmuel
sToLp wrote: Но ведь эдак Win используется как рядовая клавиша, а она явно напрашивается на роль клавиши-модификатора.
Да, модификатором было бы лучше, т.к. сразу бы добавилась целая куча доступных сочетаний.
Назначать макросы на Win
Posted: Mon 04 Jul, 2016 08:30
by John Doe
sToLp wrote: она явно напрашивается на роль клавиши-модификатора
local ffi = require"ffi"
ffi.cdef[[short GetKeyState(int nVirtKey);]]
local C = ffi.C
local SHIFTED = 0x8000
local function Hold(key)
local vk = far.NameToInputRecord(key).VirtualKeyCode
return function() return bit.band(C.GetKeyState(vk),SHIFTED)~=0 end
end
local Win = Hold"LWin"
Macro {
area="Common"; key="A";
condition=Win;
action=function()
far.Message"Win+A"
end
}
local function Down(key)
local vk = type(key)=="number" and key or far.NameToInputRecord(key).VirtualKeyCode
return function() return win.GetKeyState(vk) end
end
local LSHIFT = 0x000000a0
local RSHIFT = 0x000000a1
Macro { description="CtrlLShiftA";
area="Common"; key="CtrlShiftA";
condition=Down(LSHIFT);
action=function()
far.Message"LShift"
end
}
Macro { description="CtrlRShiftA";
area="Common"; key="CtrlShiftA";
condition=Down(RSHIFT);
action=function()
far.Message"RShift"
end
}
Macro {
area="Common"; key="Z";
condition=Down"LWin";
action=function()
far.Message"Win+Z"
end
}