Je veux taper un caractère dans un shell et que xdotool
envoie le signal de ce personnage à gedit, de sorte que ce caractère soit saisi dans gedit.
J'ai écrit ce script:
#!/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
Tout fonctionne bien sauf que le script attend enter envoyer un signal clavier à gedit.
J'ai donc changé read i
en read -n1 i
, pour que le script fasse son travail sans entrer.
#!/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
Mais il ne tape aucun caractère dans gedit!
Et voici la question, quel est le problème du second script? Quelle est la différence entre read i
et read -n1 i
qui cause ce problème?
J'ai pu recréer ce problème. Bien que je ne sache pas pourquoi il y a une différence entre read
et read -n1
, l'ajout d'un simple délai avant que la touche ne le rende opérationnelle. Mon hypothèse est qu'il n'y a pas assez de temps après que la fenêtre a basculé pour enregistrer la frappe.
#!/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
J'ai modifié votre script d'origine pour qu'il identifie correctement la fenêtre de votre terminal actuel et permute entre les fenêtres Terminal et Gedit. Ce script utilise une boucle infinie, ainsi toutes les frappes imprimées dans la fenêtre Terminal sont transférées dans Gedit. Annuler avec 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