Risposte:
Per farla breve:
usa una sceneggiatura.
#! /bin/sh
# With some window selection magic, or a sleep
# if you want to do that manually.
xdotool type word
xdotool key Return
E metti il percorso della sceneggiatura nel Exec
campo.
Lunga storia:
Secondo 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'.
Il concatenamento dei comandi tramite ;
o &
non è possibile, poiché si tratta della sintassi della shell e Startup Applications non supporta la sintassi della shell. Tuttavia, se tutto ciò che desideri è premere Enterdopo aver digitato qualcosa, c'è un modo rotatorio per farlo.
Quando dice "ASCII" newline, non significa un nudo \n
. E la sostituzione di comando ( xdotool type "$(printf '\n')"
, diciamo) mangia nuove righe finali. Dopo questo xdotools
post sul forum , ho provato questo:
xdotool type "$(printf 'date\n ')"
E ha funzionato. Ma funziona solo se c'è un carattere dopo il \n
, e questo ovviamente lascia uno spazio finale, che non sarebbe quello che vuoi. L'ho modificato in:
xdotool type "$(printf 'date\n\e ')"
E questo funziona e non lascia spazio finale. Tuttavia, potrebbe causare problemi a chi utilizza la modalità Vi nella propria shell.
Grazie ai commenti di @ steeldriver ho capito che ciò era dovuto al fatto che lo provavo proprio sul terminale sul quale stavo eseguendo i comandi. Solo un piccolo divario tra la mia pressione Entere il xdotool
comando era sufficiente per una singola riga nuova da registrare correttamente. Così:
sleep 0.1; xdotool type $'date\n'
Quindi o estendere la linea citandola:
xdotool type 'date
'
o usando l'interpretazione della shell come suggerito da @steeldriver sembra l'opzione giusta.
Tuttavia, uno script contenente:
#! /bin/sh
sleep 1
xdotool type date
xdotool key Return
sul Exec
campo ha funzionato bene. In effetti, consiglio sempre di usare uno script per comandi complessi in un file desktop.
Puoi avere uno script con /usr/bin/xdotool
nello shebang, ma la manpage dice "la script
modalità non è del tutto definita e potrebbe cadere al di sotto delle tue aspettative", quindi mi sono attaccato agli script.
Avrei potuto vedere delle cose, ma nei miei primi due tentativi, ho dovuto mettere un (piccolo) . Quello era un artefatto di provarlo sul terminale che stava eseguendo i comandi invece di un'altra finestra.sleep
tra i comandi type
ekey
xdotool type 'word
seguita dal tasto 'Invio' e quindi dalla chiusura '
, come fa $'word\n'
(in cui bash espande il carattere \n
a una nuova riga letterale prima di passare l'argomento a xdotool
).
'
o due \n
s con il $
trucco).
sleep
(vedi la nota in piccolo testo). Non stavo cambiando windows e stavo solo provando sulla stessa finestra, ma con un sleep 1
, entrambi i metodi hanno funzionato sia con la stessa finestra che dopo il passaggio. Immagino che il mio tasto Invio abbia interferito in qualche modo con la newline di xdotool. Tuttavia, per il requisito più complesso di un file desktop, consiglierei comunque lo script.
Mi sembra che l'applicazione non stia analizzando più comandi, ma trattandola come un singolo comando. Come tale lo rendono un singolo comando racchiudendolo in una chiamata shell ...
bash -c 'xdotool type date; xdotool key Return'
Ora puoi anche fare altre cose di shell ...
bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'
Nota che il comando "date" usato in quest'ultima include una nuova riga! e "xdotool" lo produrrà.
NOTA: se lo stai facendo come una macro di tastiera, aggiungerei anche alcune altre opzioni a "xdotool" per migliorare il funzionamento ...
bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
xdotool type $'word\r'
, dove$''
sfugge\r
a qualcosa come return (\n
non funziona qui).