summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorLeo Liu <sdl.web@gmail.com>2013-05-17 10:43:41 +0800
committerLeo Liu <sdl.web@gmail.com>2013-05-17 10:43:41 +0800
commitc7a8fcacf99548e19b4efcf6900abc66c1de3a9d (patch)
tree64b94a2652784a8e938b7e8013df6d72d3a4a3cf /lisp
parentf678b18a19e3c8050acfde90523b1542e4537053 (diff)
downloademacs-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/ChangeLog7
-rw-r--r--lisp/ido.el19
-rw-r--r--lisp/progmodes/octave.el8
-rw-r--r--lisp/subr.el17
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.