diff options
Diffstat (limited to 'completions/_rsp')
| -rw-r--r-- | completions/_rsp | 59 |
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 | } |
