1
0
mirror of https://github.com/git/git.git synced 2024-11-19 01:13:53 +01:00

Prevent space after directories in tcsh completion

If git-completion.bash returns a single directory as a completion,
tcsh will automatically add a space after it, which is not what the
user wants.

This commit prevents tcsh from doing this.

Also, a check is added to make sure the tcsh version used is recent
enough to allow completion to work as expected.

Signed-off-by: Marc Khouzam <marc.khouzam@ericsson.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Marc Khouzam 2013-01-07 19:07:10 +00:00 committed by Junio C Hamano
parent 5d417842ef
commit 92f1c04243

@ -13,6 +13,7 @@
#
# To use this completion script:
#
# 0) You need tcsh 6.16.00 or newer.
# 1) Copy both this file and the bash completion script to ${HOME}.
# You _must_ use the name ${HOME}/.git-completion.bash for the
# bash script.
@ -24,6 +25,15 @@
# set autolist=ambiguous
# It will tell tcsh to list the possible completion choices.
set __git_tcsh_completion_version = `\echo ${tcsh} | \sed 's/\./ /g'`
if ( ${__git_tcsh_completion_version[1]} < 6 || \
( ${__git_tcsh_completion_version[1]} == 6 && \
${__git_tcsh_completion_version[2]} < 16 ) ) then
echo "git-completion.tcsh: Your version of tcsh is too old, you need version 6.16.00 or newer. Git completion will not work."
exit
endif
unset __git_tcsh_completion_version
set __git_tcsh_completion_original_script = ${HOME}/.git-completion.bash
set __git_tcsh_completion_script = ${HOME}/.git-completion.tcsh.bash
@ -64,9 +74,7 @@ fi
_\${1}
IFS=\$'\n'
if [ \${#COMPREPLY[*]} -gt 0 ]; then
echo "\${COMPREPLY[*]}" | sort | uniq
else
if [ \${#COMPREPLY[*]} -eq 0 ]; then
# No completions suggested. In this case, we want tcsh to perform
# standard file completion. However, there does not seem to be way
# to tell tcsh to do that. To help the user, we try to simulate
@ -85,19 +93,20 @@ else
# We don't support ~ expansion: too tricky.
if [ "\${TO_COMPLETE:0:1}" != "~" ]; then
# Use ls so as to add the '/' at the end of directories.
RESULT=(\`ls -dp \${TO_COMPLETE}* 2> /dev/null\`)
echo \${RESULT[*]}
# If there is a single completion and it is a directory,
# we output it a second time to trick tcsh into not adding a space
# after it.
if [ \${#RESULT[*]} -eq 1 ] && [ "\${RESULT[0]: -1}" == "/" ]; then
echo \${RESULT[*]}
fi
COMPREPLY=(\`ls -dp \${TO_COMPLETE}* 2> /dev/null\`)
fi
fi
fi
# tcsh does not automatically remove duplicates, so we do it ourselves
echo "\${COMPREPLY[*]}" | sort | uniq
# If there is a single completion and it is a directory, we output it
# a second time to trick tcsh into not adding a space after it.
if [ \${#COMPREPLY[*]} -eq 1 ] && [ "\${COMPREPLY[0]: -1}" == "/" ]; then
echo "\${COMPREPLY[*]}"
fi
EOF
# Don't need this variable anymore, so don't pollute the users environment