summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoão Távora <joaotavora@gmail.com>2019-02-04 16:00:15 +0000
committerJoão Távora <joaotavora@gmail.com>2019-02-04 16:06:52 +0000
commit0943c81ecd08252e521e841e2614a1516dc64c9e (patch)
tree2c58f7565f83dba4f540bb9fe24e12ce71081b33
parent8c9b9144cfdee7d40886044964e4b10ca1690815 (diff)
downloademacs-scratch/some-more-icomplete-hacks.tar.gz
Add new icomplete-force-complete-and-exit-unless-directory commandscratch/some-more-icomplete-hacks
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.
-rw-r--r--lisp/icomplete.el13
1 files changed, 13 insertions, 0 deletions
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 102ebb9526f..67c8ef661f2 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -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