Как остановить «очистить» от очистки буфера прокрутки

Самый простой способ исправить это:

sudo apt-get clean
sudo apt-get update
1
задан 28 June 2016 в 22:47

3 ответа

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

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

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

Это загрузит измененный terminfo и сохранит его. перезагрузите терминал и очистите его, теперь больше не удаляйте буфер прокрутки

2
ответ дан 23 May 2018 в 08:47

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

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

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

1
ответ дан 23 May 2018 в 08:47

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

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

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 на использование tic, так как редактирование .bashrc:

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

2) влияет только на пользователя (не все пользователи будут нуждаться в модифицированной функции очистки)

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

1
ответ дан 23 May 2018 в 08:47

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

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