Поддержка сохранения/восстановления положения курсора в управляющей последовательности ANSI

Существуют ли какие-либо известные терминалы, которые поддерживают escape-последовательности ANSI для клавиш курсора вверх, вниз, вперед и назад:

CSI n A     Cursor Up
CSI n B     Cursor Down
CSI n C     Cursor Forward
CSI n D     Cursor Back

но не поддерживает escape-последовательности save-cursor-position и restore-cursor-position?

CSI s       Save Cursor Position
CSI u       Restore Cursor Position

person sid_com    schedule 11.03.2015    source источник


Ответы (1)


Настоящий VT100 (или VT220, если на то пошло) не распознавал эти управляющие последовательности для сохранения/восстановления положения курсора. Они используют (как отмечено в xterm управляющие последовательности< /а> список)

ESC 7     Save Cursor (DECSC).
ESC 8     Restore Cursor (DECRC).

Это возможности sc и rc в terminfo; вы можете увидеть их в списке, используя

infocmp vt100
infocmp vt220

Происхождение CSI s и CSI u, вероятно, происходит от ansi.sys (см. запись в базе данных терминала для ansi.sys-old), хотя всегда возможен более старый источник.

person Thomas Dickey    schedule 20.03.2015
comment
Кажется, безопаснее использовать ESC 7 и ESC 8. Последовательности CSI s и CSI u распознаются iTerm 2, но не Terminal.app в macOS. Точно так же asciinema не распознает их при записи. - person weibeld; 18.01.2019
comment
Что делать, если какой-то текст печатается после ESC 7 или после ESC 8? Некоторые символы, кажется, сбивают с толку терминал, заставляя его думать, что 7 на самом деле является аргументом совершенно другой команды: P (например, если вы отправляете \033[7Hello, он фактически перемещает курсор в 7-й столбец и печатает ello там, потому что начальный H является курсором перемещения Есть ли способ прервать управляющую последовательность после 7, чтобы следующий за ней текст не интерпретировался как команды? - person SasQ; 01.04.2021
comment
ESC 7 отличается от ESC [ 7, потому что последний (первые два символа) стандартизирован, а первый зависит от терминала. Любой управляющий символ после второго завершит последовательность (во всяком случае, на стандартном терминале). - person Thomas Dickey; 01.04.2021
comment
Интересно, я не знал, что их два! :o И действительно ESC 7 у меня работает. Было бы неплохо, если бы и другой (стандартизированный, как вы сказали) тоже работал. Есть ли какой-нибудь управляющий символ, который завершал бы последовательность, не воздействуя на вывод? (своего рода escape-последовательность ничего не делает) - person SasQ; 01.04.2021