From 4b2513c5e1587319ec14ec511a01cfbad331ac79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Wed, 14 Jun 2017 22:46:59 +0200 Subject: view: add functions to save/restore arbitrary ranges --- view.c | 23 +++++++++++++++++++++++ view.h | 3 +++ 2 files changed, 26 insertions(+) diff --git a/view.c b/view.c index 206cb42..178fb31 100644 --- a/view.c +++ b/view.c @@ -1228,6 +1228,29 @@ void view_selections_save(Selection *s) { s->region.anchor = s->anchor; } +Filerange view_regions_restore(View *view, SelectionRegion *s) { + Text *txt = view->text; + size_t anchor = text_mark_get(txt, s->anchor); + size_t cursor = text_mark_get(txt, s->cursor); + Filerange sel = text_range_new(anchor, cursor); + if (text_range_valid(&sel)) + sel.end = text_char_next(txt, sel.end); + return sel; +} + +bool view_regions_save(View *view, Filerange *r, SelectionRegion *s) { + Text *txt = view->text; + size_t max = text_size(txt); + if (!text_range_valid(r) || r->start >= max) + return false; + size_t end = r->end > max ? max : r->end; + if (r->start != end) + end = text_char_prev(txt, end); + s->anchor = text_mark_set(txt, r->start); + s->cursor = text_mark_set(txt, end); + return true; +} + bool view_selections_restore(Selection *s) { Text *txt = s->view->text; size_t pos = text_mark_get(txt, s->region.cursor); diff --git a/view.h b/view.h index 39f8ec6..9a1fb76 100644 --- a/view.h +++ b/view.h @@ -355,6 +355,9 @@ void view_selections_save(Selection*); * @endrst */ bool view_selections_restore(Selection*); + +Filerange view_regions_restore(View*, SelectionRegion*); +bool view_regions_save(View*, Filerange*, SelectionRegion*); /** * @} * @defgroup view_style -- cgit v1.2.3