Zurücksetzen des Cursorstils im virtuellen Ubuntu-Terminal

Zurücksetzen des Cursorstils im virtuellen Ubuntu-Terminal

Ich verwende Ubuntu 14.04 und verwende eines der virtuellen Terminals (TTY[1-6], erreichbar über Strg-Alt-F[1-6]); ich möchte das Aussehen meines Cursors dauerhaft von der scheinbaren Standardeinstellung, einer blinkenden Unterstreichung, in ein blinkendes Kästchen ändern. Ich kann es vorübergehend ändern, aber es wird ständig zurückgesetzt, wenn bestimmte Anwendungen ausgeführt werden.

Ursprünglich war der Cursorstil in den TTY-Sitzungen ein blinkender Unterstrich. Ich fand heraus, dass ich ihn mit dem folgenden Befehl in ein blinkendes Kästchen ändern konnte:

printf '\e[?8c'

Dies ändert den Cursor im Terminal und wird in Programmen wie Emacs oder Elinks angezeigt. Daher habe ich den obigen Befehl in meine .bashrc eingefügt.

Allerdings scheinen bestimmte Anwendungen den Cursorstil auf eine blinkende Unterstreichung zurückzusetzen, und dies bleibt auch nach dem Beenden dieser Anwendungen bestehen. Ich kann den Cursorstil auf ein blinkendes Kästchen zurücksetzen, indem ich den obigen Befehl erneut ausgebe, .bashrc als Quelle verwende oder mich ab- und wieder anmelde.

Betrachten Sie beispielsweise, wie die folgenden drei Anwendungen (tmux, emacs, elinks) den Cursorstil beeinflussen:

  • tmux:Der Cursorstil wird sofort auf eine blinkende Unterstreichung gesetzt. Dieser Stil wird in allen innerhalb von tmux ausgeführten Anwendungen beibehalten und die Änderung bleibt auch nach dem Beenden von tmux bestehen. Der obige printf-Befehl hat in tmux keine Auswirkung.
  • emacs:der Cursorstil ist der Stil, der aktiv war, als ich ihn ausgeführt habe, und dann ändert sich der Stil in eine blinkende Unterstreichung, wenn ich Emacs beende.
  • E-Links:der Cursorstil ist der Stil, der aktiv war, als ich es ausgeführt habe, und der Cursorstil ändert sich NICHT, wenn ich elinks beende.

Ich sollte beachten, dass ich Emacs-Einstellungen habe, um den Cursorstil (innerhalb von Emacs) auf ein Feld festzulegen, und dass ich, während ich nach einer Einstellung zum Festlegen des Cursorstils innerhalb von tmux gesucht habe, nichts weiter als einen Eintrag in der Manpage von tmux finden konnte, der besagt:

tmux understands some extensions to terminfo(5):

 [...]

 Cs, Csr
         Change the cursor style.  If set, a sequence such as this may be used to change the cursor to an underline:

               $ printf '\033[4 q'

         If Csr is set, it will be used to reset the cursor style instead of Cs.

Leider verstehe ich nicht, wie man „Cs einstellt“, und wie oben erwähnt habe ich vergeblich versucht, den Befehl printf einzugeben, um den Cursorstil in tmux einzustellen.

Ein weiterer interessanter Hinweis ist, dass das Problem mit der Änderung des Cursorstils nicht auftritt, wenn ein X-Terminalemulator wie XFCE4 Terminal ausgeführt wird. Dies scheint nur bei den TTYs aufzutreten.

Ich kann anscheinend keine Informationen über andere Personen finden, die dieses Problem hatten, oder Einstellungen in den genannten Anwendungen, die das Problem verursachen könnten. Was verursacht dieses Problem und wie kann ich es lösen, sodass mein Cursor immer einen blinkenden Blockstil hat?

Antwort1

Die Terminalfunktionen sind nicht bei allen Terminals verfügbar und können je nach tmux-Version unterschiedlich sein. Ich sehe die Beschreibung in tmux 1.6 unter Debian 7. Ubuntu 14.04 ist etwas älter und hat tmux 1.8 (dieselbe Beschreibung).

