Subject: bug#4455 closed by Stefan Monnier <[email-masked]> (Re: bug#4455: 23.1.50; Can't turn off auto-fill-mode via mouse-minor-mode-menu)

From: [email-masked] (Emacs bug Tracking System)
Date: Thu, 17 Sep 2009 01:40:06 +0000

This is an automatic notification regarding your bug report
which was filed against the emacs package:

#4455: 23.1.50; Can't turn off auto-fill-mode via mouse-minor-mode-menu

It has been closed by Stefan Monnier <[email-masked]>.

Their explanation is attached below along with your original report.
If this explanation is unsatisfactory and you have not received a
better one in a separate message then please contact Stefan Monnier <[email-masked]> by
replying to this email.

-- 
4455: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=4455
Emacs Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#4455: 23.1.50; Can't turn off auto-fill-mode via mouse-minor-mode-menu
From: Stefan Monnier <[email-masked]>
To: Stephen Berman <[email-masked]>
Date: Wed, 16 Sep 2009 21:33:15 -0400

> 2. Click mouse-3 over the major mode indicator in the mode line and
>    select Auto fill from the pop-up menu.
> 3. Click mouse-1 over "Fill" in the mode line and select "Turn Off[sic]
>    minor mode" from the pop-up menu.
> => Auto Fill mode remains enabled.

> I traced this problem to auto-fill-function from simple.el, which is the
> value of cmd in the last when-sexp of popup-menu from mouse.el: since
> auto-fill-function is not interactive, (commandp cmd) is nil and the
> body of the when-clause, containing a call to cmd, is not evaluated.

Thank you for tracking it down.  I've installed the patch below which
should fix it.

        Stefan

--- mouse.el.~1.357.~	2009-07-21 17:38:12.000000000 -0400
+++ mouse.el	2009-09-16 21:30:41.000000000 -0400
@@ -158,7 +158,8 @@
    (list (completing-read
 	  "Minor mode indicator: "
 	  (describe-minor-mode-completion-table-for-indicator))))
-  (let ((minor-mode (lookup-minor-mode-from-indicator indicator)))
+  (let* ((minor-mode (lookup-minor-mode-from-indicator indicator))
+         (mm-fun (or (get minor-mode :minor-mode-function) minor-mode)))
     (unless minor-mode (error "Cannot find minor mode for `%s'" indicator))
     (let* ((map (cdr-safe (assq minor-mode minor-mode-map-alist)))
            (menu (and (keymapp map) (lookup-key map [menu-bar]))))
@@ -167,10 +168,10 @@
                 (mouse-menu-non-singleton menu)
 	      `(keymap
                 ,indicator
-                (turn-off menu-item "Turn Off minor mode" ,minor-mode)
+                (turn-off menu-item "Turn Off minor mode" ,mm-fun)
                 (help menu-item "Help for minor mode"
                       (lambda () (interactive)
-                        (describe-function ',minor-mode))))))
+                        (describe-function ',mm-fun))))))
       (popup-menu menu))))
 
 (defun mouse-minor-mode-menu (event)

Subject: 23.1.50; Can't turn off auto-fill-mode via mouse-minor-mode-menu
From: Stephen Berman <[email-masked]>
To: [email-masked]
Date: Thu, 17 Sep 2009 02:02:16 +0200

1. emacs -Q
2. Click mouse-3 over the major mode indicator in the mode line and
   select Auto fill from the pop-up menu.
3. Click mouse-1 over "Fill" in the mode line and select "Turn Off[sic]
   minor mode" from the pop-up menu.
=> Auto Fill mode remains enabled.

I traced this problem to auto-fill-function from simple.el, which is the
value of cmd in the last when-sexp of popup-menu from mouse.el: since
auto-fill-function is not interactive, (commandp cmd) is nil and the
body of the when-clause, containing a call to cmd, is not evaluated.
But simply making auto-fill-function interactive is not enough, since
auto-fill-function is a no-op.  The following redefinition of
auto-fill-function makes step 3 above DTRT, but I suspect it is not the
right fix, since I assume auto-fill-function was meant to be a no-op:

(defun auto-fill-function ()
  "Automatically break line at a previous space, in insertion of text."
  (interactive)
  (auto-fill-mode))

In GNU Emacs 23.1.50.1 (i686-pc-linux-gnu, GTK+ Version 2.14.4)
 of 2009-09-17 on escher
Windowing system distributor `The X.Org Foundation', version 11.0.10502000
Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=local
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t