[PATCH] Basic Zsh completion support
From: Fredrik Kuivinen <hidden>
Date: 2016-06-15 22:42:21
Based on the completion code for quilt in the Zsh distribution. Signed-off-by: Fredrik Kuivinen <redacted> --- .gitignore | 1 + Makefile | 8 +++++++- generate-zsh-compl.sh | 26 ++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletions(-)
diff --git a/.gitignore b/.gitignore
index b4355b9..1cf6ac0 100644
--- a/.gitignore
+++ b/.gitignore@@ -133,3 +133,4 @@ libgit.a *.py[co] config.mak git-blame +_git
diff --git a/Makefile b/Makefile
index 8a20c76..85c5e2d 100644
--- a/Makefile
+++ b/Makefile@@ -96,6 +96,7 @@ bindir = $(prefix)/bin gitexecdir = $(bindir) template_dir = $(prefix)/share/git-core/templates/ GIT_PYTHON_DIR = $(prefix)/share/git-core/python +ZSH_COMPL_DIR = $(prefix)/share/zsh/site-functions # DESTDIR= CC = gcc
@@ -438,13 +439,14 @@ SHELL_PATH_SQ = $(subst ','\'',$(SHELL_P PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH)) PYTHON_PATH_SQ = $(subst ','\'',$(PYTHON_PATH)) GIT_PYTHON_DIR_SQ = $(subst ','\'',$(GIT_PYTHON_DIR)) +ZSH_COMPL_DIR_SQ = $(subst ','\'',$(ZSH_COMPL_DIR)) ALL_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' $(COMPAT_CFLAGS) LIB_OBJS += $(COMPAT_OBJS) export prefix TAR INSTALL DESTDIR SHELL_PATH template_dir ### Build rules -all: $(ALL_PROGRAMS) git$X gitk +all: $(ALL_PROGRAMS) git$X gitk _git all: $(MAKE) -C templates
@@ -553,6 +555,8 @@ $(LIB_FILE): $(LIB_OBJS) doc: $(MAKE) -C Documentation all +_git: generate-zsh-compl.sh + ./generate-zsh-compl.sh version help $(ALL_PROGRAMS) > _git ### Testing rules
@@ -586,6 +590,8 @@ install: all $(MAKE) -C templates install $(INSTALL) -d -m755 '$(DESTDIR_SQ)$(GIT_PYTHON_DIR_SQ)' $(INSTALL) $(PYMODULES) '$(DESTDIR_SQ)$(GIT_PYTHON_DIR_SQ)' + $(INSTALL) -d -m755 $(ZSH_COMPL_DIR) + $(INSTALL) -m644 _git '$(DESTDIR_SQ)$(ZSH_COMPL_DIR_SQ)' install-doc: $(MAKE) -C Documentation install
diff --git a/generate-zsh-compl.sh b/generate-zsh-compl.sh
new file mode 100755
index 0000000..f8c80de
--- /dev/null
+++ b/generate-zsh-compl.sh@@ -0,0 +1,26 @@ +#!/bin/sh + +cmds=$(echo "$@" | sed s/git-//g | sed "s/\\.[^ ]*//g") + +cat <<EOF +#compdef git + +# Automatically generated by $0 + +local _git_subcommands expl curcontext="$curcontext" + +_arguments \ + '--version' \ + '--exec-path=:Git exec path:_path_files' \ + '--help' \ + '*::git command:->subcmd' && return 0 + + _git_subcommands=($cmds) + +if (( CURRENT == 1 )); then + _describe -t subcommand 'subcommand' _git_subcommands +else + # this part should be tailored for subcmds + _files +fi +EOF