如何减少寻呼机响应滚轮而不清除屏幕

Kev*_* G. 14 linux mouse terminal bash scrolling

我知道诸如how-to-make-mouse-wheel-scroll-the-less-pager-using-bash-and-gnome-terminal 之类的答案,即-X从 $LESS 环境变量中删除标志。但我想同时做这两件事:

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

有什么办法可以让我的蛋糕也吃掉吗?

egm*_*ont 20

并非没有破解less的源代码。一点背景故事:

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

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

许多终端模拟器发现,当它处于交替屏幕模式并且在其中运行的应用程序对鼠标事件不感兴趣时​​,将滚动转换为向上或向下按键事件是有意义的。这是一种黑客行为,无论是在正常屏幕上(想象一下会发生什么,例如在您的 shell 提示下),或者当应用程序希望处理鼠标时(当然,他们必须看到实际的鼠标事件),它都是有害的。但是由于默认情况下这两个都不会在您运行时保持less,因此此 hack 开始(取决于支持它的终端模拟器,并通过\e[?1007hvs.启用)。\e[?1007l)。您的滚动事件由终端模拟器转换为 Up 和 Down 按键,并且 less 无法将它们与实际按键区分开来。它不接收鼠标滚动事件:它会看到向上和向下按键。

所以你是这样的:要么你切换到备用屏幕,终端的 hack 将滚动事件转换为按键更少,当你退出时恢复正常屏幕;或者你不这样做,然后就不可能有任何魔法将滚动事件转换为按键,而且不太了解滚动事件。

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

在实践中,它基本上归结为:对不起,忘记它。