diff options
author | Thierry Volpiatto <thierry.volpiatto@gmail.com> | 2019-11-21 20:41:19 +0100 |
---|---|---|
committer | Thierry Volpiatto <thierry.volpiatto@gmail.com> | 2019-11-21 20:48:17 +0100 |
commit | 5a62c4b49ca1ac45d576f55d266750b7d1d6668a (patch) | |
tree | 2d90d6646fdab44987a3a7734d94cfa71af63c68 /lisp | |
parent | 035931777bd89b939436fd1d8a2b8d5a80ede095 (diff) | |
download | emacs-5a62c4b49ca1ac45d576f55d266750b7d1d6668a.tar.gz emacs-5a62c4b49ca1ac45d576f55d266750b7d1d6668a.tar.bz2 emacs-5a62c4b49ca1ac45d576f55d266750b7d1d6668a.zip |
Add new variable to prevent flex completion style
matching spaces. This allows flex style working smoothly with other
styles like helm using spaces.
* lisp/minibuffer.el (completion-flex-nospace): New user var.
(completion-flex-try-completion): Use it.
(completion-flex-all-completions): Same.
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/minibuffer.el | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 6e72eb73f99..ee3d0095a9a 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -3494,6 +3494,11 @@ that is non-nil." ;;; "flex" completion, also known as flx/fuzzy/scatter completion ;; Completes "foo" to "frodo" and "farfromsober" +(defcustom completion-flex-nospace nil + "Make flex style fail when a space is found in pattern." + :version "27.1" + :type 'boolean) + (put 'flex 'completion--adjust-metadata 'completion--flex-adjust-metadata) (defun completion--flex-adjust-metadata (metadata) @@ -3539,29 +3544,31 @@ which is at the core of flex logic. The extra (defun completion-flex-try-completion (string table pred point) "Try to flex-complete STRING in TABLE given PRED and POINT." - (pcase-let ((`(,all ,pattern ,prefix ,suffix ,_carbounds) - (completion-substring--all-completions - string table pred point - #'completion-flex--make-flex-pattern))) - (if minibuffer-completing-file-name - (setq all (completion-pcm--filename-try-filter all))) - ;; Try some "merging", meaning add as much as possible to the - ;; user's pattern without losing any possible matches in `all'. - ;; i.e this will augment "cfi" to "config" if all candidates - ;; contain the substring "config". FIXME: this still won't - ;; augment "foo" to "froo" when matching "frodo" and - ;; "farfromsober". - (completion-pcm--merge-try pattern all prefix suffix))) + (unless (and completion-flex-nospace (string-match-p " " string)) + (pcase-let ((`(,all ,pattern ,prefix ,suffix ,_carbounds) + (completion-substring--all-completions + string table pred point + #'completion-flex--make-flex-pattern))) + (if minibuffer-completing-file-name + (setq all (completion-pcm--filename-try-filter all))) + ;; Try some "merging", meaning add as much as possible to the + ;; user's pattern without losing any possible matches in `all'. + ;; i.e this will augment "cfi" to "config" if all candidates + ;; contain the substring "config". FIXME: this still won't + ;; augment "foo" to "froo" when matching "frodo" and + ;; "farfromsober". + (completion-pcm--merge-try pattern all prefix suffix)))) (defun completion-flex-all-completions (string table pred point) "Get flex-completions of STRING in TABLE, given PRED and POINT." - (pcase-let ((`(,all ,pattern ,prefix ,_suffix ,_carbounds) - (completion-substring--all-completions - string table pred point - #'completion-flex--make-flex-pattern))) - (when all - (nconc (completion-pcm--hilit-commonality pattern all) - (length prefix))))) + (unless (and completion-flex-nospace (string-match-p " " string)) + (pcase-let ((`(,all ,pattern ,prefix ,_suffix ,_carbounds) + (completion-substring--all-completions + string table pred point + #'completion-flex--make-flex-pattern))) + (when all + (nconc (completion-pcm--hilit-commonality pattern all) + (length prefix)))))) ;; Initials completion ;; Complete /ums to /usr/monnier/src or lch to list-command-history. |