Terminal: [终端] VT 鼠标支持

创建于 2019-05-08  ·  38评论  ·  资料来源: microsoft/terminal

  • 您的 Windows 内部版本号:(在 Windows 命令提示符下键入ver

10.0.18890.1000

  • 您正在做什么以及正在发生什么:(复制和粘贴特定命令及其输出,或包括屏幕截图)

我经常在 tmux 和 WSL 中使用鼠标模式进行窗口选择、窗格调整大小和回滚,在 tmux.conf 中启用,因此:

  # -- mouse support ---------------------------------------------------------                                                                                                                                                                                        
  # Enable mouse control (clickable windows, panes, resizable panes)                                                                
  set -g mouse on

虽然这在 conhost 中运行良好,但在终端中根本不起作用; 什么也没有发生,就好像鼠标事件从未到达 tmux 一样。

  • 出了什么问题/应该发生什么:

tmux 鼠标支持(可能还有其他支持鼠标的应用程序)应该像在 conhost 中一样工作。

Area-Input Area-VT Issue-Feature Product-Terminal Resolution-Fix-Committed

最有用的评论

我迫不及待地等待它出现在未来的版本中——我一直点击 tmux 窗格,希望鼠标能正常工作:)

所有38条评论

是的,这是目前已知的问题。 我们需要在两个地方添加对鼠标的支持:在终端中,能够合成鼠标序列,在 conpty 中能够读取鼠标序列。

这个问题是跟踪第一个位,终端功能。

对于第二位,conpty 部分,请参阅 #376。

遗憾的是,这不起作用,将鼠标事件与 TMUX 一起使用会推迟对多个窗格的需求。
我希望这个功能在窗格之前实现,非常需要并且可以解决大多数问题

我想指出,Docker 中的 tmux 也不支持鼠标支持(通过 Powershell)。 我知道这是因为终端中根本不存在该功能,所以它当然不会在 WSL 或 Docker 中工作,但我想我会继续提及它。

鼠标在 WSL 中与 TMUX 一起使用

鼠标与 wsltty 配合使用: https :

@guibirow也许这是终端内 Docker 的问题。

不,这不是 Docker 的问题。 这是 conpty (this repo) 的问题。 如果您需要鼠标支持,请尝试 wsltty。

未来是否有计划通过终端在 tmux 中为 Docker 启用完整的鼠标支持?

我不特别了解 Docker,但我不明白为什么它应该与普通终端有任何不同。 这个问题是关于那个的,所以请注意!

所以我只是通过终端中的 WSL 1 检查了 tmux,那里也不支持鼠标。 所以我的猜测是 tmux 本身在这一点上不能在终端中工作,而且这不是 Docker 问题。 不知道@guibirow 到底看到了什么。

您必须运行命令才能启用它,默认情况下不启用。
我现在没有它,但它很简单set mouse on
我下周拿到笔记本电脑时必须确认

它只适用于 wsl 终端,而不适用于新的 Windows 终端

哦,我知道了。 是的,它在普通的 WSL 窗口中工作正常。 它仅在嵌入新的 Windows 终端时无法工作。

如果您实现鼠标支持,请确保也实现 SGR (1006) 扩展。

传统的基于字节的协议只允许最多 223 的行和列号,因为 32 被添加到这个数字上,并且它作为单个字节发送。 列限制太小并不少见。 (顺便说一句,从第 95 列开始,生成的数据不是 7 位干净的,也不是有效的 UTF-8,这是编码转换层(如 luit)的一个问题。)

SGR 1006 扩展通过将数字编码为十进制数字来解决这些问题,并得到大量应用程序的支持。

如果未请求此扩展,请不要在行或列超过 223 时生成任何事件。否则溢出可能会产生严重后果。 例如,单击第 227 列可以生成字节 32+227 = 259 = 3 = Ctrl+C,这通常是向正在运行的进程发送 SIGINT 的中断字符。

所以! Conhost 实际上确实支持 DECSET 1006 ! 由于我们有这个中间层(伪控制台,它需要与主机对话),我们可以选择伪控制台请求和支持的鼠标模式类型。 我认为没有理由不应该只是1006 :smile: 感谢您提供的信息!

澄清一下,因为我们在中间有 conhost,所以看起来像这样:

                                      |                 |
                 DECSET 1002, 1005    | Windows conhost |
+-------------+                       |  (in PTY mode)  |
|             +----------------------->                 |
| Application |                       |                 |
|             <-----------------------+                 |
+-------------+                       |                 |
                 mouse information    |                 |
                 1002 in 1005 format  |                 |
                                      |                 |
                                      +---+---------^---+
                                          |         |
                                          |         | mouse information in
                         DECSET 1002,1006 |         | SGR Extended Format
                                          |         | (1002+1006)
                                          |         |
                                      +---v---------+---+
                                      |                 |
                                      | Windows         |
                                      |  Terminal       |
                                      |                 |
                                      |                 |
                                      |                 |
                                      |                 |
                                      +-----------------+

