GNU bug report logs - #62157
More control over the mouse behaviour in eglot

Previous Next

Package: emacs;

Reported by: Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>

Date: Mon, 13 Mar 2023 07:22:01 UTC

Severity: normal

Done: Stefan Kangas <stefankangas <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 62157 in the body.
You can then email your comments to 62157 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#62157; Package emacs. (Mon, 13 Mar 2023 07:22:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Mon, 13 Mar 2023 07:22:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: More control over the mouse behaviour in eglot
Date: Mon, 13 Mar 2023 08:20:48 +0100
When I edit Python with eglot,  mouse-1-down opens the eglot code
actions menu when over a place where there is a possible action. I'd
like to be able to define the mouse event to open the menu myself. In
the same line, I'd like to control the items on the code actions mouse
menu.


-- 
Fragen sind nicht da um beantwortet zu werden,
Fragen sind da um gestellt zu werden
Georg Kreisler

Headaches with a Juju log:
unit-basic-16: 09:17:36 WARNING juju.worker.uniter.operation we should
run a leader-deposed hook here, but we can't yet




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#62157; Package emacs. (Mon, 13 Mar 2023 15:48:01 GMT) Full text and rfc822 format available.

Message #8 received at 62157 <at> debbugs.gnu.org (full text, mbox):

From: João Távora <joaotavora <at> gmail.com>
To: Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>
Cc: 62157 <at> debbugs.gnu.org
Subject: Re: bug#62157: More control over the mouse behaviour in eglot
Date: Mon, 13 Mar 2023 15:47:38 +0000
On Mon, Mar 13, 2023 at 7:22 AM Pedro Andres Aranda Gutierrez
<paaguti <at> gmail.com> wrote:
>
> When I edit Python with eglot,  mouse-1-down opens the eglot code
> actions menu when over a place where there is a possible action. I'd
> like to be able to define the mouse event to open the menu myself. In
> the same line, I'd like to control the items on the code actions mouse
> menu.

These are two separate requests.  I'll focus on the first one,
as the second one is obscure.  It probablyneeds its own separate
issue describing a reproducible observable example of what "item
control" is desired.

So, having mouse-1 for the binding to get code actions in diagnostics
is indeed not good, because it prevents point from being put on
a certain character using mouse-1, which should really nothappen.

Currently, to configure it, the user must place a certain property on
the symbols eglot-note eglot-warning eglot-error, which is not
easy at all.

Can you try this patch?  It also changes the default binding to
[mouse-2].

diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index 2491c86ea5b..256b4cd93ba 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -2084,15 +2084,18 @@ eglot--mode-line-format
 (defalias 'eglot--make-diag 'flymake-make-diagnostic)
 (defalias 'eglot--diag-data 'flymake-diagnostic-data)

