Eu não estou familiarizado com o autokey, mas isso parece factível. Use Keyboard.press_key
para enviar um evento de imprensa importante e Keyboard.release_key
para enviar um evento de lançamento de chave . Para lembrar qual deles enviar, use Store.set_value
e Store.get_value
.
Alternativamente, você pode usar xdotool para injetar eventos de entrada em uma janela e xprop
para anexar dados a uma janela. Execute o seguinte comando shell (não testado) para enviar eventos alternativos de imprensa / release para a janela ativa.
#!/bin/sh
window_id=$(xdotool getactivewindow)
case $(xprop -id "$window_id" -f key_e_is_down 32c -notype key_e_is_down) in
*1) key_command=keydown; new_state=0;;
*) key_command=keyup; new_state=1;;
esac
xdotool "$key_command" "e"
xprop -id "$window_id" -f key_e_is_down 32c -set key_e_is_down "$new_state"
Se você quiser vincular essa ação a uma chave, mas ativar a chave apenas em uma janela, não tenho certeza se o Autokey pode ajudá-lo. A maneira mais fácil de fazer isso é a partir do gerenciador de janelas, mas a maioria dos gerenciadores de janelas não pode fazê-lo. Eu uso o sawfish como meu gerenciador de janelas, que pode fazer isso sem qualquer ferramenta externa.
(define (toggle-e w)
(interactive "%W")
(let ((down (window-get w 'key-e-is-down)))
(synthesize-event (if down "Release+e" "e") w)
(window-put w 'key-e-is-down (not down))))
(define xyz-window-map (make-keymap))
(bind-keys xyz-window-map "e" toggle-e)
(add-window-matcher 'WM_CLASS "^Xyz/" '((keymap . ,xyz-window-map)))