Subject: Re: bug#28732: flymake mouse-wheel portability fix

From: [email-masked] (Charles A. Roelli)
Date: Tue, 27 Feb 2018 20:28:42 +0100

> From: Glenn Morris <[email-masked]>
> Cc: [email-masked]
> Date: Mon, 26 Feb 2018 16:38:50 -0500
> 
> Hi,
> 
> This change causes errors in without-x builds.
> At compile-time:
>     
>     In flymake--mode-line-format:
>     progmodes/flymake.el:1086:49:Warning: reference to free variable
>         `mouse-wheel-down-event'
>     progmodes/flymake.el:1092:49:Warning: reference to free variable
>         `mouse-wheel-up-event'
> 
> At run-time:
>    Error during redisplay: (eval (flymake--mode-line-format)) signaled
>    (void-variable mouse-wheel-down-event)
> 
> 
> Charles A. Roelli wrote:
> 
> > The flymake mode line mouse-wheel scroll thing needs the following fix
> > to be more portable.
> >
> > This change also removes an extra newline at the end of the tooltip,
> > which doesn't have to be there as far as I can see.
> >
> > diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
> > index 45f0adf..007de8f 100644
> > --- a/lisp/progmodes/flymake.el
> > +++ b/lisp/progmodes/flymake.el
> > @@ -951,11 +951,13 @@ flymake--mode-line-format
> >                       keymap
> >                       ,(let ((map (make-sparse-keymap))
> >                              (type type))
> > -                        (define-key map [mode-line mouse-4]
> > +                        (define-key map (vector 'mode-line
> > +                                                mouse-wheel-down-event)
> >                            (lambda (_event)
> >                              (interactive "e")
> >                              (flymake-goto-prev-error 1 (list type) t)))
> > -                        (define-key map [mode-line mouse-5]
> > +                        (define-key map (vector 'mode-line
> > +                                                mouse-wheel-up-event)
> >                            (lambda (_event)
> >                              (interactive "e")
> >                              (flymake-goto-next-error 1 (list type) t)))
> > @@ -967,7 +969,9 @@ flymake--mode-line-format
> >                                                    'face face)
> >                                        (propertize (format "%s" type)
> >                                                    'face face))
> > -                              "mouse-4/mouse-5: previous/next of this type\n"))
> > +                              (format "%s/%s: previous/next of this type"
> > +                                      mouse-wheel-down-event
> > +                                      mouse-wheel-up-event)))
> >             into forms
> >             finally return
> >             `((:propertize "[")
> 

Thanks.  Is the following change (ignoring whitespace differences)
good for emacs-26?

diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 58bad8f..d58c5943 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -1078,7 +1078,9 @@
                      face ,face
                      mouse-face mode-line-highlight
                      keymap
-                     ,(let ((map (make-sparse-keymap))
+                     ,(when (and (boundp 'mouse-wheel-down-event)
+                                 (boundp 'mouse-wheel-up-event))
+                        (let ((map (make-sparse-keymap))
                             (type type))
                         (define-key map (vector 'mode-line
                                                 mouse-wheel-down-event)
@@ -1092,9 +1094,11 @@
                             (interactive "e")
                             (with-selected-window (posn-window (event-start event))
                               (flymake-goto-next-error 1 (list type) t))))
-                        map)
+                          map))
                      help-echo
-                     ,(concat (format "%s diagnostics of type %s\n"
+                     ,(when (and (boundp 'mouse-wheel-down-event)
+                                 (boundp 'mouse-wheel-up-event))
+                        (concat (format "%s diagnostics of type %s\n"
                                       (propertize (format "%d"
                                                           (length diags))
                                                   'face face)
@@ -1102,7 +1106,7 @@
                                                   'face face))
                               (format "%s/%s: previous/next of this type"
                                       mouse-wheel-down-event
-                                      mouse-wheel-up-event)))
+                                        mouse-wheel-up-event))))
            into forms
            finally return
            `((:propertize "[")