Когда я запускаю less
для какого-то файла, приглашение исчезает, и я вижу содержимое файла на экране. Затем, когда я нажимаю q kbd>, он возвращается к приглашению. Я думаю, что less
делает это путем сохранения текущего буфера терминала, открытия нового буфера, вывода файла в новый, затем, когда он закрыт, отбрасывания нового буфера и восстановления старого, но я не знаю, что это за процесс называется или как он это делает.
Я посмотрел в man less
, но ничего не нашел. Я попытался найти его, но не смог найти ничего полезного, за исключением того, что команда screen
может делать то же самое с сеансами оболочки.
В конечном счете, я спрашиваю, потому что я хочу, чтобы git diff
использовал новый буфер вместо печати inline. Я уже установил GIT_PAGER=less
и git --paginate diff
, но они ничего не изменили. И у меня есть обходной путь, но он немного длинный: git diff --color=always | less -R
Обновление: после некоторого исследования, похоже, что tput smcup
и tput rmcup
являются высокоуровневыми командами, которые делают то же самое, вероятно, используя пакет termcap
.
Весь из less
функции управления экраном находятся в screen.c
модуль. При запуске, если это не находится в “никаком init” (-X
или --no-init
) режим, это производит sc_init
строка, которая является termcap
ti
строка (“терминальная инициализация”, которая готовит терминал к полному экрану, управляющей курсором операции). В выходе это производит sc_deinit
строка, которая является termcap
te
строка.
Поведение, которое Вы видите, является поведением по умолчанию с git
, если less
не настроен (т.е. LESS
переменная сброшена); когда это имеет место, git
выполнения less
с FRX
опции, которые вызывают less
соответственно выходить, если содержание соответствует на одном экране, цветах отображения и пропуске, инициализирующем терминал.
Для получения поведения, Вы после, набор LESS
кому: -R
, или набор core.pager
git
установка на что-то как less -+X
(см. man git-config
для деталей).