Verhindert, dass der Gnu-Bildschirm die Größe der Anzeige ändert

21

Jedes Mal, wenn ich den Bildschirm (Bildschirm -A) starte oder versuche, eine Verbindung zu einer bereits laufenden Bildschirmsitzung (Bildschirm -Ax) herzustellen, wird die Größe meines Terminals auf 80 Spalten geändert. Ich möchte verhindern, dass der Bildschirm die Größe meines Terminals ändert.

Ich verwende iTerm auf Snow Leopard und meine Bildschirmsitzungen finden auf einem Centos-Computer statt (ich verwende bash als Shell).

schwarzer Flügel
quelle

Antworten:

31

Versuchen Sie, dieses (von /etc/screenrc) zu Ihrem hinzuzufügen ~/.screenrc:

# Change the xterm initialization string from is2=\E[!p\E[?3;4l\E[4l\E>
# (This fixes the "Aborted because of window size change" konsole symptoms found
#  in bug #134198)
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

Möglicherweise müssen Sie das "xterm" ändern, um es an Ihr anzupassen $TERM.

Die termcapinfoZeile setzt is(Initialisierungszeichenfolge) für jedes Terminal, dessen Name mit "xterm" beginnt, eine Folge von Escape-Codes. \Estellt escapeund die Codes sind wie folgt:

\E[r       - set scrolling region to default (full size of window)
\E[m       - reset all resources (keyboard) to their initial values
\E[2J      - Erase in Display (ED). 2 -> Erase All.
\E[H       - set cursor position to default (1, 1)
\E[?7h     - DEC Private Mode Set. 7 -> Wraparound Mode
\E[?1;4;6l - DEC Private Mode Reset. 1 -> Normal Cursor Keys; 4  -> Jump (Fast) Scroll; 6 -> Normal Cursor Mode

Die ersetzte Zeile hatte folgende Codes:

\E[!p      - Soft terminal reset
\E[?3;4l   - DEC Private Mode Reset. 3 -> 80 Column Mode; 4 -> Jump (Fast) Scroll
\E[4l      - Reset Mode. 4 -> Replace Mode
\E>        - Normal keypad

(Quelle: XTerm Control Sequences )

Bis auf weiteres angehalten.
quelle
Vielen Dank! hat diese Antwort zu serverfault.com/questions/158508/… hinzugefügt
Joshua D'Alton
Würde es Ihnen etwas ausmachen, die termcapinfo-Zeile zu dekodieren?
Huckle
2
@Huckle: Ich habe eine Erklärung der Escape-Codes hinzugefügt.
Bis auf weiteres angehalten.
1

Die Erklärung (und die vorgeschlagenen Entsprechungen) für die xterm-Initialisierungszeichenfolge sind nicht vollständig korrekt.

Beginnen Sie mit der Zeichenfolge aus der Terminalbeschreibung von xterm:

is2=\E[!p\E[?3;4l\E[4l\E>

wir haben

CSI ! p   Soft terminal reset (DECSTR).
CSI ? Pm l
      DEC Private Mode Reset (DECRST).
...
        Ps = 3  -> 80 Column Mode (DECCOLM).
        Ps = 4  -> Jump (Fast) Scroll (DECSCLM).
CSI Pm l  Reset Mode (RM).
...
        Ps = 4  -> Replace Mode (IRM).
ESC >     Normal Keypad (DECKPNM).

Aber DECSTRsetzt einige Dinge zurück, die nicht in der Ersetzung gefunden wurden:

  • die Form und das Aussehen des Cursors
  • Zeichensätze
  • andere Tastatur - Modi im Zusammenhang mit application / Normalmoden ( DECCKM, KAM, DECKPAM)
  • Umlauf (und umgekehrter Umlauf)
  • Ursprungsmodus

Außerdem wird der Bildschirm nicht gelöscht.

Der Grund für die Verwendung von DECSTR( seit 1997 ) besteht darin, die Größe der TermCaps so klein zu halten , dass sie in das 1024-Byte-Limit von TermCaps passen.

Die Einstellung für screenstammt aus dem Debian-Paket; Der im Kommentar erwähnte Fehlerbericht ist Debian # 134198 - screen: hat ein seltsames Emulationsproblem, das bei irssi und konsole aus dem Jahr 2002 am auffälligsten ist.screen erkennt diese Sequenz nicht und KDE konsole implementiert diese Sequenz übrigens nicht, wie man sieht in KDE # 134892 , während die Entwickler in KDE # 145977 gleichzeitig angeben, dass sie lieber keinen anderen TERMWert als verwenden xterm. Da einige Benutzer möglicherweise eine Terminalbeschreibung wünschen, die den Funktionen von konsole entspricht, ist dies in ncurses wie konsolez.

is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8

gegen

is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l

Das Entfernen des unechten Clear-Screens ist der relevante Teil der Anpassung des Screens

is2=\E[r\E[m\E[?7h\E[?1;4;6l

Also, was weggelassen wurde, war (abgesehen von DECCOLM) \E[4l.

Mit \E7und \E8in der Initialisierungszeichenfolge wird die Cursorposition beim Anpassen der Bildlaufränder gespeichert / wiederhergestellt. Genau wie beim Einfügemodus bemerken einige Benutzer das Fehlen der Funktion.

Der DECCOLMZweck der Anpassung besteht darin, das Umschalten (80/132-Spalte) zu unterdrücken , und das Arbeiten mit Bildschirmausschnitten und ziemlich alten Anpassungen funktioniert möglicherweise nicht so gut wie das Anpassen einer für das Terminal geschriebenen Terminalbeschreibung.

Weitere Lektüre:

Thomas Dickey
quelle