git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3] git-prompt: make colourization consistent

From
Joakim Petersen <joak-pet@online.no>
Date
Jun 3, 2022, 17:23 UTC
Message-ID
<7d391d82-b15e-4a31-5207-c4037fec0bf9@online.no>
In-Reply-To
<xmqqy1ydhfcc.fsf@gitster.g>
On 03/06/2022 18:38, Junio C Hamano wrote:
Show 73 quoted lines
> This is not a new issue, but seeing this:
> 
>   	if [ $detached = no ]; then
>   		branch_color="$ok_color"
>   	else
>   		branch_color="$bad_color"
>   	fi
>   	c="$branch_color$c"
>   
>   	z="$c_clear$z"
>   	if [ "$w" = "*" ]; then
>   		w="$bad_color$w"
>   	fi
>   	if [ -n "$i" ]; then
>   		i="$ok_color$i"
>   	fi
>   	if [ -n "$s" ]; then
>   		s="$flags_color$s"
>   	fi
>   	if [ -n "$u" ]; then
>   		u="$bad_color$u"
>   	fi
> +	if [ -n "$p" ]; then
> +		p="$c_clear$p"
> +	fi
> +	if [ -n "$sparse" ]; then
> +		sparse="$c_clear$sparse"
> +	fi
>   	r="$c_clear$r"
>   }
> 
> it makes me wonder if the more forward looking and future-proof way
> that is resistant to any future and random reshuffling like what
> 0ec7c23c (git-prompt: make upstream state indicator location
> consistent, 2022-02-27) did would be to make it a rule to maintain
> that there is no coloring by default, and when any of these tokens
> like w, i, s, ... are not empty, enclose them inside "color-on" and
> "color-off" sequence.
> 
> For example,
> 
>   	if [ "$w" = "*" ]; then
>   		w="$bad_color$w"
>   	fi
> 
> would mean $w, when it is "*", would cause gitstring to contain an
> asterisk that is painted in $bad_color, but ALSO causes whatever
> that happens to come AFTER $w in gitstring to be painted in the same
> color UNLESS it tries to protect itself.  Right now, $w may be
> immediately followed by $i, and $i does protect itself by prefixing
> with $ok_color, but if $i is empty, $w's coloring will extend to $s.
> 
> So, if we did this instead:
> 
> - 	z="$c_clear$z"
>   	if [ "$w" = "*" ]; then
> - 		w="$bad_color$w"
> + 		w="$bad_color$w$c_clear"
>   	fi
> 
> and make similar changes to everything else we see above, we
> probably can lose the ones that prefix with $c_clear, because each
> token that paints itself in unusual color is now responsible for
> returning the terminal state to normal with the $c_clear sequence
> after it is done with it.  We do not have to special case sparse, p,
> or r in this helper function at all if we go that route, no?
> 
> If the helper were written that way, then reshuffling the order of
> the tokens done in 0ec7c23c (git-prompt: make upstream state
> indicator location consistent, 2022-02-27) wouldn't have made the
> patch under discussion necessary at all, which is what I see is
> valuable from the "maintainability" point of view.
> 

That does seem like a much better idea for maintainability, I can change the patch to do this instead. I have one question, though: the sequence $c$b (bare state and branch name) is a special case, where they're intended to have the same colour, should I wrap both in colour set, colour clear, or only clear after $b? The former requires rewriting the tests or changing $gitstring to not include $c when $c is empty, while the latter keeps the tests unchanged, but may pose a problem if "BARE:" should at any point not appear immediately before the branch name.

Previous: Junio C HamanoNext: Joakim Petersen
Message 13 of 43 in “git-prompt: make colourization consistent”
  1. git-prompt: make colourization consistentJoakim Petersen, Jun 1, 2022
  2. Ævar Arnfjörð BjarmasonJun 1, 2022
  3. Joakim PetersenJun 1, 2022
  4. Junio C HamanoJun 1, 2022
  5. Joakim PetersenJun 1, 2022
  6. Junio C HamanoJun 1, 2022
  7. git-prompt: make colourization consistentJoakim Petersen, Jun 2, 2022
  8. joak-pet@online.noJun 2, 2022
  9. Junio C HamanoJun 2, 2022
  10. Joakim PetersenJun 3, 2022
  11. git-prompt: make colourization consistentJoakim Petersen, Jun 3, 2022
  12. Junio C HamanoJun 3, 2022
  13. Joakim PetersenJun 3, 2022
  14. Joakim PetersenJun 3, 2022
  15. Justin DonnellyJun 3, 2022
  16. Junio C HamanoJun 3, 2022
  17. Joakim PetersenJun 4, 2022
  18. Junio C HamanoJun 6, 2022
  19. Junio C HamanoJun 3, 2022
  20. git-prompt: make colourization consistentJoakim Petersen, Jun 4, 2022
  21. Justin DonnellyJun 4, 2022
  22. Joakim PetersenJun 4, 2022
  23. git-prompt: make colourization consistentJoakim Petersen, Jun 4, 2022
  24. Bagas SanjayaJun 6, 2022
  25. Junio C HamanoJun 7, 2022
  26. Joakim PetersenJun 9, 2022
  27. Junio C HamanoJun 6, 2022
  28. Joakim PetersenJun 6, 2022
  29. Junio C HamanoJun 6, 2022
  30. Joakim PetersenJun 7, 2022
  31. git-prompt: make colourization consistentJoakim Petersen, Jun 6, 2022
  32. git-prompt: make colourization consistentJoakim Petersen, Jun 7, 2022
  33. Junio C HamanoJun 7, 2022
  34. Joakim PetersenJun 9, 2022
  35. SZEDER GáborJun 9, 2022
  36. Joakim PetersenJun 9, 2022
  37. Junio C HamanoJun 9, 2022
  38. SZEDER GáborJun 11, 2022
  39. git-prompt: make colouring consistentJoakim Petersen, Jun 9, 2022
  40. git-prompt: fix expansion of branch colour codesJoakim Petersen, Jun 9, 2022
  41. Junio C HamanoJun 10, 2022
  42. Joakim PetersenJun 10, 2022
  43. git-prompt: fix expansion of branch colour codesJoakim Petersen, Jun 10, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.