Jak zapisać zawartość terminala GNOME za pomocą kodów specjalnych ANSI?

9

Terminale VT100 mają stosunkowo prosty sposób na zapisanie zawartości terminala z kodami ucieczki do pliku za pomocą Meta- p:

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

Rozejrzałem się trochę i nie mogę znaleźć rozwiązania, które działałoby w domyślnym terminalu GNOME + XTerm + Bash.

Ja nie chce tylko obraz z zawartością okna.

Wygląda na to, że GNOME Terminal może ostatecznie to naprawić , ale nie ma informacji o tym, w której wersji zostanie uwzględniony, i minęły prawie trzy lata od ostatniej aktualizacji ...

l0b0
źródło
Niestety po prostu nie ma na to sposobu. Patrz: askubuntu.com/q/20739
Zaz
@Josh Nie sądzę, że to to samo pytanie. Nie chcę zapisywać wszystkich danych wyjściowych polecenia, ale wszystkie widoczne dane wyjściowe w oknie terminala.
l0b0 30.04.13

Odpowiedzi:

3

Niestety, l0b0 odpowiedź po wyjęciu z pudełka brzmi: nie jest to możliwe.

W mojej drugiej odpowiedzi wymieniłem sposób użycia skryptu, aby to zrobić, chociaż istnieją pewne różnice, jak zauważyłeś. Innym sposobem jest skompilowanie źródła lub użycie niestabilnej wersji.

Źródło Gnome Terminal Tarball

Wersja w Raring to 3.6.1, więc możesz spojrzeć na to źródło. Wewnątrz Terminal-window.c na linii 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

Opcje:

  1. Dodaj #define ENABLE_SAVE poniżej tego.
  2. Zmodyfikuj wersję na niestabilną.
  3. Pobierz niestabilną wersję .DEB.

Mam nadzieję że to pomoże.

LimpingNinja
źródło
Czy to oszczędza klawisze specjalne ANSI, czy tylko tekst?
l0b0
Zweryfikowałem i vte_terminal_write_contents () nie wydaje się zapisywać kodów ANSI, w tej chwili moja oryginalna odpowiedź jest najdokładniejsza „To, czego chcesz, nie jest możliwe (po wyjęciu z pudełka)”. Jeśli jesteś nastawiony na programistę, prawdopodobnie możesz przepisać tę funkcję w termainal-window. C 3340 save_contents_dentsog_on_response (...) Około linii 3372 widać, gdzie jest wykonywane wywołanie vte_terminal_write_contents. Nie zamierzam iść dalej, ponieważ wykracza to poza zakres tej witryny. Inne terminale oferują to znacznie mniejszym kosztem niż rekompilacja narzędzi.
LimpingNinja
+100. Jeśli to możliwe, podzieliłbym to na to i twoją drugą odpowiedź, ponieważ obaj robią 90% tego, czego chcę.
l0b0
3

Niestety, l0b0 odpowiedź po wyjęciu z pudełka brzmi: nie jest to możliwe.

Istnieją dwa sposoby, aby to naprawić, uruchamiając skrypt przez cały czas na terminalu i rejestrując wszystkie dane wyjściowe. Otwórz gnome-terminal, przejdź do Edycja -> Preferencje profilu , następnie zakładkę Tytuł i polecenie, a dla własnego polecenia użyj:

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

Upewnij się, że „logi sesji” istnieją w $ HOME.

Drugi sposób został usunięty i dodany jako druga odpowiedź na to pytanie.

LimpingNinja
źródło
Rzeczywiście, poprawiono odpowiedź, aby naprawić literówkę, która wystąpiła podczas ponownego wklejania. Oddzielam również opcję „ponownej kompilacji”, ponieważ zgadzam się, że te dwie rzeczy nie są ze sobą powiązane.
LimpingNinja
less -rfaktycznie pokazuje wydruk jako wydrukowany - Dzięki!
l0b0
0

Możesz uruchomić swoje powłoki za pomocą skryptu (1), aby uzyskać wszystkie dane wejściowe i wyjściowe terminala przechowywane w pliku, w tym ucieczki terminali.

geirha
źródło
1
To inny przypadek użycia. scriptpo fakcie nie można go użyć do zapisywania treści i nie tylko zapisuje widoczne wyniki .
l0b0
1
Jesteś pewny? To prawda, że ​​po fakcie nie można zapisywać skryptów, ale kiedy to przetestowałem i wypisałem niektóre uprawnienia do pliku ll, zapisałem wszystkie dane wyjściowe.
Matt
0

Istnieje pakiet o nazwie screen - multiplekser terminali z emulacją terminala VT100 / ANSI.

Według strony screen na stronie Ubuntu Manuals , screen twierdzi, że jest

pełnoekranowy menedżer okien, który multipleksuje fizyczny terminal między kilkoma procesami (zwykle interaktywnymi powłokami). Każdy terminal wirtualny zapewnia funkcje terminalu DEC VT100, a ponadto kilka funkcji sterowania z ISO 6429 (ECMA 48, ANSI X3. 64) oraz normy ISO 2022 (np. Wstawianie / usuwanie wiersza i obsługa wielu zestawów znaków) multiplekser terminala z emulacją terminala VT100 / ANSI ”.

a podczas uruchamiania ekranu :

Ctrl ah (egzemplarz papierowy) Napisz wydruk bieżącego okna do pliku „hardcopy.n”.

Próbowałem w GNOME Terminal, uruchamiając screeni piszącCtrl ah

Uruchamianie ekranu i pisanie Ctrl Alt h

To jest wynik mojego pliku hardcopy.1 po otwarciu w Gedit:

hardcopy.1 otwarty w Gedit

Możesz znaleźć screen w raring / głównym repozytorium oprogramowania Ubuntu 13.04.

Nie jest domyślnie instalowany.


źródło
-1

Hm, to nie skopiuje kodów ucieczki, ale tylko po to, aby pobrać tekst, możesz przejść do menu Edycja -> Wybierz wszystko, a następnie naciśnij CtrlShiftCi (i) wklej schowek do edytora lub (ii) wpisz cat > filenamei naciśnij CtrlShiftV.

styczeń
źródło
Jest to inny przypadek użycia - jak wyraźnie zaznaczono, chcę dołączyć kody specjalne ANSI.
l0b0
-1

man history poszukaj rozszerzenia historii dla znaków ucieczki. Wierzę, że history mogę zrobić to, o co prosisz.

j0h
źródło
Nie mogłem znaleźć nic istotnego na manstronie. Proszę być bardziej precyzyjnym.
l0b0