summaryrefslogtreecommitdiffstats
path: root/status.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-07-26 21:13:47 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-07-26 21:13:47 +0000
commit55d8c01c339db6dd66ed85ce3da5273632da6ca5 (patch)
treeb8d02cbddb422ffcf1649751ef1f24fe9261ae14 /status.c
parent6b3b852ebcaa61d3a03b918370939cfd6af8c191 (diff)
Calculate the space available for the prompt buffer and the cursor position
correctly, and make it work when the screen is not wide enough. Noticed by Kalle Olavi Niemitalo.
Diffstat (limited to 'status.c')
-rw-r--r--status.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/status.c b/status.c
index 46d05fd5..24d91204 100644
--- a/status.c
+++ b/status.c
@@ -645,7 +645,7 @@ status_prompt_redraw(struct client *c)
struct screen_write_ctx ctx;
struct session *s = c->session;
struct screen old_status;
- size_t i, size, left, len, offset, n;
+ size_t i, size, left, len, off, n;
char ch;
struct grid_cell gc;
@@ -653,7 +653,7 @@ status_prompt_redraw(struct client *c)
return (0);
memcpy(&old_status, &c->status, sizeof old_status);
screen_init(&c->status, c->tty.sx, 1, 0);
- offset = 0;
+ off = 0;
len = strlen(c->prompt_string);
if (len > c->tty.sx)
@@ -674,7 +674,7 @@ status_prompt_redraw(struct client *c)
if (c->prompt_index < left)
size = strlen(c->prompt_buffer);
else {
- offset = c->prompt_index - left - 1;
+ off = c->prompt_index - left + 1;
if (c->prompt_index == strlen(c->prompt_buffer))
left--;
size = left;
@@ -687,27 +687,27 @@ status_prompt_redraw(struct client *c)
screen_write_putc(&ctx, &gc, '*');
} else {
screen_write_puts(&ctx, &gc,
- "%.*s", (int) left, c->prompt_buffer + offset);
+ "%.*s", (int) left, c->prompt_buffer + off);
}
for (i = len + size; i < c->tty.sx; i++)
screen_write_putc(&ctx, &gc, ' ');
- }
- /* Draw a fake cursor. */
- screen_write_cursormove(&ctx, len + c->prompt_index - offset, 0);
- if (c->prompt_index == strlen(c->prompt_buffer))
- ch = ' ';
- else {
- if (c->prompt_flags & PROMPT_HIDDEN)
- ch = '*';
- else
- ch = c->prompt_buffer[c->prompt_index];
+ /* Draw a fake cursor. */
+ screen_write_cursormove(&ctx, len + c->prompt_index - off, 0);
+ if (c->prompt_index == strlen(c->prompt_buffer))
+ ch = ' ';
+ else {
+ if (c->prompt_flags & PROMPT_HIDDEN)
+ ch = '*';
+ else
+ ch = c->prompt_buffer[c->prompt_index];
+ }
+ if (ch == '\0')
+ ch = ' ';
+ gc.attr ^= GRID_ATTR_REVERSE;
+ screen_write_putc(&ctx, &gc, ch);
}
- if (ch == '\0')
- ch = ' ';
- gc.attr ^= GRID_ATTR_REVERSE;
- screen_write_putc(&ctx, &gc, ch);
screen_write_stop(&ctx);