Re: [hackers] [st][PATCH] reset the cursor shape to the default with DECSCUSR param 0

From: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Tue, 6 Sep 2022 15:34:45 +0200

On Tue, Sep 06, 2022 at 09:40:21PM +0900, Koichi Murase wrote:
> The empty parameter or parameter 0 of terminal control functions
> typically mean the default. In fact, typical implementations of
> DECSCUSR in other terminals (vte, alacritty, mintty, vte, wt, etc.)
> treat them as the default cursor shape. See also the discussions in
> the code comment of vte [1] and Issue #3293 of xterm.js [2].
>
> However, the current implementation of DECSCUSR in st always treats
> them as parameter 1 (blinking block cursor) regardless of the user
> setting of the default cursor shape (i.e., the variable "cursorshape"
> in config.h). This implementation causes an actual problem: there is
> no way to reset the cursor shape to the default after a terminal
> application changes the cursor shape by DECSCUSR.
>
> This commit fixes the behavior to reset the cursor shape to the
> default instead of hardcoded "blinking block cursor" (which was merely
> the initial default of VT but is not even the initial default of
> st---"steady block").
>
> [1] https://github.com/GNOME/vte/blob/fb604fe2/src/vteinternal.hh#L173-L184
> [2] https://github.com/xtermjs/xterm.js/issues/3293
> ---
> x.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/x.c b/x.c
> index 2a3bd38..aecc6f1 100644
> --- a/x.c
> +++ b/x.c
> _AT_@ -1739,6 +1739,8 @@ xsetcursor(int cursor)
> {
> if (!BETWEEN(cursor, 0, 7)) /* 7: st extension */
> return 1;
> + if (cursor == 0)
> + cursor = cursorshape; /* 0: reset to the default */
> win.cursor = cursor;
> return 0;
> }
> --
> 2.37.2
>
>

Hi,

Are you sure it is correct?

The page https://invisible-island.net/xterm/ctlseqs/ctlseqs.html describes:

CSI Ps SP q
          Set cursor style (DECSCUSR), VT520.
            Ps = 0 blinking block.
            Ps = 1 blinking block (default).
            Ps = 2 steady block.
            Ps = 3 blinking underline.
            Ps = 4 steady underline.
            Ps = 5 blinking bar, xterm.
            Ps = 6 steady bar, xterm.


To reproduce:

        xterm -uc # underline cursor
        printf '\x1b[0; q' # shows blinking block cursor


-- 
Kind regards,
Hiltjo
Received on Tue Sep 06 2022 - 15:34:45 CEST

This archive was generated by hypermail 2.3.0 : Tue Sep 06 2022 - 15:36:35 CEST