git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Felipe Contreras <felipe.contreras@gmail.com>
To: git@vger.kernel.org
Cc: git-fc@googlegroups.com, Felipe Contreras <felipe.contreras@gmail.com>
Subject: [PATCH 09/51] completion: prompt: use generic colors
Date: Tue, 30 Aug 2022 04:30:56 -0500	[thread overview]
Message-ID: <20220830093138.1581538-10-felipe.contreras@gmail.com> (raw)
In-Reply-To: <20220830093138.1581538-1-felipe.contreras@gmail.com>

When the prompt command mode was introduced in 1bfc51ac81 (Allow
__git_ps1 to be used in PROMPT_COMMAND, 2012-10-10) the assumption was
that it was necessary in order to properly add colors to PS1 in bash,
but this wasn't true.

It's true that the \[ \] markers add the information needed to properly
calculate the width of the prompt, and they have to be added directly to
PS1, a function returning them doesn't work.

But that is because bash coverts the \[ \] markers in PS1 to \001 \002,
which is what readline ultimately needs in order to calculate the width.

We don't need bash to do this conversion, we can use \001 \002
ourselves, and then the prompt command mode is not necessary to display
colors.

This is what functions returning colors are supposed to do [1].

[1] http://mywiki.wooledge.org/BashFAQ/053

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-prompt.sh | 19 +++++++------------
 t/t9903-bash-prompt.sh           |  8 ++++----
 2 files changed, 11 insertions(+), 16 deletions(-)

diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
index 1435548e00..01bd807657 100644
--- a/contrib/completion/git-prompt.sh
+++ b/contrib/completion/git-prompt.sh
@@ -96,9 +96,7 @@
 #
 # If you would like a colored hint about the current dirty state, set
 # GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
-# the colored output of "git status -sb" and are available only when
-# using __git_ps1 for PROMPT_COMMAND or precmd in Bash,
-# but always available in Zsh.
+# the colored output of "git status -sb".
 #
 # If you would like __git_ps1 to do nothing in the case when the current
 # directory is set up to be ignored by git, then set
@@ -255,12 +253,12 @@ __git_ps1_colorize_gitstring ()
 		local c_lblue='%F{blue}'
 		local c_clear='%f'
 	else
-		# Using \[ and \] around colors is necessary to prevent
+		# Using \001 and \002 around colors is necessary to prevent
 		# issues with command line editing/browsing/completion!
-		local c_red='\[\e[31m\]'
-		local c_green='\[\e[32m\]'
-		local c_lblue='\[\e[1;34m\]'
-		local c_clear='\[\e[0m\]'
+		local c_red=$'\001\e[31m\002'
+		local c_green=$'\001\e[32m\002'
+		local c_lblue=$'\001\e[1;34m\002'
+		local c_clear=$'\001\e[0m\002'
 	fi
 	local bad_color=$c_red
 	local ok_color=$c_green
@@ -564,11 +562,8 @@ __git_ps1 ()
 		b="\${__git_ps1_branch_name}"
 	fi
 
-	# NO color option unless in PROMPT_COMMAND mode or it's Zsh
 	if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
-		if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
-			__git_ps1_colorize_gitstring
-		fi
+		__git_ps1_colorize_gitstring
 	fi
 
 	local f="$h$w$i$s$u$p"
diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
index c94c351e23..fb396ff3a7 100755
--- a/t/t9903-bash-prompt.sh
+++ b/t/t9903-bash-prompt.sh
@@ -13,10 +13,10 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 . "$GIT_BUILD_DIR/contrib/completion/git-prompt.sh"
 
 actual="$TRASH_DIRECTORY/actual"
-c_red='\\[\\e[31m\\]'
-c_green='\\[\\e[32m\\]'
-c_lblue='\\[\\e[1;34m\\]'
-c_clear='\\[\\e[0m\\]'
+c_red='\001\e[31m\002'
+c_green='\001\e[32m\002'
+c_lblue='\001\e[1;34m\002'
+c_clear='\001\e[0m\002'
 
 unset GIT_PS1_SHOWDIRTYSTATE
 unset GIT_PS1_SHOWSTASHSTATE
