Monday, May 13, 2024
16
rated 0 times [  16] [ 0]  / answers: 1 / hits: 18206  / 2 Years ago, fri, october 7, 2022, 6:59:58

I'm trying to run xdotool type word then xdotool key Return from Startup Aplications Preferences.

But if I use && or ;, xdotool evaluates it as continuation of input.


More From » command-line

 Answers
6

Long story short:

Use a script.



#! /bin/sh
# With some window selection magic, or a sleep
# if you want to do that manually.
xdotool type word
xdotool key Return


And put the path of the script in the Exec field.






Long story:



According to the 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'.


Command chaining via ; or & isn't possible, since that is shell syntax and Startup Applications doesn't support shell syntax. However, if all you wish to do is press Enter after typing something, there's a roundabout way to do so.



When it says "ASCII" newline, it doesn't mean a bare
. And command substitution (xdotool type "$(printf '
')"
, say) eats trailing newlines. Following this xdotools forum post, I tried this:



xdotool type "$(printf 'date
')"


And it worked. But it only works if there is some character after the
, and this obviously leaves a trailing space, which would not be what you want.
I modified that to:



xdotool type "$(printf 'date
e ')"


And this works and leaves no trailing space. However, it might cause problems for those using Vi mode in their shell.



Thanks to @steeldriver's comments I figured out that this was due to me trying it out on the very terminal I was executing the commands on. Just a small gap between my pressing Enter and the xdotool command was enough for a single newline to be registered correctly. Thus:



sleep 0.1; xdotool type $'date
'


So either extending the line by quoting it:



xdotool type 'date
'


or using the shell interpretation as @steeldriver suggested looks like the right option.



However, a script containing:



#! /bin/sh
sleep 1
xdotool type date
xdotool key Return


in the Exec field worked fine. Indeed, I always recommend using a script for complex commands in a desktop file.



You can have a script with /usr/bin/xdotool in the shebang, but the manpage says "script mode isn't fully fleshed out and may fall below your expectations", so I stuck to bash scripts.



I might have been seeing things, but in my first couple of tries, I had to put a (small) sleep between the type and key commands. That was an artifact of trying it out on the terminal that was executing the commands instead of another window.


[#23511] Saturday, October 8, 2022, 2 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
feeous

Total Points: 102
Total Questions: 122
Total Answers: 119

Location: Netherlands
Member since Thu, Jul 1, 2021
3 Years ago
;