Der folgende Code (verwendet zsh-Funktionen, aber das Prinzip kann auch mit anderen Shells verwendet werden) definiert zwei Shell-Funktionen prompt_middle
und prompt_restore
.
Die erste Funktion hält die Eingabeaufforderung immer über der Mitte des Terminals, indem eine entsprechende Anzahl von Leerzeilen unter der Eingabeaufforderung erzwungen wird. Die letztere Funktion stellt das normale Verhalten wieder her.
Sie können diese Funktionen einigen Verknüpfungen zuweisen oder eine Logik verwenden, um zwischen diesen beiden Modi umzuschalten.
# load terminfo modules to make the associative array $terminfo available
zmodload zsh/terminfo
# save current prompt to parameter PS1o
PS1o="$PS1"
# calculate how many lines one half of the terminal's height has
halfpage=$((LINES/2))
# construct parameter to go down/up $halfpage lines via termcap
halfpage_down=""
for i in {1..$halfpage}; do
halfpage_down="$halfpage_down$terminfo[cud1]"
done
halfpage_up=""
for i in {1..$halfpage}; do
halfpage_up="$halfpage_up$terminfo[cuu1]"
done
# define functions
function prompt_middle() {
# print $halfpage_down
PS1="%{${halfpage_down}${halfpage_up}%}$PS1o"
}
function prompt_restore() {
PS1="$PS1o"
}
Anstatt zwischen zwei Modi zu wechseln, würde ich persönlich einen viel einfacheren Ansatz verwenden (Sie benötigen die Definitionen $halfpage_up/down
von oben):
magic-enter () {
if [[ -z $BUFFER ]]
then
print ${halfpage_down}${halfpage_up}$terminfo[cuu1]
zle reset-prompt
else
zle accept-line
fi
}
zle -N magic-enter
bindkey "^M" magic-enter
Dadurch wird überprüft, ob die aktuelle Befehlszeile leer ist (siehe meine andere Antwort ), und in diesem Fall wird die Eingabeaufforderung in die Mitte des Terminals verschoben. Jetzt können Sie Ihre Eingabeaufforderung durch erneutes Drücken der ENTER
Taste schnell vorspulen (oder Sie möchten sie, ähnlich wie bei einem Doppelklick, durch zweimaliges Drücken aufrufen ).