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 >