Here is my last bash script, it gets the pressed key in bash, enjoy.#!/bin/bash
function identify_key {
local key="$@"local printable=""case "$key" in"1b") echo "ESC ($key)";;"09") echo "TAB ($key)";;"1b 1b") echo "DOUBLE ESC ($key)";;"7f") echo "BKS ($key)";;"1b 5b 41") echo "UP ($key)";;"1b 5b 42") echo "DOWN ($key)";;"1b 5b 43") echo "RIGHT ($key)";;"1b 5b 44") echo "LEFT ($key)";;"1b 5b 47") echo "NUM5 ($key)";;"1b 5b 50") echo "PAUSE ($key)";;"1b 5b 31 7e") echo "HOME ($key)";;"1b 5b 32 7e") echo "INS ($key)";;"1b 5b 33 7e") echo "DEL ($key)";;"1b 5b 34 7e") echo "END ($key)";;"1b 5b 35 7e") echo "PGUP ($key)";;"1b 5b 36 7e") echo "PGDN ($key)";;"1b 5b 5b 41") echo "F1 ($key)";;"1b 5b 5b 42") echo "F2 ($key)";;"1b 5b 5b 43") echo "F3 ($key)";;"1b 5b 5b 44") echo "F4 ($key)";;"1b 5b 5b 45") echo "F5 ($key)";;"1b 5b 31 37 7e") echo "F6 ($key)";;"1b 5b 31 38 7e") echo "F7 ($key)";;"1b 5b 31 39 7e") echo "F8 ($key)";;"1b 5b 32 30 7e") echo "F9 ($key)";;"1b 5b 32 31 7e") echo "F10 ($key)";;"1b 5b 32 33 7e") echo "F11 ($key)";;"1b 5b 32 34 7e") echo "F12 ($key)";;"1b 1b 5b 5b 41") echo "ALT+F1 ($key)";;"1b 1b 5b 5b 42") echo "ALT+F2 ($key)";;"1b 1b 5b 5b 43") echo "ALT+F3 ($key)";;"1b 1b 5b 5b 44") echo "ALT+F4 ($key)";;"1b 1b 5b 5b 45") echo "ALT+F5 ($key)";;"1b 1b 5b 31 37 7e") echo "ALT+F6 ($key)";;"1b 1b 5b 31 38 7e") echo "ALT+F7 ($key)";;"1b 1b 5b 31 39 7e") echo "ALT+F8 ($key)";;"1b 1b 5b 32 30 7e") echo "ALT+F9 ($key)";;"1b 1b 5b 32 31 7e") echo "ALT+F10 ($key)";;"1b 1b 5b 32 33 7e") echo "ALT+F11 ($key)";;"1b 1b 5b 32 34 7e") echo "ALT+F12 ($key)";;"") echo "SPACE or INTRO";;*) # check if it's ALT+xx
if [ ${#key} -gt 2 ] && [ "${key:0:2}" == "1b" ]; then# if string length greather than 2 and starts by Escape (1b)
printable="\x"${key:3} # erases the starting '1b 'printf "ALT+%b (%s)\n" "$printable" "$key"else
printable="\x"$key
printf "%b (%s)\n" "$printable" "$key"fi;;esac}function key_5b {
# process '1b 5b ...' keys and return values
local key=$1
local keyA=""local keyB=""local keyC=""keyA=`echo -n "$key" | hexdump -ve '1/1 "%.2x\n"'`; key=""case "$keyA" in"31" | "32" | "33" | "34" | "35" | "36") # Must read the following keyread -rsn1 -t 1 key # Wait 1 second max for next key
if [ "$key" == "" ]; then# 'ESC + [ + A|B|C|....F' keys pressed (very fast)
echo "$keyA"
else
keyB=`echo -n "$key" | hexdump -ve '1/1 "%.2x\n"'`; key=""if [ "$keyB" == "7e" ]; then# got '~', uses to be the last key so return "XX 7e" where XX is [31|32|33|34|35|36]
echo "$keyA $keyB"
else
read -rsn1 -t 1 key # Wait 1 second max for next key
if [ "$key" == "" ]; then# 'A|B|C|....F + XX' keys pressed (very fast)
echo "$keyA $keyB"
else
keyC=`echo -n "$key" | hexdump -ve '1/1 "%.2x\n"'`; key=""# max depth level, so return
echo "$keyA $keyB $keyC"
fififi;;"5b") # read another key and return (uses to be F1 ... F5 keys) '1b 5b 5b [41|42|43|44|45]'read -rsn1 -t 1 key # Wait 1 second max for next key
keyB=`echo -n "$key" | hexdump -ve '1/1 "%.2x\n"'`; key=""echo "$keyA $keyB"
;;*) # Uses to be UP or other arrow keys '1b 5b [41|42|43|44]' so return
echo "$keyA"
;;esac}function getkey {
local key=""local key1=""local key2=""local key3=""local key4=""oldifs="$IFS"
IFS=" "
read -rsn1 keykey1=`echo -n "$key" | hexdump -ve '1/1 "%.2x\n"'`; key=""if [ "$key1" == "1b" ]; thenread -rsn1 -t 1 key # Wait 1 second max for next key
if [ ! "$key" == "" ]; thenkey2=`echo -n "$key" | hexdump -ve '1/1 "%.2x\n"'`; key=""case "$key2" in"1b") # it could be a double ESC or an ALT+Fx keyread -rsn1 -t 1 key # Wait 1 second max for next key
if [ "$key" == "" ]; then# "1b 1b" 'ESC' key pressed 2 times (very fast)
echo "$key1 $key2"
else
# "1b 1b ..." Uses to be ALT+F? key pressed
key3=`echo -n "$key" | hexdump -ve '1/1 "%.2x\n"'`; key=""if [ "$key3" == "5b" ]; thenread -rsn1 -t 1 key # Wait 1 second max for next key
if [ "$key" == "" ]; then# "1b 1b 5b" 'ESC + ESC + [' keys pressed (very fast)
echo "$key1 $key2 $key3"
else
echo "$key1 $key2 $key3 $(key_5b $key)"
fielse
# Unknown key '1b 1b XX' so return
echo "$key1 $key2 $key3"
fifi;;"5b") # Several posibilities "1b 5b ..."read -rsn1 -t 1 key # Wait 1 second max for next key
if [ "$key" == "" ]; then# "1b 5b" 'ESC + [' keys pressed (very fast)
echo "$key1 $key2"
else
echo "$key1 $key2 $(key_5b $key)"
fi;;*) # ESC + Other key pressed (very fast) or ALT+xx
echo "$key1 $key2"
;;esacelse
# ESC key pressed
echo "$key1"
fielse
echo "$key1"
fiIFS="$oldifs"
return 0
}while true
doecho "----------------------------"
tecla=$(getkey)identify_key $tecladone
Thursday, August 4, 2011
Get pressed key in bash, works in VMware esx
Monday, August 1, 2011
Mac OS X 10.6 Leopard over VMware Workstation
Here is a well documented post that explains how to install Mac OS X 10.6 over VMware Workstation 7:
http://bobhood.wordpress.com/2009/12/18/welcome-to-snow-leopard-mac-os-x-10-6-and-vmware-workstation-7/
http://bobhood.wordpress.com/2009/12/18/welcome-to-snow-leopard-mac-os-x-10-6-and-vmware-workstation-7/
Subscribe to:
Posts (Atom)