Я написал приложение командной строки (называемое « App-CLI » ниже), работающее на linux. App-CLI работает как сервер, и после принятия соединения он разветвляет дочерний процесс как рабочий процесс и выделяет pty (через функцию openpty) в каждом таком дочернем процессе. В каждом дочернем процессе я использую библиотеку editline, например libedit, для работы с пользовательским вводом.
Затем в ситуации 1:
Я использую такие инструменты, как cmd / ConEmu / git bash in Win10 , чтобы подключить APP-CLI через te lnet или S SH, и я ввожу некоторые символы, например, «abcdefg», исключая двойные кавычки. И затем я ввожу клавишу backspace , на экране в инструменте cmd в начале строки происхождения отображается "[K"
. Таким образом, я использую Strate в Linux, чтобы шпионить, что выводит App-CLI
strace -e write=1,2 -e trate=write, -p {process_id}
и получает результаты вроде
write(1, "\r\33[6G\33[K", 8) = 8
, которые состоит из последовательностей CSI :
CSI n G, названных «Курсор горизонтальный абсолютный» (CHA), это означает «Перемещает курсор в столбец n (по умолчанию 1 ). (не ANSI.SYS) "(https://en.wikipedia.org/wiki/ANSI_escape_code).
CSI n K, названный« Стереть в строке », это означает« Стирает часть строка. Если n равно 0 (или отсутствует), очистить от курсора до конца строки. Если n равно 1, очистить от курсора до начала строки. Если n равно 2, очистить всю строку. Положение курсора не изменяется ".
Кажется, что cmd или win10 не могут успешно обработать последовательность CHA? Но я не могу найти информацию, касающуюся информации о (не) поддерживаемости.
И затем, в ситуации 2:
Я все еще использую инструмент cmd в win10. Но сначала я захожу в систему linux через te lnet, а затем подключаюсь к APP-CLI через te lnet через linux. Я также ввожу "abcdefg" и backspace key, и на этот раз все вещи go right: на экране выводится "abcdef". Данные монитора под strace:
write(1, "\10\33[K", 4) = 4
Изменена последовательность повторного нажатия клавиши возврата! Итак, я хочу знать:
- Такие последовательности генерируются каким процессом или библиотекой в linux?
- Могу ли я решить, какой тип последовательности будет окончательно сгенерирован и как Я могу ?
Спасибо.