From c6929ff239e2bd94fc52f6a3c4db3d5c5c5b0e8d Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Sat, 2 Feb 2013 19:43:25 +0000 Subject: [PATCH] completion: handle path completion and colon for tcsh script Recent enhancements to git-completion.bash provide intelligent path completion for git commands. Such completions do not provide the '/' at the end of directories for recent versions of bash; instead, bash itself will add the trailing slash to directories to the result provided by git-completion.bash. However, the completion for tcsh uses the result of the bash completion script directly, so it either needs to add the necessary slash itself, or needs to ask the bash script to keep the trailing slash. Adding the slash itself is difficult because we have to check the each path in the output of the bash script to see if it is meant to be a directory or something else. For example, assuming there is a directory named 'commit' in the current directory, then, when completing git add commit we would need to add a slash, but for git help commit we should not. Figuring out such differences would require adding much intelligence to the tcsh completion script. Instead, it is simpler to ask the bash script to keep the trailing slash. This patch does this. Also, tcsh does not handle the colon as a completion separator so we remove it from the list of separators. Signed-off-by: Marc Khouzam --- contrib/completion/git-completion.tcsh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/contrib/completion/git-completion.tcsh b/contrib/completion/git-completion.tcsh index 8aafb63315..7d17dcd2aa 100644 --- a/contrib/completion/git-completion.tcsh +++ b/contrib/completion/git-completion.tcsh @@ -42,6 +42,18 @@ cat << EOF > ${__git_tcsh_completion_script} source ${__git_tcsh_completion_original_script} +# Remove the colon as a completion separator because tcsh cannot handle it +COMP_WORDBREAKS=\${COMP_WORDBREAKS//:} + +# For file completion, tcsh needs the '/' to be appended to directories. +# By default, the bash script does not do that. +# We can achieve this by using the below compatibility +# method of the git-completion.bash script. +__git_index_file_list_filter () +{ + __git_index_file_list_filter_compat +} + # Set COMP_WORDS in a way that can be handled by the bash script. COMP_WORDS=(\$2)