xdotool의 유형 명령이 문자를 먹는 경우

xdotool의 유형 명령이 문자를 먹는 경우

나는 간단한 키 콤보를 누를 때마다 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]

관련 정보