aboutsummaryrefslogtreecommitdiff
path: root/status.c
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 /status.c
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.
Diffstat (limited to 'status.c')
-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);