thanks, I ended doing it like this:

zle-line-init(){
    [[ -n $__precmd_buffer ]] && {
        BUFFER=$__precmd_buffer
        CURSOR=$__precmd_cursor
    }
}

and storing the current line and cursor position with:

set_precmd_buffer() {
    __precmd_buffer=$BUFFER
    __precmd_cursor=$CURSOR
}
zle -N set_precmd_buffer set_precmd_buffer
bindkey "^X^[e" set_precmd_buffer

best regards!

Pier Paolo Grassi


Il giorno ven 29 apr 2022 alle ore 16:25 Peter Stephenson <p.w.stephenson@ntlworld.com> ha scritto:
> On 29 April 2022 at 15:18 Pier Paolo Grassi <pierpaolog@gmail.com> wrote:
> actually I have another question, is there a similar way of setting the
> initial cursor position like I would do setting the CURSOR var in zle
> widgets?

As long as something else hasn't already taken over zle-line-init, you
can do something like

zle-line-init() {               
  if (( set_cursor )); then
    (( CURSOR = set_cursor ))
    set_cursor=0
  fi
}
zle -N zle-line-init

then you can use it like

print -z "foo bar"; typeset -gi set_cursor=4

pws