Das in der Manualpage angegebene Beispiel sieht wie folgt aus DECSCUSR: Dies wird unterstützt, indem xtermmit begonnen wirdPatch Nr. 252im Jahr 2009. SieheXTerm-Steuersequenzen:

CSI Ps SP q
          Set cursor style (DECSCUSR, VT520).
            Ps = 0  -> blinking block.
            Ps = 1  -> blinking block (default).
            Ps = 2  -> steady block.
            Ps = 3  -> blinking underline.
            Ps = 4  -> steady underline.
            Ps = 5  -> blinking bar (xterm).
            Ps = 6  -> steady bar (xterm).

Um sie zu verwenden, würden Sie einen modifizierten Terminfo-Eintrag mit dem Tic von ncurses erstellen, z. B.

infocmp -x >foo
vi foo
tic -x foo

Hinzufügen dieser Zeile (mit einem führenden Tabulator, wie bei den anderen Funktionen):

Cs=\E[%p\sq, Csr=\E[0\sq,

Beim Überprüfen der Quelle für tmux 2.1 werden diese Terminfo-Funktionen jedoch nicht mehr gelesen und es wurde geändert, um Csund Crzum Festlegen der Farbe zu verwenden (in älteren Versionen erfolgte dies Ccmit und Cr). Die neuere Version verfügt über eine integrierte Logik zum Erkennen DECSCUSRohne Terminfo-Erweiterung.

VTE-basierte Terminals (wie etwa das XFCE-Terminal) können (je nach Version) implementieren DECSCUSR, aber die Linux-Konsole tut dies wahrscheinlich nicht, da sie nur eine Teilmenge von VT220 implementiert, während DECSCUSRes von einem VT520Terminal stammt (einer Obermenge von VT220).

Sie werden Unterschiede zu anderen Anwendungen wie Emacs feststellen, da DECSCUSRes Überschneidungen mit anderen Cursor-Stil-Funktionen gibt, wie etwa der blinkenden Cursor-Funktion, dem Setzen oder Zurücksetzen mit den cvvisund cnormFähigkeiten von Terminfo für xterm:

CSI ? Pm h
          DEC Private Mode Set (DECSET).
            Ps = 1 2  -> Start Blinking Cursor (att610).

Sie möchten jedoch anscheinend das Erscheinungsbild des Cursors in der Linux-Konsole (auch virtuelle Konsole genannt) ändern. DECSCUSRhat dort keine Auswirkungen.

So machen Sie Ihren Cursor zu einem blinkenden BlockalleGleichzeitig müssten Sie die Cursor-Darstellungsfunktionen in den von Ihnen verwendeten Terminalbeschreibungen ändern. Diese sind civis(den Cursor unsichtbar machen), cnorm(dem Cursor ein „normales“ Aussehen geben) und cvvis(den Cursor deutlich sichtbar machen):

  • Wenn Sie beides \e[?8cim Eintrag „Linux“ vornehmen, weisen Sie Programme wie Emacs, die diesen Eintrag verwenden, an, Ihren blinkenden Box-Cursor zu verwenden.
  • tmux liest auch den Terminaleintrag und betrachtet dabei cnormund civis.
  • elinks hingegen ist fest codiert und ignoriert die Terminaldatenbank. Beim schnellen Durchlesen des Quellcodes sehe ich keine Escape-Sequenzen, die das Terminal zurücksetzen oder das Erscheinungsbild des Cursors ändern.

Da Sie verwenden tmux, müssen Sie möglicherweise auch die ändern xterm(damit Anwendungen, die darin ausgeführt werden, tmuxdiesen Cursorstil verwenden). Aber testen Sie zuerst ohne diese: Wenn Siemuss, können Sie wahrscheinlich \e[?8cmit der vorhandenen cnormZeichenfolge kombinieren, da xtermignoriert wird \e[?8c.

verwandte Informationen