autokey를 사용하여 토글 키를 만드는 방법은 무엇입니까?

autokey를 사용하여 토글 키를 만드는 방법은 무엇입니까?

eAutokey를 사용하여 "xyz"라는 프로그램에서 키 누르기를 켜고 끄고 싶습니다 . 그래서 내가 를 누르면 e프로그램은 내가 를 쥐고 있다고 생각합니다 e. 나는 그것을 다시 눌렀고 e내가 놓았다고 생각했습니다. 어떻게 하나요?

아니면 이것을 할 수 있는 다른 프로그램이 있나요?

보너스 질문: Ubuntu 프로그램(예: fvwm2, xorg, xmodmap, xkb, xrdb)을 사용하여 이 작업을 어떻게 수행합니까?

답변1

저는 자동 키잉에 익숙하지 않지만 가능해 보입니다. 사용Keyboard.press_key주요 이벤트 전송 및Keyboard.release_key키 릴리스 이벤트를 보냅니다. 어떤 것을 보낼지 기억하려면 다음을 사용할 수 있습니다.Store.set_value그리고Store.get_value.


또는 다음을 사용할 수 있습니다.xdo 도구창에 입력 이벤트를 삽입하고xprop창에 데이터를 추가합니다. 다음 셸 명령(테스트되지 않음)을 실행하여 활성 창에 대체 누르기/손 떼기 이벤트를 보냅니다.

#!/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"

이 작업을 키에 바인딩하고 해당 키를 하나의 창에서만 활성화하려는 경우 자동 키가 도움이 될지 확신할 수 없습니다. 가장 쉬운 방법은 창 관리자를 이용하는 것이지만 대부분의 창 관리자는 이를 수행하지 않습니다. 나는 사용한다톱상어내 창 관리자는 외부 도구 없이 이 작업을 수행할 수 있습니다.

(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)))

관련 정보