Given this setup:
% zmodload zsh/complist% autoload compinit% compinit% bindkey '^I' tst-complete% zle -C tst-complete
menu-select tst-complete
% tst-complete
() { compadd -Ssuffix
-R tst-suffix -- a b }% tst-suffix() { LBUFFER+="len=$1" }% bindkey '^[i' tst-custom% zle -N tst-custom% tst-custom() { zle beginning-of-line }Then the following is expected behavior:
# press `:`+Space+Tab% : asuffix
a b# completion menu opened
# press Escape+`i`
% : asuffixlen=6
# tst-suffix was called and cursor was moved to beginning of line
However, if we do not call any built-in widget inside our custom widget,then tst-suffix does not get called:
% tst-custom() { CURSOR=0 }
# press `:`+Space+Tab
% : asuffix
a b# completion menu opened
# press Escape+`i`
% : asuffix
# cursor was moved to beginning of line, but tst-suffix was not called
Interestingly, if we then activate a built-in widget right after,
then tst-suffix gets called after all, but with the wrong value:
% len=0 : asuffix