ksh 提示符定义为带有换行符的函数

ksh 提示符定义为带有换行符的函数

我自己写了一个漂亮的、git 感知的 ksh 提示函数。在这里,我只提供了一个最小的工作示例,以便您可以看到我的问题,而不会出现任何臃肿的情况:

#!/bin/ksh

function _test_prompt
{
    prompt="`whoami`@`hostname` > "
    [[ $(id -u) -eq 0 ]] && prompt="ROOT@`hostname` # "

    print "\n\w"
    print -n "$prompt"
}

export readonly PS1='$(_test_prompt)'

我从我的.kshrc.

问题是,当我尝试查看更长的、经过美化的 git 日志时,提示符的换行符会截断输出的顶部。例如

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s'

显示为

* f0490d0 - Make sure fb is big enough to handle reconfigure   (3 years, 10 months ago) <Keith Packard>
* 7caa6ce - Add xrandr-auto sample script   (3 years, 10 months ago) <Keith Packard>
* f59c924 - (tag: v0.2) Update to version 0.2   (7 years ago) <Keith Packard>
* a6c8969 - Add --auto switch, a shortcut for --config "xrandr --auto"   (7 years ago) <Keith Packard>
* d45135b - Add manual   (7 years ago) <Keith Packard>
* ef165dc - add .gitignore   (7 years ago) <Keith Packard>
* d927ec1 - Autotool   (7 years ago) <Keith Packard>
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~

~/git-misc/x-on-resize
user@hostname >

并且输出的第一行只能通过向上翻页一次才能看到:

~/git-misc/x-on-resize
user@hostname > git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s'
* 617e5ed - (HEAD -> master, origin/master, origin/HEAD) Use mode ID instead of mode for autoconfig   (3 years, 10 months ago) <Keith Packard>
* f0490d0 - Make sure fb is big enough to handle reconfigure   (3 years, 10 months ago) <Keith Packard>

(这是上一页底部的内容,被剪掉)。

正如你可以想象的那样,这非常烦人;在这种情况下,我实际上丢失了最近的提交,并且必须向上滚动才能找到它。

仅当日志的输出适合一个屏幕时才会发生这种情况(否则它会减少)。

感谢您的帮助!

答案1

像往常一样,在我真正抽出时间询问之后,我设法解决了这个问题。

我只是将pager.loggit config 变量设置为less -RFc;-c据我了解,相关开关是:它告诉less从下到上重新绘制屏幕,​​而不是反之亦然。

显然,这确实不是 ksh 问题。我很抱歉。

相关内容