zsh: complete unquoted paths with spaces correctly
The following is the description of -Q flag of zsh compadd [1]:
This flag instructs the completion code not to quote any
metacharacters in the words when inserting them into the command
line.
Let's say there is a file named 'foo bar.txt' in repository, but it's
not yet added to the repository. Then the following command triggers a
completion:
git add fo<Tab>
git add 'fo<Tab>
git add "fo<Tab>
The completion results in bash:
git add foo\ bar.txt
git add 'foo bar.txt'
git add "foo bar.txt"
While them in zsh:
git add foo bar.txt
git add 'foo bar.txt'
git add "foo bar.txt"
The first one, where the pathname is not enclosed in quotes, should
escape the space with a backslash, just like bash completion does.
Otherwise, this leads git to think there are two files; foo, and
bar.txt.
The main cause of this behavior is __gitcomp_file_direct(). The both
implementions of bash and zsh are called with an argument 'foo bar.txt',
but only bash adds a backslash before a space on command line.
[1]: http://zsh.sourceforge.net/Doc/Release/Completion-Widgets.html
Signed-off-by: Chayoung You <yousbe@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
b21ebb671b
commit
7a478b36aa
@ -2993,7 +2993,7 @@ if [[ -n ${ZSH_VERSION-} ]] &&
|
||||
|
||||
local IFS=$'\n'
|
||||
compset -P '*[=:]'
|
||||
compadd -Q -f -- ${=1} && _ret=0
|
||||
compadd -f -- ${=1} && _ret=0
|
||||
}
|
||||
|
||||
__gitcomp_file ()
|
||||
@ -3002,7 +3002,7 @@ if [[ -n ${ZSH_VERSION-} ]] &&
|
||||
|
||||
local IFS=$'\n'
|
||||
compset -P '*[=:]'
|
||||
compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
|
||||
compadd -p "${2-}" -f -- ${=1} && _ret=0
|
||||
}
|
||||
|
||||
_git ()
|
||||
|
||||
@ -99,7 +99,7 @@ __gitcomp_file_direct ()
|
||||
|
||||
local IFS=$'\n'
|
||||
compset -P '*[=:]'
|
||||
compadd -Q -f -- ${=1} && _ret=0
|
||||
compadd -f -- ${=1} && _ret=0
|
||||
}
|
||||
|
||||
__gitcomp_file ()
|
||||
@ -108,7 +108,7 @@ __gitcomp_file ()
|
||||
|
||||
local IFS=$'\n'
|
||||
compset -P '*[=:]'
|
||||
compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
|
||||
compadd -p "${2-}" -f -- ${=1} && _ret=0
|
||||
}
|
||||
|
||||
__git_zsh_bash_func ()
|
||||
|
||||
Reference in New Issue
Block a user