Come salvare i contenuti del Terminale GNOME con i codici di escape ANSI?


9

I terminali VT100 hanno un modo relativamente semplice per salvare il contenuto del terminale con codici di escape in un file usando Meta- p:

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

Mi sono guardato un po 'in giro, e non riesco a trovare una soluzione che funzioni nel Terminale GNOME predefinito + XTerm + Bash.

Io non voglio solo un'immagine con il contenuto della finestra.

Sembra che GNOME Terminal potrebbe eventualmente ottenere una soluzione per questo , ma non ci sono informazioni su quale versione verrà inclusa ed è passato quasi tre anni dall'ultimo aggiornamento ...


Sfortunatamente, semplicemente non c'è modo di farlo. Vedi: askubuntu.com/q/20739
Zaz

@Josh Non penso che sia la stessa domanda. Non voglio salvare tutto l'output da un comando, ma piuttosto tutto l'output visibile nella finestra Terminale.
l0b0

Risposte:


3

Sfortunatamente, l0b0 la risposta è pronta: questo non è possibile.

Nella mia altra risposta, ho elencato come usare lo script per farlo, anche se ci sono alcune differenze come hai notato. L'altro modo è compilare l'origine o usare una versione instabile.

Tarball sorgente terminale Gnome

La versione in Raring è 3.6.1, quindi puoi guardare questa fonte. All'interno di Terminal-window.c sulla linea 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

Opzioni:

  1. Aggiungi #define ENABLE_SAVE in questo.
  2. Modifica la versione in instabile.
  3. Scarica una versione instabile di .DEB.

Spero che sia di aiuto.


Questo salva le chiavi di escape ANSI o solo il testo?
l0b0

Ho verificato e vte_terminal_write_contents () non sembra scrivere i codici ANSI, al momento, la mia risposta originale è il più preciso "Quello che vuoi non è possibile (fuori dalla scatola)." Se sei interessato allo sviluppatore, puoi probabilmente riscrivere la funzione in termainal-window.c 3340 save_contents_dialog_on_response (...) Alla linea 3372 circa vedi dove viene effettuata la chiamata a vte_terminal_write_contents. Non ho intenzione di andare oltre perché va oltre lo scopo di questo sito. Altri terminali offrono questo a costi molto inferiori rispetto alla ricompilazione delle tue utility.
LimpingNinja

+100. Se possibile, lo dividerei tra questa e l'altra tua risposta, poiché entrambi fanno il 90% di ciò che voglio.
l0b0

3

Sfortunatamente, l0b0 la risposta è pronta: questo non è possibile.

Esistono due modi per provare a correggere questo, eseguendo lo script in qualsiasi momento sul terminale e registrando tutto l'output. Apri gnome-terminal, vai su Modifica -> Preferenze profilo , quindi sulla scheda Titolo e comando e per il tuo comando personalizzato usa questo:

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

Assicurati che "sessionlogs" esista sotto $ HOME.

L'altro modo è stato rimosso e aggiunto come seconda risposta a questa domanda.


In effetti, ho corretto la risposta per correggere l'errore di battitura che si è verificato durante un repaste. Sto separando anche l'opzione "ricompila", poiché concordo che i due non sono correlati.
LimpingNinja,

less -rmostra effettivamente l'output come stampato - Grazie!
l0b0

0

È possibile eseguire le shell tramite script (1) per ottenere tutti gli input e output del terminale memorizzati in un file, inclusi gli escape del terminale.


1
È un caso d'uso diverso. scriptnon può essere utilizzato per salvare il contenuto dopo il fatto e non salva semplicemente l' output visibile .
l0b0

1
Sei sicuro? È vero che non è possibile salvare gli script dopo il fatto, ma quando l'ho provato e ho generato alcune autorizzazioni per i file con llesso ho salvato tutto l'output.
Matt

0

C'è un pacchetto che si chiama schermo : un multiplexor terminale con emulazione terminale VT100 / ANSI.

Secondo la manpage dello schermo sul sito Web dei manuali di Ubuntu , lo schermo afferma di esserlo

un gestore di finestre a schermo intero che multiplexa un terminale fisico tra diversi processi (in genere shell interattive). Ogni terminale virtuale fornisce le funzioni di un terminale DEC VT100 e, inoltre, diverse funzioni di controllo ISO 6429 (ECMA 48, ANSI X3. 64) e ISO 2022 (es. Inserire / cancellare la riga e supporto per set di caratteri multipli) un terminale multiplexor con emulazione terminale VT100 / ANSI '.

e quando si esegue la schermata :

Ctrl ah (copia cartacea) Scrivi una copia cartacea della finestra corrente nel file "hardcopy.n".

Ho provato nel Terminale GNOME, correndo screene digitandoCtrl ah

schermata corrente e digitando Ctrl Alt h

Questo è l'output del mio file hardcopy.1 quando viene aperto in Gedit:

hardcopy.1 aperto in Gedit

È possibile trovare lo schermo nel repository software raring / main di Ubuntu 13.04.

Non è installato per impostazione predefinita.


-1

Hm, questo non copierà i codici di escape, ma solo per afferrare il testo, puoi andare al menu Modifica -> Seleziona tutto, quindi premere CtrlShiftCe (i) incollare gli appunti in un editor o (ii) digitare cat > filenamee premere CtrlShiftV.


Questo è un caso d'uso diverso - Come affermato esplicitamente, voglio includere i codici di escape ANSI.
l0b0

-1

man history cerca l'espansione della storia per i personaggi fuggiti. Credo che history possa fare quello che stai chiedendo.


Non ho trovato nulla di rilevante nella manpagina. Sii più specifico.
l0b0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.