Як зберегти вміст терміналу GNOME за допомогою анімаційних кодів ANSI?


9

Термінали VT100 мають відносно простий спосіб зберегти термінальне вміст з допомогою евакуаційних кодів в файл з допомогою Meta- p:

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

Я трохи оглянувся, і не можу знайти рішення, щоб це працювало в терміналі GNOME за замовчуванням + XTerm + Bash.

Я не хочу просто зображення із вмістом вікна.

Схоже, термінал GNOME може врешті отримати виправлення цього , але немає інформації про те, до якої версії він буде включений, і минуло майже три роки з моменту останнього оновлення ...


На жаль, просто не існує цього способу. Дивіться: askubuntu.com/q/20739
Zaz

@Josh Я не думаю, що це те саме питання. Я не хочу зберігати весь вихід з команди, а навпаки весь видимий вихід у вікні терміналу.
l0b0

Відповіді:


3

На жаль, l0b0 відповідь з поля: Це неможливо.

У своїй іншій відповіді я перерахував, як використовувати скрипт для цього, хоча, як ви зазначили, є деякі відмінності. Інший спосіб - скласти джерело або використовувати нестабільну версію.

Gnome Terminal Source Тарбол

Версія в Raring становить 3.6.1, тому ви можете подивитися на це джерело. Всередині терміналу-window.c на лінії 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

Параметри:

  1. Додайте #define ENABLE_SAVE під цим.
  2. Змініть версію на нестабільну.
  3. Завантажте нестабільну версію .DEB.

Сподіваюсь, це допомагає.


Чи зберігає це ключ пропускання ANSI або лише текст?
l0b0

Я перевірив, і vte_terminal_write_contents () не видається, щоб виписати ANSI-коди, на даний момент, моя оригінальна відповідь є найбільш точною. "Те, що ви хочете, неможливо (поза полем)." Якщо ви налаштовані на розробника, ви, ймовірно, можете переписати функцію в termainal-window.c 3340 save_contents_dialog_on_response (...) Приблизно у рядку 3372 ви бачите, куди робиться виклик vte_terminal_write_contents. Я не збираюся йти далі, оскільки це виходить за межі цього веб-сайту. Інші термінали пропонують це набагато дешевше, ніж перекомпіляція ваших утиліт.
LimpingNinja

+100. Якщо можливо, я розділив би це між вашою та іншою відповіддю, оскільки вони обидва роблять 90% того, що я хочу.
l0b0

3

На жаль, l0b0 відповідь з поля: Це неможливо.

Ви можете спробувати виправити це двома способами, запускаючи сценарій у свій час на своєму терміналі та реєструючи весь вихід. Відкрийте gnome-термінал, перейдіть до меню Правка -> Налаштування профілю , потім вкладка Назва та команда, і для вашої користувальницької команди використовуйте це:

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

Переконайтесь, що "сеанси журналів" існують під $ HOME.

Інший спосіб було видалено і додано як другу відповідь на це питання.


Дійсно, виправлено відповідь, щоб виправити помилку друку, яка сталася під час репастежу. Я також відокремлюю варіант "перекомпіляції", оскільки я погоджуюся, що вони не пов'язані між собою.
LimpingNinja

less -rнасправді показує вихід як друкований - Дякую!
l0b0

0

Ви можете запустити оболонки за допомогою скрипту (1), щоб отримати весь вхід і вихід терміналу, що зберігається у файлі, включаючи втечі термінала.


1
Це інший випадок використання. scriptне може бути використаний для збереження вмісту після факту, і він не просто зберігає видимий вихід .
l0b0

1
Ти впевнений? Правда, він не може зберегти сценарії після факту, але коли я перевірив це і вивів деякі дозволи на файл, llвін зберег весь результат.
Метт

0

Є пакет, який називається екран - термінальний мультиплексор з емуляцією терміналу VT100 / ANSI.

Згідно сторінки керівництва на екрані на веб - сайті Ubuntu посібниками , екран претензії бути

повноекранний менеджер вікон, який мультиплексує фізичний термінал між декількома процесами (як правило, інтерактивними оболонками). Кожен віртуальний термінал забезпечує функції терміналу DEC VT100 і, крім того, декількох функцій управління з ISO 6429 (ECMA 48, ANSI X3). 64) та стандарти ISO 2022 (наприклад, вставка / видалення рядка та підтримка декількох наборів символів) термінальний мультиплексор з емуляцією терміналу VT100 / ANSI '.

і під час запуску екрана :

Ctrl ah (тверда копія) Запишіть паперову копію поточного вікна у файл "hardcopy.n".

Я спробував у терміналі GNOME, біг screenта набір текстуCtrl ah

запущений екран та набравши Ctrl Alt h

Це вихід мого файла hardcopy.1 при відкритті в Gedit:

тверда копія.1 відкрилася в Гедіті

Ви можете знайти екран в репозиторії програмного забезпечення Ubuntu 13.04.

Він не встановлений за замовчуванням.


-1

Гм, це не скопіює коди евакуації, а просто, щоб захопити текст, ви можете перейти до меню «Правка» -> «Вибрати все», потім натисніть CtrlShiftCта (i) вставити буфер обміну в редактор або (ii) набрати cat > filenameта натиснути CtrlShiftV.


Це інший випадок використання - Як чітко зазначено, я хочу включити ANSI коди виходу.
l0b0

-1

man history шукайте розширення історії для втікаючих персонажів. Я вважаю history , що ви можете зробити те, що ви просите.


Я не міг знайти нічого релевантного на manсторінці. Будь ласка, будьте більш конкретними.
l0b0
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.