
나는 간단한 키 콤보를 누를 때마다 xmonad가 일반적인 문자 시퀀스를 입력하도록 하려고 합니다. 이 문제의 한 가지 예는 단순히 내 이메일 주소를 입력하는 것입니다.
xmonad의 구성 파일은 다음과 같습니다.
import XMonad
import XMonad.Config.Gnome (gnomeConfig)
import XMonad.Util.CustomKeys (customKeys)
import XMonad.Util.EZConfig
main = xmonad $ gnomeConfig {
keys = customKeys delKeys insKeys,
logHook = return ()
}
where
-- Remap mod-p to dmenu and mod-[sd] to swapping xinerama screens.
delKeys :: XConfig l -> [(KeyMask, KeySym)]
delKeys XConfig { modMask = modMask } =
[ (modMask, xK_p), (modMask, xK_w), (modMask, xK_e) ]
insertEmailAddress :: KeyMask -> [((KeyMask, KeySym), X())]
insertEmailAddress modMask = [ ((noModMask, xK_Menu), spawn "xdotool type [email protected]") ]
insKeys :: XConfig l -> [((KeyMask, KeySym), X())]
insKeys XConfig { modMask = modMask } = insertEmailAddress modMask
그러나 메뉴 키(키보드 오른쪽 하단에 있음)를 누르면 마지막 절반 정도만 표시됩니다. 좋아요: [email protected]
또는 [email protected]
. 인쇄가 어디서 시작될지는 전혀 예측할 수 없습니다.
xdotool
명령을 로 변경하여 해결 방법을 찾았습니다 . 이것은 틀림없이 작동하는 것 같지만 이유는 모르겠습니다. 이견있는 사람?xdotool sleep 0.1 type [email protected]
xmonad 0.11 및 xdotool 버전 3.20140217.1 사용
답변1
--sync
제가 딱 찾던 옵션이였어요 !
그러나 이 --sync
옵션은 특정 get 또는 search 명령 세트에만 존재합니다.
해결책은 다음과 같습니다.xdotool getwindowfocus windowfocus --sync type [email protected]
여기서 일어나는 일은 먼저 getwindowfocus
( getactivewindow
다른 창이 작동하지 않는 경우 대안임)을 통해 초점이 맞춰진 창을 얻는다는 것입니다.
우리가 다르게 하는 일은 활성 창을 가져와서 동일한 것으로 설정하는 것뿐입니다. 주요 차이점은 이전 명령이 적용될 때까지 --sync
강제로 대기하는 옵션이 있다는 것입니다.xdotool
따라서 우리는 특정 창에 집중하고 명령을 입력할 수 있음을 보장합니다.
답변2
다음을 사용하여 키 입력 사이의 지연 시간을 늘려야 할 수도 있습니다 --delay
(기본값은 12ms).
xdotool type --delay 100 [email protected]