在为命令行提示设置PS1变量时如何获取光标的坐标?

时间:2015-05-09 14:03:36

标签: linux macos bash ps1

我正在使用Mac。我想设置PS1变量以在命令行提示符下的行尾获取当前时间。像这样: exmaple 1 或这个: example 2

但是,遗憾的是,通过以下配置我无法得到我想要的东西:

CYAN="\[$(tput setaf 6)\]"
GREEN="\[$(tput setaf 2)\]" 
BLUE="\[$(tput setaf 4)\]"
YELLOW="\[$(tput setaf 3)\]" 
export PS1="$GREEN\u$BLUE@$CYAN\h $YELLOW\w\[$(tput cuf $(($(tput cols)-33)))\]$CYAN\[$(date +%H:%M)\]\n\\$ "

似乎我需要获取光标的当前位置并根据位置的坐标进行一些计算,但我不知道如何获得它。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

有一些问题。这个块

$(tput cuf $(($(tput cols)-33)))

似乎是你在问什么。如果要将日期定位在行尾,可以尝试使用hpa(水平位置绝对)功能,例如,

$(tput hpa $(($(tput cols)-5)))

这样,您可以将光标移动到线上给定的绝对位置,而不是将 relative 移动到当前位置。

给定的提示占用两行。如果在编写日期的部分之前和之后使用scrc功能(保存/恢复光标),则可以将其减少到一行。这可能会遇到行清除日期的问题,但需要考虑这个问题。

答案 1 :(得分:0)

感谢@Thomas的好答案,它可以真正解决我作为解决方案提出的问题。但它并不完美,这意味着它仍然无法获得我想要的命令提示符。

我发现在bash 中应该有无法解决我想要的提示。但是,正如@chepner所说,确实有一些方法可以在 zsh 中获得提示。

如何在zsh中获取提示

zsh是一个非常强大的shell,它内置于mac中,但它对于新手来说有点复杂。因此,有一个很好的工具可以解决它名为“oh-my-zsh”,这使得zsh的使用变得更加容易。

oh-my-zsh”包含zsh的许多主题。而且,幸运的是,我想要的提示与其中一个(see the themes here)非常相似,后者命名为blink。所以我只需要修改~/.oh-my-zsh/themes/blinks.zsh-theme中的一些主题文件,并且需要做的更改是:

更改文件的最后一行:

RPROMPT='%{%B%F{cyan}%}%!%{%f%k%b%}

RPROMPT='%{%B%F{cyan}%}%@%{%f%k%b%}