From: Juanma Barranquero <lekktu@gmail.com>
To: Emacs developers <emacs-devel@gnu.org>
Subject: A couple of locate-user-emacs-file questions
Date: Thu, 20 Jun 2013 04:09:37 +0200 [thread overview]
Message-ID: <CAAeL0SQZ9aVk=+-VyFAC+WKST5muDN4Z5n0b7mhzCDZBDv8+FQ@mail.gmail.com> (raw)
The following patch
=== modified file 'lisp/term/x-win.el'
--- lisp/term/x-win.el 2013-04-06 14:06:39 +0000
+++ lisp/term/x-win.el 2013-06-20 01:36:56 +0000
@@ -118,13 +118,11 @@
(defun emacs-session-filename (session-id)
"Construct a filename to save the session in based on SESSION-ID.
-If the directory ~/.emacs.d exists, we make a filename in there, otherwise
-a file in the home directory."
- (let ((basename (concat "session." session-id))
- (emacs-dir user-emacs-directory))
- (expand-file-name (if (file-directory-p emacs-dir)
- (concat emacs-dir basename)
- (concat "~/.emacs-" basename)))))
+Return a filename in `user-emacs-directory', unless the session file
+already exists in the home directory."
+ (let ((basename (concat "session." session-id)))
+ (locate-user-emacs-file basename
+ (concat ".emacs-" basename))))
(defun emacs-session-save ()
"This function is called when the window system is shutting down.
is mildly incompatible, in the sense that some external tool *could*
potentially depend on the session file being in $HOME; but that seems
unlikely. Does anyone see a problem with it?
And speaking of `locate-user-emacs-file', there are a couple of cases
(in cmuscheme.el and shell.el, both related to passing a filename to
comint only if the file does really exist) that could benefit from it,
if there was a way to tell it to check for OLDNAME and NEWNAME, but
return nil (and not create `user-emacs-directory') if neither file
exists. Something like this (diff -b to ignore irrelevant indentation
changes):
=== modified file 'lisp/subr.el'
--- lisp/subr.el 2013-06-14 04:11:00 +0000
+++ lisp/subr.el 2013-06-20 01:56:40 +0000
@@ -2537,24 +2537,26 @@
:group 'initialization
:version "24.4")
-(defun locate-user-emacs-file (new-name &optional old-name)
+(defun locate-user-emacs-file (new-name &optional old-name check-only)
"Return an absolute per-user Emacs-specific file name.
If NEW-NAME exists in `user-emacs-directory', return it.
Else if OLD-NAME is non-nil and ~/OLD-NAME exists, return ~/OLD-NAME.
Else return NEW-NAME in `user-emacs-directory', creating the
-directory if it does not exist."
- (convert-standard-filename
+directory if it does not exist.
+If CHECK-ONLY is non-nil, return nil if neither file exists,
+and do not create `user-emacs-directory'."
(let* ((home (concat "~" (or init-file-user "")))
(at-home (and old-name (expand-file-name old-name home)))
(bestname (abbreviate-file-name
(expand-file-name new-name user-emacs-directory))))
(if (and at-home (not (file-readable-p bestname))
(file-readable-p at-home))
- at-home
+ (convert-standard-filename at-home)
;; Make sure `user-emacs-directory' exists,
;; unless we're in batch mode or dumping Emacs.
(or noninteractive
purify-flag
+ check-only
(let (errtype)
(if (file-directory-p user-emacs-directory)
(or (file-accessible-directory-p user-emacs-directory)
@@ -2579,7 +2581,9 @@
If you never want to see this message again,
customize the variable `user-emacs-directory-warning'."
errtype user-emacs-directory)))))
- bestname))))
+ (if (or (file-readable-p bestname) (not check-only))
+ (convert-standard-filename bestname)
+ nil))))
;;;; Misc. useful functions.
On one hand, seems like a bit overengineered; on the other hand, a
function called *locate*-user-emacs-file should be able to tell
whether it did, in fact, locate it without causing side effects...
next reply other threads:[~2013-06-20 2:09 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-20 2:09 Juanma Barranquero [this message]
2013-06-20 20:14 ` A couple of locate-user-emacs-file questions Stefan Monnier
2013-06-20 22:35 ` Juanma Barranquero
2013-06-21 1:46 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAAeL0SQZ9aVk=+-VyFAC+WKST5muDN4Z5n0b7mhzCDZBDv8+FQ@mail.gmail.com' \
--to=lekktu@gmail.com \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).