[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#59710: Wrong type argument when editing a multisession variable
From: |
Eli Zaretskii |
Subject: |
bug#59710: Wrong type argument when editing a multisession variable |
Date: |
Fri, 02 Dec 2022 15:07:02 +0200 |
> Cc: "lars ingebrigtsen" <larsi@gnus.org>
> From: Juanma Barranquero <lekktu@gmail.com>
> Date: Wed, 30 Nov 2022 02:49:15 +0100
>
> Debugger entered--Lisp error: (wrong-type-argument symbolp (intern (cdr id)))
> multisession-edit-value(("test" . "test-var"))
> funcall-interactively(multisession-edit-value ("test" . "test-var"))
> command-execute(multisession-edit-value)
>
> The problem comes from this change
>
> commit bd586121ac21e046f60f75eeb0200866c38d6f9f
> Author: Lars Ingebrigtsen <larsi@gnus.org>
> Date: 2022-01-22 11:56:13 +0100
>
> Make the test for existing multisession variables more sensible
>
> * lisp/emacs-lisp/multisession.el (multisession-edit-value):
> Unconfuse the code.
>
> diff --git a/lisp/emacs-lisp/multisession.el
> b/lisp/emacs-lisp/multisession.el
> index 4a293796a8..25307594c6 100644
> --- a/lisp/emacs-lisp/multisession.el
> +++ b/lisp/emacs-lisp/multisession.el
> @@ -437,8 +437,8 @@ multisession-edit-value
> (let* ((object (or
> ;; If the multisession variable already exists, use
> ;; it (so that we update it).
> - (and (boundp (intern-soft (cdr id)))
> - (symbol-value (intern (cdr id))))
> + (and (intern-soft (cdr id))
> + (bound-and-true-p (intern (cdr id))))
> ;; Create a new object.
> (make-multisession
> :package (car id)
>
> because `bound-and-true-p' is a macro that requires as argument a symbol,
> which (intern ...) is not.
>
> ELISP> (bound-and-true-p (intern "whatever"))
> *** Eval error *** Wrong type argument: symbolp, (intern "whatever")
>
> so I'm afraid this change was never tested.
>
> The fix is reverting the change, doing perhaps this
>
> diff --git a/lisp/emacs-lisp/multisession.el b/lisp/emacs-lisp/multisession.el
> index 9d6e8c0d88..78d4137317 100644
> --- a/lisp/emacs-lisp/multisession.el
> +++ b/lisp/emacs-lisp/multisession.el
> @@ -447,8 +447,9 @@ multisession-edit-value
> (let* ((object (or
> ;; If the multisession variable already exists, use
> ;; it (so that we update it).
> - (and (intern-soft (cdr id))
> - (bound-and-true-p (intern (cdr id))))
> + (if-let (sym (intern-soft (cdr id)))
> + (and (boundp sym) (symbol-value sym))
> + nil)
> ;; Create a new object.
> (make-multisession
> :package (car id)
This makes sense to me, so please go ahead and install (assuming that the
multisession tests still all pass after this change).
Thanks.
- bug#59710: Wrong type argument when editing a multisession variable,
Eli Zaretskii <=