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).
This commit is contained in:
John Wiegley 2004-04-17 22:04:04 +00:00
parent 554e27417b
commit c80d953400

View file

@ -298,6 +298,13 @@ example functions that filter buffernames."
: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 @@ Copied from `icomplete-exhibit' with two changes:
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 @@ Modified from `icomplete-completions'."
"")
(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