From 36abe5af5738381f21f556ce26a1e80bd5eacfe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Sat, 8 Aug 2015 10:40:59 +0200 Subject: text: introduce helper function text_delete_range --- text.c | 6 ++++++ text.h | 1 + vis.c | 9 ++++----- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/text.c b/text.c index 26b851d..1c21e9c 100644 --- a/text.c +++ b/text.c @@ -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) { diff --git a/text.h b/text.h index 217c801..7d7f19d 100644 --- a/text.h +++ b/text.h @@ -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 diff --git a/vis.c b/vis.c index 7d3ad7c..35b2d22 100644 --- a/vis.c +++ b/vis.c @@ -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 */ -- cgit v1.2.3