]> git.eshelyaron.com Git - emacs.git/commitdiff
* subr.el (delete-consecutive-dups): New function.
authorLeo Liu <sdl.web@gmail.com>
Fri, 17 May 2013 02:43:41 +0000 (10:43 +0800)
committerLeo Liu <sdl.web@gmail.com>
Fri, 17 May 2013 02:43:41 +0000 (10:43 +0800)
* ido.el (ido-set-matches-1): Use it.
* progmodes/octave.el (inferior-octave-completion-table): Use it.
* ido.el (ido-remove-consecutive-dups): Remove.

lisp/ChangeLog
lisp/ido.el
lisp/progmodes/octave.el
lisp/subr.el

index 78eefc865002f1ada01f68f586f12b398d35c164..4a060875e3c1dd7a5eea676adab09f486d8d96bb 100644 (file)
@@ -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)
index 297e3258338355ed8fd21e15342718f27c511df3..8087124765c05315b480c7e1c975857672968cd2 100644 (file)
@@ -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)))
index ab2f570cccb45773f4bc52857c7aeb20b00a5691..451ac2791a7a0562d217540950a404bca4214d8e 100644 (file)
@@ -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 ()
index 9bf11a13ef6d19e61d745a4b81520b131ad4cfb2..9b2c8157ac8fc932a71f940912d6a7f1dca3e34c 100644 (file)
@@ -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.