[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: Using digits and letters to select company-mode candidates.,
Hongyi Zhao <=