-- 
2.37.2.351.g9bf691b78c.dirty


  parent reply	other threads:[~2022-08-30  9:32 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-30  9:30 [PATCH 00/51] completion: revamp Felipe Contreras
2022-08-30  9:30 ` [PATCH 01/51] test: completion add test for __git_cmd_idx Felipe Contreras
2022-08-30  9:30 ` [PATCH 02/51] test: add zsh completion tests Felipe Contreras
2022-08-30  9:30 ` [PATCH 03/51] completion: fix __git_cmd_idx regression for zsh Felipe Contreras
2022-08-30  9:30 ` [PATCH 04/51] completion: bash: trivial cleanup Felipe Contreras
2022-08-30  9:30 ` [PATCH 05/51] completion: zsh: add higher-priority location Felipe Contreras
2022-08-30  9:30 ` [PATCH 06/51] zsh: resolve symlink of script Felipe Contreras
2022-08-30  9:30 ` [PATCH 07/51] zsh: simplify realpath dirname idiom Felipe Contreras
2022-08-30  9:30 ` [PATCH 08/51] test: reset environment variables Felipe Contreras
2022-08-30  9:30 ` Felipe Contreras [this message]
2022-08-30  9:30 ` [PATCH 10/51] completion: fix for suboptions with value Felipe Contreras
2022-08-30  9:30 ` [PATCH 11/51] completion: zsh: trivial improvement Felipe Contreras
2022-08-30  9:30 ` [PATCH 12/51] completion: bash: do not modify COMP_WORDBREAKS Felipe Contreras
2022-08-30  9:31 ` [PATCH 13/51] test: completion: fix currently typed words Felipe Contreras
2022-08-30  9:31 ` [PATCH 14/51] test: completion: switch __gitcomp_nl prefix test Felipe Contreras
2022-08-30  9:31 ` [PATCH 15/51] test: completion: add run_func() helper Felipe Contreras
2022-08-30  9:31 ` [PATCH 16/51] completion: bash: remove non-append functionality Felipe Contreras
2022-08-30  9:31 ` [PATCH 17/51] completion: bash: get rid of _append() functions Felipe Contreras
2022-08-30  9:31 ` [PATCH 18/51] completion: bash: get rid of any non-append code Felipe Contreras
2022-08-30  9:31 ` [PATCH 19/51] completion: zsh: fix options with arguments Felipe Contreras
2022-08-30  9:31 ` [PATCH 20/51] completion: zsh: expand --git-dir file argument Felipe Contreras
2022-08-30  9:31 ` [PATCH 21/51] completion: zsh: add support for general -C opts Felipe Contreras
2022-08-30  9:31 ` [PATCH 22/51] completion: zsh: fix for undefined completions Felipe Contreras
2022-08-30  9:31 ` [PATCH 23/51] completion: zsh: add support for general -c opts Felipe Contreras
2022-08-30  9:31 ` [PATCH 24/51] completion: zsh: fix extra space on foo= Felipe Contreras
2022-08-30  9:31 ` [PATCH 25/51] completion: zsh: add excluded options Felipe Contreras
2022-08-30  9:31 ` [PATCH 26/51] completion: zsh: always set compset Felipe Contreras
2022-08-30  9:31 ` [PATCH 27/51] completion: factor out check in __gitcomp Felipe Contreras
2022-08-30  9:31 ` [PATCH 28/51] completion: simplify equal suffix check Felipe Contreras
2022-08-30  9:31 ` [PATCH 29/51] completion: refactor __gitcomp Felipe Contreras
2022-08-30  9:31 ` [PATCH 30/51] completion: simplify __gitcomp Felipe Contreras
2022-08-30  9:31 ` [PATCH 31/51] completion: bash: change suffix check in __gitcomp Felipe Contreras
2022-08-30  9:31 ` [PATCH 32/51] completion: improve __gitcomp suffix code Felipe Contreras
2022-08-30  9:31 ` [PATCH 33/51] test: completion: add missing test Felipe Contreras
2022-08-30  9:31 ` [PATCH 34/51] completion: bash: simplify config_variable_name Felipe Contreras
2022-08-30  9:31 ` [PATCH 35/51] completion: bash: improve __gitcomp description Felipe Contreras
2022-08-30  9:31 ` [PATCH 36/51] completion: add __gitcomp_opts Felipe Contreras
2022-08-30  9:31 ` [PATCH 37/51] completion: bash: cleanup __gitcomp* invocations Felipe Contreras
2022-08-30  9:31 ` [PATCH 38/51] completion: bash: shuffle __gitcomp functions Felipe Contreras
2022-08-30  9:31 ` [PATCH 39/51] completion: zsh: simplify __gitcomp_direct Felipe Contreras
2022-08-30  9:31 ` [PATCH 40/51] completion: zsh: shuffle __gitcomp* functions Felipe Contreras
2022-08-30  9:31 ` [PATCH 41/51] completion: zsh: fix direct quoting Felipe Contreras
2022-08-30  9:31 ` [PATCH 42/51] completion: zsh: add elements individually in __gitcomp_opts Felipe Contreras
2022-08-30  9:31 ` [PATCH 43/51] completion: zsh: add __gitcompadd helper Felipe Contreras
2022-08-30  9:31 ` [PATCH 44/51] completion: zsh: add correct removable suffix Felipe Contreras
2022-08-30  9:31 ` [PATCH 45/51] completion: bash: simplify _get_comp_words_by_ref() Felipe Contreras
2022-08-30  9:31 ` [PATCH 46/51] completion: bash: refactor _get_comp_words_by_ref() Felipe Contreras
2022-08-30  9:31 ` [PATCH 47/51] completion: bash: cleanup _get_comp_words_by_ref() Felipe Contreras
2022-08-30  9:31 ` [PATCH 48/51] completion: bash: trivial cleanup Felipe Contreras
2022-08-30  9:31 ` [PATCH 49/51] completion: bash: rename _get_comp_words_by_ref() Felipe Contreras
2022-08-30  9:31 ` [PATCH 50/51] zsh: remove version Felipe Contreras
2022-08-30  9:31 ` [PATCH 51/51] completion: bash: trivial grammar fix Felipe Contreras

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220830093138.1581538-10-felipe.contreras@gmail.com \
    --to=felipe.contreras@gmail.com \
    --cc=git-fc@googlegroups.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).