Portál AbcLinuxu, 9. května 2025 02:51
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?
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; …
(( 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
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.