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
。しかし、そうすれば、このアプローチも効果があります。