Вывод терминала Pushdown

Я всегда помещал пустую строку в конец. Я думаю, что это выглядит более чистым, и некоторый дроссель программ на последней строке, если нет новой строки.

16
03.04.2012, 20:16
3 ответа

К сожалению, это будет довольно трудно. Протокол между приложениями и терминалом OS X является вариантом VT100 / управляющий протокол терминала ANSI, конкретно протокол XTerm.

Это включает набор предположений об экранном положении, и т.д., который был бы сложен для переотображения на мир, где дисплей был инвертирован.

Еще хуже, весь Ваш эмулятор терминала добирается, строка "помещенного этот символ в этом положении" команды типа. Нет никакого различия, сделанного между командной строкой и выводом команды, выполненной им, таким образом, Вы не можете сделать одной вещи для обеих частей - по крайней мере, не без сотрудничества от оболочки внизу.

Оболочка и программы, предполагают, что экран продолжается вверх - новые данные внизу и продолжается вниз навсегда.

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

Это инвертировало бы порядок строк в выводе команды, тем не менее, таким образом, остальная часть содержания будет всплывающий назад также. Если Вы хотели команды (например: ls, кошка) бежать, но подсказки для продвижения жизни более твердо.

Я не знаю программного обеспечения, которое реализует это. (..., но см. комментарий JdeBD к этому для ссылки на одну.) :)

6
27.01.2020, 19:48

В ударе это отобразит текущую подсказку/команду наверху и ее вывод ниже, но без прокрутки или предыдущих команд:

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1'

Эта функция поместит предыдущие команды ниже, но необходимо передать каждую команду по каналу к ней индивидуально. К сожалению, exec > >(f) не может помочь с этим, поскольку это перенаправляет весь удар, не отдельные команды. Вот функция:

f () { tee ~/.STDIN | wc -l | xargs expr 1 + | xargs tput il && cat ~/.STDIN; }

Затем выполните каждую команду как:

command args |f

Это сохраняет вывод, создает много пустых строк, равных length+1, затем откладывает вывод в. Можно наклеить строку в конце, который отобразит поддельное быстрое или горизонтальное правило, если Вам нравится. Например.

printf '%*s' $COLUMNS | tr ' ' _;

Как дерьмо, но автоматическая альтернатива этой целой функциональной вещи, мы можем добавить команду в конец нашего более раннего $PROMPT_COMMAND, который очищает несколько произвольные 11 строки:

PROMPT_COMMAND='tput cup 0 0; tput el; tput el1; tput il 11'

Можно также использовать tput -S избегать нескольких двоичных вызовов.


Я добрался $PROMPT_COMMAND от https://github.com/swirepe/alwaysontop.

6
27.01.2020, 19:48

Несмотря на то, что это не будет точно обратный вывод, он сохранит вашу подсказку наверху:

https://github.com/swirepe/alwaysontop

, чтобы использовать его:

git clone https://github.com/swirepe/alwaysontop.git
cd alwaysontop/
source alwaysontop.sh

Если вы решите, что вам нравится, просто источнив его в своем .bash_profile с чем-то вроде:

echo "source ~/alwaysontop/alwaysontop.sh" >> ~/.bash_profile
6
27.01.2020, 19:48

Теги

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