return 1;
}
+DEF_CMD(doc_attr_set)
+{
+ struct doc_data *dd = ci->home->data;
+ struct doc *d = dd->doc;
+
+ if (ci->str2 == NULL && ci->extra == 1)
+ attr_set_int(&d->attrs, ci->str, ci->numeric);
+ else
+ attr_set_str(&d->attrs, ci->str, ci->str2, -1);
+ return 1;
+}
+
static struct map *doc_default_cmd;
static void init_doc_defaults(void)
key_add(doc_default_cmd, "Move-Line", &doc_line);
key_add(doc_default_cmd, "Move-View-Large", &doc_page);
key_add(doc_default_cmd, "Replace", &doc_do_replace);
+ key_add(doc_default_cmd, "doc:attr-set", &doc_attr_set);
}
DEF_CMD(doc_handle)
return key_handle_focus(&ci);
}
+static inline int call7(char *key, struct pane *focus, int numeric, struct mark *m,
+ char *str, int extra, char *str2, struct mark *m2)
+{
+ struct cmd_info ci = {0};
+
+ ci.key = key;
+ ci.focus = focus;
+ ci.numeric = numeric;
+ ci.mark = m;
+ ci.mark2 = m2;
+ ci.str = str;
+ ci.str2 = str2;
+ ci.extra = extra;
+ return key_handle_focus(&ci);
+}
+
struct call_return {
struct command c;
struct mark *m, *m2;
int type = doc_find_view(d->home, &count_notify);
int lines, words, chars, l, w, c;
struct mark *m, *m2;
- struct attrset **attrs;
if (type < 0)
type = doc_add_view(d->home, &count_notify, 0);
chars += c;
}
done:
- if (end)
- attrs = &end->attrs;
- else
- attrs = &d->attrs;
- attr_set_int(attrs, "lines", lines);
- attr_set_int(attrs, "words", words);
- attr_set_int(attrs, "chars", chars);
+ if (end) {
+ struct attrset **attrs = &end->attrs;
+ attr_set_int(attrs, "lines", lines);
+ attr_set_int(attrs, "words", words);
+ attr_set_int(attrs, "chars", chars);
+ } else {
+ call5("doc:attr-set", d->home, lines, NULL, "lines", 1);
+ call5("doc:attr-set", d->home, words, NULL, "words", 1);
+ call5("doc:attr-set", d->home, chars, NULL, "chars", 1);
+ }
}
DEF_CMD(count_lines)