Terminal: [Terminal] Suporte a Mouse VT

Criado em 8 mai. 2019  ·  38Comentários  ·  Fonte: microsoft/terminal

  • Seu número de compilação do Windows: (digite ver em um prompt de comando do Windows)

10.0.18890.1000

  • O que você está fazendo e o que está acontecendo: (copie e cole comandos específicos e sua saída ou inclua capturas de tela)

Eu rotineiramente uso o modo mouse no tmux com WSL para seleção de janela, redimensionamento do painel e rolar para trás, habilitado no tmux.conf assim:

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

Embora funcione perfeitamente no conhost, não funciona no Terminal; nada acontece, como se os eventos do mouse nunca estivessem atingindo o tmux.

  • O que há de errado / o que deveria estar acontecendo em vez disso:

O suporte ao mouse tmux (e presumivelmente outros aplicativos de suporte ao mouse) deve funcionar como no conhost.

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

Comentários muito úteis

Estou aguardando ansiosamente que isso apareça em uma versão futura - continuo clicando nos painéis tmux na esperança de que o mouse funcione :)

Todos 38 comentários

Sim, este é um problema conhecido no momento. Precisamos adicionar suporte para mouse em dois locais: no terminal, para poder sintetizar sequências de mouse, e no conpty, para poder ler sequências de mouse.

Esse problema está rastreando o primeiro bit, a funcionalidade do Terminal.

Para o segundo bit, a parte conpty, consulte # 376.

Infelizmente, isso não funciona, ter os eventos do mouse com TMUX adiaria a necessidade de vários painéis.
Espero que este recurso seja implementado antes dos painéis, seja muito necessário e resolva a maioria dos problemas

Gostaria de salientar que o suporte ao mouse também não é compatível com o tmux no Docker (por meio do Powershell). Eu sei que isso ocorre porque a funcionalidade simplesmente não está lá no Terminal, então é claro que não funcionará no WSL ou Docker, mas pensei em ir em frente e mencioná-la.

o mouse funciona com TMUX em WSL

Mouse funciona com wsltty: https://github.com/mintty/wsltty

@guibirow Talvez seja um problema com o Docker de dentro do Terminal então.

Não. Não é um problema com o Docker. É um problema com o conpty (este repo). Tente wsltty se desejar suporte para mouse.

Há planos para habilitar o suporte total a mouse no tmux para Docker no futuro por meio do Terminal?

Não sei sobre o Docker especificamente, mas não vejo por que deveria ser diferente de um terminal normal. Esta questão é sobre isso, fique de olho!

Acabei de verificar o tmux por meio do WSL 1 no Terminal e o mouse também não é compatível. Então, meu palpite é que o tmux em si simplesmente não funciona no Terminal neste ponto e que não é um problema do Docker. Não tenho certeza do que @guibirow estava vendo em sua extremidade.

Você tem que executar um comando para habilitá-lo, não é habilitado por padrão.
Não o tenho agora, mas é simples assim set mouse on
Eu terei que confirmar na próxima semana quando eu receber meu laptop

No entanto, ele só funciona no terminal wsl, não no novo terminal do Windows

Oh, entendi. Sim, funciona bem na janela simples do WSL. Só deixa de funcionar quando incorporado no novo Terminal do Windows.

Se você implementar suporte a mouse, certifique-se de implementar a extensão SGR (1006) também.

O protocolo legado baseado em bytes permite apenas números de linha e coluna até 223, porque 32 é adicionado a esse número e é enviado como um único byte. O limite da coluna não é incomum ser muito pequeno. (A propósito, começando na coluna 95, os dados gerados não são limpos de 7 bits e não são UTF-8 válidos, o que é um problema para a codificação de camadas de conversão, como luit).

A extensão SGR 1006 corrige esses problemas codificando os números como dígitos decimais e é suportada por muitos aplicativos.

Se esta extensão não for solicitada, não gere nenhum evento se a linha ou coluna exceder 223. Caso contrário, um estouro pode ter consequências desagradáveis. Por exemplo, clicar na coluna 227 pode gerar o byte 32 + 227 = 259 = 3 = Ctrl + C que é tipicamente o caractere de interrupção enviando um SIGINT para o processo em execução.

Então! Na verdade, o Conhost suporta DECSET 1006 ! Como temos essa camada intermediária (o pseudoconsole, que precisa falar com conhost), podemos escolher que tipo de modo de mouse o pseudoconsole solicita e suporta. Não vejo razão para que não seja apenas 1006 : sorriso: Obrigado pela informação!

Para esclarecer, porque nós conhost no meio, isso ficaria assim:

                                      |                 |
                 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       |
                                      |                 |
                                      |                 |
                                      |                 |
                                      |                 |
                                      +-----------------+

Você quis dizer 1005 entre o aplicativo e conhost, ou é um erro de digitação nesta imagem? As extensões de mouse 1005 e 1015 também existem, mas quase não são usadas (se o são) devido às suas falhas, não é algo que interessa aos aplicativos.

