]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix handling of intspecs as string by rcirc-define-command
authorPhilip Kaludercic <philipk@posteo.net>
Tue, 19 Apr 2022 11:16:51 +0000 (13:16 +0200)
committerPhilip Kaludercic <philipk@posteo.net>
Tue, 19 Apr 2022 11:18:42 +0000 (13:18 +0200)
* rcirc.el (rcirc-define-command): Check if an interactive
  specification is a string, in which case it was to be wrapped in a
  list so that the result of its interpretation is passed as the first
  argument of the command resulting from the macro expansion.

lisp/net/rcirc.el

index f34be6daf3f277b8df1d963f3280cc72107268b5..31888f391324f233b0f0147a4b2f4f8f64789e1c 100644 (file)
@@ -2616,15 +2616,22 @@ that, an interactive form can specified."
        (defun ,fn-name (,argument &optional process target)
          ,(concat documentation
                   "\n\nNote: If PROCESS or TARGET are nil, the values given"
-                 "\nby `rcirc-buffer-process' and `rcirc-target' will be used.")
-         (interactive (list ,interactive-spec))
+                  "\nby `rcirc-buffer-process' and `rcirc-target' will be used.")
+         (interactive ,(if (stringp interactive-spec)
+                           ;; HACK: Necessary to wrap the result of
+                           ;; the interactive spec in a list.
+                           `(list (call-interactively
+                                   (lambda (&rest args)
+                                     (interactive ,interactive-spec)
+                                     args)))
+                         `(list ,interactive-spec)))
          (unless (if (listp ,argument)
                      (<= ,required (length ,argument) ,total)
                    (string-match ,regexp ,argument))
            (user-error "Malformed input (%s): %S" ',command ,argument))
          (push ,(upcase (symbol-name command)) rcirc-pending-requests)
          (let ((process (or process (rcirc-buffer-process)))
-              (target (or target rcirc-target)))
+               (target (or target rcirc-target)))
            (ignore target process)
            (let (,@(cl-loop
                     for i from 0 for arg in (delq '&optional arguments)