【问题标题】:Using the scrollwheel in GNU screen在 GNU 屏幕中使用滚轮
【发布时间】:2010-09-26 10:11:04
【问题描述】:

如何设置 GNU 屏幕以允许鼠标滚轮在回滚缓冲区中滚动?我试图通过 Google 了解这一点,但大多数点击都是关于如何允许屏幕内的应用程序使用滚轮。

【问题讨论】:

  • JesperE - 你能改变选择的答案吗?我很困惑,cmets 是对的,另一个答案要好得多。
  • 现在不使用屏幕,但赞成票似乎足够有说服力。 :)

标签: mousewheel gnu-screen


【解决方案1】:

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

【讨论】:

  • 我听从了 Pistos 的建议,并且部分奏效了。正如他所描述的,我可以输入一些命令(以产生足够的输出来滚动屏幕),然后使用鼠标滚轮向后滚动前面的行。事实上,我在 KDE 中通过 Konsole 使用屏幕(基本上是选项卡式 xterm),并且 Konsole 窗口的滚动条的工作方式相同。但是有一个问题:如果你在屏幕的窗口之间切换(^A-n,^A-p),你的回滚缓冲区就会变得混乱。您切换到的任何窗口的内容都将“隐藏”到您的回滚缓冲区中。这真的会减少它。
  • 但这会在命令历史记录中滚动。我想滚动输出缓冲区。
  • @JesperE:我也体验过滚动命令历史记录(我使用的是 Ubuntu 的 GNOME 终端)。我通过转到编辑-> 配置文件首选项-> 滚动并取消选中“使用击键在备用屏幕上滚动”来修复它。请注意,我仍然需要使用 Pistos 的修复程序。
  • 除了在 OS X Lion 中工作外,这也适用于 Putty、iSSH 和 Prompt(由 Panic 提供)。此行应该存在于所有 .screenrc 文件中!
  • 这允许在终端中滚动而不是在屏幕会话中滚动。 IE。如果您使用分割区域或切换窗口,您将无法在该区域中向后滚动,而是在终端输出中向后滚动并查看分割区域或更改窗口之前的输出。
【解决方案2】:

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

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

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

【讨论】:

  • 是的,我知道回滚模式。我希望我不必为了使用鼠标而手动进入回滚模式。谢谢。
  • “回滚模式”是一个非官方的术语恕我直言。 :) Ctrl+a Esc 将进入复制模式;这种模式一直被称为 that,因为它的主要目的是使来回复制文本成为可能。在复制模式下使用鼠标滚轮滚动的可能性(nb. 对我不起作用)应该被视为一种“额外的噱头”,而不是这种模式的主要目的。
  • @syntaxerror:好吧,文档称之为“复制/回滚模式”,并提到了“回滚缓冲区”(gnu.org/software/screen/manual/screen.html#Copy-and-Paste),所以我想我们都是对的 :-)。无论如何,我在答案中添加了“复制模式”。
  • 太棒了!我也想这样做,但在搞砸这些旧答案之前,我以先问而闻名(尽管我知道 SO/SE 规则没有规定它;但这就是不成文规则的事情。)
  • 这应该是官方的回答。谢谢你:)
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

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

    defscrollback 5000
    termcapinfo xterm* ti@:te@
    

    【讨论】:

      【解决方案5】:

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

      [.vimrc]

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

      【讨论】:

      • 太棒了,这与 screenrc 技巧相结合让我很开心,因为我使用了 awesomewm,终端就是我的生命
      【解决方案6】:

      Ctrl+a 然后按 [

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

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

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

      【讨论】:

        【解决方案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
        

        【讨论】:

        • 按照描述设置环境变量 TERM(在运行屏幕之前)对我有用。就像键入“export TERM=vt100”一样简单。非常感谢。 PS:我在 Mac 上,通过 ssh 进入 Linux 机器并在那里运行屏幕。
        • 如上所述,这不能按预期工作。是的,您可以滚动,但是当您更改窗口时,您的滚动缓冲区会被覆盖。
        • 非常被低估的解决方案
        • 同意@MolbOrg。这是最接近合理解决方案的事情。这让我想再看看 tmux。
        • 不完美,但可以完成工作。我认为这应该是公认的答案。
        【解决方案8】:

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

        terminfo xterm* ti=:te=
        

        【讨论】:

          【解决方案9】:

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

          termcapinfo xterm* ti@:te@
          

          如果您需要此信息,可以尝试在终端标题中设置(使用termcapinfo

          【讨论】:

            【解决方案10】:

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

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

            termcapinfo xterm* ti@:te@
            

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

            一些多余的注释

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-09-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-08-24
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多