version 1.16, 2009/07/21 18:40:30 |
version 1.17, 2009/07/26 21:13:47 |
|
|
struct screen_write_ctx ctx; |
struct screen_write_ctx ctx; |
struct session *s = c->session; |
struct session *s = c->session; |
struct screen old_status; |
struct screen old_status; |
size_t i, size, left, len, offset, n; |
size_t i, size, left, len, off, n; |
char ch; |
char ch; |
struct grid_cell gc; |
struct grid_cell gc; |
|
|
|
|
return (0); |
return (0); |
memcpy(&old_status, &c->status, sizeof old_status); |
memcpy(&old_status, &c->status, sizeof old_status); |
screen_init(&c->status, c->tty.sx, 1, 0); |
screen_init(&c->status, c->tty.sx, 1, 0); |
offset = 0; |
off = 0; |
|
|
len = strlen(c->prompt_string); |
len = strlen(c->prompt_string); |
if (len > c->tty.sx) |
if (len > c->tty.sx) |
|
|
if (c->prompt_index < left) |
if (c->prompt_index < left) |
size = strlen(c->prompt_buffer); |
size = strlen(c->prompt_buffer); |
else { |
else { |
offset = c->prompt_index - left - 1; |
off = c->prompt_index - left + 1; |
if (c->prompt_index == strlen(c->prompt_buffer)) |
if (c->prompt_index == strlen(c->prompt_buffer)) |
left--; |
left--; |
size = left; |
size = left; |
|
|
screen_write_putc(&ctx, &gc, '*'); |
screen_write_putc(&ctx, &gc, '*'); |
} else { |
} else { |
screen_write_puts(&ctx, &gc, |
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++) |
for (i = len + size; i < c->tty.sx; i++) |
screen_write_putc(&ctx, &gc, ' '); |
screen_write_putc(&ctx, &gc, ' '); |
} |
|
|
|
/* Draw a fake cursor. */ |
/* Draw a fake cursor. */ |
screen_write_cursormove(&ctx, len + c->prompt_index - offset, 0); |
screen_write_cursormove(&ctx, len + c->prompt_index - off, 0); |
if (c->prompt_index == strlen(c->prompt_buffer)) |
if (c->prompt_index == strlen(c->prompt_buffer)) |
ch = ' '; |
ch = ' '; |
else { |
else { |
if (c->prompt_flags & PROMPT_HIDDEN) |
if (c->prompt_flags & PROMPT_HIDDEN) |
ch = '*'; |
ch = '*'; |
else |
else |
ch = c->prompt_buffer[c->prompt_index]; |
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); |
screen_write_stop(&ctx); |
|
|