Verwendet zsh den kanonischen Modus für das Terminal?

Verwendet zsh den kanonischen Modus für das Terminal?

Ich habe es untersucht terminfound stty. Wenn ich stty -a|grep icanones ausführe, scheint der kanonische Modus eingestellt zu sein, aber wenn ich versuche, ihn mit auszuschalten stty -icanonund erneut zu prüfen, sehe ich, dass er immer noch eingestellt ist. Wenn ich dasselbe unter Bash mache, kann ich Icanon deaktivieren, aber ich merke keine Änderung im Verhalten. Ich habe also zwei Fragen: Warum kann ich Icanon in zsh nicht deaktivieren und wie sollte es das Verhalten beeinflussen, wenn ich es könnte?

Antwort1

Wenn ich dasselbe unter Bash mache, kann ich Icanon deaktivieren, bemerke aber keine Änderung im Verhalten.

Das liegt daran, dass Bash den kanonischen Modus einschaltetausbeim Lesen von Befehlen des Benutzers (um Zeilenbearbeitungsfunktionen implementieren zu können, die der Terminaltreiber nicht bietet - wie das Einfügen von Text, das Bewegen des Cursors nach links und rechts mit den Pfeiltasten usw.) und dannstellt wieder herdie vorherigen Terminaleinstellungen beim Ausführen einer beliebigen Befehlszeile.

Um die Wirkung zu sehen, führen Sie einen externen Befehl wie den folgenden aus cat:

bash$ stty -icanon
bash$ cat
hheelloo

Jeder Schlüssel wird wiederholt, einmal, weil stty echoeingeschaltet ist, und einmal, weil cater sofort gelesen und zurückgeschrieben wird, anstatt auf vollständige Zeilen warten zu müssen.

[mit zsh] Wenn ich versuche, es mit auszuschalten stty -icanonund noch einmal zu prüfen, sehe ich, dass es immer noch eingestellt ist.

Beim Wiederherstellen der vorherigen Terminaleinstellungen wie oben beschrieben, zshwird auch erzwungeneinige vernünftige Standardeinstellungen(einschließlich der Einstellungen echound icanon). Wahrscheinlich liegt das daran, dass angenommen wird, dass, wenn ein Befehl den kanonischen Modus verlassen hatausbeim Beenden war es nur ein Unfall (z. B. wenn eine Vollbild-App viabstürzte less).

Ich konnte keine zshOption finden, mit der es genauso funktioniert bash(und wie jedes andere Programm, das die Readline-Bibliothek verwendet), aber wenn Sie den Icanon-Modus vor dem Ausführen eines Befehls ausschalten möchten, können Sie dies tun, indem Sie stty von derselben Befehlszeile aus aufrufen:

zsh$ stty -icanon; cat
hheelloo

verwandte Informationen