Subject: bug#74208: 31.0.50; minibuffer read-file-name-default mutates global value of default-directory incorrectly

From: Michael Albinus <[email-masked]>
Date: Sun, 08 Dec 2024 12:33:13 +0100

Madhu <[email-masked]> writes:

Hi Madhu,

> Thanks, something like the attached? the implementation of "turn on
> url-handler-mode temporarily" looks a bit gross but i guess it can't
> be avoided.  should call to turn it on be outside the
> minibuffer-setup-hook?

Perhaps, I haven't tested. However, the leading comment doesn't match
anymore the implementation (default-directory is let-bound now); better
you'll adjust it.

I've checked the problem in ffap.el. It looks like we could use a much
simpler solution: implement unhandled-file-name-directory in
ffap--url-file-handler. Something like

diff --git a/lisp/ffap.el b/lisp/ffap.el
index 6a4915fb5a3..b03e625c123 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -1512,6 +1512,7 @@ ffap--url-file-handler
       ;; We mainly just want to disable these bits:
       (substitute-in-file-name (car args))
       (expand-file-name (car args))
+      (unhandled-file-name-directory nil)
       (otherwise
        (apply operation args)))))

Does this solve your problem?

> --Regards, Madhu

Best regards, Michael.