Windows 终端中的终端分页

Windows 终端中的终端分页

我最近不得不设置一台 Windows 计算机。我通常远程登录 Linux 机器(Ubuntu)进行开发,因此我使用“Windows 终端”应用程序和 Windows 内置的 ssh 客户端登录我的 Linux 机器。现在我注意到我无法使用触控板/鼠标滚动浏览

  1. git 日志
  2. 手册页
  3. git 差异

我不得不求助于箭头键,这不是我喜欢的方法。我还没能弄清楚paging在这个工作流程中谁负责 -

  • Windows 终端
  • Windows 的 ssh 客户端
  • 我的 Linux 机器的寻呼机设置(默认寻呼机设置在less那里)

我曾在 Windows 上尝试过 Alacritty,结果相同,我也尝试过 WSL Ubuntu(在 Windows 终端内)通过 ssh 登录到远程 Linux 机器,但都徒劳无功。

有人可以帮助我理解如何在此设置中启用分页支持/触控板鼠标滚动支持吗?

答案1

从某种程度上来说,两者兼而有之。

虽然终端有自己的“回滚”功能(你可以用鼠标或滚动条访问),但全屏程序(包括像“less”这样的分页程序)在运行时会故意禁用它(它们会启用所谓的备用屏幕模式(用于全屏操作)无法控制终端的回滚,因此他们无法在这种模式下禁用终端级滚动,所有滚动/分页均由“less”自定义完成。

(从某种意义上来说,这是整个点使用终端内分页器,而不是仅仅将整个文本转储到终端并在终端级别滚动。通过内部滚动,“less”可以从文件顶部开始,并允许您滚动向下,而不是总是落到最底层。)

您的主要问题是“less”分页器根本不支持鼠标。(终端程序请求直接接收鼠标输入1 - 例如,您会在 Vim 或 Elinks 或 WeeChat 中找到原生鼠标滚轮支持 - 但“less”寻呼机不会这样做。)

在完整的 Ubuntu 环境中,当您能够以某种方式使用“less”中的滚轮滚动时,这实际上是终端将滚轮事件转换为虚假的向上/向下箭头按键 - 如果应用程序尚未激活直接鼠标输入,GNOME 终端在备用屏幕模式处于活动状态时始终会执行此操作。

(作为一个实际的例子,如果您使用 手动要求终端切换到 altscreen 模式tput smcup,并且如果您使用 GNOME 终端,那么鼠标滚轮将开始滚动浏览您的 shell 历史记录。tput rmcup让您返回。)

因此,第二个问题是 Windows Terminal 也不提供滚轮事件模拟。它支持向支持鼠标的程序发送真实的滚轮事件(同样,您可以在使用 Windows 终端时在 Vim 中进行滚轮滚动),但滚轮到箭头主要是 GNOME 终端和其他基于 vte 的终端所独有的。

您的选择是:

  • 打开功能请求https://github.com/microsoft/terminal/用于滚动模拟功能(如果还没有的话)。
  • 使用具有本机鼠标事件支持的分页器(例如,PAGER=elinksvimpager使用 Vim 作为分页器)。
  • 通过 WSLg 或 X11 使用 GNOME 终端(或其他基于 vte 的终端),而不是 Windows 终端。
  • 根本不要使用寻呼机,而要依靠终端的回滚。

1然而,由于 Windows 中终端 API 的工作方式,SSH 并非 100% 透明(例如 ssh.exe 必须刻意请求“类 Unix 终端”模式,而不是传统的“WinNT 控制台”模式),而且重要的是,Windows 的旧版本 OpenSSH(我认为是 7.4p1)无法中继任何鼠标事件传输到远程端。此问题现已修复 – 如果您至少使用的是 Windows 20H2 并且拥有 OpenSSH 8.1p1 或更新版本。

答案2

在 Windows 上,使用免费的自动热键

一个简单的 AutoHotkey 脚本很容易编写,但更复杂、更可配置的 AutoHotkey 脚本可以在 拖动滚动

要运行,请在安装 AutoHotKey 后下载.zipDragToScroll 存储库并解压到一个文件夹,然后DragToScroll.ahk 双击运行。默认情况下,滚动是通过使用鼠标右键/触控板按钮拖动窗口来完成的。

您可以通过右键单击托盘栏中的绿色 H 图标并选择“退出”来停止脚本。

您也可以右键单击 H 图标并选择“设置”来配置脚本。您可以配置滚动方法、滚动速度、将其操作限制为单个进程(例如powershell.exe)等。

为了使其在登录时运行,请将其放在启动组中
C:\Users\USER-NAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

相关内容