help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Using digits and letters to select company-mode candidates.


From: Hongyi Zhao
Subject: Re: Using digits and letters to select company-mode candidates.
Date: Mon, 4 Oct 2021 19:55:18 +0800

On Wed, Sep 29, 2021 at 6:49 PM Hongyi Zhao <hongyi.zhao@gmail.com> wrote:
>
> On Wed, Sep 29, 2021 at 2:23 PM Emanuel Berg via Users list for the
> GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote:
> >
> > Hongyi Zhao wrote:
> >
> > > (define-key map (kbd "<return>") nil))
> >
> > I've heard one should put keys to #'ignore if one wants them
> > to do nothing, is that what you want here?
> >
> > > The above code enables to select and insert company-mode
> > > candidates using digits without modifier. But it can only
> > > support 10 candidates, numbered 0-9. I want to extend this
> > > feature to support more candidates bumbered with a single
> > > digit or letter, e.g., 0-9, q, w, e, r, t, y
> >
> > Hm ... maybe something like this?
> >
> > (defun letter-to-pos (l)
> >   (let ((fst ?a))
> >     (when (>= l fst)
> >       (+ 10 (- l fst) ))))
> >
> > ;; (letter-to-pos ?a) ; 10
> > ;; (letter-to-pos ?b) ; 11
> > ;;                ..  ; ..
> > ;; (letter-to-pos ?z) ; 35
> >
> > Or this?
> >
> > (require 'cl-lib)
> >
> > (defun letter-to-index (l &optional offset)
> >   (let*((letters (list ?q ?w ?e ?r ?t ?y))
> >         (pos     (cl-position l letters))
> >         (offs    (or offset 10)) )
> >     (when pos
> >       (+ offs pos) )))
> >
> > ;; (letter-to-index ?a) ; nil
> > ;; (letter-to-index ?q) ; 10
> > ;; (letter-to-index ?w) ; 11
> > ;; (letter-to-index ?e) ; 12
> > ;; (letter-to-index ?r) ; 13
> > ;; (letter-to-index ?t) ; 14
> > ;; (letter-to-index ?y) ; 15
> > ;; (letter-to-index ?u) ; nil
>
> Just as the original author abo-abo has mentioned there [1]:
>
> Unless the number is potentially part of the candidate.
> In that case, insert the number.
>
>
> In the extended version, the corresponding problems should also be
> handled correctly, i.e.:
>
> Unless the number or letter is potentially part of the candidate.
> In that case, insert the number or letter.

Hongyi Zhao wrote:

> Unless the number is potentially part of the candidate.
> In that case, insert the number.

Make a list of candidates, then use `cl-find-if' and
`string-match'.

Thank you for your advice and tips. I will try to see if I can solve
this problem. I’ve just seen your reply in the archive here[1]. Since
you only reply to the list, not including my email address, which led
to all your replies to be deleted by my filter.

[1] https://lists.gnu.org/archive/html/help-gnu-emacs/2021-09/msg00548.html

BTW, the code snippet that confuses me the most is the following part [2]:

(defun ora--company-good-prefix-p (orig-fn prefix)
(unless (and (stringp prefix) (string-match-p "\\`[0-9]+\\'" prefix))
(funcall orig-fn prefix)))
(ora-advice-add 'company--good-prefix-p :around #'ora--company-good-prefix-p)

According to my tries, even I commented them out, the method suggested
there still works smoothly.

https://github.com/abo-abo/oremacs/blob/3809390019a7083c28e8502a82da94ca3a8ebba0/modes/ora-company.el#L41-L44

Best, HZ

> I'm afraid that the above suggested code doesn't include the
> corresponding manipulation for this problem.
>
> [1] 
> https://github.com/abo-abo/oremacs/blob/3809390019a7083c28e8502a82da94ca3a8ebba0/modes/ora-company.el#L22
>
> HZ



reply via email to

[Prev in Thread] Current Thread [Next in Thread]