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

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

[elpa] master 1485e58 076/272: Add ignore pattern toggling


From: Oleh Krehel
Subject: [elpa] master 1485e58 076/272: Add ignore pattern toggling
Date: Mon, 25 Apr 2016 10:13:17 +0000

branch: master
commit 1485e58fd2313e0a019e97191f4332fcebf2ae62
Author: Stephen Whipple <address@hidden>
Commit: Oleh Krehel <address@hidden>

    Add ignore pattern toggling
    
    * ivy.el (ivy-minibuffer-map): Bind "C-c C-a" to `ivy-toggle-ignore'.
    
    (ivy-use-ignore): New defvar.
    
    (ivy-toggle-ignore): New command to toggle ignore
    patterns (user-configured filtering). If the ignore patterns are enabled
    and there are zero candidates after ignoring, display the ones that
    match the current text. This feature currently works for
    `ivy-switch-buffer' and `counsel-find-file'.
    
    (ivy--buffer-list): Simplify.
    (ivy--switch-buffer-matcher): New defun.
    (ivy-switch-buffer): Use `ivy--switch-buffer-matcher'.
    
    * counsel.el (counsel--find-file-matcher): Use `ivy-use-ignore'.
    
    Fixes #369
---
 counsel.el |   12 +++++++-----
 ivy.el     |   59 +++++++++++++++++++++++++++++++++++++++++------------------
 2 files changed, 48 insertions(+), 23 deletions(-)

diff --git a/counsel.el b/counsel.el
index 2a6a264..25ebf98 100644
--- a/counsel.el
+++ b/counsel.el
@@ -542,13 +542,15 @@ Possible value: \"\\(?:\\`[#.]\\)\\|\\(?:[#~]\\'\\)\"."
   "Return REGEXP-matching CANDIDATES.
 Skip some dotfiles unless `ivy-text' requires them."
   (let ((res (ivy--re-filter regexp candidates)))
-    (if (or (null counsel-find-file-ignore-regexp)
+    (if (or (null ivy-use-ignore)
+            (null counsel-find-file-ignore-regexp)
             (string-match counsel-find-file-ignore-regexp ivy-text))
         res
-      (cl-remove-if
-       (lambda (x)
-         (string-match counsel-find-file-ignore-regexp x))
-       res))))
+      (or (cl-remove-if
+           (lambda (x)
+             (string-match counsel-find-file-ignore-regexp x))
+           res)
+          res))))
 
 (defun counsel-git-grep-matcher (regexp candidates)
   (or (and (equal regexp ivy--old-re)
diff --git a/ivy.el b/ivy.el
index 4a17bbf..b95ce33 100644
--- a/ivy.el
+++ b/ivy.el
@@ -236,6 +236,7 @@ Example:
     (define-key map (kbd "C-'") 'ivy-avy)
     (define-key map (kbd "C-M-a") 'ivy-read-action)
     (define-key map (kbd "C-c C-o") 'ivy-occur)
+    (define-key map (kbd "C-c C-a") 'ivy-toggle-ignore)
     (define-key map (kbd "C-h m") 'ivy-help)
     map)
   "Keymap used in the minibuffer.")
@@ -318,6 +319,9 @@ sources. These values will subsequently be filtered on 
`ivy-text'.
 
 This variable is set by `ivy-read' and used by `ivy--set-candidates'.")
 
+(defvar ivy-use-ignore t
+  "Store policy for user-configured candidate filtering.")
+
 (defvar ivy--default nil
   "Default initial input.")
 
@@ -734,6 +738,13 @@ If the input is empty, select the previous history element 
instead."
   (when (setq ivy-calling (not ivy-calling))
     (ivy-call)))
 
+(defun ivy-toggle-ignore ()
+  "Toggle user-configured candidate filtering."
+  (interactive)
+  (setq ivy-use-ignore (null ivy-use-ignore))
+  ;; invalidate cache
+  (setq ivy--old-cands nil))
+
 (defun ivy--get-action (state)
   "Get the action function from STATE."
   (let ((action (ivy-state-action state)))
@@ -1285,6 +1296,7 @@ This is useful for recursive `ivy-read'."
     (setq ivy--full-length nil)
     (setq ivy-text "")
     (setq ivy-calling nil)
+    (setq ivy-use-ignore t)
     (let (coll sort-fn)
       (cond ((eq collection 'Info-read-node-name-1)
              (if (equal Info-current-file "dir")
@@ -2383,24 +2395,18 @@ CANDS is a list of strings."
 (defun ivy--buffer-list (str &optional virtual)
   "Return the buffers that match STR.
 When VIRTUAL is non-nil, add virtual buffers."
-  (cl-remove-if
-   (lambda (buf)
-     (cl-find-if
-      (lambda (regexp)
-        (string-match regexp buf))
-      ivy-ignore-buffers))
-   (delete-dups
-    (append
-     (mapcar
-      (lambda (x)
-        (if (with-current-buffer x
-              (file-remote-p
-               (abbreviate-file-name default-directory)))
-            (propertize x 'face 'ivy-remote)
-          x))
-      (all-completions str 'internal-complete-buffer))
-     (and virtual
-          (ivy--virtual-buffers))))))
+  (delete-dups
+   (append
+    (mapcar
+     (lambda (x)
+       (if (with-current-buffer x
+             (file-remote-p
+              (abbreviate-file-name default-directory)))
+           (propertize x 'face 'ivy-remote)
+         x))
+     (all-completions str 'internal-complete-buffer))
+    (and virtual
+         (ivy--virtual-buffers)))))
 
 (defun ivy--switch-buffer-action (buffer)
   "Switch to BUFFER.
@@ -2449,6 +2455,22 @@ BUFFER may be a string or nil."
     ivy--rename-buffer-action
     "rename")))
 
+(defun ivy--switch-buffer-matcher (regexp candidates)
+  "Return REGEXP-matching CANDIDATES.
+Skip buffers that match `ivy-ignore-buffers'."
+  (let ((res (ivy--re-filter regexp candidates)))
+    (if (or (null ivy-use-ignore)
+            (null ivy-ignore-buffers))
+        res
+      (or (cl-remove-if
+           (lambda (buf)
+             (cl-find-if
+              (lambda (regexp)
+                (string-match regexp buf))
+              ivy-ignore-buffers))
+           res)
+          res))))
+
 ;;;###autoload
 (defun ivy-switch-buffer ()
   "Switch to another buffer."
@@ -2457,6 +2479,7 @@ BUFFER may be a string or nil."
       (call-interactively 'switch-to-buffer)
     (let ((this-command 'ivy-switch-buffer))
       (ivy-read "Switch to buffer: " 'internal-complete-buffer
+                :matcher #'ivy--switch-buffer-matcher
                 :preselect (buffer-name (other-buffer (current-buffer)))
                 :action #'ivy--switch-buffer-action
                 :keymap ivy-switch-buffer-map))))



reply via email to

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