Como salvar o conteúdo do Terminal GNOME com códigos de escape ANSI?

9

Os terminais VT100 têm uma maneira relativamente simples de salvar o conteúdo do terminal com códigos de escape em um arquivo usando Meta- p:

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

Eu olhei em volta um pouco e não consigo encontrar uma solução para isso funcionar no terminal GNOME padrão + XTerm + Bash.

Eu não quero apenas uma imagem com o conteúdo da janela.

Parece que o Terminal GNOME pode eventualmente obter uma correção para isso , mas não há informações sobre em qual versão ele será incluído e já faz quase três anos desde a última atualização ...

l0b0
fonte
Infelizmente, simplesmente não há como fazer isso. Veja: askubuntu.com/q/20739
Zaz
@ Josh não acho que seja a mesma pergunta. Não quero salvar toda a saída de um comando, mas toda a saída visível na janela do Terminal.
precisa saber é o seguinte

Respostas:

3

Infelizmente, l0b0 a resposta imediata é: Isso não é possível.

Na minha outra resposta, listei como usar o script para fazer isso, embora haja algumas diferenças, como você observou. A outra maneira é compilar a fonte ou usar uma versão instável.

Tarball da fonte terminal do Gnome

A versão no Raring é 3.6.1, para que você possa ver esta fonte. Dentro do Terminal-window.c na linha 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

Opções:

  1. Adicione #define ENABLE_SAVE abaixo disso.
  2. Modifique a versão para uma instável.
  3. Baixe uma versão instável do .DEB.

Espero que isto ajude.

LimpingNinja
fonte
Isso salva as chaves de escape ANSI ou apenas o texto?
l0b0
Eu verifiquei e vte_terminal_write_contents () não parece escrever códigos ANSI. No momento, minha resposta original é a mais precisa "O que você deseja não é possível (fora da caixa)". Se você tem mente de desenvolvedor, provavelmente poderá reescrever a função em termainal-window.c 3340 save_contents_dialog_on_response (...) Na linha 3372, você vê onde é feita a chamada para vte_terminal_write_contents. Não vou mais longe, pois está além do escopo deste site. Outros terminais oferecem isso a um custo muito menor do que recompilar seus utilitários.
LimpingNinja
+100. Se possível, eu o dividiria entre essa e sua outra resposta, já que ambas fazem 90% do que eu quero.
L0b0
3

Infelizmente, l0b0 a resposta imediata é: Isso não é possível.

Há duas maneiras de tentar corrigir isso, executando o script o tempo todo no seu terminal e registrando toda a saída. Abra o gnome-terminal, vá em Edit -> Profile Preferences , depois na guia Title and Command e, para seu comando personalizado, use o seguinte:

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

Verifique se 'sessionlogs' existe em $ HOME.

A outra maneira foi removida e adicionada como uma segunda resposta a esta pergunta.

LimpingNinja
fonte
De fato, corrigimos a resposta para corrigir o erro de digitação que ocorreu durante uma repastação. Também estou separando a opção 'recompilar', pois concordo que as duas não são relacionadas.
LimpingNinja
less -rna verdade mostra a saída impressa - Obrigado!
L0b0
0

Você pode executar seus shells via script (1) para obter todas as entradas e saídas do terminal armazenadas em um arquivo, incluindo escapamentos do terminal.

Geirha
fonte
1
Esse é um caso de uso diferente. scriptnão pode ser usado para salvar o conteúdo após o fato e simplesmente não salva a saída visível .
L0b0
1
Você tem certeza? É verdade que não é possível salvar scripts após o fato, mas quando testei isso e produzi algumas permissões de arquivo, llele salvou toda a saída.
Matt
0

Há um pacote chamado tela - um multiplexador de terminal com emulação de terminal VT100 / ANSI.

De acordo com a página de manual da tela no site Ubuntu Manuals , a tela afirma ser

um gerenciador de janelas em tela cheia que multiplexa um terminal físico entre vários processos (geralmente shells interativos). Cada terminal virtual fornece as funções de um terminal DEC VT100 e, além disso, várias funções de controle da ISO 6429 (ECMA 48, ANSI X3). 64) e normas ISO 2022 (por exemplo, inserir / excluir linha e suporte para vários conjuntos de caracteres) um multiplexador de terminal com emulação de terminal VT100 / ANSI '.

e ao executar a tela :

Ctrl ah (cópia impressa) Escreva uma cópia impressa da janela atual no arquivo "hardcopy.n".

Eu tentei no terminal GNOME, executando screene digitandoCtrl ah

tela de execução e digitação Ctrl Alt h

Esta é a saída do meu arquivo hardcopy.1 quando aberto no Gedit:

hardcopy.1 aberto no Gedit

Você pode encontrar a tela no repositório de software principal / raring do Ubuntu 13.04.

Não está instalado por padrão.


fonte
-1

Hum, isso não copiará os códigos de escape, mas apenas para pegar o texto, você pode ir para o menu Editar -> Selecionar tudo e pressionar CtrlShiftCe (i) colar a área de transferência em um editor ou (ii) digitar cat > filenamee pressionar CtrlShiftV.

janeiro
fonte
Este é um caso de uso diferente - como explicitamente declarado, desejo incluir os códigos de escape ANSI.
L0b0
-1

man history procure expansão do histórico para caracteres escapados. Eu acredito que history pode fazer o que você está pedindo.

j0h
fonte
Não encontrei nada relevante na manpágina. Por favor seja mais específico.
L0b0