Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: completion within a function
On Wed, Dec 30, 2020 at 10:45 AM Ray Andrews <rayandrews@xxxxxxxxxxx> wrote:
> So the idea of invoking completion within a function is now a matter of
> curiosity only. Still I'm surprised it can't be done. It's one of
> those things where zsh smartness is hard to turn off.
I can be done, it's just not straight-forward.
After removing all the unnecessary stuff from the tests, I came up
with this script that does list completions:
./complete "git --"
#!/bin/zsh
zmodload zsh/zpty
dir=$(mktemp -d)
cat > "$dir/.zshrc" <<'EOF'
setopt zle
setopt list_rows_first
LC_ALL=C
PS1="<PROMPT>"
TERM=dumb
fpath=($ZDOTDIR $fpath)
LISTMAX=1000 # There seems to be a bug in zsh with several thousands
autoload -U compinit && compinit -u
zstyle ":completion:*:default" list-colors "no=<NO>" "fi=<NO>"
"di=<NO>" "sp=<SP>" "lc=<LC>" "rc=<RC>" "ec=<EC>\n"
zstyle ':completion:*' verbose no
zle_complete () {
zle list-choices
zle kill-whole-line
print "<END-CHOICES>"
}
zle -N zle_complete
bindkey "^I" zle_complete
EOF
zpty zsh "ZDOTDIR=$dir zsh"
zpty -n -w zsh "$1"$'\t'
zpty -r zsh log '*<END-CHOICES>'
for x in ${(M)${(f)log}:#*'<LC><NO>'*}; do
print -- "${${x%'<EC>'*}#*'<RC>'}"
done
rm -r "$dir"
--
Felipe Contreras
Messages sorted by:
Reverse Date,
Date,
Thread,
Author