如何让 Less Pager 响应滚轮而不清除屏幕

如何让 Less Pager 响应滚轮而不清除屏幕

我知道的答案包括如何使用 bash 和 gnome 终端制作鼠标滚轮滚动的无页页程序,即-X从 $LESS 环境变量中删除该标志。但我想这样做两个都这些:

  1. 使用鼠标滚轮滚动分页器(而不是滚动终端窗口的滚动条)(您可以通过移除 -X$LESS
  2. 让寻呼机的内容在退出后保留在屏幕上(通常通过添加 -X$LESS)。

有什么办法可以让我鱼与熊掌兼得吗?

答案1

如果不破解 less 的源代码,那就不行了。背景故事:

Less 根本无法处理鼠标(包括滚动事件)。

终端仿真器支持所谓的备用屏幕。大多数全屏应用在运行时会切换到此屏幕(退出时会切换回正常屏幕,导致之前的内容“恢复”),并且它没有回滚缓冲区。Less 也会切换到此备用屏幕,除非-X给出 ,在这种情况下不会。

许多终端仿真器发现,当它处于交替屏幕模式时内部运行的应用程序对鼠标事件不感兴趣,将滚动转换为向上或向下按键事件是有意义的。 这是一种 hack,它在正常屏幕上(想象一下在您的 shell 提示符下会发生什么)或者当应用程序希望处理鼠标时(当然,它们必须看到实际的鼠标事件)都会有害。 但是由于默认情况下这两个在运行时都不起作用,所以这种 hack 就会起作用(取决于终端仿真器是否支持它,并通过vs.less启用)。 终端仿真器将您的滚动事件转换为向上和向下按键,而 less 无法将它们与实际按键区分开来。 它不接收鼠标滚动事件:它看到向上和向下按键。\e[?1007h\e[?1007l

所以,你要么切换到备用屏幕,然后终端的黑客将滚动事件转换为按键,然后在退出时恢复正常屏幕;或者你不这样做,那么就不可能有任何魔法将滚动事件转换为按键,而less无法理解滚动事件。

那么该怎么办呢?好吧,要么在 less 中实现鼠标支持并让它自己处理滚动事件(并使用非默认的单击或复制粘贴行为),要么实现另一个奇怪的 hack:退出时,在恢复到正常屏幕后,less可以最后一次打印一屏内容,重复退出前显示的内容。

实际上,它基本上可以归结为:对不起,忘了它吧。

答案2

显然,升级到 530 或更新版本将获得所需的功能,

http://www.greenwoodsoftware.com/less/news.530.html

版本 487 和版本 530 之间的区别如下:

如果使用 -F 并且文件适合一个屏幕,则不要输出终端初始化序列。

没有找到任何具有较新版本的“less”PPA,因此只需下载源包并在本地构建并安装它。

并像这样配置 git:

git config --global core.pager 'less -F -S -R -i -+X'

更多信息: 如何使用“less -F”而不使用“-X”,但仍显示只有一页的输出?

答案3

在 less pager 中实际上无法使用鼠标滚轮滚动,但使用 w3m pager 可以使用鼠标滚轮滚动内容!w3m 是一个“具有出色表格/框架支持的 WWW 可浏览分页器“,因此甚至可以将其用作控制台 Web 浏览器。此外,还可以将 w3m 用作控制台图像查看器(并非适用于所有终端仿真器,但与 xterm 配合得很好)。w3m”支持表格、框架、SSL 连接、颜色和内嵌图像“非常有用的应用程序! 截屏

相关内容