From: Drew Adams <drew.adams@oracle.com>
To: help-gnu-emacs@gnu.org
Subject: (1) defcustom :set, (2) similar for defvar
Date: Fri, 11 Aug 2017 15:12:52 -0700 (PDT) [thread overview]
Message-ID: <b70e8128-b4d0-4917-b1dd-875d94af492c@default> (raw)
In-Reply-To: <dc709973-15fe-4450-a594-670a8bbda20f@default>
1. Q: What's a use case for a `defcustom' `:set' function?
A1: Add/remove a hook function, depending on the new option value.
A2: Perform some updating or synchronizing, after a value change.
;; hooking/unhooking
(lambda (sym val)
(custom-set-default sym val)
(if val
(add-hook 'isearch-update-post-hook
'isearchp-repeat-search-if-fail)
(remove-hook 'isearch-update-post-hook
'isearchp-repeat-search-if-fail)))
;; updating
(lambda (sym val)
(custom-set-default sym val)
(echo-bell-update))
;; synchronizing
(lambda (sym val) ; Synchronize an associated variable.
(custom-set-default sym val)
(setq isearchp-current-filter-preds-alist
isearchp-filter-predicates-alist))
2. Q: Wouldn't some `defcustom' features (`:set', :type', `:group',
etc.) be useful also for other, non-option Lisp variables?
A: Yes, I think so. (But it seems I'm a minority of one, here.)
See bug #27348, which provides a patch to let you do the same
things with `defvar' that you can do with `defcustom'.
(Actually, it provides a new macro, `defvarc', which is
`defcustom' with, by default, no interactive Customizing).
Here's the blurb motivating this feature (from bug #27348):
The ability to type-check, provide :set and :initialize
trigger functions, automatically :require libraries, add
links to doc, associate with one or more :groups, etc. -
these are useful things to be able to do with at least
some defvars, not just with defcustoms. Similarly, the
ability to persist non-option variables in a user's
custom file can be useful.
In sum, this enhancement makes it possible to uncouple
interactive customization from the other features that
`custom.el' offers, in particular, type-checking and
persistence, and to provide the latter for non-option
variables.
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=27348
next prev parent reply other threads:[~2017-08-11 22:12 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-10 13:51 Using "Emacs Configure" **and** modifying .emacs Ronald Fischer
2017-08-10 15:59 ` Drew Adams
2017-08-10 16:58 ` Emanuel Berg
2017-08-12 17:24 ` John Ankarström
2017-08-13 20:16 ` Emanuel Berg
2017-08-12 17:32 ` John Ankarström
2017-08-10 16:00 ` Óscar Fuentes
2017-08-10 16:56 ` Emanuel Berg
2017-08-11 7:21 ` Ronald Fischer
2017-08-11 13:51 ` Emanuel Berg
2017-08-11 14:11 ` Tomas Nordin
[not found] ` <mailman.12937.1502460691.21957.help-gnu-emacs@gnu.org>
2017-08-11 15:20 ` notbob
2017-08-11 15:31 ` Emanuel Berg
2017-08-11 16:54 ` Drew Adams
2017-08-11 19:07 ` Emanuel Berg
2017-08-11 19:15 ` Drew Adams
2017-08-12 15:53 ` ken
2017-08-12 16:11 ` Emanuel Berg
2017-08-12 16:24 ` ken
2017-08-13 20:19 ` Emanuel Berg
[not found] ` <mailman.12941.1502465490.21957.help-gnu-emacs@gnu.org>
2017-08-11 15:57 ` notbob
2017-08-11 16:37 ` Emanuel Berg
[not found] ` <mailman.12935.1502459723.21957.help-gnu-emacs@gnu.org>
2017-08-11 14:09 ` HASM
2017-08-11 15:20 ` Emanuel Berg
[not found] ` <mailman.12940.1502464872.21957.help-gnu-emacs@gnu.org>
2017-08-11 18:55 ` Alan Mackenzie
2017-08-11 20:08 ` HASM
2017-08-11 20:29 ` Emanuel Berg
2017-08-11 20:46 ` Drew Adams
2017-08-11 22:12 ` Drew Adams [this message]
2017-08-12 0:15 ` Emanuel Berg
2017-08-12 7:30 ` tomas
2017-08-12 7:43 ` Emanuel Berg
2017-08-12 8:02 ` tomas
2017-08-12 10:03 ` Emanuel Berg
2017-08-12 10:38 ` Tomas Nordin
2017-08-12 11:38 ` Emanuel Berg
2017-08-15 22:10 ` Emanuel Berg
2017-08-15 22:18 ` Drew Adams
2017-08-15 22:27 ` Emanuel Berg
2017-08-15 23:38 ` Drew Adams
2017-08-16 0:09 ` John Mastro
2017-08-16 0:37 ` Robert Thorpe
2017-08-16 1:20 ` Emanuel Berg
2017-08-16 0:09 ` Emanuel Berg
2017-08-15 22:25 ` John Mastro
2017-08-15 22:41 ` Emanuel Berg
2017-08-15 23:09 ` Drew Adams
2017-08-16 0:07 ` John Mastro
2017-08-16 0:13 ` Emanuel Berg
2017-08-12 12:50 ` Emanuel Berg
2017-08-12 16:04 ` Drew Adams
2017-08-12 16:20 ` Emanuel Berg
2017-08-12 16:04 ` Drew Adams
2017-08-12 0:32 ` Emanuel Berg
2017-08-14 16:33 ` Emanuel Berg
2017-08-14 18:15 ` Emanuel Berg
2017-08-14 21:41 ` Emanuel Berg
2017-08-14 23:17 ` John Mastro
2017-08-15 0:24 ` Emanuel Berg
2017-08-15 2:20 ` Emanuel Berg
[not found] ` <mailman.12888.1502380810.21957.help-gnu-emacs@gnu.org>
2017-08-10 17:47 ` Dan Espen
2017-08-10 18:06 ` Drew Adams
2017-08-10 18:10 ` Drew Adams
[not found] ` <mailman.12897.1502388423.21957.help-gnu-emacs@gnu.org>
2017-08-10 19:08 ` Dan Espen
2017-08-10 19:14 ` Emanuel Berg
[not found] ` <mailman.12899.1502392471.21957.help-gnu-emacs@gnu.org>
2017-08-11 12:03 ` Dan Espen
2017-08-11 13:46 ` Emanuel Berg
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=b70e8128-b4d0-4917-b1dd-875d94af492c@default \
--to=drew.adams@oracle.com \
--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.
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).