การเลื่อนในแนวนอนในเทอร์มินัล


12

ดังนั้นฉันเชื่อว่ามี 2 คำถามในเรื่องนี้แล้ว พวกเขาทั้งหมดจะทำอย่างไรtail -fและด้วยเหตุนี้ผู้คนจึงให้คำตอบสัมผัสของ "ใช้น้อยลง"

ฉันต้องการมันสำหรับทุกอย่างทุกคำสั่ง ฯลฯ ปัญหาคือฉันต้องใช้คอนโซล windows จำนวนมากและแม้จะมีจอภาพหลายจอก็ยังต้องลดขนาดลง ผลที่ตามมาคือเอาต์พุตทุกอย่างถูกทำลายโดยการตัดบรรทัดและทำให้อ่านไม่สะดวก

ทางออกหนึ่งที่แนะนำคือใช้echo -ne '\e[?7l'งานได้ ปัญหาตอนนี้มีวิธีใดที่จะได้รับแถบเลื่อนบนคอนโซล?

Ubuntu 12.10, เทอร์มินัล


เป็นตัวอย่าง (ในการตอบกลับความคิดเห็นทั้งหมด "นี่ไม่ใช่วิธีการทำงานของเทอร์มินัล"!) ฉันจะชี้ให้เห็นว่าคอนโซล Ubuntu สำหรับ Windowsรองรับคุณสมบัตินี้ แอปพลิเคชันเช่นlsและmceditทำงานได้ดีเนื่องจากความกว้างของหน้าจอและความกว้างของบัฟเฟอร์ได้รับการจัดการแยกกัน
cz

คำตอบ:


10

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

ตัวอย่างเช่นหากเทอร์มินัลมีความกว้างไม่ จำกัด แอพพลิเคชั่นทางสายตาหมายถึงการทำงานเมื่อพวกเขาต้องการที่จะแสดงบางสิ่งบางอย่างในช่วงกลางของหน้าจอ?

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

กดไลค์ (ภายในscreen)

c=$COLUMNS # assuming your shell has that variable
screen -X width -w 1000
stty cols "$c"

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

จากนั้นเพื่อเลื่อนและคัดลอกวางข้อมูลตัวเลือกเดียวคือการใช้screen's สำเนาโหมด ( <prefix>]) และเลื่อนไปรอบ ๆ เคอร์เซอร์ (ดูที่info -f screen -n Movementการเคลื่อนที่ไปรอบ ๆ ในโหมดถ่ายสำเนา )

tmux อาจมีความสามารถที่คล้ายกัน

นี้terminatorจำลอง terminal (Java ตาม) ซึ่งไม่ได้เป็นterminatorที่มาพร้อมกับอูบุนตูยังไม่เพียงแค่นั้นที่มีความกว้างขั้วไม่มีที่สิ้นสุด:

  • เส้นจะไม่ห่อ
  • แอปพลิเคชั่นที่มองเห็นจะบอกว่าความกว้างของหน้าจอเป็นสิ่งที่พอดีกับหน้าต่างไม่ใช่ระยะอนันต์
  • มันจะทำงานได้ดีกว่าscreenโซลูชันพื้นฐานที่กล่าวข้างต้นในรายการ terminfo ที่อ้างว่าไม่ได้ทำการตัดบรรทัดเพื่อให้แอปพลิเคชันทราบว่าและ BS ที่จุดเริ่มต้นของบรรทัดไม่ย้ายไปยังจุดสิ้นสุดของบรรทัดก่อนหน้า

ฉันอยู่ในสภาพแวดล้อม Gui แล้วดังนั้นหากฉันต้องการเปิดไฟล์ในโปรแกรมแก้ไขภาพฉันสามารถเปิดไฟล์ gui ได้จากเทอร์มินัล มันง่ายกว่าที่จะคัดลอกมันจากนั้นมันอยู่ในเทอร์มินัลอยู่แล้วเนื่องจากคุณไม่สามารถลากบล็อกในเทอร์มินัลได้โดยง่าย ใช้screen -X width -w 1000ผลตอบแทนNo screen session found.ความคิดใด ๆ
srcspider

@srcspider screenที่ผมกล่าวว่าคุณต้องทำว่าภายใน เริ่มscreenแรก
Stéphane Chazelas

โอเคฉันคิดว่าฉันได้รับคุณตอนนี้โดยทั่วไปฉันควรจะวิ่งscreen -X width -w 1000 <mycommand>
srcspider

1
@srcspider ไม่screenเป็นเทอร์มินัลอีมูเลเตอร์จำลอง ดังนั้นคุณต้องเริ่มต้นก่อนเช่นคุณจะต้องเริ่มxtermหรือgnome-terminalก่อนโดยใช้screenคำสั่ง จากนั้นภายในเทอร์มินัลอีมูเลเตอร์ใหม่นั้นให้คุณเรียกใช้screen -Xคำสั่งนั้นเพื่อบอกscreenให้เปลี่ยนความกว้างของหน้าต่าง ดูคำตอบที่แก้ไขของฉันสำหรับตัวterminatorจำลองซึ่งฉันสงสัยว่าคุณจะชอบ
Stéphane Chazelas

ขอบคุณ! แม้ว่าอย่างใดฉันไม่ได้รับพวกเขาไปทำงานอย่างน้อยตอนนี้ฉันรู้ว่าทำไมฉันไม่สามารถให้พวกเขาทำงานเช่นนั้น
srcspider

6

ในขณะที่ Emacs เป็นตัวแก้ไขและ IDE เป็นหลักมันเกิดขึ้นเพื่อให้ตรงกับปัญหาของคุณได้เป็นอย่างดี คุณสามารถเรียกใช้โปรแกรมภายในหน้าต่าง Emacs และ Emacs แสดงมันในเทอร์มินัลโง่ที่มีความกว้างและความสูงไม่ จำกัด หากเคอร์เซอร์อยู่ที่ส่วนท้ายของบัฟเฟอร์หน้าต่างจะเลื่อนเมื่อโปรแกรมสร้างเอาต์พุต หากคุณเลื่อนเคอร์เซอร์ไปรอบ ๆ หน้าต่างจะยังคงอยู่ในขณะที่การส่งออกเติบโต

พิมพ์M-x shell RET(เช่นAlt+ x shell Return) เพื่อเริ่มเชลล์ในบัฟเฟอร์ Emacs พิมพ์C-u M-x shell RETหรือM-1 M-x shell RETเพื่อเริ่มเชลล์อื่น คุณสามารถรันโปรแกรมในแต่ละเชลล์และจัดเรียงบัฟเฟอร์ในหลาย ๆ หน้าต่างตามที่คุณต้องการ

¹ บางครั้งก็บอกว่าจะเป็นระบบปฏิบัติการที่ดีกว่าการแก้ไข แต่โดยผู้ที่ไม่ได้ใช้มัน - ว่าเป็นเพียงเรื่องตลก

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