2012-09-28 20 views
9

Supongamos que tengo una ventana de Emacs (es decir, una subdivisión de lo que Emacs llama un marco) ejecutando un buffer M-x ansi-term (por ejemplo, ejecutando zsh) con ~500 píxeles de ancho. A continuación, ejecuto varios comandos de shell y la salida se ajusta para que quepa en esos 500 píxeles.Terminal de ajuste de tamaño en Emacs

Digamos que ahora amplío esta ventana o el búfer (por ejemplo, 1000 píxeles), tal vez porque elimino otras ventanas en el marco, dando más espacio a mi ventana ansi-term.

¿Hay alguna forma de obtener una salida anterior en mi ventana ansi-term para cambiar el tamaño y aprovechar el nuevo tamaño de ventana? (es decir, hacer líneas más anchas y volver a envolverlas de acuerdo con el nuevo tamaño de ventana)?

+0

Mm .. Yo diría que no. Pruebe el shell M-x, se comporta como usted lo describió, lo intenté. – yPhil

Respuesta

4

No, por lo general, porque el programa que produjo la salida (puede tener) formateó para ajustarse al ancho de la pantalla que estaba vigente en el momento de la impresión y ya no se ejecuta cuando cambia el tamaño.

Sin embargo, si se está ejecutando, obtiene la opción de cambiar el tamaño (un SIGWINCH). Puede probar esto con, por ejemplo, el navegador links/elinks. Este es el verdadero "caso de uso" para el modo de terminal ANSI: programas que usan "maldiciones" o sistemas similares para mover el cursor.

Como señaló @ user2491, shell-mode maneja salidas basadas en texto (basadas en secuencias) con ajuste de palabras, con la penalidad de no poder ejecutar programas de tipo "curses". Está diseñado para tratar su sesión un poco más como un archivo de texto, y menos como una "terminal real".

+0

¡Gracias! ¿Le importaría elaborar más sobre cómo puedo usar 'SIGWINCH' para cambiar el tamaño de la ventana donde tengo' ansi-term' ejecutándose en Emacs? (Siempre tengo la terminal funcionando). –

+0

Esa es la responsabilidad del programa que se está ejecutando. El programa del terminal mismo (por ejemplo, bash) generalmente no se preocupará por tales cosas, pero p. 'mplayer',' alpine', 'links' tienen controladores para eso. Si, literalmente, quiere decir, cómo manejar SIGWINCH en sus propios programas, le recomiendo usar una biblioteca de nivel superior como 'ncurses', pero también podría ver, por ejemplo, esta respuesta: http://stackoverflow.com/a/3472019/475150 – BRFennPocock

+0

No estoy seguro de seguir. Tengo 'M-x ansi-term' (por ejemplo' zsh') ejecutándose en una de mis ventanas. Usted dijo que si la terminal aún se está ejecutando, aún hay esperanza de que la vuelva a envolver automáticamente usando 'SIGWINCH'. ¿Qué es 'SIGWINCH' exactamente? ¿Puedo enviar una señal al terminal de funcionamiento del búfer de Emacs para que vuelva a envolver el texto? –

Cuestiones relacionadas