aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog7
-rw-r--r--lisp/ido.el23
2 files changed, 25 insertions, 5 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 76ae9231820..cd5d2f4ee61 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,10 @@
12013-05-08 Leo Liu <sdl.web@gmail.com>
2
3 Re-work a fix for bug#10994 based on Le Wang's patch.
4 * ido.el (ido-remove-consecutive-dups): New helper.
5 (ido-completing-read): Use it.
6 (ido-chop): Revert fix for bug#10994.
7
12013-05-08 Adam Spiers <emacs@adamspiers.org> 82013-05-08 Adam Spiers <emacs@adamspiers.org>
2 9
3 * cus-edit.el (custom-save-variables): 10 * cus-edit.el (custom-save-variables):
diff --git a/lisp/ido.el b/lisp/ido.el
index bedf00e638d..297e3258338 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -3152,15 +3152,13 @@ for first matching file."
3152 (exit-minibuffer))) 3152 (exit-minibuffer)))
3153 3153
3154(defun ido-chop (items elem) 3154(defun ido-chop (items elem)
3155 "Remove all elements before ELEM and put them at the end of ITEMS. 3155 "Remove all elements before ELEM and put them at the end of ITEMS."
3156Use `eq' for comparison."
3157 (let ((ret nil) 3156 (let ((ret nil)
3158 (next nil) 3157 (next nil)
3159 (sofar nil)) 3158 (sofar nil))
3160 (while (not ret) 3159 (while (not ret)
3161 (setq next (car items)) 3160 (setq next (car items))
3162 ;; Use `eq' to avoid bug http://debbugs.gnu.org/10994 3161 (if (equal next elem)
3163 (if (eq next elem)
3164 (setq ret (append items (nreverse sofar))) 3162 (setq ret (append items (nreverse sofar)))
3165 ;; else 3163 ;; else
3166 (progn 3164 (progn
@@ -4678,6 +4676,21 @@ For details of keybindings, see `ido-find-file'."
4678 ido-temp-list)))) 4676 ido-temp-list))))
4679 (ido-to-end summaries))) 4677 (ido-to-end summaries)))
4680 4678
4679(defun ido-remove-consecutive-dups (list)
4680 "Remove consecutive duplicates in LIST.
4681Use `equal' for comparison. First and last elements are
4682considered consecutive."
4683 (let ((tail list)
4684 (last (make-symbol ""))
4685 (result nil))
4686 (while (consp tail)
4687 (unless (equal (car tail) last)
4688 (push (setq last (car tail)) result))
4689 (setq tail (cdr tail)))
4690 (nreverse (or (and (equal last (car list))
4691 (cdr result))
4692 result))))
4693
4681;;; Helper functions for other programs 4694;;; Helper functions for other programs
4682 4695
4683(put 'dired-do-rename 'ido 'ignore) 4696(put 'dired-do-rename 'ido 'ignore)
@@ -4795,7 +4808,7 @@ DEF, if non-nil, is the default value."
4795 (ido-directory-nonreadable nil) 4808 (ido-directory-nonreadable nil)
4796 (ido-directory-too-big nil) 4809 (ido-directory-too-big nil)
4797 (ido-context-switch-command 'ignore) 4810 (ido-context-switch-command 'ignore)
4798 (ido-choice-list choices)) 4811 (ido-choice-list (ido-remove-consecutive-dups choices)))
4799 ;; Initialize ido before invoking ido-read-internal 4812 ;; Initialize ido before invoking ido-read-internal
4800 (ido-common-initialization) 4813 (ido-common-initialization)
4801 (ido-read-internal 'list prompt hist def require-match initial-input))) 4814 (ido-read-internal 'list prompt hist def require-match initial-input)))