У меня есть игровая панель ASCII, которую я показываю в терминале Mac OS X, и ее нужно часто обновлять. Есть ли удобный способ стереть или перезаписать ранее напечатанный контент в терминале? Или мне нужно каждый раз очищать экран и перепечатывать доску? (Ищете решения, которые используют Java или Scala)
Программа терминалов OS X эмулирует цвет xterm (переменная среды TERM
показывает значение по умолчанию xterm-color
), которая сама определяется как эмуляция DEC VT102/220, которая в основном использует/определяет escape-коды ANSI.
Если вы просто хотите очистить весь экран, вам нужно будет вывести escape-последовательность, которая соответствует CUP
(Cursor Update), а затем ED
(Erase Display). На VT102 вы хотели бы использовать:
<ESC>[H<ESC>[J
Где <ESC>
- escape-символ (ASCII 27).
Чтобы использовать буфер альтернативного экрана (как указано в vim
или emacs
), вам необходимо отправить код для запуска альтернативного экранного буфера при запуске:
<ESC>[?1049h
а затем вернитесь к обычному буферу экрана, когда вы закончите:
<ESC>[?1049l
При использовании альтернативного экранного буфера у вас не будет прокрутки назад, и вы не будете влиять на прокрутку назад или обычное содержимое экрана. После возобновления обычного экранного буфера вы вернетесь в исходный контекст терминала, включая все существующее содержимое экрана и прокрутите назад.