การใช้ล้อเลื่อนในหน้าจอ GNU


254

ฉันจะตั้งค่าหน้าจอ GNU เพื่อให้ล้อเลื่อนของเมาส์เลื่อนไปรอบ ๆ ในบัฟเฟอร์การเลื่อนได้อย่างไร ฉันพยายาม Google เกี่ยวกับเรื่องนี้ แต่ความนิยมส่วนใหญ่เกี่ยวกับวิธีการอนุญาตให้แอปพลิเคชันภายในหน้าจอใช้ล้อเลื่อน


JesperE - คุณสามารถเปลี่ยนคำตอบที่เลือกได้หรือไม่? ฉันสับสนและความคิดเห็นนั้นถูกต้องคำตอบอื่น ๆ นั้นดีกว่า
Geoff

ไม่ได้ใช้หน้าจอทุกวันนี้ แต่ upvotes ดูเหมือนน่าเชื่อถือเพียงพอ :)
JesperE

คำตอบ:


359

ฉันเชื่อว่าคุณสามารถเพิ่มบรรทัดแบบนี้ใน~/.screenrc:

termcapinfo xterm* ti@:te@

โดยที่ "xterm *" เป็นการจับคู่แบบกลมของ TERM ปัจจุบันของคุณ เพื่อยืนยันว่ามันใช้งานได้ ^ A ^ D เพื่อแยกออกจากหน้าจอของคุณจากนั้นscreen -d -rทำการติดตั้งใหม่แล้วlsลองใหม่สองสามครั้งแล้วลองเลื่อนกลับ มันใช้งานได้สำหรับฉัน


เวทมนตร์นี้คืออะไร? เรามาดูหน้าคู่มือต่างๆกันดีกว่า

screen(1) พูดว่า:

