centra a linha atual no emulador de terminal

3

Um recurso dos buffers do emacs (mesmo ansi-term , shell e eshell ) que eu realmente gosto é a capacidade de C-l de "centrar" a linha atual no terminal para que a metade superior do a tela ainda contém parte da saída anterior.

Parece que um terminal padrão (não sei ao certo qual é o nome da norma) moverá a linha atual para o topo da janela quando C-l for pressionado. Existe uma maneira geral de mover a linha atual para o centro da tela? Se não, existe uma maneira de fazer isso especificamente para o iterm2, terminal ou algum emulador de terminal que tenha sido portado para o OS X?

    
por Gregory Nisbet 18.05.2016 / 02:42

1 resposta

3

A maioria dos emuladores de terminal pode "fazer" isso, mas é necessário algum trabalho:

  • Suponha que a linha que você deseja mover esteja na parte inferior da tela.
  • Se você quiser mover essa linha, rolaria (ou "indexaria") a linha enviando uma sequência de escape para a linha inferior e (contando!) movendo a linha para cima pelo número de linhas que você deseja rolar .
  • Rolagem move todas as linhas na tela. Você pode limitar o número de linhas que são movidas, definindo uma região de rolagem. Ao fazer isso, você poderia evitar que as linhas na metade superior da tela fossem embora. Mas as linhas entre a posição original de sua linha e sua meta desaparecerão.

Isso só move a linha. Você pode mover uma linha para baixo, similarmente, usando "indexação reversa". Estas operações, a propósito, não estão no padrão ECMA-48, mas estão em algo parecido com o xterm (baseado no DEC vt100). ansi-term suporta rolagem / indexação.

Finalmente, é apenas para cima ou para baixo. Para mover uma linha para a esquerda / direita, você deve enviar sequências de escape para inserir ou excluir caracteres enquanto o cursor estiver no início da linha.

Essas seqüências de escape são documentadas na página de manual terminfo(5) . Eu mencionei estes:

csr (definir região de rolagem)
ind (índice)
rin (índice reverso)
cup (posição do cursor)
ich (inserir caractere)
dch (excluir caractere)

Leitura adicional:

por 18.05.2016 / 02:59