จะบันทึกเนื้อหาเทอร์มินัล 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 Terminal + XTerm + Bash เริ่มต้น

ฉันไม่ต้องการเพียงแค่ภาพที่มีเนื้อหาของหน้าต่าง

ดูเหมือนว่าเทอร์มินัล GNOME อาจได้รับการแก้ไขในที่สุดแต่ไม่มีข้อมูลเกี่ยวกับเวอร์ชันที่จะรวมอยู่และเกือบสามปีแล้วนับตั้งแต่การอัปเดตครั้งล่าสุด ...


น่าเสียดายที่ไม่มีวิธีการนี้ ดู: askubuntu.com/q/20739
Zaz

@ Josh ฉันไม่คิดว่าเป็นคำถามเดียวกัน ฉันไม่ต้องการบันทึกเอาต์พุตทั้งหมดจากคำสั่ง แต่ให้แสดงผลลัพธ์ที่มองเห็นได้ทั้งหมดในหน้าต่าง Terminal
l0b0

คำตอบ:


3

น่าเสียดายที่ l0b0 คำตอบที่ได้คือ: ไม่สามารถทำได้

ในคำตอบอื่น ๆ ของฉันฉันแสดงวิธีใช้สคริปต์เพื่อทำสิ่งนี้แม้ว่าจะมีความแตกต่างบางอย่างตามที่คุณระบุไว้ วิธีอื่นคือการคอมไพล์ซอร์สหรือใช้เวอร์ชันที่ไม่เสถียร

Gnome Terminal ต้นทาง Tarball

รุ่นใน Raring คือ 3.6.1 เพื่อให้คุณสามารถดูที่มานี้ ภายใน Terminal-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-terminal, ไปที่Edit -> Profile Preferences , จากนั้นแท็บTitle and Commandและสำหรับคำสั่งที่กำหนดเองของคุณให้ใช้สิ่งนี้:

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

ตรวจสอบให้แน่ใจว่ามี 'sessionlogs' อยู่ใต้ $ HOME

วิธีอื่นได้ถูกลบและเพิ่มเป็นคำตอบที่สองสำหรับคำถามนี้


แน่นอนแก้ไขคำตอบเพื่อแก้ไขการพิมพ์ผิดที่เกิดขึ้นในระหว่างการ repaste ฉันกำลังแยกตัวเลือก 'คอมไพล์ซ้ำ' ด้วยเช่นกันเนื่องจากฉันเห็นด้วยว่าทั้งสองไม่เกี่ยวข้องกัน
LimpingNinja

less -rจริง ๆ แล้วแสดงผลลัพธ์ตามที่พิมพ์ - ขอบคุณ!
l0b0

0

คุณสามารถเรียกใช้เชลล์ของคุณผ่านสคริปต์ (1)เพื่อรับอินพุตและเอาต์พุตทั้งหมดของเทอร์มินัลที่เก็บไว้ในไฟล์รวมถึงเทอร์มินัลหนี


1
นั่นเป็นกรณีการใช้งานที่แตกต่างกัน scriptไม่สามารถใช้ในการบันทึกเนื้อหาตามความเป็นจริงและไม่เพียงแค่บันทึกเอาท์พุทที่มองเห็นได้
l0b0

1
คุณแน่ใจไหม? จริงมันไม่สามารถบันทึกสคริปต์หลังจากข้อเท็จจริง แต่เมื่อฉันทดสอบนี้และส่งออกสิทธิ์บางไฟล์ด้วยllมันบันทึกผลลัพธ์ทั้งหมด
แมตต์

0

มีแพ็คเกจที่เรียกว่าหน้าจอ - เทอร์มินัลมัลติเพล็กเซอร์พร้อมการจำลองเทอร์มินัล VT100 / ANSI

ตามที่manpage ของหน้าจอบนเว็บไซต์อูบุนตูคู่มือการใช้งาน , หน้าจอการเรียกร้องที่จะเป็น

ตัวจัดการหน้าต่างแบบเต็มหน้าจอที่มัลติเทอร์มินัลฟิสิคัลระหว่างหลายกระบวนการ (โดยทั่วไปคือเชลล์เชิงโต้ตอบ) แต่ละเทอร์มินัลเสมือนจะทำหน้าที่ของเทอร์มินัล DEC VT100และนอกจากนี้ยังมีฟังก์ชั่นการควบคุมต่างๆ 64) และมาตรฐาน ISO 2022 (เช่นแทรก / ลบบรรทัดและรองรับชุดอักขระหลายชุด) เทอร์มินัลมัลติเพล็กซ์พร้อมการจำลองเทอร์มินัล VT100 / ANSI '

และเมื่อใช้หน้าจอ :

Ctrl ah (hardcopy) เขียน hardcopy ของหน้าต่างปัจจุบันไปที่ไฟล์ "hardcopy.n"

ฉันลองใช้เทอร์มินัล GNOME ทำงานscreenและพิมพ์Ctrl ah

หน้าจอที่ทำงานอยู่และพิมพ์ Ctrl Alt h

นี่คือผลลัพธ์ของไฟล์ hardcopy.1 ของฉันเมื่อเปิดใน Gedit:

hardcopy.1 เปิดใน Gedit

คุณสามารถค้นหาหน้าจอได้ในที่เก็บซอฟต์แวร์ raring / main ของ Ubuntu 13.04

มันไม่ได้ติดตั้งโดยค่าเริ่มต้น


-1

หืมนี้จะไม่คัดลอกรหัสหนี แต่เพียงที่จะคว้าข้อความที่คุณสามารถไปที่เมนูแก้ไข -> เลือกทั้งหมดแล้วกดCtrlShiftCและทั้ง (i) การวางคลิปบอร์ดไปแก้ไขหรือ (ii) ประเภทและกดcat > filenameCtrlShiftV


นี่เป็นกรณีการใช้งานที่แตกต่าง - ตามที่ระบุไว้อย่างชัดเจนฉันต้องการรวมรหัสหลบหนี ANSI
l0b0

-1

man history มองหาการขยายประวัติสำหรับอักขระที่หลบหนี ฉันเชื่อว่าhistory สามารถทำสิ่งที่คุณถาม


ฉันไม่พบสิ่งใดที่เกี่ยวข้องในmanหน้า กรุณาเจาะจงมากขึ้น
l0b0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.