Bagaimana cara menyimpan konten Terminal GNOME dengan kode pelarian ANSI?

9

Terminal VT100 memiliki cara yang relatif sederhana untuk menyimpan konten terminal dengan kode pelarian ke file menggunakan Meta- p:

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

Saya telah melihat-lihat sedikit, dan tidak dapat menemukan solusi untuk ini berfungsi di Terminal default GNOME + XTerm + Bash.

Saya tidak ingin hanya gambar dengan isi jendela.

Sepertinya Terminal GNOME mungkin pada akhirnya akan mendapatkan perbaikan untuk ini , tetapi tidak ada informasi tentang versi mana itu akan dimasukkan, dan sudah hampir tiga tahun sejak pembaruan terakhir ...

l0b0
sumber
Sayangnya, tidak ada cara untuk melakukan ini. Lihat: askubuntu.com/q/20739
Zaz
@ Oh, saya kira itu bukan pertanyaan yang sama. Saya tidak ingin menyimpan semua output dari perintah, tetapi semua output yang terlihat di jendela Terminal.
l0b0

Jawaban:

3

Sayangnya, 10b0 jawabannya di luar kotak adalah: Ini tidak mungkin.

Dalam jawaban saya yang lain, saya mencantumkan cara menggunakan skrip untuk melakukan ini, meskipun ada beberapa perbedaan seperti yang Anda catat. Cara lain adalah dengan mengkompilasi sumber atau menggunakan versi yang tidak stabil.

Gnome Terminal Source Tarball

Versi dalam Raring adalah 3.6.1, sehingga Anda dapat melihat sumber ini. Di dalam Terminal-window.c pada baris 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

Pilihan:

  1. Tambahkan #define ENABLE_SAVE di bawah ini.
  2. Ubah versi menjadi tidak stabil.
  3. Unduh versi .DEB yang tidak stabil.

Semoga ini membantu.

LimpingNinja
sumber
Apakah ini menyimpan kunci pelarian ANSI, atau hanya teks?
l0b0
Saya telah memverifikasi dan vte_terminal_write_contents () tampaknya tidak menulis kode ANSI, saat ini, tanggapan asli saya adalah yang paling akurat "Apa yang Anda inginkan tidak mungkin (di luar kotak)." Jika Anda berpikiran pengembang, Anda mungkin dapat menulis ulang fungsi di termainal-window.c 3340 save_contents_dialog_on_response (...) Di sekitar baris 3372 Anda melihat di mana panggilan ke vte_terminal_write_contents dibuat. Saya tidak akan melangkah lebih jauh karena berada di luar cakupan situs ini. Terminal lain menawarkan ini dengan biaya yang jauh lebih murah daripada mengkompilasi ulang utilitas Anda.
LimpingNinja
+100. Jika memungkinkan saya akan membaginya antara ini dan jawaban Anda yang lain, karena mereka berdua melakukan 90% dari apa yang saya inginkan.
l0b0
3

Sayangnya, 10b0 jawabannya di luar kotak adalah: Ini tidak mungkin.

Ada dua cara Anda dapat mencoba untuk memperbaikinya, dengan menjalankan skrip setiap saat di terminal Anda dan mencatat semua output. Buka gnome-terminal, buka Edit -> Preferensi Profil , lalu tab Judul dan Perintah dan untuk perintah khusus Anda gunakan ini:

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

Pastikan 'sessionlog' ada di bawah $ HOME.

Cara lain telah dihapus dan ditambahkan sebagai jawaban kedua pada pertanyaan ini.

LimpingNinja
sumber
Memang, mengoreksi jawaban untuk memperbaiki kesalahan ketik yang terjadi selama repaste. Saya memisahkan opsi 'kompilasi' juga, karena saya setuju keduanya tidak berhubungan.
LimpingNinja
less -rbenar-benar menunjukkan output yang dicetak - Terima kasih!
l0b0
0

Anda dapat menjalankan shell Anda melalui skrip (1) untuk mendapatkan semua input dan output dari terminal yang disimpan dalam file, termasuk terminal lolos.

geirha
sumber
1
Itu kasus penggunaan yang berbeda. scripttidak dapat digunakan untuk menyimpan konten setelah fakta dan itu tidak hanya menyimpan output yang terlihat .
l0b0
1
Apakah kamu yakin Benar itu tidak dapat menyimpan skrip setelah fakta, tetapi ketika saya menguji ini dan mengeluarkan beberapa izin file dengan llitu menyimpan semua output.
Mat
0

Ada paket yang disebut layar - terminal multiplexor dengan emulasi terminal VT100 / ANSI.

Menurut halaman manual layar pada situs web Ubuntu Manuals , layar mengklaim sebagai

window manager layar penuh yang mengalikan terminal fisik antara beberapa proses (biasanya shell interaktif). Setiap terminal virtual menyediakan fungsi terminal DEC VT100 dan, di samping itu, beberapa fungsi kontrol dari ISO 6429 (ECMA 48, ANSI X3. 64) dan standar ISO 2022 (mis. Masukkan / hapus baris dan dukungan untuk set karakter ganda) multiplexor terminal dengan emulasi terminal VT100 / ANSI '.

dan saat menjalankan layar :

Ctrl ah (hardcopy) Tulis hardcopy dari jendela saat ini ke file "hardcopy.n".

Saya mencoba di Terminal GNOME, berlari screendan mengetikCtrl ah

menjalankan layar dan mengetik Ctrl Alt h

Ini adalah output dari file hardcopy.1 saya ketika dibuka di Gedit:

hardcopy.1 dibuka di Gedit

Anda dapat menemukan layar dalam repositori perangkat lunak utama / raring dari Ubuntu 13.04.

Ini tidak diinstal secara default.


sumber
-1

Hm, ini tidak akan menyalin kode pelarian, tetapi hanya untuk mengambil teks, Anda dapat pergi ke menu Edit -> Pilih Semua, lalu tekan CtrlShiftCdan (i) tempel clipboard ke editor atau (ii) ketik cat > filenamedan tekan CtrlShiftV.

Januari
sumber
Ini adalah kasus penggunaan yang berbeda - Seperti yang dinyatakan secara eksplisit, saya ingin memasukkan kode pelarian ANSI.
l0b0
-1

man history mencari ekspansi riwayat untuk karakter yang lolos. Saya percaya history dapat melakukan apa yang Anda minta.

j0h
sumber
Saya tidak dapat menemukan yang relevan di manhalaman. Harap lebih spesifik.
l0b0