]> code.delx.au - gnu-emacs-elpa/commitdiff
Make ivy--regex work with "[^ ]"
authorOleh Krehel <ohwoeowho@gmail.com>
Wed, 13 Apr 2016 17:04:58 +0000 (19:04 +0200)
committerOleh Krehel <ohwoeowho@gmail.com>
Wed, 13 Apr 2016 17:04:58 +0000 (19:04 +0200)
* ivy.el (ivy--split): Add a work around to not consider spaces like
"[^ ]". It's pretty hacky, the space has to come right after "[^".
But better than nothing.

* ivy-test.el (ivy--split): Add test.

Use-case: open a freedict file, where each word being defined is with no
indentation and the explanation is with indentation.

`swiper' or `counsel-grep' will now work properly with input "^[^ ]".

ivy-test.el
ivy.el

index a654ad62e8f9578c5e00a4e980477b48dc883b9e..5e388d3dbf8fcf79e22300de749be2ffeaa8a450 100644 (file)
                  '("Who are" "the Brittons?")))
   (should (equal (ivy--split "We're  all  Britons and   I   am your   king.")
                  '("We're all Britons"
-                  "and  I  am"
-                   "your  king."))))
+                   "and  I  am"
+                   "your  king.")))
+  (should (equal (ivy--split "^[^ ]") '("^[^ ]")))
+  (should (equal (ivy--split "^[^ ] bar") '("^[^ ]" "bar"))))
 
 (ert-deftest ivy--regex ()
   (should (equal (ivy--regex
diff --git a/ivy.el b/ivy.el
index 53d06220886ff6238fd71b48a7cb7d6bc09569f9..ba76632ae85ddd93cc6ee8e9aba0561c2f87d4f9 100644 (file)
--- a/ivy.el
+++ b/ivy.el
@@ -1680,19 +1680,27 @@ This allows to \"quote\" N spaces by inputting N+1 spaces."
         match-len)
     (while (and (string-match " +" str start1)
                 (< start1 len))
-      (setq match-len (- (match-end 0) (match-beginning 0)))
-      (if (= match-len 1)
+      (if (and (> (match-beginning 0) 2)
+               (string= "[^" (substring
+                              str
+                              (- (match-beginning 0) 2)
+                              (match-beginning 0))))
           (progn
-            (when start0
-              (setq start1 start0)
-              (setq start0 nil))
-            (push (substring str start1 (match-beginning 0)) res)
-            (setq start1 (match-end 0)))
-        (setq str (replace-match
-                   (make-string (1- match-len) ?\ )
-                   nil nil str))
-        (setq start0 (or start0 start1))
-        (setq start1 (1- (match-end 0)))))
+            (setq start1 (match-end 0))
+            (setq start0 0))
+        (setq match-len (- (match-end 0) (match-beginning 0)))
+        (if (= match-len 1)
+            (progn
+              (when start0
+                (setq start1 start0)
+                (setq start0 nil))
+              (push (substring str start1 (match-beginning 0)) res)
+              (setq start1 (match-end 0)))
+          (setq str (replace-match
+                     (make-string (1- match-len) ?\ )
+                     nil nil str))
+          (setq start0 (or start0 start1))
+          (setq start1 (1- (match-end 0))))))
     (if start0
         (push (substring str start0) res)
       (setq s (substring str start1))