在GNU屏幕中使用滚轮

时间:2008-12-11 12:01:42

标签: gnu-screen scrollwheel

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

10 个答案:

答案 0 :(得分:322)

我相信你可以在~/.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

答案 1 :(得分:64)

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

在该模式下,如果鼠标滚轮适用于其他应用程序,它也应该可以正常工作。 使用 Esc 结束“回滚模式”。

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

答案 2 :(得分:23)

Jon Z所指的优秀文章已不再可用,但我能够从Google缓存中获取纯文本版本。我将它保存在这里以防Google将来放弃它。 MikaelStåldal的原始帖子是信用到期的信用。

-

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

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

答案 3 :(得分: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@

答案 4 :(得分:10)

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

[。的vimrc]

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

答案 5 :(得分:5)

Ctrl + a ,然后按 [

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

现在箭头键和鼠标滚轮应该按预期工作。

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

答案 6 :(得分:4)

在运行屏幕之前将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

答案 7 :(得分:3)

以下在Cygwin和Putty中为我工作: 编辑.screenrc并添加

terminfo xterm* ti=:te=

答案 8 :(得分:3)

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

<table class="table table-striped " ng-show="tableR">
    <thead>
      <tr>
        <th>i Value</th>
        <th>j Value</th>
        <th>iternation Number Value</th>
        <th>results</th>
      </tr>
    </thead>
    <tbody>
      <tr ng-repeat="x in data">
        <td>{{x.i}}</td>
        <td>{{x.j}}</td>
        <td>{{x.iterationNumber}}</td>
        <td>
            <ul>
                <li ng-repeat="r in x.results">
                    {{ r }}
                </li>
            </ul>
        </td>
      </tr>
    </tbody>
  </table>

如果您需要此信息,可以尝试在终端的标题中进行设置(使用<html> <head> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css"> </head> <body> <i class"fa-television"></i> television </body> </html>

答案 9 :(得分:0)

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

A)。如先前的答案所指定的那样更新 $ HOME / .screenrc

termcapinfo xterm* ti@:te@

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

一些多余的笔记

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

  • 点击屏幕左上角的菜单按钮即可 可以使用右下方的第3个图标获取“设置”对话框 角。