Поэтому я пишу эмуляцию терминала (я знаю, я должен просто скомпилировать putty и т. Д.) И нахожусь на стадии доработки через vttest, чтобы убедиться, что это правильно. Сейчас я основываюсь на VT102, но добавлю более поздние функции терминала, такие как цвет, когда основы работают правильно.
Набор команд в основном ANSI. У DEC был свой собственный набор команд, но он поддерживал команды ANSI примерно с 1973 года. Эти стандарты ANSI, по-видимому, сейчас недоступны, но есть эквиваленты ECMA, у меня они есть (ECMA-48 кажется наиболее подходящим), но я не отвечаю на этот вопрос, насколько я можно увидеть. Большинство последовательностей команд ANSI начинаются с ESC. Многие команды начинаются с идентификатора последовательности команд, показанного здесь как CSI и представленного в данных как 0x1c 0x5b (ESC [
) или 0xdb, если возможна 8-битная связь. Затем последовала последовательность, идентифицирующая команду. Некоторые команды влияют на положение курсора, некоторые - на экран, другие - вызывают ответ на хост и так далее.
Некоторые команды терминала содержат числовой аргумент. Пример CSI 10 ; 5 H
означает создание строки положения курсора 10, столбец 5. Если числовой аргумент отсутствует, используется значение по умолчанию: CSI 10 ; H
означает создание строки положения курсора 10, столбец 1, поскольку 1 является значением по умолчанию, когда аргумент не задан.
У меня есть руководство по vt102 от vt100.net (отличный ресурс) и около десятка страниц, дающих частичную информацию об этих последовательностях команд. По-видимому, полная спецификация терминала Евангелия DEC никогда не делалась из DEC.
Ясно, что CSI C
это перемещение курсора вправо и значение по умолчанию 1.
Что не ясно, так это в чем смысл CSI 0 C
.
Почему там ноль, кажется, что команда ничего не делает? Если это означает «использовать значение по умолчанию», то это могло бы быть отправлено как 1 вместо этого, но более короткая строка не будет иметь аргумента и полагаться на значение по умолчанию, интерпретируемое как 1 в любом случае. Эти реальные физические терминалы VT часто использовались на скорости 300 бод и ниже, поэтому один символ имел значение!
Я не настолько продвинут с vttest, что могу просто попробовать оба способа и посмотреть, что делает все идеально, но я достаточно далеко, чтобы такие маленькие вопросы начинали иметь значение.
источник
[
, который может быть закодирован как двухсимвольная последовательностьESC [
или как[
с 8-ым установленным битом. (Некоторые модели могут поддерживать толькоESC [
) Я не знаю, чтоCSI 0 C
сделал на vt102; на xterm это эквивалентноCSI 1 C
. Я подозреваю, но не знаю наверняка, что 0 и отсутствие значения анализируются одинаково в какой-то момент (подумайтеatoi
). Вы искали комментарии в источнике xterm?Ответы:
Я связался с Томасом Дики (invisible-island.net), который поддерживает xterm и vttest - он объяснил, что
CSI 0 C
это то же самое, чтоCSI 1 C
иCSI C
в xterm.Для тех, кто ищет дополнительную информацию о программировании терминала, я настоятельно рекомендую проверить источник xterm, который он размещает - в частности, ctlseqs.txt внутри xterm, который очень похож на одну настоящую ссылку на последовательности управления терминалом, которую я искал.
источник
Почему совместимость с жестким кодом для конкретного типа терминала, когда у вас уже есть база данных, отображающая функциональность в конкретные последовательности кода для множества различных терминалов? (база данных terminfo обычно находится в / usr / share и включена в большинство дистрибутивов ncurses). Любой ресурс по curses должен объяснить, как эти функции помечены.
Обратите внимание, что файлы terminfo обычно компилируются (используя tic), поэтому вам, возможно, придется немного покопаться, чтобы найти исходные файлы terminfo.
Смотрите также http://tldp.org/HOWTO/Text-Terminal-HOWTO.html#toc16 (есть ссылка в их одном хранилище файлов terminfo.src)
источник