Re: tmux: add utf8 terminal-features

Nicholas Marriott <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <CAEdLfcG0REqDVZVrwvVwKT1ikuba8chq9YqmxHLsxhup4oCKhg@mail.gmail.com>
looks good ok nicm

On Mon, 31 Aug 2026, 11:54 Kirill A. Korinsky, <[email protected]> wrote:

> On Mon, 31 Aug 2026 10:16:28 +0200,
> Nicholas Marriott <[email protected]> wrote:
> >
> > It is a little unfortunate UTF8 is a client flag rather than tty_term but
> > it kind of has to be, so this looks the right approach.
> >
> > I think tty_feature_present should special-case this as well (you can
> > check term->tty->client->flags) and then you need this in window-client.c
> > also so it shows up in the info pane (C-b D i):
> >
> > --- window-client.c     5 Aug 2026 08:54:56 -0000       1.48
> > +++ window-client.c     31 Aug 2026 08:13:37 -0000
> > @@ -102,7 +102,8 @@ static const char *window_client_info_li
> >         WINDOW_CLIENT_FEATURE(sync) " "
> >         WINDOW_CLIENT_FEATURE(title),
> >         "              #[#{E:tree-mode-border-style},acs]x#[default] "
> > -       WINDOW_CLIENT_FEATURE(usstyle),
> > +       WINDOW_CLIENT_FEATURE(usstyle) " "
> > +       WINDOW_CLIENT_FEATURE(utf8),
> >
> >
> "#[#{E:tree-mode-border-style},acs]qqqqqqqqqqqqqqn#{R:q,#{window_width}}#[default]",
> >
> >         "#[fg=themelightgrey]prefix
> >  #[#{E:tree-mode-border-style},acs]x#[default] "
> >
>
> Thanks, here updated diff which should report utf8 state when it is enabled
> via locale, -u or the new feature.
>
> Ok?
>
> Index: tmux.1
> ===================================================================
> RCS file: /home/cvs/src/usr.bin/tmux/tmux.1,v
> diff -u -p -r1.1159 tmux.1
> --- tmux.1      25 Aug 2026 08:37:08 -0000      1.1159
> +++ tmux.1      31 Aug 2026 10:45:16 -0000
> @@ -5111,6 +5111,8 @@ Supports
>  title setting.
>  .It usstyle
>  Allows underscore style and colour to be set.
> +.It utf8
> +Supports UTF\-8 output.
>  .El
>  .It Ic terminal\-overrides[] Ar string
>  Allow terminal descriptions read using
> Index: tty-features.c
> ===================================================================
> RCS file: /home/cvs/src/usr.bin/tmux/tty-features.c,v
> diff -u -p -r1.42 tty-features.c
> --- tty-features.c      17 Aug 2026 14:47:41 -0000      1.42
> +++ tty-features.c      31 Aug 2026 10:42:21 -0000
> @@ -358,6 +358,13 @@ static const struct tty_feature tty_feat
>         0
>  };
>
> +/* Terminal supports UTF-8. */
> +static const struct tty_feature tty_feature_utf8 = {
> +       "utf8",
> +       NULL,
> +       0
> +};
> +
>  /* Available terminal features. */
>  static const struct tty_feature *const tty_features[] = {
>         &tty_feature_256,
> @@ -380,7 +387,8 @@ static const struct tty_feature *const t
>         &tty_feature_strikethrough,
>         &tty_feature_sync,
>         &tty_feature_title,
> -       &tty_feature_usstyle
> +       &tty_feature_usstyle,
> +       &tty_feature_utf8
>  };
>
>  /* Parse features for client. */
> @@ -463,6 +471,9 @@ tty_feature_present(struct tty_term *ter
>         u_int                            i;
>         char                            *copy;
>
> +       if (strcmp(name, "utf8") == 0)
> +               return ((term->tty->client->flags & CLIENT_UTF8) != 0);
> +
>         for (i = 0; i < nitems(tty_features); i++) {
>                 tf = tty_features[i];
>                 if (strcmp(tf->name, name) == 0) {
> @@ -476,7 +487,8 @@ tty_feature_present(struct tty_term *ter
>          * We don't just have the feature flag set. Check if the
> capabilities
>          * supported by the client are actual set instead.
>          */
> -       if (tf == NULL || strcmp(name, "ignorefkeys") == 0)
> +       if (tf == NULL || tf->capabilities == NULL ||
> +           strcmp(name, "ignorefkeys") == 0)
>                 return (0);
>         if (tf->flags != 0 && (term->flags & tf->flags) != tf->flags)
>                 return (0);
> @@ -524,6 +536,8 @@ tty_apply_features(struct tty_term *term
>                         }
>                 }
>                 term->flags |= tf->flags;
> +               if (tf == &tty_feature_utf8)
> +                       c->flags |= CLIENT_UTF8;
>         }
>         if ((term->applied_features|feat) == term->applied_features)
>                 return (0);
> Index: window-client.c
> ===================================================================
> RCS file: /home/cvs/src/usr.bin/tmux/window-client.c,v
> diff -u -p -r1.48 window-client.c
> --- window-client.c     5 Aug 2026 08:54:56 -0000       1.48
> +++ window-client.c     31 Aug 2026 10:42:21 -0000
> @@ -102,7 +102,8 @@ static const char *window_client_info_li
>         WINDOW_CLIENT_FEATURE(sync) " "
>         WINDOW_CLIENT_FEATURE(title),
>         "              #[#{E:tree-mode-border-style},acs]x#[default] "
> -       WINDOW_CLIENT_FEATURE(usstyle),
> +       WINDOW_CLIENT_FEATURE(usstyle) " "
> +       WINDOW_CLIENT_FEATURE(utf8),
>
> "#[#{E:tree-mode-border-style},acs]qqqqqqqqqqqqqqn#{R:q,#{window_width}}#[default]",
>
>         "#[fg=themelightgrey]prefix
> #[#{E:tree-mode-border-style},acs]x#[default] "
>
>
> --
> wbr, Kirill
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.