Re: [PATCH v4] completion: ignore chpwd_functions when cding on zsh
- From
Øystein Walle <oystwa@gmail.com>
- Date
- Oct 9, 2014, 19:47 UTC
- Message-ID
- <loom.20141009T214418-680@post.gmane.org>
- In-Reply-To
- <1412881298-64117-1-git-send-email-bt@brandonturner.net>
Brandon Turner <bt <at> brandonturner.net> writes:
Show 14 quoted lines
> +__git_ls_files_helper ()
> +{
> + (
> + test -n "${CDPATH+set}" && unset CDPATH
> + cd -q "$1"
> + if [ "$2" == "--committable" ]; then
> + git diff-index --name-only --relative HEAD
> + else
> + # NOTE: $2 is not quoted in order to support multiple options
> + git ls-files --exclude-standard $2
> + fi
> + ) 2>/dev/null
> +}
> +(Sorry about this; I should've caught it the first time around). Zsh does not split string expansions into several words by default. For example:
$ str1='hello world'
$ str2='goodbye moon'
$ printf '%s\n' $str1 $str2
hello world
goodbye moonThis can be enabled on a "per-expansion basis" by using = while expanding:
$ str1='hello world'
$ str2='goodbye moon'
$ printf '%s\n' $=str1 $str2
hello
world
goodbye moonSo the $2 in your patch should be $=2.
BUT: Over a year ago Git learned the -C argument. Couldn't we use that here? That way we would not have to unset CDPATH and can get rid of the subshell and cd -q. If we allow the other functions to use several arguments to pass options with we can get rid of the whole seperation between bash and zsh altogether.
Øsse