Відповіді:
Довга коротка історія:
Використовуйте сценарій.
#! /bin/sh
# With some window selection magic, or a sleep
# if you want to do that manually.
xdotool type word
xdotool key Return
І покладіть шлях сценарію в Exec
поле.
Довга історія:
Згідно xdotool
сторінці керівництва :
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'.
Кодування команд через ;
або &
неможливо, оскільки це синтаксис оболонки, а програми запуску не підтримують синтаксис оболонки. Однак якщо все, що ви хочете зробити, це натиснути Enterпісля чогось набравши щось, існує обхідний спосіб зробити це.
Коли йдеться про "ASCII" новий рядок, це не означає голий \n
. І заміна команд ( xdotool type "$(printf '\n')"
скажімо) їсть сліди нових рядків. Після цього xdotools
повідомлення на форумі я спробував це:
xdotool type "$(printf 'date\n ')"
І це спрацювало. Але це працює лише за наявності певного персонажа \n
, і це очевидно залишає простір, який би не був тим, що ви хочете. Я змінив це на:
xdotool type "$(printf 'date\n\e ')"
І це працює і не залишає ніякого місця. Однак це може створити проблеми тим, хто використовує режим Vi в своїй оболонці.
Завдяки коментарям @ steeldriver я зрозумів, що це через те, що я спробував це на самому терміналі, на якому я виконував команди. Всього лише невеликого розриву між моїм натисканням Enterта xdotool
командою було достатньо, щоб один новий рядок був правильно зареєстрований. Таким чином:
sleep 0.1; xdotool type $'date\n'
Отже, або продовжуючи рядок, цитуючи його:
xdotool type 'date
'
або використання інтерпретації оболонки як запропоновано @steeldriver виглядає як правильний варіант.
Однак сценарій, що містить:
#! /bin/sh
sleep 1
xdotool type date
xdotool key Return
у Exec
полі добре працював. Дійсно, я завжди рекомендую використовувати скрипт для складних команд у файлі робочого столу.
Ви можете мати сценарій /usr/bin/xdotool
у shebang, але в manpage написано, що " script
режим не повністю розроблений і може опуститися нижче ваших очікувань", тому я дотримувався стримування сценаріїв.
Я, можливо, бачив речі, але в першій моїй спробі мені довелося поставити (невеликий) . Це був артефакт спробувати його на терміналі, який виконував команди замість іншого вікна.sleep
між командами type
таkey
xdotool type 'word
наступним натисканням клавіші «Enter» , а потім закриттям '
, як це робить $'word\n'
(в якому Баш розширює \n
буквальний переклад рядка перед передачею аргументу xdotool
).
'
або два \n
s $
трюком).
sleep
(див. Примітку невеликим текстом). Я не міняв вікна і просто випробовував це в одному вікні, але з a sleep 1
, обидва методи працювали з тим самим вікном і після перемикання. Я думаю, що моя власна клавіша Enter якось заважала новій лінії xdotool. Однак для більш складної вимоги до настільного файлу я все-таки рекомендую сценарій.
Мені здається, що програма не розбирає декілька команд, але трактує її як єдину команду. Таким чином, зробіть це єдиною командою, загорнувши її в оболонку ...
bash -c 'xdotool type date; xdotool key Return'
Тепер ви також можете робити інші речі з оболонками ...
bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'
Зауважте, що команда "дата", що використовується в останньому, містить новий рядок! і "xdotool" виведе його.
ПРИМІТКА: якщо ви робите це як макрос клавіатури, я також додав би ще кілька варіантів до "xdotool", щоб покращити цю роботу ...
bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
xdotool type $'word\r'
, де$''
виходить\r
на щось подібне до повернення (\n
тут не працює).