emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: customize


From: Jeff Dwork
Subject: Re: customize
Date: Fri, 2 Aug 2002 17:46:44 -0700

Here is an example of my problem with customize writing to .emacs
file.  I use 19.34 and I'm transitioning to 21.  Many things I do in
my version 19 .emacs are done differently in version 21, so I don't
want 21 to see my 19 stuff and my 19 stuff may not understand my
version 21 stuff.  So I tested the version in .emacs.

This is:
  GNU Emacs 21.1.1 (i686-pc-linux-gnu, X toolkit) of 2002-02-19 on
  go002
All invocations are:
  emacs --no-site-file

I start with this in .emacs:
********************************************
(if (< emacs-major-version 21)
    (progn
      ; here we set load-path for emacs 19
      ; this is just a dummy for test
      (setq jrd-init-var "19")
      (setq jrd-init-var2 "xx")
      )
  ; here we set load-path for emacs 21 and later
  ; this is just a dummy for test
  (setq jrd-init-var "21")
  (setq jrd-init-var2 "yy")
  )
********************************************

I start emacs 21, customize a variable and save it for the future.
I now have this:

********************************************
(if (< emacs-major-version 21)
    (progn
      ; here we set load-path for emacs 19
      ; this is just a dummy for test
      (setq jrd-init-var "19")
      (setq jrd-init-var2 "xx")
      )
  ; here we set load-path for emacs 21 and later
  ; this is just a dummy for test
  (setq jrd-init-var "21")
  (setq jrd-init-var2 "yy")
  )
(custom-set-variables
  ;; custom-set-variables was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 '(confirm-kill-emacs (quote y-or-n-p)))
(custom-set-faces
  ;; custom-set-faces was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 )
********************************************

But this won't work because the custom-set-variables is outside the
if.  I could write some code to make emacs 19 ignore this function,
but I don't want to.  So I move custom-set-* inside the if.

********************************************
(if (< emacs-major-version 21)
    (progn
      ; here we set load-path for emacs 19
      ; this is just a dummy for test
      (setq jrd-init-var "19")
      (setq jrd-init-var2 "xx")
      )
  ; here we set load-path for emacs 21 and later
  ; this is just a dummy for test
  (setq jrd-init-var "21")

  ; move custom stuff so only emacs 21 sees it

(custom-set-variables
  ;; custom-set-variables was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 '(confirm-kill-emacs (quote y-or-n-p)))
(custom-set-faces
  ;; custom-set-faces was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 )


  (setq jrd-init-var2 "yy")
  )
********************************************

I run emacs 21 again and customize another variable and I get this:

********************************************
(if (< emacs-major-version 21)
    (progn
      ; here we set load-path for emacs 19
      ; this is just a dummy for test
      (setq jrd-init-var "19")
      (setq jrd-init-var2 "xx")
      )
  ; here we set load-path for emacs 21 and later
  ; this is just a dummy for test
  (setq jrd-init-var "21")

  ; move custom stuff so only emacs 21 sees it

(custom-set-variables
  ;; custom-set-variables was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 '(confirm-kill-emacs (quote y-or-n-p)))
(custom-set-faces
  ;; custom-set-faces was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 )


  (setq jrd-init-var2 "yy")
  )
(custom-set-variables
  ;; custom-set-variables was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 '(confirm-kill-emacs (quote y-or-n-p))
 '(partial-completion-mode t nil (complete)))
(custom-set-faces
  ;; custom-set-faces was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 )
********************************************

Now we have two instances of custom-set-variables, which is not good.

If I leave the custom-set stuff where emacs 21 wrote it the first
time, I can add code after it and emacs will find what it wrote and
modify it correctly, although Eddy seems to have found problems with
this.  I only did a simple test.

In any case, this is all fixed by customizing custom-file.  Then
customize modifies a file that contains only code written by customize
and I can load custom-file from my .emacs however I want.

As long as custom-file has reasonably prominent mention in the initial
customize buffer, I don't think it is necessary to change the
default. 

Thanks for all your good works,
Jeff


Richard Stallman writes:
 > To: address@hidden
 > cc: address@hidden, address@hidden
 > Subject: Re: customize
 > Date: Mon, 29 Jul 2002 19:00:00 -0600 (MDT)
 > 
 >     > I documented custom-face, but I don't see a reason to change the
 >     > default to use a different file.
 > 
 >     Jeff was discussing customisation of custom-file, not custom-face.
 > 
 > It was custom-file that I documented.  I wrote the wrong name in the
 > message.
 > 
 >       * Database reason: one file then contains only customize's actions,
 >      making it much easier to keep track of which pieces of one's
 >      config come from where.
 > 
 > It is easy enough to distinguish--the stuff written by Customize
 > is compact, distinctive, and clearly labeled.
 > 
 >       * Priority/ordering reason: customize adds things to the end of its
 >      file: this is sensible for it, but potentially bad for elisp which
 >      needs to be executed after customizations; using a separate file
 >      for customize lets my ~/.emacs load the customize part early, late
 >      or in between, at my option, rather than having it always be last.
 > 
 > There appears to be some controversy about whether this is really true.
 > Part of the controversy may be that your description of the problem
 > is heavy on emotions and the facts are not clear.
 > 
 >     > After it is there, you can add stuff in ~/.emacs after it.
 >     and get a layer-cake of intermingled fragments, some of one's own
 >     construction, others added by customize
 > 
 > Could you show an example of this?  As far as I know, customize writes
 > all its definitions for variables in a single sexp, and all its specs
 > for faces in a single sexp, and this can't produce very many layers.
 > 
 > If you show me what the problem looks like, maybe I can change Customize
 > to edit the file in a way that is more convenient.
 > 
 >       * Byte-compilation: putting it all in a separate .el file provides
 >      for the possibility of byte-compiling the customization elisp.
 > 
 > You can byte-compile .emacs, so is this really an advantage?

-- 
Jeff Dwork                      |           address@hidden
Advanced Micro Devices, M/S 45  | 408-749-5216 (voice) 408-774-8448 (fax)
PO Box 3453                     |----------------------------------------
Sunnyvale, Ca 94088-3453        | 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]