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