From 65cf72467e45474595ceb2519a9e3fd5b411e541 Mon Sep 17 00:00:00 2001 From: Oleh Krehel Date: Wed, 13 Apr 2016 19:04:58 +0200 Subject: [PATCH] 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 a654ad62e..5e388d3db 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 53d062208..ba76632ae 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)) -- 2.39.2