Como é implementada a GUI do Vim se é um programa que roda no terminal?

4

Eu não consigo descobrir como são implementados programas como o Vim (ou superior por exemplo) que são executados dentro do terminal e possuem uma GUI. Assume-se que o terminal só pode exibir caracteres, e o Vim não só pode mostrar várias janelas, como também pode manipular o cursor movendo-o em todas as direções.

Outro exemplo é o utilitário top do linux que mostra informações em tempo real que são atualizadas, como é possível que este programa possa atualizar as informações em vez de fazer um > desloque para baixo e mostre novos caracteres impressos?.

    
por PlainOldProgrammer 30.10.2016 / 10:32

3 respostas

4

vim e gvim podem ser executáveis separados, vinculados a bibliotecas diferentes. É possível ter um executável fazendo qualquer interface (o elvis e o emacs fazem isso, por exemplo). O vim 4.0 em 1996 adicionou uma opção -g para dizer a ele para usar a versão GUI (que neste caso seria parte do mesmo executável).

Eu não encontrei uma cópia do anúncio para a versão 4.0 (que pode ter dado algumas pistas sobre a motivação da opção -g (lista de discussão de anúncios do vim iniciada em 1997 ), mas veja mencionado em uma antiga FAQ por Laurent Duperval:

7.3 How can I make Vim faster on a Unix station?

   The GUI support in Vim 4.0 can slow down the startup time noticeably.
   Until Vim supports dynamic loading, you can speed up the startup time
   by compiling two different versions of Vim: one with the GUI and one
   without the GUI and install both. Make sure you remove the link from
   $bindir/gvim to $bindir/vim when installing the GUI version, though.

   If screen updating is your problem, you can run Vim in screen. screen
   is an ascii terminal multiplexer. The latest version can be found at
   <URL:ftp://ftp.uni-erlangen.de:/pub/utilities/screen>.

Minha lembrança é que por um bom tempo, houve dois executáveis (quando esse mudou exigiria bastante pesquisa nos pacotes atuais usados). Mas a capacidade estava lá a partir de 1996.

Dado qualquer tipo de interface, existem maneiras de atualizar a exibição. Para o gvim, que usa as bibliotecas X, enquanto os aplicativos de terminal, como top (ou vim ), usam seqüências de escape. Dependendo do sistema, ambos são aplicativos termcap , obtendo seu repertório de seqüências de escape usando a interface termcap de ncurses, etc. (algumas versões de top usam ncurses para exibição, por exemplo, htop ). O vim aumenta esse repertório usando tabelas embutidas (que muitas vezes são redundantes).

Curiosamente, a procps versão de top na Debian é (uma relativa raridade) uma aplicação terminfo como pode ser visto inspecionando seu código-fonte .

    
por 30.10.2016 / 10:52
2

Aplicativos em execução em um terminal podem ter uma interface de usuário texto porque a maioria dos terminais não são apenas burros terminais que só podem imprimir caracteres e passar para a próxima linha, mas terminais “inteligentes” que suportam caracteres de controle e seqüências de escape com significados como “apague a linha atual e role as linhas subseqüentes para cima”, “mova para a posição (53, 7) "", "a partir de agora imprimir em vermelho brilhante", etc.

A maioria dos emuladores de terminal implementam a maioria das seqüências de escape do xterm , em si compatíveis com a maioria dos terminal de hardware VT100 e seus sucessores. Os aplicativos sabem quais sequências de escape enviar para executar várias ações por meio do termcap ou terminfo bancos de dados. Consulte Como a entrada de teclado e a saída de texto funcionam? (seção “Aplicativo em modo texto, em execução em um terminal”) e Como e onde é $ TERM interpretado? para mais detalhes.

Além de ter uma interface de usuário de texto, o Vim também possui uma interface gráfica chamada GVim. Essa interface é executada em um terminal gráfico que implementa o protocolo X11 , não em um terminal de texto (mas é claro que você pode lançar o aplicativo a partir de um terminal de texto, ele simplesmente não será exibido nesse terminal).

    
por 30.10.2016 / 16:21
1

Após o TTY original, os terminais estão disponíveis, substituindo a impressora por um VDU.

Um VDU tem características ligeiramente diferentes ao papel. Os caracteres no visor podem ser apagados e substituídos, não apenas sobrecarregados.

O ASCII forneceu caracteres de controle suficientes para uma impressora de linha básica, mas não previu o VDU. Controles adicionais específicos do terminal são codificados em ASCII usando um "escape". Uma seqüência de escape é iniciada com um caractere de escape ASCII. Os seguintes caracteres na sequência são interpretados como controles específicos do terminal.

O editor visual vi é um bom exemplo de uma aplicação que usa essa nova tecnologia.

Conjuntos de códigos de escape estão sendo padronizados. Se você tem documentação recente suficiente, "ANSI escape" pode ser um bom termo para pesquisar no índice .

    
por 30.10.2016 / 11:02