]> git.neil.brown.name Git - edlib.git/commitdiff
Introduce vmark_new to avoid direct acess to doc_new_mark
authorNeilBrown <neil@brown.name>
Thu, 10 Dec 2015 04:11:14 +0000 (15:11 +1100)
committerNeilBrown <neil@brown.name>
Thu, 10 Dec 2015 04:11:14 +0000 (15:11 +1100)
Signed-off-by: NeilBrown <neil@brown.name>
core-doc.c
core-mark.c
core.h
lib-line-count.c

index c1f9c84d33c34e58aaefa02b757dd544509cdd37..bd3bb81b290f9ea4a303b4c01d804b85098140e7 100644 (file)
@@ -460,9 +460,11 @@ DEF_CMD(doc_handle)
                struct mark *m, *m2;
                m = do_vmark_first(dd->doc, ci->numeric);
                m2 = do_vmark_last(dd->doc, ci->numeric);
-               if (ci->extra && dd->point)
+               if (ci->extra == 1 && dd->point)
                        m2 = do_vmark_at_point(dd->doc, dd->point,
                                               ci->numeric);
+               if (ci->extra == 2)
+                       m2 = doc_new_mark(dd->doc, ci->numeric);
                return comm_call7(ci->comm2, "callback:vmark", ci->focus,
                                  0, m, NULL, 0, NULL, m2);
        }
index d17d2d8cf7e1686aa917dc024c53624e8a6b8a44..0607696bfda2679c813ebc0b84064053276b8e20 100644 (file)
@@ -861,7 +861,7 @@ DEF_CMD(take_marks)
 }
 
 static int vmark_get(struct pane *p, int view,
-                    struct mark **first, struct mark **last, struct mark **point)
+                    struct mark **first, struct mark **last, struct mark **point, struct mark **new)
 {
        struct cmd_info ci = {0};
        struct call_return cr;
@@ -874,12 +874,16 @@ static int vmark_get(struct pane *p, int view,
        ci.comm2 = &cr.c;
        if (point)
                ci.extra = 1;
+       else if (new)
+               ci.extra = 2;
        if (key_handle_focus(&ci) == 0)
                return 0;
        if (first)
                *first = cr.m;
        if (point)
                *point = cr.m2;
+       else if (new)
+               *new = cr.m2;
        else if (last)
                *last = cr.m2;
        return 1;
@@ -888,7 +892,7 @@ static int vmark_get(struct pane *p, int view,
 struct mark *vmark_first(struct pane *p, int view)
 {
        struct mark *first = NULL;
-       if (vmark_get(p, view, &first, NULL, NULL) == 0)
+       if (vmark_get(p, view, &first, NULL, NULL, NULL) == 0)
                return 0;
        return first;
 }
@@ -896,7 +900,7 @@ struct mark *vmark_first(struct pane *p, int view)
 struct mark *vmark_last(struct pane *p, int view)
 {
        struct mark *last = NULL;
-       if (vmark_get(p, view, NULL, &last, NULL) == 0)
+       if (vmark_get(p, view, NULL, &last, NULL, NULL) == 0)
                return 0;
        return last;
 }
@@ -904,11 +908,19 @@ struct mark *vmark_last(struct pane *p, int view)
 struct mark *vmark_at_point(struct pane *p, int view)
 {
        struct mark *point = NULL;
-       if (vmark_get(p, view, NULL, NULL, &point) == 0)
+       if (vmark_get(p, view, NULL, NULL, &point, NULL) == 0)
                return 0;
        return point;
 }
 
+struct mark *vmark_new(struct pane *p, int view)
+{
+       struct mark *new = NULL;
+       if (vmark_get(p, view, NULL, NULL, NULL, &new) == 0)
+               return 0;
+       return new;
+}
+
 struct mark *vmark_matching(struct pane *p, struct mark *m)
 {
        /* Find a nearby mark in the same view with the same ref */
diff --git a/core.h b/core.h
index 284a8baad1961bfc867c6f32f8b1a046daa80b98..bb6ed4b7fa35c1ff5d72067e023f8ea31e494827 100644 (file)
--- a/core.h
+++ b/core.h
@@ -198,6 +198,7 @@ struct mark *do_vmark_at_point(struct doc *d, struct mark *pt, int view);
 struct mark *vmark_first(struct pane *p, int view);
 struct mark *vmark_last(struct pane *p, int view);
 struct mark *vmark_at_point(struct pane *p, int view);
+struct mark *vmark_new(struct pane *p, int view);
 
 static inline int mark_ordered(struct mark *m1, struct mark *m2)
 {
index 7227cee291535e3f9aea547288bdd990b5de6f1a..f64b6ae779e6b20270991d817892f2d44944fe9e 100644 (file)
@@ -135,12 +135,12 @@ static void count_calculate(struct doc *d, struct mark *start, struct mark *end)
        m = vmark_first(d->home, type);
        if (m == NULL) {
                /* No marks yet, let's make some */
-               m = doc_new_mark(d, type);
+               m = vmark_new(d->home, type);
                do_count(d, m, NULL, &l, &w, &c, 1);
        }
        if (doc_prior(d, m) != WEOF) {
                /* no mark at start of file */
-               m2 = doc_new_mark(d, type);
+               m2 = vmark_new(d->home, type);
                do_count(d, m2, m, &l, &w, &c, 1);
                m = m2;
        }