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

Re: Get cursor position (Was: [bug report] prompt can erase messages written on the terminal by background processes)



2022-12-08 09:34:41 +0100, Roman Perepelitsa:
[...]
> > curpos() {
> >   set -o localoptions -o extendedglob
> >   local match answer
> >   IFS= read -rsdR -t0.2 answer$'?\e[6n' &&
> >     [[ $answer = (#b)$'\e['(<->)';'(<->) ]] &&
> >     eval "${1-x}=\$match[2] ${2-y}=\$match[1]"
> > }
> 
> Functions that accept output parameter names as arguments are tricky.
> The following won't work:
> 
>     # Which line is the cursor on?
>     curpos _ answer
>     print -r -- "The cursor is on the line number $answer"
[...]

Yes, I thought of using 3 as the intermediary variable, but
decided against it as we can't do anything about match,
mbegin... anyway.

typeset -g "${1-x}=$match[2]" "${2-y}=$match[1]"

Doesn't work either. I guess there's no way to access variables
by the same name in that parent scope or to unlocal a variable?

(bash does by exploiting some bug (calling unset -v in a
severate function peels one layer of scoping instead of
unsetting in the current scope)).

-- 
Stephane




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