termcapinfo term terminal-tweaks [window-tweaks]
  [..]
  The first argument specifies which terminal(s) should be affected by this
  definition. You can specify multiple terminal names by separating them with
  `|'s. Use `*' to match all terminals and `vt*' to match all terminals that
  begin with "vt".
  [..]
  Some examples:

      termcap xterm*  LP:hs@

  Informs screen that all terminals that begin with `xterm' have firm
  auto-margins that allow the last position on the screen to be updated (LP),
  but they don't really have a status line (no 'hs' -  append  `@'  to turn
  entries off).  Note that we assume `LP' for all terminal names that start
  with "vt", but only if you don't specify a termcap command for that terminal.

จากtermcap(5):

String capabilities
    [..]
    te   End program that uses cursor motion
    ti   Begin program that uses cursor motion

28
ฉันทำตามคำแนะนำของ Pistos และใช้งานได้บางส่วน ในขณะที่เขาอธิบายฉันสามารถป้อนคำสั่งบางอย่าง (เพื่อสร้างผลลัพธ์ที่เพียงพอเพื่อเลื่อนหน้าจอ) จากนั้นใช้ล้อเลื่อนของเมาส์เพื่อเลื่อนกลับไปตามบรรทัดก่อนหน้า ในความเป็นจริงฉันใช้หน้าจอผ่าน Konsole ใน KDE (โดยทั่วไปแท็บ xterm โดยทั่วไป) และแถบเลื่อนสำหรับหน้าต่าง Konsole ทำงานในลักษณะเดียวกัน แต่มีปัญหา: หากคุณสลับระหว่างหน้าต่างของหน้าจอ (^ An, ^ Ap) บัฟเฟอร์การเลื่อนของคุณจะเกิดความสับสน เนื้อหาของหน้าต่างใด ๆ ที่คุณเปลี่ยนไปจะทำให้ 'ซ่อน' ไว้ในบัฟเฟอร์การเลื่อนของคุณ ที่ลดน้อยลงจริงๆ
ไรอันลินช์บี

22
แต่สิ่งนี้จะเลื่อนไปมาในประวัติคำสั่ง ฉันต้องการเลื่อนดูบัฟเฟอร์ผลลัพธ์
JesperE

15
@JesperE: ฉันพบว่ามันเลื่อนประวัติคำสั่งด้วย (ฉันใช้เทอร์มินัล GNOME ของ Ubuntu) ฉันแก้ไขโดยไปที่การแก้ไข -> การตั้งค่าโปรไฟล์ -> การเลื่อนและยกเลิกการเลือก "ใช้การกดแป้นพิมพ์เพื่อเลื่อนบนหน้าจออื่น" โปรดทราบว่าฉันยังต้องใช้การแก้ไขของ Pistos
Michael Krebs

2
นอกเหนือจากการทำงานใน OS X Lion แล้วยังสามารถใช้งานใน Putty, iSSH และ Prompt (โดย Panic) บรรทัดนี้ควรมีอยู่ในไฟล์. screenrc ทั้งหมด!
funroll

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

69

ในหน้าจอแรกคุณต้องเข้าสู่โหมด "scrollback" (หรือ "โหมดถ่ายสำเนา") เพื่อให้สามารถเลื่อนไปรอบ ๆ ในบัฟเฟอร์ scrollback นี้: คำสั่งผสมที่สำคัญCtrl- a EscหรือCtrl- -a Ctrl [จากนั้นคุณสามารถเลื่อนดูประวัติโดยใช้ปุ่มขึ้นและลง (หรือCtrl- b, Ctrl- fเพื่อเลื่อนหน้า)

ในโหมดนั้นล้อเลื่อนของคุณควรทำงานถ้าทำงานในแอพอื่น ๆ คุณท้ายโหมด "scrollback" Escกับ

สำหรับการเลื่อนบัฟเฟอร์การเลื่อนโดยไม่ต้องเข้าสู่โหมดการเลื่อนครั้งแรกซึ่งอาจเป็นไปไม่ได้หากไม่มีการแก้ไขหน้าจอ ฉันไม่เคยได้ยินวิธีเข้าถึงบัฟเฟอร์การเลื่อนนอกเหนือจากโหมดการเลื่อน


21
ใช่ฉันรู้เกี่ยวกับโหมด scrollback ฉันหวังว่าฉันจะไม่ต้องเข้าโหมด scrollback ด้วยตนเองเพื่อใช้เมาส์ ขอบคุณ
JesperE

4
"โหมด Scrollback" เป็นคำที่ค่อนข้างไม่เป็นทางการ IMHO :) Ctrl + a Escจะเข้าสู่โหมดคัดลอก ; โหมดนี้มักถูกเรียกว่าเป็นจุดประสงค์หลักของมันเพื่อให้สามารถคัดลอกข้อความไปมาได้ ความเป็นไปได้ที่จะเลื่อนด้วยล้อเลื่อนของเมาส์ในโหมดคัดลอก (nb. ใช้งานไม่ได้สำหรับฉัน) ควรถูกมองว่าเป็น "กลไกเพิ่มเติม" แต่ไม่ได้เป็นวัตถุประสงค์หลักของโหมดนี้
ไวยากรณ์

1
@syntaxerror: อืม docs เรียกมันว่า "copy / scrollback mode" และพูดถึง "scrollback buffer" ( gnu.org/software/screen/manual/screen.html#Copy-and-Paste ) ดังนั้นฉันจึงเดาว่า ' ทั้งขวา :-) อย่างไรก็ตามฉันเพิ่ม "โหมดการคัดลอก" ในคำตอบของฉัน
sleske

ที่ดี! ฉันต้องการทำเช่นนี้ แต่ก่อนที่จะพูดคุยกับคำตอบเก่า ๆ ฉันรู้จักถามก่อน (ถึงแม้ว่าฉันรู้ว่ากฎ SO / SE ไม่ได้กำหนดไว้ แต่นั่นเป็นสิ่งที่มีกฎที่ไม่ได้เขียนไว้)
syntaxerror

นี่ควรเป็นคำตอบอย่างเป็นทางการ ขอบคุณ :)
Linh

24

บทความที่ยอดเยี่ยมที่ Jon Z อ้างถึงไม่สามารถใช้งานได้อีกต่อไป แต่ฉันสามารถตกปลาในแคชข้อความของ Google ในรูปแบบข้อความอย่างเดียวได้ ฉันบันทึกไว้ที่นี่ในกรณีที่ Google ลดขนาดลงเช่นกันในอนาคต โพสต์ต้นฉบับคือโดย Mikael Ståldalดังนั้นเครดิตที่ถึงกำหนดเครดิต

-

วิธีใช้เมาส์วีลในหน้าจอ GNU

หน้าจอ GNU มีการรองรับ scrollback แต่โดยค่าเริ่มต้นคุณต้องใช้ปุ่มที่น่าอึดอัดใจเพื่อใช้งาน ฉันต้องการใช้ Shift-PageUp, Shift-PageDown และเมาส์วีลเพื่อเลื่อนเหมือนที่คุณสามารถทำได้ใน xterm

ไม่ใช่เรื่องง่ายที่จะกำหนดค่าหน้าจอสำหรับสิ่งนี้และเกี่ยวข้องกับความร่วมมือกับเทอร์มินัลอีมูเลเตอร์ แต่ในที่สุดฉันก็จัดการเพื่อให้ได้โซลูชันที่ใช้งานได้ดี เพิ่มไฟล์นี้ลงในไฟล์ ~ / .Xresources ของคุณ (คุณต้องออกจากระบบเพื่อให้มีผล):

XTerm*saveLines: 0
XTerm*vt100.translations: #override \n\
  Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  Lock @Num_Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  @Num_Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  <Btn4Down>: string(0x1b) string("[5S") \n\
  Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  Lock @Num_Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  @Num_Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  <Btn5Down>: string(0x1b) string("[5T") \n\
  Shift <KeyPress> Prior: string(0x1b) string("[25S") \n\
  Shift <KeyPress> Next: string(0x1b) string("[25T") \n

จากนั้นเพิ่มไฟล์นี้ลงในไฟล์ ~ / .screenrc ของคุณ:

defscrollback 1000

# Scroll up
bindkey -d "^[[5S" eval copy "stuff 5\025"
bindkey -m "^[[5S" stuff 5\025

# Scroll down
bindkey -d "^[[5T" eval copy "stuff 5\004"
bindkey -m "^[[5T" stuff 5\004

# Scroll up more
bindkey -d "^[[25S" eval copy "stuff \025"
bindkey -m "^[[25S" stuff \025

# Scroll down more
bindkey -d "^[[25T" eval copy "stuff \004"
bindkey -m "^[[25T" stuff \004

สิ่งนี้ทำงานใน xterm ฉันไม่แน่ใจว่ามันใช้งานได้ในโปรแกรมเลียนแบบเครื่องอื่น

โปรดทราบว่านี่เป็นการปิดการสนับสนุนการเลื่อนปกติใน xterm คุณจะสามารถเลื่อนได้เมื่อใช้หน้าจอเท่านั้น คุณอาจต้องการเริ่ม xterm เช่นนี้เพื่อใช้หน้าจอเสมอ:

xterm -e screen

13

สำหรับ OS X (Snow Leopard) การทำงานต่อไปนี้สำหรับฉัน:

http://slaptijack.com/system-administration/mac-os-x-terminal-and-gnu-screen-scrollback/

สั้น ๆ มันเกี่ยวข้องกับการเพิ่มสิ่งต่อไปนี้ไปยัง ~ / .screenrc บนโฮสต์ระยะไกล (อันที่คุณใช้งานอยู่บนหน้าจอ):

defscrollback 5000
termcapinfo xterm* ti@:te@

11

และเพื่อใช้ล้อเลื่อนใน VIM ภายในหน้าจอ GNU:

[.vimrc]

set mouse=a             " hold shift to copy xterm
set ttymouse=xterm2     " necessary for gnu screen & mouse

ที่น่ากลัวนี้รวมกันด้วยเคล็ดลับ screenrc ทำให้วันของฉันตั้งแต่ฉันใช้ awesomewm และอาคารคือชีวิตของฉัน
Fotios

7

กดCtrl+ aตามด้วย[

ตอนนี้แถบหัวเรื่องของเทอร์มินัลของคุณควรเป็นโหมดคัดลอก

ตอนนี้ปุ่มลูกศรและล้อเลื่อนของเมาส์ควรทำงานตามที่คาดไว้

ในการกลับสู่ปกติกด Esc หรือกด Enter สองสามครั้ง


5

การตั้งค่าTERMตัวแปรเป็นvt100แทนxtermก่อนที่หน้าจอที่ทำงานจะทำงานได้เช่นกัน
ฉันใช้มันมานานแล้วใช้งานได้เหมือนมีเสน่ห์

เพิ่มลงในของคุณ.bashrc:

# make scrollbar / wheel scrolling work when running screen in gnome-terminal (or other)
if [ "$TERM" = "xterm" ]; then
  export TERM=vt100
fi

-

สำหรับการอ้างอิงของฉัน.screenrcมีสิ่งนี้ (ไม่จำเป็นสำหรับ AFAIK นี้):

# Extend the vt100 desciption by some sequences.
termcap  vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC
terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC

การตั้งค่าตัวแปรสภาพแวดล้อม TERM ตามที่อธิบายไว้ (ก่อนที่จะรันหน้าจอ) นั้นเหมาะกับฉัน ง่ายเหมือนการป้อนใน "export TERM = vt100" ขอบคุณมาก. PS: ฉันบน Mac, ssh ลงในกล่อง Linux และที่นั่นฉันเรียกใช้หน้าจอ
Daniel K.

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

วิธีแก้ปัญหาที่ underrated มาก
MolbOrg


3

หากคำตอบดังกล่าวข้างต้นจะไม่ได้ทำงานสำหรับคุณให้แน่ใจว่าคุณไม่ได้มีคำบรรยายใต้ภาพหรือalwayslastlineชุดตัวเลือกใน .screenrc ของคุณ หากคุณมีพวกเขาสิ่งนี้จะไม่ทำงาน:

termcapinfo xterm* ti@:te@

หากคุณต้องการข้อมูลนี้คุณสามารถลองตั้งค่าในชื่อของเครื่องของคุณ (ด้วยtermcapinfo)


0

วิธีแก้ปัญหาเมื่อใช้ "Ubuntu 16.04.2 LTS" เป็นดังนี้:

ก) อัปเดต$ HOME / .screenrcตามคำตอบก่อนหน้านี้ที่ระบุไว้:

termcapinfo xterm* ti@:te@

ข) ใช้ "การตั้งค่า" "แอปพลิเคชันที่ต้องการ" เพื่อเปลี่ยนเทอร์มินัลเริ่มต้นเป็น xterm โดยเลือก "X Terminal" อันใดอันหนึ่งในรายการแบบหล่นลง

บางบันทึกฟุ่มเฟือย

  • ไม่มีเทอร์มินัลอื่นใดรวมถึงการติดตั้ง "lxterminal" ใช้งานได้สำหรับฉันแม้ว่าฉันจะเปลี่ยนบรรทัด termcapinfo เป็น "*" แทน "xterm *"

  • ด้วยการคลิกปุ่มเมนูที่มุมบนซ้ายของหน้าจอคุณจะได้รับกล่องโต้ตอบการตั้งค่าโดยใช้ไอคอนที่ 3 จากมุมขวาล่าง

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