summaryrefslogtreecommitdiff
path: root/scripts/deploy/completions/bash.sh
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-03-14 22:12:30 +0800
committer魏曹先生 <1992414357@qq.com>2026-03-14 22:40:12 +0800
commit72f80ea51f25256d0c463c2f3dc3d8670cfc4634 (patch)
treeb200a3ab1a4c718034458863570a064b52bafdcd /scripts/deploy/completions/bash.sh
parent54b5567d6f1b1adaa6ada6a26faba0c5c492b7f3 (diff)
Add shell completions for new jvn CLI
Diffstat (limited to 'scripts/deploy/completions/bash.sh')
-rw-r--r--scripts/deploy/completions/bash.sh65
1 files changed, 65 insertions, 0 deletions
diff --git a/scripts/deploy/completions/bash.sh b/scripts/deploy/completions/bash.sh
new file mode 100644
index 0000000..418105d
--- /dev/null
+++ b/scripts/deploy/completions/bash.sh
@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+_jvn_bash_completion() {
+ local cur prev words cword
+
+ local line="${COMP_LINE}"
+ local point="${COMP_POINT}"
+
+ if [ "${point}" -gt "${#line}" ]; then
+ point="${#line}"
+ fi
+
+ words=($line)
+ cword=0
+
+ local i=0
+ local pos=0
+ for word in "${words[@]}"; do
+ local word_start=$pos
+ local word_end=$((pos + ${#word}))
+
+ if [ "${point}" -ge "${word_start}" ] && [ "${point}" -le "${word_end}" ]; then
+ cword=$i
+ cur="${word}"
+ break
+ fi
+
+ pos=$((pos + ${#word} + 1))
+ i=$((i + 1))
+ done
+
+ if [ "${point}" -gt "${pos}" ]; then
+ cword=${#words[@]}
+ cur=""
+ fi
+
+ if [ "${cword}" -gt 0 ]; then
+ prev="${words[$((cword-1))]}"
+ else
+ prev=""
+ fi
+
+ local args=(
+ -f "$COMP_LINE"
+ -C "$COMP_POINT"
+ -w "$cur"
+ -p "$prev"
+ -c "${words[0]}"
+ -i "$cword"
+ -a "${words[@]}"
+ )
+
+ local suggestions
+ if suggestions=$(jvn_comp "${args[@]}" 2>/dev/null); then
+ if [ "$suggestions" = "_file_" ]; then
+ compopt -o default
+ COMPREPLY=()
+ else
+ mapfile -t COMPREPLY < <(printf '%s\n' "$suggestions")
+ fi
+ else
+ COMPREPLY=()
+ fi
+}
+
+complete -F _jvn_bash_completion jvn