Ответы:
Короче говоря:
используйте сценарий.
#! /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'.
Цепочка команд с помощью ;
или &
невозможна, так как это синтаксис оболочки и Startup Applications не поддерживает синтаксис оболочки. Однако, если все, что вы хотите сделать, это нажать 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
в шебанге, но на странице руководства написано « script
режим не полностью продуман и может оказаться ниже ваших ожиданий», поэтому я остановился на сценариях bash.
Возможно , я видел вещи, но в моих первых парах попыток, я должен был поставить (маленькие) . Это был артефакт его тестирования на терминале, который выполнял команды, а не в другом окне.sleep
между type
и key
командами
xdotool type 'word
последующим нажатием клавиши «Enter» , а затем закрытием '
, как это делает $'word\n'
(в котором Баш расширяет \n
буквальный перевод строки перед передачей аргумента xdotool
).
'
или две \n
с $
трюк).
sleep
(см. Примечание в небольшом тексте). Я не менял окна и просто пробовал его в одном и том же окне, но с помощью sleep 1
обоих методов работал как в одном окне, так и после переключения. Я предполагаю, что мое собственное нажатие клавиши Enter как-то помешало переводу строки xdotool. Тем не менее, для более сложных требований к файлу рабочего стола, я все равно рекомендую скрипт.
Мне кажется, приложение не разбирает несколько команд, а обрабатывает их как одну команду. Таким образом, сделайте его единственной командой, заключив ее в оболочку ...
bash -c 'xdotool type date; xdotool key Return'
Теперь вы также можете делать другие вещи оболочки ...
bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'
Обратите внимание, что команда «date», использованная в последнем, включает перевод строки! и "xdotool" выведет его.
ПРИМЕЧАНИЕ: если вы делаете это как макрос клавиатуры, я бы добавил еще несколько опций в «xdotool», чтобы сделать это лучше ...
bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
xdotool type $'word\r'
, где$''
экранирует что-\r
то вроде возврата (\n
здесь не работает).