[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Incrementally display the Emacs command list filtered out by the inp
Re: Incrementally display the Emacs command list filtered out by the input key words in real-time.
Fri, 2 Jul 2021 15:23:22 +0800
On Fri, Jul 2, 2021 at 2:26 PM Eli Zaretskii <email@example.com> wrote:
> > From: Hongyi Zhao <firstname.lastname@example.org>
> > 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
but there is no effect at all:
(defun completion-naive-fuzzy-completion (string table predicate point
(let* ((beforepoint (substring string 0 point))
(afterpoint (substring string point))
(boundaries (completion-boundaries beforepoint table
(prefix (substring beforepoint 0 (car boundaries)))
(substring beforepoint (car boundaries))
(substring afterpoint 0 (cdr boundaries))))
(suffix (substring afterpoint (cdr boundaries)))
;; |- string -|
;; |- boundaries -|
;; |- prefix -|- infix -|- suffix -|
;; Infix is the part supposed to be completed by table, AFAIKT.
(regexp (concat "\\`"
(concat "[^" (string x) "]*?" (string x)))
(apply-partially 'string-match-p regexp)
(all-completions prefix table predicate))))
;; Implement completion-all-completions interface
;; Not doing this may result in an error.
(setcdr (last candidates) (length prefix))
;; Implement completion-try-completions interface
((and (= (length candidates) 1)
(equal infix (car candidates)))
((= (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))
"Simple naive-fuzzy completion, which never alters the
string to complete, unless a unique match exists."))
;; (setq-local completion-styles '(naive-fuzzy))
> And maybe try an alternative completion mode, like icompletion-mode.
Assoc. Prof. Hongyi Zhao <email@example.com>
Theory and Simulation of Materials
Hebei Vocational University of Technology and Engineering
NO. 552 North Gangtie Road, Xingtai, China