Как остановиться 'ясный' из очистки scrollback буфер

Первоначально я думал, что Неограниченная прокрутка не работала с терминальным приложением на 16,04. У меня есть опция, "ограничивают scrollback" непроверенным. Несколько раз это прокручивает назад несколько раз, это не делает. Затем я понял, что это не прокручивает назад, когда когда-либо я использую clear команда. Это прокручивает назад только одну каменистую осыпь.

Я использую ясный много (почти однажды в каждых 3 командах).

Страница справочника для ясных точек к terminfo. Существуют некоторые опции на terminfo, но я не могу найти файл конфигурации, где я могу определить опции. Все файлы под/lib/terminfo/от, где ясный, кажется, читают, его конфигурация находятся в скомпилированном формате, и я не понимаю их.

Я не видел эту проблему с ранее к 14,04 (предположение).

Любая справка значительно ценится.

Спасибо.

7
задан 28 June 2016 в 12:47

6 ответов

Вместо CTRL+L наберите clear.

Это отправит "Form Feed" на клемму. В основном, она будет перемещать все вверх по высоте терминального окна, очищая экран, не влияя на вашу прокрутку.

9
ответ дан 23 November 2019 в 11:35

Это заняло некоторое время, так что, думаю, я должен поделиться, как я заставил это работать.

Если вы наберете "man clear", вы увидите, что в руководстве указано, что это состояние:

очищает экран, если это возможно, включая его буфер прокрутки (если определена расширенная возможность "E3").

Мы собираемся убрать эту возможность "E3":

Сначала выясните тип вашего терминала:

echo $TERM

Для меня это привело к "xterm-256color". Что бы это ни было, запомните это.

Теперь введите команду:

infocmp -x xterm-256color > tempfile

Где вы, очевидно, замените xterm-256color на вывод из первой команды. Это выведет расширенные возможности для данного типа терминала в 'tempfile'.

Теперь отредактируйте этот только что созданный файл. Вы ищете:

E3=\E[3J,

Найдите его и просто удалите. Всё это, так что если это выглядело так:

    ...
    Cs=\E]12;%p1%s\007, E3=\E[3J,
    Ms=\E]52;%p1%s;%p2%s\007, Se=\E[2 q, Ss=\E[%p1%d q,
    ...

Теперь это должно выглядеть так:

    ...
    Cs=\E]12;%p1%s\007,
    Ms=\E]52;%p1%s;%p2%s\007, Se=\E[2 q, Ss=\E[%p1%d q,
    ...

Сохраните файл. И из терминала выполните:

sudo tic -x tempfile

Это загрузит измененную терминальную информацию и сохранит ее. перезагрузите терминал и очистите его от скроллбуфера

10
ответ дан 23 November 2019 в 11:35

@heemayl и @bashBedlam Спасибо.

CTRL+L делает то, что я хочу. Но я привык все время печатать чисто. Поэтому я вроде как работал над этим, копируя /lib/xterm/x/{xterm, xterm-256color} из ubuntu 12.04. Есть переменная окружения с именем $TERM, которая хранит этот файл. Затем я прочитал ваш ответ и попробовал CTRL+L, и она сработала. Мне стало любопытно и я пытался посмотреть, смогу ли я поместить CTRL+L в скрипт и не получил где. Потом я вспомнил, что Стрэйс может дать мне то, что я хочу. Поэтому я запустил strace clear и обнаружил, что он пишет "\33[H\33[2J]", чтобы очистить экран. Так что я написал питоновый онелинер... распечатайте("\33[H\33[2J") и поместите его в файл и добавьте ссылку с именем clear, чтобы указать на него. Теперь у нас 2 обходных пути. Мне до сих пор интересно, как можно читать и изменять файлы терминов.

Еще раз спасибо.

1
ответ дан 23 November 2019 в 11:35

Этот ответ основан на ответе ската (над которым он неплохо поработал) и предназначен для его завершения.

1 - Чтобы очистить без потери прокрутки, введите следующая команда в консоли (нет необходимости в python, как предлагается в ответе на строковый массив):

printf '\33[H\33[2J'

2 - Чтобы не запоминать это, вы можете отредактировать файл .bashrc, чтобы создать для него псевдоним. Я бы назвал псевдоним ясным. В bash введите:

nano ~/.bashrc

И добавьте эту строку в конец:

alias clean="printf '\33[H\33[2J'"

Мне также нравится добавлять div (для разделителя):

alias div='echo;echo "------------------------------------------------------------------------------";echo;echo;echo;echo;echo;echo;echo;echo;echo;echo;echo;echo "------------------------------------------------------------------------------";clean'

Это делает так, что когда вы выполняете команду div, она вводит два разделителя с Между ними 10 новых строк, за которыми следует чистая команда. Это сделает так, что при прокрутке назад вы точно знаете, где использовали div.

Вы можете изменить поведение sudo bash, выполнив sudo su перед процедурой, которую я перечислил.

Я бы рекомендовал это вместо bashBedlam's ответ использования tic, как редактирования .bashrc:

1) он не требует прав sudo и может быть легко использован на ходу.

2) влияет только на вашего пользователя (не все пользователи захотят модифицированную функцию очистки )

3) сохранит обновления, которые обычно не касаются bashrc

5
ответ дан 23 November 2019 в 11:35

Краткий ответ : Если у вас относительно новее версия clear , вы можете избежать очистки буфера прокрутки с помощью параметра -x .


Длинный ответ :

clear command является частью ncurses .

Согласно журналу изменений ,

20130622
+ модифицируйте программу clear , чтобы учесть расширенный E3
возможность очистки буфера обратной прокрутки терминала (патч от
Мирослав Личвар, Redhat # 815790).

таким образом, предположение ОП

Я не видел этой проблемы ранее, до 14.04 (предположение).

может быть прав. В журнале изменений также указано

20170819
+ добавить параметр -x для очистки / tput, чтобы сделать расширение E3 необязательным
(cf: 20130622).

Таким образом, вы можете использовать опцию -x , если дата выпуска ncurses равна или новее, чем 2017-08-19. Это можно проверить командой clear -V . Например,

$ clear -V
ncurses 6.1.20180127

, и это можно читать как « ncurses 6.1 , выпущенный 27.01.2018».

Я подтвердил, что насколько я использую официальные репозитории, процедура действительна на

  • Arch Linux

  • Arch Linux ARM

  • Linut Mint 19

  • Ubuntu 20.04

  • Raspbian Buster Lite

и недействителен на

  • Raspbian Stretch Lite (старше, чем ] Buster .)
2
ответ дан 23 November 2019 в 11:35

Как упоминалось выше, clear -x помогает.

Однако, если вы похожи на меня и обычно набираете clear сотни раз в день, не надеясь вывести из строя пальцы, вы можете создать простой псевдоним в .bashrc (или эквивалент), например: alias clear = 'clear -x' .

0
ответ дан 5 January 2021 в 22:38

Другие вопросы по тегам:

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