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 --- scripts/deploy/completions/bash.sh | 65 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 scripts/deploy/completions/bash.sh (limited to 'scripts/deploy/completions/bash.sh') 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 -- cgit