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

From: Glenn Morris <[email-masked]>
Date: Tue, 14 May 2013 03:30:50 -0400

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.