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

Re: [RFC][PATCH] Add zrestart()

On Mon, Apr 26, 2021 at 6:22 AM Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx> wrote:
> > +{
> > +  # Some users export $ZDOTDIR, which can mess things up.
> > +  local zdotdir=$ZDOTDIR
> > +  unset ZDOTDIR
> More importantly, I don't see any reason to munge $ZDOTDIR in the first
> place.  It amounts to second-guessing the user.

It's a workaround for the following problem that I've observed in the wild:
1. $HOME/.zshenv does `export ZDOTDIR=foo` and <bar>.
2. $ZDOTDIR/.zshrc does something that relies on <bar> having happened.
3. User calls zrestart (or just `exec zsh`, for that matter).
4. The new shell now looks for foo/.zshenv instead of $HOME/.zshenv,
but no such file exits.
5. .zshrc throws an error because <bar> hasn't happened in this shell.

> > +  local err="$(zsh --interactive --monitor --zle -c '' 2>&1 > /dev/null)"
> Also, I think it's quite a stretch to describe this line as "_tests_
> whether the shell is able to restart".

I originally had `zsh -fn <all the dotfiles>`, along the lines of what
was suggested earlier, but that test can fail on a valid dotfile that
uses dynamically named dirs. Plus, if any dotfile sources other files,
those files aren't checked this way at all. The approach above is the
only one I've found so far that appears to be completely reliable in
determining whether the shell can start up successfully.

> This line executes a whole bunch of code you have no control over.

It is, however, exactly the code we want to test here.

> I don't think that's an acceptable approach.

What kind of approach would be acceptable?

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