From b6e9f47a9fab312a6c0cb3aa5c1912f3bb5d6b37 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 10 Oct 2023 09:30:34 +1100 Subject: [PATCH] rangetrack: dont' track owner or clean up when owner closes. We want parsing to be stable - we shouldn't have to re-spellcheck when a doc is revisited. So leave range info permanently until doc is closed. Signed-off-by: NeilBrown --- lib-rangetrack.c | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/lib-rangetrack.c b/lib-rangetrack.c index 16d74654..95fd5b05 100644 --- a/lib-rangetrack.c +++ b/lib-rangetrack.c @@ -25,7 +25,6 @@ struct rangetrack_data { struct rci { const char *set safe; - struct pane *owner safe; int view; struct rci *next; } *info; @@ -44,39 +43,18 @@ static struct rci *find_set(const struct cmd_info *ci safe) return NULL; } -static void add_set(struct pane *home safe, const char *set safe, - struct pane *focus safe) +static void add_set(struct pane *home safe, const char *set safe) { struct rangetrack_data *rtd = home->data; struct rci *i; alloc(i, pane); i->set = strdup(set); - i->owner = focus; - pane_add_notify(home, focus, "Notify:Close"); i->view = call("doc:add-view", home) - 1; i->next = rtd->info; rtd->info = i; } -DEF_CMD(rangetrack_notify_close) -{ - struct rangetrack_data *rtd = ci->home->data; - struct rci **ip; - - for (ip = &rtd->info; *ip; ip = &(*ip)->next) { - struct rci *i; - if ((*ip)->owner != ci->focus) - continue; - i = *ip; - *ip = i->next; - free((void*)i->set); - unalloc(i, pane); - break; - } - return Efallthrough; -} - DEF_CMD_CLOSED(rangetrack_close) { struct rangetrack_data *rtd = ci->home->data; @@ -98,7 +76,7 @@ DEF_CMD(rangetrack_new) return Enoarg; if (i) return Efalse; - add_set(ci->home, ci->str, ci->focus); + add_set(ci->home, ci->str); return 1; } @@ -304,7 +282,7 @@ DEF_CMD(rangetrack_attach) pane_add_notify(p, doc, "rangetrack:add"); pane_add_notify(p, doc, "rangetrack:clear"); pane_add_notify(p, doc, "rangetrack:choose"); - add_set(p, set, ci->focus); + add_set(p, set); return 1; } @@ -314,7 +292,6 @@ void edlib_init(struct pane *ed safe) 0, NULL, "rangetrack:new"); rangetrack_map = key_alloc(); key_add(rangetrack_map, "Close", &rangetrack_close); - key_add(rangetrack_map, "Notify:Close", &rangetrack_notify_close); key_add(rangetrack_map, "rangetrack:new", &rangetrack_new); key_add(rangetrack_map, "rangetrack:add", &rangetrack_add); key_add(rangetrack_map, "rangetrack:clear", &rangetrack_clear); -- 2.39.5