* :file keyword for Customize @ 2008-05-08 16:35 Drew Adams 2008-05-08 16:43 ` Jason Rumney ` (3 more replies) 0 siblings, 4 replies; 30+ messages in thread From: Drew Adams @ 2008-05-08 16:35 UTC (permalink / raw) To: 'Emacs-Devel' How about adding a :file keyword for `defcustom' and `defface'? (defcustom foo-bar-flag t "Non-nil means toto." :type 'boolean :group 'foo :file (if (eq system-type 'windows-nt) "C:\\foo-stuff\\foo-cus.el" "/toto/foo-stuff/foo-cus.el")) Its argument would be evaluated to a file name. That particular `defcustom' or `defface' setting would be saved in that file, instead of in `custom-file' or `init-file'. A nil or "" value for :file would mean the same thing as the absence of a :file keyword: as now, use `custom-file' or, if no `custom-file', `init-file'. This could provide a little more modularity for packages (and for any other groupings of options & faces). It could help deal with things like platform differences (for a package) and initialization order of settings. It could allow users a little more flexibility in terms of when some groups of Customize settings are loaded (currently, all Customize settings are loaded at once). It could simplify communication with package authors about bugs (e.g. automatically include the package's Customize settings in a bug report). I don't have a particular use-case in mind; it's just something that occurred to me. There is nothing special in this, but I think it might help organize things a bit. A user's `custom-file' or `init-file' can become a monolithic blob, and this could help cut down on that. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 16:35 :file keyword for Customize Drew Adams @ 2008-05-08 16:43 ` Jason Rumney 2008-05-08 16:59 ` Drew Adams 2008-05-08 20:48 ` David Kastrup ` (2 subsequent siblings) 3 siblings, 1 reply; 30+ messages in thread From: Jason Rumney @ 2008-05-08 16:43 UTC (permalink / raw) To: Drew Adams; +Cc: 'Emacs-Devel' Drew Adams wrote: > How about adding a :file keyword for `defcustom' and `defface'? > What do existing packages like Gnus and JDEE do to save their options in a separate file? If what they do is hacky, then that would support such a need, but if they can do it cleanly already, then it might be suitable for your needs too. ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: :file keyword for Customize 2008-05-08 16:43 ` Jason Rumney @ 2008-05-08 16:59 ` Drew Adams 2008-05-08 17:08 ` Jason Rumney 0 siblings, 1 reply; 30+ messages in thread From: Drew Adams @ 2008-05-08 16:59 UTC (permalink / raw) To: 'Jason Rumney'; +Cc: 'Emacs-Devel' > > How about adding a :file keyword for `defcustom' and `defface'? > > What do existing packages like Gnus and JDEE do to save their > options in a separate file? No idea. I don't have or use either. > If what they do is hacky, then that would support such > a need, but if they can do it cleanly already, then it might > be suitable for your needs too. To be clear, I don't have any particular needs in this regard. I just thought this might make sense generally. The granularity for Customize customizations, in terms of persistence and loading is currently all or none: everything is in one file (`custom-file' or `init-file'). It just occurred to me that it might be better to at least let Emacs-Lisp programmers group customizations into smaller persistence/load units, if they see fit. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 16:59 ` Drew Adams @ 2008-05-08 17:08 ` Jason Rumney 2008-05-08 17:41 ` Ted Zlatanov 2008-05-08 18:00 ` Drew Adams 0 siblings, 2 replies; 30+ messages in thread From: Jason Rumney @ 2008-05-08 17:08 UTC (permalink / raw) To: Drew Adams; +Cc: 'Emacs-Devel' Drew Adams wrote: > The granularity for Customize customizations, in terms of persistence and > loading is currently all or none: everything is in one file (`custom-file' or > `init-file'). JDEE at least, saves its own customizations in project files in the local directory. I think Gnus also lets you save your Gnus related customizations in .gnus. That is why I suggested looking at what those packages do. > It just occurred to me that it might be better to at least let > Emacs-Lisp programmers group customizations into smaller persistence/load units, > if they see fit. > It might be better to do it at the group level than each individual customization then, if grouping is the desired outcome. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 17:08 ` Jason Rumney @ 2008-05-08 17:41 ` Ted Zlatanov 2008-05-08 18:00 ` Drew Adams 2008-05-08 18:00 ` Drew Adams 1 sibling, 1 reply; 30+ messages in thread From: Ted Zlatanov @ 2008-05-08 17:41 UTC (permalink / raw) To: emacs-devel On Thu, 08 May 2008 18:08:36 +0100 Jason Rumney <jasonr@gnu.org> wrote: JR> Drew Adams wrote: >> The granularity for Customize customizations, in terms of persistence and >> loading is currently all or none: everything is in one file (`custom-file' or >> `init-file'). JR> JDEE at least, saves its own customizations in project files in the JR> local directory. I think Gnus also lets you save your Gnus related JR> customizations in .gnus. That is why I suggested looking at what those JR> packages do. Gnus has two kinds of settings: normal ELisp variables, customized and used as usual, and newsrc settings, which go into .newsrc.eld. There are a few others, like the Gnus registry and score files, but generally the two groups above are the major ones. There's some magic with the group/topic parameters that I can explain but it wouldn't matter much for what Drew proposed. .gnus.el is just ELisp code, nothing special. Gnus doesn't set anything special for the ELisp variables it defines, so if they are customized, they will be saved in the usual places. FWIW, I would make custom-file accept an alist of defgroup/defcustom symbol name regex, associated with a file name or a function. That puts the power in the user's hands, yet allows package authors to add to the alist. The big win is that no special :file keyword is needed, and all existing packages will work with or without this special settings. Ted ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: :file keyword for Customize 2008-05-08 17:41 ` Ted Zlatanov @ 2008-05-08 18:00 ` Drew Adams 2008-05-08 19:12 ` Ted Zlatanov 2008-05-08 20:00 ` Stephen J. Turnbull 0 siblings, 2 replies; 30+ messages in thread From: Drew Adams @ 2008-05-08 18:00 UTC (permalink / raw) To: 'Ted Zlatanov', emacs-devel > <jasonr@gnu.org> wrote: > JR> Drew Adams wrote: > >> The granularity for Customize customizations, in terms of > >> persistence and loading is currently all or none: everything > >> is in one file (`custom-file' or `init-file'). > >> > JR> JDEE at least, saves its own customizations in project > JR> files in the local directory. I think Gnus also lets you > JR> save your Gnus related customizations in .gnus. That is > JR> why I suggested looking at what those packages do. > > Gnus has two kinds of settings: normal ELisp variables, customized and > used as usual, and newsrc settings, which go into .newsrc.eld. There > are a few others, like the Gnus registry and score files, but > generally the two groups above are the major ones. There's some magic > with the group/topic parameters that I can explain but it wouldn't > matter much for what Drew proposed. > > .gnus.el is just ELisp code, nothing special. Gnus doesn't > set anything special for the ELisp variables it defines, so if they > are customized, they will be saved in the usual places. > > FWIW, I would make custom-file accept an alist of defgroup/defcustom > symbol name regex, associated with a file name or a function. I don't think that's the place to specify such organization, and I don't think a regexp offers the right kind of flexibility. > That puts the power in the user's hands, yet allows package > authors to add to the alist. The big win is that no special > :file keyword is needed, and all existing packages will work > with or without this special settings. I don't see any such big win. It's no big deal to add a :file keyword. And all existing packages would continue to work with no changes - :file would be optional, of course. This is about letting an individual option or face (or perhaps group) decide where it is stored (and consequently let users decide when it is loaded). The place to do that is in `defcustom' and `defface' (and perhaps `defgroup'). ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 18:00 ` Drew Adams @ 2008-05-08 19:12 ` Ted Zlatanov 2008-05-08 21:27 ` Drew Adams 2008-05-08 20:00 ` Stephen J. Turnbull 1 sibling, 1 reply; 30+ messages in thread From: Ted Zlatanov @ 2008-05-08 19:12 UTC (permalink / raw) To: emacs-devel On Thu, 8 May 2008 11:00:40 -0700 "Drew Adams" <drew.adams@oracle.com> wrote: >Ted Z wrote: >> FWIW, I would make custom-file accept an alist of defgroup/defcustom >> symbol name regex, associated with a file name or a function. DA> I don't think that's the place to specify such organization, We disagree then. DA> and I don't think a regexp offers the right kind of flexibility. That may be, the selection mechanism is not important. It can be a cond form. The point is to put the choice in the user's hands. >> That puts the power in the user's hands, yet allows package authors >> to add to the alist. The big win is that no special :file keyword is >> needed, and all existing packages will work with or without this >> special settings. DA> I don't see any such big win. It's no big deal to add a :file DA> keyword. And all existing packages would continue to work with no DA> changes - :file would be optional, of course. All existing packages can work with the new mechanism I proposed without modifications, whereas your proposal requires special *new* code everywhere a different custom file is desired, and leaves the choice up to whoever writes the source code. Thus the win is that less code is written all around, users have more choice, and everything works as it did before. DA> This is about letting an individual option or face (or perhaps DA> group) decide where it is stored (and consequently let users decide DA> when it is loaded). The place to do that is in `defcustom' and DA> `defface' (and perhaps `defgroup'). I think I understand your proposal, and I think it puts the option in the place where it's hardest to change it if the package author or the user should need to do it. It also makes it hard to organize configurations in a way that the *user* likes. Perhaps I misunderstand your proposal. Will the user be able to change the :file parameter on their own without modifying code, for example? What happens if the file name changes with a new package? Do you add extra code to handle the possible values of :file? What if the user wants to save the configuration for two packages in one custom file, but all other packages in the default place? This really is not an unusual need. I like to keep my Gnus and BBDB variables separate from the rest of Emacs but in one file, for example. The default path the package author picks may not be appropriate. For example, in Gnus a lot of work had to be done to remove dependencies on ~/News and ~/Mail that were put in place over time. Many users needed those paths relocated to somewhere that made sense to them. Ted ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: :file keyword for Customize 2008-05-08 19:12 ` Ted Zlatanov @ 2008-05-08 21:27 ` Drew Adams 2008-05-09 14:01 ` Ted Zlatanov 0 siblings, 1 reply; 30+ messages in thread From: Drew Adams @ 2008-05-08 21:27 UTC (permalink / raw) To: 'Ted Zlatanov', emacs-devel > >> FWIW, I would make custom-file accept an alist of > >> defgroup/defcustom symbol name regex, associated with > >> a file name or a function. > > DA> I don't think that's the place to specify such organization, > > We disagree then. Nothing wrong with that. ;-) > DA> and I don't think a regexp offers the right kind of flexibility. > > That may be, the selection mechanism is not important. It > can be a cond form. The point is to put the choice in the user's hands. The ultimate choice must be the user's. But the programmer can write code that decides _how_ users make the choices and _which_ choices they can make. The programmer knows about code dependencies and other internal needs, and can DTRT wrt both the code and the user (UI design) - giving the user the choices s?he needs but guiding how those choices are made. > >> That puts the power in the user's hands, yet allows package authors > >> to add to the alist. The big win is that no special :file > >> keyword is needed, and all existing packages will work with or > >> without this special settings. > > DA> I don't see any such big win. It's no big deal to add a :file > DA> keyword. And all existing packages would continue to work with no > DA> changes - :file would be optional, of course. > > All existing packages can work with the new mechanism I > proposed without modifications, whereas your proposal requires > special *new* code everywhere a different custom file is desired, > and leaves the choice up to whoever writes the source code. > Thus the win is that less code is written all around, users have > more choice, and everything works as it did before. > > DA> This is about letting an individual option or face (or perhaps > DA> group) decide where it is stored (and consequently let > DA> users decide when it is loaded). The place to do that is in > DA> `defcustom' and `defface' (and perhaps `defgroup'). > > I think I understand your proposal, and I think it puts the option in > the place where it's hardest to change it if the package author or the > user should need to do it. It also makes it hard to organize > configurations in a way that the *user* likes. Perhaps I > misunderstand your proposal. Will the user be able to change the > :file parameter on their own without modifying code, for example? What I was thinking was that library writers would typically provide one or more user options or functions as the :file sexps - it is those sexps that would then let users, in effect, determine the :file values used. IOW, end users would not directly determine the sexps used for :file, but they would ultimately determine the values of those sexps in some way (defined by the programmer). There would be nothing in the nature of :file itself that would force programmers to do that, but they would do it naturally - it would make no sense, for instance, for a programmer to hard-code an absolute file name as a :file sexp or it's value. (In that, the example I gave was misleading, but I wanted to get the general idea across, showing that arbitrary code could be used for :file.) The idea would be to let programmers define the choices that an end user has, just as they do with `defcustom' in general (not every variable is a user option). For instance, the code used for several :file args could be made to return the same value in some context if that is appropriate, effectively ensuring that those options would all be stored in the same file. That's different from letting users specify the files to use for individual options arbitrarily. (Of course, any user can always resort to changing the code, as well, but that's not your point nor mine.) > What happens if the file name changes with a new package? Do you add > extra code to handle the possible values of :file? Again, :file would not have a literal absolute file name as argument - no one would code that way. > What if the user wants to save the configuration for two > packages in one custom file, but all other packages in the > default place? That would certainly be possible if each package provided the user a choice wrt the location, as I imagine. The question is how to provide the user with such choices - where to do that. In what I imagine, programmers can do that as they like, using whatever code they think is appropriate as the various :file sexps. They can choose to make these 4 options use the same sexp and those 3 options use a different sexp (regardless of the whether the sexp values differ). They can choose to specify :file at the `defgroup' level and define :group's that fit the persistencs and loading needs. They can do just about anything they think is appropriate for their users. In designing this, the choice is not programmer vs user. The idea is to come up with something for programmers that helps them help their users. Each has some say in defining the persistence and load behavior. It's `and', not `either...or'. > This really is not an unusual need. I like to keep my Gnus and BBDB > variables separate from the rest of Emacs but in one file, for example. > > The default path the package author picks may not be appropriate. > For example, in Gnus a lot of work had to be done to remove > dependencies on ~/News and ~/Mail that were put in place over time. > Many users needed those paths relocated to somewhere that made sense > to them. I don't disagree at all about any of that. The question is which tools to provide programmers so they can meet user needs flexibly. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 21:27 ` Drew Adams @ 2008-05-09 14:01 ` Ted Zlatanov 0 siblings, 0 replies; 30+ messages in thread From: Ted Zlatanov @ 2008-05-09 14:01 UTC (permalink / raw) To: emacs-devel On Thu, 8 May 2008 14:27:10 -0700 "Drew Adams" <drew.adams@oracle.com> wrote: DA> What I was thinking was that library writers would typically provide DA> one or more user options or functions as the :file sexps - it is DA> those sexps that would then let users, in effect, determine the DA> :file values used. IOW, end users would not directly determine the DA> sexps used for :file, but they would ultimately determine the values DA> of those sexps in some way (defined by the programmer). ... DA> In what I imagine, programmers can do that as they like, using DA> whatever code they think is appropriate as the various :file DA> sexps. [...] They can do just about anything they think is DA> appropriate for their users. That seems really complicated, and still requires every package to do it explicitly. It seems like you're trying to set up a :filegroup option, really, which tells the Customize interface that some options should be logically grouped together when they are saved. I think defgroup does this logical grouping already for the vast majority of options, so it's a matter of saying "save this defgroup's variables in file X." That may be possible as an optional add-on package that doesn't change the way Customize works normally. The approach you proposed would, I think, require changes to the core Customize behavior instead so it's less desirable. Ted ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: :file keyword for Customize 2008-05-08 18:00 ` Drew Adams 2008-05-08 19:12 ` Ted Zlatanov @ 2008-05-08 20:00 ` Stephen J. Turnbull 2008-05-08 21:27 ` Drew Adams 2008-05-09 8:37 ` Bastien 1 sibling, 2 replies; 30+ messages in thread From: Stephen J. Turnbull @ 2008-05-08 20:00 UTC (permalink / raw) To: Drew Adams; +Cc: 'Ted Zlatanov', emacs-devel Drew Adams writes: > This is about letting an individual option or face (or perhaps group) decide > where it is stored (and consequently let users decide when it is loaded). The > place to do that is in `defcustom' and `defface' (and perhaps `defgroup'). I think this is a YAGNI, and likely to lead to a plethora of confusing custom files which appear at random times (ie, when you first save a customization for a variable that targets that file). ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: :file keyword for Customize 2008-05-08 20:00 ` Stephen J. Turnbull @ 2008-05-08 21:27 ` Drew Adams 2008-05-08 21:34 ` Jason Rumney 2008-05-09 6:43 ` Stephen J. Turnbull 2008-05-09 8:37 ` Bastien 1 sibling, 2 replies; 30+ messages in thread From: Drew Adams @ 2008-05-08 21:27 UTC (permalink / raw) To: 'Stephen J. Turnbull'; +Cc: 'Ted Zlatanov', emacs-devel > > This is about letting an individual option or face (or > > perhaps group) decide where it is stored (and consequently > > let users decide when it is loaded). The place to do that > > is in `defcustom' and `defface' (and perhaps `defgroup'). > > I think this is a YAGNI, and likely to lead to a plethora of confusing > custom files which appear at random times (ie, when you first save a > customization for a variable that targets that file). OK, so you think that. Care to give a reason or two? Why is throwing everything into the same sack better? I grant you that at least one knows which sack everything is in, if there is only one sack. But beyond that? ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 21:27 ` Drew Adams @ 2008-05-08 21:34 ` Jason Rumney 2008-05-09 6:43 ` Stephen J. Turnbull 1 sibling, 0 replies; 30+ messages in thread From: Jason Rumney @ 2008-05-08 21:34 UTC (permalink / raw) To: Drew Adams Cc: 'Stephen J. Turnbull', 'Ted Zlatanov', emacs-devel Drew Adams wrote: > Why is throwing everything into the same sack better? I grant you that at least > one knows which sack everything is in, if there is only one sack. But beyond > that? > There are fewer ways to break things if you throw them all in the same sack. ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: :file keyword for Customize 2008-05-08 21:27 ` Drew Adams 2008-05-08 21:34 ` Jason Rumney @ 2008-05-09 6:43 ` Stephen J. Turnbull 1 sibling, 0 replies; 30+ messages in thread From: Stephen J. Turnbull @ 2008-05-09 6:43 UTC (permalink / raw) To: Drew Adams; +Cc: 'Ted Zlatanov', emacs-devel Drew Adams writes: > > > This is about letting an individual option or face (or > > > perhaps group) decide where it is stored > > > > I think this is a YAGNI, and likely to lead to a plethora of confusing > > custom files which appear at random times (ie, when you first save a > > customization for a variable that targets that file). > > OK, so you think that. Care to give a reason or two? YAGNI? The proponent says he doesn't really have a use case in <004101c8b129$788cd490$0ab32382@us.oracle.com>. That's a slam dunk. > Why is throwing everything into the same sack better? That's not what I said. I said that the files appear at random times, implying that that is what would be confusing. > I grant you that at least one knows which sack everything is in, if > there is only one sack. That is another good reason. > But beyond that? Sorry, you only get three wishes per magic lamp. I'm not going to play. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 20:00 ` Stephen J. Turnbull 2008-05-08 21:27 ` Drew Adams @ 2008-05-09 8:37 ` Bastien 1 sibling, 0 replies; 30+ messages in thread From: Bastien @ 2008-05-09 8:37 UTC (permalink / raw) To: emacs-devel "Stephen J. Turnbull" <stephen@xemacs.org> writes: > Drew Adams writes: > > > This is about letting an individual option or face (or perhaps group) decide > > where it is stored (and consequently let users decide when it is loaded). The > > place to do that is in `defcustom' and `defface' (and perhaps `defgroup'). > > I think this is a YAGNI, and likely to lead to a plethora of confusing > custom files which appear at random times (ie, when you first save a > customization for a variable that targets that file). I also think so. For me, using both a ~/.emacs.el and a ~/.emacs-custom.el is precisely useful only because you have to edit the first one by hand and you can leave the second one behind the curtain, you can even forget about it. Having to forget about more than one file will make it harder to remember the location of these files for the few occasions where you'll have to edit them manually... -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: :file keyword for Customize 2008-05-08 17:08 ` Jason Rumney 2008-05-08 17:41 ` Ted Zlatanov @ 2008-05-08 18:00 ` Drew Adams 1 sibling, 0 replies; 30+ messages in thread From: Drew Adams @ 2008-05-08 18:00 UTC (permalink / raw) To: 'Jason Rumney'; +Cc: 'Emacs-Devel' > > The granularity for Customize customizations, in terms of > > persistence and loading is currently all or none: everything > > is in one file (`custom-file' or `init-file'). > > JDEE at least, saves its own customizations in project files in the > local directory. I think Gnus also lets you save your Gnus related > customizations in .gnus. That is why I suggested looking at > what those packages do. I'm thinking of this for ordinary options and faces. I know that libraries can write their own persistent data to whatever files they want. This is about ordinary user options and faces. > > It just occurred to me that it might be better to at least let > > Emacs-Lisp programmers group customizations into smaller > > persistence/load units, if they see fit. > > It might be better to do it at the group level than each individual > customization then, if grouping is the desired outcome. I considered that, but I don't think so. This is for maximum flexibility. Grouping via `defgroup' tends to be about user-apparent similarities, e.g. similarity of area of application. This is a different kind of grouping, having to do with where data is stored and when it is loaded. We could of course also allow :file for `defgroup', to provide an easy way to specify the same file for all options & faces in a particular group. There is no reason, however, to hard-couple the two kinds of grouping. Also, it is common for the same `defcustom' or `defface' to use multiple :group's. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 16:35 :file keyword for Customize Drew Adams 2008-05-08 16:43 ` Jason Rumney @ 2008-05-08 20:48 ` David Kastrup 2008-05-08 21:34 ` Drew Adams 2008-05-09 14:11 ` Ted Zlatanov 2008-05-09 11:12 ` :file keyword for Customize Richard M Stallman 2008-05-13 13:53 ` Paul R 3 siblings, 2 replies; 30+ messages in thread From: David Kastrup @ 2008-05-08 20:48 UTC (permalink / raw) To: Drew Adams; +Cc: 'Emacs-Devel' "Drew Adams" <drew.adams@oracle.com> writes: > How about adding a :file keyword for `defcustom' and `defface'? > > (defcustom foo-bar-flag t > "Non-nil means toto." > :type 'boolean :group 'foo > :file (if (eq system-type 'windows-nt) > "C:\\foo-stuff\\foo-cus.el" > "/toto/foo-stuff/foo-cus.el")) > > Its argument would be evaluated to a file name. That particular `defcustom' or > `defface' setting would be saved in that file, instead of in `custom-file' or > `init-file'. A nil or "" value for :file would mean the same thing as the > absence of a :file keyword: as now, use `custom-file' or, if no `custom-file', > `init-file'. > > This could provide a little more modularity for packages (and for any > other groupings of options & faces). I don't see what scattering the saved options across different files has to do with modularity. > It could help deal with things like platform differences (for a > package) and initialization order of settings. Uh no. It actually _curbs_ being able to deal with platform differences since you can no longer have one options file per platform. > It could allow users a little more flexibility in terms of when some > groups of Customize settings are loaded (currently, all Customize > settings are loaded at once). So what? What is the problem you are trying to fix here? > It could simplify communication with package authors about bugs > (e.g. automatically include the package's Customize settings in a bug > report). Nonsense. report.el already provides a way to report relevant settings. And if you wanted to have a special way to report everything customized for a package, you'd do it by listing the customization group rather than some file. We _never_ include a file in bug reports but rather settings. And since people could put their settings anywhere, and since variables can be set without customizing them or even overriden, a file would be utterly unreliable, anyway, as a source of information. > I don't have a particular use-case in mind; it's just something that > occurred to me. There is nothing special in this, but I think it > might help organize things a bit. A user's `custom-file' or > `init-file' can become a monolithic blob, and this could help cut down > on that. So what? It is a "monolithic blob" not intended for human consumption, and one can't really delay loading it, anyway. So all this buys us is added complication and longer load times. Don't fix what is not broken. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: :file keyword for Customize 2008-05-08 20:48 ` David Kastrup @ 2008-05-08 21:34 ` Drew Adams 2008-05-08 21:48 ` Jason Rumney 2008-05-08 21:51 ` David Kastrup 2008-05-09 14:11 ` Ted Zlatanov 1 sibling, 2 replies; 30+ messages in thread From: Drew Adams @ 2008-05-08 21:34 UTC (permalink / raw) To: 'David Kastrup'; +Cc: 'Emacs-Devel' > > This could provide a little more modularity for packages > > (and for any other groupings of options & faces). > > I don't see what scattering the saved options across > different files has to do with modularity. Scattering is not about modularity, but no one suggested scattering. Grouping is about modularity, and this is about grouping: deciding which options belong together wrt persistence and loading. The choice is not a binary one: (1) accept one giant lump or (2) explode and scatter everything into elementary particles. It's about providing constructs that let programmers and users decide how to group things for persistence and loading: which things to save in the same file. > > It could help deal with things like platform differences (for a > > package) and initialization order of settings. > > Uh no. It actually _curbs_ being able to deal with platform > differences How so? > since you can no longer have one options file per platform. Why not? How would that be prevented? How can adding choices prevent you from doing what you do today? > > It could allow users a little more flexibility in terms of when some > > groups of Customize settings are loaded (currently, all Customize > > settings are loaded at once). > > So what? What is the problem you are trying to fix here? I already said that I don't have a particular problem I am trying to fix. Currently, all user settings are stored persistently in the same sack (modulo special programming to store data in particular files). That's not very modular, and it gives both the programmer and the user little choice wrt what is stored where and when things are loaded - all Customize settings are stored together and loaded together. > > It could simplify communication with package authors about bugs > > (e.g. automatically include the package's Customize > > settings in a bug report). > > Nonsense. report.el already provides a way to report > relevant settings. That report.el exists does not imply that the proposed feature is nonsense. Such reasoning is, however, nonsense. > And if you wanted to have a special way to report everything > customized for a package, you'd do it by listing the customization > group rather than some file. Not necessarily. Customization groups can have many different meanings and different grouping criteria. Those don't necessarily map directly to appropriate persistence and loading models. > We _never_ include a file in bug reports but rather settings. I'll let you speak for what "we _never_" do, but I, for one, have sometimes been interested to see what a user's .emacs or `custom-file' looked like in connection with a bug report. Seeing dynamic settings and seeing persistent values (and knowing when those are loaded) both can sometimes provide useful information. They are not exclusive options. You seem to be bent on imposing non-existent binary choices. There is, in any case, nothing in what I proposed that requires you ("we") to use the feature to communicate persistent settings in bug reports. > And since people could put their settings anywhere, and since > variables can be set without customizing them or even > overriden, a file would be utterly unreliable, anyway, as a > source of information. Again, nothing forces you to "rely" on persistent settings. But there is more than one request in the help lists to see what might be in a reporting user's .emacs - sometimes that's useful. If such information is not useful in some context, or if you think it is "_never_" interesting to you, then, uh, just don't use it; don't ask for it. I would like to be able to (be _able_ to, not be forced to) suggest to a user to load the customizations for package foo after, not before, those for package bar. That is not possible today, when it comes to Customize settings - they're simply all lumped together. > > I don't have a particular use-case in mind; it's just something that > > occurred to me. There is nothing special in this, but I think it > > might help organize things a bit. A user's `custom-file' or > > `init-file' can become a monolithic blob, and this could > > help cut down on that. > > So what? It is a "monolithic blob" not intended for human > consumption, It's certainly intended for programmatic use. And ultimately for human use, in terms of its effects. Such an argument could be applied to all software engineering (and sometimes was, about 40 years ago): just throw everything in one sack; it's all internal, so it doesn't matter how messy it is. > and one can't really delay loading it, anyway. So all this buys us is > added complication and longer load times. No idea what you mean by that. Users today can decide when to load `custom-file'. They could do the same with any such files of Customize options, the same way. > Don't fix what is not broken. Not every improvement is a bug fix. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 21:34 ` Drew Adams @ 2008-05-08 21:48 ` Jason Rumney 2008-05-08 22:10 ` Drew Adams 2008-05-08 21:51 ` David Kastrup 1 sibling, 1 reply; 30+ messages in thread From: Jason Rumney @ 2008-05-08 21:48 UTC (permalink / raw) To: Drew Adams; +Cc: 'Emacs-Devel' Drew Adams wrote: > No idea what you mean by that. Users today can decide when to load > `custom-file'. They could do the same with any such files of Customize options, > the same way. > I'm having trouble seeing what use this feature is. The user doesn't have control over which file different options are saved in, and the package authors don't have control over when or even if the various custom files they write to are loaded relative to each other. Who is this for, and what problem is it trying to solve? ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: :file keyword for Customize 2008-05-08 21:48 ` Jason Rumney @ 2008-05-08 22:10 ` Drew Adams 2008-05-08 22:31 ` David Kastrup 0 siblings, 1 reply; 30+ messages in thread From: Drew Adams @ 2008-05-08 22:10 UTC (permalink / raw) To: 'Jason Rumney'; +Cc: 'Emacs-Devel' > > No idea what you mean by that. Users today can decide when to load > > `custom-file'. They could do the same with any such files > > of Customize options, the same way. > > I'm having trouble seeing what use this feature is. The user doesn't > have control over which file different options are saved in, Yes, s?he would, typically. The programmer would use as a :file sexp a user option or a function that in some way allowed the user such a choice. But the choice would not necessarily be arbitrary and separate for each option. See my previous response about this. > and the package authors don't have control over when or even if the various > custom files they write to are loaded relative to each other. In general, that is correct (and a good thing). But here too, package authors could defined the context to some extent, within which a user makes such a choice. But, yes, a user can decide when to load a given Customize settings file. That is one of the reasons for this feature. > Who is this for, and what problem is it trying to solve? See previous, wrt load decisions. In general, this would give both programmers and users more control over where related options are stored and when they are loaded. That's all. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 22:10 ` Drew Adams @ 2008-05-08 22:31 ` David Kastrup 0 siblings, 0 replies; 30+ messages in thread From: David Kastrup @ 2008-05-08 22:31 UTC (permalink / raw) To: Drew Adams; +Cc: 'Emacs-Devel', 'Jason Rumney' "Drew Adams" <drew.adams@oracle.com> writes: >> Who is this for, and what problem is it trying to solve? > > See previous, wrt load decisions. In general, this would give both > programmers and users more control over where related options are > stored and when they are loaded. That's all. What problem is it trying to solve, Drew? What problem? We don't have a way to specify which memory addresses Emacs is supposed to load particular libraries to, either, because it is pointless. It is nonsensical to give people more control over things that have no discernable advantage. So please let us focus on solving existing problems instead of _creating_ new ones. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 21:34 ` Drew Adams 2008-05-08 21:48 ` Jason Rumney @ 2008-05-08 21:51 ` David Kastrup 1 sibling, 0 replies; 30+ messages in thread From: David Kastrup @ 2008-05-08 21:51 UTC (permalink / raw) To: Drew Adams; +Cc: 'Emacs-Devel' "Drew Adams" <drew.adams@oracle.com> writes: >> So what? What is the problem you are trying to fix here? > > I already said that I don't have a particular problem I am trying to > fix. Then let's leave this alone until there is a problem. > Currently, all user settings are stored persistently in the same sack > (modulo special programming to store data in particular files). That's > not very modular, and it gives both the programmer and the user little > choice wrt what is stored where and when things are loaded - all > Customize settings are stored together and loaded together. Yes. And the whole "Emacs" executable is stored together and loaded together. There are even files preloaded into it in order to make it load faster. What is bad about that? Why give the user "choice" about something which is utterly irrelevant? So that there are more things that can go wrong or be misconfigured without any advantage? > I would like to be able to (be _able_ to, not be forced to) suggest to > a user to load the customizations for package foo after, not before, > those for package bar. That is not possible today, when it comes to > Customize settings - they're simply all lumped together. C-h f defcustom RET [...] :set-after VARIABLES Specifies that symbol should be set after the list of variables VARIABLES when both have been customized. >> > I don't have a particular use-case in mind; it's just something >> > that occurred to me. There is nothing special in this, but I think >> > it might help organize things a bit. A user's `custom-file' or >> > `init-file' can become a monolithic blob, and this could help cut >> > down on that. >> >> So what? It is a "monolithic blob" not intended for human >> consumption, > > It's certainly intended for programmatic use. And ultimately for human > use, in terms of its effects. But splitting it causes no different effect whatsoever except making the whole less transparent. > Such an argument could be applied to all software engineering (and > sometimes was, about 40 years ago): just throw everything in one sack; > it's all internal, so it doesn't matter how messy it is. Lisp mostly works with a single obarray. This makes things more transparent rather than more opaque. All one sack. There is nothing messy about that. >> and one can't really delay loading it, anyway. So all this buys us >> is added complication and longer load times. > > No idea what you mean by that. Users today can decide when to load > `custom-file'. They could do the same with any such files of Customize > options, the same way. Why? >> Don't fix what is not broken. > > Not every improvement is a bug fix. Not every complication is an improvement. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 20:48 ` David Kastrup 2008-05-08 21:34 ` Drew Adams @ 2008-05-09 14:11 ` Ted Zlatanov 2008-05-09 14:34 ` David Kastrup 1 sibling, 1 reply; 30+ messages in thread From: Ted Zlatanov @ 2008-05-09 14:11 UTC (permalink / raw) To: emacs-devel On Thu, 08 May 2008 22:48:47 +0200 David Kastrup <dak@gnu.org> wrote: DK> So what? [the user's custom file] is a "monolithic blob" not DK> intended for human consumption, and one can't really delay loading DK> it, anyway. So all this buys us is added complication and longer DK> load times. I think monolithic blobs have historically been proven unsuitable for human consumption. In the case of a binary, that's fine. For configuration data, that's dangerous. For example, the /etc/shadow file is intended to make the /etc/passwd file less dangerous when compromised. /etc/passwd can do the job by itself, but it makes sense for security to take the dangerous bits out. As another example, the Windows registry is a monolithic blob. A special tool is needed to edit the blob and its capabilities are limited by the lowest common denominator (key=value, plain text data). In the same way a user's customizations for authentication are more sensitive than the default customizations, and should probably be stored in a separate file that's encrypted with some mechanism. The default customizations are then available to fellow users without danger of compromising security. In the case of Gnus, it makes sense to separate Gnus-specific settings. I do this manually in my gnus.el, but I can't customize the Gnus variables without a manual resync between my custom file and gnus.el. I think Drew's proposal is worth considering as an add-on package, but I wouldn't push it on every user by default. Ted ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-09 14:11 ` Ted Zlatanov @ 2008-05-09 14:34 ` David Kastrup 2008-05-09 15:07 ` Ted Zlatanov 0 siblings, 1 reply; 30+ messages in thread From: David Kastrup @ 2008-05-09 14:34 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov <tzz@lifelogs.com> writes: > On Thu, 08 May 2008 22:48:47 +0200 David Kastrup <dak@gnu.org> wrote: > > DK> So what? [the user's custom file] is a "monolithic blob" not > DK> intended for human consumption, and one can't really delay loading > DK> it, anyway. So all this buys us is added complication and longer > DK> load times. > > I think monolithic blobs have historically been proven unsuitable for > human consumption. What about "not intended for human consumption" did you not understand? > In the same way a user's customizations for authentication are more > sensitive than the default customizations, and should probably be > stored in a separate file that's encrypted with some mechanism. Put them into ~/.netrc > The default customizations are then available to fellow users without > danger of compromising security. There is nothing worse than people indiscriminately copying .emacs files, anyway. -- David Kastrup ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-09 14:34 ` David Kastrup @ 2008-05-09 15:07 ` Ted Zlatanov 2008-05-09 21:17 ` Stephen J. Turnbull 0 siblings, 1 reply; 30+ messages in thread From: Ted Zlatanov @ 2008-05-09 15:07 UTC (permalink / raw) To: emacs-devel On Fri, 09 May 2008 16:34:49 +0200 David Kastrup <dak@gnu.org> wrote: DK> Ted Zlatanov <tzz@lifelogs.com> writes: >> In the same way a user's customizations for authentication are more >> sensitive than the default customizations, and should probably be >> stored in a separate file that's encrypted with some mechanism. DK> Put them into ~/.netrc That's not always possible. User names and passwords are not the only possible sensitive information. The netrc file is not as flexible as a custom file. Also, not every Emacs package supports netrc files (I'm actually working on auth-source.el to remedy that somewhat, but it's not ready). >> The default customizations are then available to fellow users without >> danger of compromising security. DK> There is nothing worse than people indiscriminately copying .emacs DK> files, anyway. That's not what I'm talking about, and there are many things worse than copying .emacs files. Please consider my actual use cases that substantiate the need for separate custom files. If you think they are not generally applicable, fine, but don't use hyperbole to derail the discussion. Ted ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-09 15:07 ` Ted Zlatanov @ 2008-05-09 21:17 ` Stephen J. Turnbull 2008-05-12 13:13 ` :password customize type (was: :file keyword for Customize) Ted Zlatanov 0 siblings, 1 reply; 30+ messages in thread From: Stephen J. Turnbull @ 2008-05-09 21:17 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov writes: > Please consider my actual use cases that substantiate the need for > separate custom files. If you think they are not generally > applicable, fine, but don't use hyperbole to derail the discussion. Your security use case clearly substantiates the need for separate files, but also pretty much rules out the use of customize in my opinion. For example, use of customize to customize authentification information almost certainly will leave that information in memory, for root, somebody who has compromised your account, or a core dump to access in clear. Certainly you might want to use *some* of the widget machinery for formatting input screens, but the actual input handling should be special-cased in the same way functions that handle passwords are. ^ permalink raw reply [flat|nested] 30+ messages in thread
* :password customize type (was: :file keyword for Customize) 2008-05-09 21:17 ` Stephen J. Turnbull @ 2008-05-12 13:13 ` Ted Zlatanov 0 siblings, 0 replies; 30+ messages in thread From: Ted Zlatanov @ 2008-05-12 13:13 UTC (permalink / raw) To: emacs-devel On Sat, 10 May 2008 06:17:43 +0900 "Stephen J. Turnbull" <stephen@xemacs.org> wrote: SJT> Ted Zlatanov writes: >> Please consider my actual use cases that substantiate the need for >> separate custom files. If you think they are not generally >> applicable, fine, but don't use hyperbole to derail the discussion. SJT> Your security use case clearly substantiates the need for separate SJT> files, but also pretty much rules out the use of customize in my SJT> opinion. For example, use of customize to customize authentification SJT> information almost certainly will leave that information in memory, SJT> for root, somebody who has compromised your account, or a core dump to SJT> access in clear. Yes, a :password type is needed for sure, so Emacs can treat it specially. In addition to the visuals (don't display it when it's entered), it could ask for two fields and make sure they are the same. I couldn't find proposals of a :password type when I searched, and the ELisp manual doesn't have it. Has this been discussed before? It could also be :secret, indicating that not just passwords qualify. I know little of the Emacs internals but I'd guess this has to be implemented in the C core. IMO worrying about root compromises is futile. If an attacker has root on your machine, scrambling memory contents is useless. The :password custom type should maybe scramble things with a simple symmetric cipher (to protect against memory dumps), but anything more is overkill. OTOH, file contents are permanent and much more susceptible to compromise, so encryption is always a good idea if the information is sensitive. Also, if the file name is well-known, it's much easier to be compromised. Mozilla/Firefox for instance save profiles in a hard-to-guess directory, so casual attackers will have a harder time finding secret data. Similarly in the case of Emacs, it would be nice if the user could decide on a hard-to-guess location for sensitive data while keeping the main custom file accessible, which comes back to Drew's :file proposal. Maybe it's enough to have just two custom files: one for regular data, one for secret data? Ted ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 16:35 :file keyword for Customize Drew Adams 2008-05-08 16:43 ` Jason Rumney 2008-05-08 20:48 ` David Kastrup @ 2008-05-09 11:12 ` Richard M Stallman 2008-05-13 13:53 ` Paul R 3 siblings, 0 replies; 30+ messages in thread From: Richard M Stallman @ 2008-05-09 11:12 UTC (permalink / raw) To: Drew Adams; +Cc: emacs-devel To split up the Custom info into separate files seems undesirable to me. And it looks like your proposal is both (1) taking up lots of time and (2) not really useful for anything. I suggest that people drop the subject. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-08 16:35 :file keyword for Customize Drew Adams ` (2 preceding siblings ...) 2008-05-09 11:12 ` :file keyword for Customize Richard M Stallman @ 2008-05-13 13:53 ` Paul R 2008-05-13 14:28 ` Stefan Monnier 2008-05-13 21:48 ` Miles Bader 3 siblings, 2 replies; 30+ messages in thread From: Paul R @ 2008-05-13 13:53 UTC (permalink / raw) To: Drew Adams; +Cc: 'Emacs-Devel' "Drew Adams" <drew.adams@oracle.com> writes: > How about adding a :file keyword for `defcustom' and `defface'? > > (defcustom foo-bar-flag t > "Non-nil means toto." > :type 'boolean :group 'foo > :file (if (eq system-type 'windows-nt) > "C:\\foo-stuff\\foo-cus.el" > "/toto/foo-stuff/foo-cus.el")) > > (...) > > I don't have a particular use-case in mind; it's just something that occurred to > me. There is nothing special in this, but I think it might help organize things > a bit. A user's `custom-file' or `init-file' can become a monolithic blob, and > this could help cut down on that. > Well, I see a clear use case : providing tools to manage emacs configuration in multiple files, instead of in a single monolithic .emacs. I've been using a system for several months now, which aim is the same : have clear boundaries between different chunks of configurations, namely putting them into different files. As an exemple, my gnus-related configuration is loaded just before gnus is activated, not earlier. Same for org-mode, or for just any emacs tool I use. Emacs is for most of users more than a file-content editor, it is a platforme with many *different* and *independant* tools on it. We do not want a single configuration file for all different tools we use, do we ? At least, it is not the way it works generally. I think we should make a plan for modular emacs configuration and packages managements (external lisp packages), and this proposal should be part of this plan. More info on configuration managers at http://emacs.kekerekex.net/ and http://www.emacswiki.org/cgi-bin/wiki/Grail -- Paul ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-13 13:53 ` Paul R @ 2008-05-13 14:28 ` Stefan Monnier 2008-05-13 21:48 ` Miles Bader 1 sibling, 0 replies; 30+ messages in thread From: Stefan Monnier @ 2008-05-13 14:28 UTC (permalink / raw) To: Paul R; +Cc: Drew Adams, 'Emacs-Devel' >> How about adding a :file keyword for `defcustom' and `defface'? >> >> (defcustom foo-bar-flag t >> "Non-nil means toto." >> :type 'boolean :group 'foo >> :file (if (eq system-type 'windows-nt) >> "C:\\foo-stuff\\foo-cus.el" >> "/toto/foo-stuff/foo-cus.el")) OK guys, can we stop this? The above is an absolute non-starter. Stefan ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: :file keyword for Customize 2008-05-13 13:53 ` Paul R 2008-05-13 14:28 ` Stefan Monnier @ 2008-05-13 21:48 ` Miles Bader 1 sibling, 0 replies; 30+ messages in thread From: Miles Bader @ 2008-05-13 21:48 UTC (permalink / raw) To: Paul R; +Cc: Drew Adams, 'Emacs-Devel' Paul R <paul.r.ml@gmail.com> writes: > Well, I see a clear use case : providing tools to manage emacs > configuration in multiple files, instead of in a single monolithic > .emacs. I suspect it would be much better to offer more indirect methods of categorization. [E.g., allow the user to specify "settings for custom group X go in file Y".] -Miles -- `Life is a boundless sea of bitterness' ^ permalink raw reply [flat|nested] 30+ messages in thread
end of thread, other threads:[~2008-05-13 21:48 UTC | newest] Thread overview: 30+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-05-08 16:35 :file keyword for Customize Drew Adams 2008-05-08 16:43 ` Jason Rumney 2008-05-08 16:59 ` Drew Adams 2008-05-08 17:08 ` Jason Rumney 2008-05-08 17:41 ` Ted Zlatanov 2008-05-08 18:00 ` Drew Adams 2008-05-08 19:12 ` Ted Zlatanov 2008-05-08 21:27 ` Drew Adams 2008-05-09 14:01 ` Ted Zlatanov 2008-05-08 20:00 ` Stephen J. Turnbull 2008-05-08 21:27 ` Drew Adams 2008-05-08 21:34 ` Jason Rumney 2008-05-09 6:43 ` Stephen J. Turnbull 2008-05-09 8:37 ` Bastien 2008-05-08 18:00 ` Drew Adams 2008-05-08 20:48 ` David Kastrup 2008-05-08 21:34 ` Drew Adams 2008-05-08 21:48 ` Jason Rumney 2008-05-08 22:10 ` Drew Adams 2008-05-08 22:31 ` David Kastrup 2008-05-08 21:51 ` David Kastrup 2008-05-09 14:11 ` Ted Zlatanov 2008-05-09 14:34 ` David Kastrup 2008-05-09 15:07 ` Ted Zlatanov 2008-05-09 21:17 ` Stephen J. Turnbull 2008-05-12 13:13 ` :password customize type (was: :file keyword for Customize) Ted Zlatanov 2008-05-09 11:12 ` :file keyword for Customize Richard M Stallman 2008-05-13 13:53 ` Paul R 2008-05-13 14:28 ` Stefan Monnier 2008-05-13 21:48 ` Miles Bader
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.