Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pfeiltasten abfragen



modulo
01-05-2001, 13:04
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|:-

wd
01-05-2001, 17:28
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 ]

modulo
04-05-2001, 09:52
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 ?

modulo
29-05-2001, 17:08
niemand weiss was ?

micha
29-05-2001, 20:36
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