aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Cunha <tcunha@gmx.com>2009-07-28 22:32:15 +0000
committerTiago Cunha <tcunha@gmx.com>2009-07-28 22:32:15 +0000
commit2aa4d473121520167962756c5323865c73607186 (patch)
tree71011824404fb19e21153e5e3810c706c6f88e0f
parent2dda19798023102cc6cd41a3641645d6eba78795 (diff)
downloadrtmux-2aa4d473121520167962756c5323865c73607186.tar.gz
rtmux-2aa4d473121520167962756c5323865c73607186.tar.bz2
rtmux-2aa4d473121520167962756c5323865c73607186.zip
Sync OpenBSD patchset 183:
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.
-rw-r--r--status.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/status.c b/status.c
index 35fe5b17..7bb550ad 100644
--- a/status.c
+++ b/status.c
@@ -1,4 +1,4 @@
-/* $Id: status.c,v 1.101 2009-07-22 17:31:20 tcunha Exp $ */
+/* $Id: status.c,v 1.102 2009-07-28 22:32:15 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -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);