From f101762d1b357426834d062f9b97a8c5effc20b3 Mon Sep 17 00:00:00 2001
From: nicm <nicm>
Date: Fri, 21 Mar 2025 14:04:26 +0000
Subject: [PATCH] Fix mouse_hyperlink format in copy mode. From someone in
 GitHub issue 4418.

---
 format.c      |  6 ++++++
 tmux.h        |  1 +
 window-copy.c | 10 ++++++++++
 3 files changed, 17 insertions(+)

diff --git a/format.c b/format.c
index db2bcd8a..13e7f149 100644
--- a/format.c
+++ b/format.c
@@ -1173,6 +1173,12 @@ format_cb_mouse_hyperlink(struct format_tree *ft)
 		return (NULL);
 	if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0)
 		return (NULL);
+
+	if (!TAILQ_EMPTY(&wp->modes)) {
+		if (window_pane_mode(wp) != WINDOW_PANE_NO_MODE)
+			return (window_copy_get_hyperlink(wp, x, y));
+		return (NULL);
+	}
 	gd = wp->base.grid;
 	return (format_grid_hyperlink(gd, x, gd->hsize + y, wp->screen));
 }
diff --git a/tmux.h b/tmux.h
index 35577ae0..fcb064dd 100644
--- a/tmux.h
+++ b/tmux.h
@@ -3338,6 +3338,7 @@ char		*window_copy_get_word(struct window_pane *, u_int, u_int);
 char		*window_copy_get_line(struct window_pane *, u_int);
 int		 window_copy_get_current_offset(struct window_pane *, u_int *,
 		     u_int *);
+char		*window_copy_get_hyperlink(struct window_pane *, u_int, u_int);
 
 /* window-option.c */
 extern const struct window_mode window_customize_mode;
diff --git a/window-copy.c b/window-copy.c
index 3a4f59bb..1dd12e45 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -884,6 +884,16 @@ window_copy_get_line(struct window_pane *wp, u_int y)
 	return (format_grid_line(gd, gd->hsize + y));
 }
 
+char *
+window_copy_get_hyperlink(struct window_pane *wp, u_int x, u_int y)
+{
+	struct window_mode_entry	*wme = TAILQ_FIRST(&wp->modes);
+	struct window_copy_mode_data	*data = wme->data;
+	struct grid			*gd = data->screen.grid;
+
+	return (format_grid_hyperlink(gd, x, gd->hsize + y, wp->screen));
+}
+
 static void *
 window_copy_cursor_hyperlink_cb(struct format_tree *ft)
 {