From 5567dd6cffed8bd31a73f63a879106162b7b86a0 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Thu, 6 Nov 2025 22:07:06 +0800 Subject: feat: add shell integration and completion scripts - Add cli.sh for aliases and completion loading - Create completion_jv.sh for jv command bash completion - Create completion_jvv.sh for jvv command bash completion - Support dynamic completion using --raw output from commands --- scripts/completion_jvv.sh | 77 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 scripts/completion_jvv.sh (limited to 'scripts/completion_jvv.sh') diff --git a/scripts/completion_jvv.sh b/scripts/completion_jvv.sh new file mode 100755 index 0000000..7e8bb7a --- /dev/null +++ b/scripts/completion_jvv.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +_jvv_completion() { + local cur prev words cword + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + words=("${COMP_WORDS[@]}") + cword=$COMP_CWORD + + # Current + local cmd="${words[0]}" + local subcmd="${words[1]}" + local subsubcmd="${words[2]}" + + # Subcommands + local base_commands="create init here member service listen members -c -i -H -m -l -M" + + # Subcommands - Member + local member_commands="register remove list help + - ls" + + # Subcommands - Service + local service_commands="listen help" + + # Completion subcommands + if [[ $cword -eq 1 ]]; then + COMPREPLY=($(compgen -W "$base_commands" -- "$cur")) + return 0 + fi + + # Completion member + if [[ "$subcmd" == "member" || "$subcmd" == "-m" ]]; then + if [[ $cword -eq 2 ]]; then + COMPREPLY=($(compgen -W "$member_commands" -- "$cur")) + return 0 + fi + + case "$subsubcmd" in + "remove"|"-") + if [[ $cword -eq 3 ]]; then + # Use jvv member list --raw + local members + members=$($cmd member list --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$members" -- "$cur")) + fi + ;; + esac + return 0 + fi + + # Completion service + if [[ "$subcmd" == "service" ]]; then + if [[ $cword -eq 2 ]]; then + COMPREPLY=($(compgen -W "$service_commands" -- "$cur")) + return 0 + fi + return 0 + fi + + # aliases + case "$subcmd" in + "-m") + if [[ $cword -eq 2 ]]; then + COMPREPLY=($(compgen -W "$member_commands" -- "$cur")) + fi + ;; + "listen"|"-l") + # listen command has no arguments to complete + ;; + "members"|"-M") + # members command has no arguments to complete + ;; + esac +} + +# Register completion function +complete -F _jvv_completion jvv -- cgit