linha de corrente central no emulador de terminal

linha de corrente central no emulador de terminal

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

Parece que um terminal padrão (não tenho certeza qual é o nome do padrão) moverá a linha atual para o topo da janela quando C-lfor pressionado. Existe uma maneira geral de mover a linha atual para o centro da tela? Caso contrário, existe uma maneira de fazer isso especificamente para iterm2, terminal ou algum emulador de terminal que foi portado para o OS X?

Responder1

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

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

Isso apenas move a linha para cima. Você pode mover uma linha para baixo, da mesma forma, usando a "indexação reversa". A propósito, essas operações não estão nopadrãoECMA-48, mas são parecidos com xterm (baseado em DEC vt100). ansi-termsuporta rolagem/indexação.

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

Essas sequências de escape estão documentadas na terminfo(5)página de manual. 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:

informação relacionada