Subject: Re: bug#49963: 28.0.50; isearch failing in Dired after rectangle-mark-mode and query-replace

From: Stefan Monnier <[email-masked]>
Date: Tue, 10 Aug 2021 10:30:54 -0400

>   (add-function :after-while (local 'isearch-filter-predicate)
>                 (lambda (&rest _) 'filter-local))
>
>   (let ((isearch-filter-predicate isearch-filter-predicate))
>     (add-function :after-while isearch-filter-predicate
>                   (lambda (&rest _) 'filter-letbound)))
>
> C-h v isearch-filter-predicate:
>
>   Value:
>   #f(advice-wrapper :after-while #f(compiled-function
>                                     (&rest args)
>                                     #<bytecode -0x1d2ab1d0859aebb6>)
>                     (closure
>                      (t)
>                      (&rest _)
>                      'filter-local))
>   Local in buffer *scratch*; global value is
>   #f(advice-wrapper :after-while isearch-filter-visible
>                      (closure
>                       (t)
>                       (&rest _)
>                       'filter-letbound))
>
> Let-binding was supposed to protect from changing the global value,

But it doesn't, does it?

So don't use `let`.
Instead use `remove-function` with `unwind-protect`.

        Stefan