From: Tassilo Horn <tassilo@member.fsf.org>
To: help-gnu-emacs@gnu.org
Subject: Re: reading compile.el, modifying settings
Date: Thu, 05 May 2011 21:09:54 +0200 [thread overview]
Message-ID: <87sjstufp9.fsf@member.fsf.org> (raw)
In-Reply-To: svfwotxaho.fsf@tbox.wtc.algo
Sam Steingold <sds@gnu.org> writes:
Hi Sam,
>>> compilation-error-regexp-alist is defined with defcustom, so it should
>>> be modified with custom-set-variables, not with setq. Don't ask.
>>
>> No, that's not true. You can setq any defcustom as if it was a defvar.
>
> Sure. You can setq any symbol.
> However, the _effect_ of setq on a variable defined with defcustom is
> different - it is not respected by emacs on the same level as
> custom-set-variables.
> At least it was not a few years ago, when I had the same problem - my
> setting being ignored - as Paul is having now.
If that really happens, I'd consider it a bug.
> 1. some packages use symbol properties in addition to the symbol value,
> these are modified by custom-set-variables automatically
,----
| ;; foo is not defined before
| (setq foo 17)
| ;; now load its defcustom
| (defcustom foo 111
| "Bla bla")
| ;; still has my value plus the props of the defcustom
| (cons foo (symbol-plist 'foo))
| ==> (17 standard-value (111) custom-requests nil variable-documentation "Bla bla")
`----
> 2. some custom variables have fancy setters which are called by
> custom-set-variables but not by setq (like symbol macros in CL)
Yeah, but that has to be stated in the docs:
,----[ (info "(elisp)Variable Definitions") ]
| If you specify the `:set' keyword, to make the variable take other
| special actions when set through the customization buffer, the
| variable's documentation string should tell the user specifically
| how to do the same job in hand-written Lisp code.
`----
Good examples here are all those minor mode *variables*, which can be
customized to enable a mode globally, but to enable them from lisp, you
have to use the mode *function*:
;; Works
(custom-set-variables
'(hl-line-mode t))
;; Does not work (i.e., doesn't enable that mode)
(setq hl-line-mode t)
;; so you need to use the mode function from lisp
(hl-line-mode 1)
> In short, the rule of thumb is: do not use setq on custom variables,
> use custom-set-variables instead.
I really don't buy that. My emacs is highly customized in plain lisp
only, so that I can comment what I do and structure it according to my
likings.
Bye,
Tassilo
next prev parent reply other threads:[~2011-05-05 19:09 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-03 14:03 reading compile.el, modifying settings Paul Graham
2011-05-05 10:44 ` Tassilo Horn
2011-05-12 12:49 ` Oleksandr Gavenko
2011-05-05 16:31 ` Sam Steingold
2011-05-05 18:15 ` Tassilo Horn
2011-05-05 18:34 ` Sam Steingold
2011-05-05 19:09 ` Tassilo Horn [this message]
2011-05-05 21:08 ` Sam Steingold
2011-05-06 7:13 ` Tassilo Horn
2011-05-05 19:48 ` Tassilo Horn
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sjstufp9.fsf@member.fsf.org \
--to=tassilo@member.fsf.org \
--cc=help-gnu-emacs@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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.