2012-05-08 3 views
2

Я пытаюсь обернуть голову вокруг последовательностей VT102 и как работают такие библиотеки, как ncurses.xterm/vt102 последовательности, чтобы заполнить окно терминала, затем выйти на клавиатуре, очистить все, что было на экране?

Чтобы привести пример, когда я открываю Emacs, он заполняет окно терминала. Когда я нажимаю C-xC-c, программа выходит и окно моего терминала выглядит так, как было показано до того, как я запустил emacs (т. Е. Строка над моим курсором отображает команду emacs в моей истории zsh, а не то, что предоставил emacs).

В качестве своего рода «привет мир», я написал небольшой скрипт ruby, который открывает /dev/tty, а затем пишет \x1B[48;597m\n (пустые строки с цветом фона) для столько строк, сколько есть в моем терминале. Затем программа спит в течение 5 секунд, и я счастливо смотрю на яркий оранжевый экран на мгновение. Затем он выходит, оставляя меня на моей zsh-подсказке, с 53 строками ярко-оранжевого цвета над ним.

Два вопроса:

  1. пишет пустые строки с цветом фона правильный способ, чтобы заполнить окно терминала с цветом?
  2. Как полностью очистить экран, отправив некоторую последовательность VT102 в/dev/tty?

Я могу отправить \x1B[2J, но это делает то же самое, когда я выполняю команду clear и фактические просто сдвигает все содержимое до окна терминала, пока мой курсор не находится на самом верху заготовки а не оставлять курсор везде, где это было бы естественно, если бы моя программа не написала на пустые строки пустые строки.

PS: Не знаете, какие теги следует использовать здесь, чтобы на кого-то на самом деле могли подписаться.

ответ

3

Является ли пустые строки с цветом фона правильным способом заполнить окно терминала цветом?

Нет. Правильный способ сделать это (на терминале, который поддерживает BCE *), чтобы установить фоновый цвет, а затем удалить экран с помощью последовательности ED (например, ^[ [ 2 J).

*: большинство современных терминалов делают

Как я полностью очистить экран, отправив некоторую последовательность VT102 в/разработчик/TTY?

Использование ED. См. Выше.

Если то, что вы действительно хотите сделать, это перейти на альтернативный экран (например, Emacs делает в вашем примере), альтернативный экран управляются приватным режим 1049. Вы можете переключиться на него с помощью ^[ [ ? 1 0 4 9 h, и переключаться с помощью ^[ [ ? 1 0 4 9 l , Обратите внимание, однако, что это расширение xterm; он не является полностью стандартным и не поддерживается никакими аппаратными терминалами DEC (например, VT102).

+0

Удивительные, новые ключевые слова, спасибо :) '[? 1049h' и' [? 1049l' do * почти * правильные вещи, за исключением того, что курсор находится прямо в верхней части экрана после моего выхода. Я собираюсь прочитать эти расширения, которые вы упомянули. – d11wtq

+0

Режим?1049 должен сохранять и восстанавливать курсор при его установке/сбросе - убедитесь, что вы случайно не делаете что-либо, на котором находится курсор до/после. См. Http://rtfm.etla.org/xterm/ctlseq.html для списка дополнительных контрольных последовательностей и http://vt100.net/docs/ для исходных документов DEC. – duskwuff

+0

Оказывается, я был просто спящим и набрал «1» вместо «l»;) Большое спасибо, я на самом деле сейчас на старте и знаю, что я ищу! – d11wtq

 Смежные вопросы

  • Нет связанных вопросов^_^