Zsh Mailing List Archive
Messages sorted by:
Re: detect if compinit was run and rerun
- X-seq: zsh-users 23422
- From: Mikael Magnusson <mikachu@xxxxxxxxx>
- To: Paul Seyfert <pseyfert.mathphys@xxxxxxxxx>
- Subject: Re: detect if compinit was run and rerun
- Date: Fri, 1 Jun 2018 19:12:00 +0200
- Cc: Zsh Users <zsh-users@xxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=jw3aM3ZLILtq0LL6LEh1vgmC7KmhVNfO85JmO3iP4JM=; b=P8DatiAYPVFGdwELmXuA1OgEFQZKzmqYSDOBdHj3jJ4KMSnqkngwvJnOOujXLunPvS 0XFwc3oFCIHCYwSlypaR9fpzoTs12K2G1fuk0v1HKVGW0AG7JTx5MssSJw02RJmc/sTv zqkG2HquiDUamq6lXuZvUAiixWHHjMpRSEwFT23Xj0txKweG7SwOE0cxr/v7i9FA4fwX F881c/EjLdqHjtywrN8u0iRBeDLCfwQtqCbuB8WDbJjf9nu0bWTiWqcwlYMZ07PGRECW 3w2dQn+DXgjFn8ksVqDOuaqj4/YZo/W/AhqpH1/AwYhcQr9Fk5MWcNWbhwBeAJGQc7mr lpSA==
- In-reply-to: <20180601145818.GC17967@robusta>
- List-help: <mailto:firstname.lastname@example.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:email@example.com>
- List-unsubscribe: <mailto:firstname.lastname@example.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <20180601145818.GC17967@robusta>
On Fri, Jun 1, 2018 at 4:58 PM, Paul Seyfert
> Dear all,
> We are working on a small script that is supposed to be sourced to set
> up some environment for a user. I.e. it mostly prepends to PATH,
> LD_LIBRARY_PATH, MANPATH, PYTHONPATH, CMAKE_PREFIX_PATH.
> For the additional commands, we would also like to provide tab
> completions. The plan is atm to have them all in one directory which
> would be prepended (appended?) to $fpath.
> As far as I see, manipulating $fpath doesn't change the completion
> behaviour until `compinit` is run. As far as I know it corresponds the
> zsh design to not force completion on the user unless they ask for it,
> therefore I don't want to blindly run compinit in the script (if a user
> does not call `compinit`, I don't do it for them). On the other hand I
> don't want to annoy users with "yes, you already called `compinit` in
> your .zshrc, but you need to do it again".
> I am therefore wondering if I can detect if `compinit` has already been
> called and rerun it if so.
> Do you have suggestions how to approach this?
> I drafted:
> ( compdef ) ; [ $? != 127 ] && compinit ;
> Ideally I would reuse its settings. I.e. if a user ran `compinit` with
> -i or -C originally, our script shouldn't run `compinit` w/o.
If you change fpath and then rerun compinit, you are going to cause
zcompdump to be regenerated, ie every startup will do two full
regenerations of the cache instead of 0. Instead, you should not do
that. Just make sure your code that changes fpath is run before the
user runs compinit (by asking the user to configure their shell
correctly). If you absolutely want to add a completer at runtime, it
is probably better to use only compdef+autoload and not compinit. I
don't see any reason why the user would want to avoid having these
completers always configured though.
Messages sorted by: