xdotool 유형 및 stty는 때때로 입력의 첫 문자를 자릅니다.

xdotool 유형 및 stty는 때때로 입력의 첫 문자를 자릅니다.

prepend다음 입력 프롬프트에 bash 명령의 반복되는 용어를 자동으로 배치하는 간단한 함수(아래)를 정의했습니다 . 예를 들어 prepend git터미널에 입력하면 다음 입력이 모두 git입력되어 있어야 합니다. 대부분의 경우 prepend이 작업이 수행되지만 무작위로 보이는 경우 prepend단어의 첫 글자가 잘립니다(예: 다음 입력 프롬프트에서 생성됨 $prepend sensors).$ensors

왜 이런 일이 발생하는지, 어떻게 해결하는지 알고 싶습니다. 그러나 입력 프롬프트에 텍스트를 입력하는 대체/표준 방법이 있다면 이를 다르게 구현해도 괜찮습니다.

#!/bin/bash

#stty to stop text from being displayed before $PS1

function prepend {
    if ! [ -z "$1" ]
        then
            PROMPT_COMMAND="stty -echo && xdotool type $1 && stty echo"
            set PROMPT_COMMAND
    else
        unset PROMPT_COMMAND
    fi
}

답변1

해당 문자의 키를 이미 누르고 있으면 첫 번째 문자가 잘린다고 생각합니다. 이를 실제로 보려면 터미널에서 다음 명령을 실행하면 됩니다.

$ xdotool type foof

f키를 누르기 전에 놓으면 인쇄 Return가 되고 , foof마지막 키를 누른 f상태에서 누르면 Return인쇄가 됩니다 oof. 나는 xdotool keydown이 키를 이미 눌렀을 때 아무런 효과가 없는 이벤트를 전송하기 때문에 이런 일이 발생한다고 생각합니다 .

이벤트를 수동으로 보내면 이 문제를 해결할 수 있습니다 keyup.

$ xdotool keyup f type foof

항상 foof올바르게 인쇄됩니다.

귀하의 경우 이는 좀 더 복잡합니다. 올바른 문자를 보내려면 문자열의 첫 번째 문자를 감지해야 합니다 keyup. 그러나 그렇게 하면 이 접근 방식도 효과가 있을 것입니다.

관련 정보