Create a custom shortcut that types clipboard contents
I want to simulate keyboard input so that I can "paste" my clipboard contents to applications that don't allow it (e.g. remote KVM). Right now, I'm trying to use xdotool
and xclip
:
xdotool type "$(xclip -o)"
This command works if I stay in a terminal window, and type that command myself. It types back my clipboard contents when I run the command. My goal is to bind this command to a hotkey, so that it works in any application.
If I use this hotkey, unexpected behavior occurs to whatever window has focus. e.g. my terminal window size shrinks (it's somewhat amusing, actually). Similar results occur if I save it as a script and call the script, or if I encapsulate the command with sh -c
. How can I make practical use of the powerful xdotool type
command?
You have two problems with this command. The first is that you need to make sure that the meta-keys in the binding are not pressed when it tries to run the command. Second, by default xclip selects XA_Primary
buffer rather than the XA_CLIPBOARD
. So you should pass clipboard
as the selection parameter for xclip. Change your hotkey command to the following:
sh -c 'sleep 0.5; xdotool type "$(xclip -o -selection clipboard)"'
xdotool creates keypresses, and it won't release the Ctrl key for you... The simplest solution is to add a delay, eg sleep 0.5
to wait for half a second, and to make sure you release Ctrl fast enough.
sh -c 'xdotool type --clearmodifiers -- "$(xclip -o -selection clipboard)"'
"--clearmodifiers" gets rid of CTRL/ALT/Shift etc, hopefully meaning the sleep is not required
"--" means end of xdotool options so that if the pasted test begins with - xdotool will not try to interpret it as an option