emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 30fe8703e60 10/15: Allow ERC's module toggles access to the prefi


From: F. Jason Park
Subject: master 30fe8703e60 10/15: Allow ERC's module toggles access to the prefix arg
Date: Thu, 13 Jul 2023 21:50:42 -0400 (EDT)

branch: master
commit 30fe8703e60d0b756c19f52a6758889600b7b396
Author: F. Jason Park <jp@neverwas.me>
Commit: F. Jason Park <jp@neverwas.me>

    Allow ERC's module toggles access to the prefix arg
    
    * lisp/erc/erc-common.el (erc--module-toggle-prefix-arg): Add internal
    variable for preserving the `arg' passed to a module's minor-mode
    toggle, which was previously discarded.  Doing this lets modules that
    are more interactive in nature overload their mode toggles with
    alternate behaviors.
    (define-erc-module): Bind `erc--module-toggle-prefix-arg' to the `arg'
    parameter, which is normally defined inside a `define-minor-mode' body
    form.
    * test/lisp/erc/erc-tests.el (define-erc-module--global,
    define-erc-module--local): Expect activation body to be wrapped by a
    let form binding `erc--module-toggle-prefix-arg'.  (Bug#63595)
---
 lisp/erc/erc-common.el     | 14 +++++++++++---
 test/lisp/erc/erc-tests.el | 14 ++++++++------
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/lisp/erc/erc-common.el b/lisp/erc/erc-common.el
index 7bd549abfc1..08c11d518a8 100644
--- a/lisp/erc/erc-common.el
+++ b/lisp/erc/erc-common.el
@@ -289,6 +289,15 @@ instead of a `set' state, which precludes any actual 
saving."
              (intern (file-name-base file))))
      (v v)))
 
+(defvar erc--module-toggle-prefix-arg nil
+  "The interpreted prefix arg of the minor-mode toggle.
+Non-nil inside an ERC module's activation (or deactivation)
+command, such as `erc-spelling-enable', when it's been called
+indirectly via the module's minor-mode toggle, i.e.,
+`erc-spelling-mode'.  Nil otherwise.  Its value is either the
+symbol `toggle' or an integer produced by `prefix-numeric-value'.
+See Info node `(elisp) Defining Minor Modes' for more.")
+
 (defmacro define-erc-module (name alias doc enable-body disable-body
                                   &optional local-p)
   "Define a new minor mode using ERC conventions.
@@ -337,9 +346,8 @@ if ARG is omitted or nil.
          :group (erc--find-group ',name ,(and alias (list 'quote alias)))
          ,@(unless local-p `(:require ',(erc--find-feature name alias)))
          ,@(unless local-p `(:type ,(erc--prepare-custom-module-type name)))
-         (if ,mode
-             (,enable)
-           (,disable)))
+         (let ((erc--module-toggle-prefix-arg arg))
+           (if ,mode (,enable) (,disable))))
        ,(erc--assemble-toggle local-p name enable mode t enable-body)
        ,(erc--assemble-toggle local-p name disable mode nil disable-body)
        ,@(and-let* ((alias)
diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el
index 3f36e7c94f6..cc69641fb0b 100644
--- a/test/lisp/erc/erc-tests.el
+++ b/test/lisp/erc/erc-tests.el
@@ -2204,9 +2204,10 @@ Some docstring."
                         :group (erc--find-group 'mname 'malias)
                         :require 'nil
                         :type "mname"
-                        (if erc-mname-mode
-                            (erc-mname-enable)
-                          (erc-mname-disable)))
+                        (let ((erc--module-toggle-prefix-arg arg))
+                          (if erc-mname-mode
+                              (erc-mname-enable)
+                            (erc-mname-disable))))
 
                       (defun erc-mname-enable ()
                         "Enable ERC mname mode."
@@ -2259,9 +2260,10 @@ ARG is omitted or nil.
 Some docstring."
                         :global nil
                         :group (erc--find-group 'mname nil)
-                        (if erc-mname-mode
-                            (erc-mname-enable)
-                          (erc-mname-disable)))
+                        (let ((erc--module-toggle-prefix-arg arg))
+                          (if erc-mname-mode
+                              (erc-mname-enable)
+                            (erc-mname-disable))))
 
                       (defun erc-mname-enable (&optional ,arg-en)
                         "Enable ERC mname mode.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]