Einfüge-/Überschreibmodus in Fish

Einfüge-/Überschreibmodus in Fish

Ich verwende Linux Mint auf einem MacBook und auf dessen Tastatur entspricht die Kombination der EINFG-Taste Fn + RETURN.

Im Moment kann ich das beabsichtigte Verhalten dieser Kombination nur in GNU-Emacs sehen: Dort ist der Überschreibmodus an <insertchar>und gebunden <insert>.

Im Webbrowser hat es beispielsweise keine Wirkung. In einem Linux-Terminal und auch in jedem der Terminalemulatoren, die ich ausprobiert habe (z. B. Konsole, xterm), [2~wird die Escape-Sequenz auf dem Bildschirm ausgegeben, anstatt in den Einfügemodus zu wechseln.

Da ich denke, dass es eine nützliche Sache ist, möchte ich es zum Laufen bringen. Weiß jemand, wie man das beheben kann?

Übrigens: Fn + BackspaceDie Darstellung "DELETE"funktioniert in den genannten Anwendungen einwandfrei.

Übrigens Nr. 2: Ich verwende die Fish-Shell. Innerhalb der Bash-Shell wird die Escape-Sequenz nicht ausgegeben, die Tastenkombination hat aber auch keinen Effekt.

Antwort1

Terminalemulatoren können Text nicht selbstständig bearbeiten und daher existiert das Konzept des Einfügemodus bzw. Überschreibmodus auf dieser Ebene nicht.

Sie senden die Tastendrücke einfach an die laufende Anwendung (über den TTY-Treiber des Kernels), empfangen (wiederum über den TTY-Treiber des Kernels) und interpretieren Daten von der Anwendung und aktualisieren den Bildschirm entsprechend.

\e[2~Für die Einfügen-Taste besteht die richtige Aktion tatsächlich darin, die Escape-Sequenz zu senden .

Es liegt an den Anwendungen (Fish/Bash/usw. Shell, Emacs/usw. Texteditor usw.), es zu interpretieren und zwischen Einfüge- und Überschreibmodus zu wechseln (sofern sie Letzteren implementieren).

Antwort2

Terminalemulatoren verfügen über Steuersequenzen zum Einfügen und Löschen von Zeichen (und Zeilen) auf dem Bildschirm. Wenn Sie jedoch eine Anwendung ausführen (egal obHülseoder einTexteditor), sind die von Ihnen einzugebenden Steuersequenzen in der Regelnichtan das Terminal gesendet. Die Anwendung liest diese Sondertasten und entscheidet, welche Steuersequenzen an das Terminal gesendet werden sollen. Die Wirkung (Einfügen, Löschen und Überschreiben) ist nur einBilddessen, was die Anwendung tut. Die eigentlichen Daten befinden sich im Speicher der Anwendung (oder in den Datendateien).

Die meisten Terminals verfügen über spezielle Tasten (wie Insert), dieKonventionSenden Sie Zeichen, die einer ähnlich benannten Steuersequenz entsprechen (die gesendet würdeZudas Terminal). Das liegt daran, dass ursprünglichLokalbetriebwar etwas, das die Leute benutzten.

Jedes ANSI-kompatible Terminal kann ausgeführt werden inlokalModus (wobei einige, die diese Funktion kaputt gemacht haben, als irrelevant außer Acht gelassen werden). Das nennt manSende-/Empfangsmodus( SRM) im Standard. Bei älteren Terminals müssen Sie möglicherweise einen anderen Modus berücksichtigen fürEinfügen. Imterminfo(5)Manpage, die erwähnt wird:

   move_insert_mode          mir    mi   safe to move while
                                         in insert mode

Abgesehen von der Konvention stimmen nicht alle Terminals mit den Sondertasten überein. Beispielsweise

  • mitrxvt, die Einfügen-Taste sendet möglicherweise escape[2~, während die Einfügen-ZeichenSteuerungssequenzist escape[@und (für mehrere Zeichen), Einfügemodus istescape[4m
  • geändertSondertasten (wie controlInsert) senden möglicherweise keine Zeichen, die mitbeliebigSteuersequenz. Mit xterm werden sie so organisiert, dass Verwechslungen mit vorhandenen Steuersequenzen vermieden werden, z. B. durch Hinzufügen von Parametern an Stellen, an denen einfache Programme sie ignorieren.

Weiterführende Literatur:

verwandte Informationen