This searches panes for an attribute at a mark.
This removes another doc_from_pane call.
Signed-off-by: NeilBrown <neil@brown.name>
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;
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);
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;
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))
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 != ':') {