From: NeilBrown Date: Thu, 10 Dec 2015 04:11:14 +0000 (+1100) Subject: Introduce vmark_new to avoid direct acess to doc_new_mark X-Git-Tag: lca2016~74 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=5f7b5dd806da62c6ce13896314fed966664089c9;p=edlib.git Introduce vmark_new to avoid direct acess to doc_new_mark Signed-off-by: NeilBrown --- diff --git a/core-doc.c b/core-doc.c index c1f9c84d..bd3bb81b 100644 --- a/core-doc.c +++ b/core-doc.c @@ -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); } diff --git a/core-mark.c b/core-mark.c index d17d2d8c..0607696b 100644 --- a/core-mark.c +++ b/core-mark.c @@ -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 284a8baa..bb6ed4b7 100644 --- 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) { diff --git a/lib-line-count.c b/lib-line-count.c index 7227cee2..f64b6ae7 100644 --- a/lib-line-count.c +++ b/lib-line-count.c @@ -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; }