all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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




  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.