git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Simon Oosthoek <s.oosthoek@xs4all.nl>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, git@drmicha.warpmail.net,
	spearce@spearce.org, artagnon@gmail.com, schwab@linux-m68k.org,
	soosthoek@nieuwland.nl
Subject: Re: [PATCH 1/2] Allow __git_ps1 to be used in PROMPT_COMMAND
Date: Mon, 08 Oct 2012 21:50:57 +0200	[thread overview]
Message-ID: <50732EA1.7040608@xs4all.nl> (raw)
In-Reply-To: <7vr4p8lto5.fsf@alter.siamese.dyndns.org>

Hi Junio

thanks for your feedback!

On 08/10/12 20:12, Junio C Hamano wrote:
> Simon Oosthoek <s.oosthoek@xs4all.nl> writes:
> 
>> changes __git_ps1 to not just allow use in setting PS1
>> with __git_ps1 in a command substitution, but also allows
>> __git_ps1 to be used as PROMPT_COMMAND in bash.
>> This has advantages for using color and I think it is more
>> elegant
> 
> Is "and I think" necessary?  I do not think it matters what _you_
> think when judging it is worth including in the future releases ;-)

Hmm, right :-P

How about "This has advantages for using color without running into
prompt-wrapping issues. Only by assigning \[ and \] to PS1 directly can
bash know these and the color codes in between don't count in the length
of the prompt."?

I'll rewrite the patch later on...

Isn't it confusing that the color codes don't figure in this patch at all?

>>  
>>  # __git_ps1 accepts 0 or 1 arguments (i.e., format string)
>> +# when called from PS1 using command substitution
>> +# in this mode it returns text to add to bash PS1 prompt (includes branch name) or
>> +# __git_ps1 accepts 0 or 2 arguments when called from PROMPT_COMMAND
>> +# in that case it _sets_ PS1. The arguments are parts of a PS1 string.
>> +# when both arguments are given, the first is prepended and the second appended
>> +# to the state string when assigned to PS1, otherwise default start/end strings
>> +# are used.
> 
> Sorry, but I cannot parse this.  Is this meant to be a two-item list,
> one describing the command substitution mode (zero or 1 arguments) and
> the other describing the prompt command mode?  If so, perhaps replacing
> the " or" at the end of the first item with ".\n#\n" would make it readable.

I agree, that would make it more readable.

> 
>>  __git_ps1 ()
>>  {
>> +	local pcmode=yes
>> +	local ps1pc_start='\u@\h:\w '
>> +	local ps1pc_end='\$ '
>> +
>> +	case "$PROMPT_COMMAND" in
>> +		__git_ps1*)
>> +			if [ $# = 2 ]; then
>> +				ps1pc_start="$1"
>> +				ps1pc_end="$2"
>> +			fi
>> +			case "$PS1" in
>> +			*__git_ps1*)
>> +				echo '__git_ps1: overwriting PS1 due to PROMPT_COMMAND'
> 
> Is this supposed to be an error and/or warning message?  Why is it
> worth warning only when you are overwriting __git_ps1 style of PS1
> and not other user customization?

That's what this is doing, I wasn't able to make it the other way
around. I thought that I could detect when PS1 contained __git_ps1 that
it shouldn't overwrite the PS1, which worked, but when PROMPT_COMMAND
was set with __git_ps1 and PS1=$(__git_ps1) as well, it gave double output.
As PROMPT_COMMAND is relatively obscure I thought a warning when
overwriting the PS1 was good, but not unless there was a real conflict
(double call to __git_ps1).
The warning is only shown once.

I don't think it would be possible to detect any other kind of
customization without including specific code for it. Do you think it's
unnecessary to include a warning? (I think it would take people a long
time to figure out why their prompt goes whoopsy without getting a hint
that PROMPT_COMMAND messes up the PS1)

(OTOH, if you configure PROMPT_COMMAND, you're bound to know a little
bit about what you're doing...)

Perhaps it's better to just do it.


> 
>> +			;;
>> +			esac
>> +		;;
>> +		*)  pcmode=no ;; #no output
>> +	esac
> 
> Please align outer "case" "its arms)" and "esac" at the same column,
> like you did for the inner "case/esac".

ok

> 
> Auto-detetction based on PROMPT_COMMAND is a flaky approach.  In
> practice, nobody will call PROMPT_COMMAND with the __git_ps1 without
> any parameter (100% people want their prompt to end with some sort
> of whitespace so they want the "what comes after what is computed",
> aka $2), and even more importantly, nobody has been relying on use
> of 0 argument form of __git_ps1 in PROMPT_COMMAND.  So why not
> always require 2 args and take that as a cue to go into the pc mode?

