Warum zeigt das Terminal "^ [[A" "^ [[B" "^ [[C" "^ [[D] beim Drücken der Pfeiltasten in Ubuntu?
Ich geschrieben habe ein klitzekleines Programm in Ansi-C unter Windows erste, und ich es kompiliert unter Ubuntu mit dem integrierten GCC jetzt.
Das Programm ist einfach:
- Lesen Sie die Zeile von der Konsole mit
scanf()
. - Analysieren Sie die Zeichenfolge und berechnen.
Aber etwas seltsam passiert, wenn ich will, um den cursor zu bewegen, es werde vier Charaktere:
- drücken Sie - "^[[A"
- drücken Sie Dn - "^[[B"
- drücken Sie Rt - "^[[C"
- drücken Sie Lt - "^[[D"
- Wie man diese vermeiden?
- Warum druckt es 4 Zeichen anstelle von beweglichen cursor?
Kommentar zu dem Problem
Sonderzeichen wie ^U und Backspace funktionieren wird, da die Tastatur-Treiber verarbeitet diese. Aber die Pfeil-Taste Verhalten, das Sie verwendet, um darauf programmiert ist in die shell. Wenn Sie Ihr eigenes Programm schreiben, müssen Sie es behandeln sich selbst, oder Sie installieren könnte
rlwrap
und führen Sie das Programm rlwrap my_prog
und es wird tun, was Sie erwarten. Die Zeichen, die Sie sehen, sind die escape-Sequenzen, erzeugt durch jene Taste drückt. Das sind die traditionellen ANSI-escape-Sequenzen, die repräsentieren die cursor-Tasten. Siehe stackoverflow.com/questions/4130048/...
InformationsquelleAutor der Frage Kevin Dong | 2014-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil das, was die Tastatur tatsächlich sendet der PC (genauer gesagt, was das terminal druckt für das, was es tatsächlich bekommt von der Tastatur).
bash
zum Beispiel erhält diese Werte, entschlüsselt Sie und versteht, dass Sie wollen, zu bewegen, so wird es entweder bewegen Sie den cursor (im Falle von Links/rechts) oder nutzen Sie seine Geschichte zum abrufen vorheriger Befehle (up/down). So können Sie nicht erwarten, dass Ihr Programm auf Magische Weise unterstützen Sie die Pfeiltasten.Jedoch, Lesen von standard-input vom terminal unterstützt bereits Links/rechts Pfeil-Tasten (ich glaube, aber ich bin nicht in Linux jetzt zu testen und sicherzustellen). Also meine Vermutung ist, dass es ist ein anderes Thema stören. Eine mögliche Ursache könnte sein, dass einer der Sondertasten ist hängen geblieben? Vielleicht ALT, STRG oder SUPER?
InformationsquelleAutor der Antwort Shahbaz
Für diejenigen, die kommen von osx (mac) versuchen Sie, die Schalen zu
bash
Terminal -> Preferences -> Shells open with -> [select] Command (complete path)
fügen
/bin/bash
InformationsquelleAutor der Antwort KhaledMohamedP