diff options
-rw-r--r-- | etc/NEWS | 3 | ||||
-rw-r--r-- | lisp/ido.el | 17 |
2 files changed, 16 insertions, 4 deletions
@@ -398,6 +398,9 @@ If you need your objects to be named, do it by inheriting from `eieio-named'. *** New command `ido-bury-buffer-at-head' bound to C-S-b Bury the buffer at the head of `ido-matches', analogous to how C-k kills the buffer at head. +*** A prefix argument to `ido-restrict-to-matches' will reverse its +meaning, and the list is restricted to those elements that do not +match the current input. ** Minibuffer diff --git a/lisp/ido.el b/lisp/ido.el index 5995fcd41e3..1f12fbfa9ee 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -322,6 +322,7 @@ ;;; Code: (defvar recentf-list) +(require 'seq) ;;;; Options @@ -3180,11 +3181,19 @@ for first matching file." (if (> i 0) (setq ido-cur-list (ido-chop ido-cur-list (nth i ido-matches))))))) -(defun ido-restrict-to-matches () - "Set current item list to the currently matched items." - (interactive) +(defun ido-restrict-to-matches (&optional removep) + "Set current item list to the currently matched items. + +When argument REMOVEP is non-nil, the currently matched items are +instead removed from the current item list." + (interactive "P") (when ido-matches - (setq ido-cur-list ido-matches + (setq ido-cur-list (if removep + ;; An important feature is to preserve the + ;; order of the elements. + (seq-difference ido-cur-list ido-matches) + ido-matches) + ido-matches ido-cur-list ido-text-init "" ido-rescan nil ido-exit 'keep) |