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。私はxdotoolkeydownがすでにキーを押したときに効果がないイベントを送信するので、これが起こると思います。

イベントを手動で送信すると、この問題を解決できますkeyup

$ xdotool keyup f type foof

常にfoof正しく印刷されます。

あなたの場合、これはもう少し複雑です。正しい文字を送信するには、文字列の最初の文字を検出する必要がありますkeyup。しかし、そうすれば、このアプローチも効果があります。

関連情報