=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/screen-write.c,v retrieving revision 1.29 retrieving revision 1.30 diff -c -r1.29 -r1.30 *** src/usr.bin/tmux/screen-write.c 2009/10/12 16:59:55 1.29 --- src/usr.bin/tmux/screen-write.c 2009/10/12 17:19:47 1.30 *************** *** 1,4 **** ! /* $OpenBSD: screen-write.c,v 1.29 2009/10/12 16:59:55 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: screen-write.c,v 1.30 2009/10/12 17:19:47 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 833,848 **** s->mode &= ~MODE_MOUSE; } ! /* Line feed (down with scroll). */ void ! screen_write_linefeed(struct screen_write_ctx *ctx, int wrapped) { 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; --- 833,848 ---- s->mode &= ~MODE_MOUSE; } ! /* ! * Line feed the screen only (don't update the tty). Used for printing single ! * characters, where might want to let the scroll happen naturally. ! */ void ! screen_write_linefeedscreen(struct screen_write_ctx *ctx, int wrapped) { struct screen *s = ctx->s; struct grid_line *gl; gl = &s->grid->linedata[s->grid->hsize + s->cy]; if (wrapped) gl->flags |= GRID_LINE_WRAPPED; *************** *** 853,859 **** --- 853,870 ---- grid_view_scroll_region_up(s->grid, s->rupper, s->rlower); else if (s->cy < screen_size_y(s) - 1) s->cy++; + } + /* Line feed (down with scroll). */ + void + screen_write_linefeed(struct screen_write_ctx *ctx, int wrapped) + { + struct tty_ctx ttyctx; + + screen_write_initctx(ctx, &ttyctx); + + screen_write_linefeedscreen(ctx, wrapped); + tty_write(tty_cmd_linefeed, &ttyctx); } *************** *** 952,957 **** --- 963,969 ---- struct screen_write_ctx *ctx, const struct grid_cell *gc, u_char *udata) { struct screen *s = ctx->s; + struct window_pane *wp = ctx->wp; struct grid *gd = s->grid; struct tty_ctx ttyctx; struct grid_utf8 gu, *tmp_gu; *************** *** 1016,1023 **** /* 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, 1); } /* Sanity checks. */ --- 1028,1043 ---- /* Check this will fit on the current line and wrap if not. */ if (s->cx > screen_size_x(s) - width) { ! /* ! * Don't update the terminal now, just update the screen and ! * leave the cursor to scroll naturally, unless this is only ! * part of the screen width. ! */ ! if (wp->xoff != 0 || wp->sx != screen_size_x(s)) ! screen_write_linefeed(ctx, 1); ! else ! screen_write_linefeedscreen(ctx, 1); ! s->cx = 0; /* carriage return */ } /* Sanity checks. */