Làm cách nào để lưu nội dung Terminal Gnome bằng mã thoát ANSI?


9

Thiết bị đầu cuối VT100 có một cách tương đối đơn giản để lưu nội dung thiết bị đầu cuối với mã thoát vào tệp bằng cách sử dụng Meta- p:

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

Tôi đã xem xét xung quanh khá nhiều và không thể tìm ra giải pháp nào cho việc này để hoạt động trong Terminal Gnome + XTerm + Bash mặc định.

Tôi không muốn chỉ là một hình ảnh với nội dung của cửa sổ.

Có vẻ như Gnome Terminal cuối cùng cũng có thể sửa lỗi này , nhưng không có thông tin nào về việc nó sẽ được đưa vào phiên bản nào và đã gần ba năm kể từ lần cập nhật cuối cùng ...


Thật không may, đơn giản là không có cách nào để làm điều này. Xem: Askubfox.com/q/20739
Zaz

@ Tôi không nghĩ đó là câu hỏi tương tự. Tôi không muốn lưu tất cả đầu ra từ một lệnh, mà là tất cả đầu ra có thể nhìn thấy trong cửa sổ Terminal.
l0b0

Câu trả lời:


3

Thật không may, l0b0 câu trả lời ngoài hộp là: Điều này là không thể.

Trong câu trả lời khác của tôi, tôi đã liệt kê cách sử dụng tập lệnh để làm điều này, mặc dù có một số khác biệt như bạn đã lưu ý. Cách khác là biên dịch nguồn hoặc sử dụng phiên bản không ổn định.

Tarome Terminal Nguồn Tarball

Phiên bản trong Rared là 3.6.1, vì vậy bạn có thể xem nguồn này. Bên trong Terminal-window.c trên dòng 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

Tùy chọn:

  1. Thêm #define ENABLE_SAVE dưới đây.
  2. Sửa đổi phiên bản không ổn định.
  3. Tải xuống phiên bản không ổn định của .DEB.

Hi vọng điêu nay co ich.


Điều này có lưu các khóa thoát ANSI hay chỉ là văn bản?
l0b0

Tôi đã xác minh và vte_terminal_write_contents () dường như không viết mã ANSI, hiện tại, phản hồi ban đầu của tôi là chính xác nhất "Những gì bạn muốn là không thể (ngoài hộp)." Nếu bạn là người có đầu óc phát triển, có lẽ bạn có thể viết lại hàm trong termainal-window.c 3340 save_contents_dialog_on_response (...) Ở khoảng dòng 3372, bạn sẽ thấy cuộc gọi đến vte_terminal_write_contents được thực hiện. Tôi sẽ không đi xa hơn vì nó nằm ngoài phạm vi của trang web này. Các thiết bị đầu cuối khác cung cấp điều này với chi phí thấp hơn nhiều so với biên dịch lại các tiện ích của bạn.
LimpingNinja

+100. Nếu có thể tôi sẽ chia nó giữa câu trả lời này và câu trả lời khác của bạn, vì cả hai đều thực hiện 90% những gì tôi muốn.
l0b0

3

Thật không may, l0b0 câu trả lời ngoài hộp là: Điều này là không thể.

Có hai cách bạn có thể cố gắng khắc phục điều này, bằng cách chạy tập lệnh mọi lúc trên thiết bị đầu cuối của bạn và ghi nhật ký tất cả đầu ra. Mở gnome-terminal, đi đến Chỉnh sửa -> Tùy chọn hồ sơ , sau đó là tab Tiêu đề và Lệnh và cho lệnh tùy chỉnh của bạn sử dụng:

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

Đảm bảo 'sessionlogs tồn tại dưới $ HOME.

Cách khác đã được gỡ bỏ và thêm vào như một câu trả lời thứ hai cho câu hỏi này.


Thật vậy, đã sửa câu trả lời để sửa lỗi đánh máy xảy ra trong một lần sửa lại. Tôi cũng đang tách ra tùy chọn 'biên dịch lại', vì tôi đồng ý hai cái này không liên quan đến nhau.
LimpingNinja

less -rthực sự hiển thị đầu ra như đã in - Cảm ơn!
l0b0

0

Bạn có thể chạy shell của mình thông qua tập lệnh (1) để có được tất cả đầu vào và đầu ra của thiết bị đầu cuối được lưu trữ trong một tệp, bao gồm cả thoát thiết bị đầu cuối.


1
Đó là một trường hợp sử dụng khác nhau. scriptkhông thể được sử dụng để lưu nội dung sau thực tế và nó không chỉ đơn giản là lưu kết quả đầu ra có thể nhìn thấy .
l0b0

1
Bạn có chắc không? Đúng là nó không thể lưu tập lệnh sau khi thực tế, nhưng khi tôi kiểm tra điều này và xuất ra một số quyền của tập tin với llnó đã lưu tất cả đầu ra.
Matt

0

Có một gói được gọi là màn hình - bộ ghép kênh đầu cuối với mô phỏng thiết bị đầu cuối VT100 / ANSI.

Theo trang chủ của màn hình trên trang web Hướng dẫn sử dụng Ubuntu , màn hình tuyên bố là

trình quản lý cửa sổ toàn màn hình ghép một thiết bị đầu cuối vật lý giữa một số quy trình (thường là vỏ tương tác). Mỗi thiết bị đầu cuối ảo cung cấp các chức năng của thiết bị đầu cuối DEC VT100 và, ngoài ra, một số chức năng điều khiển từ ISO 6429 (ECMA 48, ANSI X3. 64) và các tiêu chuẩn ISO 2022 (ví dụ: chèn / xóa dòng và hỗ trợ cho nhiều bộ ký tự) một bộ ghép kênh đầu cuối với mô phỏng đầu cuối VT100 / ANSI '.

và khi chạy màn hình :

Ctrl ah (bản cứng) Viết bản cứng của cửa sổ hiện tại vào tệp "hardcopy.n".

Tôi đã thử trong Terminal Gnome, chạy screenvà gõCtrl ah

chạy màn hình và gõ Ctrl Alt h

Đây là đầu ra của tệp hardcopy.1 của tôi khi được mở trong Gedit:

hardcopy.1 được mở trong Gedit

Bạn có thể tìm thấy màn hình nằm trong kho phần mềm hiếm / chính của Ubuntu 13.04.

Nó không được cài đặt theo mặc định.


-1

Hừm, điều này sẽ không sao chép mã thoát, nhưng chỉ để lấy văn bản, bạn có thể vào menu Chỉnh sửa -> Chọn Tất cả, sau đó nhấn CtrlShiftCvà (i) dán bảng tạm vào trình chỉnh sửa hoặc gõ (ii) cat > filenamevà nhấn CtrlShiftV.


Đây là một trường hợp sử dụng khác - Như đã nêu rõ ràng, tôi muốn bao gồm các mã thoát ANSI.
l0b0

-1

man history tìm kiếm mở rộng lịch sử cho các nhân vật trốn thoát. Tôi tin rằng history có thể làm những gì bạn đang yêu cầu.


Tôi không thể tìm thấy gì liên quan trong mantrang. Xin hãy cụ thể hơn.
l0b0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.