Follow up to xdotool doesn't work nicely

My previous post was that Windows “just works”, and Linux was “good luck with that”. Indeed, I had a deadline, and to get the job done, I used Windows and WinBatch, just got it done. On time. On a laptop. In my car. Yay.

But really, my nice setup is here at home, instead of on the laptop in my car. And my preferred setup is this OpenSuSE box here at home. So, now that the time pressure is lessened, I can spend a little more time, trying to figure it out. The secret is to not use the one-liner feature of xdotool. If you do the one-liner format of xdotool, it composes the command to throw at the window with “XSendEvent”

If you do multiple xdotool commands in order, it composes the commands to throw at the window with “XTEST”

More accurately, if the xdotool command has –window in the line, then XSendEvent is used. If xdotool command has only the “key” command in it, XTEST is used.

Apparently, most programs ignore window commands send with XSendEvent, so xdotool does it’s tool do to X, and the window ignores it.

Yay.

Here is one of the scripts that finally worked. Note I did have to add a time delay in, because otherwise the audio player window wasn’t ready in time for the following key stroke to be input.

!/bin/bash
 WIDLibre=$(/usr/bin/xdotool search --name "LibreOffice Writer")
 WIDAudio=$(/usr/bin/xdotool search --name "Insert Name Of Window of audio player here")
 /usr/bin/xdotool windowactivate $WIDAudio
 /usr/bin/sleep 0.5
 /usr/bin/xdotool key Control_L+comma
 /usr/bin/xdotool windowactivate $WIDLibre

This script sends a comma (with the Control key modifier) to the audio player. In WinBatch, this would be SendKey("^,")

Ctrl+, is the pause / unpause keystroke for the audio player. The other script, uses the left arrow key to rewind the audio. One script each is attached to a couple KDE shortcuts. Each of those keytroke combinations is programmed into a Kinesis Savant Elite2 foot pedal. So the left pedal backtracks the audio a few seconds, and the right pedal pauses / unpauses the audio. Window focus remains in LibreOffice.

To figure out what to use for “Insert Name Of Window of audio player here“, use the command wmctrl -l

One thing to note: the full name of the window (because of the audio player I used) had the length of the audio in it. That time had special characters in it (colons to separate minutes from seconds); so either I would have had to escape them out, or, I just put the first part of the window name in, up to the time / length.

The whole secret to the thing was that this did not work:

/usr/bin/xdotool --window $WIDAudio key Control_L+comma

and this did work:

/usr/bin/xdotool windowactivate $WIDAudio
/usr/bin/xdotool key Control_L+comma

Leave a Reply