Escape-последовательности VT100:Движение курсора переносится до конца строки

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

  •  21-12-2019
  •  | 
  •  

Вопрос

Я создаю приложение Telnet CLI, которое управляется с помощью escape-последовательностей VT100.Так, например.переместите курсор влево, <ESC>[Escape-последовательность D отправляется с сервера Telnet клиенту, которым может быть Putty или Gnome-терминал.К сожалению, если длина строк превышает длину строки Putty, приведенная выше escape-последовательность не позволит переместить курсор к строке над текущей строкой.

Пример.Курсор — «|».Комментарии отмечены знаком '//'

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

Другой пример

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

Я искал любую другую escape-последовательность, которая могла бы оборачиваться на краю, но не нашел ее.Я не нашел никакой escape-последовательности, которая меняет режим терминала на что-то, допускающее перенос.

Так как же обычно осуществляется подобная навигация по терминалу?

Это было полезно?

Решение

А bw В описании терминала termcap указывается, переносится ли перемещение влево по краю экрана на предыдущую строку.Он присутствовал в описании PuTTy, которое я проверил (infocmp putty под ncurses), но не во многих других (например.не в infocmp gnome).

Вы можете попытаться отслеживать, в каком столбце находится курсор, и использовать последовательности управления движением, когда хотите перейти на предыдущую строку.Вам нужно будет знать ширину экрана пользователя, что можно сделать, установив LINES и COLS переменные окружающей среды.

Другие советы

Как отмечалось, способность генеракодицетагкода может решить часть проблемы, но это редко. В частности, это не особенность совместимых VT100 программ (таких как xterm). ОП упомянул как штукатуру, так и гнома-терминал. Последнее не использует генеракодицетагкод, поэтому является предпочтительным решением.

С другой стороны, замазку делает отчет о положении курсора VT100 , который используется изменение изменений в качестве загрязнения, когда он не может получить скринизм с использованием системных вызовов. Цитата из Xterm's

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top