=== modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2010-05-27 07:08:37 +0000 +++ lisp/ChangeLog 2010-05-27 10:48:36 +0000 @@ -1,3 +1,14 @@ +2010-05-27 Tassilo Horn + + * ido.el (ido-exhibit, ido-buffer-internal) + (ido-toggle-virtual-buffers, ido-make-buffer-list) + (ido-buffer-internal): ido-use-virtual-buffers now is a choice + option with values 'never (default), 'always, and 'auto. The + latter means, show virtual buffers if the current input doesn't + match any existing buffer. + + Based on a patch by Leo . + 2010-05-27 Kenichi Handa * language/hebrew.el (hebrew-shape-gstring): Check if a glyph === modified file 'lisp/ido.el' --- lisp/ido.el 2010-05-25 02:11:08 +0000 +++ lisp/ido.el 2010-05-27 10:41:37 +0000 @@ -774,8 +774,10 @@ :type '(repeat string) :group 'ido) -(defcustom ido-use-virtual-buffers nil - "If non-nil, refer to past buffers as well as existing ones. +(defcustom ido-use-virtual-buffers 'never + "If `always', refer to past buffers as well as existing ones. +If `auto', refer to past buffers only when the current input +doesn't match an existing buffer. Essentially it works as follows: Say you are visiting a file and the buffer gets cleaned up by mignight.el. Later, you want to switch to that buffer, but find it's no longer open. With @@ -785,11 +787,12 @@ to think less about whether recently opened files are still open or not. Most of the time you can quit Emacs, restart, and then switch to a file buffer that was previously open as if it still -were. - This feature relies upon the `recentf' package, which will be -enabled if this variable is configured to a non-nil value." +were. This feature relies upon the `recentf' package, which will +be enabled if this variable is configured to a non-nil value." :version "24.1" - :type 'boolean + :type '(choice (const always) + (const auto) + (const never)) :group 'ido) (defcustom ido-use-faces t @@ -1056,7 +1059,7 @@ (defvar ido-virtual-buffers nil "List of virtual buffers, that is, past visited files. This is a copy of `recentf-list', pared down and with faces applied. -Only used if `ido-use-virtual-buffers' is non-nil.") +Only used if `ido-use-virtual-buffers' is not `never'.") ;;; Variables with dynamic bindings. ;;; Declared here to keep the byte compiler quiet. @@ -2182,7 +2185,7 @@ (ido-directory-nonreadable nil) (ido-directory-too-big nil) (ido-use-virtual-buffers (if (eq method 'kill) - nil ;; Don't consider virtual buffers for killing + 'never ;; Don't consider virtual buffers for killing ido-use-virtual-buffers)) (require-match (confirm-nonexistent-file-or-buffer)) (buf (ido-read-internal 'buffer (or prompt "Buffer: ") 'ido-buffer-history default @@ -2224,7 +2227,9 @@ (ido-visit-buffer buf method t))) ;; check for a virtual buffer reference - ((and ido-use-virtual-buffers ido-virtual-buffers + ((and (or (eq ido-use-virtual-buffers 'always) + (eq ido-use-virtual-buffers 'auto)) + ido-virtual-buffers (setq filename (assoc buf ido-virtual-buffers))) (ido-visit-buffer (find-file-noselect (cdr filename)) method t)) @@ -2712,7 +2717,9 @@ See `ido-use-virtual-buffers' for explanation of virtual buffer." (interactive) (when (and ido-mode (eq ido-cur-item 'buffer)) - (setq ido-use-virtual-buffers (not ido-use-virtual-buffers)) + (setq ido-use-virtual-buffers (if (eq ido-use-virtual-buffers 'never) + 'always + 'never)) (setq ido-text-init ido-text) (setq ido-exit 'refresh) (exit-minibuffer))) @@ -3403,7 +3410,9 @@ (when (and default (buffer-live-p (get-buffer default))) (setq ido-temp-list (cons default (delete default ido-temp-list)))) - (if ido-use-virtual-buffers + (if (or (eq ido-use-virtual-buffers 'always) + (and (eq ido-use-virtual-buffers 'auto) + (not ido-matches))) (ido-add-virtual-buffers-to-list)) (run-hooks 'ido-make-buffer-list-hook) ido-temp-list)) @@ -4465,6 +4474,13 @@ (setq ido-exit 'refresh) (exit-minibuffer))) + (when (and (eq ido-use-virtual-buffers 'auto) + (eq ido-cur-item 'buffer) + (not ido-matches)) + (setq ido-text-init ido-text) + (setq ido-exit 'refresh) + (exit-minibuffer)) + (when (and ido-rescan (not ido-matches)