自定义 bash 提示符中的符号被截断

自定义 bash 提示符中的符号被截断

我正在使用自定义 bash 提示符和这个命令来回答问题:它看起来像这样:

PS1=$'\e[1;33m\\t \e[36m\u\e[34m@\e[36m\h\e[;1m: \e[34m\w\n \[\b\e[;1;31m✘\] ${?/#0/\[\b\b\e[32m✓ \]}${?/#[1-9]*/  }\[\b→\e[;1m\]  \$: \[\e[m\]'

命令成功执行后(exit code = 0)如下所示:
在此处输入图片描述

如果命令失败(exit code != 0),则如下所示:
在此处输入图片描述

如您所见,红色箭头被截断了,这其实不是问题,但仍然很烦人。无论我使用哪种等宽字体,结果总是截断箭头。

我的初始提示命令如下所示:

set_PS1()
{
    local Exit_Code="$?"
    local Reset="\\[$(tput sgr0 )\\]"
    local Bold="\\[$(tput bold )\\]"
    local Red="\\[$(tput setaf 1 )\\]"
    local Green="\\[$(tput setaf 2 )\\]"
    local Yellow="\\[$(tput setaf 3 )\\]"
    local Blue="\\[$(tput setaf 4 )\\]"
    local MagentaBG="\\[$(tput setab 5 )\\]"
    local Cyan="\\[$(tput setaf 6 )\\]"

    local Whoami='\u'
    local Where='\w'
    local Hostname='\h'
    local Time='\D{%H:%M:%S}'
    # Emoji are multi-byte, but shells think 1 byte = 1 character
    # We add a 1-character space, then enable color-code mode to ignore
    # the upcoming emoji, then backspace to draw the emoji on top of the space.
    local emoji_start=$' \\[\b'
    local emoji_end=$'\\]'

    if (($Exit_Code == 0 )); then
        local exit_code_prompt="$Green$emoji_start"$'\xE2\x9C\x93'"$emoji_end $emoji_start"$'\xE2\x86\x92'"$emoji_end" # Green checkmark symbol
    else
        local exit_code_prompt="$Red$emoji_start"$'\xE2\x9C\x98'"$emoji_end $Exit_Code $emoji_start"$'\xE2\x86\x92'"$emoji_end" # Red cross mark symbol and exit code
    fi


    local Line_1="$Bold$Yellow$Time $Cyan$Whoami$Blue@$Cyan$Hostname$Reset$Bold":" $Blue$Where$Reset"
    local Line_2="$Bold$exit_code_prompt $Reset$Bold \\$: $Reset"
    #local Line_2="$Bold \$: $Reset"

    PS1="$Line_1\\n$Line_2"
}

# We need to expand exit_code_prompt BEFORE PS1 prompt string expansion (see shopt promptvars in man bash)
# so we need to move it to PROMPT_COMMAND which runs earlier.
PROMPT_COMMAND=set_PS1

通过此设置,箭头可以正常显示当我在装载的物品内时,它不会显示,python venv这是不行的。因此,我现在使用的是带有截止箭头的简短版本...

更新: 使用字体时,DejaVu Sans Mono箭头不会被截断。事实上,截断的量会随着所用字体的不同而变化,有些截断量多一些,有些截断量少一些,DejaVu Sans Mono似乎没有截断,如下所示:

在此处输入图片描述

相关内容