Sync OpenBSD patchset 227:

Add a flags member to the grid_line struct and use it to differentiate lines
wrapped at the screen edge from those terminated by a newline. Then use this
when copying to combine wrapped lines together into one.
This commit is contained in:
Tiago Cunha
2009-08-09 17:32:06 +00:00
parent 37b0bcd7c1
commit 97eb537f38
4 changed files with 51 additions and 25 deletions

View File

@ -1,4 +1,4 @@
/* $Id: screen-write.c,v 1.66 2009-07-30 21:14:04 tcunha Exp $ */
/* $Id: screen-write.c,v 1.67 2009-08-09 17:32:06 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -610,13 +610,20 @@ screen_write_mousemode(struct screen_write_ctx *ctx, int state)
/* Line feed (down with scroll). */
void
screen_write_linefeed(struct screen_write_ctx *ctx)
screen_write_linefeed(struct screen_write_ctx *ctx, int wrapped)
{
struct screen *s = ctx->s;
struct tty_ctx ttyctx;
struct screen *s = ctx->s;
struct grid_line *gl;
struct tty_ctx ttyctx;
screen_write_initctx(ctx, &ttyctx);
gl = &s->grid->linedata[s->grid->hsize + s->cy];
if (wrapped)
gl->flags |= GRID_LINE_WRAPPED;
else
gl->flags &= ~GRID_LINE_WRAPPED;
if (s->cy == s->rlower)
grid_view_scroll_region_up(s->grid, s->rupper, s->rlower);
else if (s->cy < screen_size_y(s) - 1)
@ -782,10 +789,10 @@ screen_write_cell(
insert = 1;
}
/* Check this will fit on the current line; scroll if not. */
/* Check this will fit on the current line and wrap if not. */
if (s->cx > screen_size_x(s) - width) {
screen_write_carriagereturn(ctx);
screen_write_linefeed(ctx);
screen_write_linefeed(ctx, 1);
}
/* Sanity checks. */