screen & xterm: como selecionar texto com o mouse em um único painel quando a janela é dividida verticalmente

5

Curiosamente, esse também foi um problema de tmux para alguns: link

Mas, atualmente, estou aderindo a screen e gostaria de saber como posso fazer com que screen "se comporte" a esse respeito.

A seleção de texto com o mouse não é problema, a menos que a linha fique maior que a largura do painel. Eu já tentei experimentar com :width , com e sem a opção -w . (wrap is on, senão vai parecer uma bagunça ( :+wrap ))

Ah, e :width é MUITO exigente quanto ao cenário. Se você definir width muito alto, linhas longas farão com que o terminal todo seja alternado (ou seja, se o prompt bash for user@host $ , ele será exibido apenas como r@host $ ) que parece extremamente feio.

A seleção de uma linha longa que divida várias vezes a largura do painel resultará no seguinte comportamento:

  • O seletor (inverso) exibirá além do painel esquerdo, sobreposto no painel direito. Isso parece buggy, para começar. O seletor também deve envolver na borda direita do painel.
  • Colar a seleção às vezes fará com que uma linha longa seja cortada na primeira linha parcial, truncando o restante; e, às vezes, até mesmo tentar adicionar | (!), tentando continuar a linha como se fosse um script de várias linhas (resultado: bash: syntax error near unexpected token '|' ) Argh.

Isso não pode ser feito de alguma forma, mesmo quando se usa o mouse?

    
por syntaxerror 10.12.2014 / 16:18

1 resposta

1

Resposta curta: não, a tela GNU não pode fazer isso.

Resposta longa: a tela GNU ignora o protocolo do mouse xterm, exceto por um caso especial em que ele aceita cliques do mouse (o recurso "mousetrack" ).

Para fazer o trabalho de seleção, como sugere, precisaria de muito mais trabalho:

  • O protocolo do mouse xterm funciona fazendo com que o terminal envie sequências de escape para o seu aplicativo.
  • screen usa apenas o protocolo de mouse "normal" (1000), que envia uma seqüência de escape quando um botão do mouse é pressionado, e outra seqüência de escape quando (qualquer) botão do mouse é liberado.
  • apenas cliques como esse não suportam o tipo de arrastamento que você espera ao selecionar / colar. Então screen não tenta fazer nada a esse respeito.
  • quando o protocolo do mouse xterm está ativo, você não pode selecionar / colar a menos que você use um botão do mouse shift .
  • de qualquer forma (se você ativa mousetrack ou não), screen confia no terminal para mostrar o destaque da seleção. O xterm (e outros terminais) não tem uma maneira de definir as margens de seleção, então você obtém toda a largura da tela destacada.

Por outro lado, tmux faz mais com o mouse. Na verdade, ele traduz entre os diferentes tipos de protocolos de mouse xterm para fornecer diferenças entre os terminais, por exemplo, escolhendo entre o modo UTF-8 (1005) e o SGR (1006).

Em princípio, tmux poderia ser modificado para também fornecer uma seleção / colagem aprimorada, conforme descrito nesta pergunta, porque pode definir o modo de mouse xterm para 1002 (cell motion mouse tracking), que diria onde pintar seu próprio destaque. Eu não vejo isso implementado no código-fonte, então seu link para Como o tmux seleciona o conteúdo somente em um painel? parece ainda relevante.

O modo de cópia (teclado) em tmux , por exemplo, parece ignorar os painéis.

Existem desvantagens:

  • seria lento : muito mais lento que o modo de cópia porque (a) há mais caracteres enviados de volta do seu terminal e (b) suas expectativas de desempenho usando um mouse seriam tendenciosas. Isso seria muito perceptível se você não estivesse rodando em uma máquina local, mas via ssh.
  • a seleção só seria útil para tmux , por exemplo, normalmente não seria copiada para outras janelas em seu ambiente X.

Leitura adicional:

por 22.07.2016 / 00:37