Subject: Re: [PATCH] add-zle-hook-widget zle-line-pre-redraw issue
From: Bart Schaefer <[email-masked]>
To: [email-masked]
Date: Sat, 23 Jul 2016 18:14:45 -0700
List-Id: Zsh Workers List <zsh-workers.zsh.org>

On Jul 23,  9:23pm, Daniel Shahaf wrote:
}
} The reason appears to be that, while in azhw:zle-line-init $WIDGET is
} "zle-line-init", in azhw:zle-line-pre-redraw $WIDGET is the name of the
} widget the user invoked (e.g., "self-insert"), so the 'zstyle -a' does
} not find the registered hooks.

If zsh-syntax-highlighting doesn't depend on that behavior, it's probably
unlikely that anything else does.

However, Mikael will have to weigh in on whether he chose do to this
intentionally.

} Each of the following alternative patches solves the issue:

The "second option" obviously isn't finished / leaves a lot of dead
code behind.  However, I think the first option is the correct one,
unless there's a good reason to leave $WIDGET alone; the context
that's being saved/restored by redrawhook() is important, because
we're in the middle of an arbitrary other widget

This is actually related to what I was saying about it not being
appropriate to stick a list of callbacks on any widget.

We can easily special-case add-zle-hook-widget to find the name another
way for this particular hook.  $funcstack[1] for example.

Incidentally, I tried making ALL the possible hooks be

    zle -M "$WIDGET $funcstack[1]"

and learned two things.  (1) pre-redraw is in fact the only hook that
doesn't change $WIDGET, and (2) having all the hooks call "zle -M"
garbles the output quite thoroughly, especially in vi mode.