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

Re: Completion lists



On Sep 13, 12:54pm, Yuri DElia wrote:
}
} I would like to highlight (in bold) the trailing/ambiguous part (typed in caps
} here):
} 
} $ cd prog<TAB>
} progRAM
} progMAN
} progWHATEVER

You should be able to do this with something like:

zstyle -e ':completion:*:default' list-colors \
    'reply=("=(#b)${words[CURRENT]:t}(*)=0=7")'

The -e option evaluates the style so you can use $words[CURRENT] to put
the string from the line into the style.  The highlight is controlled
by the =0=3 part, where =0 means no highlight on the parts that are
not matched by a pattern in parens and the =7 means use reverse video
on the part matched by the first sub-pattern in parens (here "(*)").
See the doc for the complist module ZLS_COLORS variable.

It won't work all the time because completion is a really complex beast.
You probably need to do the above a few times replacing "default" with
different tags.

For example, above I've use the tail (:t) of the current word so that
it'll do something useful when completing files in subdirectories, but
that isn't really necessary when completing variable names or options.
You might want to use one pattern for file completion and another for
other contexts.

If you've got matcher-list styles that do fancy completion in the middle
of words, $words[CURRENT] is going to be inadequate to the task (and it
is likely that nothing you can expand at the time the list-colors style
is evaluated would be sufficient).  You might specify case-insensitive
globbing on to help with mixed-case matcher-lists:

zstyle -e ':completion:*:default' list-colors \
    'reply=("=(#bi)${words[CURRENT]:t}(*)=0=7")'

If someone builds up a useful set of these based on this example, please
post back to the list.



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