#!/bin/sh GetID() { xwininfo -root -all | grep "$1" | { read A B; echo $A; } } Up() { # ID xwit -raise -id "$1" } Catch() { # ID xse -win "$1" '<FocusIn> Normal Pointer' } KeyIze() { # string [noenter] for c in `echo "$1" | sed ' s/ //g s/ //g s/[^\\]/& /g '` do case "$c" in # TODO more keysyms "!") echo "Shift<Key>exclam";; '"') echo "Shift<Key>quotedbl";; "#") echo "Shift<Key>numbersign";; "$") echo "Shift<Key>dollar";; "%") echo "Shift<Key>percent";; "&") echo "Shift<Key>ampersand";; "'") echo "Shift<Key>apostrophe";; "(") echo "Shift<Key>parenleft";; ")") echo "Shift<Key>parenright";; "*") echo "Shift<Key>asterisk";; "+") echo "<Key>plus";; ",") echo "<Key>comma";; "-") echo "<Key>minus";; ".") echo "<Key>period";; "/") echo "<Key>slash";; ":") echo "Shift<Key>colon";; ";") echo "<Key>semicolon";; "<") echo "Shift<Key>less";; "=") echo "Shift<Key>equal";; ">") echo "Shift<Key>greater";; "?") echo "Shift<Key>question";; "@") echo "Shift<Key>at";; "[") echo "<Key>bracketleft";; "\\") echo "<Key>backslash";; "]") echo "<Key>bracketright";; "^") echo "Shift<Key>asciicircum";; "_") echo "Shift<Key>underscore";; '`') echo "<Key>grave";; "{") echo "Shift<Key>braceleft";; "|") echo "Shift<Key>bar";; "}") echo "Shift<Key>braceright";; "~") echo "Shift<Key>asciitilde";; \\1) echo "<Key>F1" ;; \\2) echo "<Key>F2" ;; \\3) echo "<Key>F3" ;; \\4) echo "<Key>F4" ;; \\5) echo "<Key>F5" ;; \\6) echo "<Key>F6" ;; \\7) echo "<Key>F7" ;; \\8) echo "<Key>F8" ;; \\9) echo "<Key>F9" ;; \\0) echo "<Key>F10" ;; \\E) echo "<Key>esacape" ;; \\U) echo "<Key>Up" ;; \\D) echo "<Key>Down" ;; \\L) echo "<Key>Left" ;; \\R) echo "<Key>Right" ;; \\n| ) echo "<Key>Return" ;; \\t|) echo "<Key>Tab" ;; \\\\) echo "<Key>backslash" ;; # TODO \any_other (e. g. \k) # TODO controls ) echo "<Key>space" ;; A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z) echo "Shift<Key>$c" ;; *) echo "<Key>$c" ;; esac done } SendKey() { # id key1 [key2 ...] local id="$1" shift xse -win "$id" "$@" } # TODO getopts # TODO some useful xse/xwit/wmcntrl events ID=`GetID "$1"` Up "$ID" Catch "$ID" SendKey "$ID" `KeyIze "$2"`