¿Cómo se implementa la GUI de Vim si es un programa que se ejecuta en la terminal?

¿Cómo se implementa la GUI de Vim si es un programa que se ejecuta en la terminal?

No puedo entender cómo se implementan programas como Vim (o top por ejemplo) que se ejecutan dentro de la terminal y tienen una GUI. Se supone que el terminal sólo puede mostrar caracteres, y Vim no sólo puede mostrar múltiples ventanas, sino que también puede manejar el cursor moviéndolo en todas direcciones.

Otro ejemplo es Linux.arribautilidad que muestra información entiempo realque se actualiza, ¿cómo es posible que este programa pueda actualizar la información en lugar de hacer undesplazarse hacia abajoy mostrando nuevos caracteres impresos?.

Respuesta1

Las aplicaciones que se ejecutan en una terminal pueden tener untextointerfaz de usuario porque la mayoría de los terminales no son sóloterminales tontasque sólo pueden imprimir caracteres y pasar a la siguiente línea, pero terminales "inteligentes" que admitenpersonajes de controlysecuencias de escapecon significados como “borrar la línea actual y desplazar las líneas siguientes hacia arriba”, “mover a la posición (53,7)”, “de ahora en adelante imprimir en rojo brillante”, etc.

La mayoría de los emuladores de terminal implementan la mayoría de lassecuencias de escape de xterm, en sí mismo mayormente compatible con elVT100terminal de hardware y sus sucesores. Las aplicaciones saben qué secuencias de escape enviar para realizar diversas acciones a través deltermcapoinformación terminológicabases de datos. Ver¿Cómo funcionan la entrada y salida de texto por teclado?(sección “Aplicación en modo texto, ejecutándose en una terminal”) y¿Cómo y dónde se interpreta $TERM?para más detalles.

Además de tener una interfaz de usuario de texto, Vim también tiene una interfaz de usuario gráfica llamada GVim. Esta interfaz se ejecuta en una terminal gráfica que implementa elprotocolo x11, no en una terminal de texto (pero, por supuesto, puedeslanzamientola aplicación desde una terminal de texto, simplemente no se mostrará en esa terminal).

Respuesta2

vimy gvimpueden ser ejecutables separados, vinculados con diferentes bibliotecas. Es posible tener un ejecutable para cualquiera de las interfaces (elvis y emacs hacen esto, por ejemplo). vim 4.0 en 1996 agregó una -gopción para indicarle que usara la versión GUI (que en este caso sería parte del mismo ejecutable).

No encontré una copia del anuncio para 4.0 (que podría haber dado algunas pistas sobre la motivación de la -gopción (la lista de correo de anuncios de vim comenzó en1997), pero véalo mencionado en una antigua pregunta frecuente de 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>.

Lo que recuerdo es que durante bastante tiempo, hubo dos ejecutables (cuandoesocambiar requeriría mucha investigación sobre los paquetes reales utilizados). Pero la capacidad ya existía desde 1996.

Dado cualquier tipo de interfaz, existen formas de actualizar la pantalla. Para gvim, eso usa las bibliotecas X, mientras que las aplicaciones de terminal como top(ovim) utilizan secuencias de escape. Dependiendo del sistema, ambos sontermcapaplicaciones, obteniendo su repertorio de secuencias de escape utilizando la interfaz termcap de ncurses, etc. (algunas versiones topdeusarnmaldiciones para visualización, por ejemplo, htop). vim aumenta ese repertorio utilizando tablas integradas (que a menudo son redundantes).

Curiosamente, la procpsversión de topDebian es (una relativa rareza) unainformación terminológicaaplicación como se puede ver al inspeccionar sucódigo fuente.

Respuesta3

Después del TTY original, se encuentran disponibles terminales que reemplazan la impresora con una VDU.

Una pantalla de visualización tiene características ligeramente diferentes a las del papel. Los caracteres en la pantalla se pueden borrar y reemplazar, no solo tachar demasiado.

ASCII proporcionó suficientes caracteres de control para una impresora de línea básica, pero no anticipó la VDU. Los controles adicionales específicos del terminal están codificados en ASCII mediante un "escape". Una secuencia de escape se inicia con un carácter de escape ASCII. Los siguientes caracteres de la secuencia se interpretan como controles específicos del terminal.

El editor visual vies un buen ejemplo de aplicación que utiliza esta nueva tecnología.

Se están estandarizando conjuntos de códigos de escape. Si tiene documentación lo suficientemente reciente, "escape ANSI" podría ser un buen término para buscar en elíndice.

información relacionada