m->ref.p = e;
return 1;
}
+
+DEF_CMD(list_del_elmnt)
+{
+ struct list *l = ci->home->doc_data;
+ struct mark *m = ci->mark;
+ struct mark *m2;
+ struct elmnt *e;
+
+ if (!m)
+ return Enoarg;
+ if (!m->ref.p)
+ return Efalse;
+ e = m->ref.p;
+ while ((m2 = mark_next(m)) && m2->ref.p == e)
+ m = m2;
+ if (e == list_last_entry(&l->content, struct elmnt, list))
+ m->ref.p = NULL;
+ else
+ m->ref.p = list_next_entry(e, list);
+ while ((m2 = mark_prev(m)) && m2->ref.p == e) {
+ m2->ref.p = m->ref.p;
+ m = m2;
+ }
+ list_del(&e->list);
+ unalloc(e, pane);
+ return 1;
+}
static char *key(struct list_head *le, const void *data)
{
key_add(list_map, "doc:get-attr", &list_get_attr);
key_add(list_map, "doc:shares-ref", &list_shares_ref);
key_add(list_map, "doc:list-add", &list_add_elmnt);
+ key_add(list_map, "doc:list-del", &list_del_elmnt);
key_add(list_map, "doc:list-sort", &list_sort);
key_add(list_map, "Close", &list_close);
}
return 1;
}
+DEF_CMD(menu_clear)
+{
+ struct mark *m = vmark_new(ci->focus, MARK_UNGROUPED, NULL);
+
+ call("doc:set-ref", ci->home, 1, m);
+ while (call("doc:list-del", ci->home, 0, m) > 0)
+ ;
+ return 1;
+}
+
DEF_CMD(menu_attr)
{
if (ci->str && strcmp(ci->str, "BG") == 0) {
key_add(menu_map, "render:reposition", &menu_reposition);
key_add(menu_map, "menu-add", &menu_add);
+ key_add(menu_map, "menu-clear", &menu_clear);
key_add(menu_map, "Cancel", &menu_abort);
key_add(menu_map, "K:Enter", &menu_done);
key_add(menu_map, "menu-select", &menu_done);