我可以在窗口的垂直中间显示终端提示吗?


1

我刚刚意识到在使用终端时我会喋喋不休,因为提示始终位于终端窗口的底部,这是垂直最大化的。

我希望提示位于窗口的垂直中间(或者在我眼睛所指的位置附近)。

您可以争辩说我可以调整窗口大小并实现这一目标,但有时我喜欢垂直空间(例如,跑步时ls -la)。所以,理想情况下,我可以在某个点和窗口底部之间切换提示的位置。

(我在MacOS下使用iTer和zsh,但我对这种做法的不可知/通用方式感兴趣)

Answers:


2

下面的代码(使用zsh功能,但priciple也可以与其他shell一起使用)定义了两个shell函数,prompt_middleprompt_restore

第一个函数通过在提示下面强制适当数量的空行来使提示始终位于终端的中间位置。后一种功能恢复了正常行为。

您可以将这些功能分配给某些快捷方式,或使用某些逻辑在这两种模式之间切换。

# 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"
}

我个人而不是在两种模式之间切换,我会使用一种更简单的方法(你需要$halfpage_up/down上面的定义):

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

这将检查当前命令行是否为空(请参阅我的其他答案),如果是,请将提示移至终端中间。现在,您可以通过另外按键快进您的提示ENTER(或者您可能要将其称为双击,类似于双击)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.