Comment enregistrer le contenu du terminal GNOME avec des codes d'échappement ANSI?


9

Les terminaux VT100 ont un moyen relativement simple d' enregistrer le contenu du terminal avec des codes d'échappement dans un fichier en utilisant Meta- p:

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

J'ai regardé un peu et je ne trouve pas de solution pour que cela fonctionne dans le terminal GNOME par défaut + XTerm + Bash.

Je ne veux pas seulement une image avec le contenu de la fenêtre.

Il semble que le terminal GNOME pourrait éventuellement obtenir un correctif pour cela , mais il n'y a aucune information sur la version dans laquelle il sera inclus, et cela fait presque trois ans depuis la dernière mise à jour ...


Malheureusement, il n'y a tout simplement aucun moyen de le faire. Voir: askubuntu.com/q/20739
Zaz

@Josh, je ne pense pas que ce soit la même question. Je ne veux pas enregistrer toutes les sorties d'une commande, mais plutôt toutes les sorties visibles dans la fenêtre Terminal.
l0b0

Réponses:


3

Malheureusement, l0b0 la réponse hors de la boîte est: Ce n'est pas possible.

Dans mon autre réponse, j'ai énuméré comment utiliser le script pour ce faire, bien qu'il y ait des différences comme vous l'avez noté. L'autre façon est de compiler la source ou d'utiliser une version instable.

Gnome Terminal Source Tarball

La version de Raring est 3.6.1, vous pouvez donc consulter cette source. À l'intérieur de Terminal-window.c sur la ligne 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

Options:

  1. Ajoutez #define ENABLE_SAVE sous ceci.
  2. Modifiez la version en une instable.
  3. Téléchargez une version instable du .DEB.

J'espère que cela t'aides.


Est-ce que cela enregistre les clés d'échappement ANSI ou simplement le texte?
l0b0

J'ai vérifié et vte_terminal_write_contents () ne semble pas écrire les codes ANSI, pour le moment, ma réponse originale est la plus précise "Ce que vous voulez n'est pas possible (hors de la boîte)." Si vous êtes un développeur, vous pouvez probablement réécrire la fonction dans termainal-window.c 3340 save_contents_dialog_on_response (...) Vers la ligne 3372 environ, vous voyez où l'appel à vte_terminal_write_contents est effectué. Je ne vais pas aller plus loin car cela dépasse le cadre de ce site. D'autres terminaux offrent cela à un coût bien moindre que la recompilation de vos services publics.
LimpingNinja

+100. Si possible, je le partagerais entre cela et votre autre réponse, car ils font tous les deux 90% de ce que je veux.
l0b0

3

Malheureusement, l0b0 la réponse hors de la boîte est: Ce n'est pas possible.

Vous pouvez essayer de rectifier cela de deux manières, en exécutant un script à tout moment sur votre terminal et en enregistrant toutes les sorties. Ouvrez gnome-terminal, allez dans Edition -> Préférences de profil , puis l'onglet Titre et commande et pour votre commande personnalisée utilisez ceci:

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

Assurez-vous que «sessionlogs» existe sous $ HOME.

L'autre façon a été supprimée et ajoutée comme deuxième réponse à cette question.


En effet, corrigé la réponse pour corriger la faute de frappe survenue lors d'un repaste. Je sépare également l'option «recompiler», car je reconnais que les deux ne sont pas liées.
LimpingNinja

less -rmontre en fait la sortie imprimée - Merci!
l0b0

0

Vous pouvez exécuter vos shells via le script (1) pour obtenir toutes les entrées et sorties du terminal stockées dans un fichier, y compris les sorties de terminal.


1
C'est un cas d'utilisation différent. scriptne peut pas être utilisé pour enregistrer du contenu après coup et il n'enregistre pas simplement la sortie visible .
l0b0

1
Êtes-vous sûr? Certes, il ne peut pas enregistrer les scripts après coup, mais quand j'ai testé cela et sorti certaines autorisations de fichier avec, j'ai llenregistré toute la sortie.
Matt

0

Il existe un package appelé écran - un multiplexeur de terminaux avec émulation de terminal VT100 / ANSI.

Selon la page de manuel de screen sur le site Web Ubuntu Manuals , screen prétend être

un gestionnaire de fenêtres plein écran qui multiplexe un terminal physique entre plusieurs processus (généralement des shells interactifs) .Chaque terminal virtuel fournit les fonctions d' un terminal DEC VT100 et, en plus, plusieurs fonctions de contrôle de l'ISO 6429 (ECMA 48, ANSI X3). 64) et aux normes ISO 2022 (par exemple, insertion / suppression de ligne et prise en charge de plusieurs jeux de caractères) un multiplexeur de terminaux avec émulation de terminal VT100 / ANSI ».

et lors de l'exécution de l' écran :

Ctrl ah (copie papier) Ecrivez une copie papier de la fenêtre actuelle dans le fichier "hardcopy.n".

J'ai essayé dans le terminal GNOME, en cours d'exécution screenet en tapantCtrl ah

écran en cours d'exécution et en tapant Ctrl Alt h

Ceci est la sortie de mon fichier hardcopy.1 lorsqu'il est ouvert dans Gedit:

hardcopy.1 ouvert à Gedit

Vous pouvez trouver que l' écran se trouve dans le référentiel logiciel raring / principal d'Ubuntu 13.04.

Il n'est pas installé par défaut.


-1

Hm, cela ne copiera pas les codes d'échappement, mais juste pour saisir le texte, vous pouvez aller dans le menu Edition -> Tout sélectionner, puis appuyez sur CtrlShiftCet (i) collez le presse-papiers dans un éditeur ou (ii) tapez cat > filenameet appuyez sur CtrlShiftV.


Ceci est un cas d'utilisation différent - Comme indiqué explicitement, je veux inclure les codes d'échappement ANSI.
l0b0

-1

man history recherchez l'extension de l'histoire pour les personnages échappés. Je crois history que vous pouvez faire ce que vous demandez.


Je n'ai rien trouvé de pertinent sur la manpage. Veuillez être plus précis.
l0b0
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.