Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Custom auto complete


The solution you posted sort of dose what I want. With this code I have to
type ?<some char(s)> in order for it to work. If I just type ? and hit tab
it dose not work.
I get that's because of  ( \?* ) and I tried (\?) but it dose not work.
Interesting, if I use for example ( \! ) that works as expected. Is the '?'
special for some reason?

Also I found another way of getting what I want I think it's a more
intuitive solution than the whole '?' idea. I found that I can write my own
widget and bind it to a key so this is what I did:

zle -C custom-complete menu-expand-or-complete _parse_sb_file

_parse_sb_file() {
WORDS=( ${(f)"$(<$SB_FILE_PATH)"} )
integer POS=1
for ITEM in ${WORDS}; do
 ARRAY[${POS}]=${POS}") "${WORDS[${POS}]}
(( POS++ ))
compadd -l -d ARRAY -a -S '' -- WORDS

bindkey ${CTRLTAB_KEY} custom-complete

This works but I have some issues with this to:

1) if I press ctrl-tab I can not select the options with arrow keys I can
just switch them with ctrl-tab, unless I first run for example "cp <TAB>"
then I get the menu and I can select options. And if I after that (after cp
<TAB> showed the menu with select) use ctrl-tab I get menu with select? Not
sure why I first have invoke another menu for ctrl-tab to work in a same

2) if I have this string, for example, in a file "cp file1 file2" it is
inserted like this "cp\ file1\ file2". The white spaces are escaped, how
can I disable this, and tell zsh to insert a string as it is.

Thanks for your help.


On Mon, Aug 4, 2014 at 10:57 PM, Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>

> On Aug 4,  1:39pm, Bart Schaefer wrote:
> }
> }       # Now anything starting with '?'
> }       (\?*) _message "Querying answerfile"
> }             compstate[insert]=menu
> }             compadd -U -a answers  # -U to replace "?" with the result
> }             ;;
> Hmm, it occurs to me that this should probably be in the order
>             compadd -U -a answers  # -U to replace "?" with the result
>             compstate[insert]=menu
> so that the initial value of compstate[insert] is visible to compadd
> before we change it.  I don't know exactly when that would matter, but
> the doc for compstate[insert] implies that it might.

Messages sorted by: Reverse Date, Date, Thread, Author