]> git.neil.brown.name Git - edlib.git/commitdiff
Introduce pane_mark_attr.
authorNeilBrown <neil@brown.name>
Thu, 10 Dec 2015 03:00:18 +0000 (14:00 +1100)
committerNeilBrown <neil@brown.name>
Thu, 10 Dec 2015 04:10:10 +0000 (15:10 +1100)
This searches panes for an attribute at a mark.
This removes another doc_from_pane call.

Signed-off-by: NeilBrown <neil@brown.name>
core-pane.c
core.h
render-format.c

index 22a7eedcf548927395addf3c0b9efe61544a1d02..a6df95074b14acb40a82cc9891c26d1630c66946 100644 (file)
@@ -515,6 +515,17 @@ char *pane_attr_get(struct pane *p, char *key)
        return NULL;
 }
 
+char *pane_mark_attr(struct pane *p, struct mark *m, int forward, char *key)
+{
+       while (p) {
+               char *a = doc_attr(p, m, forward, key);
+               if (a)
+                       return a;
+               p = p->parent;
+       }
+       return NULL;
+}
+
 struct pane *pane_final_child(struct pane *p)
 {
        struct pane *c;
diff --git a/core.h b/core.h
index 1e2526649574c09f5ca70ba829504f34d0d68901..8964e04a3c7dbd76df18196ac7913f73b683c7a3 100644 (file)
--- a/core.h
+++ b/core.h
@@ -333,6 +333,7 @@ struct pane *pane_attach(struct pane *p, char *type, struct pane *dp, char *arg)
 void pane_clear(struct pane *p, char *attrs);
 void pane_text(struct pane *p, wchar_t ch, char *attrs, int x, int y);
 char *pane_attr_get(struct pane *p, char *key);
+char *pane_mark_attr(struct pane *p, struct mark *m, int forward, char *key);
 struct pane *call_pane(char *key, struct pane *focus, int numeric,
                       struct mark *m, int extra);
 
index 0c7df85f39c973d0b33989dbf4d245eca92db5c6..18f94d04b0290e52b1aeb4cdfadfaf6eff6d6ed0 100644 (file)
@@ -25,7 +25,6 @@ DEF_CMD(render_line)
        char *body = pane_attr_get(ci->focus, "line-format");
        struct rf_data *rf = ci->home->data;
        struct buf ret;
-       struct doc *d = doc_from_pane(ci->home);
        struct mark *m = ci->mark;
        struct mark *pm = ci->mark2;
        char *n;
@@ -34,7 +33,7 @@ DEF_CMD(render_line)
        int field = 0;
        int rv;
 
-       if (!d || !ci->mark || !ci->focus)
+       if (!ci->mark || !ci->focus)
                return -1;
 
        if (pm && !mark_same_pane(ci->home, pm, m, NULL))
@@ -93,7 +92,7 @@ DEF_CMD(render_line)
                        buf_append(&ret, ch);
                        continue;
                }
-               val = doc_attr(d->home, m, 1, buf);
+               val = pane_mark_attr(ci->focus, m, 1, buf);
                if (!val)
                        val = "-";
                if (*n != ':') {