Evitar que la pantalla gnu cambie el tamaño de la pantalla

21

Cada vez que inicio la pantalla (pantalla -A) o intento conectarme a una sesión de pantalla que ya se está ejecutando (pantalla -Ax), mi terminal cambia de tamaño a 80 columnas. Quiero evitar que la pantalla cambie el tamaño de mi terminal.

Estoy usando iTerm en Snow Leopard y mis sesiones de pantalla están en una máquina centos (uso bash como mi shell).

ala negro
fuente

Respuestas:

31

Intente agregar esto (de /etc/screenrc) a su ~/.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'

Es posible que deba cambiar el "xterm" para que coincida con su $TERM.

La termcapinfolínea se establece is(cadena de inicialización) para cualquier terminal con un nombre que comience con "xterm" en una secuencia de códigos de escape. \Erepresenta escapey los códigos son los siguientes:

\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 línea reemplazada tenía estos códigos:

\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

(fuente: Secuencias de control XTerm )

Pausado hasta nuevo aviso.
fuente
¡Gracias! agregó esta respuesta a serverfault.com/questions/158508/…
Joshua D'Alton el
¿Te importaría decodificar la línea termcapinfo?
Huckle
2
@Huckle: agregué una explicación de los códigos de escape.
Pausado hasta nuevo aviso.
1

La explicación (y los equivalentes sugeridos) para la cadena de inicialización de xterm no son completamente precisos.

Comenzando con la cadena de la descripción del terminal de xterm:

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

tenemos

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

Pero DECSTRrestablece varias cosas que no se encuentran en el reemplazo:

  • la forma y apariencia del cursor
  • juegos de caracteres
  • otros modos de teclado relacionados con la aplicación / modos normales ( DECCKM, KAM, DECKPAM)
  • envolvente (y envolvente inverso)
  • modo de origen

Además, no borra la pantalla.

La razón para usar DECSTR( desde 1997 ) es mantener el tamaño de los capitulares lo suficientemente pequeño como para ajustarse al límite de 1024 bytes de termcap.

La configuración para screenes del paquete Debian; el informe de error mencionado en el comentario es Debian # 134198 - pantalla: tiene algún tipo de problema de emulación extraño más notorio con irssi y konsole , desde 2002. screenno reconoce esa secuencia, y por cierto, KDE konsole no implementa esa secuencia, como se ve en KDE # 134892 , mientras que al mismo tiempo sus desarrolladores declaran en KDE # 145977 que prefieren no usar un TERMvalor diferente al xterm. Dado que algunos usuarios pueden querer una descripción de terminal que coincida con las capacidades de konsole, eso es en ncurses como konsole, por ejemplo,

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

versus

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

Al eliminar la pantalla clara espuria, la parte relevante de la personalización de la pantalla es

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

así que lo que quedó fuera fue (aparte de DECCOLM) \E[4l.

El \E7y \E8en la cadena de inicialización guarda / restaura la posición del cursor al ajustar los márgenes de desplazamiento. Al igual que el modo de inserción, algunos usuarios notarían la ausencia de la función.

El objetivo de la personalización es suprimir el cambio DECCOLM(columna 80/132), y trabajar desde el corte de la pantalla y la personalización bastante antigua podría no funcionar tan bien como adaptarse desde una descripción de terminal escrita para el terminal.

Otras lecturas:

Thomas Dickey
fuente