VT100 secuencias de escape:Movimiento del Cursor en la envoltura alrededor de al final de la línea

StackOverflow https://stackoverflow.com//questions/25038426

  •  21-12-2019
  •  | 
  •  

Pregunta

Estoy creando un Telnet CLI aplicación que se controla con VT100 secuencias de escape.Así, por ejemplo,navegar el cursor a la izquierda de la <ESC>[D secuencia de escape es enviado desde el servidor Telnet para el cliente, que puede ser la Masilla o Gnome-terminal.Por desgracia, con líneas que son más de la Masilla de la longitud de la línea, la secuencia de escape de arriba no permitirá navegar el cursor a la línea por encima de la línea actual.

Un ejemplo de ello.Cursor es '|'.Los comentarios están marcados con '//'

----------------
>potato| // Now I press left arrow which sends esc sequence to application
----------------
>potat|o // Works as expected. The cursor moved left
----------------

Otro ejemplo

----------------
>potatopotatopot // This is a long command which goes over two lines
|ato             // Now I press left arrow which sends esc sequence to application
----------------
>potatopotatopot // The cursor didn't move, since the escape sequence 
|ato             // does nothing if the cursor is at the edge
----------------

He estado buscando por cualquier otra secuencia de escape que envuelva alrededor cuando, en el borde, pero no encontró ninguno.No he encontrado ninguna secuencia de escape que cambia el modo de terminal a algo que permite envolver.

Entonces, ¿cómo es la terminal de navegación como esto comúnmente se manejan?

¿Fue útil?

Solución

El bw capacidad en una termcap terminal descripción dice que si se mueve de izquierda en el borde de la pantalla se ajusta a la línea anterior.Estaba presente en la Masilla descripción he comprobado (infocmp putty en virtud de ncurses), pero no en muchos otros (por ejemplo,no en infocmp gnome).

Usted podría tratar de seguir la pista de la columna por la que el cursor está en el uso y movimiento de las secuencias de control cuando se desea que envuelve a la línea anterior.Usted tendría que saber el ancho de la pantalla del usuario, que se puede hacer por ellos configuración de la LINES y COLS las variables ambientales.

Otros consejos

Como se señaló, la bw capacidad podría resolver parte del problema, pero es raro.En particular, no es una característica de vt100 compatible con los programas (tales como xterm).El OP menciona tanto la Masilla y gnome-terminal.El último no hace uso de bw, por lo que una solución diferente es el preferido.

Por otro lado, la Masilla no implementar el vt100 informe de posición de cursor que es utilizado por cambiar el tamaño de como reserva cuando no se puede obtener el screensize mediante llamadas al sistema.Citando de xterm del las secuencias de control de documento:

CSI Ps n  Device Status Report (DSR).
            Ps = 5  -> Status Report.
          Result (``OK'') is CSI 0 n
            Ps = 6  -> Report Cursor Position (CPR) [row;column].
          Result is CSI r ; c R

El resize se utiliza el programa de este por

  • enviar el cursor a la esquina inferior derecha de una "enorme" (999 por 999) ventana
  • el envío de la secuencia de RCP
  • la lectura del informe de la real posición del cursor

Conocer la screensize, el servidor puede enviar el cursor a la más útil de las posiciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top