diff options
author | Leo Liu <sdl.web@gmail.com> | 2013-05-17 10:43:41 +0800 |
---|---|---|
committer | Leo Liu <sdl.web@gmail.com> | 2013-05-17 10:43:41 +0800 |
commit | c7a8fcacf99548e19b4efcf6900abc66c1de3a9d (patch) | |
tree | 64b94a2652784a8e938b7e8013df6d72d3a4a3cf /lisp | |
parent | f678b18a19e3c8050acfde90523b1542e4537053 (diff) | |
download | emacs-c7a8fcacf99548e19b4efcf6900abc66c1de3a9d.tar.gz emacs-c7a8fcacf99548e19b4efcf6900abc66c1de3a9d.tar.bz2 emacs-c7a8fcacf99548e19b4efcf6900abc66c1de3a9d.zip |
* subr.el (delete-consecutive-dups): New function.
* ido.el (ido-set-matches-1): Use it.
* progmodes/octave.el (inferior-octave-completion-table): Use it.
* ido.el (ido-remove-consecutive-dups): Remove.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/ChangeLog | 7 | ||||
-rw-r--r-- | lisp/ido.el | 19 | ||||
-rw-r--r-- | lisp/progmodes/octave.el | 8 | ||||
-rw-r--r-- | lisp/subr.el | 17 |
4 files changed, 31 insertions, 20 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 78eefc86500..4a060875e3c 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2013-05-17 Leo Liu <sdl.web@gmail.com> + + * subr.el (delete-consecutive-dups): New function. + * ido.el (ido-set-matches-1): Use it. + * progmodes/octave.el (inferior-octave-completion-table): Use it. + * ido.el (ido-remove-consecutive-dups): Remove. + 2013-05-17 Stefan Monnier <monnier@iro.umontreal.ca> * progmodes/f90.el (f90-keywords-re, f90-keywords-level-3-re) diff --git a/lisp/ido.el b/lisp/ido.el index 297e3258338..8087124765c 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -3785,7 +3785,7 @@ This is to make them appear as if they were \"virtual buffers\"." (if (string-match re name) (setq matches (cons item matches))))) items)) - matches)) + (delete-consecutive-dups matches t))) (defun ido-set-matches () @@ -4676,21 +4676,6 @@ For details of keybindings, see `ido-find-file'." ido-temp-list)))) (ido-to-end summaries))) -(defun ido-remove-consecutive-dups (list) - "Remove consecutive duplicates in LIST. -Use `equal' for comparison. First and last elements are -considered consecutive." - (let ((tail list) - (last (make-symbol "")) - (result nil)) - (while (consp tail) - (unless (equal (car tail) last) - (push (setq last (car tail)) result)) - (setq tail (cdr tail))) - (nreverse (or (and (equal last (car list)) - (cdr result)) - result)))) - ;;; Helper functions for other programs (put 'dired-do-rename 'ido 'ignore) @@ -4808,7 +4793,7 @@ DEF, if non-nil, is the default value." (ido-directory-nonreadable nil) (ido-directory-too-big nil) (ido-context-switch-command 'ignore) - (ido-choice-list (ido-remove-consecutive-dups choices))) + (ido-choice-list choices)) ;; Initialize ido before invoking ido-read-internal (ido-common-initialization) (ido-read-internal 'list prompt hist def require-match initial-input))) diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el index ab2f570cccb..451ac2791a7 100644 --- a/lisp/progmodes/octave.el +++ b/lisp/progmodes/octave.el @@ -38,7 +38,9 @@ (require 'newcomment) (eval-and-compile (unless (fboundp 'user-error) - (defalias 'user-error 'error))) + (defalias 'user-error 'error)) + (unless (fboundp 'delete-consecutive-dups) + (defalias 'delete-consecutive-dups 'delete-dups))) (eval-when-compile (unless (fboundp 'setq-local) (defmacro setq-local (var val) @@ -777,8 +779,8 @@ startup file, `~/.emacs-octave'." (inferior-octave-send-list-and-digest (list (concat "completion_matches (\"" command "\");\n"))) (setq cache (list command (float-time) - (sort (delete-dups inferior-octave-output-list) - 'string-lessp)))) + (delete-consecutive-dups + (sort inferior-octave-output-list 'string-lessp))))) (car (cddr cache)))))) (defun inferior-octave-completion-at-point () diff --git a/lisp/subr.el b/lisp/subr.el index 9bf11a13ef6..9b2c8157ac8 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -376,6 +376,23 @@ one is kept." (setq tail (cdr tail)))) list) +;; See http://lists.gnu.org/archive/html/emacs-devel/2013-05/msg00204.html +(defun delete-consecutive-dups (list &optional circular) + "Destructively remove `equal' consecutive duplicates from LIST. +First and last elements are considered consecutive if CIRCULAR is +non-nil." + (let ((tail list) last) + (while (consp tail) + (if (equal (car tail) (cadr tail)) + (setcdr tail (cddr tail)) + (setq last (car tail) + tail (cdr tail)))) + (if (and circular + (cdr list) + (equal last (car list))) + (nbutlast list) + list))) + (defun number-sequence (from &optional to inc) "Return a sequence of numbers from FROM to TO (both inclusive) as a list. INC is the increment used between numbers in the sequence and defaults to 1. |