Xterm.js: Rolagem suave

Criado em 11 dez. 2017  ·  16Comentários  ·  Fonte: xtermjs/xterm.js

Como alguém que é novo no trabalho com CLI's, acho cognitivamente mais difícil visualizar a rolagem linha por linha usada em terminais, em oposição à rolagem suave da maioria dos outros aplicativos. Aprendi que é porque em um terminal, o personagem e não o pixel é a menor unidade de exibição.

É possível (e desejável) para o xterm.js contornar isso e incorporar uma opção de rolagem suave baseada em pixels?

Originalmente, pedi a @albinekb a mesma coisa para o Hyper (https://github.com/zeit/hyper) e ele me indicou este projeto porque o Hyper usa xterm.js.

aremouse-support typenhancement

Comentários muito úteis

algo que tão poucas pessoas usariam

Todos que rolarem com o touchpad o usam no VTE, gostem ou não: D

Todos 16 comentários

Certamente é possível fazer, mas daria muito trabalho (+ complexidade adicional) para algo que tão poucas pessoas usariam. Prefiro não adicionar isso pessoalmente.

Isso é compreensível e justo. Obrigado pelo seu trabalho!

FYI: VTE (Terminal GNOME e amigos) faz isso desde a versão 0.44. (Claro que só funciona na rolagem para trás do emulador de terminal, não ao, por exemplo, rolar o arquivo em um editor de texto.)

algo que tão poucas pessoas usariam

Todos que rolarem com o touchpad o usam no VTE, gostem ou não: D

@egmontkob Tenho gnome terminal 3.18.3 aqui e não parece funcionar, a seção de rolagem nas configurações de perfil também não parece ter uma configuração?

screen shot 2017-12-18 at 6 57 19 am

gt 3.18.3 provavelmente significa que você tem vte 0,42, enquanto esse recurso é novo em 0,44.

Nenhuma configuração nova (há uma solicitação pendente de

Alguém já manifestou o seu desagrado por não ser configurável no VTE. É claro que é totalmente sua escolha implementar esse recurso no xtermjs e, se o fizer, se torná-lo configurável.

Acho que pode ser um dado precioso para você que esse recurso esteja lá no VTE por mais de 1,5 anos e "forçado" a todos os usuários VTE que usam um trackpad (em vez da roda do mouse que envia "unidades" de rolagem para o qual ainda rolamos linhas inteiras), e durante esses momentos eu ouvi 2 ou talvez 3 reclamações no total para trazer de volta o antigo comportamento. Se esse recurso fosse ruim, haveria muito mais reclamações.


Não tenho números de uso ou proporção sobre VTE, o mais próximo que tenho são os resultados desta enquete (note que a data do artigo está mutilada, com base nos carimbos de data / hora dos comentários é uma votação de 2 anos), o que sugere que VTE's a participação de mercado entre os emuladores de terminal Linux está na casa dos 50%, ou seja, muito grande. Portanto, muitas pessoas por aí já usam a rolagem suave.


Sou novo em xtermjs e amigos e ainda não experimentei, só vejo que coisas legais estão acontecendo aqui. Não tenho certeza se tenho a arquitetura certa em minha mente, mas se eu tiver, o Terminal GNOME está para VTE o que hterm está para xtermjs. VTE é um widget GTK + que faz emulação de terminal. Existem cerca de uma dúzia de aplicativos emuladores de terminal mais ou menos populares usando VTE, incluindo Terminal GNOME, Terminal Xfce4, Terminator, Tilix ...


Caso você queira experimentar o comportamento, a maneira mais fácil (para isso, bem como quaisquer recursos VTE que não requeiram a cooperação do Terminal GNOME) é compilar apenas VTE e iniciar seu aplicativo de teste:

  • Obtenha do git ou tarball
  • ./autogen.sh (git) ou ./configure (tarball)
  • make
  • ./src/app/vte-2.91 (de 0,51) ou ./src/testvte (até 0,50) ou ./bindings/vala/vte-2.91 ou ./src/vte-2.91 (até 0,50, foi movido para outro diretório em algum ponto)

Eu estava usando a roda do mouse, esse é o meu problema: sweat_smile:

No post inicial esqueci de mencionar o detalhe bastante importante que eu uso um trackpad de fato. Desconsiderando os usuários de trackpad ou usuários de outros métodos de entrada baseados em toque, eu entendo que poucas pessoas preferem a rolagem baseada em pixels.

IMO, é seguro dizer que é apenas esperado pelos usuários neste momento. Quer dizer, até mesmo ele tem.

Não é realmente possível com o renderizador de tela, no entanto, deve ser bastante fácil de realizar com o renderizador webgl https://github.com/xtermjs/xterm.js/pull/1790 que deve substituir o renderizador de tela. Para o renderizador DOM, podemos conseguir isso tendo linhas parcialmente visíveis na parte superior e inferior. Como tal, considero isso bloqueado em # 1790

Outra coisa a considerar: tendo ydisp não sendo um inteiro e tendo mais de linhas do que Terminal.rows visible quebra algumas suposições feitas no código, por exemplo, como isso afeta o suporte ao leitor de tela?

Não é realmente possível com o renderizador de tela

Por que não? Deve ser tão simples quanto desenhar viewportHeight + 2 número de linhas e deslocar em algum lugar entre a primeira e a segunda linha com base no deslocamento de pixel da posição de rolagem atual.

Certamente é possível fazer, mas daria muito trabalho (+ complexidade adicional) para algo que tão poucas pessoas usariam. Prefiro não adicionar isso pessoalmente.

Fwiw, eu ia solicitar o mesmo recurso. Pessoalmente, acho que é um passo importante para aumentar a usabilidade. O fato de não ser mais amplamente suportado pode ser explicado pelo fato de que é uma ideia relativamente nova e que nós, programadores, tendemos a nos acostumar com as limitações com as quais temos de trabalhar.

Por que não?

@sdegutis sim, é possível, naquela época eu estava pensando que o renderizador de tela seria altamente otimizado usando uma lógica especial para invalidar apenas as seções do conteúdo que precisavam dele. Rolar o terminal agora com o renderizador de tela irá renderizar novamente todas as linhas de qualquer maneira, e mesmo que seja o padrão, o plano é eliminar o renderizador de tela de qualquer maneira.

Deve ser muito fácil de fazer isso, só precisa ser feito para 3 renderizadores e o webgl em particular precisará de alguns ajustes especiais (aumentando o tamanho do buffer de atributo, uma vez que há mais células desenhadas do que linhas * cols).

Eu também adoraria esse recurso, meu problema não é simplesmente estética, é um problema de usabilidade. O problema é que uma ação causa muitos saltos no terminal e o fato de que não há rolagem suave torna quase impossível entender quais linhas foram saltadas. Isso realmente torna o terminal difícil de usar.

Sempre que rolar o terminal no Visual Studio Code, perco o controle de onde estive. A rolagem suave é um recurso básico e precisamos disso.

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

Questões relacionadas

chris-tse picture chris-tse  ·  4Comentários

fabiospampinato picture fabiospampinato  ·  4Comentários

circuitry2 picture circuitry2  ·  4Comentários

johnpoth picture johnpoth  ·  3Comentários

kolbe picture kolbe  ·  3Comentários