diff options
| -rw-r--r-- | text.c | 6 | ||||
| -rw-r--r-- | text.h | 1 | ||||
| -rw-r--r-- | vis.c | 9 |
3 files changed, 11 insertions, 5 deletions
@@ -1145,6 +1145,12 @@ bool text_delete(Text *txt, size_t pos, size_t len) { return true; } +bool text_delete_range(Text *txt, Filerange *r) { + if (!text_range_valid(r)) + return false; + return text_delete(txt, r->start, text_range_size(r)); +} + /* preserve the current text content such that it can be restored by * means of undo/redo operations */ void text_snapshot(Text *txt) { @@ -41,6 +41,7 @@ struct stat text_stat(Text*); bool text_insert(Text*, size_t pos, const char *data, size_t len); /* delete `len' bytes starting from `pos' */ bool text_delete(Text*, size_t pos, size_t len); +bool text_delete_range(Text*, Filerange*); /* mark the current text state, such that it can be {un,re}done */ void text_snapshot(Text*); /* undo/redo to the last snapshotted state. returns the position where @@ -481,10 +481,9 @@ static bool exec_command(char type, const char *cmdline); static size_t op_delete(OperatorContext *c) { Text *txt = vis->win->file->text; - size_t len = c->range.end - c->range.start; c->reg->linewise = c->linewise; register_put(c->reg, txt, &c->range); - text_delete(txt, c->range.start, len); + text_delete_range(txt, &c->range); size_t pos = c->range.start; if (c->linewise && pos == text_size(txt)) pos = text_line_begin(txt, text_line_prev(txt, pos)); @@ -602,7 +601,7 @@ static size_t op_shift_left(OperatorContext *c) { static size_t op_case_change(OperatorContext *c) { Text *txt = vis->win->file->text; - size_t len = c->range.end - c->range.start; + size_t len = text_range_size(&c->range); char *buf = malloc(len); if (!buf) return c->pos; @@ -1885,7 +1884,7 @@ static bool cmd_read(Filerange *range, enum CmdOpt opt, const char *argv[]) { bool ret = cmd_filter(range, opt, (const char*[]){ argv[0], "sh", "-c", cmd, NULL}); if (ret) - text_delete(vis->win->file->text, delete.start, delete.end - delete.start); + text_delete_range(vis->win->file->text, &delete); return ret; } @@ -2167,7 +2166,7 @@ static bool cmd_filter(Filerange *range, enum CmdOpt opt, const char *argv[]) { close(perr[0]); if (waitpid(pid, &status, 0) == pid && status == 0) { - text_delete(text, rout.start, rout.end - rout.start); + text_delete_range(text, &rout); text_snapshot(text); } else { /* make sure we have somehting to undo */ |
