Subject: Re: bug#13930: Emacs doesn't cope well if it can't access/create .emacs.d

From: Robert Prije <[email-masked]>
Date: Tue, 14 May 2013 16:46:16 +0800

This is much better. I now get a separate window with the following error:

"Warning (initialization): Unable to create `user-emacs-directory'
(~/.emacs.d/).
Any data that would normally be written there may be lost!
If you never want to see this message again,
customize the variable `user-emacs-directory-warning'."

but the file I attempt to open still opens and I can edit it as usual. It
appears the patch works as intended. Which release is it likely to make it
to?

Thanks a bunch Glenn.

On Tue, May 14, 2013 at 3:30 PM, Glenn Morris <[email-masked]> wrote:

>
> Does this patch work for you?
>
> *** lisp/subr.el        2013-04-27 21:12:17 +0000
> --- lisp/subr.el        2013-05-14 07:27:31 +0000
> ***************
> *** 2643,2648 ****
> --- 2643,2655 ----
>   Note that this should end with a directory separator.
>   See also `locate-user-emacs-file'.")
>
> + (custom-declare-variable-early 'user-emacs-directory-warning t
> +   "Non-nil means warn if cannot access `user-emacs-directory'.
> + Set this to nil at your own risk..."
> +   :type 'boolean
> +   :group 'initialization
> +   :version "24.4")
> +
>   (defun locate-user-emacs-file (new-name &optional old-name)
>     "Return an absolute per-user Emacs-specific file name.
>   If NEW-NAME exists in `user-emacs-directory', return it.
> ***************
> *** 2658,2674 ****
>                 (file-readable-p at-home))
>          at-home
>          ;; Make sure `user-emacs-directory' exists,
> !        ;; unless we're in batch mode or dumping Emacs
>          (or noninteractive
>            purify-flag
> !          (file-accessible-directory-p
> !           (directory-file-name user-emacs-directory))
>            (let ((umask (default-file-modes)))
>              (unwind-protect
>                  (progn
>                    (set-default-file-modes ?\700)
> !                  (make-directory user-emacs-directory))
>                (set-default-file-modes umask))))
>          bestname))))
>
>   ;;;; Misc. useful functions.
> --- 2665,2697 ----
>                 (file-readable-p at-home))
>          at-home
>          ;; Make sure `user-emacs-directory' exists,
> !        ;; unless we're in batch mode or dumping Emacs.
>          (or noninteractive
>            purify-flag
> !          (let (errtype)
> !            (if (file-directory-p user-emacs-directory)
> !                (or (file-accessible-directory-p user-emacs-directory)
> !                    (setq errtype "access"))
>                (let ((umask (default-file-modes)))
>                  (unwind-protect
>                      (progn
>                        (set-default-file-modes ?\700)
> !                      (condition-case nil
> !                          (make-directory user-emacs-directory)
> !                        (error (setq errtype "create"))))
>                    (set-default-file-modes umask))))
> +            (when (and errtype
> +                       user-emacs-directory-warning
> +                       (not (get 'user-emacs-directory-warning
> 'this-session)))
> +              ;; Only warn once per Emacs session.
> +              (put 'user-emacs-directory-warning 'this-session t)
> +              (display-warning 'initialization
> +                               (format "\
> + Unable to %s `user-emacs-directory' (%s).
> + Any data that would normally be written there may be lost!
> + If you never want to see this message again,
> + customize the variable `user-emacs-directory-warning'."
> +                                       errtype user-emacs-directory)))))
>          bestname))))
>
>   ;;;; Misc. useful functions.
>
>