unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Drew Adams" <drew.adams@oracle.com>
To: "'Lennart Borgman \(gmail\)'" <lennart.borgman@gmail.com>
Cc: 'Emacs Devel' <emacs-devel@gnu.org>
Subject: RE: A fundamental problem with defcustoms that are lists
Date: Sat, 6 Sep 2008 12:56:35 -0700	[thread overview]
Message-ID: <000001c9105a$ab50a560$0200a8c0@us.oracle.com> (raw)
In-Reply-To: <48C2D31A.1000804@gmail.com>

> >> If you have a defcustom which uses variable length lists
> >>   (defcustom my-option
> >>     :type '(repeat ...))
> >>
> >> then you may want the default values from the list but also 
> >> add some of your own.
> >>
> >> If you customize such an option and the default values are 
> >> changed you will not notice because when your setting is used Emacs 
> >> never sees the changes in default.
> >>
> >> This mean that any enhancements or bug corrections to the 
> >> default will never be used.
> >>
> >> Wouldn't it be worthwhile to give some way to add entries at the
> >> begining or end of the list but add those to the default 
> >> value instead of just replacing the default value?
> 
> > The default value of a list option is typically not just a 
> > starting point to add to but is a default value to replace.
> 
> Why do you think so?

That's what a default value is: something you can replace. The question is
whether your non-nil value serves as the default value of a list (hence, can be
replaced) or is a list of default values to serve as the minimal starting point
of some other list.

Perhaps two different informal senses of the word "default value" are leading to
confusion. If a list always starts out with elements (1 2 3) regardless of your
customizations, you might want to call that starting point its "default value",
but that is not the sense of "default value" that is implemented by defvar or
defcustom. They use "default value" in the sense of the value that is used if
you don't replace it with something else.

Another way to say it is that you want to customize the list in a way that only
adds to what was there, not replace it. That is a different customization
mechanism. There are ways for a given library to let you do that, as I pointed
out.

> There are certainly situation when this is the case, but I can without
> doubt point to other where instead the default value is 
> useful and it is natural to complement it, not replace it.

Those sound like cases where a list of default values is called for, not a
default value that is a list. We can only judge that on a case-by-case basis -
be specific.

The question is what you (a library) want/expect users to replace: the whole
list  or just part of it. If you want some part of it to always be there, then
include that part automatically, outside of the user's customization. In that
case, start the user-replaceable part off with a default value of nil.

But I'm repeating myself.

> > What you raise is the difference between a default value that
> > is a list and a list that includes a minimum set of values by
> > default, that is, a list of default values.
> > 
> > In the latter case, a library can do something like this:
> > 
> > (defvar foo-defaults '(a b c) "List of default values")
> > (defcustom foo-extras () "Your added values"
> >   :type '(repeat ...))
> > (setq foo (append foo-defaults foo-extras))
> 
> I can see your idea (but it should not be handled the way you propose
> above, use :set instead).

Fine. The exact mechanism used is not important here.

I was trying to point out the difference between a list of default values and a
list that serves as a default value, and that it is the library and its use of
the list that decides which it needs (possibly both).

> But that would not give the same flexibility as what I propose.

Be specific.

> Here is my proposal a bit more concretely expressed:
> 
> - In the values stored for a list (ie type 'repeat) for a defcustom
> allow a value 'custom-insert-default to insert the default 
> value for the 'repeat list.

How is that better than having a separate variable (or function) that provides
the list of default values, and having the code splice that in where needed? Is
it that you are trying to give the user greater control over where the
default-values list is spliced in?

I really don't see a useful use case for this. Why don't you start by explaining
your concrete use case or a problematic situation? Either you will convince
people that something "fundamental" is in fact missing, or someone will show you
that you can already do what you want.

> Is that clear? Of course the UI have to provide functionality 
> for this too.

I don't see a need for such a thing, so far. Maybe someone else does. AFAICT,
all that is needed is a single mechanism to provide for a default value. It's up
to library developers to use that appropriately.

But I don't want to discourage you. I was just trying to help, thinking that you
were perhaps a bit confused. Please detail your use case and your proposed
solution. I'll keep quiet and let others help.






  reply	other threads:[~2008-09-06 19:56 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-06 17:34 A fundamental problem with defcustoms that are lists Lennart Borgman (gmail)
2008-09-06 18:40 ` Drew Adams
2008-09-06 18:59   ` Lennart Borgman (gmail)
2008-09-06 19:56     ` Drew Adams [this message]
2008-09-06 20:04       ` Lennart Borgman (gmail)
2008-09-06 20:13 ` Stefan Monnier
2008-09-06 21:45 ` martin rudalics
2008-09-06 22:28   ` Lennart Borgman (gmail)
2008-09-07  4:01     ` Stefan Monnier

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='000001c9105a$ab50a560$0200a8c0@us.oracle.com' \
    --to=drew.adams@oracle.com \
    --cc=emacs-devel@gnu.org \
    --cc=lennart.borgman@gmail.com \
    /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 public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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).