fix(autocompletion): fix autocomplete for cmr for multiple users
This commit is contained in:
@@ -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 1–2 chars, do local filtering over the full list
|
# If 1–2 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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user