Введите в gedit, использующем xdotool в сценарии

Я хочу ввести символ в оболочке и иметь 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 это вызывает эту проблему?

3
задан 27 May 2017 в 15:07

2 ответа

Я смог воссоздать эту проблему. В то время как я не знаю, почему существует различие между 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
1
ответ дан 1 December 2019 в 17:30

Я изменил Ваш исходный сценарий, таким образом, это правильно получает окно 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
0
ответ дан 1 December 2019 в 17:30

Другие вопросы по тегам:

Похожие вопросы: