]> git.neil.brown.name Git - edlib.git/commitdiff
Provide a "Move-to" command to use e.g. when completing a search.
authorNeilBrown <neil@brown.name>
Wed, 25 Nov 2015 22:27:37 +0000 (09:27 +1100)
committerNeilBrown <neil@brown.name>
Wed, 25 Nov 2015 22:27:37 +0000 (09:27 +1100)
Better than direct access to point_to_mark().

Signed-off-by: NeilBrown <neil@brown.name>
core-doc.c
mode-emacs.c

index 62e45c70c40c2210ece571f6cc19d6e384437fe9..5ab745ffa3662e8f3fa72cc212b1cb7e1911a42c 100644 (file)
@@ -175,6 +175,11 @@ DEF_CMD(doc_handle)
                return 1;
        }
 
+       if (strcmp(ci->key, "Move-to") == 0) {
+               point_to_mark(ci->home->point, ci->mark);
+               return 1;
+       }
+
        if (strcmp(ci->key, "doc:set-name") == 0) {
                doc_set_name(d, ci->str);
                return 1;
index 2da6abbedb62d30394f3d8290e8c44b17f64755e..8c60d6ae02b2d6a19ecd5be06bbc1ffd778fc55c 100644 (file)
@@ -557,6 +557,7 @@ DEF_CMD(emacs_kill_doc)
 DEF_CMD(emacs_search)
 {
        struct cmd_info ci2 = {0};
+       struct mark *m;
 
        if (strcmp(ci->key, "Search String") != 0) {
                struct pane *p = pane_attach(ci->focus, "popup", NULL, "TR2");
@@ -580,14 +581,20 @@ DEF_CMD(emacs_search)
        if (!ci->str || !ci->str[0])
                return -1;
        ci2.pointp = pane_point(ci->focus);
-       ci2.mark = mark_dup(&(*ci2.pointp)->m, 1);
+       m = mark_dup(&(*ci2.pointp)->m, 1);
+       ci2.mark = m;
        ci2.str = ci->str;
        ci2.key = "text-search";
        if (!key_lookup(pane2ed(ci->focus)->commands, &ci2))
                ci2.extra = -1;
-       if (ci2.extra > 0)
-               point_to_mark(*ci2.pointp, ci2.mark);
-       mark_free(ci2.mark);
+       if (ci2.extra > 0) {
+               memset(&ci2, 0, sizeof(ci2));
+               ci2.key = "Move-to";
+               ci2.mark = m;
+               ci2.focus = ci->focus;
+               key_handle_focus(&ci2);
+       }
+       mark_free(m);
        return 1;
 }