Я хочу ввести символ в оболочке и иметь 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
Все работает хорошо за исключением того, что сценарий ожидает, входят для отправки сигнала клавиатуры в 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!
И вот вопрос, какова проблема второго сценария? Между чем различие 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 Вашего текущего терминала и переключает фокус между окнами Terminal и 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