X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/615a3b8d0d2c88cd664f1e0beb5a32b5b8e08f90..15cc05e98486f43b21aaf6e7428fa9f08ddd9e94:/lisp/ido.el?ds=sidebyside diff --git a/lisp/ido.el b/lisp/ido.el index f425fd5fc6..4ab183b320 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -1,6 +1,6 @@ ;;; ido.el --- interactively do things with buffers and files -;; Copyright (C) 1996-2011 Free Software Foundation, Inc. +;; Copyright (C) 1996-2012 Free Software Foundation, Inc. ;; Author: Kim F. Storm ;; Based on: iswitchb by Stephen Eglen @@ -279,7 +279,7 @@ ;; can be used by other packages to read a buffer name, a file name, ;; or a directory name in the `ido' way. -;;; Acknowledgements +;;; Acknowledgments ;; Infinite amounts of gratitude goes to Stephen Eglen ;; who wrote iswitch-buffer mode - from which I ripped off 99% of the code @@ -308,7 +308,7 @@ ;; ifindf package back into iswitchb. ;; ;; This is basically what ido (interactively do) is all about; but I -;; found it ackward to merge my changes into the "iswitchb-" namespace, +;; found it awkward to merge my changes into the "iswitchb-" namespace, ;; so I invented a common "ido-" namespace for the merged packages. ;; ;; This version is based on ido.el version 1.57 released on @@ -493,6 +493,18 @@ as first char even if `ido-enable-prefix' is nil." :type 'boolean :group 'ido) +;; See http://debbugs.gnu.org/2042 for more info. +(defcustom ido-buffer-disable-smart-matches t + "Non-nil means not to re-order matches for buffer switching. +By default, ido arranges matches in the following order: + + full-matches > suffix matches > prefix matches > remaining matches + +which can get in the way for buffer switching." + :version "24.3" + :type 'boolean + :group 'ido) + (defcustom ido-confirm-unique-completion nil "Non-nil means that even a unique completion must be confirmed. This means that \\[ido-complete] must always be followed by \\[ido-exit-minibuffer] @@ -702,7 +714,7 @@ See also `ido-dir-file-cache' and `ido-save-directory-list-file'." :type 'integer :group 'ido) -(defcustom ido-max-directory-size 30000 +(defcustom ido-max-directory-size nil "Maximum size (in bytes) for directories to use ido completion. If you enter a directory with a size larger than this size, ido will not provide the normal completion. To show the completions, use C-a." @@ -791,44 +803,39 @@ subdirs in the alternatives." :type 'boolean :group 'ido) -(defface ido-first-match '((t (:bold t))) +(defface ido-first-match '((t :weight bold)) "Face used by ido for highlighting first match." :group 'ido) (defface ido-only-match '((((class color)) - (:foreground "ForestGreen")) - (t (:italic t))) + :foreground "ForestGreen") + (t :slant italic)) "Face used by ido for highlighting only match." :group 'ido) (defface ido-subdir '((((min-colors 88) (class color)) - (:foreground "red1")) - (((class color)) - (:foreground "red")) - (t (:underline t))) + :foreground "red1") + (((class color)) + :foreground "red") + (t :underline t)) "Face used by ido for highlighting subdirs in the alternatives." :group 'ido) -(defface ido-virtual '((t (:inherit font-lock-builtin-face))) +(defface ido-virtual '((t :inherit font-lock-builtin-face)) "Face used by ido for matching virtual buffer names." :version "24.1" :group 'ido) -(defface ido-indicator '((((min-colors 88) (class color)) - (:foreground "yellow1" - :background "red1" - :width condensed)) - (((class color)) - (:foreground "yellow" - :background "red" - :width condensed)) - (t (:inverse-video t))) +(defface ido-indicator '((((min-colors 88) (class color)) + :foreground "yellow1" :background "red1" :width condensed) + (((class color)) + :foreground "yellow" :background "red" :width condensed) + (t :inverse-video t)) "Face used by ido for highlighting its indicators." :group 'ido) (defface ido-incomplete-regexp - '((t - (:inherit font-lock-warning-face))) + '((t :inherit font-lock-warning-face)) "Ido face for indicating incomplete regexps." :group 'ido) @@ -872,7 +879,7 @@ The following variables are available, but should not be changed: :group 'ido) (defvar ido-rewrite-file-prompt-rules nil - "*Alist of rewriting rules for directory names in ido prompts. + "Alist of rewriting rules for directory names in ido prompts. A list of elements of the form (FROM . TO) or (FROM . FUNC), each meaning to rewrite the directory name if matched by FROM by either substituting the matched string by TO or calling the function FUNC @@ -893,9 +900,14 @@ Otherwise, only the current list of matches is shown." :type 'boolean :group 'ido) -(defvar ido-all-frames 'visible - "*Argument to pass to `walk-windows' when finding visible files. -See documentation of `walk-windows' for useful values.") +(defcustom ido-all-frames 'visible + "Argument to pass to `walk-windows' when Ido is finding buffers. +See documentation of `walk-windows' for useful values." + :type '(choice (const :tag "Selected frame only" nil) + (const :tag "All existing frames" t) + (const :tag "All visible frames" visible) + (const :tag "All frames on this terminal" 0)) + :group 'ido) (defcustom ido-minibuffer-setup-hook nil "Ido-specific customization of minibuffer setup. @@ -1692,7 +1704,7 @@ This function also adds a hook to the minibuffer." (defun ido-nonreadable-directory-p (dir) ;; Return t if dir is a directory, but not readable ;; Do not check for non-readable directories via tramp, as this causes a premature - ;; connect on incomplete tramp paths (after entring just method:). + ;; connect on incomplete tramp paths (after entering just method:). (let ((ido-enable-tramp-completion nil)) (and (ido-final-slash dir) (not (ido-is-unc-host dir)) @@ -1702,13 +1714,13 @@ This function also adds a hook to the minibuffer." (defun ido-directory-too-big-p (dir) ;; Return t if dir is a directory, but too big to show ;; Do not check for non-readable directories via tramp, as this causes a premature - ;; connect on incomplete tramp paths (after entring just method:). + ;; connect on incomplete tramp paths (after entering just method:). (let ((ido-enable-tramp-completion nil)) (and (numberp ido-max-directory-size) (ido-final-slash dir) (not (ido-is-unc-host dir)) (file-directory-p dir) - (> (nth 7 (file-attributes dir)) ido-max-directory-size)))) + (> (nth 7 (file-attributes (file-truename dir))) ido-max-directory-size)))) (defun ido-set-current-directory (dir &optional subdir no-merge) ;; Set ido's current directory to DIR or DIR/SUBDIR @@ -1722,8 +1734,9 @@ This function also adds a hook to the minibuffer." (unless (and ido-enable-tramp-completion (string-match "\\`/[^/]*@\\'" dir)) (setq dir (ido-final-slash dir t)))) - (if (get-buffer ido-completion-buffer) - (kill-buffer ido-completion-buffer)) + (and ido-completion-buffer + (get-buffer ido-completion-buffer) + (kill-buffer ido-completion-buffer)) (cond ((equal dir ido-current-directory) nil) @@ -1736,8 +1749,9 @@ This function also adds a hook to the minibuffer." (t (ido-trace "cd" dir) (setq ido-current-directory dir) - (if (get-buffer ido-completion-buffer) - (kill-buffer ido-completion-buffer)) + (and ido-completion-buffer + (get-buffer ido-completion-buffer) + (kill-buffer ido-completion-buffer)) (setq ido-directory-nonreadable (ido-nonreadable-directory-p dir)) (setq ido-directory-too-big (and (not ido-directory-nonreadable) (ido-directory-too-big-p dir))) @@ -1982,8 +1996,9 @@ If INITIAL is non-nil, it specifies the initial input string." (setq ido-text-init nil)) ido-completion-map nil hist)))) (ido-trace "read-from-minibuffer" ido-final-text) - (if (get-buffer ido-completion-buffer) - (kill-buffer ido-completion-buffer)) + (and ido-completion-buffer + (get-buffer ido-completion-buffer) + (kill-buffer ido-completion-buffer)) (ido-trace "\n_EXIT_" ido-exit) @@ -3266,7 +3281,7 @@ for first matching file." (while filenames (setq filename (car filenames) filenames (cdr filenames)) - (if (and (string-match "^/" filename) + (if (and (file-name-absolute-p filename) (file-exists-p filename)) (setq d (file-name-directory filename) f (file-name-nondirectory filename) @@ -3685,10 +3700,17 @@ This is to make them appear as if they were \"virtual buffers\"." (rex0 (if ido-enable-regexp text (regexp-quote text))) (rexq (concat rex0 (if slash ".*/" ""))) (re (if ido-enable-prefix (concat "\\`" rexq) rexq)) - (full-re (and do-full (not ido-enable-regexp) (not (string-match "\$\\'" rex0)) + (full-re (and do-full + (not (and (eq ido-cur-item 'buffer) + ido-buffer-disable-smart-matches)) + (not ido-enable-regexp) + (not (string-match "\$\\'" rex0)) (concat "\\`" rex0 (if slash "/" "") "\\'"))) (suffix-re (and do-full slash - (not ido-enable-regexp) (not (string-match "\$\\'" rex0)) + (not (and (eq ido-cur-item 'buffer) + ido-buffer-disable-smart-matches)) + (not ido-enable-regexp) + (not (string-match "\$\\'" rex0)) (concat rex0 "/\\'"))) (prefix-re (and full-re (not ido-enable-prefix) (concat "\\`" rexq))) @@ -3837,8 +3859,9 @@ This is to make them appear as if they were \"virtual buffers\"." (defun ido-choose-completion-string (choice &rest ignored) (when (ido-active) ;; Insert the completion into the buffer where completion was requested. - (if (get-buffer ido-completion-buffer) - (kill-buffer ido-completion-buffer)) + (and ido-completion-buffer + (get-buffer ido-completion-buffer) + (kill-buffer ido-completion-buffer)) (cond ((ido-active t) ;; ido-use-merged-list (setq ido-current-directory "" @@ -3857,7 +3880,8 @@ This is to make them appear as if they were \"virtual buffers\"." "Show possible completions in a *File Completions* buffer." (interactive) (setq ido-rescan nil) - (let ((temp-buf (get-buffer ido-completion-buffer)) + (let ((temp-buf (and ido-completion-buffer + (get-buffer ido-completion-buffer))) display-it full-list) (if (and (eq last-command this-command) temp-buf) ;; scroll buffer @@ -3876,7 +3900,7 @@ This is to make them appear as if they were \"virtual buffers\"." (scroll-other-window)) (set-buffer buf)) (setq display-it t)) - (if display-it + (if (and ido-completion-buffer display-it) (with-output-to-temp-buffer ido-completion-buffer (let ((completion-list (sort (cond @@ -4041,8 +4065,7 @@ their normal keybindings, except for the following: \\ RET Select the file at the front of the list of matches. If the list is empty, possibly prompt to create new file. -\\[ido-select-text] Select the current prompt as the buffer or file. -If no buffer or file is found, prompt for a new one. +\\[ido-select-text] Use the current input string verbatim. \\[ido-next-match] Put the first element at the end of the list. \\[ido-prev-match] Put the last element at the start of the list. @@ -4137,6 +4159,7 @@ If no buffer or file is found, prompt for a new one. matches all files. If there is only one match, select that file. If there is no common suffix, show a list of all matching files in a separate window. +\\[ido-magic-delete-char] Open the specified directory in Dired mode. \\[ido-edit-input] Edit input string (including directory). \\[ido-prev-work-directory] or \\[ido-next-work-directory] go to previous/next directory in work directory history. \\[ido-merge-work-directories] search for file in the work directory history. @@ -4148,7 +4171,6 @@ in a separate window. \\[ido-toggle-regexp] Toggle regexp searching. \\[ido-toggle-prefix] Toggle between substring and prefix matching. \\[ido-toggle-case] Toggle case-sensitive searching of file names. -\\[ido-toggle-vc] Toggle version control for this file. \\[ido-toggle-literal] Toggle literal reading of this file. \\[ido-completion-help] Show list of matching files in separate window. \\[ido-toggle-ignore] Toggle ignoring files listed in `ido-ignore-files'."