Mercurial > emacs
changeset 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 | 80952abb48b0 |
children | 4a7ab8214f0d |
files | lisp/iswitchb.el |
diffstat | 1 files changed, 28 insertions(+), 17 deletions(-) [+] |
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