J'essaie d'exécuter xdotool type Word
puis xdotool key Return
à partir des préférences d'applications de démarrage.
Mais si j'utilise &&
ou ;
, xdotool l'évalue comme une continuation de l'entrée.
Longue histoire courte:
Utilisez un script.
#! /bin/sh
# With some window selection magic, or a sleep
# if you want to do that manually.
xdotool type Word
xdotool key Return
Et mettez le chemin du script dans le champ Exec
name__.
Longue histoire:
Selon la xdotool
manpage :
type
Supports newlines and tabs (ASCII newline and tab).
With respect to "COMMAND CHAINING", this command consumes the
remainder of the arguments and types them. That is, no commands can
chain after 'type'.
Le chaînage de commandes via ;
ou &
n'est pas possible, car il s'agit de la syntaxe Shell et les applications de démarrage ne prennent pas en charge la syntaxe Shell. Cependant, si vous souhaitez simplement appuyer sur Enter après avoir tapé quelque chose, il existe un moyen détourné de le faire.
Quand il dit "nouvelle ligne" ASCII, cela ne signifie pas un \n
nu. Et la substitution de commande (xdotool type "$(printf '\n')"
, par exemple) mange les retours à la ligne. Après ceci xdotools
forum post , j'ai essayé ceci:
xdotool type "$(printf 'date\n ')"
Et ça a fonctionné. Mais cela ne fonctionne que s’il ya un caractère après le \n
, ce qui laisse évidemment un espace de fin, qui ne serait pas ce que vous voulez. J'ai modifié cela pour:
xdotool type "$(printf 'date\n\e ')"
Et cela fonctionne et ne laisse aucun espace de fuite. Cependant, cela pourrait poser des problèmes à ceux qui utilisent le mode Vi dans leur shell.
Merci à commentaires de @ steeldriver J'ai compris que cela était dû à mon essai sur le terminal sur lequel j'exécutais les commandes. Juste un petit écart entre mon pressage Enter et la commande xdotool
était suffisante pour qu'une seule nouvelle ligne soit correctement enregistrée. Ainsi:
sleep 0.1; xdotool type $'date\n'
Donc soit prolonger la ligne en la citant:
xdotool type 'date
'
ou utiliser l'interprétation de Shell comme suggéré par @steeldriver, semble être la bonne option.
Cependant, un script contenant:
#! /bin/sh
sleep 1
xdotool type date
xdotool key Return
dans le champ Exec
a bien fonctionné. En effet, je recommande toujours d'utiliser un script pour les commandes complexes dans un fichier de bureau.
Vous pouvez avoir un script avec /usr/bin/xdotool
dans Shebang, mais la page de manuel indique que "le mode script
n'est pas complètement étoffé et peut tomber en deçà de vos attentes", alors je me suis tenu à des scripts bash.
Je voyais peut-être des choses, mais lors de mes premiers essais, je devais mettre un (petit) . C'était un artefact de l'essayer sur le terminal qui exécutait les commandes au lieu d'une autre fenêtre.sleep
entre les commandes type
et key
name__
Il me semble que l'application n'analyse pas plusieurs commandes, mais la traite comme une seule commande. En tant que tel, faites-en une seule commande en l'enveloppant d'un appel Shell ...
bash -c 'xdotool type date; xdotool key Return'
Maintenant, vous pouvez aussi faire d'autres choses Shell ...
bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'
Notez que la commande "date" utilisée dans cette dernière inclut une nouvelle ligne! et "xdotool" le sortira.
NOTE: si vous faites ceci en tant que macro clavier, j'ajouterais quelques options supplémentaires à "xdotool" pour que cela fonctionne mieux ...
bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'