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

Re: Zsh completion configuration



Hello Bart,

Thanks for responding. It works like a charm.

tags in context :completion::complete:-command-::
    history-words
                (_history _history_or_autocd (eval))
    commands builtins functions aliases suffix-aliases reserved-words
jobs parameters  (_alternative _command_names _autocd
_history_or_autocd (eval))
    commands
                (_path_commands _alternative _command_names _autocd
_history_or_autocd (eval))
    path-dirs
                (_path_commands _alternative _command_names _autocd
_history_or_autocd (eval))
    jobs
                (_jobs _alternative _command_names _autocd
_history_or_autocd (eval))
    parameters
                (_parameters _alternative _command_names _autocd
_history_or_autocd (eval))
    local-directories named-directories
                (_alternative _cd _autocd _history_or_autocd (eval))
    users named-directories directory-stack
                (_tilde _alternative _cd _autocd _history_or_autocd
(eval))
    users
                (_users _tilde _alternative _cd _autocd
_history_or_autocd (eval))
tags in context :completion::history:::
    history-words  (_history)

> Unless I'm misunderstanding your intent, you don't actually want to
> change the tags from _command_names -- you just want to add another tag
> that appears in completion output along with the _command_names tags?

yes, that is exactly what I wanted to do.

> And then install it for the context:
>
>     compdef _history_or_autocd -command-

I do not understand the "install" process. Is it good enough to have
the function file (_history_or_autocd) anywhere in the $fpath? Or,
does it have to be after the directory with _autocd?

I added this "zstyle ':completion::complete:-command-:*'
_history_or_autocd" to my zshrc, in addition to deleting my zcompdump
and then running the above "compdef _history_or_autocd -command-"
command. Just a rehash did not do the job. Any thoughts, please?

> To explain a bit further, the completers in the completer style are in
> general attempted until one returns a zero (true, success) status, at
> which point the set of possible matches is assumed to be finished.  To
> merge the results of several completers you have to save the staus, try
> the next one, and then return success if any of those completers was
> successful.
>
> If you instead wanted to complete history and only try the defaults if no
> history words matched, you could have shortcut this as
>
>     compdef '_history || _autocd' -command-
>
> Of course whichever of these you choose has to happen after compinit is
> run, otherwise _autocd will step on it when loaded.

Thanks a lot for the explanation. The code makes so much more sense now.

Thanks again,
Joe



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