终端底部的状态栏代替 PS1

终端底部的状态栏代替 PS1

我突然想到,当我在终端中执行操作时,我的 PS1 会为每个命令重复多次。我的 PS1 包含 CWD 和 git 分支,因此它可以变得相当长。

有没有一种方法可以将我的 PS1 设置为仅 $ 美元符号,但将其他信息移至“状态栏”或将其保留在终端底部?很像 tmux 的状态栏,但这些位通常构成我的提示的一部分。

理想情况下,我想要一个只涉及更改 .bashrc 的解决方案,但任何解决方案都可以。我做了一些谷歌搜索,发现了 tmux 的 git 分支(但没有 CWD/其他位)和一个非常不稳定的“状态栏与时间”,但并没有真正起作用。

问题示例: 在此输入图像描述

答案1

该提案应被理解为“概念验证”,而不一定是交钥匙解决方案。可能需要改进/调整。

您似乎无论如何都使用 console_codes ,PS1因此可能允许一些扩展使用。为了让“状态栏”出现在屏幕底部,无论之前如何调整大小,LINES都可以使用 shell 变量以及一些 shell 整数算术来缩小滚动区域,保存/恢复光标位置,并打印到屏幕底部。尝试

CSI=$'\e'"["
PS1="\[${CSI}s${CSI}1;$((LINES-1))r${CSI}$LINES;1f\u:YourOutputGoesHere:\w${CSI}K${CSI}u\]>"

处理 PS1 shell 变量和函数代码时有一些已知的警告,这些警告不一定在这里考虑,但在例如其他线程,在这些论坛中搜索并根据需要合并。

答案2

我一直在开发一个 tmux 插件,可以做到这一点。看一看:

https://github.com/casonadams/tmux-space-theme

或者如果您只想在 ~/.tmux.conf 中添加一些内容

home="#(if [[ $HOME == #{pane_current_path} ]]; then echo \"~\" ; else echo #{b:pane_current_path}; fi)"

path="#($(tmux showw -v @show-full-window-path) == true && echo \"$(echo #{pane_current_path} | awk '{print \"~\"$1}' | cut -d/ -f-1,4-)\" || echo \"$home\")"

git_status="#(cd #{pane_current_path}; git status --ignore-submodules -sb | head -n1 | tr -d \"# \" | cut -f1 -d\".\")"


# Then use the vars where you want them.

set-option -g status-right " $git_status "
set-window-option -g window-status-current-format " $path "

还可以添加setw -q @show-full-window-path true以显示完整路径。

相关内容