aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--view.c23
-rw-r--r--view.h3
2 files changed, 26 insertions, 0 deletions
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