¿Cómo guardar el contenido del terminal GNOME con códigos de escape ANSI?


9

Terminales VT100 tienen una forma relativamente sencilla de guardar los contenidos terminales con códigos de escape a un archivo usando Meta- p:

XTerm.VT100.printAttributes: 2
XTerm.VT100.printerCommand: cat - > file
XTerm.VT100.translations: #override Meta <KeyPress> P: print() \n

He mirado un poco a mi alrededor y no puedo encontrar una solución para que esto funcione en el Terminal GNOME predeterminado + XTerm + Bash.

Yo no quiero sólo una imagen con el contenido de la ventana.

Parece que el Terminal GNOME podría eventualmente solucionarlo , pero no hay información sobre en qué versión se incluirá, y han pasado casi tres años desde la última actualización ...


Desafortunadamente, simplemente no hay forma de hacer esto. Ver: askubuntu.com/q/20739
Zaz

@ Josh, no creo que sea la misma pregunta. No quiero guardar toda la salida de un comando, sino toda la salida visible en la ventana Terminal.
l0b0

Respuestas:


3

Desafortunadamente, l0b0 la respuesta inmediata es: Esto no es posible.

En mi otra respuesta, enumeré cómo usar el script para hacer esto, aunque hay algunas diferencias como notó. La otra forma es compilar la fuente o usar una versión inestable.

Terminal Gnome Fuente Tarball

La versión en Raring es 3.6.1, por lo que puede ver esta fuente. Dentro de Terminal-window.c en la línea 115:

/*
 * We don't want to enable content saving until vte supports it async.
 * So we disable this code for stable versions.
 */

#include "terminal-version.h"

#if (TERMINAL_MINOR_VERSION & 1) != 0
#define ENABLE_SAVE
#else
#undef ENABLE_SAVE
#endif
#endif

Opciones:

  1. Agregue #define ENABLE_SAVE debajo de esto.
  2. Modifique la versión a una inestable.
  3. Descargue una versión inestable de .DEB.

Espero que esto ayude.


¿Esto guarda las claves de escape ANSI, o solo el texto?
l0b0

Verifiqué y vte_terminal_write_contents () no parece escribir códigos ANSI, por el momento, mi respuesta original es la más precisa "Lo que quieres no es posible (listo para usar)". Si tiene una mentalidad de desarrollador, probablemente pueda reescribir la función en termainal-window.c 3340 save_contents_dialog_on_response (...) En la línea 3372 verá dónde se realiza la llamada a vte_terminal_write_contents. No voy a ir más allá ya que está más allá del alcance de este sitio. Otros terminales ofrecen esto a un costo mucho menor que recompilar sus utilidades.
LimpingNinja

+100. Si es posible, lo dividiría entre esta y su otra respuesta, ya que ambos hacen el 90% de lo que quiero.
l0b0

3

Desafortunadamente, l0b0 la respuesta inmediata es: Esto no es posible.

Hay dos formas de intentar corregir esto, ejecutando script en todo momento en su terminal y registrando todos los resultados. Abra gnome-terminal, vaya a Editar -> Preferencias de perfil , luego la pestaña Título y comando y para su comando personalizado use esto:

bash -l -c 'script -q -c bash $HOME/sessionlogs/$BASHPID.sessionlog.$(date +%Y%m%d-%H%M).txt'

Asegúrese de que existen 'registros de sesión' en $ HOME.

La otra forma se ha eliminado y agregado como segunda respuesta a esta pregunta.


De hecho, corrigió la respuesta para corregir el error tipográfico que ocurrió durante una repetición. También estoy separando la opción 'recompilar', ya que estoy de acuerdo en que los dos no están relacionados.
LimpingNinja

less -ren realidad muestra la salida como impresa - ¡Gracias!
l0b0

0

Puede ejecutar sus shells a través del script (1) para obtener todas las entradas y salidas del terminal almacenadas en un archivo, incluidos los escapes de terminal.


1
Ese es un caso de uso diferente. scriptno se puede usar para guardar contenido después del hecho y no solo guarda la salida visible .
l0b0

1
¿Estás seguro? Es cierto que no puede guardar secuencias de comandos después del hecho, pero cuando probé esto y obtuve algunos permisos de archivo ll, guardé toda la salida.
Matt

0

Hay un paquete que se llama pantalla : un multiplexor de terminal con emulación de terminal VT100 / ANSI.

De acuerdo con la página de manual de screen en el sitio web de Ubuntu Manuals , screen afirma ser

un administrador de ventanas de pantalla completa que multiplexa un terminal físico entre varios procesos (típicamente shells interactivos). Cada terminal virtual proporciona las funciones de un terminal DEC VT100 y, además, varias funciones de control de la ISO 6429 (ECMA 48, ANSI X3). 64) y las normas ISO 2022 (por ejemplo, línea de inserción / eliminación y soporte para conjuntos de caracteres múltiples) un multiplexor de terminal con emulación de terminal VT100 / ANSI '.

y cuando se ejecuta la pantalla :

Ctrl ah (copia impresa) Escriba una copia impresa de la ventana actual en el archivo "hardcopy.n".

Lo intenté en la Terminal de GNOME, corriendo screeny escribiendoCtrl ah

ejecutar la pantalla y escribir Ctrl Alt h

Este es el resultado de mi archivo hardcopy.1 cuando se abre en Gedit:

hardcopy.1 abierto en Gedit

Puede encontrar la pantalla en el repositorio de software principal / principal de Ubuntu 13.04.

No está instalado por defecto.


-1

Hm, esto no copiará los códigos de escape, pero solo para tomar el texto, puede ir al menú Editar -> Seleccionar todo, luego presionar CtrlShiftCy (i) pegar el portapapeles en un editor o (ii) escribir cat > filenamey presionar CtrlShiftV.


Este es un caso de uso diferente: como se indicó explícitamente, quiero incluir los códigos de escape ANSI.
l0b0

-1

man history busca la expansión de la historia para los personajes escapados. Creo que history puede hacer lo que pides.


No pude encontrar nada relevante en la manpágina. Por favor sé más específico.
l0b0
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.