On Sun, Feb 05, 2023 at 06:39:24PM -0500, Adam Price wrote:
> ---
> VT100 defines an escape sequence [1] called Device Status Report (DSR). When
> the DSR sequence received is `csi 5n`, an "OK" response `csi 0n` is returned.
> This patch adds that "OK" response.
> 
> I encountered this missing sequence when I noticed that fzf [2] would clobber
> my prompt whenever completing a find.
> 
> To test that ST doesn't currently respond to `csi 5n`, use fzf's shell
> extension in ST's repo to complete the path for a file.
> 
>     my-fancy-prompt $ vim **<tab>
>     <select a file>
>     st.c
> 
> Select a file with <enter>, and notice that fzf clobbers some or all of your
> prompt.
> 
> After applying this patch, do the same test as above and notice that fzf has 
> no
> longer clobbered your prompt by placing the file name in the correct position
> in your command.
> 
>     my-fancy-prompt $ vim **<tab>
>     <select a file>
>     my-fancy prompt $ vim st.c
> 
> Thank you for considering my first patch submission.
> 
> [1] https://www.xfree86.org/current/ctlseqs.html#VT100%20Mode
> [2] https://github.com/junegunn/fzf
> 
> 
>  st.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/st.c b/st.c
> index 34c27ad..21a53cc 100644
> --- a/st.c
> +++ b/st.c
> @@ -1769,11 +1769,18 @@ csihandle(void)
>       case 'm': /* SGR -- Terminal attribute (color) */
>               tsetattr(csiescseq.arg, csiescseq.narg);
>               break;
> -     case 'n': /* DSR – Device Status Report (cursor position) */
> -             if (csiescseq.arg[0] == 6) {
> +     case 'n': /* DSR – Device Status Report */
> +             switch (csiescseq.arg[0]) {
> +             case 5: /* Status Report "OK" `0n` */
> +                     ttywrite("\033[0n", sizeof("\033[0n"), 0);
> +                     break;
> +             case 6: /* Report Cursor Position (CPR) `<row>;<column>R` */
>                       len = snprintf(buf, sizeof(buf), "\033[%i;%iR",
>                                       term.c.y+1, term.c.x+1);
>                       ttywrite(buf, len, 0);
> +                     break;
> +             default:
> +                     goto unknown;
>               }
>               break;
>       case 'r': /* DECSTBM -- Set Scrolling Region */
> --
> 2.39.1
> 
> 

Hi Adam,

Thanks for the patch,

I've slightly adapted the patch with input from the mailinglist and commited it.

Also thanks for the reviews people!

-- 
Kind regards,
Hiltjo

Reply via email to