シェルに文字を入力し、xdotool
からその文字の信号をgeditに送信して、その文字がgeditで入力されるようにします。
私はこのスクリプトを書きました:
#!/bin/bash
gedit -s &
GEDPID=$!
sleep 2s
GEDWINID=`xdotool search --pid $GEDPID | tail -1`
echo "press any keys"
read i
xdotool windowactivate --sync $GEDWINID key --clearmodifiers --delay 100 "$i" && wmctrl -a Terminal
スクリプトが待機することを除いて、すべてがうまく機能します enter キーボード信号をgeditに送信します。
したがって、read i
をread -n1 i
に変更し、スクリプトにエンターなしで機能させるようにしました。
#!/bin/bash
gedit -s &
GEDPID=$!
sleep 2s
GEDWINID=`xdotool search --pid $GEDPID | tail -1`
echo "press any keys"
read -n1 i
xdotool windowactivate --sync $GEDWINID key --clearmodifiers --delay 100 "$i" && wmctrl -a Terminal
しかし、geditには文字を入力しません!
ここに質問があります。2番目のスクリプトの問題は何ですか?この問題を引き起こすread i
とread -n1 i
の違いは何ですか?
この問題を再現できました。 read
とread -n1
に違いがある理由はわかりませんが、キーが機能する前に単純な遅延を追加します。私の推測では、ウィンドウが切り替わってからキー入力を登録するのに十分な時間がないと思います。
#!/bin/bash
gedit -s &
GEDPID=$!
sleep 2s
GEDWINID=`xdotool search --pid $GEDPID | tail -1`
echo "press any keys"
read -n1 i
xdotool sleep 0.1 windowactivate --sync $GEDWINID key --clearmodifiers --delay 100 "$i" && wmctrl -a Terminal
元のスクリプトを修正して、現在のターミナルのウィンドウIDを適切に取得し、ターミナルウィンドウとGeditウィンドウ間でフォーカスを切り替えます。このスクリプトは無限ループを使用するため、ターミナルウィンドウで印刷されるすべてのキーストロークはGeditに転送されます。キャンセルする Ctrl+C。
#!/bin/bash
WIDGTERM=$(xdotool getactivewindow)
gedit -s 2> /dev/null &
sleep 2s
WIDGEDIT=$(xdotool getactivewindow)
xdotool windowactivate $WIDGTERM
echo "Press any keys"
while true
do
read -n1 i
xdotool windowactivate --sync $WIDGEDIT key --clearmodifiers "$i"
sleep .5
xdotool windowactivate --sync $WIDGTERM
done