emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 65cf724 247/272: Make ivy--regex work with "[^ ]"


From: Oleh Krehel
Subject: [elpa] master 65cf724 247/272: Make ivy--regex work with "[^ ]"
Date: Mon, 25 Apr 2016 10:13:28 +0000

branch: master
commit 65cf72467e45474595ceb2519a9e3fd5b411e541
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    Make ivy--regex work with "[^ ]"
    
    * 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 |    6 ++++--
 ivy.el      |   32 ++++++++++++++++++++------------
 2 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/ivy-test.el b/ivy-test.el
index a654ad6..5e388d3 100644
--- a/ivy-test.el
+++ b/ivy-test.el
@@ -107,8 +107,10 @@
                  '("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 53d0622..ba76632 100644
--- 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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]