summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJSDurand <mmemmew@gmail.com>2022-11-07 17:52:29 +0800
committerJSDurand <mmemmew@gmail.com>2022-11-07 17:52:29 +0800
commit403b6278226d765470c11d1ceb709c45cb4457c9 (patch)
tree58ca90515185229cc755214fe2bc314d7aabde6f
parent5651f68e259a006ae588b34917f13d7c91707ab0 (diff)
eshell: j jumps immediately with only one match
* eshell-conf.el (eshell-j): Previously this function does not filter the candidates according to the user-specified predicate, and presents the user with a `completing-read' that has only one candidate. I do not know why this was implemented like that, so I am trying the approach of jumping immediately when given a predicate that only matches one candidate. Let us see how this goes then.
-rw-r--r--eshell-conf.el13
1 files changed, 11 insertions, 2 deletions
diff --git a/eshell-conf.el b/eshell-conf.el
index 3ee8352..12a35b6 100644
--- a/eshell-conf.el
+++ b/eshell-conf.el
@@ -342,7 +342,15 @@ candidates."
candidates
:test #'string=
;; In Haskell this woule be a simple function composition.
- :key (function (lambda (ls) (file-truename (cdr ls)))))))
+ :key (function (lambda (ls) (file-truename (cdr ls))))))
+ ;; Delete non-matching ones
+ (candidates
+ (delq
+ nil
+ (mapcar
+ (lambda (cand)
+ (cond ((string-match-p short-cut (cdr cand)) cand)))
+ candidates))))
(cond
((null candidates)
(user-error "No candidates matching %s found" short-cut))
@@ -354,7 +362,8 @@ candidates."
(assoc
(let ((completion-regexp-list
(cons short-cut completion-regexp-list)))
- (completing-read "Choose a link: " candidates nil t))
+ (completing-read
+ "Choose a link: " candidates nil t))
candidates #'string=))))))))
;;; convenient ls