aboutsummaryrefslogtreecommitdiffstats
path: root/completions/_rsp
diff options
context:
space:
mode:
authorsalmonik <raisersoft@proton.me>2026-06-23 14:52:27 +0200
committersalmonik <raisersoft@proton.me>2026-06-23 14:52:27 +0200
commit1fd56ff980dd80a24a3d2c90b692dc7c9f346bdd (patch)
tree575e28dc3da69ec8c1623b2bad542ec4a0c0f0ea /completions/_rsp
parentlast autocompletion fixes (diff)
downloadrsplayer-1fd56ff980dd80a24a3d2c90b692dc7c9f346bdd.tar.gz
rsplayer-1fd56ff980dd80a24a3d2c90b692dc7c9f346bdd.zip
Add shell path finding as a fallback.
Diffstat (limited to '')
-rw-r--r--completions/_rsp59
1 files changed, 27 insertions, 32 deletions
diff --git a/completions/_rsp b/completions/_rsp
index 7ac2323..ade1850 100644
--- a/completions/_rsp
+++ b/completions/_rsp
@@ -25,7 +25,7 @@ _rsp_complete_args() {
25 local cur="${(j: :)args}" 25 local cur="${(j: :)args}"
26 # No completion if this is a flag (handled above) 26 # No completion if this is a flag (handled above)
27 [[ "$words[2]" == "play" && "$cur" == -* ]] && return 1 27 [[ "$words[2]" == "play" && "$cur" == -* ]] && return 1
28 local cur_clean="${cur//\\/}" 28
29 local -a suggestions 29 local -a suggestions
30 suggestions=("${(@f)"$(rsp db-complete "$cur" 2>/dev/null)"}") 30 suggestions=("${(@f)"$(rsp db-complete "$cur" 2>/dev/null)"}")
31 local -a filtered=() 31 local -a filtered=()
@@ -34,39 +34,34 @@ _rsp_complete_args() {
34 filtered+=("$s") 34 filtered+=("$s")
35 fi 35 fi
36 done 36 done
37 suggestions=("${filtered[@]}") 37
38 if (( ${#suggestions} )); then 38 if (( ! ${#filtered} )); then
39 local noslash="${cur_clean//\/}" 39 return 1
40 local n_slashes=$(( ${#cur_clean} - ${#noslash} )) 40 fi
41 local -a display=() 41
42 local -a vals=() 42 local cur_clean="${cur//\\/}"
43 for s in "${suggestions[@]}"; do 43 local noslash="${cur_clean//\/}"
44 vals+=("$s") 44 local n_slashes=$(( ${#cur_clean} - ${#noslash} ))
45 if [[ "$cur_clean" == */ ]]; then 45 local -a display=()
46 local stripped="$s" 46 local -a vals=()
47 local i=0 47 for s in "${filtered[@]}"; do
48 while (( i < n_slashes )); do 48 vals+=("$s")
49 stripped="${stripped#*/}" 49 if [[ "$cur_clean" == */ ]]; then
50 (( i++ )) 50 local stripped="$s"
51 done 51 local i=0
52 display+=("$stripped") 52 while (( i < n_slashes )); do
53 else 53 stripped="${stripped#*/}"
54 display+=("$s") 54 (( i++ ))
55 fi 55 done
56 done 56 display+=("$stripped")
57 if (( ${#suggestions} > 1 )); then
58 if [[ -n "$compstate[old_list]" ]]; then
59 compstate[insert]=menu
60 else
61 compstate[insert]=
62 fi
63 fi
64 if [[ ${vals[1]} == */ ]]; then
65 compadd -U -S '' -M 'm:{a-z}={A-Z} l:|=*' -d display -- "${vals[@]}"
66 else 57 else
67 compadd -U -M 'm:{a-z}={A-Z} l:|=*' -d display -- "${vals[@]}" 58 display+=("$s")
68 fi 59 fi
60 done
61
62 if [[ ${vals[1]} == */ ]]; then
63 compadd -S '' -d display -- "${vals[@]}"
69 else 64 else
70 compadd -U -S '' 65 compadd -d display -- "${vals[@]}"
71 fi 66 fi
72} 67}