267

如何设置 GNU 屏幕以允许鼠标滚轮在回滚缓冲区中滚动?我试着用谷歌搜索这个,但大多数点击都是关于如何允许屏幕内的应用程序使用滚轮。

4

10 回答 10

378

我相信你可以在你的~/.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
于 2009-07-14T14:54:46.803 回答
76

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

在该模式下,您的鼠标滚轮也应该可以工作,如果它在其他应用程序中工作的话。你用 . 结束“回滚模式” Esc

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

于 2009-01-24T02:01:32.273 回答
24

Jon Z 所指的优秀文章不再可用,但我能够从 Google 缓存中找到它的纯文本版本。我把它保存在这里,以防谷歌将来也放弃它。原始帖子由 Mikael Ståldal 撰写,因此应归功于应得的信用。

--

如何在 GNU Screen 中使用鼠标滚轮

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

为此配置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
于 2010-08-13T07:22:28.563 回答
13

对于 OS X (Snow Leopard),以下对我有用:

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

简而言之,它涉及将以下内容添加到远程主机上的 ~/.screenrc(您正在运行 screen 的主机):

defscrollback 5000
termcapinfo xterm* ti@:te@
于 2012-11-29T14:58:42.813 回答
12

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

[.vimrc]

set mouse=a             " hold shift to copy xterm
set ttymouse=xterm2     " necessary for gnu screen & mouse
于 2011-10-24T16:09:26.007 回答
8

Ctrl+a后跟[

终端的标题栏现在应该显示复制模式。

现在箭头键和鼠标滚轮应该可以正常工作了。

要恢复正常,请按 Esc 或按 Enter 几次。

于 2012-11-12T12:24:14.363 回答
7

在运行屏幕之前将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
于 2014-10-06T07:02:38.950 回答
5

以下在 Cygwin 和 Putty 中都对我有用:编辑 .screenrc 并添加

terminfo xterm* ti=:te=
于 2014-01-20T13:51:47.140 回答
3

如果上面的答案对您不起作用,请确保您的 .screenrc 中没有设置标题alwayslastline选项。如果你有它们,这将不起作用:

termcapinfo xterm* ti@:te@

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

于 2017-02-14T20:28:53.627 回答
3

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

一种)。更新$HOME/.screenrc之前的答案已指定:

termcapinfo xterm* ti@:te@

乙)。使用“设置”。“首选应用程序”将默认终端更改为 xterm,方法是在下拉列表中选择“X 终端”。

一些多余的注释

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

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

于 2017-07-22T12:56:33.973 回答