Answers:
长话短说:
使用脚本。
#! /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建议的shell解释看起来像正确的选项。
但是,脚本包含:
#! /bin/sh
sleep 1
xdotool type date
xdotool key Return
在Exec
现场工作得很好。确实,我总是建议对桌面文件中的复杂命令使用脚本。
您可以/usr/bin/xdotool
在shebang中使用脚本,但联机帮助页上显示“ script
模式尚未完全充实,可能会低于您的期望”,因此我坚持使用bash脚本。
我可能一直在看东西,但是在最初的几次尝试中,我不得不。那是在正在执行命令的终端而不是另一个窗口上尝试它的人工产物。sleep
在type
和key
命令之间放置一个(小)
xdotool type 'word
其次是“Enter”键,然后关闭'
一样,$'word\n'
(其中的bash扩展\n
到字面换行符传递参数之前xdotool
)。
'
或两个\n
s 之前先输入两次 Enter $
)。
sleep
(请参阅小文本中的注释)。我不是在更改窗口,而是在同一窗口上尝试,而是使用sleep 1
,这两种方法都在同一窗口和切换后都起作用。我猜我自己的Enter键在某种程度上干扰了xdotool换行符。但是,对于更复杂的桌面文件要求,我仍然建议使用该脚本。
在我看来,该应用程序未解析多个命令,而是将其视为单个命令。这样,通过将其包装成一个shell调用即可使其成为单个命令...
bash -c 'xdotool type date; xdotool key Return'
现在您还可以执行其他shell任务...
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
到return之类的东西(\n
在这里不起作用)。