+(defvar eglot-diagnostics-map
+  "Map active in Eglot-backed Flymake diagnostic overlays."
+  (let ((map (make-sparse-keymap)))
+    (define-key map [mouse-1] 'eglot-code-actions-at-mouse)
+    map))
+
 (cl-loop for i from 1
          for type in '(eglot-note eglot-warning eglot-error)
          do (put type 'flymake-overlay-control
                  `((mouse-face . highlight)
                    (priority . ,(+ 50 i))
-                   (keymap . ,(let ((map (make-sparse-keymap)))
-                                (define-key map [mouse-1]
-                                            (eglot--mouse-call
'eglot-code-actions))
-                                map)))))
+                   (keymap . ,eglot-diagnostics-map))))


 ;;; Protocol implementation (Requests, notifications, etc)
@@ -3335,6 +3338,9 @@ eglot-code-actions
         (eglot--read-execute-code-action actions server action-kind)
       actions)))

+(defalias 'eglot-code-actions-at-mouse (eglot--mouse-call 'eglot-code-actions)
+  "Like `eglot-code-actions', but intended for mouse events.")
+
 (defun eglot--read-execute-code-action (actions server &optional action-kind)
   "Helper for interactive calls to `eglot-code-actions'."
   (let* ((menu-items

João




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#62157; Package emacs. (Mon, 13 Mar 2023 16:00:02 GMT) Full text and rfc822 format available.

Message #11 received at 62157 <at> debbugs.gnu.org (full text, mbox):

From: Robert Pluim <rpluim <at> gmail.com>
To: João Távora <joaotavora <at> gmail.com>
Cc: 62157 <at> debbugs.gnu.org, Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>
Subject: Re: bug#62157: More control over the mouse behaviour in eglot
Date: Mon, 13 Mar 2023 16:59:50 +0100
>>>>> On Mon, 13 Mar 2023 15:47:38 +0000, João Távora <joaotavora <at> gmail.com> said:
    João> Can you try this patch?  It also changes the default binding to
    João> [mouse-2].

I think you meant 'mouse-2', but you typed 'mouse-1' in the patch.

    João> diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
    João> index 2491c86ea5b..256b4cd93ba 100644
    João> --- a/lisp/progmodes/eglot.el
    João> +++ b/lisp/progmodes/eglot.el
    João> @@ -2084,15 +2084,18 @@ eglot--mode-line-format
    João>  (defalias 'eglot--make-diag 'flymake-make-diagnostic)
    João>  (defalias 'eglot--diag-data 'flymake-diagnostic-data)

    João> +(defvar eglot-diagnostics-map
    João> +  "Map active in Eglot-backed Flymake diagnostic overlays."
    João> +  (let ((map (make-sparse-keymap)))
    João> +    (define-key map [mouse-1] 'eglot-code-actions-at-mouse)
    João> +    map))
    João> +

Iʼm guessing eglot is not yet using `defvar-keymap' because of
backwards compatibility?

In any case, this doesnʼt make the binding easily changable, you have
to manually unset/set the `eglot-code-actions-at-mouse' binding. My
attempt to fix this descended into a circular dependency spiral
between the keymap and the key defcustom, so Iʼm hoping you know a
good way to do it :-)

Robert
-- 




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#62157; Package emacs. (Mon, 13 Mar 2023 16:11:01 GMT) Full text and rfc822 format available.

Message #14 received at 62157 <at> debbugs.gnu.org (full text, mbox):

From: João Távora <joaotavora <at> gmail.com>
To: Robert Pluim <rpluim <at> gmail.com>
Cc: 62157 <at> debbugs.gnu.org, Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>
Subject: Re: bug#62157: More control over the mouse behaviour in eglot
Date: Mon, 13 Mar 2023 16:09:59 +0000
On Mon, Mar 13, 2023 at 3:59 PM Robert Pluim <rpluim <at> gmail.com> wrote:
>
> >>>>> On Mon, 13 Mar 2023 15:47:38 +0000, João Távora <joaotavora <at> gmail.com> said:
>     João> Can you try this patch?  It also changes the default binding to
>     João> [mouse-2].
>
> I think you meant 'mouse-2', but you typed 'mouse-1' in the patch.

Yes, sorry.

>     João> diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
>     João> index 2491c86ea5b..256b4cd93ba 100644
>     João> --- a/lisp/progmodes/eglot.el
>     João> +++ b/lisp/progmodes/eglot.el
>     João> @@ -2084,15 +2084,18 @@ eglot--mode-line-format
>     João>  (defalias 'eglot--make-diag 'flymake-make-diagnostic)
>     João>  (defalias 'eglot--diag-data 'flymake-diagnostic-data)
>
>     João> +(defvar eglot-diagnostics-map
>     João> +  "Map active in Eglot-backed Flymake diagnostic overlays."
>     João> +  (let ((map (make-sparse-keymap)))
>     João> +    (define-key map [mouse-1] 'eglot-code-actions-at-mouse)
>     João> +    map))
>     João> +
>
> Iʼm guessing eglot is not yet using `defvar-keymap' because of
> backwards compatibility?

I'd think so yes.

> In any case, this doesnʼt make the binding easily changable, you have
> to manually unset/set the `eglot-code-actions-at-mouse' binding. My
> attempt to fix this descended into a circular dependency spiral
> between the keymap and the key defcustom, so Iʼm hoping you know a
> good way to do it :-)

A key defcustom isn't needed IMO.  You may even want multiple
bindings there.  99% percent of users will like the default
bindings, the others can

  (define-key eglot-diagnostics-map [mouse-2] nil)

or

  (unbind-key [mouse-1] eglot-diagnostics-map)

which I don't know if exists in older Emacsen.

João




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#62157; Package emacs. (Mon, 13 Mar 2023 16:38:02 GMT) Full text and rfc822 format available.

Message #17 received at 62157 <at> debbugs.gnu.org (full text, mbox):

From: Robert Pluim <rpluim <at> gmail.com>
To: João Távora <joaotavora <at> gmail.com>
Cc: 62157 <at> debbugs.gnu.org, Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>
Subject: Re: bug#62157: More control over the mouse behaviour in eglot
Date: Mon, 13 Mar 2023 17:36:58 +0100
>>>>> On Mon, 13 Mar 2023 16:09:59 +0000, João Távora <joaotavora <at> gmail.com> said:
    >> In any case, this doesnʼt make the binding easily changable, you have
    >> to manually unset/set the `eglot-code-actions-at-mouse' binding. My
    >> attempt to fix this descended into a circular dependency spiral
    >> between the keymap and the key defcustom, so Iʼm hoping you know a
    >> good way to do it :-)

    João> A key defcustom isn't needed IMO.  You may even want multiple
    João> bindings there.  99% percent of users will like the default
    João> bindings, the others can

OK. We can always add it if people ask for it.

    João>   (define-key eglot-diagnostics-map [mouse-2] nil)

    João> or

    João>   (unbind-key [mouse-1] eglot-diagnostics-map)

    João> which I don't know if exists in older Emacsen.

I think itʼs an emacs-29 thing. Although it does look kind of
redundant with `keymap-unset' (which is also new in emacs-29) :-)

Robert
-- 




Reply sent to Stefan Kangas <stefankangas <at> gmail.com>:
You have taken responsibility. (Tue, 12 Sep 2023 00:23:02 GMT) Full text and rfc822 format available.

Notification sent to Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>:
bug acknowledged by developer. (Tue, 12 Sep 2023 00:23:02 GMT) Full text and rfc822 format available.

Message #22 received at 62157-done <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: João Távora <joaotavora <at> gmail.com>
Cc: 62157-done <at> debbugs.gnu.org,
 Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>
Subject: Re: bug#62157: More control over the mouse behaviour in eglot
Date: Mon, 11 Sep 2023 17:22:41 -0700
João Távora <joaotavora <at> gmail.com> writes:

> On Mon, Mar 13, 2023 at 7:22 AM Pedro Andres Aranda Gutierrez
> <paaguti <at> gmail.com> wrote:
>>
>> When I edit Python with eglot,  mouse-1-down opens the eglot code
>> actions menu when over a place where there is a possible action. I'd
>> like to be able to define the mouse event to open the menu myself. In
>> the same line, I'd like to control the items on the code actions mouse
>> menu.
>
> These are two separate requests.  I'll focus on the first one,
> as the second one is obscure.  It probablyneeds its own separate
> issue describing a reproducible observable example of what "item
> control" is desired.
>
> So, having mouse-1 for the binding to get code actions in diagnostics
> is indeed not good, because it prevents point from being put on
> a certain character using mouse-1, which should really nothappen.
>
> Currently, to configure it, the user must place a certain property on
> the symbols eglot-note eglot-warning eglot-error, which is not
> easy at all.
>
> Can you try this patch?  It also changes the default binding to
> [mouse-2].
>
> diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
> index 2491c86ea5b..256b4cd93ba 100644
> --- a/lisp/progmodes/eglot.el
> +++ b/lisp/progmodes/eglot.el
> @@ -2084,15 +2084,18 @@ eglot--mode-line-format
>  (defalias 'eglot--make-diag 'flymake-make-diagnostic)
>  (defalias 'eglot--diag-data 'flymake-diagnostic-data)
>
> +(defvar eglot-diagnostics-map
> +  "Map active in Eglot-backed Flymake diagnostic overlays."
> +  (let ((map (make-sparse-keymap)))
> +    (define-key map [mouse-1] 'eglot-code-actions-at-mouse)
> +    map))
> +
>  (cl-loop for i from 1
>           for type in '(eglot-note eglot-warning eglot-error)
>           do (put type 'flymake-overlay-control
>                   `((mouse-face . highlight)
>                     (priority . ,(+ 50 i))
> -                   (keymap . ,(let ((map (make-sparse-keymap)))
> -                                (define-key map [mouse-1]
> -                                            (eglot--mouse-call
> 'eglot-code-actions))
> -                                map)))))
> +                   (keymap . ,eglot-diagnostics-map))))
>
>
>  ;;; Protocol implementation (Requests, notifications, etc)
> @@ -3335,6 +3338,9 @@ eglot-code-actions
>          (eglot--read-execute-code-action actions server action-kind)
>        actions)))
>
> +(defalias 'eglot-code-actions-at-mouse (eglot--mouse-call 'eglot-code-actions)
> +  "Like `eglot-code-actions', but intended for mouse events.")
> +
>  (defun eglot--read-execute-code-action (actions server &optional action-kind)
>    "Helper for interactive calls to `eglot-code-actions'."
>    (let* ((menu-items
>
> João

It seems like the fix was the patch above, which IIUC has been
installed.  I'm therefore closing this bug report.

If this conclusion is incorrect and this is still an issue, please reply
to this email (use "Reply to all" in your email client) and we can
reopen the bug report.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#62157; Package emacs. (Tue, 12 Sep 2023 05:24:01 GMT) Full text and rfc822 format available.

Message #25 received at 62157-done <at> debbugs.gnu.org (full text, mbox):

From: Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>
To: Stefan Kangas <stefankangas <at> gmail.com>
Cc: 62157-done <at> debbugs.gnu.org,
 João Távora <joaotavora <at> gmail.com>
Subject: Re: bug#62157: More control over the mouse behaviour in eglot
Date: Tue, 12 Sep 2023 07:23:05 +0200
[Message part 1 (text/plain, inline)]
Just to confirm that the issue was solved (at least for me)

/PA

> El 12 sept 2023, a las 2:22, Stefan Kangas <stefankangas <at> gmail.com> escribió:
> 
> João Távora <joaotavora <at> gmail.com> writes:
> 
>> On Mon, Mar 13, 2023 at 7:22 AM Pedro Andres Aranda Gutierrez
>> <paaguti <at> gmail.com> wrote:
>>> 
>>> When I edit Python with eglot,  mouse-1-down opens the eglot code
>>> actions menu when over a place where there is a possible action. I'd
>>> like to be able to define the mouse event to open the menu myself. In
>>> the same line, I'd like to control the items on the code actions mouse
>>> menu.
>> 
>> These are two separate requests.  I'll focus on the first one,
>> as the second one is obscure.  It probablyneeds its own separate
>> issue describing a reproducible observable example of what "item
>> control" is desired.
>> 
>> So, having mouse-1 for the binding to get code actions in diagnostics
>> is indeed not good, because it prevents point from being put on
>> a certain character using mouse-1, which should really nothappen.
>> 
>> Currently, to configure it, the user must place a certain property on
>> the symbols eglot-note eglot-warning eglot-error, which is not
>> easy at all.
>> 
>> Can you try this patch?  It also changes the default binding to
>> [mouse-2].
>> 
>> diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
>> index 2491c86ea5b..256b4cd93ba 100644
>> --- a/lisp/progmodes/eglot.el
>> +++ b/lisp/progmodes/eglot.el
>> @@ -2084,15 +2084,18 @@ eglot--mode-line-format
>> (defalias 'eglot--make-diag 'flymake-make-diagnostic)
>> (defalias 'eglot--diag-data 'flymake-diagnostic-data)
>> 
>> +(defvar eglot-diagnostics-map
>> +  "Map active in Eglot-backed Flymake diagnostic overlays."
>> +  (let ((map (make-sparse-keymap)))
>> +    (define-key map [mouse-1] 'eglot-code-actions-at-mouse)
>> +    map))
>> +
>> (cl-loop for i from 1
>>          for type in '(eglot-note eglot-warning eglot-error)
>>          do (put type 'flymake-overlay-control
>>                  `((mouse-face . highlight)
>>                    (priority . ,(+ 50 i))
>> -                   (keymap . ,(let ((map (make-sparse-keymap)))
>> -                                (define-key map [mouse-1]
>> -                                            (eglot--mouse-call
>> 'eglot-code-actions))
>> -                                map)))))
>> +                   (keymap . ,eglot-diagnostics-map))))
>> 
>> 
>> ;;; Protocol implementation (Requests, notifications, etc)
>> @@ -3335,6 +3338,9 @@ eglot-code-actions
>>         (eglot--read-execute-code-action actions server action-kind)
>>       actions)))
>> 
>> +(defalias 'eglot-code-actions-at-mouse (eglot--mouse-call 'eglot-code-actions)
>> +  "Like `eglot-code-actions', but intended for mouse events.")
>> +
>> (defun eglot--read-execute-code-action (actions server &optional action-kind)
>>   "Helper for interactive calls to `eglot-code-actions'."
>>   (let* ((menu-items
>> 
>> João
> 
> It seems like the fix was the patch above, which IIUC has been
> installed.  I'm therefore closing this bug report.
> 
> If this conclusion is incorrect and this is still an issue, please reply
> to this email (use "Reply to all" in your email client) and we can
> reopen the bug report.

[smime.p7s (application/pkcs7-signature, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#62157; Package emacs. (Tue, 12 Sep 2023 07:06:02 GMT) Full text and rfc822 format available.

Message #28 received at 62157-done <at> debbugs.gnu.org (full text, mbox):

From: João Távora <joaotavora <at> gmail.com>
To: Stefan Kangas <stefankangas <at> gmail.com>
Cc: 62157-done <at> debbugs.gnu.org,
 Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>
Subject: Re: bug#62157: More control over the mouse behaviour in eglot
Date: Tue, 12 Sep 2023 08:07:56 +0100
On Tue, Sep 12, 2023 at 1:22 AM Stefan Kangas <stefankangas <at> gmail.com> wrote:

> It seems like the fix was the patch above, which IIUC has been
> installed.  I'm therefore closing this bug report.
>
> If this conclusion is incorrect and this is still an issue, please reply
> to this email (use "Reply to all" in your email client) and we can
> reopen the bug report.

The conclusion is quite correct, and I earlier meant to close the bug,
but due to typical incompetence when copy-pasting in my brain
sent mail to 61257-done <at> debbugs.gnu.org instead.  So maybe check
if that other bug hasn't been closed in error :-)

João




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#62157; Package emacs. (Wed, 13 Sep 2023 16:13:03 GMT) Full text and rfc822 format available.

Message #31 received at 62157-done <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: João Távora <joaotavora <at> gmail.com>
Cc: 62157-done <at> debbugs.gnu.org,
 Pedro Andres Aranda Gutierrez <paaguti <at> gmail.com>
Subject: Re: bug#62157: More control over the mouse behaviour in eglot
Date: Wed, 13 Sep 2023 09:12:13 -0700
João Távora <joaotavora <at> gmail.com> writes:

> The conclusion is quite correct, and I earlier meant to close the bug,
> but due to typical incompetence when copy-pasting in my brain
> sent mail to 61257-done <at> debbugs.gnu.org instead.  So maybe check
> if that other bug hasn't been closed in error :-)

I took a look and that bug seems to be fine.  It belongs to guix-patches.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 12 Oct 2023 11:24:19 GMT) Full text and rfc822 format available.

This bug report was last modified 190 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.