diff --git a/omz-custom/completion.sh b/omz-custom/completion.sh new file mode 100644 index 0000000..cbbde48 --- /dev/null +++ b/omz-custom/completion.sh @@ -0,0 +1,76 @@ +# autocomplete + +_cmr() { + local -a opts + opts=('--draft') + + # If completing an option + if [[ $words[CURRENT] == -* ]]; then + _describe 'options' opts + return + fi + + # Extract the full argument being completed (comma-separated) + local cur=$words[CURRENT] + local prefix last + prefix="${cur%,*}" + last="${cur##*,}" + + # Build GitLab query + local query="users?state=active&per_page=100" + local last_len=${#last} + + # Only use &search= when there are 3 or more characters + if (( last_len >= 3 )); then + query="${query}&search=${last}" + fi + + # Fetch usernames + local -a users + users=("${(@f)$(glab api "$query" 2>/dev/null | jq -r '.[].username')}") + + # If 1–2 chars, do local filtering over the full list + if (( last_len > 0 && last_len < 3 )); then + local -a filtered + local u + for u in "${users[@]}"; do + # substring match; change to == ${last}* for prefix-only + [[ $u == *${last}* ]] && filtered+="$u" + done + users=("${filtered[@]}") + fi + + # Build final completion items + local -a completions + if [[ "$prefix" != "$cur" ]]; then + prefix="${prefix}," + completions=("${prefix}${^users}") + else + completions=("${users[@]}") + fi + + _describe 'users' completions +} + +function _tat_autocomplete() { + local -a projects files dirs + local expl + + # Get tmuxinator projects + projects=(${(f)"$(tls)"}) + + # Get files and directories with proper completion + _alternative \ + 'projects:tmuxinator projects:compadd -a projects' \ + 'files:files:_files' +} + +# Register the completion function for zsh +if [[ -n ${ZSH_VERSION-} ]]; then + compdef _tat_autocomplete tat + compdef _cmr cmr +else + # Fallback for bash + complete -f -F _tat_autocomplete -o default tat + complete -f -F _cmr -o default tat +fi diff --git a/omz-custom/custom_commands.sh b/omz-custom/custom_commands.sh index 8d13a1f..194ce7e 100755 --- a/omz-custom/custom_commands.sh +++ b/omz-custom/custom_commands.sh @@ -404,3 +404,4 @@ function gpla() { # source the tmux-sessions.sh in the same folder source $(dirname "$0")/tmux-sessions.sh +source $(dirname "$0")/completion.sh diff --git a/omz-custom/tmux-sessions.sh b/omz-custom/tmux-sessions.sh index f598769..43ca731 100644 --- a/omz-custom/tmux-sessions.sh +++ b/omz-custom/tmux-sessions.sh @@ -33,24 +33,3 @@ function tat() { function tls() { tmuxinator list | grep -v tmuxinator | tr ' ' '\n' | grep -v '^$' } - -function _tat_autocomplete() { - local -a projects files dirs - local expl - - # Get tmuxinator projects - projects=(${(f)"$(tls)"}) - - # Get files and directories with proper completion - _alternative \ - 'projects:tmuxinator projects:compadd -a projects' \ - 'files:files:_files' -} - -# Register the completion function for zsh -if [[ -n ${ZSH_VERSION-} ]]; then - compdef _tat_autocomplete tat -else - # Fallback for bash - complete -f -F _tat_autocomplete -o default tat -fi