1005 (UTF-8 de dois bytes do xterm), 1015 (urxvt) e 1006 (SGR do xterm), nesta ordem cronológica, são três extensões mutuamente exclusivas para lidar com a limitação do número da coluna. Consulte, por exemplo, os problemas 2662 e 2956 do Midnight Commander para obter uma descrição técnica sobre as falhas dos dois primeiros. Observe que essa história agora tem de 6 a 8 anos. Não conheço nenhum aplicativo que suporte o 1005 problemático e / ou 1015, mas não o 1006 correto. Como tal, não vejo nenhum ponto em implementar suporte para os dois primeiros (embora deva ser muito fácil implementá-los )

Isso pode muito bem ser um erro de digitação, no momento, conhost na verdade suporta vários modos de mouse diferentes , incluindo, mas não se limitando a 1005 e 1006.

Não é um erro de digitação. Desculpe, a intenção era ilustrar como o sistema de pseudoconsole poderia suportar vários modos de mouse no cliente (um aplicativo solicita 1005, 1015, VT220 legado etc.), mas apresenta uma interface de modo de mouse unificada (1006) para o canal pty suporte.

Esse diagrama se encaixa melhor no # 376, que é a parte da infraestrutura desse bug.

@ DHowett-MSFT Incrível, obrigado pelo esclarecimento!

Estou aguardando ansiosamente que isso apareça em uma versão futura - continuo clicando nos painéis tmux na esperança de que o mouse funcione :)

Algum progresso nisso?

@sandric Não particularmente - quando houver algo

@ carlos-zamora está começando este trabalho este mês (como você pode ver nos campos "atribuído a" e "marco" à direita). Ele tem um PR (# 3963) começando no trabalho para # 376, um dos pré-requisitos para este recurso.

@ zadjii-msft O PR que você vinculou diz que foi mesclado. Correto agora?

Com base no comentário nas notas de lançamento:

O pseudoconsole agora processará escapes de mouse, mas não será muito útil com eles ainda (# 3963)

Parece que não (ainda). Estou sempre ligado!

@fpqc sim, isso mesmo, esse PR foi mesclado. A partir dessa discussão, ainda há muito trabalho necessário antes que funcione totalmente no Terminal:

  • [] O Conpty emite uma [sequência] ao entrar em qualquer modo de mouse para dizer aos terminais que eles devem sintetizar a entrada do modo de mouse VT como sequências SGR (com foco, rolagem, etc)
  • [] O Conhost traduz a entrada do Mouse em VT do conpty e do HWND da mesma maneira
  • [] O terminal pode consumir [sequência] para sintetizar a entrada do modo de mouse VT

E então, é claro, este problema:

  • [] Terminal sintetiza sequências de entrada de mouse

Como copiamos o texto quando o VT Mouse está habilitado? Eu não poderia fazer isso no Vim ou Tmux.

Mantenha a tecla Shift pressionada para interagir com o próprio terminal em vez do aplicativo dentro dele.

Isso é ótimo! Quando veremos uma prévia disso na Loja?

Fique ligado

Baixado da loja! O mouse está funcionando muito bem em VIM, htop e Tmux. Finalmente, é hora de mudar de todos os outros Terminais WSL para o da Microsoft! Bom trabalho pessoal e muito obrigado!

PS: a mudança também está funcionando muito bem!

Só vim aqui procurando por que o mouse não estava funcionando ... li o comentário mais recente de @yveslange e atualizei o aplicativo ... e agora o mouse funciona perfeitamente.

Obrigado rapazes!

@ DHowett-MSFT: O mouse ainda não funciona para mim com Micro (https://github.com/zyedidia/micro), enquanto o mouse e a roda de rolagem funcionam perfeitamente no terminal powerhell ou cmd.exe padrão. O suporte ao mouse está funcionando apenas no WSL por enquanto?

@nicolus de fato, a entrada do mouse só funciona para aplicativos WSL atualmente. Se você estiver usando a versão Win32 do micro, aposto que ainda não funcionará. Você provavelmente poderia contornar isso executando a versão WSL por enquanto. # 376 é o problema que estamos usando para a entrada do mouse do Windows

@ zadjii-msft
Os eventos de mouse não funcionam para mim com um perfil personalizado com "commandline": "ssh [...]" . Isso também é esperado até que # 376 seja resolvido? Existe uma boa solução alternativa?

Edit : Ou isso é apenas um resultado do PowerShell / Win32-OpenSSH # 1310 e funcionaria de outra forma?

Este é o resultado de https://github.com/PowerShell/Win32-OpenSSH/issues/1310 , que (felizmente) foi corrigido na série 8.x.

@ DHowett-MSFT Obrigado pela resposta rápida. Nesse caso, existe uma maneira sensata de atualizar manualmente para uma versão com a correção agora ou é melhor apenas esperar?

Claro, basta baixar a versão mais recente da página de lançamentos!

Esta página foi útil?
0 / 5 - 0 avaliações