]> git.neil.brown.name Git - edlib.git/commitdiff
Change text-search to return result directly.
authorNeilBrown <neil@brown.name>
Tue, 8 Dec 2015 01:28:14 +0000 (12:28 +1100)
committerNeilBrown <neil@brown.name>
Thu, 10 Dec 2015 02:54:02 +0000 (13:54 +1100)
-2 is cannot find
-1 is incomplete regex
0 is no such commnd
N is match of length N-1 found.

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

index fab222a11faa55651204f4d2b8ba45b33eb5eb74..b0c5405572bfcb4ab49dd7e0eb6738bdff24e6ae 100644 (file)
@@ -201,9 +201,12 @@ REDEF_CMD(search_again)
        ret = key_lookup(pane2ed(esi->target)->commands, &ci2);
        if (ret == 0)
                pfx = "Search (unavailable): ";
-       else if (ret < 0) {
+       else if (ret == -2) {
+               esi->matched = 0;
+               pfx = "Failed Search: ";
+       } else if (ret < 0) {
                pfx = "Search (incomplete): ";
-       } else if (ci2.extra > 0) {
+       } else {
                memset(&ci2, 0, sizeof(ci2));
                point_to_mark(esi->end, m);
                /* TEMP HACK - please fix */
@@ -213,9 +216,6 @@ REDEF_CMD(search_again)
                pfx = "Search: ";
                if (esi->wrapped)
                        pfx = "Wrapped Search: ";
-       } else {
-               esi->matched = 0;
-               pfx = "Failed Search: ";
        }
        /* HACK */
        for (p = esi->search; p; p = p->parent) {
index 64148a23e1c5f3d7d24e4f8bef2598cfb6d93ae8..55747ba16588b24baa6206b054c61b2fd42b7941 100644 (file)
@@ -50,10 +50,11 @@ DEF_CMD(text_search)
                mark_to_mark(m, endmark);
                mark_free(endmark);
        }
-       ci->extra = since_start;
        rxl_free_state(st);
        free(rxl);
-       return 1;
+       if (since_start < 0)
+               return -2;
+       return since_start + 1;
 }
 
 void edlib_init(struct editor *ed)
index 0c051cfea2cce03c85203ad5f7d2e490d507b950..6f3c27ea2ed170c0e00bf7541973b43762fdb232 100644 (file)
@@ -521,6 +521,7 @@ DEF_CMD(emacs_search)
 {
        struct cmd_info ci2 = {0};
        struct mark *m;
+       int ret;
 
        if (strcmp(ci->key, "Search String") != 0) {
                struct pane *p = pane_attach(ci->focus, "popup", NULL, "TR2");
@@ -554,9 +555,8 @@ DEF_CMD(emacs_search)
        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)
+       ret = key_lookup(pane2ed(ci->focus)->commands, &ci2);
+       if (ret > 1)
                call3("Move-to", ci->focus, 0, m);
 
        mark_free(m);