The branch, master has been updated via a6c4c2cca0d44e0cec9d4a0cc041290a263826fb (commit) from ba3b8ccc1d994ec535721d71b400c3e78ee5ec25 (commit)
- Log ----------------------------------------------------------------- commit a6c4c2cca0d44e0cec9d4a0cc041290a263826fb Author: Nicholas Marriott <nicholas.marri...@gmail.com> Commit: Nicholas Marriott <nicholas.marri...@gmail.com> Implement DECAWM (SM/RM 7) using existing MODE_WRAP flag. --- TODO | 1 - input.c | 6 ++++++ screen-write.c | 23 +++++++++++++++-------- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/TODO b/TODO index aadc5af..1401778 100644 --- a/TODO +++ b/TODO @@ -171,7 +171,6 @@ TERMINAL ISSUES - support for bce - use screen-256color when started on 256 colour terminal?? - if-shell/run-shell should block further command execution in the same command -- wrap/no wrap esc seq DEC CSI ? 7 h/l * We need a tmux terminfo entry to document the extensions we are using in upstream terminfo. Must NOT change (only add or remove) anything from TERM=screen so we can fallback! diff --git a/input.c b/input.c index c4e19c0..4cf90ec 100644 --- a/input.c +++ b/input.c @@ -1248,6 +1248,9 @@ input_csi_dispatch(struct input_ctx *ictx) screen_write_cursormove(&ictx->ctx, 0, 0); screen_write_clearscreen(&ictx->ctx); break; + case 7: /* DECAWM */ + screen_write_mode_clear(&ictx->ctx, MODE_WRAP); + break; case 25: /* TCEM */ screen_write_mode_clear(&ictx->ctx, MODE_CURSOR); break; @@ -1305,6 +1308,9 @@ input_csi_dispatch(struct input_ctx *ictx) screen_write_cursormove(&ictx->ctx, 0, 0); screen_write_clearscreen(&ictx->ctx); break; + case 7: /* DECAWM */ + screen_write_mode_set(&ictx->ctx, MODE_WRAP); + break; case 25: /* TCEM */ screen_write_mode_set(&ictx->ctx, MODE_CURSOR); break; diff --git a/screen-write.c b/screen-write.c index 59d91fd..a390dad 100644 --- a/screen-write.c +++ b/screen-write.c @@ -979,10 +979,10 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) struct screen *s = ctx->s; struct grid *gd = s->grid; struct tty_ctx ttyctx; - u_int width, xx; + u_int width, xx, last; struct grid_cell tmp_gc, *tmp_gcp; struct utf8_data ud; - int insert = 0; + int insert; /* Ignore padding. */ if (gc->flags & GRID_FLAG_PADDING) @@ -1020,7 +1020,8 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) xx = screen_size_x(s) - s->cx - width; grid_move_cells(s->grid, s->cx + width, s->cx, s->cy, xx); insert = 1; - } + } else + insert = 0; /* Check this will fit on the current line and wrap if not. */ if ((s->mode & MODE_WRAP) && s->cx > screen_size_x(s) - width) { @@ -1028,9 +1029,8 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) s->cx = 0; /* carriage return */ } - /* Sanity checks. */ - if (((s->mode & MODE_WRAP) && s->cx > screen_size_x(s) - width) - || s->cy > screen_size_y(s) - 1) + /* Sanity check cursor position. */ + if (s->cx > screen_size_x(s) - width || s->cy > screen_size_y(s) - 1) return; /* Handle overwriting of UTF-8 characters. */ @@ -1049,8 +1049,15 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) /* Set the cell. */ grid_view_set_cell(gd, s->cx, s->cy, gc); - /* Move the cursor. */ - s->cx += width; + /* + * Move the cursor. If not wrapping, stick at the last character and + * replace it. + */ + last = !!(s->mode & MODE_WRAP); + if (s->cx <= screen_size_x(s) - last - width) + s->cx += width; + else + s->cx = screen_size_x(s) - last; /* Draw to the screen if necessary. */ if (insert) { ----------------------------------------------------------------------- Summary of changes: TODO | 1 - input.c | 6 ++++++ screen-write.c | 23 +++++++++++++++-------- 3 files changed, 21 insertions(+), 9 deletions(-) hooks/post-receive -- tmux ------------------------------------------------------------------------------ The Go Parallel Website, sponsored by Intel - in partnership with Geeknet, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials, tech docs, whitepapers, evaluation guides, and opinion stories. Check out the most recent posts - join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ tmux-cvs mailing list tmux-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-cvs