您的意思是应用程序和主机之间的 1005,还是这张图片中的拼写错误? 鼠标扩展 1005 和 1015 也存在,但由于它们的缺陷,它们几乎不被使用(如果有的话),这不是应用程序感兴趣的东西。

1005 (xterm 的两字节 UTF-8)、1015 (urxvt) 和 1006 (xterm SGR),按这个时间顺序,是三个相互排斥的扩展,用于解决列号的限制。 有关前两个缺陷的技术说明,请参见 Midnight Commander 问题26622956 。 请注意,这个故事现在已经有 6-8 年的历史了。 我不知道有任何应用程序支持有问题的 1005 和/或 1015 但不支持好的 1006。因此,我认为实现对前两个的支持没有任何意义(尽管实现它们应该很容易) )。

这很可能是一个错字,现在,conhost 实际上支持一堆不同的鼠标模式,包括但不限于 1005 和 1006。

这不是打字错误。 抱歉,这是为了说明伪控制台系统如何在客户端支持一堆鼠标模式(应用程序请求 1005、1015、旧版 VT220 等),但向 pty 管道呈现统一的鼠标模式接口(1006)持有者。

诚然,该图更适合 #376,这是此错误的基础结构部分。

@DHowett-MSFT 太棒了,感谢您的澄清!

我迫不及待地等待它出现在未来的版本中——我一直点击 tmux 窗格,希望鼠标能正常工作:)

这方面有什么进展吗?

@sandric不是特别 - 当有什么值得注意的东西要分享时,我们一定会在这个帖子中发帖😜

@carlos-zamora 将于本月开始这项工作(如您从右侧的“分配给”和“里程碑”字段中所见)。 他获得了 PR (#3963),开始为 #376 工作,这是此功能的先决条件之一。

@zadjii-msft 您链接的 PR 说它已合并,现在正确吗?

根据发行说明中的​​评论:

伪控制台现在将处理鼠标转义,但它对它们还没有多大用处 (#3963)

似乎还没有(还)。 我一直在关注!

@fpqc是的,没错,合并了一个 PR。 从那次讨论来看,在终端中完全运行之前,还需要做很多工作:

  • [ ] Conpty 在进入任何鼠标模式时发出 [sequence] 以告诉终端他们应该将 VT 鼠标模式输入合成为 SGR 序列(带有悬停、滚动等)
  • [ ] Conhost 以相同的方式将鼠标输入从 conpty 和 HWND 转换为 VT
  • [ ] 终端可以消耗[sequence]来合成VT鼠标模式输入

然后当然,这个问题:

  • [ ] 终端合成鼠标输入序列

启用 VT 鼠标时如何复制文本? 我无法在 Vim 或 Tmux 上做到这一点。

按住 shift 与终端本身交互,而不是与其中的应用程序交互。

这太棒了! 我们什么时候会在商店中看到这个预览?

敬请关注

从商店下载! 鼠标在 VIM、htop 和 Tmux 中运行良好。 最后,是时候从所有其他 WSL 终端转移到微软终端了! 干得好伙计们,非常感谢!

PS:班次也很棒!

刚刚来到这里寻找鼠标不工作的原因......阅读@yveslange的最新评论,然后更新应用......现在鼠标工作完美。

谢谢你们!

@DHowett-MSFT:使用 Micro (https://github.com/zyedidia/micro) 时,鼠标仍然对我不起作用,而鼠标和滚轮在默认的 powershell 或 cmd.exe 终端中都可以完美运行。 鼠标支持目前仅适用于 WSL 吗?

@nicolus确实,鼠标输入目前仅适用于 WSL 应用程序。 如果您使用的是 Win32 版本的 micro,我敢打赌它还不能正常工作。 您现在可以通过运行 WSL 版本来解决此问题。 #376 是我们用于 Windows 鼠标输入的问题

@zadjii-msft
使用带有"commandline": "ssh [...]"的自定义配置文件时,鼠标事件对我不起作用。 在#376 解决之前,这也是预期的吗? 有没有好的解决方法?

编辑:或者这只是 PowerShell/Win32-OpenSSH#1310 的结果,否则会起作用吗?

这是https://github.com/PowerShell/Win32-OpenSSH/issues/1310的结果,它(幸运地)在 8.x 系列中修复。

@DHowett-MSFT 感谢您的快速回复。 在这种情况下,是否有一种理智的方法可以立即手动升级到带有修复程序的版本,还是等待更好?

当然,只需从他们的发布页面下载最新版本!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

NickITGuy picture NickITGuy  ·  3评论

carlos-zamora picture carlos-zamora  ·  3评论

mrmlnc picture mrmlnc  ·  3评论

mrmlnc picture mrmlnc  ·  3评论

zadjii-msft picture zadjii-msft  ·  3评论