首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >背景色延伸到行尾的Bash提示符

背景色延伸到行尾的Bash提示符
EN

Stack Overflow用户
提问于 2016-09-03 09:42:17
回答 2查看 1.4K关注 0票数 4

对我来说,这是一个轻率的时间(总有一天.)。

我在试着得到一个2行提示:

  • 第一行有位置信息,背景色到行尾。
  • 第2行,包含先前命令的时间和退出代码

我快到了,但我无法破解“背景色到行尾”的部分。不完全是。

收集来自多个来源的信息,最重要的是来自这里这里的信息,我得到了这个结果(截图)

如您所见,列计算有问题:

  • 它到不了线的尽头
  • 这取决于第一行的文本长度。
  • 当到达终端底部时,情况会变得更糟;然后,它确实到达线路的末尾;错误的线路.
  • 另一件奇怪的事情:在第2条提示符行上用括号表示的tiny;只有在输入A命令之后才会出现。

这是我的bashrc代码:

代码语言:javascript
复制
PROMPT_COMMAND=__prompt_command
__prompt_command()
{
    local EXIT="$?" 

    local Red='\[\033[1;38;5;9m\]'
    local Green='\[\033[1;38;5;10m\]'
    local Gray='\[\033[0;38;5;248m\]'
    local BgBlue='\[\033[48;5;253;1;38;5;12m\]'
    local BgPurple='\[\033[48;5;253;1;38;5;93m\]'
    local None='\[\e[0m\]'

    PS1="${BgPurple}\u@\h:${BgBlue}\$PWD"

    printf -v TC_SPC "%${COLUMNS}s" ''

    COLUMNS=$(tput cols)
    PS1=`echo $PS1 | sed "s/$/$TC_SPC/; s/^\\(.\\{${COLUMNS}\\}\\) */\\1/"`

    PS1+="\n${Gray}\D{%F %T}"

    if [ $EXIT != 0 ]; then
        PS1+=" ${Red} O_o ${None}"      # Add red if exit code non 0
    else
        PS1+="${Green} ^_^ ${None}"
    fi
}

我尝试过更多的黑客攻击,但没有成功。

噢,还有另一个更复杂的sed位版本,我也尝试过:

代码语言:javascript
复制
    PS1=`echo $PS1 | sed "s/$/$TC_SPC/; s/^\\(\\(\\o33\\[[0-9;]*[a-zA-Z]\\)*\\)\\([^\o033]\\{${COLUMNS}\\}\\) */\\1\\3/"`

不同结果(终端截图),但还是不好。

在这一点上,我需要任何帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-03 12:54:35

而不是:

代码语言:javascript
复制
printf -v TC_SPC "%${COLUMNS}s" ''

COLUMNS=$(tput cols)
PS1=`echo $PS1 | sed "s/$/$TC_SPC/; s/^\\(.\\{${COLUMNS}\\}\\) */\\1/"`

使用:

代码语言:javascript
复制
PS1+=$'\033[K' #erase to end of line
票数 2
EN

Stack Overflow用户

发布于 2016-09-03 18:59:59

这是工作解决方案,感谢Eric的“擦除到行尾”的提示。

代码语言:javascript
复制
PROMPT_COMMAND=__prompt_command # Func to gen PS1 after CMDs
__prompt_command()
{
  local EXIT="$?"             # This needs to be first (retrieves last commmand exit code)

  local Red='\[\033[1;38;5;9m\]'
  local Green='\[\033[1;38;5;10m\]'
  local Gray='\[\033[0;38;5;248m\]'
  local BgBlue='\[\033[48;5;253;1;38;5;12m\]'
  local BgPurple='\[\033[48;5;253;1;38;5;93m\]'
  local None='\[\e[0m\]'

  PS1="${BgPurple}\u@\h:${BgBlue}\$PWD"
  PS1+="\033[K"             # erase to end of 1st line (background color stays)

  PS1+="\n${Gray}\D{%F %T}\a"

  if [ $EXIT != 0 ]; then
    PS1+="${Red} O_o ${None}"   # Add red if exit code non 0
  else
    PS1+="${Green} ^_^ ${None}"
  fi
  PS1+="\033[K"             # erase to end of 2nd line (no more background color)
}

这是结果(终端截图)。又一个快乐的提示主人..。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39305476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档