diff lisp/iswitchb.el @ 54956:d0e2ba105b5a

2004-04-17 John Wiegley <johnw@newartisans.com> * iswitchb.el (iswitchb-max-to-show): Added a new config variable which optionally limits the number of names shown in the minibuffer. Off by default. (iswitchb-completions): Use `iswitchb-max-to-show'. This speeds up iswitchb for users with a multitude of open buffers, by showing only the first and last N/2 buffers in the completion list (which is enough for C-s/C-r, and to know that more characters need to be typed to refine the completion list).
author John Wiegley <johnw@newartisans.com>
date Sat, 17 Apr 2004 22:04:04 +0000
parents dd6aac780c4b
children 8456893f6790
line wrap: on
line diff
--- a/lisp/iswitchb.el	Sat Apr 17 22:02:45 2004 +0000
+++ b/lisp/iswitchb.el	Sat Apr 17 22:04:04 2004 +0000
@@ -298,6 +298,13 @@
   :type '(repeat (choice regexp function))
   :group 'iswitchb)
 
+(defcustom iswitchb-max-to-show nil
+  "*If non-nil, limit the number of names shown in the minibuffer.
+This can greatly speed up iswitchb if you have a multitude of
+buffers open."
+  :type 'integer
+  :group 'iswitchb)
+
 (defcustom iswitchb-cannot-complete-hook 'iswitchb-completion-help
   "*Hook run when `iswitchb-complete' can't complete any more.
 The most useful values are `iswitchb-completion-help', which pops up a
@@ -1185,6 +1192,15 @@
 		   contents
 		   (not minibuffer-completion-confirm)))))))
 
+(defun iswitchb-output-completion (com)
+  (if (= (length com) most-len)
+      ;; Most is one exact match,
+      ;; note that and leave out
+      ;; for later indication:
+      (ignore
+       (setq most-is-exact t))
+    (substring com most-len)))
+
 (defun iswitchb-completions (name require-match)
   "Return the string that is displayed after the user's text.
 Modified from `icomplete-completions'."
@@ -1224,28 +1240,23 @@
 		     "")
 		   (if (not iswitchb-use-fonts) " [Matched]")))
 	  (t				;multiple matches
+	   (if (and iswitchb-max-to-show
+		    (> (length comps) iswitchb-max-to-show))
+	       (setq comps
+		     (append
+		      (subseq comps 0 (/ iswitchb-max-to-show 2))
+		      (list "...")
+		      (subseq comps (- (length comps)
+				       (/ iswitchb-max-to-show 2))))))
 	   (let* (
 		  ;;(most (try-completion name candidates predicate))
 		  (most nil)
 		  (most-len (length most))
 		  most-is-exact
-		  (alternatives
-		   (apply
-		    (function concat)
-		    (cdr (apply
-			  (function nconc)
-			  (mapcar '(lambda (com)
-				     (if (= (length com) most-len)
-					 ;; Most is one exact match,
-					 ;; note that and leave out
-					 ;; for later indication:
-					 (progn
-					   (setq most-is-exact t)
-					   ())
-				       (list ","
-					     (substring com
-							most-len))))
-				  comps))))))
+		  (alternatives (if most
+				    (mapconcat 'iswitchb-output-completion
+					       comps ",")
+				  (mapconcat 'identity comps ","))))
 
 	     (concat