#!/bin/sh GetID() { xwininfo -root -all | grep "$1" | { read A B; echo $A; } } Up() { # ID xwit -raise -id "$1" } Catch() { # ID xse -win "$1" ' 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 "Shiftexclam";; '"') echo "Shiftquotedbl";; "#") echo "Shiftnumbersign";; "$") echo "Shiftdollar";; "%") echo "Shiftpercent";; "&") echo "Shiftampersand";; "'") echo "Shiftapostrophe";; "(") echo "Shiftparenleft";; ")") echo "Shiftparenright";; "*") echo "Shiftasterisk";; "+") echo "plus";; ",") echo "comma";; "-") echo "minus";; ".") echo "period";; "/") echo "slash";; ":") echo "Shiftcolon";; ";") echo "semicolon";; "<") echo "Shiftless";; "=") echo "Shiftequal";; ">") echo "Shiftgreater";; "?") echo "Shiftquestion";; "@") echo "Shiftat";; "[") echo "bracketleft";; "\\") echo "backslash";; "]") echo "bracketright";; "^") echo "Shiftasciicircum";; "_") echo "Shiftunderscore";; '`') echo "grave";; "{") echo "Shiftbraceleft";; "|") echo "Shiftbar";; "}") echo "Shiftbraceright";; "~") echo "Shiftasciitilde";; \\1) echo "F1" ;; \\2) echo "F2" ;; \\3) echo "F3" ;; \\4) echo "F4" ;; \\5) echo "F5" ;; \\6) echo "F6" ;; \\7) echo "F7" ;; \\8) echo "F8" ;; \\9) echo "F9" ;; \\0) echo "F10" ;; \\E) echo "esacape" ;; \\U) echo "Up" ;; \\D) echo "Down" ;; \\L) echo "Left" ;; \\R) echo "Right" ;; \\n| ) echo "Return" ;; \\t|) echo "Tab" ;; \\\\) echo "backslash" ;; # TODO \any_other (e. g. \k) # TODO controls ) echo "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$c" ;; *) echo "$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"`