From 1fd56ff980dd80a24a3d2c90b692dc7c9f346bdd Mon Sep 17 00:00:00 2001 From: salmonik Date: Tue, 23 Jun 2026 14:52:27 +0200 Subject: Add shell path finding as a fallback. --- completions/_rsp | 59 ++++++++++++++++++++++++++------------------------------ 1 file changed, 27 insertions(+), 32 deletions(-) (limited to 'completions') 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() { local cur="${(j: :)args}" # No completion if this is a flag (handled above) [[ "$words[2]" == "play" && "$cur" == -* ]] && return 1 - local cur_clean="${cur//\\/}" + local -a suggestions suggestions=("${(@f)"$(rsp db-complete "$cur" 2>/dev/null)"}") local -a filtered=() @@ -34,39 +34,34 @@ _rsp_complete_args() { filtered+=("$s") fi done - suggestions=("${filtered[@]}") - if (( ${#suggestions} )); then - local noslash="${cur_clean//\/}" - local n_slashes=$(( ${#cur_clean} - ${#noslash} )) - local -a display=() - local -a vals=() - for s in "${suggestions[@]}"; do - vals+=("$s") - if [[ "$cur_clean" == */ ]]; then - local stripped="$s" - local i=0 - while (( i < n_slashes )); do - stripped="${stripped#*/}" - (( i++ )) - done - display+=("$stripped") - else - display+=("$s") - fi - done - if (( ${#suggestions} > 1 )); then - if [[ -n "$compstate[old_list]" ]]; then - compstate[insert]=menu - else - compstate[insert]= - fi - fi - if [[ ${vals[1]} == */ ]]; then - compadd -U -S '' -M 'm:{a-z}={A-Z} l:|=*' -d display -- "${vals[@]}" + + if (( ! ${#filtered} )); then + return 1 + fi + + local cur_clean="${cur//\\/}" + local noslash="${cur_clean//\/}" + local n_slashes=$(( ${#cur_clean} - ${#noslash} )) + local -a display=() + local -a vals=() + for s in "${filtered[@]}"; do + vals+=("$s") + if [[ "$cur_clean" == */ ]]; then + local stripped="$s" + local i=0 + while (( i < n_slashes )); do + stripped="${stripped#*/}" + (( i++ )) + done + display+=("$stripped") else - compadd -U -M 'm:{a-z}={A-Z} l:|=*' -d display -- "${vals[@]}" + display+=("$s") fi + done + + if [[ ${vals[1]} == */ ]]; then + compadd -S '' -d display -- "${vals[@]}" else - compadd -U -S '' + compadd -d display -- "${vals[@]}" fi } -- cgit v1.2.3