Digite gedit usando xdotool em um script

3

Eu quero digitar um caractere em um shell e ter xdotool enviando o sinal desse caractere para o gedit, para que o caractere seja digitado no gedit.

Eu escrevi este 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

Tudo funciona bem, exceto que o script espera por enter para enviar um sinal de teclado para o gedit.

Então eu mudei read i para read -n1 i , para fazer o script fazer o seu trabalho sem entrar.

#!/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

Mas ele não digita nenhum caractere no gedit!

E aqui está a pergunta: qual é o problema do segundo script? Qual é a diferença entre read i e read -n1 i que causa esse problema?

    
por Ali Razmdideh 25.05.2017 / 11:50

2 respostas

1

Consegui recriar esse problema. Embora eu não saiba por que existe uma diferença entre read e read -n1 , adicionando um simples atraso antes que a chave fizesse funcionar. Meu palpite é que não há tempo suficiente depois que a janela muda para registrar a pressão das teclas.

#!/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
    
por Evan Chen 01.06.2017 / 04:34
0

Eu modifiquei seu script original para que ele receba corretamente o ID da janela do seu terminal atual e alterne o foco entre as janelas do Terminal e do Gedit. Esse script usa loop infinito, portanto, todas as teclas digitadas na janela do Terminal são transferidas para o Gedit. Cancele com 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
    
por whtyger 29.05.2017 / 12:45