VT100 les séquences d'échappement:Le mouvement du curseur enrouler autour de la fin de la ligne

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

  •  21-12-2019
  •  | 
  •  

Question

Je suis de la création d'un Telnet CLI application qui est contrôlé avec VT100 séquences d'échappement.Donc, par exempledéplacez le curseur à gauche de la <ESC>[D séquence d'échappement est envoyé par le serveur Telnet sur le client, qui peut être Mastic ou Gnome-terminal.Malheureusement, avec des lignes plus longues que le Mastic de la longueur de la ligne, la séquence d'échappement ci-dessus ne sera pas permis de naviguer le curseur sur la ligne au-dessus de la ligne courante.

Un exemple.Le curseur est '|'.Les commentaires sont marqués avec '//'

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

Un autre exemple

----------------
>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
----------------

J'ai été la recherche de toute autre séquence d'échappement qui tourne autour de lors de au bord, mais n'en trouva aucun.Je n'ai pas trouvé de séquence d'échappement qui change le mode du terminal à quelque chose qui permet d'envelopper.

Alors comment est-terminal de navigation comme c'est souvent manipulé?

Était-ce utile?

La solution

L' bw capacité dans un termcap terminal description indique si la gauche au bord d'un écran revient à la ligne précédente.Il était présent dans un Mastic description que j'ai vérifié (infocmp putty en vertu de ncurses), mais pas dans beaucoup d'autres (par ex.pas dans infocmp gnome).

Vous pourriez essayer de garder une trace de la colonne se trouve le curseur et utiliser le mouvement des séquences de contrôle lorsque vous souhaitez enroulent autour de la ligne précédente.Vous devez connaître la largeur de l'écran de l'utilisateur, ce qui peut être fait par eux réglage de la LINES et COLS les variables d'environnement.

Autres conseils

Comme l'a noté, l' bw capacité pourrait résoudre une partie du problème, mais c'est rare.En particulier, il n'est pas une fonctionnalité de vt100-programmes compatibles (comme xterm).L'OP mentionné à la fois le Mastic et gnome-terminal.Ce dernier n'utilise pas bw, afin qu'une autre solution est préférable.

D'autre part, le Mastic ne mettre en œuvre le vt100 rapport de position du curseur qui est utilisé par redimensionner comme un secours quand il ne peut pas obtenir le screensize l'aide d'appels système.Citant xterm du les séquences de contrôle document:

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

L' resize le programme utilise cette par

  • envoyer le curseur sur le coin inférieur droit d'une "énorme" (999 en 999) de la fenêtre
  • l'envoi de la séquence RCR
  • la lecture du rapport de la réelle position du curseur

Sachant que le screensize, le serveur peut envoyer le curseur de plus utile positions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top