Archiv verlassen und diese Seite im Standarddesign anzeigen : Pfeiltasten abfragen
Hi,
ich moechte gerne in einem shell-script abfragen, ob eine Pfeiltaste gedrueckt wurde (aehnlich wie bei History). Nun weiss ich aber weder wie ich es einstelle, dass nach der Eingabe einer Pfeiltaste, dies "uebergeben" wird, noch weiss ich wie man tastatur codes abfragt...
-:|modulo|:-
Hi,
vieleicht hilft's
Tastatur-Code (SuSE-DB) (http://sdb.suse.de/sdb/de/html/cg_spckeyboard.html)
Gruss
wd
Hans-Georg Normann
03-05-2001, 16:32
Hi modulo
die Tastaturcodes kannst du dir auch "ansehen".
Beispiel (Klickanweisung):
vi x.bak Retn
a
Strg + v
pfeiltaste
ESC
ZZ
für Leute die mit dem vi umgehen können: Im Editiermodus nach Strg + V (deaktiviert das nächste Escape) eine Pfeiltaste drücken. Die von der Tastatur gesendeten Zeichen werden in der Datei gespeichert.
Nur was heißt in diesem Zusammenhang abfragen? Ich kenne in shell - scripten nur den Befehl read VARIABLE. An dieser Stelle unterbricht das Programm seinen Ablauf und wartet auf eine Eingabe. Gibt es auch die Möglichkeit, dass eine Abfrage erfolgt, ohne das Programm zu unterbrechen (wenn keine Taste gedrückt, dann soll auch keine Aktion erfolgen. In BASIC gabs da mal den Befehl get oder get$)?
Hoffe das hilft ein wenig
Hans
[ 03. Mai 2001: Beitrag editiert von: Hans-Georg Normann ]
[ 03. Mai 2001: Beitrag editiert von: Hans-Georg Normann ]
Wie stellt man eigentlich Sonderzeichen in UBB dar?
[ 03. Mai 2001: Beitrag editiert von: Hans-Georg Normann ]
So...
Also das man mit Strg+V in vi das naechste Zeichen uninterpretiert einfuegt habe ich bis dato gar nicht gewusst. Ich hatte strg+v immer nur zum Makieren benutzt.
OK... aber nun zum Thema... ich habe jetzt verschiedene Moeglichkeiten die Pfeiltaste darzustellen.... zum einen ^[[A dann noch \x1b\x5b\x41 um die sedezimale Schreibweise habe ich mich noch nicht gekuemmert...
Ich lesen mittels 'read -n 3' nur eine Taste ein. Warum ich fuer eine Pfeiltaste 3 und nicht 1 eingeben muss bin ich mir auch nicht 100%ig sicher aber mit 1 wird die eingabe nicht korrekt uebergeben.
Jetzt beginnt mein Problem... wie kann ich die gedrueckte Taste mit der Pfeiltaste vergleichen (testen) ?
um das zu verdeutlichen hier ein Beispiel:
read -n 3 choice
if (test " $choice" = "\x1b\x5b\x41")then ...
auch wenn ich mit "^[[A" vergleiche laeufts nicht. Wie lautet die korrekte Syntax der rechte Seiten des Vergleiches in der Bedingung ?
Hallole modulo,
vielleicht hilft Dir das weiter:
KEY=``
ESC=false
while test "$KEY" != "q"; do
# Mit stty den Raw Modus ein, und das echo der
# eingetippten Zeichen ausschalten. Mit dd einen
# Datensatz (count=1) von einem Byte (bs=1c),
# also genau ein Zeichen von stdin nach stdout kopieren.
# Raw modus aus, und echo wieder einschalten.
KEY=$(stty raw -echo; dd bs=1c count=1 2>/dev/null; stty -raw echo)
# Wenn das Zeichen davor "[" war, auf A-D
# ueberpruefen und ESC zuruecksetzen
if [ "$ESC" = "true" ]; then
test "$KEY" = "A" && echo "Pfeil nach oben"
test "$KEY" = "B" && echo "Pfeil nach unten"
test "$KEY" = "C" && echo "Pfeil nach rechts"
test "$KEY" = "D" && echo "Pfeil nach links"
ESC=false
fi
test "$KEY" = "[" && ESC=true
done
Eine Pfeiltaste ergibt 3 Zeichen: (\r + [ + A-D). Beim ersten bin ich mir nicht ganz sicher.
Gruß micha
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.