Empêcher l'écran GNU de redimensionner la taille d'affichage

21

Chaque fois que je démarre l'écran (écran -A) ou que j'essaie de me connecter à une session d'écran déjà en cours (écran -Ax), mon terminal est redimensionné à 80 colonnes. Je souhaite empêcher l'écran de redimensionner mon terminal.

J'utilise iTerm sur Snow Leopard et mes sessions d'écran sont sur une machine centos (j'utilise bash comme shell).

aile noire
la source

Réponses:

31

Essayez d'ajouter ceci (de /etc/screenrc) à votre ~/.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'

Vous devrez peut-être modifier le "xterm" pour correspondre à votre $TERM.

La termcapinfoligne définit is(chaîne d'initialisation) pour tout terminal dont le nom commence par "xterm" une séquence de codes d'échappement. \Ereprésente escapeet les codes sont les suivants:

\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

La ligne remplacée avait ces 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

(source: séquences de contrôle XTerm )

En pause jusqu'à nouvel ordre.
la source
Merci! a ajouté cette réponse à serverfault.com/questions/158508/…
Joshua D'Alton
Pourriez-vous décoder la ligne termcapinfo?
Huckle
2
@Huckle: J'ai ajouté une explication des codes d'échappement.
pause jusqu'à nouvel ordre.
1

L'explication (et les équivalents suggérés) de la chaîne d'initialisation xterm ne sont pas complètement précises.

En commençant par la chaîne de la description du terminal de xterm:

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

on a

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).

Mais DECSTRréinitialise plusieurs éléments introuvables dans le remplacement:

  • la forme et l'apparence du curseur
  • jeux de caractères
  • d' autres modes de clavier liés aux modes application / normaux ( DECCKM, KAM, DECKPAM)
  • wraparound (et reverse wraparound)
  • mode d'origine

De plus, cela n'efface pas l'écran.

La raison de l'utilisation DECSTR( depuis 1997 ) est de conserver des tailles de capuchon suffisamment petites pour tenir dans la limite de 1024 octets du termcap.

Le paramètre pour screenvient du paquet Debian; le rapport de bogue mentionné dans le commentaire est Debian # 134198 - écran: a une sorte de problème d'émulation étrange le plus notable avec irssi et konsole , de 2002. screenne reconnaît pas cette séquence, et accessoirement, KDE konsole ne met pas en œuvre cette séquence, comme on le voit dans KDE # 134892 , tandis que dans le même temps ses développeurs déclarent dans KDE # 145977 qu'ils préfèrent ne pas utiliser une TERMvaleur différente de xterm. Étant donné que certains utilisateurs peuvent vouloir une description de terminal qui correspond aux capacités de konsole, c'est dans ncurses comme konsole, par exemple,

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

contre

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

Suppression de l'écran clair parasite, la partie pertinente de la personnalisation de l'écran est

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

donc ce qui a été laissé de côté était (à part DECCOLM) \E[4l.

Le \E7et \E8dans la chaîne d'initialisation enregistre / restaure la position du curseur lors du réglage des marges de défilement. Tout comme le mode d'insertion, certains utilisateurs remarqueraient l'absence de la fonctionnalité.

Le but de la personnalisation est de supprimer la DECCOLMcommutation (colonne 80/132), et le travail à partir de la personnalisation réduite et plutôt ancienne de l'écran peut ne pas fonctionner ainsi que l'adaptation à partir d'une description de terminal écrite pour le terminal.

Lectures complémentaires:

Thomas Dickey
la source