That's a good idea, I'll change that.


>> +		if [ $pcmode = yes ]; then
>> +			PS1="$ps1pc_start($c${b##refs/heads/}${f:+ $f}$r$p)$ps1pc_end"
>> +		elif [ $pcmode = no ]; then
>> +			printf -- "${1:- (%s)}" "$c${b##refs/heads/}${f:+ $f}$r$p"
>> +		fi
> 
> Are there $pcmode other than yes or no?  Why not just "else",
> instead of performing the test twice?

I forgot to remove that one, I had a default at some point ;-)

Cheers

Simon.

  reply	other threads:[~2012-10-08 19:52 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-26 15:00 bash completion with colour hints Simon Oosthoek
2012-09-26 15:24 ` Ramkumar Ramachandra
2012-09-26 19:25   ` Simon Oosthoek
2012-09-27  6:53     ` Junio C Hamano
2012-09-27  8:53       ` Michael J Gruber
2012-09-27  8:55         ` Michael J Gruber
2012-09-27  9:16         ` Simon Oosthoek
2012-09-27 10:05         ` Andreas Schwab
2012-09-27 11:57         ` Simon Oosthoek
2012-09-28 11:40         ` [PATCH] Add __git_ps1_pc to use as PROMPT_COMMAND Simon Oosthoek
2012-09-28 17:58           ` Junio C Hamano
2012-10-01  9:13             ` Simon Oosthoek
2012-10-01 17:16               ` Junio C Hamano
2012-10-01 18:42                 ` Simon Oosthoek
2012-10-01 19:13                 ` Junio C Hamano
2012-10-01 19:27                   ` Simon Oosthoek
2012-10-01 19:54                     ` Junio C Hamano
2012-10-01 20:56                       ` Simon Oosthoek
2012-10-01 21:09                         ` Junio C Hamano
2012-10-02  7:38                           ` Michael J Gruber
2012-10-02  8:01                             ` Simon Oosthoek
2012-10-02 17:01                             ` Junio C Hamano
2012-10-02 19:50                               ` Simon Oosthoek
2012-10-02 20:18                                 ` Junio C Hamano
2012-10-05 21:09                                   ` [PATCH 1/2] Allow __git_ps1 to be used in PROMPT_COMMAND Simon Oosthoek
2012-10-08 18:12                                     ` Junio C Hamano
2012-10-08 19:50                                       ` Simon Oosthoek [this message]
2012-10-08 21:17                                         ` Junio C Hamano
2012-10-10 19:31                                           ` Simon Oosthoek
2012-10-10 23:00                                             ` Junio C Hamano
2012-10-10 19:32                                           ` [PATCH 2/2] show color hints based on state of the git tree Simon Oosthoek
2012-10-10 19:37                                           ` [PATCH 1/2] Allow __git_ps1 to be used in PROMPT_COMMAND Simon Oosthoek
2012-10-10 19:38                                           ` [PATCH 2/2] show color hints based on state of the git tree Simon Oosthoek
2012-10-05 21:10                                   ` Simon Oosthoek
2012-10-15  8:23                                     ` Michael J Gruber
2012-10-15  9:01                                       ` Simon Oosthoek
2012-10-15  9:13                                         ` Michael J Gruber
2012-10-15 10:34                                           ` Simon Oosthoek
2012-10-15 13:20                                           ` Simon Oosthoek
2012-10-15 15:19                                             ` Michael J Gruber
     [not found]                                           ` <CAPc5daVUyAuznmrT+-yqvPR0gd38oiWmi2k+BFVV1s9ouMUt0Q@mail.gmail.com>
2012-10-15 15:15                                             ` Simon Oosthoek
2012-10-15 18:10                                               ` Junio C Hamano
2012-10-16  5:32                                                 ` [PATCH 3/3] Change colors to be based on git status -sb in color mode Simon Oosthoek
2012-10-16 15:58                                                   ` Junio C Hamano
2012-10-16 19:34                                                     ` Simon Oosthoek
2012-10-16 21:30                                                       ` Junio C Hamano
2012-10-16 22:04                                                         ` Junio C Hamano
2012-10-17  7:17                                                         ` Simon Oosthoek
2012-10-08 15:00                                   ` [PATCH] Add __git_ps1_pc to use as PROMPT_COMMAND Simon Oosthoek

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=50732EA1.7040608@xs4all.nl \
    --to=s.oosthoek@xs4all.nl \
    --cc=artagnon@gmail.com \
    --cc=git@drmicha.warpmail.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=schwab@linux-m68k.org \
    --cc=soosthoek@nieuwland.nl \
    --cc=spearce@spearce.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).