Movimento do cursor nos terminais

4

Estou tentando enrolar minha cabeça como os cartuchos movem o cursor da tela (Movendo-se pela entrada das teclas de seta e tal).

Eu tenho feito muitos testes e não encontrei nenhuma chamada de sistema que permita o movimento do cursor da tela em um terminal. Isso é feito usando extensões de terminal específicas? Em caso afirmativo, há alguma documentação sobre como isso é conseguido, por exemplo, xterm?

Isso tem me deixado louco, qualquer luz que você possa lançar sobre isso é apreciada.

    
por Juan 10.05.2011 / 19:26

3 respostas

8

Não existe essa chamada de sistema ou conjunto de chamadas do sistema. Tudo é feito por convenção.

Já nos velhos tempos, quando um "terminal" era um grande pedaço de equipamento ligado a um computador via cabo, "terminais inteligentes" faziam coisas como mover o cursor, desenhar uma linha ou preencher um polígono com cores. O terminal inteligente geralmente fazia isso via "seqüências de escape". Um programa emitiu uma sequência especial de valores de byte, geralmente começando com ASCII 0x1b, 'ESC', para mover um cursor, ou colorir uma palavra, ou alguma coisa especial além de imitar um teletypewriter.

Essa é a "convenção". Hoje em dia, um "terminal" é quase sempre apenas uma janela entre muitas em uma tela de bitmap, xterm, rxvt, etc etc. Cabe ao xterm (ou rxvt ou qualquer outro) ler os bytes vindos do "programa" rodando nele. e interpretar esses bytes de acordo com uma determinada convenção. Acabei de digitar isso em uma das minhas janelas do xterm:

6 % echo $TERM 
xterm

Mas eu sei que xterms velhos e antigos costumavam dizer "vt100" nesse caso. Qualquer programa que "mova o cursor" precisa gerar sequências de escape para a convenção "xterm" para mover o cursor em uma instância do xterm.

Você pode fazer man curses e man terminfo para mais informações.

PS

As pessoas fizeram sistemas de janelas inteiras com seqüências de escape. Veja MGR como um exemplo.

    
por 10.05.2011 / 20:54
4

Checkout tput . É um wrapper em torno das sequências ANSI Escape que são suportadas (a quantidade de suporte difere muito) por quase todos os emuladores de terminal.

tput só produzirá a sequência se ela for suportada pelo terminal, portanto você não precisa se preocupar com o suporte. Ou pelo menos você não precisa se preocupar com caracteres estranhos sendo impressos no terminal: -)

    
por 10.05.2011 / 20:39
2

Eu sei que esta não é a resposta exata para a sua pergunta, mas a biblioteca maldições é o material que você precisa fazer algum dev tui. Se você é um programador, olhar para sua fonte (disponível em todas as distribuições unix de código aberto) mostrará como é feito.

    
por 11.05.2011 / 04:27