Zurücksetzen des virtuellen Cursor-Typs von Ubuntu

1071
llzrk

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 Erscheinungsbild meines Cursors dauerhaft von der scheinbaren Vorgabe, einer blinkenden Unterstreichung, in ein blinkendes Feld ändern. Ich kann es vorübergehend ändern, aber es wird ständig zurückgesetzt, wenn bestimmte Anwendungen ausgeführt werden.

Anfangs war der Cursor-Stil in den TTY-Sitzungen blinkend unterstrichen. Ich fand, dass ich es mit dem Befehl in ein blinkendes Feld ändern konnte:

printf '\e[?8c' 

Dies ändert den Cursor im Terminal und spiegelt sich in Programmen wie Emacs oder Elinks wider. Also habe ich den obigen Befehl in meine .bashrc gestellt.

Bestimmte Anwendungen scheinen jedoch den Cursor-Stil in eine blinkende Unterstreichung umzuwandeln, und dies bleibt auch nach dem Beenden dieser Anwendungen bestehen. Ich kann den Cursor-Stil auf ein blinkendes Feld zurücksetzen, indem Sie den obigen Befehl erneut ausgeben, .bashrc aufrufen oder abmelden und wieder anmelden.

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

  • tmux: Der Cursor-Stil wird sofort auf eine blinkende Unterstreichung gesetzt. Dieser Stil wird in allen Anwendungen beibehalten, die innerhalb von tmux ausgeführt werden, und die Änderung bleibt nach dem Beenden von tmux bestehen. Der obige Befehl printf hat in tmux keine Auswirkung.
  • emacs: Der Cursor-Stil ist derjenige, der beim Ausführen des Stils aktiv war, und der Stil ändert sich beim Verlassen von emacs in eine blinkende Unterstreichung.
  • elinks: Der Cursor-Stil ist derjenige, der beim Ausführen des Styles aktiv war, und der Cursor-Stil wird beim Verlassen von Elinks NICHT geändert.

Ich sollte beachten, dass ich Emacs-Einstellungen habe, um den Cursor-Stil (innerhalb von Emacs) auf eine Box zu setzen, und obwohl ich nach einer Einstellung zum Einstellen des Cursor-Stils innerhalb von tmux gesucht habe, konnte ich nichts außer einem Eintrag in der Manpage von tmux finden Zustände:

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" setzt, und wie bereits erwähnt, habe ich versucht, den Befehl printf auszuführen, um den Cursorstil in tmux ohne Erfolg zu setzen.

Ein weiterer interessanter Hinweis ist, dass das Problem mit der Änderung des Cursor-Stils beim Ausführen eines X-Terminal-Emulators wie XFCE4-Terminals nicht auftritt. Dies scheint nur bei den TTYs der Fall zu sein.

Ich kann anscheinend keine Informationen über andere Personen finden, bei denen dieses Problem aufgetreten ist, oder Einstellungen in den genannten Anwendungen, die das Problem verursachen könnten. Was verursacht dieses Problem und wie kann ich es beheben, so dass ich ständig einen blinkenden Blockcursor-Stil habe?

1

1 Antwort auf die Frage

1
Thomas Dickey

Die Terminalfunktionen sind nicht bei allen Terminals verfügbar und können sich bei den Versionen von tmux unterscheiden. Ich sehe die Beschreibung, die in tmux 1.6 unter Debian 7 zitiert wird. Ubuntu 14.04 ist ein wenig alt und hat tmux 1.8 (gleiche Beschreibung).

Das Beispiel in der Handbuchseite gegeben aussieht DECSCUSR, die durch unterstützt wird, xtermbeginnend mit Patch # 252 im Jahr 2009. Siehe XTerm- 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 vornehmen, z.

infocmp -x >foo vi foo tic -x foo 

Hinzufügen dieser Zeile (mit einer führenden Registerkarte, 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 die Verwendung Csund CrEinstellung der Farbe wurde geändert (in älteren Versionen mithilfe von Ccund Cr). Die neuere Version verfügt über eine integrierte Logik zum Erkennen DECSCUSRohne eine terminfo-Erweiterung.

VTE-basierte Terminals (wie beispielsweise XFCE-Terminals) können (je nach Version) implementieren DECSCUSR, dies ist jedoch für die Linux-Konsole unwahrscheinlich, da sie nur eine Teilmenge des VT220 implementiert, während sie DECSCUSRvon einem VT520Terminal stammt (eine Obermenge von VT220).

Sie werden Unterschiede zu anderen Anwendungen wie z. B. emacs feststellen, da DECSCUSRsich andere Cursor-Features wie die blinkende Cursor-Funktion überlappen, die mit den Funktionen cvvisund cnormvon terminfo gesetzt oder zurückgesetzt werden xterm:

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

Sie möchten jedoch das Aussehen des Cursors in der Linux-Konsole (auch als virtuelle Konsole bezeichnet) ändern. DECSCUSRhat dort keine Wirkung.

Um den Cursor ein blinkender Block machen alle Zeit, würden Sie die Cursor-Aussehen Fähigkeiten in der Anschlussbeschreibung ändern müssen (s), die Sie verwenden. Dies sind civis(den Cursor unsichtbar machen), cnorm(den Cursor "normal" erscheinen lassen) und cvvis(den Cursor sehr sichtbar machen):

  • Wenn Sie beide \e[?8cEinträge im Eintrag "linux" vornehmen, werden Programme wie emacs mit diesem Eintrag dazu aufgefordert, Ihren blinkenden Box-Cursor zu verwenden.
  • tmux liest auch den Terminaleintrag und schaut auf cnormund civis.
  • elinks dagegen sind hartcodiert und ignorieren die Terminaldatenbank. Beim schnellen Lesen der Quelle sehe ich keine Escape-Sequenzen, die das Terminal zurücksetzen oder das Aussehen des Cursors ändern.

Da Sie diese Option verwenden tmux, müssen Sie möglicherweise auch die Einstellung ändern xterm(damit die Anwendungen, die in diesem Programm ausgeführt tmuxwerden, diesen Cursor-Stil verwenden). Aber testen Sie das erst einmal: Wenn Sie müssen, können Sie die \e[?8cmit der vorhandenen cnormZeichenfolge kombinieren, da xtermignoriert wird \e[?8c.

Vielen Dank für Ihre Antwort. Ich habe versucht, den Terminfo-Eintrag mit Tic zu ändern, wie Sie es gezeigt haben, aber es scheint keine Wirkung zu haben. Gibt es noch etwas, das ich ausprobieren kann? llzrk vor 8 Jahren 0
Danke nochmal. Ihr aktualisierter Kommentar zusätzlich zu den Antworten auf diese Frage (http://unix.stackexchange.com/questions/3759/how-to-stop-cursor-from-blinking) führt mich zur Lösung: tmux verweist auf den Cnorm-Eintrag in Infoterm, um den Cursor-Stil festzulegen, so gab ich den Befehl "tput cnorm '\ e [? 8c'" aus, um den Cnorm-Eintrag festzulegen, und "tput cvvis '\ e [? 8c'", um den cvvis-Eintrag festzulegen ( für ein gutes Maß). Nachdem Sie sich wieder angemeldet und tmux gestartet haben, scheint der Fix zu funktionieren! llzrk vor 8 Jahren 0
Kein Problem: Ich habe angefangen zu denken, dass Sie versuchen, DECSCUSR zum Laufen zu bringen, und dann wurde mir klar, dass das Problem Emacs war. Thomas Dickey vor 8 Jahren 0