[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/ido.el
From: |
Kim F . Storm |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/ido.el |
Date: |
Fri, 24 Sep 2004 19:55:26 -0400 |
Index: emacs/lisp/ido.el
diff -c emacs/lisp/ido.el:1.42 emacs/lisp/ido.el:1.43
*** emacs/lisp/ido.el:1.42 Wed Sep 22 22:49:07 2004
--- emacs/lisp/ido.el Fri Sep 24 23:48:48 2004
***************
*** 666,671 ****
--- 666,679 ----
:type 'integer
:group 'ido)
+ (defcustom ido-max-directory-size 30000
+ "*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."
+ :type '(choice (const :tag "No limit" nil)
+ (integer :tag "Size in bytes" 30000))
+ :group 'ido)
+
(defcustom ido-rotate-file-list-default nil
"*Non-nil means that `ido' will always rotate file list to get default in
front."
:type 'boolean
***************
*** 699,707 ****
:type '(choice string (const nil))
:group 'ido)
! (defcustom ido-decorations '( "{" "}" " | " " | ..." "[" "]" " [No match]" "
[Matched]" " [Not readable]")
"*List of strings used by ido to display the alternatives in the minibuffer.
! There are 9 elements in this list:
1st and 2nd elements are used as brackets around the prospect list,
3rd element is the separator between prospects (ignored if ido-separator is
set),
4th element is the string inserted at the end of a truncated list of
prospects,
--- 707,715 ----
:type '(choice string (const nil))
:group 'ido)
! (defcustom ido-decorations '( "{" "}" " | " " | ..." "[" "]" " [No match]" "
[Matched]" " [Not readable]" " [Too big]")
"*List of strings used by ido to display the alternatives in the minibuffer.
! There are 10 elements in this list:
1st and 2nd elements are used as brackets around the prospect list,
3rd element is the separator between prospects (ignored if ido-separator is
set),
4th element is the string inserted at the end of a truncated list of
prospects,
***************
*** 709,715 ****
can be completed using TAB,
7th element is the string displayed when there are a no matches, and
8th element is displayed if there is a single match (and faces are not used).
! 9th element is displayed when the current directory is non-readable."
:type '(repeat string)
:group 'ido)
--- 717,724 ----
can be completed using TAB,
7th element is the string displayed when there are a no matches, and
8th element is displayed if there is a single match (and faces are not used).
! 9th element is displayed when the current directory is non-readable.
! 10th element is displayed when directory exceeds `ido-max-directory-size'."
:type '(repeat string)
:group 'ido)
***************
*** 952,957 ****
--- 961,969 ----
;; Remember if current directory is non-readable (so we cannot do completion).
(defvar ido-directory-nonreadable)
+ ;; Remember if current directory is 'huge' (so we don't want to do
completion).
+ (defvar ido-directory-too-big)
+
;; Keep current item list if non-nil.
(defvar ido-keep-item-list)
***************
*** 1082,1087 ****
--- 1094,1101 ----
(defun ido-may-cache-directory (&optional dir)
(setq dir (or dir ido-current-directory))
(cond
+ ((ido-directory-too-big-p dir)
+ nil)
((and (ido-is-root-directory dir)
(or ido-enable-tramp-completion
(memq system-type '(windows-nt ms-dos))))
***************
*** 1425,1430 ****
--- 1439,1454 ----
(file-directory-p dir)
(not (file-readable-p dir)))))
+ (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:).
+ (let ((ido-enable-tramp-completion nil))
+ (and (numberp ido-max-directory-size)
+ (ido-final-slash dir)
+ (file-directory-p dir)
+ (> (nth 7 (file-attributes 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
(setq dir (ido-final-slash dir t))
***************
*** 1439,1444 ****
--- 1463,1470 ----
(if (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)))
t))
(defun ido-set-current-home (&optional dir)
***************
*** 1623,1632 ****
ido-rescan nil))
((eq ido-cur-item 'file)
(setq ido-ignored-list nil
! ido-cur-list (ido-make-file-list ido-default-item)))
((eq ido-cur-item 'dir)
(setq ido-ignored-list nil
! ido-cur-list (ido-make-dir-list ido-default-item)))
((eq ido-cur-item 'buffer)
(setq ido-ignored-list nil
ido-cur-list (ido-make-buffer-list ido-default-item)))
--- 1649,1662 ----
ido-rescan nil))
((eq ido-cur-item 'file)
(setq ido-ignored-list nil
! ido-cur-list (and (not ido-directory-nonreadable)
! (not ido-directory-too-big)
! (ido-make-file-list ido-default-item))))
((eq ido-cur-item 'dir)
(setq ido-ignored-list nil
! ido-cur-list (and (not ido-directory-nonreadable)
! (not ido-directory-too-big)
! (ido-make-dir-list ido-default-item))))
((eq ido-cur-item 'buffer)
(setq ido-ignored-list nil
ido-cur-list (ido-make-buffer-list ido-default-item)))
***************
*** 1802,1808 ****
(if (not ido-mode)
(call-interactively (or fallback 'switch-to-buffer))
(let* ((ido-context-switch-command switch-cmd)
! (buf (ido-read-buffer (or prompt "Buffer: ") default nil initial)))
;; Choose the buffer name: either the text typed in, or the head
;; of the list of matches
--- 1832,1841 ----
(if (not ido-mode)
(call-interactively (or fallback 'switch-to-buffer))
(let* ((ido-context-switch-command switch-cmd)
! (ido-current-directory nil)
! (ido-directory-nonreadable nil)
! (ido-directory-too-big nil)
! (buf (ido-read-internal 'buffer (or prompt "Buffer: ")
'ido-buffer-history default nil initial)))
;; Choose the buffer name: either the text typed in, or the head
;; of the list of matches
***************
*** 1845,1863 ****
(set-buffer-major-mode buf))
(ido-visit-buffer buf method t))))))
- ;;;###autoload
- (defun ido-read-buffer (prompt &optional default require-match initial)
- "Replacement for the built-in `read-buffer'.
- Return the name of a buffer selected.
- PROMPT is the prompt to give to the user. DEFAULT if given is the default
- buffer to be selected, which will go to the front of the list.
- If REQUIRE-MATCH is non-nil, an existing-buffer must be selected.
- If INITIAL is non-nil, it specifies the initial input string."
- (let ((ido-current-directory nil)
- (ido-directory-nonreadable nil)
- (ido-context-switch-command (if (boundp 'ido-context-switch-command)
ido-context-switch-command 'ignore)))
- (ido-read-internal 'buffer prompt 'ido-buffer-history default
require-match initial)))
-
(defun ido-record-work-directory (&optional dir)
(when (and (numberp ido-max-work-directory-list) (>
ido-max-work-directory-list 0))
(if (and (setq dir (or dir ido-current-directory)) (> (length dir) 0))
--- 1878,1883 ----
***************
*** 1905,1910 ****
--- 1925,1932 ----
(setq item 'file))
(let* ((ido-current-directory (ido-expand-directory default))
(ido-directory-nonreadable (ido-nonreadable-directory-p
ido-current-directory))
+ (ido-directory-too-big (and (not ido-directory-nonreadable)
+ (ido-directory-too-big-p
ido-current-directory)))
(ido-context-switch-command switch-cmd)
filename)
***************
*** 2079,2084 ****
--- 2101,2112 ----
(setq ido-exit 'refresh)
(exit-minibuffer))))
+ (ido-directory-too-big
+ (setq ido-directory-too-big nil)
+ (setq ido-text-init ido-text)
+ (setq ido-exit 'refresh)
+ (exit-minibuffer))
+
((not ido-matches)
(when ido-completion-buffer
(call-interactively (setq this-command ido-cannot-complete-command))))
***************
*** 2182,2188 ****
(defun ido-toggle-ignore ()
"Toggle ignoring files specified with `ido-ignore-files'."
(interactive)
! (setq ido-process-ignore-lists (not ido-process-ignore-lists))
(setq ido-text-init ido-text)
(setq ido-exit 'refresh)
(exit-minibuffer))
--- 2210,2218 ----
(defun ido-toggle-ignore ()
"Toggle ignoring files specified with `ido-ignore-files'."
(interactive)
! (if ido-directory-too-big
! (setq ido-directory-too-big nil)
! (setq ido-process-ignore-lists (not ido-process-ignore-lists)))
(setq ido-text-init ido-text)
(setq ido-exit 'refresh)
(exit-minibuffer))
***************
*** 2324,2329 ****
--- 2354,2360 ----
(not (equal dir ido-current-directory))
(file-directory-p dir)
(or (not must-match)
+ ;; TODO. check for nonreadable and too-big.
(ido-set-matches1
(if (eq ido-cur-item 'file)
(ido-make-file-list1 dir)
***************
*** 2581,2587 ****
(defun ido-all-completions ()
;; Return unsorted list of all competions.
! (let ((ido-process-ignore-lists nil))
(cond
((eq ido-cur-item 'file)
(ido-make-file-list1 ido-current-directory))
--- 2612,2619 ----
(defun ido-all-completions ()
;; Return unsorted list of all competions.
! (let ((ido-process-ignore-lists nil)
! (ido-directory-too-big nil))
(cond
((eq ido-cur-item 'file)
(ido-make-file-list1 ido-current-directory))
***************
*** 2700,2705 ****
--- 2732,2738 ----
(or ido-merge-ftp-work-directories
(not (ido-is-ftp-directory dir)))
(file-directory-p dir)
+ ;; TODO. check for nonreadable and too-big.
(setq fl (if (eq ido-cur-item 'file)
(ido-make-file-list1 dir t)
(ido-make-dir-list1 dir t))))
***************
*** 2780,2785 ****
--- 2813,2820 ----
(defun ido-file-name-all-completions1 (dir)
(cond
((ido-nonreadable-directory-p dir) '())
+ ;; do not check (ido-directory-too-big-p dir) here.
+ ;; Caller must have done that if necessary.
((and ido-enable-tramp-completion
(string-match "\\`/\\([^/:]+:\\([^/:@address@hidden)?\\)\\'" dir))
***************
*** 3616,3622 ****
(expand-file-name "/" ido-current-directory)
"/"))
(setq refresh t))
! ((and ido-directory-nonreadable
(file-directory-p (concat ido-current-directory
(file-name-directory contents))))
(ido-set-current-directory
(concat ido-current-directory (file-name-directory contents)))
--- 3651,3657 ----
(expand-file-name "/" ido-current-directory)
"/"))
(setq refresh t))
! ((and (or ido-directory-nonreadable ido-directory-too-big)
(file-directory-p (concat ido-current-directory
(file-name-directory contents))))
(ido-set-current-directory
(concat ido-current-directory (file-name-directory contents)))
***************
*** 3678,3683 ****
--- 3713,3719 ----
(when (and (not ido-matches)
(not ido-directory-nonreadable)
+ (not ido-directory-too-big)
;; ido-rescan ?
ido-process-ignore-lists
ido-ignored-list)
***************
*** 3701,3707 ****
(not (ido-is-root-directory))
(> (length contents) 1)
(not (string-match "[$]" contents))
! (not ido-directory-nonreadable))
(ido-trace "merge?")
(if ido-use-merged-list
(ido-undo-merge-work-directory contents nil)
--- 3737,3744 ----
(not (ido-is-root-directory))
(> (length contents) 1)
(not (string-match "[$]" contents))
! (not ido-directory-nonreadable)
! (not ido-directory-too-big))
(ido-trace "merge?")
(if ido-use-merged-list
(ido-undo-merge-work-directory contents nil)
***************
*** 3766,3771 ****
--- 3803,3810 ----
(cond
(ido-directory-nonreadable
(or (nth 8 ido-decorations) " [Not readable]"))
+ (ido-directory-too-big
+ (or (nth 9 ido-decorations) " [Too big]"))
(ido-report-no-match
(nth 6 ido-decorations)) ;; [No match]
(t "")))
***************
*** 3872,3879 ****
(put 'dired-do-rename 'ido 'ignore)
;;;###autoload
(defun ido-read-file-name (prompt &optional dir default-filename mustmatch
initial predicate)
! "Read file name, prompting with PROMPT and completing in directory DIR.
See `read-file-name' for additional parameters."
(let (filename)
(cond
--- 3911,3936 ----
(put 'dired-do-rename 'ido 'ignore)
;;;###autoload
+ (defun ido-read-buffer (prompt &optional default require-match)
+ "Ido replacement for the built-in `read-buffer'.
+ Return the name of a buffer selected.
+ PROMPT is the prompt to give to the user. DEFAULT if given is the default
+ buffer to be selected, which will go to the front of the list.
+ If REQUIRE-MATCH is non-nil, an existing-buffer must be selected."
+ (let* ((ido-current-directory nil)
+ (ido-directory-nonreadable nil)
+ (ido-directory-too-big nil)
+ (ido-context-switch-command 'ignore)
+ (buf (ido-read-internal 'buffer prompt 'ido-buffer-history default
require-match)))
+ (if (eq ido-exit 'fallback)
+ (let ((read-buffer-function nil))
+ (read-buffer prompt default require-match))
+ buf)))
+
+ ;;;###autoload
(defun ido-read-file-name (prompt &optional dir default-filename mustmatch
initial predicate)
! "Ido replacement for the built-in `read-file-name'.
! Read file name, prompting with PROMPT and completing in directory DIR.
See `read-file-name' for additional parameters."
(let (filename)
(cond
***************
*** 3890,3895 ****
--- 3947,3954 ----
(vc-handled-backends (and (boundp 'vc-handled-backends)
vc-handled-backends))
(ido-current-directory (ido-expand-directory dir))
(ido-directory-nonreadable (not (file-readable-p
ido-current-directory)))
+ (ido-directory-too-big (and (not ido-directory-nonreadable)
+ (ido-directory-too-big-p
ido-current-directory)))
(ido-work-directory-index -1)
(ido-work-file-index -1)
(ido-find-literal nil))
***************
*** 3911,3923 ****
;;;###autoload
(defun ido-read-directory-name (prompt &optional dir default-dirname
mustmatch initial)
! "Read directory name, prompting with PROMPT and completing in directory DIR.
! See `read-file-name' for additional parameters."
(let* (filename
(ido-context-switch-command 'ignore)
ido-saved-vc-hb
(ido-current-directory (ido-expand-directory dir))
(ido-directory-nonreadable (not (file-readable-p
ido-current-directory)))
(ido-work-directory-index -1)
(ido-work-file-index -1))
(setq filename
--- 3970,3985 ----
;;;###autoload
(defun ido-read-directory-name (prompt &optional dir default-dirname
mustmatch initial)
! "Ido replacement for the built-in `read-directory-name'.
! Read directory name, prompting with PROMPT and completing in directory DIR.
! See `read-directory-name' for additional parameters."
(let* (filename
(ido-context-switch-command 'ignore)
ido-saved-vc-hb
(ido-current-directory (ido-expand-directory dir))
(ido-directory-nonreadable (not (file-readable-p
ido-current-directory)))
+ (ido-directory-too-big (and (not ido-directory-nonreadable)
+ (ido-directory-too-big-p
ido-current-directory)))
(ido-work-directory-index -1)
(ido-work-file-index -1))
(setq filename
***************
*** 3929,3935 ****
;;;###autoload
(defun ido-completing-read (prompt choices &optional predicate require-match
initial-input hist def)
! "Read a string in the minibuffer with ido-style completion.
PROMPT is a string to prompt with; normally it ends in a colon and a space.
CHOICES is a list of strings which are the possible completions.
PREDICATE is currently ignored; it is included to be compatible
--- 3991,3998 ----
;;;###autoload
(defun ido-completing-read (prompt choices &optional predicate require-match
initial-input hist def)
! "Ido replacement for the built-in `completing-read'.
! Read a string in the minibuffer with ido-style completion.
PROMPT is a string to prompt with; normally it ends in a colon and a space.
CHOICES is a list of strings which are the possible completions.
PREDICATE is currently ignored; it is included to be compatible
***************
*** 3944,3949 ****
--- 4007,4013 ----
DEF, if non-nil, is the default value."
(let ((ido-current-directory nil)
(ido-directory-nonreadable nil)
+ (ido-directory-too-big nil)
(ido-context-switch-command 'ignore)
(ido-choice-list choices))
(ido-read-internal 'list prompt hist def require-match initial-input)))