Subject: bug#77263: MH-E: want all folder buffers to use $HOME as default-directory

From: Bill Wohler <[email-masked]>
Date: Wed, 26 Mar 2025 20:58:53 -0700

Stephen Gildea <[email-masked]> wrote:

> Eli Zaretskii <[email-masked]> wrote:
> 
> >   I wonder if calling cd-absolute here is really a good idea.  That
> >   function could signal an error, and it insists on the directory being
> >   an existing accessible directory.  Is it a good idea to potentially
> >   screw up starting MH-E if the directory happens to be problematic?
> >   Why not simply set the default-directory of the buffer instead?
> 
> I had not realized that 'cd-absolute' had issues when called
> from Lisp.  Here is a revised version of my patch:

I applied this patch and it fixes a long-standing issue I've had with
MH-E. Does this work for you, Eli?

Thanks, Stephen!

> diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
> index e507996c581..f64b02c7bca 100644
> --- a/lisp/mh-e/mh-e.el
> +++ b/lisp/mh-e/mh-e.el
> @@ -144,6 +144,10 @@ mh-lib-progs
>  ;;;###autoload
>  (put 'mh-lib-progs 'risky-local-variable t)
>  
> +(defvar mh-default-directory "~/"
> +  "Default directory for MH-E folder buffers.
> +Set to nil to have MH-E buffers inherit default-directory.")
> +
>  ;; Profile Components
>  
>  (defvar mh-draft-folder nil
> @@ -438,6 +442,12 @@ mh-list-to-string-1
>               (error "Bad element: %s" element))))
>      new-list))
>  
> +(defun mh-set-default-directory ()
> +  "Set `default-directory' to `mh-default-directory' unless it is nil."
> +  (when (stringp mh-default-directory)
> +    (setq default-directory (file-name-as-directory
> +                             (expand-file-name mh-default-directory)))))
> +
>  
>  
>  ;;; MH-E Process Support
> diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el
> index 5009c2c4f98..e0c53724f9c 100644
> --- a/lisp/mh-e/mh-folder.el
> +++ b/lisp/mh-e/mh-folder.el
> @@ -51,9 +51,12 @@ mh-rmail
>    (interactive "P")
>    (mh-find-path)
>    (if arg
> -      (call-interactively 'mh-visit-folder)
> +      (progn
> +        (call-interactively 'mh-visit-folder)
> +        (mh-set-default-directory))
>      (unless (get-buffer mh-inbox)
> -      (mh-visit-folder mh-inbox (symbol-name mh-unseen-seq)))
> +      (mh-visit-folder mh-inbox (symbol-name mh-unseen-seq))
> +      (mh-set-default-directory))
>      (mh-inc-folder)))
>  
>  ;;;###autoload
> @@ -67,6 +70,7 @@ mh-nmail
>    (mh-find-path)                        ; init mh-inbox
>    (if arg
>        (call-interactively 'mh-visit-folder)
> -    (mh-visit-folder mh-inbox)))
> +    (mh-visit-folder mh-inbox))
> +  (mh-set-default-directory))
>  
>  
> 

-- 
Bill Wohler <[email-masked]> aka <[email-masked]>
http://www.newt.com/wohler/, GnuPG ID:610BD9AD