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

Re: [PATCH 4/8] bash: Add space after unique command name is completed.

From
Shawn O. Pearce <spearce@spearce.org>
Date
Feb 4, 2007, 08:13 UTC
Message-ID
<20070204081301.GE16766@spearce.org>
In-Reply-To
<7vr6t6xs3d.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> wrote:
Show 22 quoted lines
> "Shawn O. Pearce" <spearce@spearce.org> writes:
> 
> > +__gitcomp ()
> > +{
> > +	local all c s=$'\n' IFS=' '$'\t'$'\n'
> > +	for c in $1; do
> > +		case "$c" in
> > +		--*=*) all="$all$c$s" ;;
> > +		*)     all="$all$c $s" ;;
> > +		esac
> > +	done
> > +	IFS=$s
> > +	COMPREPLY=($(compgen -W "$all" -- "${COMP_WORDS[COMP_CWORD]}"))
> > +	return
> > +}
> > +
> 
> I do not understand what is going on here.  Care to explain?
> 
>  (1) "for c in $1": because $1 is not dquoted, it is split into
>      word with IFS -- which IFS applies to this splitting?  The
>      local one you hand-define to the typical " \t\n" value?
Correct.
 
>  (2) when this function returns, what IFS value does the caller
>      would have?  Is the "local" used to avoid screwing up the
>      caller?
> 
Correct.

Basically at the time I'm forming 'all' I want $1 split based on normal splitting rules, as I'm using space, tag and LF within the script in some places for the first parameter to __gitcomp.

But when I run compgen I need IFS to be just LF ($s) so that $all is split only on LF and not on spaces, as spaces were added to $all after each unique option. This way the trailing space is part of the unique option, and bash will tack in the trailing space for me, despite having -o nospace enabled.

-- 
Shawn.
Previous: Junio C Hamano
Message 3 of 3 in “bash: Add space after unique command name is completed.”
  1. 4/8 bash: Add space after unique command name is completed.Shawn O. Pearce, Feb 4, 2007
  2. Junio C HamanoFeb 4, 2007
  3. Shawn O. PearceFeb 4, 2007

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.