branch: master
commit ae438ff62fa3d9b98d899afc0e97c13be2148725
Author: Greg Lucas <[email protected]>
Commit: Oleh Krehel <[email protected]>
Add ivy-rotate-preferred-builders to switch re builders
Fixes #1093
Fixes #1094
---
ivy-hydra.el | 10 +++++-----
ivy.el | 19 +++++++++++++++++++
2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/ivy-hydra.el b/ivy-hydra.el
index b03cc27..6d2df15 100644
--- a/ivy-hydra.el
+++ b/ivy-hydra.el
@@ -35,10 +35,10 @@
(defun ivy--matcher-desc ()
"Return description of `ivy--regex-function'."
- (if (eq ivy--regex-function
- 'ivy--regex-fuzzy)
- "fuzzy"
- "ivy"))
+ (let ((cell (assoc ivy--regex-function ivy--preferred-re-builders)))
+ (if cell
+ (cdr cell)
+ "other")))
(defhydra hydra-ivy (:hint nil
:color pink)
@@ -65,7 +65,7 @@ _h_ ^+^ _l_ | _d_one ^ ^ | _o_ops | _m_: matcher
%-5s(ivy--matcher-desc)
("g" ivy-call)
("C-m" ivy-done :exit t)
("c" ivy-toggle-calling)
- ("m" ivy-toggle-fuzzy)
+ ("m" ivy-rotate-preferred-builders)
(">" ivy-minibuffer-grow)
("<" ivy-minibuffer-shrink)
("w" ivy-prev-action)
diff --git a/ivy.el b/ivy.el
index 841630d..dcd16d9 100644
--- a/ivy.el
+++ b/ivy.el
@@ -3536,6 +3536,25 @@ Don't finish completion."
(insert (substring (ivy-state-current ivy-last) 0 -1))
(insert (ivy-state-current ivy-last))))
+(defcustom ivy--preferred-re-builders
+ '((ivy--regex-plus . "ivy")
+ (ivy--regex-ignore-order . "order")
+ (ivy--regex-fuzzy . "fuzzy"))
+ "Alist of preferred re-builders with display names.
+This list can be rotated with `ivy-rotate-preferred-builders'."
+ :type '(alist :key-type function :value-type string)
+ :group 'ivy)
+
+(defun ivy-rotate-preferred-builders ()
+ "Switch to the next re builder in `ivy--preferred-re-builders'."
+ (interactive)
+ (when ivy--preferred-re-builders
+ (setq ivy--old-re nil)
+ (setq ivy--regex-function
+ (let ((cell (assoc ivy--regex-function ivy--preferred-re-builders)))
+ (car (or (cadr (memq cell ivy--preferred-re-builders))
+ (car ivy--preferred-re-builders)))))))
+
(defun ivy-toggle-fuzzy ()
"Toggle the re builder between `ivy--regex-fuzzy' and `ivy--regex-plus'."
(interactive)