aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mode-tree.c8
-rw-r--r--server-client.c17
-rw-r--r--status.c1
-rw-r--r--tmux.h1
4 files changed, 21 insertions, 6 deletions
diff --git a/mode-tree.c b/mode-tree.c
index 85027caf..21a73ef2 100644
--- a/mode-tree.c
+++ b/mode-tree.c
@@ -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);
}
diff --git a/server-client.c b/server-client.c
index 7cea32c0..072c5589 100644
--- a/server-client.c
+++ b/server-client.c
@@ -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 &&
diff --git a/status.c b/status.c
index d499eab8..bb57b3d6 100644
--- a/status.c
+++ b/status.c
@@ -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++) {
diff --git a/tmux.h b/tmux.h
index 07e649f2..dfea1583 100644
--- a/tmux.h
+++ b/tmux.h
@@ -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;