mirror of
https://github.com/tmux/tmux.git
synced 2024-10-31 22:58:49 +00:00
Support insert mode by using insert character to shift the cells before writing
as normal.
This commit is contained in:
parent
52ec9b9ec4
commit
c1a4c0186a
@ -663,6 +663,7 @@ screen_write_cell(
|
|||||||
u_int width, xx, i;
|
u_int width, xx, i;
|
||||||
struct grid_cell tmp_gc, *tmp_gc2;
|
struct grid_cell tmp_gc, *tmp_gc2;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
int insert = 0;
|
||||||
|
|
||||||
/* Ignore padding. */
|
/* Ignore padding. */
|
||||||
if (gc->flags & GRID_FLAG_PADDING)
|
if (gc->flags & GRID_FLAG_PADDING)
|
||||||
@ -714,6 +715,13 @@ screen_write_cell(
|
|||||||
gc = &tmp_gc;
|
gc = &tmp_gc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If in insert mode, make space for the cells. */
|
||||||
|
if (s->mode & MODE_INSERT && s->cx <= screen_size_x(s) - width) {
|
||||||
|
xx = screen_size_x(s) - s->cx - width;
|
||||||
|
grid_move_cells(s->grid, s->cx + width, s->cx, s->cy, xx);
|
||||||
|
insert = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check this will fit on the current line; scroll if not. */
|
/* Check this will fit on the current line; scroll if not. */
|
||||||
if (s->cx > screen_size_x(s) - width) {
|
if (s->cx > screen_size_x(s) - width) {
|
||||||
screen_write_carriagereturn(ctx);
|
screen_write_carriagereturn(ctx);
|
||||||
@ -747,6 +755,8 @@ screen_write_cell(
|
|||||||
s->cx += width;
|
s->cx += width;
|
||||||
|
|
||||||
/* Draw to the screen if necessary. */
|
/* Draw to the screen if necessary. */
|
||||||
|
if (insert)
|
||||||
|
tty_write_cmd(ctx->wp, TTY_INSERTCHARACTER, width);
|
||||||
if (screen_check_selection(s, s->cx - width, s->cy)) {
|
if (screen_check_selection(s, s->cx - width, s->cy)) {
|
||||||
s->sel.cell.data = gc->data;
|
s->sel.cell.data = gc->data;
|
||||||
tty_write_cmd(ctx->wp, TTY_CELL, &s->sel.cell, &gu);
|
tty_write_cmd(ctx->wp, TTY_CELL, &s->sel.cell, &gu);
|
||||||
|
Loading…
Reference in New Issue
Block a user