1

在 OS X Yosemite 的终端应用程序中,您现在可以使用鼠标在 vim/less/whatever 中滚动。如何检测正在运行的程序是否支持这种滚动?

4

2 回答 2

7

想要支持滚动的程序会向终端发送一个转义序列,以启用鼠标输入,例如,\e[?1002h用于报告按钮点击。然后,只要您单击鼠标,终端就会将控制代码发送回程序,告诉它您单击了哪个按钮以及单击的位置。通过鼠标点击按钮 4 和 5 发送向上或向下滚动。

请参阅从XTerm 控制序列文档的第 29 页开始的“鼠标跟踪”部分 。

在 bash 中试试这个:

$ echo $'\e[?1002h'
$ hexdump -C
... click and scroll a bit, then hit enter...
^[[Ma7*^[[Ma7*^[[M`7*^[[M`7*^[[M`7*^[[M`7*^[[Ma7*^[[Ma7*^[[M`1.^[[M`1.
00000000  1b 5b 4d 61 37 2a 1b 5b  4d 61 37 2a 1b 5b 4d 60  |.[Ma7*.[Ma7*.[M`|
00000010  37 2a 1b 5b 4d 60 37 2a  1b 5b 4d 60 37 2a 1b 5b  |7*.[M`7*.[M`7*.[|
00000020  4d 60 37 2a 1b 5b 4d 61  37 2a 1b 5b 4d 61 37 2a  |M`7*.[Ma7*.[Ma7*|
^C
Returned 130 (SIGINT).

启动鼠标跟踪的程序(在本例中为 bash)接收鼠标输入作为标准输入上的编码内容。

十年来,开源MouseTerm 插件一直在 Terminal.app 中启用滚动。您可以查看其源代码以获取详细信息。

于 2014-07-21T04:45:10.787 回答
7

优胜美地终端侦听备用屏幕转义序列。如果您转到首选项→设置→键盘,您可以看到“滚动备用屏幕”选项。

有关 xterm 的备用屏幕功能的更多信息:

在 VT102 模式下,有转义序列来激活和停用备用屏幕缓冲区,该缓冲区与窗口的显示区域大小相同。激活后,当前屏幕将被保存并替换为备用屏幕。在恢复正常屏幕之前,禁用从窗口顶部滚动的行的保存。xterm 的 termcap(5) 条目允许可视化编辑器 vi(1) 切换到备用屏幕进行编辑并在退出时恢复屏幕。

于 2014-07-21T08:28:46.597 回答