From 72f80ea51f25256d0c463c2f3dc3d8670cfc4634 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sat, 14 Mar 2026 22:12:30 +0800 Subject: Add shell completions for new jvn CLI --- .../legacy_completions/bash/completion_jv.sh | 272 +++++++++++++++++++++ .../legacy_completions/bash/completion_jvv.sh | 78 ++++++ 2 files changed, 350 insertions(+) create mode 100755 scripts/deploy/legacy_completions/bash/completion_jv.sh create mode 100755 scripts/deploy/legacy_completions/bash/completion_jvv.sh (limited to 'scripts/deploy/legacy_completions/bash') diff --git a/scripts/deploy/legacy_completions/bash/completion_jv.sh b/scripts/deploy/legacy_completions/bash/completion_jv.sh new file mode 100755 index 0000000..364df9d --- /dev/null +++ b/scripts/deploy/legacy_completions/bash/completion_jv.sh @@ -0,0 +1,272 @@ +#!/bin/bash +# The JustEnoughVCS CommandLine Completion + +_jv_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 direct unstain account update \ + sheet status here move mv docs exit use sheets accounts \ + as make drop track hold throw login \ + jump align info share" + + # Subcommands - Account + local account_commands="list as add remove movekey mvkey mvk genpub help" + + # Subcommands - Sheet + local sheet_commands="list use exit make drop help align" + + # Subcommands - Sheet + local sheet_commands="list use exit make drop help align" + + # Completion subcommands + if [[ $cword -eq 1 ]]; then + COMPREPLY=($(compgen -W "$base_commands" -- "$cur")) + return 0 + fi + + # Completion account + if [[ "$subcmd" == "account" || "$subcmd" == "acc" ]]; then + if [[ $cword -eq 2 ]]; then + COMPREPLY=($(compgen -W "$account_commands" -- "$cur")) + return 0 + fi + + case "$subsubcmd" in + "as"|"remove"|"mvkey"|"mvk"|"movekey"|"genpub") + if [[ $cword -eq 3 ]]; then + # Use jv account list --raw + local accounts + accounts=$($cmd account list --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$accounts" -- "$cur")) + elif [[ $cword -eq 4 && ("$subsubcmd" == "mvkey" || "$subsubcmd" == "mvk" || "$subsubcmd" == "movekey" || "$subsubcmd" == "genpub") ]]; then + COMPREPLY=($(compgen -f -- "$cur")) + fi + ;; + "add") + if [[ $cword -eq 3 ]]; then + # No completion for account name, let user type it + COMPREPLY=() + elif [[ $cword -eq 4 && "$cur" == -* ]]; then + # Complete --keygen option + COMPREPLY=($(compgen -W "--keygen" -- "$cur")) + fi + ;; + "-"|"rm") + if [[ $cword -eq 3 ]]; then + local accounts + accounts=$($cmd account list --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$accounts" -- "$cur")) + fi + ;; + esac + return 0 + fi + + # Completion sheet + if [[ "$subcmd" == "sheet" || "$subcmd" == "sh" ]]; then + if [[ $cword -eq 2 ]]; then + COMPREPLY=($(compgen -W "$sheet_commands" -- "$cur")) + return 0 + fi + + case "$subsubcmd" in + # Use jv sheet list --raw --all/--other + "use"|"drop") + if [[ $cword -eq 3 ]]; then + local sheets + sheets=$($cmd sheet list --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$sheets" -- "$cur")) + fi + ;; + "make") + if [[ $cword -eq 3 ]]; then + local all_sheets + all_sheets=$($cmd sheet list --all --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$all_sheets" -- "$cur")) + fi + ;; + "align") + if [[ $cword -eq 3 ]]; then + local align_items="lost moved erased" + local unsolved_items + unsolved_items=$($cmd sheet align --unsolved --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$align_items $unsolved_items" -- "$cur")) + elif [[ $cword -eq 4 ]]; then + local item="${words[3]}" + local align_operations="" + local created_items + created_items=$($cmd sheet align --created --raw 2>/dev/null) + + if [[ "$item" == "lost" ]]; then + align_operations="confirm" + elif [[ "$item" == lost:* ]]; then + align_operations="confirm $created_items" + elif [[ "$item" == "moved" || "$item" == moved:* ]]; then + align_operations="local remote break" + elif [[ "$item" == "erased" || "$item" == erased:* ]]; then + align_operations="confirm" + else + align_operations="local remote confirm break $created_items" + fi + + COMPREPLY=($(compgen -W "$align_operations" -- "$cur")) + fi + ;; + esac + return 0 + fi + + # Completion align + if [[ "$subcmd" == "align" ]]; then + if [[ $cword -eq 2 ]]; then + local align_items="lost moved erased" + local unsolved_items + unsolved_items=$($cmd sheet align --unsolved --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$align_items $unsolved_items" -- "$cur")) + elif [[ $cword -eq 3 ]]; then + local item="${words[2]}" + local align_operations="" + local created_items + created_items=$($cmd sheet align --created --raw 2>/dev/null) + + if [[ "$item" == "lost" ]]; then + align_operations="confirm" + elif [[ "$item" == lost:* ]]; then + align_operations="confirm $created_items" + elif [[ "$item" == "moved" || "$item" == moved:* ]]; then + align_operations="local remote break" + elif [[ "$item" == "erased" || "$item" == erased:* ]]; then + align_operations="confirm" + else + align_operations="local remote confirm break $created_items" + fi + + COMPREPLY=($(compgen -W "$align_operations" -- "$cur")) + fi + return 0 + fi + + # Completion share + if [[ "$subcmd" == "share" ]]; then + if [[ $cword -eq 2 ]]; then + # First parameter: list, see, jv share list --raw results, or files + local share_list + share_list=$($cmd share list --raw 2>/dev/null) + local first_param_options="list see $share_list" + COMPREPLY=($(compgen -W "$first_param_options" -f -- "$cur")) + elif [[ $cword -eq 3 ]]; then + # Second parameter: depends on first parameter + local first_param="${words[2]}" + + if [[ "$first_param" == "list" ]]; then + # list -> nothing + COMPREPLY=() + elif [[ "$first_param" == "see" ]]; then + # see -> jv share list --raw results + local share_list + share_list=$($cmd share list --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$share_list" -- "$cur")) + elif [[ "$first_param" == *"@"* ]]; then + # Contains "@" (shareid) -> show options + COMPREPLY=($(compgen -W "--safe --overwrite --skip --reject" -- "$cur")) + else + # File input -> show jv sheet list --all --raw results + local all_sheets + all_sheets=$($cmd sheet list --all --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$all_sheets" -- "$cur")) + fi + fi + # Third parameter: no completion + return 0 + fi + + # Completion login + if [[ "$subcmd" == "login" ]]; then + if [[ $cword -eq 2 ]]; then + local accounts + accounts=$($cmd account list --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$accounts" -- "$cur")) + elif [[ $cword -eq 3 ]]; then + local ip_history + ip_history=$($cmd _ip_history 2>/dev/null) + COMPREPLY=($(compgen -W "$ip_history" -- "$cur")) + fi + return 0 + fi + + # Completion direct + if [[ "$subcmd" == "direct" ]]; then + if [[ $cword -eq 2 ]]; then + local ip_history + ip_history=$($cmd _ip_history 2>/dev/null) + COMPREPLY=($(compgen -W "$ip_history" -- "$cur")) + fi + return 0 + fi + + # Completion info + if [[ "$subcmd" == "info" ]]; then + if [[ $cword -eq 2 ]]; then + COMPREPLY=($(compgen -f -- "$cur")) + fi + return 0 + fi + + # aliases + case "$subcmd" in + "as") + if [[ $cword -eq 2 ]]; then + local accounts + accounts=$($cmd account list --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$accounts" -- "$cur")) + fi + ;; + "use") + if [[ $cword -eq 2 ]]; then + local sheets + sheets=$($cmd sheet list --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$sheets" -- "$cur")) + fi + ;; + "make") + if [[ $cword -eq 2 ]]; then + local all_sheets + all_sheets=$($cmd sheet list --all --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$all_sheets" -- "$cur")) + fi + ;; + "drop") + if [[ $cword -eq 2 ]]; then + local sheets + sheets=$($cmd sheet list --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$sheets" -- "$cur")) + fi + ;; + "docs") + if [[ $cword -eq 2 ]]; then + local docs + docs=$($cmd docs list --raw 2>/dev/null) + COMPREPLY=($(compgen -W "$docs" -- "$cur")) + fi + ;; + "move"|"mv") + COMPREPLY=($(compgen -f -- "$cur")) + ;; + "track"|"hold"|"throw") + COMPREPLY=($(compgen -f -- "$cur")) + ;; + esac +} + +complete -F _jv_completion jv diff --git a/scripts/deploy/legacy_completions/bash/completion_jvv.sh b/scripts/deploy/legacy_completions/bash/completion_jvv.sh new file mode 100755 index 0000000..ce5668b --- /dev/null +++ b/scripts/deploy/legacy_completions/bash/completion_jvv.sh @@ -0,0 +1,78 @@ +#!/bin/bash +# The JustEnoughVCS CommandLine Completion + +_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