在屏幕内用鼠标滚轮滚动

在屏幕内用鼠标滚轮滚动

我使用screen简单的状态行。如果我要滚动什么,我使用Ctrl+aESC进入复制模式,然后我可以使用键盘滚动。这对于多个缓冲区和分割也非常有效。

我的问题是:如何配置屏幕以使用鼠标滚轮滚动?

注 1:使用鼠标滚轮我可以在终端内滚动,但这根本不适用于多个缓冲区和分割。

注2: termcapinfo xterm* ti@:te@ 解决方案没有帮助,因为它使用终端滚动。这与状态行、多个缓冲区和分割不兼容。

恕我直言,最好的解决方案是:

  • 在复制模式下,鼠标滚轮用于滚动,就像键盘阵列一样。
  • 如果屏幕处于正常模式并且鼠标滚轮事件“向上滚动”到来,则屏幕切换到复制模式并处理该事件
  • 如果屏幕处于复制模式并且鼠标滚轮事件“向下滚动”到来,即到达底部,屏幕离开复制模式
  • 屏幕状态行始终可见并刷新(如果使用键盘滚动,则已经可以使用)

答案1

screen才不是知道关于滚轮鼠标。它只知道终端及其键盘发送的键(包括转义序列):

  • screen知道鼠标点击(其源代码仅提到“鼠标左键单击”)。您可以阅读源代码(显示.c)看看它的作用仅此而已(这一点,特别是screen,是解码鼠标事件的唯一地方)。
  • xterm 鼠标协议将发送按钮 4 和 5 来指示滚轮鼠标。 screen对此一无所知;终端中运行的应用程序可能会对其进行特殊处理。
  • 某些终端会在备用屏幕中发送光标键来模拟向上/向下滚动。 screen(如预期)也将其传递给应用程序。

相关内容