Subject: bug#40788: 28.0.50; Error running timer ‘custom-magic-reset’

From: Robert Pluim <[email-masked]>
Date: Tue, 21 Jul 2020 10:39:26 +0200

>>>>> On Fri, 24 Apr 2020 17:56:42 +0200, David Ponce <[email-masked]> said:

    David> On 24/04/2020 13:56, Robert Pluim wrote:
    >>>>>>> On Thu, 23 Apr 2020 19:39:26 +0200 (CEST), David PONCE <[email-masked]> said:
    David> Hello again,
    David> Below is a possible patch that seems to have fixed the issue for me.
    David> But I am not sure the approach is correct
    >> Rather than defining a new function, you can add an argument to the
    >> existing one. Something like (untested)

    David> Hi Robert,

    David> Sure, your patch is better :-)
    David> I tested it, and I confirm it fixes the issue :-)
    David> I also tested the below variant, because it seems to me that it is not
    David> necessary to set the buffer when magic is nil, as there is nothing to do.

    David> Please feel free to apply which version looks better to you.
    David> Thanks!

Thanks for testing. Eli, would this be OK to go into emacs-27 ? The
bug causes unintended changes to buffers unrelated to customize.

    David> diff --git a/home/dponce/installs/emacs/lisp/cus-edit.el b/cus-edit.el
    David> index d3d17fd..490d905 100644
    David> --- a/home/dponce/installs/emacs/lisp/cus-edit.el
    David> +++ b/cus-edit.el
    David> @@ -2102,11 +2102,12 @@ and `face'."
    David>  	(insert " "))
    David>        (widget-put widget :children children))))
    David>  -(defun custom-magic-reset (widget)
    David> +(defun custom-magic-reset (widget &optional buffer)
    David>    "Redraw the :custom-magic property of WIDGET."
    David>    (let ((magic (widget-get widget :custom-magic)))
    David>      (when magic
    David> -      (widget-value-set magic (widget-value magic)))))
    David> +      (with-current-buffer (or buffer (current-buffer))
    David> +        (widget-value-set magic (widget-value magic))))))
    David>    ;;; The `custom' Widget.
    David>  @@ -2217,7 +2218,7 @@ and `face'."
    David>        ;; commands like `M-u' (that work on a region in the buffer)
    David>        ;; will upcase the wrong part of the buffer, since more text has
    David>        ;; been inserted before point.
    David> -      (run-with-idle-timer 0.0 nil #'custom-magic-reset widget)
    David> +      (run-with-idle-timer 0.0 nil #'custom-magic-reset widget (current-buffer))
    David>        (apply 'widget-default-notify widget args))))
    David>    (defun custom-redraw (widget)