mirror of
https://github.com/tmux/tmux.git
synced 2024-11-01 07:08:49 +00:00
Add prompt-cursor-colour and prompt-cursor-style to set the style of the
cursor in the command prompt and remove the emulated cursor, from Alexander Arch in GitHub issue 4170.
This commit is contained in:
parent
a3dea81b49
commit
735082b7c2
@ -208,6 +208,7 @@ const struct options_name_map options_other_names[] = {
|
|||||||
{ "display-panes-active-color", "display-panes-active-colour" },
|
{ "display-panes-active-color", "display-panes-active-colour" },
|
||||||
{ "clock-mode-color", "clock-mode-colour" },
|
{ "clock-mode-color", "clock-mode-colour" },
|
||||||
{ "cursor-color", "cursor-colour" },
|
{ "cursor-color", "cursor-colour" },
|
||||||
|
{ "prompt-cursor-color", "prompt-cursor-colour" },
|
||||||
{ "pane-colors", "pane-colours" },
|
{ "pane-colors", "pane-colours" },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
@ -832,6 +833,21 @@ const struct options_table_entry options_table[] = {
|
|||||||
.text = "Style of the status line."
|
.text = "Style of the status line."
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ .name = "prompt-cursor-colour",
|
||||||
|
.type = OPTIONS_TABLE_COLOUR,
|
||||||
|
.scope = OPTIONS_TABLE_SESSION,
|
||||||
|
.default_num = 6,
|
||||||
|
.text = "Colour of the cursor when in the command prompt."
|
||||||
|
},
|
||||||
|
|
||||||
|
{ .name = "prompt-cursor-style",
|
||||||
|
.type = OPTIONS_TABLE_CHOICE,
|
||||||
|
.scope = OPTIONS_TABLE_SESSION,
|
||||||
|
.choices = options_table_cursor_style_list,
|
||||||
|
.default_num = 0,
|
||||||
|
.text = "Style of the cursor when in the command prompt."
|
||||||
|
},
|
||||||
|
|
||||||
{ .name = "update-environment",
|
{ .name = "update-environment",
|
||||||
.type = OPTIONS_TABLE_STRING,
|
.type = OPTIONS_TABLE_STRING,
|
||||||
.scope = OPTIONS_TABLE_SESSION,
|
.scope = OPTIONS_TABLE_SESSION,
|
||||||
|
@ -2473,7 +2473,7 @@ server_client_reset_state(struct client *c)
|
|||||||
|
|
||||||
/* Move cursor to pane cursor and offset. */
|
/* Move cursor to pane cursor and offset. */
|
||||||
if (c->prompt_string != NULL) {
|
if (c->prompt_string != NULL) {
|
||||||
n = options_get_number(c->session->options, "status-position");
|
n = options_get_number(oo, "status-position");
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
cy = 0;
|
cy = 0;
|
||||||
else {
|
else {
|
||||||
@ -2484,22 +2484,37 @@ server_client_reset_state(struct client *c)
|
|||||||
cy = tty->sy - n;
|
cy = tty->sy - n;
|
||||||
}
|
}
|
||||||
cx = c->prompt_cursor;
|
cx = c->prompt_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;
|
n = options_get_number(oo, "prompt-cursor-colour");
|
||||||
cy = wp->yoff + s->cy - oy;
|
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 (status_at_line(c) == 0)
|
if (c->overlay_draw == NULL) {
|
||||||
cy += status_line_size(c);
|
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;
|
||||||
}
|
}
|
||||||
if (!cursor)
|
|
||||||
mode &= ~MODE_CURSOR;
|
|
||||||
}
|
}
|
||||||
log_debug("%s: cursor to %u,%u", __func__, cx, cy);
|
log_debug("%s: cursor to %u,%u", __func__, cx, cy);
|
||||||
tty_cursor(tty, cx, cy);
|
tty_cursor(tty, cx, cy);
|
||||||
|
18
status.c
18
status.c
@ -660,7 +660,7 @@ status_prompt_set(struct client *c, struct cmd_find_state *fs,
|
|||||||
c->prompt_mode = PROMPT_ENTRY;
|
c->prompt_mode = PROMPT_ENTRY;
|
||||||
|
|
||||||
if (~flags & PROMPT_INCREMENTAL)
|
if (~flags & PROMPT_INCREMENTAL)
|
||||||
c->tty.flags |= (TTY_NOCURSOR|TTY_FREEZE);
|
c->tty.flags |= TTY_FREEZE;
|
||||||
c->flags |= CLIENT_REDRAWSTATUS;
|
c->flags |= CLIENT_REDRAWSTATUS;
|
||||||
|
|
||||||
if (flags & PROMPT_INCREMENTAL)
|
if (flags & PROMPT_INCREMENTAL)
|
||||||
@ -738,7 +738,7 @@ status_prompt_redraw(struct client *c)
|
|||||||
struct screen old_screen;
|
struct screen old_screen;
|
||||||
u_int i, lines, offset, left, start, width;
|
u_int i, lines, offset, left, start, width;
|
||||||
u_int pcursor, pwidth, promptline;
|
u_int pcursor, pwidth, promptline;
|
||||||
struct grid_cell gc, cursorgc;
|
struct grid_cell gc;
|
||||||
struct format_tree *ft;
|
struct format_tree *ft;
|
||||||
|
|
||||||
if (c->tty.sx == 0 || c->tty.sy == 0)
|
if (c->tty.sx == 0 || c->tty.sy == 0)
|
||||||
@ -761,9 +761,6 @@ status_prompt_redraw(struct client *c)
|
|||||||
style_apply(&gc, s->options, "message-style", ft);
|
style_apply(&gc, s->options, "message-style", ft);
|
||||||
format_free(ft);
|
format_free(ft);
|
||||||
|
|
||||||
memcpy(&cursorgc, &gc, sizeof cursorgc);
|
|
||||||
cursorgc.attr ^= GRID_ATTR_REVERSE;
|
|
||||||
|
|
||||||
start = format_width(c->prompt_string);
|
start = format_width(c->prompt_string);
|
||||||
if (start > c->tty.sx)
|
if (start > c->tty.sx)
|
||||||
start = c->tty.sx;
|
start = c->tty.sx;
|
||||||
@ -808,16 +805,9 @@ status_prompt_redraw(struct client *c)
|
|||||||
if (width > offset + pwidth)
|
if (width > offset + pwidth)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (i != c->prompt_index) {
|
utf8_copy(&gc.data, &c->prompt_buffer[i]);
|
||||||
utf8_copy(&gc.data, &c->prompt_buffer[i]);
|
screen_write_cell(&ctx, &gc);
|
||||||
screen_write_cell(&ctx, &gc);
|
|
||||||
} else {
|
|
||||||
utf8_copy(&cursorgc.data, &c->prompt_buffer[i]);
|
|
||||||
screen_write_cell(&ctx, &cursorgc);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sl->active->cx < screen_size_x(sl->active) && c->prompt_index >= i)
|
|
||||||
screen_write_putc(&ctx, &cursorgc, ' ');
|
|
||||||
|
|
||||||
finished:
|
finished:
|
||||||
screen_write_stop(&ctx);
|
screen_write_stop(&ctx);
|
||||||
|
7
tmux.1
7
tmux.1
@ -4550,6 +4550,13 @@ waits after
|
|||||||
.Ic prefix
|
.Ic prefix
|
||||||
is input before dismissing it.
|
is input before dismissing it.
|
||||||
Can be set to zero to disable any timeout.
|
Can be set to zero to disable any timeout.
|
||||||
|
.It Ic prompt-cursor-colour Ar colour
|
||||||
|
Set the colour of the cursor in the command prompt.
|
||||||
|
.It Ic prompt-cursor-style Ar style
|
||||||
|
Set the style of the cursor in the command prompt.
|
||||||
|
See the
|
||||||
|
.Ic cursor-style
|
||||||
|
options for available styles.
|
||||||
.It Xo Ic renumber-windows
|
.It Xo Ic renumber-windows
|
||||||
.Op Ic on | off
|
.Op Ic on | off
|
||||||
.Xc
|
.Xc
|
||||||
|
Loading…
Reference in New Issue
Block a user