Re: Documentation for custom-file - is not (load custom-file) needed?

From:

Luc Teirlinck

Subject:

Re: Documentation for custom-file - is not (load custom-file) needed?

Date:

Mon, 6 Dec 2004 20:56:49 -0600 (CST)

Stefan Monnier wrote:
This said, it's indeed probably better to tell people to `load' the custom
file rather than to `setq' the `custom-file' variable (among other things
because it involves much less magic, and works with Emacs-21.3).
I forgot about the latter. This means that the way that
`(emacs)Saving Customizations' explains how to have different
customization files for different versions of Emacs is wrong.
I propose the following changes to man/custom.texi, which I can
install if desired. The `cond' form in the example might look
intimidating to the non-Elisp user, but so does the present `if' form,
certainly with the (necessary) `progn' in the "else" part added.
People may want custom files for more than two versions. People
essentially can copy the `cond' more or less verbatim with other
version numbers. The example now shows how to deal with minor
versions.
===File ~/custom.texi-diff==================================
*** custom.texi 05 Dec 2004 09:07:23 -0600 1.70
--- custom.texi 06 Dec 2004 19:45:16 -0600
***************
*** 1,5 ****
@c This is part of the Emacs manual.
! @c Copyright (C) 1985,86,87,93,94,95,97,2000,2001,2002
@c Free Software Foundation, Inc.
@c See file emacs.texi for copying conditions.
@node Customization, Quitting, Amusements, Top
--- 1,5 ----
@c This is part of the Emacs manual.
! @c Copyright (C) 1985,86,87,93,94,95,97,2000,2001,2002,2004
@c Free Software Foundation, Inc.
@c See file emacs.texi for copying conditions.
@node Customization, Quitting, Amusements, Top
***************
*** 487,509 ****
The customization buffer normally saves customizations in
@file{~/.emacs}. If you wish, you can save customizations in another
file instead. To make this work, your @file{~/.emacs} should set
! @code{custom-file} to the name of that file. Emacs loads the file
! right after your @file{.emacs} if you did not load it already. For
! example:
@example
(setq custom-file "~/.emacs-custom")
@end example
The variable @code{custom-file} is useful if you want to have
different customizations for different Emacs versions:
@example
! (if (< emacs-major-version 21)
! ;; @r{Emacs 20 customization.}
! (setq custom-file "~/.custom-20.el")
! ;; @r{Emacs 21 customization.}
! (setq custom-file "~/.custom-21.el"))
@end example
If Emacs was invoked with the @option{-q} or @option{--no-init-file}
--- 487,527 ----
The customization buffer normally saves customizations in
@file{~/.emacs}. If you wish, you can save customizations in another
file instead. To make this work, your @file{~/.emacs} should set
! @code{custom-file} to the name of that file. If you are using Emacs
! version 21.4 or later, Emacs loads the file right after your
! @file{.emacs} if you did not load it already. In earlier versions,
! you have to load the file in your @file{~/emacs}. If you customize
! @code{custom-file} through the @samp{Customize} interface, you still
! need to load it in your @file{.emacs}, but there is no need to set
! it. For example:
@example
+ ;; @r{if not set through the @samp{Customize} interface:}
(setq custom-file "~/.emacs-custom")
+
+ ;; @r{in Emacs versions before 21.4 or if set through}
+ ;; @r{the @samp{Customize} interface.}
+ (load "~/.emacs-custom")
@end example
The variable @code{custom-file} is useful if you want to have
different customizations for different Emacs versions:
@example
! (cond ((< emacs-major-version 21)
! ;; @r{Emacs 20 customization.}
! (setq custom-file "~/.custom-20.el")
! (load "~/.custom-20.el"))
! ((< emacs-minor-version 4)
! ;; @r{Emacs 21 customization, before version 21.4.}
! (setq custom-file "~/.custom-21.el")
! (load "~/.custom-21.el"))
! (t
! ;; @r{Emacs version 21.4 or later.}
! (setq custom-file "~/.custom-21.4.el")
! ;; @r{not strictly necessary, but load all custom files}
! ;; @r{at the same place.}
! (load "~/.custom-21.4.el")))
@end example
If Emacs was invoked with the @option{-q} or @option{--no-init-file}
============================================================