From 3ba4fb32cf52ab5eb3441b947d3f15785b38db6a Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 14 Oct 2026 12:33:46 +0000 Subject: [PATCH] Add imagescroll feature and capability. --- tmux.1 | 8 ++++++-- tmux.h | 3 ++- tty-features.c | 15 ++++++++++++++- tty-term.c | 3 ++- window-client.c | 15 ++++++++------- 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/tmux.1 b/tmux.1 index ee852c221..6267b8227 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.1185 2026/10/13 10:21:58 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.1186 2026/10/14 12:33:46 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott .\" @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: October 13 2026 $ +.Dd $Mdocdate: October 14 2026 $ .Dt TMUX 1 .Os .Sh NAME @@ -5192,6 +5192,8 @@ Supports extended keys. Supports focus reporting. .It hyperlinks Supports OSC 8 hyperlinks. +.It imagescroll +Moves image content with scroll regions. .It ignorefkeys Ignore function keys from .Xr terminfo 5 @@ -8972,6 +8974,8 @@ These are set automatically if the capability is present. .It Em \&Hls Set or clear a hyperlink annotation. +.It Em \&Iscrl +Indicates that the terminal moves image content with scroll regions. .It Em \&Nobr Tell .Nm diff --git a/tmux.h b/tmux.h index c42115aef..4ea5e7671 100644 --- a/tmux.h +++ b/tmux.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.h,v 1.1461 2026/10/14 10:34:14 nicm Exp $ */ +/* $OpenBSD: tmux.h,v 1.1462 2026/10/14 12:33:46 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -491,6 +491,7 @@ enum tty_code_code { TTYC_IND, TTYC_INDN, TTYC_INVIS, + TTYC_ISCRL, TTYC_KCBT, TTYC_KCUB1, TTYC_KCUD1, diff --git a/tty-features.c b/tty-features.c index 80af558d0..ee0471b46 100644 --- a/tty-features.c +++ b/tty-features.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tty-features.c,v 1.48 2026/10/12 12:35:03 nicm Exp $ */ +/* $OpenBSD: tty-features.c,v 1.49 2026/10/14 12:33:46 nicm Exp $ */ /* * Copyright (c) 2020 Nicholas Marriott @@ -366,6 +366,17 @@ static const struct tty_feature tty_feature_kittygraphics = { TERM_KITTYGRAPHICS }; +/* Terminal moves images with scroll regions. */ +static const char *const tty_feature_imagescroll_capabilities[] = { + "Iscrl", + NULL +}; +static const struct tty_feature tty_feature_imagescroll = { + "imagescroll", + tty_feature_imagescroll_capabilities, + 0 +}; + /* Terminal supports the OSC 9;4 progress bar. */ static const char *const tty_feature_progressbar_capabilities[] = { "Spb=\\E]9;4;%p1%d;%p2%d\\E\\\\", @@ -396,6 +407,7 @@ static const struct tty_feature *const tty_features[] = { &tty_feature_extkeys, &tty_feature_focus, &tty_feature_ignorefkeys, + &tty_feature_imagescroll, &tty_feature_kittygraphics, &tty_feature_margins, &tty_feature_mouse, @@ -635,6 +647,7 @@ tty_default_features(struct client *c, const char *name, u_int version) "extkeys," "focus," "hyperlinks," + "imagescroll," "margins," "sixel," "usstyle" diff --git a/tty-term.c b/tty-term.c index e34a872b4..cb2a25f40 100644 --- a/tty-term.c +++ b/tty-term.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tty-term.c,v 1.112 2026/10/12 10:39:05 nicm Exp $ */ +/* $OpenBSD: tty-term.c,v 1.113 2026/10/14 12:33:46 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott @@ -113,6 +113,7 @@ static const struct tty_term_code_entry tty_term_codes[] = { [TTYC_IND] = { TTYCODE_STRING, "ind" }, [TTYC_INDN] = { TTYCODE_STRING, "indn" }, [TTYC_INVIS] = { TTYCODE_STRING, "invis" }, + [TTYC_ISCRL] = { TTYCODE_FLAG, "Iscrl" }, [TTYC_KCBT] = { TTYCODE_STRING, "kcbt" }, [TTYC_KCUB1] = { TTYCODE_STRING, "kcub1" }, [TTYC_KCUD1] = { TTYCODE_STRING, "kcud1" }, diff --git a/window-client.c b/window-client.c index 05bb2f801..c9234847f 100644 --- a/window-client.c +++ b/window-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window-client.c,v 1.50 2026/10/12 12:35:03 nicm Exp $ */ +/* $OpenBSD: window-client.c,v 1.51 2026/10/14 12:33:46 nicm Exp $ */ /* * Copyright (c) 2017 Nicholas Marriott @@ -89,19 +89,20 @@ static const char *window_client_info_lines[] = { " #[#{E:tree-mode-border-style},acs]x#[default] " WINDOW_CLIENT_FEATURE(hyperlinks) " " WINDOW_CLIENT_FEATURE(ignorefkeys) " " - WINDOW_CLIENT_FEATURE(kittygraphics) " " - WINDOW_CLIENT_FEATURE(margins), + WINDOW_CLIENT_FEATURE(imagescroll) " " + WINDOW_CLIENT_FEATURE(kittygraphics), " #[#{E:tree-mode-border-style},acs]x#[default] " + WINDOW_CLIENT_FEATURE(margins) " " WINDOW_CLIENT_FEATURE(mouse) " " WINDOW_CLIENT_FEATURE(osc7) " " - WINDOW_CLIENT_FEATURE(overline) " " - WINDOW_CLIENT_FEATURE(progressbar), + WINDOW_CLIENT_FEATURE(overline), " #[#{E:tree-mode-border-style},acs]x#[default] " + WINDOW_CLIENT_FEATURE(progressbar) " " WINDOW_CLIENT_FEATURE(rectfill) " " WINDOW_CLIENT_FEATURE(sixel) " " - WINDOW_CLIENT_FEATURE(strikethrough) " " - WINDOW_CLIENT_FEATURE(sync), + WINDOW_CLIENT_FEATURE(strikethrough), " #[#{E:tree-mode-border-style},acs]x#[default] " + WINDOW_CLIENT_FEATURE(sync) " " WINDOW_CLIENT_FEATURE(title) " " WINDOW_CLIENT_FEATURE(usstyle) " " WINDOW_CLIENT_FEATURE(utf8),