Portál AbcLinuxu, 7. listopadu 2025 01:22
if ((k == 65)) # UP a if ((k == 66)) # DOWN
DíkyCo třeba tohle ?Co to s tím má společného? Potřebuji rozlišit poznat co se stisklo na kláesnici za tlačítko..
A co takhle zkusit požadovaou klávesu stisknout a podívat se, co dostanu?
to jsem samozřejmě zkoušel jako první, ale tam bude problém patrně někde jinde.. Proměnná vypisuje spustu čísel současně :(
Spusti si xev , stlac danu klavesu a kod si zaznamenaj.
root@debian:~# xev -bash: xev: příkaz nenalezen root@debian:~# root@debian:~# aptitude install xev K balíku xev nebyla nalezena kandidátská verze K balíku xev nebyla nalezena kandidátská verze Žádné balíky se nebudou instalovat, aktualizovat nebo odstraňovat. 0 balíků aktualizováno, 0 nově instalováno, 0 k odstranění a 0 neaktualizováno. Potřebuji stáhnout 0 B archivů. Po rozbalení bude použito 0 B.
A co tak dát hledat a nalézt asi X11-utils…No a co jako s tím X11-utils? Hledám xev ne X11-utils...
This package provides a miscellaneous assortment of X utilities that ship with the X Window System, including: - appres, editres, listres and viewres, which query the X resource database; - luit, a filter that can be run between an arbitrary application and a UTF-8 terminal emulator; - xdpyinfo, a display information utility for X; - xdriinfo, query configuration information of DRI drivers; - xev, an X event displayer; …
Tak jdu instalovat, snad to k něčemu bde. díky
Jinak jsem naistaloval desktop a zjistitl jsem, že user Pepe_ je patrně kouzelník, jelikož já jsem třeba dostal pro šipku nahoru číslo keycode 111 ne 65, a třeba pro F1 keycode 67.
Když vytvořím podmíky
(( k == 65 )) && echo "#Up" (( k == 66 )) && echo "#Down" tato už nefunguje, proč? (( k == 67 )) && echo "#F1"
Třeba mu pomůže toto , neb konstrukce které se drží je pro konkrétní požadavek a je zmatečná.
#!/bin/bash
trap "stty $(stty -g)" EXIT
stty -echo -icanon time 2 || exit $?
KEYS=""
IFS=$'\a'
echo "Esc pro ukončení." >&2
while [ 1 ]; do
while read -t 0 ; do
read -s -r -d "" -N 1 -t 0.2 CHAR && KEYS="$KEYS$CHAR" || break
done
if [ -z "$KEYS" ]; then
sleep 0.05
continue
fi
case "$KEYS" in
$'\x1B\x5B\x41'*)
KEYS="${KEYS##???}"
echo "Nahoru"
;;
$'\x1B\x5B\x42'*)
KEYS="${KEYS##???}"
echo "Dolu"
;;
$'\x1B\x5B\x44'*)
KEYS="${KEYS##???}"
echo "Vlevo"
;;
$'\x1B\x5B\x43'*)
KEYS="${KEYS##???}"
echo "Vpravo"
;;
$'\x1B\x4F\x48'*)
KEYS="${KEYS##???}"
echo "Home"
;;
$'\x1B\x5B\x31\x7E'*)
KEYS="${KEYS##????}"
echo "(Numpad HOME)"
;;
$'\x1B\x4F\x46'*)
KEYS="${KEYS##???}"
echo "End"
;;
$'\x1B\x5B\x34\x7E'*)
KEYS="${KEYS##????}"
echo "(Numpad END)"
;;
$'\x1B\x5B\x45'*)
KEYS="${KEYS#???}"
echo "(Numpad 5)"
;;
$'\x1B\x5B\x35\x7e'*)
KEYS="${KEYS##????}"
echo "PageUp"
;;
$'\x1B\x5B\x36\x7e'*)
KEYS="${KEYS##????}"
echo "PageDown"
;;
$'\x1B\x5B\x32\x7e'*)
KEYS="${KEYS##????}"
echo "Insert"
;;
$'\x1B\x5B\x33\x7e'*)
KEYS="${KEYS##????}"
echo "Delete"
;;
$'\n'*|$'\r'*)
KEYS="${KEYS##?}"
echo "Enter"
;;
$'\t'*)
KEYS="${KEYS##?}"
echo "Tab"
;;
$'\x1B')
KEYS="${KEYS##?}"
echo "Esc - Ukončení"
exit 0
;;
$'\x1B'*)
echo -n "Neznámá sekvence (${#KEYS} znaků): \$'"
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']*)
KEYS="${KEYS##?}"
;;
*)
KEY="${KEYS:0:1}"
KEYS="${KEYS#?}"
echo "'$KEY'"
;;
esac
done
Nejlepěí by bylo použít na ten vstup nějaké řešení ne v bash ale v plnohodnotném jazyce...
Když už tak raději udělám něco za pomoci programu DIALOG ve smyslu :
INPUT=/tmp/menu.$$ ; dialog --title "Testovací menu" --menu "Vyberte položku:" 0 0 0 --file ./list.mnu 2>"${INPUT}" ; selected=$(<"${INPUT}") ; echo "Vybral jste položku: $selected"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.