在GNU屏幕中使用滚轮


254

如何设置GNU屏幕以允许鼠标的滚轮在回滚缓冲区中滚动?我曾尝试向Google询问此问题,但大多数热门话题是如何允许屏幕内的应用程序使用滚轮。


JesperE-您可以更改选择的答案吗?我很困惑,评论是正确的,另一个答案更好。
杰夫2014年

如今不使用屏幕,但投票似乎令人信服。:)
JesperE 2014年

Answers:


359

我相信您可以将这样的一行添加到您的~/.screenrc

termcapinfo xterm* ti@:te@

其中“ xterm *”是您当前术语的全局匹配。为了确认它是否有效,请^ 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的建议,并且部分可行。正如他所描述的,我可以输入一些命令(以产生足够的输出来滚动屏幕),然后使用鼠标滚轮在前几行中向后滚动。实际上,我在KDE中通过Konsole使用屏幕(基本上是选项卡式xterm),并且Konsole窗口的滚动条以相同的方式工作。但是有一个问题:如果您在屏幕的各个窗口之间切换(^ An,^ Ap),则回滚缓冲区就会混乱。您切换到的所有窗口的内容都只会“塞入”到您的回滚缓冲区中。确实减少了它。
Ryan B. Lynch,2009年

22
但这会在命令历史记录中滚动。我想滚动浏览输出缓冲区。
JesperE 2010年

15
@JesperE:我也经历了滚动命令历史记录的过程(我正在使用Ubuntu的GNOME终端)。我通过转到“编辑”->“配置文件首选项”->“滚动”,然后取消选中“使用击键在备用屏幕上滚动”来修复它。请注意,我仍然需要使用Pistos的修复程序。
Michael Krebs

2
除了在OS X Lion中工作之外,它还可以在Putty,iSSH和Prompt(由Panic负责)中工作。所有.screenrc文件中都应存在此行!
funroll 2012年

20
这样可以在终端中滚动而不在屏幕会话中滚动。即,如果您使用分割区域或切换窗口,则将无法在该区域中向后滚动,而是将在终端输出中向后滚动,并在分割区域或更改窗口之前按原样查看输出。
g_daniel 2013年

69

在屏幕上,你必须先进入“回滚模式”(或“复制模式”)能在滚动缓冲区左右滚动:按组合键Ctrl- a EscCtrl- - 。a Ctrl [然后,您可以使用向上和向下键(或Ctrl- bCtrl- f移动页面)在历史记录中滚动。

在这种模式下,如果鼠标滚轮也可以在其他应用程序中使用,则鼠标滚轮也应该可以工作。您以结束“滚动模式” Esc

至于在没有先进入回滚模式的情况下滚动回滚缓冲区,不修改屏幕可能是不可能的。除了回滚模式之外,我从未听说过访问回滚缓冲区的方法。


21
是的,我知道回滚模式。我希望我不必手动进入回滚模式即可使用鼠标。谢谢。
JesperE

4
“回滚模式”是非官方的恕我直言。:) Ctrl + a Esc将进入复制模式;这种模式一直被称为,因为它的主要目的是使来回复制文本成为可能。在复制模式下使用鼠标滚轮滚动的可能性(不适用于我)应该被看作是一种“附加头”,而不是该模式的主要目的。
语法错误2014年

1
@syntaxerror:好吧,文档称其为“复制/回滚模式”,并提到了“回滚缓冲区”(gnu.org/software/screen/manual/screen.html#Copy-and-Paste),所以我想我们都正确:-)。无论如何,我在答案中添加了“复制模式”。
sleske 2014年

大!我也想这样做,但是在陷入如此古老的答案之前,我先问清楚了(尽管我知道SO / SE规则并没有规定;但这就是不成文的规则。)
语法错误

这应该是官方的答案。谢谢您:)
Linh

24

Jon Z所指的出色文章不再可用,但是我能够从Google缓存中获取纯文本版本。我将其保存在此处,以防Google将来也删除它。原始帖子由MikaelStåldal撰写,因此应在应归还的情况下归功于此。

--

如何在GNU屏幕中使用鼠标滚轮

GNU屏幕支持回滚,但是默认情况下,您必须使用笨拙的键才能使用它。我希望能够像使用xterm一样使用Shift-PageUp,Shift-PageDown和鼠标滚轮滚动。

为此,配置Screen并不容易,它涉及与终端仿真器的合作。但是我终于设法实现了一个效果很好的解决方案。将其添加到〜/ .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中的常规滚动支持,只有在使用Screen时才能滚动。您可能想要像这样启动xterm来始终使用Screen:

xterm -e screen


11

并在GNU屏幕内的VIM中使用滚轮:

[.vimrc]

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

太棒了,自从我使用awesomewm以来,这与screenrc技巧相结合就成了我的生活,而终端就是我的生活
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 2015年

被低估的解决方案
MolbOrg '19


3

如果以上答案对您不起作用,请确保您在.screenrc中没有设置标题alwayslastline选项。如果有它们,将无法使用:

termcapinfo xterm* ti@:te@

如果您需要此信息,可以尝试在终端的标题中进行设置(带有termcapinfo


0

使用“ Ubuntu 16.04.2 LTS”时的解决方案如下:

一个)。更新$ HOME / .screenrc作为先前的答案已指定:

termcapinfo xterm* ti@:te@

b)。通过在下拉列表中选择“ X Terminal”,使用“设置”。“首选应用程序”将默认终端更改为xterm。

一些多余的音符

  • 即使我将termcapinfo行更改为“ *”而不是“ xterm *”,其他终端(包括安装“ lxterminal”)也没有为我工作。

  • 通过单击屏幕左上角的菜单按钮,可以使用右下角的第3个图标进入“设置”对话框。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.