Има ли начин едновременните натискания на клавиши да се превърнат в свързване на клавиши, напр. за клавишите w, e, f, когато бъдат натиснати в рамките на 0,05 секунди един от друг, за да задействат команда?
За да бъдем по-конкретни:
Ако w, e, f са натиснати в рамките на 0,05 секунди един от друг, тогава при натискане на последното XMonad трябва да задейства споменатата команда . XMonad също трябва да е прихванал трите ключа, така че да не бъдат излишно изпратени до фокусирания прозорец.
В противен случай (ако поне един от тях не бъде натиснат в рамките на период от 0,05 секунди) XMonad трябва да изпрати клавишите към фокусирания прозорец, както обикновено.
Моята цел в това е да използвам w, e, f за "Избягане" в подобен на vim "Нормален режим", XMonad. Действия. Подкарта (подкарта).
Актуализирайте с неуспешен метод, в случай че някой види начин да го поправи:
Опитах се да приложа това с помощта на подкарти, така че, например, ако натиснете w, ще свършите в chord_mode_w
, ако натиснете e оттам, ще свършите в chord_mode_we
и ако натиснете f оттам, накрая ще стигнете до normal_mode
, например. Внедряването беше много объркано: включих в основните си клавишни връзки нещо като:
("w", spawn "xdotool key <chord_mode_w_keybinding> ; sleep 0.05 ; xdotool key <abort_keybinding>")
(chord_mode_w_keybinding, chord_mode_w)
за откриване на w (останалото би било подобно), заедно с (непълни) подкарти като:
chord_mode_w = submap . mkKeymap c $
[
("e", chord_mode_we )
, ("f", chord_mode_wf )
, (abort_keybinding, pasteString "w")
-- in order for the submap to not eat all other letters,
-- would need to include all mappings like:
, ("a", pasteString "wa")
, ("b", pasteString "wb")
...
]
chord_mode_we = submap . mkKeymap c $
[
("f", normal_mode )
, (abort_keybinding, pasteString "we")
-- in order for the submap to not eat all other letters,
-- would need to include all mappings like:
, ("a", pasteString "wea")
, ("b", pasteString "web")
...
]
chord_mode_wf = submap . mkKeymap c $
[
("e", normal_mode )
, (abort_keybinding, pasteString "wf")
-- in order for the submap to not eat all other letters,
-- would need to include all mappings like:
, ("a", pasteString "wfa")
, ("b", pasteString "wfb")
...
]
Цялостното внедряване очевидно би било много объркано, но на теория трябваше да ме изпрати до normal_mode
, ако натисна "wef" в рамките на 0,05 секунди един от друг, прекъсвайки и изписвайки знаците в противен случай. Имаше обаче два проблема:
pasteString
(както и другите функции за поставяне вXMonad.Util.Paste
) е твърде бавен за нормално писанеЩе се окажа в
normal_mode
само малка част от времето, дори ако настроя забавянето на прекъсването много по-високо. Не съм сигурен за причината зад това.
(Причината, поради която използвах pasteString
при прекъсване, вместо да създам друг xdotool
, беше, че изходът от xdotool
ще задейства отново едно от chord_mode_w_keybinding
, chord_mode_e_keybinding
, chord_mode_f_keybinding
, обратно в главните клавишни връзки, връщайки ме обратно към режимите на акорд за неопределено време.)
Submap
документация. Искате ли да имате такова забавяне (0.05 s) или какво точно е това, което примерът не прави за вас? - person deshtop   schedule 02.01.2015