summaryrefslogtreecommitdiffstats
path: root/auto-completion/zsh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-17 09:07:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-17 09:07:14 +0000
commitfcffaf214966be45ca78fecc6aaa5fae0b42d05a (patch)
tree666b8c46f7fdbb3a78947221170909a0ccafbb41 /auto-completion/zsh
parentAdding upstream version 0.16.6.1. (diff)
downloadgita-upstream.tar.xz
gita-upstream.zip
Adding upstream version 0.16.7.2.upstream/0.16.7.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'auto-completion/zsh')
-rw-r--r--auto-completion/zsh/.gita-completion.zsh46
-rw-r--r--auto-completion/zsh/_gita473
2 files changed, 519 insertions, 0 deletions
diff --git a/auto-completion/zsh/.gita-completion.zsh b/auto-completion/zsh/.gita-completion.zsh
new file mode 100644
index 0000000..d1fe952
--- /dev/null
+++ b/auto-completion/zsh/.gita-completion.zsh
@@ -0,0 +1,46 @@
+
+_gita_completions()
+{
+
+ local cur commands repos cmd
+ local COMP_CWORD COMP_WORDS # 定义变量,cur表示当前光标下的单词
+ read -cn COMP_CWORD # 所有指令集
+ read -Ac COMP_WORDS # 当前指令的索引值
+
+ cur=${COMP_WORDS[COMP_CWORD]}
+ cmd=${COMP_WORDS[2]}
+
+ # FIXME: this is somewhat slow
+ commands=`gita -h | sed '2q;d' |sed 's/[{}.,]/ /g'`
+
+ repos=`gita ls`
+ # this doesn't work for two repos with the same basename
+ #gita_path=${XDG_CONFIG_HOME:-$HOME/.config}/gita/repo_path
+ #repos=`awk '{split($0, paths, ":")} END {for (i in paths) {n=split(paths[i],b, /\//); print b[n]}}' ${gita_path}`
+
+ # FIXME(Steve-Xyh): the secondary auto-completion(such as `$repos`) contains first commands / 二级补全候选项中包含一级补全中的 `$commands`
+ # XXX(Steve-Xyh): the auto-completion is currently case-sensitive / 当前的补全区分大小写, 应该改成大小写不敏感
+ # (Steve-Xyh): args in zsh must be `reply` / zsh 中的参数必须为 `reply`
+ if [ -z "$cmd" ]; then
+ reply=($(compgen -W "${commands}" ${cur}))
+ else
+ cmd_reply=($(compgen -W "${commands}" ${cmd}))
+ case $cmd in
+ add)
+ reply=(cmd_reply $(compgen -d ${cur}))
+ ;;
+ ll)
+ return
+ ;;
+ *)
+ reply=($cmd_reply $(compgen -W "${repos}" ${cur}))
+ ;;
+ esac
+ fi
+
+}
+
+# (Steve-Xyh): functions in zsh must be `compctl` / zsh 中必须用 compctl 函数, -K 表示使用函数
+compctl -K _gita_completions gita
+
+
diff --git a/auto-completion/zsh/_gita b/auto-completion/zsh/_gita
new file mode 100644
index 0000000..b133972
--- /dev/null
+++ b/auto-completion/zsh/_gita
@@ -0,0 +1,473 @@
+#compdef gita
+
+__gita_get_repos() {
+ local -a repositories
+ repositories=($(_call_program commands gita ls))
+ _describe -t repositories 'gita repositories' repositories
+}
+
+__gita_get_context() {
+ local -a context
+ context=(
+ "auto"
+ "none"
+ )
+ _describe -t context 'gita context' context
+ __gita_get_groups
+}
+
+__gita_get_infos() {
+ local -a all_infos infos_in_used infos_unused
+ all_infos=($(_call_program commands gita info ll | cut -d ":" -f2))
+ infos_in_used=($(echo ${all_infos[1]} | tr ',' ' '))
+ infos_unused=($(echo ${all_infos[2]} | tr ',' ' '))
+ _describe -t infos_used 'gita infos in used' infos_in_used
+ _describe -t infos_unused 'gita infos unused' infos_unused
+}
+
+__gita_get_groups() {
+ local -a groups
+
+ groups=($(_call_program commands gita group ls))
+ _describe -t groups 'gita groups' groups
+}
+
+__gita_commands() {
+ local -a commands
+ commands=(
+ 'add:Add repo(s)'
+ 'rm:remove repo(s)'
+ 'freeze:Print all repo information'
+ 'clone:Clone repos'
+ 'rename:Rename a repo'
+ 'flags:Git flags configuration'
+ 'color:Color configuration'
+ 'info:Information setting'
+ 'll:Display summary of all repos'
+ 'context:Set context'
+ 'ls:Show repo(s) or repo path'
+ 'group:Group repos'
+ 'super:Run any git command/alias'
+ 'shell:Run any shell command'
+ 'clear:Removes all groups and repositories'
+ )
+ _describe -t commands 'gita sub-commands' commands
+}
+
+# FUNCTION: _gita_add [[[
+_gita_add() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ '(-n --dry-run)'{-n,--dry-run}'[dry run]' \
+ '(-g --group)'{-g=,--group=}'[add repo(s) to the specified group]:Gita groups:__gita_get_groups' \
+ '(-s --skip-modules)'{-s,--skip-modules}'[skip submodule repo(s)]' \
+ '(-r --recursive)'{-r,--recursive}'[recursively add repo(s) in the given path(s)]' \
+ '(-a --auto-group)'{-a,--auto-group}'[recursively add repo(s) in the given path(s) and create hierarchical groups based on folder structure]' \
+ '(-b --bare)'{-b,--bare}'[add bare repo(s)]' \
+ "(-h --help -)*:Directories:_directories"
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_rm [[[
+_gita_rm() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ "(-h --help -)*:gita repositories:__gita_get_repos" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_freeze [[[
+_gita_freeze() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ '(-g --group)'{-g=,--group=}'[freeze repos in the specified group]:Gita groups:__gita_get_groups' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_clone [[[
+_gita_clone() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ '(-C --directory)'{-C=,--directory=}'[ Change to DIRECTORY before doing anything]:Directories:_directories' \
+ '(-p --preserve-path)'{-p,--preserve-path}'[clone repo(s) in their original paths]' \
+ '(-n --dry-run)'{-n,--dry-run}'[dry run]' \
+ '(-g --group)'{-g=,--group=}'[If set, add repo to the specified group after cloning, otherwise add to gita without group]:Gita groups:__gita_get_groups' \
+ '(-f --from-file)'{-f=,--from-file=}'[ If set, clone repos in a config file rendered from `gita freeze`]:File:_path_files' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_rename [[[
+_gita_rename() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ "(-h --help -):Gita repositories:__gita_get_repos" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_flags_commands[[[
+_gita_flags_commands() {
+
+ local -a subcommands
+ subcommands=(
+ 'll:Display repos with custom flags'
+ 'set:Set flags for repo'
+ )
+ _describe -t subcommands 'gita flag sub-commands' subcommands
+}
+#]]]
+
+# FUNCTION: _gita_flags_ll [[[
+_gita_flags_ll() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_flags_set [[[
+_gita_flags_set() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ "(-h --help -):Gita repositories:__gita_get_repos" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_flags[[[
+_gita_flags() {
+ local curcontext="$curcontext" state state_descr line expl
+ local tmp ret=1
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]'
+
+ _arguments -C \
+ "1: :->cmds" \
+ "*::arg:->args"
+ case "$state" in
+ cmds)
+ _gita_flags_commands && return 0
+ ;;
+ args)
+ local cmd="${line[1]}"
+ curcontext="${curcontext%:*}-${cmd}:${curcontext##*:}"
+ local completion_func="_gita_flags_${cmd//-/_}"
+ _call_function ret "${completion_func}" && return ret
+ _message "a completion function is not defined for command or alias: ${cmd}"
+ return 1
+ ;;
+ esac
+}
+#]]]
+
+# FUNCTION: _gita_color_commands[[[
+_gita_color_commands() {
+
+ local -a subcommands
+ subcommands=(
+ 'll:Display available colors and the current branch coloring in the ll sub-command'
+ 'set:Set color for local/remote situation'
+ 'reset:Reset color scheme'
+ )
+ _describe -t subcommands 'gita color sub-commands' subcommands
+}
+#]]]
+
+# FUNCTION: _gita_color_ll [[[
+_gita_color_ll() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_color_set [[[
+_gita_color_set() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_color_reset [[[
+_gita_color_reset() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_color[[[
+_gita_color() {
+ local curcontext="$curcontext" state state_descr line expl
+ local tmp ret=1
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]'
+
+ _arguments -C \
+ "1: :->cmds" \
+ "*::arg:->args"
+ case "$state" in
+ cmds)
+ _gita_color_commands && return 0
+ ;;
+ args)
+ local cmd="${line[1]}"
+ curcontext="${curcontext%:*}-${cmd}:${curcontext##*:}"
+ local completion_func="_gita_color_${cmd//-/_}"
+ _call_function ret "${completion_func}" && return ret
+ _message "a completion function is not defined for command or alias: ${cmd}"
+ return 1
+ ;;
+ esac
+}
+#]]]
+
+# FUNCTION: _gita_info_commands[[[
+_gita_info_commands() {
+
+ local -a subcommands
+ subcommands=(
+ 'll:Show used and unused information items of the ll sub-command'
+ 'add:Enable information item'
+ 'rm:Disable information item'
+ )
+ _describe -t subcommands 'gita info sub-commands' subcommands
+}
+#]]]
+
+# FUNCTION: _gita_info_ll [[[
+_gita_info_ll() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_info_add [[[
+_gita_info_add() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ "(-h --help -):Gita infos:__gita_get_infos" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_info_rm [[[
+_gita_info_rm() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ "(-h --help -):Gita infos:__gita_get_infos" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_info[[[
+_gita_info() {
+ local curcontext="$curcontext" state state_descr line expl
+ local tmp ret=1
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]'
+
+ _arguments -C \
+ "1: :->cmds" \
+ "*::arg:->args"
+ case "$state" in
+ cmds)
+ _gita_info_commands && return 0
+ ;;
+ args)
+ local cmd="${line[1]}"
+ curcontext="${curcontext%:*}-${cmd}:${curcontext##*:}"
+ local completion_func="_gita_info_${cmd//-/_}"
+ _call_function ret "${completion_func}" && return ret
+ _message "a completion function is not defined for command or alias: ${cmd}"
+ return 1
+ ;;
+ esac
+}
+#]]]
+
+# FUNCTION: _gita_ll [[[
+_gita_ll() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ '(-C --no-colors)'{-C,--no-colors}'[Disable coloring on the branch names]' \
+ '(-g)'-g'[Show repo summaries by group]' \
+ "(-h --help -):Groups name:__gita_get_groups" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_context [[[
+_gita_context() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ "(-h --help -):Gita context:__gita_get_context" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_ls [[[
+_gita_ls() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ "(-h --help -):Gita repositories:__gita_get_repos" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_group_commands[[[
+_gita_group_commands() {
+
+ local -a subcommands
+ subcommands=(
+ 'll:List all groups with repos.'
+ 'ls:List all group names'
+ 'add:Add repo(s) to a group'
+ 'rmrepo:remove repo(s) from a group'
+ 'rename:Change group name'
+ 'rm:Remove group(s)'
+ )
+ _describe -t subcommands 'gita group sub-commands' subcommands
+}
+#]]]
+
+# FUNCTION: _gita_group_ll [[[
+_gita_group_ll() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ "(-h --help -):Groups name:__gita_get_groups" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_group_ls [[[
+_gita_group_ls() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_group_add [[[
+_gita_group_add() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ '(-n --name)'{-n=,--name=}'[group-name,]:Groups name:__gita_get_groups' \
+ '(-p --path)'{-p=,--path=}'[group-path]:Group path:_directories' \
+ "(-h --help -)*:Gita repositories:__gita_get_repos" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_group_rmrepo [[[
+_gita_group_rmrepo() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ '(-n --name)'{-n=,--name=}'[group-name,]:Groups name:__gita_get_groups' \
+ "(-h --help -)*:Gita repositories:__gita_get_repos" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_group_rename [[[
+_gita_group_rename() {
+ _arguments -A \
+ '(-h --help -)'{-h,--help}'[show this help message and exit]' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_group_rm [[[
+_gita_group_rm() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ "(-h --help -)*:Groups name:__gita_get_groups" &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_group[[[
+_gita_group() {
+ local curcontext="$curcontext" state state_descr line expl
+ local tmp ret=1
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]'
+
+ _arguments -C \
+ "1: :->cmds" \
+ "*::arg:->args"
+ case "$state" in
+ cmds)
+ _gita_group_commands && return 0
+ ;;
+ args)
+ local cmd="${line[1]}"
+ curcontext="${curcontext%:*}-${cmd}:${curcontext##*:}"
+ local completion_func="_gita_group_${cmd//-/_}"
+ _call_function ret "${completion_func}" && return ret
+ _message "a completion function is not defined for command or alias: ${cmd}"
+ return 1
+ ;;
+ esac
+}
+#]]]
+
+# FUNCTION: _gita_super [[[
+_gita_super() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ '(-q --quote-mode)'{-q,--quote-mode}'[use quote mode]' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_shell [[[
+_gita_shell() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ '(-q --quote-mode)'{-q,--quote-mode}'[use quote mode]' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita_clear [[[
+_gita_clear() {
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' &&
+ ret=0
+}
+#]]]
+
+# FUNCTION: _gita [[[
+_gita() {
+ local curcontext="$curcontext" state state_descr line expl
+ local tmp ret=1
+ _arguments -A \
+ '(-h --help)'{-h,--help}'[show this help message and exit]' \
+ '(-v --version)'{-v,--version}'[show program'\''s version number and exit]'
+
+ _arguments -C \
+ "1: :->cmds" \
+ "*::arg:->args"
+ case "$state" in
+ cmds)
+ __gita_commands && return 0
+ ;;
+ args)
+ local cmd="${line[1]}"
+ curcontext="${curcontext%:*}-${cmd}:${curcontext##*:}"
+ local completion_func="_gita_${cmd//-/_}"
+ _call_function ret "${completion_func}" && return ret
+ _message "a completion function is not defined for command or alias: ${cmd}"
+ return 1
+ ;;
+ esac
+} # ]]]
+
+_gita "$@"