commit: Make switch-to-buffer completion avoid current buffer.

Didier Verna didier at xemacs.org
Mon Nov 9 11:13:02 EST 2009


changeset:   4734:74a5eaa67982
tag:         tip
user:        Didier Verna <didier at xemacs.org>
date:        Mon Nov 09 17:05:19 2009 +0100
files:       lisp/ChangeLog lisp/buffer.el lisp/minibuf.el
description:
Make switch-to-buffer completion avoid current buffer.


diff -r a5210e70ffbe -r 74a5eaa67982 lisp/ChangeLog
--- a/lisp/ChangeLog	Sun Nov 08 17:27:26 2009 +0000
+++ b/lisp/ChangeLog	Mon Nov 09 17:05:19 2009 +0100
@@ -1,3 +1,10 @@
+2009-11-09  Didier Verna  <didier at xemacs.org>
+
+	* minibuf.el (read-buffer): New optional argument 'exclude' for
+	excluding buffers from the completion list.
+	* buffer.el (switch-to-buffer): Don't offer the current buffer in
+	the completion list.
+
 2009-11-01  Aidan Kehoe  <kehoea at parhasard.net>
 
 	* cl-extra.el (equalp): 
diff -r a5210e70ffbe -r 74a5eaa67982 lisp/buffer.el
--- a/lisp/buffer.el	Sun Nov 08 17:27:26 2009 +0000
+++ b/lisp/buffer.el	Mon Nov 09 17:05:19 2009 +0100
@@ -41,7 +41,11 @@
 WARNING: This is NOT the way to work on another buffer temporarily
 within a Lisp program!  Use `set-buffer' instead.  That avoids messing with
 the window-buffer correspondences."
-  (interactive "BSwitch to buffer: ")
+  (interactive
+   (list (read-buffer "Switch to buffer: "
+		      (other-buffer (current-buffer))
+		      nil
+		      (current-buffer))))
   ;; #ifdef I18N3
   ;; #### Doc string should indicate that the buffer name will get
   ;; translated.
diff -r a5210e70ffbe -r 74a5eaa67982 lisp/minibuf.el
--- a/lisp/minibuf.el	Sun Nov 08 17:27:26 2009 +0000
+++ b/lisp/minibuf.el	Mon Nov 09 17:05:19 2009 +0100
@@ -39,6 +39,8 @@
 ;;  (following|preceding)-char. -slb
 
 ;;; Code:
+
+(require 'cl)
 
 (defgroup minibuffer nil
   "Controling the behavior of the minibuffer."
@@ -1467,20 +1469,24 @@
 			       (symbol-name default-value)
 			     default-value))))
 
-(defun read-buffer (prompt &optional default require-match)
+(defun read-buffer (prompt &optional default require-match exclude)
   "Read the name of a buffer and return as a string.
 Prompts with PROMPT.  Optional second arg DEFAULT is value to return if user
 enters an empty line.  If optional third arg REQUIRE-MATCH is non-nil,
-only existing buffer names are allowed."
+only existing buffer names are allowed.  Optional fourth argument EXCLUDE is
+a buffer or a list of buffers to exclude from the completion list."
+  (when (bufferp exclude)
+    (setq exclude (list exclude)))
   (let ((prompt (if default
                     (format "%s(default %s) "
                             (gettext prompt) (if (bufferp default)
 						 (buffer-name default)
 					       default))
-                    prompt))
-        (alist (mapcar #'(lambda (b) (cons (buffer-name b) b))
-                       (buffer-list)))
-        result)
+		    prompt))
+	(alist (mapcar #'(lambda (b) (cons (buffer-name b) b))
+		       (remove-if (lambda (elt) (member elt exclude))
+				  (buffer-list))))
+	result)
     (while (progn
              (setq result (completing-read prompt alist nil require-match
 					   nil 'buffer-history 



More information about the XEmacs-Patches mailing list