Вызов «менее» пейджера из Ruby оставляет грязь в терминале - есть ли обходной путь? - PullRequest
2 голосов
/ 16 января 2012

Если я выполняю less somefile в моем терминале через bash, текст больше не отображается, когда я выхожу из пейджера - что очень приятно.

Однако, если я делаю то же самое с рубинаСценарий, текст на странице остается в текстовом буфере терминала:

exec 'less somefile'

Как я могу получить такое же поведение, когда текст больше не оставляет ганк в терминале?Я понятия не имею, как less справляется с этим.

1 Ответ

2 голосов
/ 16 января 2012

Ну, если честно, моя переменная окружения LESS случайно содержит X, что, как упоминал Джон Цвинк , не позволяет less очистить экран.

Для любопытных я наткнулся на статью с интересной информацией об этом поведении . Судя по всему, в терминалах можно реализовать возможность сохранения / восстановления экрана. Это часто называют «альтернативными экранами». Для выдачи необходимых кодов терминала вы можете использовать tput smcup и tput rmcup. Тривиально использовать это из Ruby, где можно восстановить экран:

def restore
  system 'tput smcup'
  yield
  system 'tput rmcup'
end

# The screen will be restored at the end of the block:
restore do
  100.times { puts "Look fast!" }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...