From ec4b87b34a5f180b3613abcc7714c6d8ceb36dd3 Mon Sep 17 00:00:00 2001 From: Kévin Le Gouguec Date: Fri, 3 Feb 2023 07:56:09 +0100 Subject: Give up on colored PS4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first mistake here was to forget to wrap console codes with \[…\]; for some reason though after adding those… export PS4=$(echo -en '\[\e[7m\]+ \[\e[0m\]') … bash no longer repeats the first character (+) according to the indirection level, or rather, it repeats an entirely unrelated character: $ ( PS4='+ ' ; set -x ; echo $(echo $(echo hi | grep hi)) ) +++ echo hi +++ grep --color=auto hi ++ echo hi + echo hi hi $ ( PS4=$(echo -en '\[\e[7m\]+ \[\e[0m\]') set -x echo $(echo $(echo hi | grep hi)) ) |& hexdump -C 00000000 01 01 01 1b 5b 37 6d 02 2b 20 01 1b 5b 30 6d 02 |....[7m.+ ..[0m.| ^^ ^^ ^^ (echo) 00000010 65 63 68 6f 20 68 69 0a 01 01 01 1b 5b 37 6d 02 |echo hi.....[7m.| ^^ ^^ ^^ (grep) 00000020 2b 20 01 1b 5b 30 6d 02 67 72 65 70 20 2d 2d 63 |+ ..[0m.grep --c| 00000030 6f 6c 6f 72 3d 61 75 74 6f 20 68 69 0a 01 01 1b |olor=auto hi....| ^^ ^^ (echo) 00000040 5b 37 6d 02 2b 20 01 1b 5b 30 6d 02 65 63 68 6f |[7m.+ ..[0m.echo| 00000050 20 68 69 0a 01 1b 5b 37 6d 02 2b 20 01 1b 5b 30 | hi...[7m.+ ..[0| ^^ (echo) 00000060 6d 02 65 63 68 6f 20 68 69 0a 68 69 0a |m.echo hi.hi.| 0000006d No idea where those ^A characters come from. While at it, wrap PS2 to avoid line-wrapping shenanigans. --- .bash_prompt | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to '.bash_prompt') diff --git a/.bash_prompt b/.bash_prompt index 4777251..8b280e5 100644 --- a/.bash_prompt +++ b/.bash_prompt @@ -58,11 +58,11 @@ __set-title () echo -ne "\E]2;${title}\a" } -# In order to know how much space PS1 takes, Bash needs us to delimit -# non-printing characters with \[ and \]. +# In order to know how much space a prompt takes, Bash needs us to +# delimit non-printing characters with \[ and \]. __start-nonprinting () { - if [ ${BUILDING_PS1} ] + if [ ${BUILDING_PS} ] then echo -en '\[' fi @@ -70,7 +70,7 @@ __start-nonprinting () __end-nonprinting () { - if [ ${BUILDING_PS1} ] + if [ ${BUILDING_PS} ] then echo -en '\]' fi @@ -118,11 +118,11 @@ __fontify () __set-prompt () { - BUILDING_PS1=t + BUILDING_PS=t PS1="$(__write-context)\n$(__fontify '\$' dim) " - unset BUILDING_PS1 + unset BUILDING_PS } __current-column () @@ -209,9 +209,6 @@ __init-smart () { ### Prompts. - PS2=$(__fontify '… ' dim) - export PS4=$(__fontify "${PS4}" reverse) - if __have-gitprompt then . /usr/lib/git-core/git-sh-prompt @@ -223,6 +220,11 @@ __init-smart () PROMPT_COMMAND=__refresh-terminal + PS2=$( + BUILDING_PS=t + __fontify '… ' dim + ) + ### Bindings. bind -f ~/.bash_inputrc -- cgit v1.2.3