* Using digits and letters to select company-mode candidates.
@ 2021-09-29 0:57 Hongyi Zhao
2021-09-29 6:23 ` Emanuel Berg via Users list for the GNU Emacs text editor
0 siblings, 1 reply; 6+ messages in thread
From: Hongyi Zhao @ 2021-09-29 0:57 UTC (permalink / raw)
To: help-gnu-emacs
The following code snippet comes here: [1]
;;;
(defun ora-company-number ()
"Forward to `company-complete-number'.
Unless the number is potentially part of the candidate.
In that case, insert the number."
(interactive)
(let* ((k (this-command-keys))
(re (concat "^" company-prefix k)))
(if (or (cl-find-if (lambda (s) (string-match re s))
company-candidates)
(> (string-to-number k)
(length company-candidates))
(looking-back "[0-9]+\\.[0-9]*" (line-beginning-position)))
(self-insert-command 1)
(company-complete-number
(if (equal k "0")
10
(string-to-number k))))))
(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)
(let ((map company-active-map))
(mapc (lambda (x) (define-key map (format "%d" x) 'ora-company-number))
(number-sequence 0 9))
(define-key map " " (lambda ()
(interactive)
(company-abort)
(self-insert-command 1)))
(define-key map (kbd "<return>") nil))
;;;
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,
so that I can select and insert more candidates conveniently. How can
the above code be improved to achieve this goal? Any hints will be
greatly appreciated.
[1] https://github.com/abo-abo/oremacs/blob/github/modes/ora-company.el#L22
Regards, HZ
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Using digits and letters to select company-mode candidates.
2021-09-29 0:57 Using digits and letters to select company-mode candidates Hongyi Zhao
@ 2021-09-29 6:23 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-09-29 10:42 ` Hongyi Zhao
2021-09-29 10:49 ` Hongyi Zhao
0 siblings, 2 replies; 6+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-09-29 6:23 UTC (permalink / raw)
To: help-gnu-emacs
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
HIH
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Using digits and letters to select company-mode candidates.
2021-09-29 6:23 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-09-29 10:42 ` Hongyi Zhao
2021-09-29 10:49 ` Hongyi Zhao
1 sibling, 0 replies; 6+ messages in thread
From: Hongyi Zhao @ 2021-09-29 10:42 UTC (permalink / raw)
To: Emanuel Berg, help-gnu-emacs
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?
I don't know. In fact, I commented out the following code block when using it:
; (define-key map " " (lambda ()
; (interactive)
; (company-abort)
; (self-insert-command 1)))
; (define-key map (kbd "<return>") nil)
> > 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
Thank you for your insightful comments/tips. But I still don't know
how to interface them with the original code snippets. Ashamed of my
superficial knowledge of lisp.
HZ
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Using digits and letters to select company-mode candidates.
2021-09-29 6:23 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-09-29 10:42 ` Hongyi Zhao
@ 2021-09-29 10:49 ` Hongyi Zhao
2021-09-29 18:50 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-10-04 11:55 ` Hongyi Zhao
1 sibling, 2 replies; 6+ messages in thread
From: Hongyi Zhao @ 2021-09-29 10:49 UTC (permalink / raw)
To: Emanuel Berg, help-gnu-emacs
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.
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
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Using digits and letters to select company-mode candidates.
2021-09-29 10:49 ` Hongyi Zhao
@ 2021-09-29 18:50 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-10-04 11:55 ` Hongyi Zhao
1 sibling, 0 replies; 6+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-09-29 18:50 UTC (permalink / raw)
To: help-gnu-emacs
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'.
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Using digits and letters to select company-mode candidates.
2021-09-29 10:49 ` Hongyi Zhao
2021-09-29 18:50 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-10-04 11:55 ` Hongyi Zhao
1 sibling, 0 replies; 6+ messages in thread
From: Hongyi Zhao @ 2021-10-04 11:55 UTC (permalink / raw)
To: Emanuel Berg, help-gnu-emacs
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
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-10-04 11:55 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-29 0:57 Using digits and letters to select company-mode candidates Hongyi Zhao
2021-09-29 6:23 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-09-29 10:42 ` Hongyi Zhao
2021-09-29 10:49 ` Hongyi Zhao
2021-09-29 18:50 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-10-04 11:55 ` Hongyi Zhao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).