From: Hongyi Zhao <hongyi.zhao@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: help-gnu-emacs <help-gnu-emacs@gnu.org>
Subject: Re: Incrementally display the Emacs command list filtered out by the input key words in real-time.
Date: Fri, 2 Jul 2021 15:23:22 +0800 [thread overview]
Message-ID: <CAGP6POJqGujB41z5t-GUWDQFTSfAo-AEM=1a+wa2ZiFUVxdyKg@mail.gmail.com> (raw)
In-Reply-To: <83mtr5jkpb.fsf@gnu.org>
On Fri, Jul 2, 2021 at 2:26 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Hongyi Zhao <hongyi.zhao@gmail.com>
> > Date: Fri, 2 Jul 2021 13:22:11 +0800
> >
> > Say, when I input "foo bar", the matched command list are
> > incrementally displayed immediately, and finally the ones which
> > including "foo" and "bar" in any part of the candidate commands are
> > filtered out. How do I configure my init file to implement this
> > feature?
>
> Explore the various completion styles, perhaps rearranging their order
> in the variable completion-styles (see its doc string and the
> documentation in the user manual for details).
I tried the following code snippet posted at
<https://emacs.stackexchange.com/questions/13500/fuzzy-completion-style>,
but there is no effect at all:
(defun completion-naive-fuzzy-completion (string table predicate point
&optional all-p)
(let* ((beforepoint (substring string 0 point))
(afterpoint (substring string point))
(boundaries (completion-boundaries beforepoint table
predicate afterpoint))
(prefix (substring beforepoint 0 (car boundaries)))
(infix (concat
(substring beforepoint (car boundaries))
(substring afterpoint 0 (cdr boundaries))))
(suffix (substring afterpoint (cdr boundaries)))
;; |- string -|
;; point^
;; |- boundaries -|
;; |- prefix -|- infix -|- suffix -|
;;
;; Infix is the part supposed to be completed by table, AFAIKT.
(regexp (concat "\\`"
(mapconcat
(lambda (x)
(concat "[^" (string x) "]*?" (string x)))
infix
"")
".*\\'"))
(candidates (cl-remove-if-not
(apply-partially 'string-match-p regexp)
(all-completions prefix table predicate))))
(if all-p
;; Implement completion-all-completions interface
(when candidates
;; Not doing this may result in an error.
(setcdr (last candidates) (length prefix))
candidates)
;; Implement completion-try-completions interface
(cond
((and (= (length candidates) 1)
(equal infix (car candidates)))
t)
((= (length candidates) 1)
;; Avoid quirk of double / for filename completion. I don't
;; know how this is *supposed* to be handled.
(when (and (> (length (car candidates)) 0)
(> (length suffix) 0)
(char-equal (aref (car candidates)
(1- (length (car candidates))))
(aref suffix 0)))
(setq suffix (substring suffix 1)))
(cons (concat prefix (car candidates) suffix)
(length (concat prefix (car candidates)))))
;; Do nothing, i.e leave string as it is.
(t (cons string point))))))
(defun completion-naive-fuzzy-try-completion (string table predicate point)
(completion-naive-fuzzy-completion string table predicate point))
(defun completion-naive-fuzzy-all-completions (string table predicate point)
(completion-naive-fuzzy-completion string table predicate point 'all))
(add-to-list 'completion-styles-alist
'(naive-fuzzy
completion-naive-fuzzy-try-completion
completion-naive-fuzzy-all-completions
"Simple naive-fuzzy completion, which never alters the
string to complete, unless a unique match exists."))
;; (setq-local completion-styles '(naive-fuzzy))
HY
>
> And maybe try an alternative completion mode, like icompletion-mode.
>
--
Assoc. Prof. Hongyi Zhao <hongyi.zhao@gmail.com>
Theory and Simulation of Materials
Hebei Vocational University of Technology and Engineering
NO. 552 North Gangtie Road, Xingtai, China
next prev parent reply other threads:[~2021-07-02 7:23 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-02 5:22 Incrementally display the Emacs command list filtered out by the input key words in real-time Hongyi Zhao
2021-07-02 6:25 ` Eli Zaretskii
2021-07-02 7:23 ` Hongyi Zhao [this message]
2021-07-02 12:40 ` Tassilo Horn
2021-07-02 15:27 ` Hongyi Zhao
2021-07-02 14:43 ` [External] : " Drew Adams
2021-07-02 15:40 ` Hongyi Zhao
2021-07-03 18:49 ` Marcin Borkowski
2021-07-03 23:39 ` Hongyi Zhao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAGP6POJqGujB41z5t-GUWDQFTSfAo-AEM=1a+wa2ZiFUVxdyKg@mail.gmail.com' \
--to=hongyi.zhao@gmail.com \
--cc=eliz@gnu.org \
--cc=help-gnu-emacs@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.