From: nicm Date: Tue, 8 Oct 2024 06:29:44 +0000 (+0000) Subject: Put the prompt cursor attributes into the status line screen and use X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=2b436e6ef95997e52d3d237ce79a332330212e81;p=openbsd Put the prompt cursor attributes into the status line screen and use that rather than updating the current screen (since there might not be one). --- diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c index 65cf1f9bc52..75c2f1824a1 100644 --- a/usr.bin/tmux/server-client.c +++ b/usr.bin/tmux/server-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.413 2024/10/07 12:58:36 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.414 2024/10/08 06:29:44 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -2458,8 +2458,10 @@ server_client_reset_state(struct client *c) if (c->overlay_draw != NULL) { if (c->overlay_mode != NULL) s = c->overlay_mode(c, c->overlay_data, &cx, &cy); - } else + } else if (c->prompt_string == NULL) s = wp->screen; + else + s = c->status.active; if (s != NULL) mode = s->mode; if (log_get_level() != 0) { @@ -2484,37 +2486,21 @@ server_client_reset_state(struct client *c) cy = tty->sy - n; } cx = c->prompt_cursor; - - n = options_get_number(oo, "prompt-cursor-colour"); - s->default_ccolour = n; - n = options_get_number(oo, "prompt-cursor-style"); - screen_set_cursor_style(n, &s->default_cstyle, - &s->default_mode); - } else { - n = options_get_number(wp->options, "cursor-colour"); - s->default_ccolour = n; - n = options_get_number(wp->options, "cursor-style"); - screen_set_cursor_style(n, &s->default_cstyle, - &s->default_mode); - - if (c->overlay_draw == NULL) { - cursor = 0; - tty_window_offset(tty, &ox, &oy, &sx, &sy); - if (wp->xoff + s->cx >= ox && - wp->xoff + s->cx <= ox + sx && - wp->yoff + s->cy >= oy && - wp->yoff + s->cy <= oy + sy) { - cursor = 1; - - cx = wp->xoff + s->cx - ox; - cy = wp->yoff + s->cy - oy; - - if (status_at_line(c) == 0) - cy += status_line_size(c); - } - if (!cursor) - mode &= ~MODE_CURSOR; + } else if (c->overlay_draw == NULL) { + cursor = 0; + tty_window_offset(tty, &ox, &oy, &sx, &sy); + if (wp->xoff + s->cx >= ox && wp->xoff + s->cx <= ox + sx && + wp->yoff + s->cy >= oy && wp->yoff + s->cy <= oy + sy) { + cursor = 1; + + cx = wp->xoff + s->cx - ox; + cy = wp->yoff + s->cy - oy; + + if (status_at_line(c) == 0) + cy += status_line_size(c); } + if (!cursor) + mode &= ~MODE_CURSOR; } log_debug("%s: cursor to %u,%u", __func__, cx, cy); tty_cursor(tty, cx, cy); diff --git a/usr.bin/tmux/status.c b/usr.bin/tmux/status.c index 5b6483216d1..9a2f3a2126a 100644 --- a/usr.bin/tmux/status.c +++ b/usr.bin/tmux/status.c @@ -1,4 +1,4 @@ -/* $OpenBSD: status.c,v 1.247 2024/10/07 12:58:36 nicm Exp $ */ +/* $OpenBSD: status.c,v 1.248 2024/10/08 06:29:44 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -736,7 +736,7 @@ status_prompt_redraw(struct client *c) struct screen_write_ctx ctx; struct session *s = c->session; struct screen old_screen; - u_int i, lines, offset, left, start, width; + u_int i, lines, offset, left, start, width, n; u_int pcursor, pwidth, promptline; struct grid_cell gc; struct format_tree *ft; @@ -750,6 +750,12 @@ status_prompt_redraw(struct client *c) lines = 1; screen_init(sl->active, c->tty.sx, lines, 0); + n = options_get_number(s->options, "prompt-cursor-colour"); + sl->active->default_ccolour = n; + n = options_get_number(s->options, "prompt-cursor-style"); + screen_set_cursor_style(n, &sl->active->default_cstyle, + &sl->active->default_mode); + promptline = status_prompt_line_at(c); if (promptline > lines - 1) promptline = lines - 1;