fix(autocompletion): fix autocomplete for cmr for multiple users

This commit is contained in:
Oliver
2025-11-21 13:17:46 +01:00
parent fca3854be1
commit 599006f288

View File

@@ -1,26 +1,40 @@
# autocomplete # autocomplete
_cmr() { _cmr() {
emulate -L zsh
setopt extended_glob
local -a opts local -a opts
opts=('--draft') opts=('--draft')
# If completing an option # Complete options
if [[ $words[CURRENT] == -* ]]; then if [[ $words[CURRENT] == -* ]]; then
_describe 'options' opts _describe 'options' opts
return return
fi fi
# Extract the full argument being completed (comma-separated) # Full current "word" at cursor (may contain commas)
local cur=$words[CURRENT] local cur=$words[CURRENT]
# Split into prefix (before last comma) and fragment being typed (after last comma)
local prefix last local prefix last
prefix="${cur%,*}" prefix="${cur%,*}"
last="${cur##*,}" last="${cur##*,}"
local last_len=${#last}
# Tell zsh: "this part is fixed, don't match on it"
if [[ "$prefix" != "$cur" ]]; then
IPREFIX="${prefix},"
PREFIX="$last"
else
IPREFIX=""
PREFIX="$cur"
fi
# Build GitLab query # Build GitLab query
local query="users?state=active&per_page=100" local query="users?state=active&per_page=100"
local last_len=${#last}
# Only use &search= when there are 3 or more characters # Only use &search= when fragment has 3+ chars
if (( last_len >= 3 )); then if (( last_len >= 3 )); then
query="${query}&search=${last}" query="${query}&search=${last}"
fi fi
@@ -29,7 +43,7 @@ _cmr() {
local -a users local -a users
users=("${(@f)$(glab api "$query" 2>/dev/null | jq -r '.[].username')}") users=("${(@f)$(glab api "$query" 2>/dev/null | jq -r '.[].username')}")
# If 12 chars, do local filtering over the full list # If 12 chars, filter locally on the full list
if (( last_len > 0 && last_len < 3 )); then if (( last_len > 0 && last_len < 3 )); then
local -a filtered local -a filtered
local u local u
@@ -40,16 +54,8 @@ _cmr() {
users=("${filtered[@]}") users=("${filtered[@]}")
fi fi
# Build final completion items # Now just offer the usernames; zsh will prepend $IPREFIX automatically
local -a completions compadd -Q -- "${users[@]}"
if [[ "$prefix" != "$cur" ]]; then
prefix="${prefix},"
completions=("${prefix}${^users}")
else
completions=("${users[@]}")
fi
_describe 'users' completions
} }
function _tat_autocomplete() { function _tat_autocomplete() {