Leave the hardware cursor at the position of the selected line in choose

modes and current editing position and at the command prompt. It is
invisible but this is helpful for people using screen readers. GitHub
issue 2970.
This commit is contained in:
nicm 2021-11-15 10:58:13 +00:00
parent cb8a0d83fb
commit b55f0ac6b9
4 changed files with 21 additions and 6 deletions

View File

@ -736,10 +736,8 @@ mode_tree_draw(struct mode_tree_data *mtd)
}
sy = screen_size_y(s);
if (!mtd->preview || sy <= 4 || h <= 4 || sy - h <= 4 || w <= 4) {
screen_write_stop(&ctx);
return;
}
if (!mtd->preview || sy <= 4 || h <= 4 || sy - h <= 4 || w <= 4)
goto done;
line = &mtd->line_list[mtd->current];
mti = line->item;
@ -783,6 +781,8 @@ mode_tree_draw(struct mode_tree_data *mtd)
mtd->drawcb(mtd->modedata, mti->itemdata, &ctx, box_x, box_y);
}
done:
screen_write_cursormove(&ctx, 0, mtd->current - mtd->offset, 0);
screen_write_stop(&ctx);
}

View File

@ -1706,7 +1706,7 @@ server_client_reset_state(struct client *c)
struct window_pane *wp = server_client_get_pane(c), *loop;
struct screen *s = NULL;
struct options *oo = c->session->options;
int mode = 0, cursor, flags;
int mode = 0, cursor, flags, n;
u_int cx = 0, cy = 0, ox, oy, sx, sy;
if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED))
@ -1734,7 +1734,20 @@ server_client_reset_state(struct client *c)
tty_margin_off(tty);
/* Move cursor to pane cursor and offset. */
if (c->overlay_draw == NULL) {
if (c->prompt_string != NULL) {
n = options_get_number(c->session->options, "status-position");
if (n == 0)
cy = 0;
else {
n = status_line_size(c);
if (n == 0)
cy = tty->sy - 1;
else
cy = tty->sy - n;
}
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 &&

View File

@ -748,6 +748,7 @@ status_prompt_redraw(struct client *c)
offset = 0;
if (pwidth > left)
pwidth = left;
c->prompt_cursor = start + c->prompt_index - offset;
width = 0;
for (i = 0; c->prompt_buffer[i].size != 0; i++) {

1
tmux.h
View File

@ -1758,6 +1758,7 @@ struct client {
#define PROMPT_KEY 0x10
int prompt_flags;
enum prompt_type prompt_type;
int prompt_cursor;
struct session *session;
struct session *last_session;