Можно использовать сборку Eric Hameleer из http://www.slackware.com/~alien/slackbuilds/wine. Не могло бы быть актуальным (т.е. создать для 14,0, не мог бы быть там), но можно попытаться установить его так или иначе или просто восстановить его сами - на разумной машине, это должно быть готово в десятках мелкой вершины.
Если использовать bash
, то должен быть выполнен следующий трюк:
TOLASTLINE=$(tput cup "$LINES")
PS1="\[$TOLASTLINE\]$PS1"
Или (менее эффективный, т.к. выполняется одна команда tput
перед каждым запросом, но работает после изменения размера окна терминала):
PS1='\[$(tput cup "$LINES")\]'$PS1
Чтобы предотвратить изменение кода выхода tput
, вы можете явно сохранить и сбросить его:
PS1='\[$(retval=$?;tput cup "$LINES";exit $retval)\]'$PS1
Обратите внимание, что переменная retval
является локальной; она не влияет ни на одну переменную retval
, которую вы могли бы определить в оболочке, в противном случае.
Так как большинство терминалов cup
имеют одинаковую возможность \e[y;xH
, вы также можете закодировать её:
PS1='\[\e[$LINES;1H\]'$PS1
Если вы хотите, чтобы она была безопасна от последующего сброса PS1, вы также можете использовать переменную PROMPT_COMMAND
. Если она установлена, то выполняется как команда до , после чего выводится запрос. Так что эффект также может быть достигнут с помощью
PROMPT_COMMAND='(retval=$?;tput cup "$LINES";exit $retval)'
Конечно, в то время как сброс PS1
не повлияет на это, некоторые другие программы также могут изменить PROMPT_COMMAND
.
В качестве небольшого упрощения предыдущего ответа мне показалось проще просто запустить:
tput cup $LINES
в начале .bashrc
или .zshrc
. Он просто делает свою работу.
Pros:
Cons:
clear
на clear; tput ...
не помогает; Ответы с использованием $LINES
излишне не переносимы. Как сделано в resize
, вы можете просто попросить xterm
установить позицию на сколь угодно большое число строки, например,
tput cup 9999 0
(предполагая, что у вас есть окно меньше 10 тысяч строк, не считая scrollback).
Поскольку строка не будет изменяться как побочный эффект изменения размера окна, вы можете вычислить это один раз и вставить его в строку приглашения в качестве константы, например,
TPUT_END=$(tput cup 9999 0)
и позже
PS1="${TPUT_END} myprompt: "
в соответствии с вашими предпочтениями.
Что касается других процессов, модифицирующих PS1
: вам придется перекомпилировать PS1
после этих изменений, чтобы убедиться, что он выглядит так, как вы хотите. Но в вопросе недостаточно деталей, чтобы указать , где внести изменения.
И, наконец: поведение для завершения табуляции не связано с такого рода изменениями из-за предположений bash.