Commit f5e3c2cc authored by Philipp Stephani's avatar Philipp Stephani Committed by Philipp Stephani

Add a new user option 'ido-big-directories'.

This provides an alternative to 'ido-max-directory-size', for
directories that are statically known to be too big for Ido
completion.

* lisp/ido.el (ido-big-directories): New user option.
(ido-directory-too-big-p): Use it.

* test/lisp/ido-tests.el (ido-directory-too-big-p): New unit test.
parent 74f54af2
Pipeline #1345 failed with stage
in 60 minutes and 1 second
...@@ -410,6 +410,11 @@ current and the previous or the next line, as before. ...@@ -410,6 +410,11 @@ current and the previous or the next line, as before.
*** New commands doc-view-presentation and doc-view-fit-window-to-page *** New commands doc-view-presentation and doc-view-fit-window-to-page
*** Added support for password-protected PDF files *** Added support for password-protected PDF files
** Ido
*** New user option 'ido-big-directories' to mark directories whose
names match certain regular expressions as big. Ido won't attempt to
list the contents of such directories when completing file names.
** map.el ** map.el
*** Now also understands plists. *** Now also understands plists.
*** Now defined via generic functions that can be extended via 'cl-defmethod'. *** Now defined via generic functions that can be extended via 'cl-defmethod'.
......
...@@ -735,6 +735,14 @@ not provide the normal completion. To show the completions, use \\[ido-toggle-i ...@@ -735,6 +735,14 @@ not provide the normal completion. To show the completions, use \\[ido-toggle-i
(integer :tag "Size in bytes" 30000)) (integer :tag "Size in bytes" 30000))
:group 'ido) :group 'ido)
(defcustom ido-big-directories nil
"List of directory pattern strings that should be considered big.
Ido won't attempt to list the contents of directories matching
any of these regular expressions when completing file names."
:type '(repeat regexp)
:group 'ido
:version "27.1")
(defcustom ido-rotate-file-list-default nil (defcustom ido-rotate-file-list-default nil
"Non-nil means that Ido will always rotate file list to get default in front." "Non-nil means that Ido will always rotate file list to get default in front."
:type 'boolean :type 'boolean
...@@ -1743,13 +1751,16 @@ is enabled then some keybindings are changed in the keymap." ...@@ -1743,13 +1751,16 @@ is enabled then some keybindings are changed in the keymap."
;; Return t if dir is a directory, but too big to show ;; 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 ;; Do not check for non-readable directories via tramp, as this causes a premature
;; connect on incomplete tramp paths (after entering just method:). ;; connect on incomplete tramp paths (after entering just method:).
(let ((ido-enable-tramp-completion nil)) (let ((ido-enable-tramp-completion nil)
(and (numberp ido-max-directory-size) (case-fold-search nil))
(ido-final-slash dir) (or (seq-some (lambda (regexp) (string-match-p regexp dir))
(not (ido-is-unc-host dir)) ido-big-directories)
(file-directory-p dir) (and (numberp ido-max-directory-size)
(> (file-attribute-size (file-attributes (file-truename dir))) (ido-final-slash dir)
ido-max-directory-size)))) (not (ido-is-unc-host dir))
(file-directory-p dir)
(> (file-attribute-size (file-attributes (file-truename dir)))
ido-max-directory-size)))))
(defun ido-set-current-directory (dir &optional subdir no-merge) (defun ido-set-current-directory (dir &optional subdir no-merge)
;; Set ido's current directory to DIR or DIR/SUBDIR ;; Set ido's current directory to DIR or DIR/SUBDIR
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
;;; Code: ;;; Code:
(require 'ido)
(ert-deftest ido-tests--other-window-frame () (ert-deftest ido-tests--other-window-frame ()
"Verifies that Bug#26360 is fixed." "Verifies that Bug#26360 is fixed."
(should-not ido-mode) (should-not ido-mode)
...@@ -44,4 +46,9 @@ ...@@ -44,4 +46,9 @@
(should (commandp #'ido-display-buffer-other-frame))) (should (commandp #'ido-display-buffer-other-frame)))
(ido-mode 0))) (ido-mode 0)))
(ert-deftest ido-directory-too-big-p ()
(should-not (ido-directory-too-big-p "/some/dir/"))
(let ((ido-big-directories (cons (rx "me/di") ido-big-directories)))
(should (ido-directory-too-big-p "/some/dir/"))))
;;; ido-tests.el ends here ;;; ido-tests.el ends here
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment