]> git.eshelyaron.com Git - emacs.git/commitdiff
Add new icomplete-force-complete-and-exit-unless-directory command scratch/some-more-icomplete-hacks
authorJoão Távora <joaotavora@gmail.com>
Mon, 4 Feb 2019 16:00:15 +0000 (16:00 +0000)
committerJoão Távora <joaotavora@gmail.com>
Mon, 4 Feb 2019 16:06:52 +0000 (16:06 +0000)
Useful if you want icomplete to behave a little more like Ido.

(define-key icomplete-minibuffer-map (kbd "RET")
'icomplete-force-complete-and-exit-unless-directory)

* lisp/icomplete.el
  (icomplete-force-complete-and-exit-unless-directory): New command.

lisp/icomplete.el

index 102ebb9526f5b1c02191dfb0a55a046818b591ea..67c8ef661f2c9c6f47ea78d4673813647fd39aff 100644 (file)
@@ -167,6 +167,19 @@ the default otherwise."
       (minibuffer-force-complete-and-exit)
     (minibuffer-complete-and-exit)))
 
+(defun icomplete-force-complete-and-exit-unless-directory ()
+  "Complete minibuffer, don't exit if completing a directory."
+  (interactive)
+  (minibuffer-force-complete nil nil 'dont-cycle)
+  (let* ((meta (cdr (funcall minibuffer-completion-table
+                             nil nil 'metadata)))
+         (category (cdr (assq 'category meta))))
+    (unless (and (eq 'file category)
+                 (file-directory-p
+                  (buffer-substring-no-properties (icomplete--field-beg)
+                                                  (icomplete--field-end))))
+      (minibuffer-complete-and-exit))))
+
 (defun icomplete-force-complete-and-kill ()
   "Complete minibuffer, kill current prospect, don't exit.
 Killing the current prospect has different meanings according to