John Doe wrote: 3. "Обвязку" неплохо бы пояснить немного подробнее.
Возможно ли её убрать внутрь функции?
А ответ на вопрос был чуть выше:
zg wrote: макросы не работают как ожидалось. потому как при физически нажатом капслоке программно его состояние не меняется. поэтому макросы должны быть примерно такими:
[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\CtrlCapsLock]
"Sequence"="CtrlShiftTab %a=flock(1,-1)&1; $while((flock(1,-1)&1)==%a) sleep(50) flock(1,2) $end"
Во-первых есть (и всегда была) возможность проверить удерживается ли в данный момент клавиша:
bit.band(mf.flock(key),0xff80)==0xff80
Во-вторых, изменение состояния можно произвести в отдельном потоке, не задерживая макрос (far.Timer)
Или (ещё лучше) отложить это изменение до тех пор, пока из буфера не будут прочитаны события отпускания соответствующих клавиш.
Такое сейчас можно организовать и макросом (
Event { group="ConsoleInput";[...]
), но будет сильно удобнее, если эта кухня будет скрыта в фаре, или в самом плагине luamacro.