Как сделать некоторым инструментам (например, nano, less) удается не оставлять контент в терминалах после выхода? [дубликат]

ОТВЕТ: https://askubuntu.com/questions/39217/unlock-keyring-with-fingerprint-reader-on-login/238055#238055 Короче говоря, никакую связку ключей нельзя разблокировать с помощью аутентификация по отпечатку пальца. Если я хочу, чтобы он был разблокирован, мне нужно использовать свой пароль для входа.

36
12.01.2017, 01:20
3 ответа

Здесь есть два мировоззрения:

  • Что касается программ, использующих termcap / terminfo, ваш терминал потенциально имеет два режима: режим адресации курсора и режим прокрутки . Последний является нормальным режимом, и программа переключается в режим адресации курсора, когда ей нужно перемещать курсор по экрану по адресам строки и столбца, рассматривая экран как двумерный объект.

    termcap и terminfo переводят это мировоззрение, которое видят программы, в мировоззрение, которое видят терминалы.

  • Что касается терминала (эмулируемого или реального), существует два экранных буфера, только один из которых отображается в любой момент. Есть первичный экранный буфер и альтернативный экранный буфер . Управляющие последовательности, генерируемые программами, переключают терминал между двумя терминалами.
    • Для некоторых терминалов, обычно эмулируемых, альтернативный экранный буфер адаптирован к использованию termcap / terminfo. Они разработаны с учетом того, что часть переключения в режим адресации курсора переключается на буфер альтернативного экрана, а часть переключения в режим прокрутки переключается на буфер основного экрана. Вот как переводят вещи termcap / terminfo. Таким образом, эти терминалы не показывают виджеты пользовательского интерфейса с прокруткой, когда отображается альтернативный экранный буфер, и просто не имеют механизма обратной прокрутки для этого экранного буфера.
    • Для других терминалов, обычно реальных, альтернативный экранный буфер очень похож на основной. Оба в значительной степени идентичны с точки зрения того, что они поддерживают.Обратите внимание, что несколько эмулированных терминалов попадают в этот класс. Например, Unicode rxvt поддерживает прокрутку как для основного, так и для альтернативного экранных буферов.

Программы, представляющие полноэкранные текстовые пользовательские интерфейсы (например, vim , nano , less , mc и т. Д.) Используйте termcap / terminfo для переключения в режим адресации курсора при запуске и обратно в режим прокрутки, когда они приостанавливают работу, завершают оболочку или выходят из нее. Библиотека ncurses делает это, но то же самое делает и программы, не использующие ncurses, которые строятся непосредственно поверх termcap / terminfo.

Прокрутка внутри TUI, представленная less или vim , не имеет ничего общего с прокруткой назад. Это реализовано внутри этих программ, которые просто перерисовывают свой полноэкранный текстовый пользовательский интерфейс по мере необходимости.

Обратите внимание, что эти программы не «не оставляют содержимого» в альтернативном экранном буфере. Терминал просто больше не отображает то, что они оставили.

  • Это особенно заметно с Unicode rxvt на некоторых платформах, где последовательности termcap / terminfo для переключения в режим адресации курсора неявно не очищают альтернативный экранный буфер. Таким образом, последовательное использование нескольких таких полноэкранных программ TUI может привести к отображению старого содержимого альтернативного экранного буфера, оставленного последней программой, по крайней мере, на некоторое время, пока новая программа не запишет свой вывод (наиболее заметно, когда ] less находится в конце конвейера).
  • С помощью xterm можно переключиться на отображение альтернативного экранного буфера из меню графического интерфейса эмулятора терминала и увидеть, что содержимое все еще там.

Фактические управляющие последовательности - это то, что соответствующие стандарты называют последовательностями управления установкой частного режима . Соответствующие номера частного режима - 47, 1047, 1048 и 1049. Обратите внимание на различия в том, какие дополнительные действия подразумеваются каждым из них, помимо переключения в / из альтернативного экранного буфера.

Дополнительная литература

44
27.01.2020, 19:36

Вы можете добавить к этому запрету парой способов. Вы можете разрешить less очистки экрана, вызвав его с аргументом -X .

Обратите внимание на символ $ в командных строках ниже. Это указание терминальной подсказки обычного пользователя.

$ seq 1 200 | less -X

Если это ваше желаемое поведение, вы можете связать less с этим значением по умолчанию с помощью:

$ alias less='less -X'

Существуют аналогичные обходные пути для других программ.

В качестве альтернативы, вместо того, чтобы пытаться настраивать каждое приложение по отдельности, вы можете добавить собственное определение терминала. В этом случае я назову его xterm-noclear для этого примера.

Выполните следующие шаги, чтобы создать новое определение xterm:

$ infocmp -I xterm > xterm-noclear.src
$ gedit xterm-noclear.src

Теперь измените вторую строку в вашем редакторе с xterm на xterm-noclear .

Удалите инструкции, очищающие экран, выполнив поиск rmcup и smcup и удалив эти две инструкции:

smcup=\E[?1049h,

и

rmcup=\E[?1049l, 

Сохраните файл, затем добавьте определение терминала с :

$ tic ~/xterm-noclear.src

Вы можете сделать это определение терминала общесистемным с помощью:

$ sudo tic ~/xterm-noclear.src

Теперь вы можете использовать этот TERM с:

$ export TERM=xterm-noclear
4
27.01.2020, 19:36

Библиотека с именем curses, она знает, какой тип терминала вы используете, и отправляет правильные escape-последовательности. Там терминалу предлагается переключиться на другой вертикальный буфер и режим, который позволяет больше контроля.

5
27.01.2020, 19:36

Теги

Похожие вопросы