When two or more zle-line-pre-redraw hooks are registered using add-zle-hook-widget, the value of $LASTWIDGET when the each hook is called is the name of the former hook: [Eric Freese wrote in https://github.com/zsh-users/zsh-autosuggestions/issues/529#issuecomment-632113840] $ zsh -df % autoload add-zle-hook-widget % f() {} % g() { zle -M "$(typeset -p LASTWIDGET)" } % add-zle-hook-widget line-pre-redraw f % add-zle-hook-widget line-pre-redraw g % x typeset -r LASTWIDGET=f The issue here is that g would like to to know what widget was invoked immediately before the redraw. In the example, that'd be self-insert. I've attached two proofs of concept. WDYT? I'll add docs, etc, once an approach is chosen. Cheers, Daniel P.S. For the latter patch, note that «zle $widget -f» is distinct from «zle -f».