inital commit. Not all games work 100, or even 50 percent lol.
This commit is contained in:
108
getkey.sh
Executable file
108
getkey.sh
Executable file
@ -0,0 +1,108 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Reset terminal to current state when we exit.
|
||||
trap "stty $(stty -g)" EXIT
|
||||
|
||||
# Disable echo and special characters, set input timeout to 0.2 seconds.
|
||||
stty -echo -icanon time 2 || exit $?
|
||||
|
||||
# String containing all keypresses.
|
||||
KEYS=""
|
||||
|
||||
# Set field separator to BELL (should not occur in keypresses)
|
||||
IFS=$'\a'
|
||||
|
||||
# Input loop.
|
||||
while [ 1 ]; do
|
||||
|
||||
# Read more input from keyboard when necessary.
|
||||
while read -t 0 ; do
|
||||
read -s -r -d "" -N 1 -t 0.2 CHAR && KEYS="$KEYS$CHAR" || break
|
||||
done
|
||||
# If no keys to process, wait 0.05 seconds and retry.
|
||||
if [ -z "$KEYS" ]; then
|
||||
sleep 0.02
|
||||
continue
|
||||
fi
|
||||
|
||||
# Check the first (next) keypress in the buffer.
|
||||
case "$KEYS" in
|
||||
$'\x1B\x5B\x41'*) # Up arrow
|
||||
KEYS="${KEYS##???}"
|
||||
KEY="Arrow_U"
|
||||
;;
|
||||
$'\x1B\x5B\x42'*) # Down Arrow
|
||||
KEYS="${KEYS##???}"
|
||||
KEY="Arrow_D"
|
||||
;;
|
||||
$'\x1B\x5B\x44'*) # Left Arrow
|
||||
KEYS="${KEYS##???}"
|
||||
KEY="Arrow_L"
|
||||
;;
|
||||
$'\x1B\x5B\x43'*) # Right Arrow
|
||||
KEYS="${KEYS##???}"
|
||||
KEY="Arrow_R"
|
||||
;;
|
||||
$'\x1B\x4F\x48'*) # Home
|
||||
KEYS="${KEYS##???}"
|
||||
KEY="Home"
|
||||
;;
|
||||
$'\x1B\x5B\x31\x7E'*) # Home (Numpad)
|
||||
KEYS="${KEYS##????}"
|
||||
KEY="Home"
|
||||
;;
|
||||
$'\x1B\x4F\x46'*) # End
|
||||
KEYS="${KEYS##???}"
|
||||
KEY="End"
|
||||
;;
|
||||
$'\x1B\x5B\x34\x7E'*) # End (Numpad)
|
||||
KEYS="${KEYS##????}"
|
||||
KEY="End"
|
||||
;;
|
||||
$'\x1B\x5B\x45'*) # 5 (Numpad)
|
||||
KEYS="${KEYS#???}"
|
||||
KEY="Numpad_5"
|
||||
;;
|
||||
$'\x1B\x5B\x35\x7e'*) # PageUp
|
||||
KEYS="${KEYS##????}"
|
||||
KEY="Page_U"
|
||||
;;
|
||||
$'\x1B\x5B\x36\x7e'*) # PageDown
|
||||
KEYS="${KEYS##????}"
|
||||
KEY="Page_D"
|
||||
;;
|
||||
$'\x1B\x5B\x32\x7e'*) # Insert
|
||||
KEYS="${KEYS##????}"
|
||||
KEY="Insert"
|
||||
;;
|
||||
$'\x1B\x5B\x33\x7e'*) # Delete
|
||||
KEYS="${KEYS##????}"
|
||||
KEY="Delete"
|
||||
;;
|
||||
$'\n'*|$'\r'*) # Enter/Return
|
||||
KEYS="${KEYS##?}"
|
||||
KEY="Enter"
|
||||
;;
|
||||
$'\t'*) # Tab
|
||||
KEYS="${KEYS##?}"
|
||||
KEY="Tab"
|
||||
;;
|
||||
$'\x1B') # Esc (without anything following!)
|
||||
KEYS="${KEYS##?}"
|
||||
exit 0
|
||||
;;
|
||||
$'\x1B'*) # Unknown escape sequences
|
||||
echo -n "Unknown escape sequence (${#KEYS} chars): \$'"
|
||||
echo -n "$KEYS" | od --width=256 -t x1 | sed -e '2,99 d; s|^[0-9A-Fa-f]* ||; s| |\\x|g; s|$|'"'|"
|
||||
KEYS=""
|
||||
;;
|
||||
[$'\x01'-$'\x1F'$'\x7F']*) # Consume control characters
|
||||
KEYS="${KEYS##?}"
|
||||
;;
|
||||
*) # Printable characters.
|
||||
KEY="${KEYS:0:1}"
|
||||
KEYS="${KEYS#?}"
|
||||
;;
|
||||
esac
|
||||
echo "$KEY"
|
||||
done
|
Reference in New Issue
Block a user