unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] Add a new user option 'ido-big-directories'.
@ 2019-04-12 12:23 Philipp Stephani
  2019-04-12 12:58 ` Eli Zaretskii
  2019-04-17 18:58 ` Óscar Fuentes
  0 siblings, 2 replies; 9+ messages in thread
From: Philipp Stephani @ 2019-04-12 12:23 UTC (permalink / raw)
  To: emacs-devel; +Cc: Philipp Stephani

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.
---
 etc/NEWS               |  4 ++++
 lisp/ido.el            | 25 ++++++++++++++++++-------
 test/lisp/ido-tests.el |  7 +++++++
 3 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 9644c1ca22..8affadde6b 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -402,6 +402,10 @@ current and the previous or the next line, as before.
 *** New commands doc-view-presentation and doc-view-fit-window-to-page
 *** Added support for password-protected PDF files
 
+** Ido
+*** New user option 'ido-big-directories' to mark certain directory
+patterns as big.
+
 ** map.el
 *** Now also understands plists.
 *** Now defined via generic functions that can be extended via 'cl-defmethod'.
diff --git a/lisp/ido.el b/lisp/ido.el
index 0854014581..b5969f734c 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -735,6 +735,14 @@ ido-max-directory-size
 		 (integer :tag "Size in bytes" 30000))
   :group 'ido)
 
+(defcustom ido-big-directories nil
+  "Additional directories that should be considered big.
+Ido will ignore directories matching any of these regular
+expressions."
+  :type '(repeat regexp)
+  :group 'ido
+  :version "27.1")
+
 (defcustom ido-rotate-file-list-default nil
   "Non-nil means that Ido will always rotate file list to get default in front."
   :type 'boolean
@@ -1743,13 +1751,16 @@ ido-directory-too-big-p
   ;; 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 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)
-	 (> (file-attribute-size (file-attributes (file-truename dir)))
-	    ido-max-directory-size))))
+  (let ((ido-enable-tramp-completion nil)
+        (case-fold-search nil))
+    (or (seq-some (lambda (regexp) (string-match-p regexp dir))
+                  ido-big-directories)
+        (and (numberp ido-max-directory-size)
+	     (ido-final-slash dir)
+	     (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)
   ;; Set ido's current directory to DIR or DIR/SUBDIR
diff --git a/test/lisp/ido-tests.el b/test/lisp/ido-tests.el
index cb8f1d6306..c9736eb3ec 100644
--- a/test/lisp/ido-tests.el
+++ b/test/lisp/ido-tests.el
@@ -25,6 +25,8 @@
 
 ;;; Code:
 
+(require 'ido)
+
 (ert-deftest ido-tests--other-window-frame ()
   "Verifies that Bug#26360 is fixed."
   (should-not ido-mode)
@@ -44,4 +46,9 @@
         (should (commandp #'ido-display-buffer-other-frame)))
     (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
-- 
2.21.0.392.gf8f6787159e-goog




^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-04-19 12:23 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-12 12:23 [PATCH] Add a new user option 'ido-big-directories' Philipp Stephani
2019-04-12 12:58 ` Eli Zaretskii
2019-04-17 18:30   ` Philipp Stephani
2019-04-17 18:31     ` Philipp Stephani
2019-04-18 14:40       ` Eli Zaretskii
2019-04-19  8:35         ` Philipp Stephani
2019-04-17 18:58 ` Óscar Fuentes
2019-04-19  9:10   ` Philipp Stephani
2019-04-19 12:23     ` Óscar Fuentes

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).