* Getting more info on a variable in Customize buffers @ 2005-01-02 6:41 Drew Adams 2005-01-02 13:27 ` Luc Teirlinck ` (2 more replies) 0 siblings, 3 replies; 71+ messages in thread From: Drew Adams @ 2005-01-02 6:41 UTC (permalink / raw) Customize is the preferred way to alter user variables. It also provides information about user variables. But it seems to me that it is in some ways less helpful than `C-h v'. If I do `C-h v ediff-before-setup-windows-hook', the *Help* buffer gives me, in addition to the variable's value and the doc string: 1) a link to Customize the variable and 2) a link to the source code. And I can search on the variable name in Info and in the source code to learn more about the variable. However: 1) If I click Customize in the *Help* buffer from `C-h v', I arrive at a Customize buffer for only that variable, where there is no link to the custom group of the variable, so I can't see how it might be related to other variables in the group. It might be that what I really need is a similarly named variable, but I can't browse the group to find it. In fact, I can't even see what custom group the variable belongs to (no group name is indicated). 2) If I somehow get to the Customize group (ediff-hook) to customize the same variable, without coming from the `C-h v' *Help* buffer: 2a) The variable name does not appear as such. Instead, the name is prettified using title-case and replacing dashes with spaces. A variable with a mixed-case name like `Info-enable-edit' is indistiguishable in this format from one that is all lowercase. There is nothing that indicates to a user what the real name of the variable is and that the displayed name is a transformation of the real name. This is important because it is the real variable name that is the user's link to more information; the title-case headline name is, at best, just a pretty face. It is only with the real variable name that you can use apropos or search the Info doc or the source code or even the rest of the Customize buffer (for references from other doc strings). It is the real variable name that serves everywhere to refer to the variable. If you understand that there _is_ a variable named similarly to the pretty title (already not that obvious), and you understand the name transformation (again, not that obvious), then you can search for more information on the variable. But you can't use `C-s C-w' to grab the name for searching, and you can't use `C-h v' with the cursor on the pretty name to pick up the real name. For me, it would be more useful to show the real variable name than the title-case headline-style pretty name. 2b) There is no link to the source code that defines the variable. You need to derive the real variable name from the pretty name and type that into `C-h v', just to get a link to the source code. Getting to the definition of a variable or function is one of the great strengths of Emacs over other programs. Doc strings are great, but they don't always substitute for looking at the real definitions. In Emacs, there is a progression from doc to code, and the two reinforce each other. Lack of a link to the defining code is an obstacle to that reinforcement. 2c) The variable value does not appear in its Lisp form. In some cases, it is possible to see the Lisp form, but in other cases it cannot be seen. Since many Emacs users also program Emacs Lisp, it would be good to provide a link (button) that displays the Lisp value, exactly as shown in `C-v'. Yes, Customize was designed so you don't have to be a Lisp programmer, but it wouldn't hurt to make Lisp info available on demand. All of this means that you are handicapped using Customize: you have less information accessible to help you understand a variable and its relations to commands and other variables. Customize should provide more information than `C-h v', not less, even if that info is revealed only on demand. The variable name is the most important piece of info in the Customize buffer. With it, you can obtain most of the other info displayed there (`C-h v'). If there is one thing the Customize buffer should show clearly, literally, it's the variable name. So, I suggest: - To the Customize buffer for a group containing a variable, we add: 1) the real variable name, in such a way that it can be copied for pasting and searching and picked up by variable-at-point 2) a link to the variable definition in the source code 3) a button to display the Lisp value of the variable (Hide/ Show/Show Lisp would do the trick). 4) perhaps a link to the variable's explanation in Info (when appropriate) These could all be hidden under the More button, but it would be better if the variable name were not hidden, so it can be the target of a search. Alternatively, if the real name were hidden under More, we could add a single button to expand all the More buttons, to enable search across all the More information. Expand All for values might also be useful (though less so), for the same reason. - To the Customize buffer for an individual variable only, we add: 1) everything listed above for the Customize group buffer 2) a link to the Customize group buffer Alternatively, we could eliminate the Customize buffer for an individual variable altogether. Clicking the Customize link in *Help* would instead take you to the correct entry in the Customize group buffer. That would have the advantage of providing more context and related information. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-02 6:41 Getting more info on a variable in Customize buffers Drew Adams @ 2005-01-02 13:27 ` Luc Teirlinck 2005-01-02 19:48 ` Drew Adams 2005-01-02 20:25 ` Reiner Steib 2005-01-03 0:58 ` Richard Stallman 2 siblings, 1 reply; 71+ messages in thread From: Luc Teirlinck @ 2005-01-02 13:27 UTC (permalink / raw) Cc: emacs-devel Drew Adams wrote (taking ediff-before-setup-windows-hook as example): So, I suggest: - To the Customize buffer for a group containing a variable, we add: 1) the real variable name, in such a way that it can be copied for pasting and searching and picked up by variable-at-point I personally agree that it would be better not to prettify variable names in Custom, but this probably has been discussed before. You can get the variable name by first clicking on "Show Value", then on "State" and then selecting "Show initial Lisp expression". 2) a link to the variable definition in the source code If you need to read the source code to customize a variable, then there is a really bad problem with the docstring. Somebody wanting to study source code is going to do C-h v. 3) a button to display the Lisp value of the variable (Hide/ Show/Show Lisp would do the trick). Can be done as explained under 1). In this case, the pretty form is sometimes more helpful to the user than the actual Lisp value. 4) perhaps a link to the variable's explanation in Info (when appropriate) The person writing the defcustom can already make such a link. (Using the :link keyword.) - To the Customize buffer for an individual variable only, we add: 1) everything listed above for the Customize group buffer 2) a link to the Customize group buffer There already is such a link. It says: Parent groups: Ediff Hook where "Ediff Hook" is a link you can follow. Sincerely, Luc. ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-02 13:27 ` Luc Teirlinck @ 2005-01-02 19:48 ` Drew Adams 2005-01-02 20:44 ` Luc Teirlinck 0 siblings, 1 reply; 71+ messages in thread From: Drew Adams @ 2005-01-02 19:48 UTC (permalink / raw) Cc: emacs-devel I hesitated whether to send my message to emacs-devel as a suggestion or to help-gnu-emacs as a question. Perhaps I should have done the latter, as some of the "problems" I mentioned were user error. Mea culpa. However, maybe there is a lesson or two for emacs-devel anyway, in that at least this user couldn't seem to find this info. And I still think that some of the info is not there to be found. I personally agree that it would be better not to prettify variable names in Custom, but this probably has been discussed before. You can get the variable name by first clicking on "Show Value", then on "State" and then selecting "Show initial Lisp expression". Thanks. However, that seems to show the _initial expression_ (written in the code), which is not the same as the current value of the variable. I still don't see any way to obtain the current value as a sexp, without using `C-h v'. I assume that the initial Lisp expression is available here to give users an idea of how to code an expression leading to a value. But customizing is about changing the current value, so that current value should also be available (in sexp form). Also, another State menu item, "Don't show as Lisp expression", seems to be presented as the converse of "Show Initial...", but it shows the current value (in pretty form), not the initial expression. If these are supposed to be opposites (as suggested by their complementary enablement), then shouldn't they both be about initial expression or both be about current value? "Don't show..." doesn't just hide the Lisp expression; it also shows the current value. And the word "as" in its name suggests that it shows the value not "as" a Lisp expression, which suggests that Show Initial Lisp Expression does show the _value_ as a sexp, which is incorrect. This is confusing, to me. If we make both the initial Lisp expression and the current value available as sexps alternately in the same display field, then the menu items should reflect that: Show Initial Lisp Expression, Show Value as Lisp, Show Value as Text, or some such; and each menu item should only be disabled when its action is a no-op (when what it shows is already shown). I guess that no-op disabling is what happens now, but 1) Show Value as Lisp is missing, and 2) Show Value as Text is called "Don't Show as Lisp Expression", and this, together with 3) the complementary enablement, misleads me into thinking that "Don't Show as..." is somehow the converse of Show Initial Lisp Expression". In any case, perhaps State is the wrong menu for this "show" stuff, IMO. I expect to find menu items for _changing_ (setting) the state there (the tooltip says "Change the state of this item"). Neither of these menu items changes the state (value) of the variable or even the state of the variable's setting wrt Emacs sessions. I don't expect to see items for _showing_ the variable's defining expression or its current value in the (change-) State menu. Why don't we move these show/don't-show items to the Show Value menu (whose tooltip says "Show the value of this item", which is closer to what "Show initial Lisp expression" and "Don't show as Lisp expression" do? And change "Show Value" back to "Show", as it was in Emacs 20 (since the initial Lisp expression is not the variable value, but an expression that yields a value). That way, we would have one menu (State) for changing the variable's session state and another menu (Show) for changing its Customize display state. (And Hide would then be inappropriate, obviously.) If we did that, then State would be better named Change. However, the State button is not so much about changing the variable value (the Value Menu and the input text fields are for that) as it is about _saving_ the new value for the current session or future sessions. The State button would be best named "Setting", which indicates both 1) the act of setting/resetting and 2) actions concerning the current setting. And the presence of "Setting" will serve as a hint that changing the value is not enough: it needs to be set. BTW, all "buttons" that are actually menus should somehow look different from the action buttons that immediately do something. Links to other locations should look like links (e.g. underlined), as discussed previously; action buttons should look (as now) like buttons that you press for an immediate action; and menus should look different from both. A common appearance for menus that are not in a menu bar is an icon or text button with a tiny down-pointing triangle: "Show v". Finally, why tie up the action to show the real (Lisp) variable _name_ with the action to show the Lisp _value_ or the initial expression? Someone looking for the variable name will not necessarily think to look for the Lisp value or the initial sexp in order to find the name. I'd suggest that display of real (Lisp) names vs pretty names be a user option (variable), so that it is possible to globally display all names in either way (so you can, say, search the Customize buffer). Also, clicking either name could toggle that individual name to the opposite name display (Lisp <--> pretty). And I repeat my suggestion for Expand All (or Show All) for the information in the More buttons (so you can search all doc strings for the group). 2) a link to the variable definition in the source code If you need to read the source code to customize a variable, then there is a really bad problem with the docstring. Somebody wanting to study source code is going to do C-h v. Why should one need to do `C-h v'? Customize does everything else that `C-h v' does, so why not let it also get you to the code? I disagree that doc strings should or could provide all of the info provided by the source code - they will never do that. And these are not necessarily two different groups of "somebodys": many (most?) users consult both doc and code sometimes - they are complementary information sources. And the question is not just whether you _need_ to consult the source code to be able to _customize_ a variable - Customize is not just for changing things (customizing); it is also an options and options-groups _browser_ (remember `edit-options'?). Even if a doc string is perfect, I might want to consult the code - and I doubt that I am alone in that. If we do decide to provide a link to the code as we do in `C-h v', then the need to show the initial Lisp expression in the Customize buffer disappears or is diminished. Showing the current value is much more important (to me), anyway, than showing the initial Lisp sexp. 3) a button to display the Lisp value of the variable (Hide/ Show/Show Lisp would do the trick). Can be done as explained under 1). In this case, the pretty form is sometimes more helpful to the user than the actual Lisp value. Each is useful, for different needs. Again, the current Lisp value (not just the initial expression) should be available, and the menu item is in the wrong menu, IMO. 4) perhaps a link to the variable's explanation in Info (when appropriate) The person writing the defcustom can already make such a link. (Using the :link keyword.) Thanks; I wasn't aware of that. Yes, that's the right way to handle this. - To the Customize buffer for an individual variable only, we add: 1) everything listed above for the Customize group buffer 2) a link to the Customize group buffer There already is such a link. It says: Parent groups: Ediff Hook where "Ediff Hook" is a link you can follow. Apologies. I was looking for those parent-group buttons in the same position as in the other Customize buffers; the parent-groups links in this case are at the buffer bottom, not the top. That little inconsistency threw me off. There is a lot to read/scan in a Customize buffer. I looked all over for those links, but somehow I didn't see them (old eyes). It's important to keep things the same in the different Customize buffers, whenever possible, so users can find things easily without needing to reread the same boilerplate text they've already read in the other buffers. I'd suggest moving these links to their usual place (near buffer top), unless there is some good reason not to. And I see now why we can't just drop the individual-variable Customize buffer and send the user instead to the group Customize buffer (to provide context): a variable can belong to more than one group. Thanks, Drew ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-02 19:48 ` Drew Adams @ 2005-01-02 20:44 ` Luc Teirlinck 2005-01-02 23:52 ` Drew Adams 0 siblings, 1 reply; 71+ messages in thread From: Luc Teirlinck @ 2005-01-02 20:44 UTC (permalink / raw) Cc: emacs-devel Drew Adams wrote (talking about "Show initial Lisp expression " in Custom): However, that seems to show the _initial expression_ (written in the code), which is not the same as the current value of the variable. I still don't see any way to obtain the current value as a sexp, without using `C-h v'. I did not look at the source code, but from experimentation, it appears that the _saved_ value is shown. (Or the default value if there is no saved value.) A value set for the current session only is ignored. I do not know the motivation for this behavior. I never noticed, because I seldom use Custom to set something for the current session only. As Reiner pointed out, I forgot about `custom-unlispify-tag-names'. Sincerely, Luc. ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-02 20:44 ` Luc Teirlinck @ 2005-01-02 23:52 ` Drew Adams 2005-01-03 16:55 ` Robert J. Chassell 2005-01-04 9:10 ` Per Abrahamsen 0 siblings, 2 replies; 71+ messages in thread From: Drew Adams @ 2005-01-02 23:52 UTC (permalink / raw) Cc: emacs-devel However, that seems to show the _initial expression_ (written in the code), which is not the same as the current value of the variable. I still don't see any way to obtain the current value as a sexp, without using `C-h v'. I did not look at the source code, but from experimentation, it appears that the _saved_ value is shown. (Or the default value if there is no saved value.) A value set for the current session only is ignored. I do not know the motivation for this behavior. I never noticed, because I seldom use Custom to set something for the current session only. So, it sounds like perhaps we should reconsider what the aim of this so-called "initial Lisp expression" is. What is the need that its display is meant to satisfy? Is it supposed to show the defining _expression_ that yields the initial value (what its name suggests)? Is it supposed to show the (sexp-form of) the last saved value, as you say it does? Is it supposed to show the currently set (but perhaps not saved) value as a sexp? To me, the last of these is the most useful - it is what `C-h v' shows. I can get the initial defining expression from the source code. And I'm not very interested in knowing the last saved value (I can get it from .emacs or custom-file, if I need it). Once we decide what this is for, or what it should be for, we can pick a good menu-item name for it. Other opinions? Or are we misunderstanding what this is about? - Drew ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-02 23:52 ` Drew Adams @ 2005-01-03 16:55 ` Robert J. Chassell 2005-01-03 17:13 ` Drew Adams 2005-01-04 9:10 ` Per Abrahamsen 1 sibling, 1 reply; 71+ messages in thread From: Robert J. Chassell @ 2005-01-03 16:55 UTC (permalink / raw) "Drew Adams" <drew.adams@oracle.com> wrote, So, it sounds like perhaps we should reconsider what the aim of this so-called "initial Lisp expression" is. What is the need that its display is meant to satisfy? The "initial Lisp expression" is supposed to be the default as provided by the distribution. This is what you get when you start Emacs with `emacs -Q'. Another Lisp expression is the previous value as set by a user in his .emacs file (or, for people who have not yet learned Emacs Lisp, set with `customize'). People who use .emacs for customization will be able to see a previous value since either it will be visible in their .emacs file (or in a backup) or it will be the `emacs -Q' default. People who do not use .emacs should also be able to see a previous value that is not a default (or, better yet, see several values, which gives them more or less the equivalent of several different .emacs files). -- Robert J. Chassell bob@rattlesnake.com GnuPG Key ID: 004B4AC8 http://www.rattlesnake.com http://www.teak.cc ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-03 16:55 ` Robert J. Chassell @ 2005-01-03 17:13 ` Drew Adams 2005-01-03 17:20 ` Luc Teirlinck 0 siblings, 1 reply; 71+ messages in thread From: Drew Adams @ 2005-01-03 17:13 UTC (permalink / raw) The "initial Lisp expression" is supposed to be the default as provided by the distribution. This is what you get when you start Emacs with `emacs -Q'. Access to the current value, as in `C-h v', is more useful, if we have to choose between the two. If we want to have the installed ("emacs -Q") value in addition to the current value, then: 1. It shouldn't be called "initial Lisp expression" if it is in fact the value obtained by evaluating the initial Lisp expression. It should be called something like "installed value". 2. More useful than just seeing the installed value would be an action to _reset_ the variable to the installed value. There's not much use in just _showing_ any value other than the current value; and that can in fact lead to confusion, since one expects that the value shown by "Show Value" is the current value of the variable (though perhaps in a different format). ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 17:13 ` Drew Adams @ 2005-01-03 17:20 ` Luc Teirlinck 2005-01-03 17:57 ` Drew Adams 0 siblings, 1 reply; 71+ messages in thread From: Luc Teirlinck @ 2005-01-03 17:20 UTC (permalink / raw) Cc: bob, emacs-devel Drew Adams wrote: 2. More useful than just seeing the installed value would be an action to _reset_ the variable to the installed value. Clicking on "State" and choosing "Erase Customization" does exactly that. Sincerely, Luc. ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-03 17:20 ` Luc Teirlinck @ 2005-01-03 17:57 ` Drew Adams 2005-01-04 9:03 ` Per Abrahamsen 0 siblings, 1 reply; 71+ messages in thread From: Drew Adams @ 2005-01-03 17:57 UTC (permalink / raw) Cc: bob, emacs-devel 2. More useful than just seeing the installed value would be an action to _reset_ the variable to the installed value. Clicking on "State" and choosing "Erase Customization" does exactly that. Great. Then the only value I can see in showing the installed value is to let you know what you'll get if you Erase Customization. That could be done by showing the new value and asking for confirmation when you click Erase Customization. And, since Erase Customization only applies to the current variable, it should be called something like Reset Value, or Reset to Installed Value. The current name can give the impression that it erases all customization. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 17:57 ` Drew Adams @ 2005-01-04 9:03 ` Per Abrahamsen 0 siblings, 0 replies; 71+ messages in thread From: Per Abrahamsen @ 2005-01-04 9:03 UTC (permalink / raw) "Drew Adams" <drew.adams@oracle.com> writes: > And, since Erase Customization only applies to the current variable, it > should be called something like Reset Value, or Reset to Installed Value. > The current name can give the impression that it erases all customization. It used to be called "reset to standard setting", but somebody got surprised that it actually deleted the variable from custom-file. He only expected it to change the value for the current session. So it got a new name. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-02 23:52 ` Drew Adams 2005-01-03 16:55 ` Robert J. Chassell @ 2005-01-04 9:10 ` Per Abrahamsen 2005-01-04 9:26 ` Miles Bader 2005-01-04 15:55 ` Luc Teirlinck 1 sibling, 2 replies; 71+ messages in thread From: Per Abrahamsen @ 2005-01-04 9:10 UTC (permalink / raw) "Drew Adams" <drew.adams@oracle.com> writes: > So, it sounds like perhaps we should reconsider what the aim of this > so-called "initial Lisp expression" is. What is the need that its display is > meant to satisfy? The idea is to allow the user to edit the *unevaluated* expression that is used to initialize the variable at start-up. For example (defcustom foo (if window-system 'x 2) "doc" :type 'sexp) Here, "show initial Lisp expression" will show (if window-system 'x 2) You can then edit and save that value. Maybe "show Lisp expression used for start up" would be better. Or maybe just remove it, I have never heard of anyone who ever used this feature. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 9:10 ` Per Abrahamsen @ 2005-01-04 9:26 ` Miles Bader 2005-01-04 10:16 ` Per Abrahamsen 2005-01-04 15:55 ` Luc Teirlinck 1 sibling, 1 reply; 71+ messages in thread From: Miles Bader @ 2005-01-04 9:26 UTC (permalink / raw) > Or maybe just remove it, I have never heard of anyone who ever used > this feature. I've used it; sometimes a custom definition is so fucked up that looking at the lisp expr provides a useful clue what's going on. [Why would anybody tell you if they used it anyway?] -Miles ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 9:26 ` Miles Bader @ 2005-01-04 10:16 ` Per Abrahamsen 0 siblings, 0 replies; 71+ messages in thread From: Per Abrahamsen @ 2005-01-04 10:16 UTC (permalink / raw) Miles Bader <snogglethorpe@gmail.com> writes: >> Or maybe just remove it, I have never heard of anyone who ever used >> this feature. > > I've used it; sometimes a custom definition is so fucked up that > looking at the lisp expr provides a useful clue what's going on. I didn't mean as a debugging aid. I meant for adding code that will be evaluated by initialization time. > [Why would anybody tell you if they used it anyway?] They would tell others: "You can solve that problem by using this neat feature". ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 9:10 ` Per Abrahamsen 2005-01-04 9:26 ` Miles Bader @ 2005-01-04 15:55 ` Luc Teirlinck 2005-01-04 18:12 ` Drew Adams 2005-01-05 8:33 ` Per Abrahamsen 1 sibling, 2 replies; 71+ messages in thread From: Luc Teirlinck @ 2005-01-04 15:55 UTC (permalink / raw) Cc: emacs-devel Per Abrahamsen wrote: > So, it sounds like perhaps we should reconsider what the aim of this > so-called "initial Lisp expression" is. What is the need that its display is > meant to satisfy? The idea is to allow the user to edit the *unevaluated* expression that is used to initialize the variable at start-up. For example (defcustom foo (if window-system 'x 2) "doc" :type 'sexp) Here, "show initial Lisp expression" will show (if window-system 'x 2) You can then edit and save that value. That is apparently not what it does. If you set, say, auto-revert-interval, which is 5 by default, to 10 and save for future sessions, then set it to 20 for this session only, "show initial Lisp expression" will show 10, not 5. Sincerely, Luc. ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-04 15:55 ` Luc Teirlinck @ 2005-01-04 18:12 ` Drew Adams 2005-01-04 18:27 ` Luc Teirlinck 2005-01-05 8:33 ` Per Abrahamsen 1 sibling, 1 reply; 71+ messages in thread From: Drew Adams @ 2005-01-04 18:12 UTC (permalink / raw) Cc: emacs-devel > So, it sounds like perhaps we should reconsider what > the aim of this > so-called "initial Lisp expression" is. What is the > need that its display is meant to satisfy? The idea is to allow the user to edit the *unevaluated* expression that is used to initialize the variable at start-up. That is apparently not what it does. If you set, say, auto-revert-interval, which is 5 by default, to 10 and save for future sessions, then set it to 20 for this session only, "show initial Lisp expression" will show 10, not 5. I think you mean "will show 10, not (if window-system 'x 2)". IOW, if this was supposed to show the unevaluated defining Lisp EXPRESSION at installment, then you are saying that it doesn't - it shows the last-saved VALUE (as a sexp). Two differences here: 1) when it was defined (installment vs last save), 2) uneval'd vs eval'd. It is most useful to see: 1) The current defining Lisp sexp (not necessarily the definition at installment time, since another library might have modified the def). The best way to make this available is with a link to the source code - a la `C-h v'. 2) The current value of the variable as a sexp - a la `C-h v'. This is not the same as the last-saved value. (The last-saved value is available in the custom file/.emacs.) Neither of these is currently available. The "initial Lisp expression" should be dropped in favor of these two display options. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 18:12 ` Drew Adams @ 2005-01-04 18:27 ` Luc Teirlinck 2005-01-04 19:50 ` Drew Adams 0 siblings, 1 reply; 71+ messages in thread From: Luc Teirlinck @ 2005-01-04 18:27 UTC (permalink / raw) Cc: abraham, emacs-devel Drew Adams wrote: That is apparently not what it does. If you set, say, auto-revert-interval, which is 5 by default, to 10 and save for future sessions, then set it to 20 for this session only, "show initial Lisp expression" will show 10, not 5. I think you mean "will show 10, not (if window-system 'x 2)". No, I was talking about auto-revert-interval, which is an actual option you can experiment with. The defcustom gives it value 5, which is a Lisp expression, an integer. Sincerely, Luc. ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-04 18:27 ` Luc Teirlinck @ 2005-01-04 19:50 ` Drew Adams 0 siblings, 0 replies; 71+ messages in thread From: Drew Adams @ 2005-01-04 19:50 UTC (permalink / raw) Cc: abraham, emacs-devel That is apparently not what it does. If you set, say, auto-revert-interval, which is 5 by default, to 10 and save for future sessions, then set it to 20 for this session only, "show initial Lisp expression" will show 10, not 5. I think you mean "will show 10, not (if window-system 'x 2)". No, I was talking about auto-revert-interval, which is an actual option you can experiment with. The defcustom gives it value 5, which is a Lisp expression, an integer. Right. Sorry. But that example doesn't demonstrate the difference between uneval'd expression and eval'd value (because 5 evaluates to 5). (It does demonstrate that it is the last-saved value or expression that is displayed.) I just tried the example that Per gave: (defcustom foo (if window-system 'x 2) "doc" :type 'sexp) Using Customize, I did "show initial Lisp expression", to see (if window-system 'x 2). I changed that sexp to (if window-system 'y 5) and did "set for current session". I clicked "don't show as Lisp expression", then "show initial Lisp" and it showed (if window-system 'x 2). So, turning off, then on again, the "show initial Lisp" changed the displayed value back to what it was before the value was changed. The current value (via "don't show" again) always reflects the lates value, of course. I changed the Lisp expression again, but this time did "save for future sessions". Clicking "don't show" followed by "show initial" then showed the new Lisp expression, (if window-system 'y 5). Summary: "Show initial Lisp expression" shows the uneval'd Lisp expression (not value) that was last saved. It doesn't show the last Lisp expression used to set the variable (unless the value was saved). Perhaps there is some good in putting together the display of the last defining sexp used in Customize with the defining library source code. A single menu item, "Show Lisp definition" could display the last-defining code, whether it is in the user's custom file (.emacs) or the last-defining Lisp library. Opinions? I think that there should be a menu item that takes you to the last-defining Lisp-library definition, regardless of whether or not there is a later definition in your .emacs. The library source code is more informative than a simple sexp. However, there is a risk that the user will get confused, because in that case the source library code did not actually define the latest value. Are both needed? In any case: - A link to the library source code is needed, as in `C-h v'. - If the defining Lisp sexp in the custom file is also shown (or linked), then the same should be done for `C-h v'. - The current _value_ should also be displayable as a sexp, as in `C-h v'. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 15:55 ` Luc Teirlinck 2005-01-04 18:12 ` Drew Adams @ 2005-01-05 8:33 ` Per Abrahamsen 2005-01-05 17:50 ` Robert J. Chassell 1 sibling, 1 reply; 71+ messages in thread From: Per Abrahamsen @ 2005-01-05 8:33 UTC (permalink / raw) Cc: emacs-devel Luc Teirlinck <teirllm@dms.auburn.edu> writes: > If you set, say, auto-revert-interval, which is 5 by default, to 10 > and save for future sessions, then set it to 20 for this session > only, "show initial Lisp expression" will show 10, not 5. If the standard value is 5, the saved value is 10, and the current value is 20, then "the *unevaluated* expression that is used to initialize the variable at start-up" is 10. The "defcustom" form will use the saved value for initialization over the standard value, provided that a saved value exists. I guess the name "custom-set-variables" was a mistake. It makes people think of it as a command (like setq), rather than a declaration. It does not (in the prototypical case) set any variables, it just mark what their saved value are for use when the appropriate defcustom is evaluated. It should have been called "custom-saved-variables", that would have avoided a lot of confusion. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-05 8:33 ` Per Abrahamsen @ 2005-01-05 17:50 ` Robert J. Chassell 0 siblings, 0 replies; 71+ messages in thread From: Robert J. Chassell @ 2005-01-05 17:50 UTC (permalink / raw) I guess the name "custom-set-variables" was a mistake. It makes people think of it as a command (like setq), rather than a declaration. ... >From what you are saying, it is very much a mistake. The symbol responds to `C-h f' (describe-function), which says custom-set-variables is a compiled Lisp function in `custom'. ... Initialize variables according to user preferences. which tells me it is a function like `defvar'. -- Robert J. Chassell bob@rattlesnake.com GnuPG Key ID: 004B4AC8 http://www.rattlesnake.com http://www.teak.cc ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-02 6:41 Getting more info on a variable in Customize buffers Drew Adams 2005-01-02 13:27 ` Luc Teirlinck @ 2005-01-02 20:25 ` Reiner Steib 2005-01-02 20:34 ` Andreas Schwab 2005-01-02 23:52 ` Drew Adams 2005-01-03 0:58 ` Richard Stallman 2 siblings, 2 replies; 71+ messages in thread From: Reiner Steib @ 2005-01-02 20:25 UTC (permalink / raw) Cc: emacs-devel On Sun, Jan 02 2005, Drew Adams wrote: > 1) If I click Customize in the *Help* buffer from `C-h v', I arrive at a > Customize buffer for only that variable, where there is no link to the > custom group of the variable, so I can't see how it might be related to > other variables in the group. I get "Parent groups: [ediff-hook]". There might be some variables where the custom group declaration is missing. Kim F. Storm pointed this out for several Gnus variables in article <m3r7pdrc83.fsf@kfs-l.imdomain.dk>. > 2) If I somehow get to the Customize group (ediff-hook) to customize the > same variable, without coming from the `C-h v' *Help* buffer: > > 2a) The variable name does not appear as such. Instead, the name is > prettified using title-case and replacing dashes with spaces. A variable > with a mixed-case name like `Info-enable-edit' is indistiguishable in this > format from one that is all lowercase. There is nothing that indicates to a > user what the real name of the variable is and that the displayed name is a > transformation of the real name. Especially for TeX mode vs. AUCTeX variables this behavior is irritating: `tex-offer-save' vs. `TeX-offer-save', ... > For me, it would be more useful to show the real variable name than the > title-case headline-style pretty name. ,----[ C-h v custom-unlispify-tag-names RET ] | custom-unlispify-tag-names's value is nil | | Display tag names as words instead of symbols if non nil. | | You can customize this variable. `---- > 2b) There is no link to the source code that defines the variable. You need > to derive the real variable name from the pretty name and type that into > `C-h v', just to get a link to the source code. Getting to the definition of > a variable or function is one of the great strengths of Emacs over other > programs. Yes, a button "Defined in `foo-bar'" next to "Parent groups" would be useful. > Doc strings are great, but they don't always substitute for looking > at the real definitions. In Emacs, there is a progression from doc > to code, and the two reinforce each other. Lack of a link to the > defining code is an obstacle to that reinforcement. > > 2c) The variable value does not appear in its Lisp form. In some cases, it > is possible to see the Lisp form, but in other cases it cannot be seen. Isn't [State] / [Show initial Lisp expression] present for all variables? > So, I suggest: > > - To the Customize buffer for a group containing a variable, we add: > 1) the real variable name, in such a way that it can be copied > for pasting and searching and picked up by variable-at-point How about a button that toggles `custom-unlispify-tag-names' and re-displays the buffer? > 2) a link to the variable definition in the source code ACK. > 3) a button to display the Lisp value of the variable (Hide/ > Show/Show Lisp would do the trick). See above. > 4) perhaps a link to the variable's explanation in Info > (when appropriate) If the variable definition has a custom-manual entry like... :link '(custom-manual "(message)Mail Headers") ... you'll get a button "See also [Manual]." in the customize buffer. See e.g. `message-ignored-mail-headers' and most other customizable variables from `message.el'. > Alternatively, we could eliminate the Customize buffer for an individual > variable altogether. Clicking the Customize link in *Help* would instead > take you to the correct entry in the Customize group buffer. A variable may belong to two or more custom groups. Bye, Reiner. -- ,,, (o o) ---ooO-(_)-Ooo--- | PGP key available | http://rsteib.home.pages.de/ ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-02 20:25 ` Reiner Steib @ 2005-01-02 20:34 ` Andreas Schwab 2005-01-02 23:52 ` Drew Adams 1 sibling, 0 replies; 71+ messages in thread From: Andreas Schwab @ 2005-01-02 20:34 UTC (permalink / raw) Cc: emacs-devel Reiner Steib <reinersteib+gmane@imap.cc> writes: >> 2c) The variable value does not appear in its Lisp form. In some cases, it >> is possible to see the Lisp form, but in other cases it cannot be seen. > > Isn't [State] / [Show initial Lisp expression] present for all > variables? That only shows the initial value, not the customized one. Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-02 20:25 ` Reiner Steib 2005-01-02 20:34 ` Andreas Schwab @ 2005-01-02 23:52 ` Drew Adams 2005-01-03 0:35 ` Stefan 2005-01-04 9:32 ` Per Abrahamsen 1 sibling, 2 replies; 71+ messages in thread From: Drew Adams @ 2005-01-02 23:52 UTC (permalink / raw) Cc: emacs-devel ,----[ C-h v custom-unlispify-tag-names RET ] | custom-unlispify-tag-names's value is nil | | Display tag names as words instead of symbols if non nil. | | You can customize this variable. `---- This is good to know. Thanks. As is often the case, what I think is sorely missing is already there - I just didn't know about it. Some minor problems I see in 21.3.50 from July 27 (maybe fixed since then): - You need to load `cus-edit.el' to see this variable (not a great problem, but it would be good to have it autoloaded). - Changing it from t (default) to nil, and even setting it for the current session, and even saving it for future sessions is not reflected in the current current Customize buffer itself. How about a button that toggles `custom-unlispify-tag-names' and re-displays the buffer? I suggested that each variable name itself serve as a toggle - click it to change display of the name locally (but not change the variable `custom-unlispify-tag-names'). Another omnipresent button just for toggling `custom-unlispify-tag-names' might be overkill, but I agree that the option `custom-unlispify-tag-names' should somehow be a bit more noticeable. What about 1) having click-a-name-to-toggle-its-display-type, as I just mentioned, and 2) display a message in the echo area when you do this, saying that you can use `custom-unlispify-tag-names' to set the custom display type globally. Finding this (oddly named) option would then be fairly easy and common. Thanks too for the other info you mentioned. Luc mentioned many of the same things, so see my reply to him. - Drew ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-02 23:52 ` Drew Adams @ 2005-01-03 0:35 ` Stefan 2005-01-03 1:57 ` Drew Adams ` (2 more replies) 2005-01-04 9:32 ` Per Abrahamsen 1 sibling, 3 replies; 71+ messages in thread From: Stefan @ 2005-01-03 0:35 UTC (permalink / raw) Cc: Reiner Steib, emacs-devel > - You need to load `cus-edit.el' to see this variable (not a > great problem, but it would be good to have it autoloaded). Most variables are only visible once the corresponding package is loaded. That's normal. > What about 1) having click-a-name-to-toggle-its-display-type, as I just > mentioned, and 2) display a message in the echo area when you do this, > saying that you can use `custom-unlispify-tag-names' to set the custom > display type globally. Finding this (oddly named) option would then be > fairly easy and common. The problem is that custom's "variables" aren't the same as Elisp variables. They look very much alike, and they usually are exactly the same, but that's not always the case. The :get, :set, and :init thingies allow you to define a custom setting "foo-bar" which controls "toto" rather than the variable "foo-bar". If you care about the variable names, I recommend you just skip custom altogether and write elisp code in your .emacs. It'll be cleaner and easier to understand. Stefan ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-03 0:35 ` Stefan @ 2005-01-03 1:57 ` Drew Adams 2005-01-03 17:39 ` Stefan Monnier 2005-01-03 17:47 ` Robert J. Chassell 2005-01-03 7:51 ` David Kastrup 2005-01-03 17:28 ` drkm 2 siblings, 2 replies; 71+ messages in thread From: Drew Adams @ 2005-01-03 1:57 UTC (permalink / raw) Cc: Reiner Steib, emacs-devel > - You need to load `cus-edit.el' to see this variable (not a > great problem, but it would be good to have it autoloaded). Most variables are only visible once the corresponding package is loaded. That's normal. It may be normal for most variables, but I think this one merits an autoload. It sounds from this thread as if the decision to prettify names by default in Customize is not too solidly supported anyway, and that many users might prefer the Lisp names. If users who potentially would prefer Lisp names don't even know that displaying Lisp names is an option, then that is a loss. There are plenty of `custom-*' variables whose doc strings are available on startup of Emacs - this should be one of them. > What about 1) having click-a-name-to-toggle-its-display-type, as I just > mentioned, and 2) display a message in the echo area when you do this, > saying that you can use `custom-unlispify-tag-names' to set the custom > display type globally. Finding this (oddly named) option would then be > fairly easy and common. The problem is that custom's "variables" aren't the same as Elisp variables. They look very much alike, and they usually are exactly the same, but that's not always the case. The :get, :set, and :init thingies allow you to define a custom setting "foo-bar" which controls "toto" rather than the variable "foo-bar". I probably don't fully understand, although I think I follow you. Sounds like an implementation problem to me - or perhaps a design problem? So, what about the "usual" case? (90%? 99%? 99.999%? 80%? 60%? 51%? - what does "usually" mean here?) Why couldn't/shouldn't this be implemented for the _usual_ case, and not worry about the corner cases? Anyway, if this is a problem for the unusual cases, then how is possible to have option `custom-unlispify-tag-names' work for them? If there is a problem with corner cases, then that problem must already manifest itself with `custom-unlispify-tag-names', no? If you can get the desired effect by turning off `custom-unlispify-tag-names', then why can't you turn it off locally by clicking the "pretty" name? What's the obstacle, here? If you care about the variable names, I recommend you just skip custom altogether and write elisp code in your .emacs. It'll be cleaner and easier to understand. That sounds ridiculous to me (but perhaps I misunderstand you). Emacs priests have been preaching that Customize is _The Way_ for quite some time now. Most of the standard Emacs code now uses Customize for user variables. To understand and modify the standard Emacs variables, we are naturally led to Customize. And you're now telling us that if I we don't like something about the Customize UI we should just skip it? Instead of letting Customize show the same thing (as an option!) that `C-h v' shows, we should just forget it? Why not get rid of `C-h v', or prettify its names too, while you're at it? If the Customize UI is not enough user-friendly or presents obstacles to navigating the available information, the answer is not to send users packing, to tell them to just use `setq's in their .emacs. I "care about variable names" because that's what I need to care about in order to use Emacs well. If the code and the doc strings and the Info doc and Apropos and... all used the Customize "pretty" names - if none of _them_ "cared about variable names" - then no, I wouldn't care much about variable names either. Sheesh! (Quand les poules auront des dents...) ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 1:57 ` Drew Adams @ 2005-01-03 17:39 ` Stefan Monnier 2005-01-03 20:45 ` Drew Adams 2005-01-04 9:24 ` Per Abrahamsen 2005-01-03 17:47 ` Robert J. Chassell 1 sibling, 2 replies; 71+ messages in thread From: Stefan Monnier @ 2005-01-03 17:39 UTC (permalink / raw) Cc: Reiner Steib, emacs-devel >> - You need to load `cus-edit.el' to see this variable (not a >> great problem, but it would be good to have it autoloaded). > Most variables are only visible once the corresponding package > is loaded. That's normal. > It may be normal for most variables, but I think this one merits an > autoload. > It sounds from this thread as if the decision to prettify names by default > in Customize is not too solidly supported anyway, and that many users > might prefer the Lisp names. If users who potentially would prefer Lisp > names don't even know that displaying Lisp names is an option, then that > is a loss. Autoloading a variable should only be done if it's necessary for correctness (typically because the default value is not nil and the user is likely to want to do something like `add-to-list' on it in her .emacs). This variable has been used by extremely few people. Extremely few people have complained about the varname-vs-prettyname difference. Most/all of those who complained write 90% of their .emacs file by hand anyway. > The problem is that custom's "variables" aren't the same as > Elisp variables. They look very much alike, and they usually > are exactly the same, but that's not always the case. > The :get, :set, and :init thingies allow you to define a custom setting > "foo-bar" which controls "toto" rather than the variable "foo-bar". > I probably don't fully understand, although I think I follow you. Sounds > like an implementation problem to me - or perhaps a design problem? The designer might call it a feature rather than a problem. I do tend to think that it was a mistake to design something that looks like an elisp variable and which happens to be an elisp variable in 99% of the cases but which may be something else. > Anyway, if this is a problem for the unusual cases, then how is possible to > have option `custom-unlispify-tag-names' work for them? It works, but it may not always tell you the truth. Because the truth is that a custom-var called "foo-bar" might not have *any* real variable corresponding to it (not even "toto"). E.g. setting "foo-bar" to ON may just add something to foo-mode-hook and setting it to OFF removes it from the hook. Retrieving the value of "foo-bar" is done by looking at the foo-mode-hook. > If there is a problem with corner cases, then that problem must already > manifest itself with `custom-unlispify-tag-names', no? Of course not. The problem is in how the user interprets what she sees, not in the code. > That sounds ridiculous to me (but perhaps I misunderstand you). > Emacs priests have been preaching that Customize is _The Way_ for quite > some time now. Most of the standard Emacs code now uses Customize for > user variables. To understand and modify the standard Emacs variables, we > are naturally led to Customize. I'm not sure who are those mythical "Emacs priests". Of course you can use Custom to customize Emacs, but if you do that you shouldn't need to care about variable names. If you care about actual variable names, it's either because you're looking underneath Custom (in which case you're dealing with Elisp and might as well write your .emacs by hand as mentioned before), or because there's a problem with Custom. > And you're now telling us that if I we don't like something about the > Customize UI we should just skip it? Instead of letting Customize show the > same thing (as an option!) that `C-h v' shows, we should just forget it? > Why not get rid of `C-h v', or prettify its names too, while you're at it? I never suggested to remove custom-unlispify-tag-names. If that's what you prefer, use it. But you don't seem satisfied with it. Note that to a large extent I agree with you that it should be nil by default. Stefan ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-03 17:39 ` Stefan Monnier @ 2005-01-03 20:45 ` Drew Adams 2005-01-04 9:46 ` Per Abrahamsen 2005-01-04 9:24 ` Per Abrahamsen 1 sibling, 1 reply; 71+ messages in thread From: Drew Adams @ 2005-01-03 20:45 UTC (permalink / raw) Cc: Reiner Steib, emacs-devel Autoloading a variable should only be done if it's necessary for correctness (typically because the default value is not nil and the user is likely to want to do something like `add-to-list' on it in her .emacs). I won't argue about how it should be done - I'm no authority, and I don't really care how it is done - whether this (and the other custom-* variables perhaps) gets autoloaded or it is preloaded along with its library `cus-edit.el', or whatever. The point is that the existence of custom-* variables should somehow be brought to the attention of Customize users. In fact, that is perhaps another, general problem: how to know how to customize Customize. Unless users know of the particular user options that change the behavior of Customize, they can't customize that behavior. To find this particular option, they need to browse down through custom group Help, then group Customize, to group Custom Buffer, then open each of the twenty or so options in that group individually, and read their descriptions to find that there is one that controls name display. And that assumes that they don't get sidetracked by the other four Custom groups and their own myriads of options. Such discovery is fun, indeed. And Info is little help in this regard - it tells you a few things about how to use Customize, but I don't think it says anything about the various custom groups and customizing Customize itself (which is part of using it, as the unlispify example points out). Perhaps Customize needs its own Info (an embarassing need, perhaps, but so be it)? Or perhaps it just needs some UI improvement, to make some of this stuff more obvious, more immediate. (BTW, if I click the "Parent documentation: Manual" button at any of the Customize buffers for Customize itself, I get the Info node about using Lisp to write customization definitions - not what a user expects here, perhaps.) Anyway, I agree that it is better if users need not worry about the actual variables involved. That's why I proposed letting them discover that clicking the user-option name would toggle its own display form, and a message would inform them that the display form is controlled globally by user option "Custom Unlispify Tag Names" (`custom-unlispify-tag-names'). (BTW2: Prettifying names like `custom-unlispify-tag-names' in this way does _not_ make them more understandable or more readable. If we want a user-friendly "pretty" name, then that name needs to be obtained otherwise. Perhaps a :pretty-name keyword similar to :help?) This variable has been used by extremely few people. Extremely few people have complained about the varname-vs-prettyname difference. Most/all of those who complained write 90% of their .emacs file by hand anyway. This variable has probably been _known_ by extremely few people. Echoes of the French foreign minister in the 80s who said of the New Caledonia independentistes: "Since we stopped listening to them, we don't hear anything from them." Just because you don't get complaints doesn't mean that Customize is fine as it is. Perhaps some of those who might use it more have tried it and given up. BTW3: I happen to write all of my .emacs by hand. So what? I still need (want) to be able to make sense of the Customize jungle. If nothing else, I would hope that it would serve as an options browser (like `edit-options'). And if Customize were a little more user friendly, I might start using it more. Someday, I would like to be able to get to the proper Customize location from things like apropos or Info or source code - to somehow search and _find_ "Custom Unlispify Tag Names" (`custom-unlispify-tag-names'). Idealistic? > The problem is that custom's "variables" aren't the same as > Elisp variables. They look very much alike, and they usually > are exactly the same, but that's not always the case. > The :get, :set, and :init thingies allow you to define a > custom setting > "foo-bar" which controls "toto" rather than the variable > "foo-bar". The designer might call it a feature rather than a problem. You hinted at a different-variables problem above. I take your word for it. I do tend to think that it was a mistake to design something that looks like an elisp variable and which happens to be an elisp variable in 99% of the cases but which may be something else. > Anyway, if this is a problem for the unusual cases, then how > is possible to > have option `custom-unlispify-tag-names' work for them? It works, but it may not always tell you the truth. Because the truth is that a custom-var called "foo-bar" might not have *any* real variable corresponding to it (not even "toto"). E.g. setting "foo-bar" to ON may just add something to foo-mode-hook and setting it to OFF removes it from the hook. Retrieving the value of "foo-bar" is done by looking at the foo-mode-hook. OK. So for 99% of the cases, where it tells you the truth and there is no difference between the two variables, it should work. And clicking the name to toggle the display type should work. I could live with that. For the corner cases, clicking the name to change its display can echo a message, "Sorry, this is an indescribable Emacs oddity, er, design feature. Have a nice day." I could live with that too. No problem. > If there is a problem with corner cases, then that problem > must already > manifest itself with `custom-unlispify-tag-names', no? Of course not. The problem is in how the user interprets what she sees, not in the code. If there is no problem with the click-name-to-change-its display proposal, then let's go for it. If there is a problem with it for the corner cases, then let's help the user when she clicks the name by telling her not to bother trying to understand (see error message above). > That sounds ridiculous to me (but perhaps I misunderstand you). > Emacs priests have been preaching that Customize is _The Way_ > for quite > some time now. Most of the standard Emacs code now uses Customize for > user variables. To understand and modify the standard Emacs > variables, we > are naturally led to Customize. Of course you can use Custom to customize Emacs, but if you do that you shouldn't need to care about variable names. If you care about actual variable names, it's either because you're looking underneath Custom (in which case you're dealing with Elisp and might as well write your .emacs by hand as mentioned before), or because there's a problem with Custom. Emacs has long been about "looking underneath" - so much so that, unlike other editors/languages/tools/environments, it's not even considered "looking underneath". It's nothing to be ashamed of, and nothing to be reserved for a nerd elite. We are all more or less nerdy, some of us more, some of us less. You don't _have_ to look underneath, but Emacs doesn't put obstacles in the way of your looking underneath. Saying "if you use Custom to customize Emacs, then you shouldn't need to care about variable names" is wrong. Or perhaps "not need" is technically correct, but the point is "want", not "need". Customize is a user-variable browser and editing tool. It should be useful for all Emacs users, not just those who forsake Lisp and .emacs. IOW, I reject the idea that there should be two hermetically separate worlds of Emacs users: the Customize crowd and the Lisp lot. And Customize already sends you to plenty of Lispian literature, so it is apparently not part of the _design_ that it keep you from Lisping. See the Manual button I mentioned above, for instance: If we assume that Customize users are to shun Lisp, then why send them to the Lisp manual for info on how to code customize groups and such? And, as I said, since Info, apropos, source code, and *Help* all use Lisp variable names and sexps, Customize should play well with those too. It should even enhance the use of those tools - that is, it should play _very_ well with them (and vice versa). If the Customize design doesn't agree with your two-worlds view, then the problem about getting values and variable names as Lisp sexps is a UI bug ("opportunity for improvement"), not a design feature. > And you're now telling us that if I we don't like something about the > Customize UI we should just skip it? Instead of letting Customize show the > same thing (as an option!) that `C-h v' shows, we should just forget it? > Why not get rid of `C-h v', or prettify its names too, while you're at it? I never suggested to remove custom-unlispify-tag-names. If that's what you prefer, use it. But you don't seem satisfied with it. Note that to a large extent I agree with you that it should be nil by default. I am satisfied with `custom-unlispify-tag-names' - I just wasn't aware of it. I like it so much now that I want other users to know about it. I'm interested in our improving Customize - that's all. I haven't given up on it yet. And to come back to the thread beginning: Customize buffers should be able to display the _current value of a variable as a sexp_, as does `C-h v'. That request seems to have gotten lost in the discussion about `custom-unlispify-tag-names'. - Drew ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 20:45 ` Drew Adams @ 2005-01-04 9:46 ` Per Abrahamsen 2005-01-04 18:12 ` Drew Adams 2005-01-05 3:31 ` Richard Stallman 0 siblings, 2 replies; 71+ messages in thread From: Per Abrahamsen @ 2005-01-04 9:46 UTC (permalink / raw) "Drew Adams" <drew.adams@oracle.com> writes: > In fact, that is perhaps another, general problem: how to know how to > customize Customize. M-x customize-group <ret> customize <ret> Or from a customize buffer, select Custom -> Customize from the menu bar (they are all there). > If nothing else, I would hope that it would serve as an options > browser (like `edit-options'). I like the customize-browse interface way better for browsing than using customize-group. Try it. > See the > Manual button I mentioned above, for instance: If we assume that Customize > users are to shun Lisp, then why send them to the Lisp manual for info on > how to code customize groups and such? Because there were no user manual for customize at the time the :link was added, and nobody have bothered to edit it since a customize section was added to the user manual. Please send a patch or a bug report. ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-04 9:46 ` Per Abrahamsen @ 2005-01-04 18:12 ` Drew Adams 2005-01-05 3:31 ` Richard Stallman 1 sibling, 0 replies; 71+ messages in thread From: Drew Adams @ 2005-01-04 18:12 UTC (permalink / raw) > In fact, that is perhaps another, general problem: how to know how to > customize Customize. M-x customize-group <ret> customize <ret> Or from a customize buffer, select Custom -> Customize from the menu bar (they are all there). That just brings up the customize buffer for the Customize group. I meant that there is no doc that tells you _how to use the Customize UI_. I'm thinking of a simple doc that describes the various UI features in a Customize buffer (what you see, how it works). Maybe a Customize buffer should be self explanatory, but it's not - look at the custom-unlispify discussion and the discussion of what Show Initial Lisp Expression really means, both in this thread. > If nothing else, I would hope that it would serve as an options > browser (like `edit-options'). I like the customize-browse interface way better for browsing than using customize-group. Try it. I don't have a problem considering either one of those a browser for customize. My point was that Customize is not only a UI for _changing_ variable values: it is also a browser for viewing information about variables (including their values) and their interrelations (e.g. grouping into libraries). I wrote the following in response to the claim that we shouldn't provide a link to the source-code definition because if you need to look at the source code then you shouldn't be using Customize: And the question is not just whether you _need_ to consult the source code to be able to _customize_ a variable - Customize is not just for changing things (customizing); it is also an options and options-groups _browser_ (remember `edit-options'?). Even if a doc string is perfect, I might want to consult the code - and I doubt that I am alone in that. > See the > Manual button I mentioned above, for instance: If we assume that Customize > users are to shun Lisp, then why send them to the Lisp manual for info on > how to code customize groups and such? Because there were no user manual for customize at the time the :link was added, and nobody have bothered to edit it since a customize section was added to the user manual. Please send a patch or a bug report. Done: you just sent a bug report. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 9:46 ` Per Abrahamsen 2005-01-04 18:12 ` Drew Adams @ 2005-01-05 3:31 ` Richard Stallman 2005-01-05 17:31 ` Drew Adams 1 sibling, 1 reply; 71+ messages in thread From: Richard Stallman @ 2005-01-05 3:31 UTC (permalink / raw) Cc: emacs-devel > See the > Manual button I mentioned above, for instance: If we assume that Customize > users are to shun Lisp, then why send them to the Lisp manual for info on > how to code customize groups and such? Because there were no user manual for customize at the time the :link was added, and nobody have bothered to edit it since a customize section was added to the user manual. Please send a patch or a bug report. I changed that to point to Easy Customizations in the Emacs manual. ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-05 3:31 ` Richard Stallman @ 2005-01-05 17:31 ` Drew Adams 2005-01-05 20:48 ` Lennart Borgman 2005-01-09 3:23 ` Richard Stallman 0 siblings, 2 replies; 71+ messages in thread From: Drew Adams @ 2005-01-05 17:31 UTC (permalink / raw) Cc: emacs-devel > See the > Manual button I mentioned above, for instance: If we assume that Customize > users are to shun Lisp, then why send them to the Lisp manual for info on > how to code customize groups and such? Because there were no user manual for customize at the time the :link was added, and nobody have bothered to edit it since a customize section was added to the user manual. Please send a patch or a bug report. I changed that to point to Easy Customizations in the Emacs manual. I think that the "Help" button in the same buffer (not the "help" button, which goes to the parent group, "help") already points there. If we don't have a useful separate place for the "Manual" button to point, it should just be removed. As I mentioned, node Easy Customization in Info tells you a few things about how to customize variables, but it doesn't really tell you about the Customize UI. Because that UI is not yet ideal in terms of orientation, navigation, how-to-use, and information provided, I think that some Info doc on the Customize UI itself would be helpful. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-05 17:31 ` Drew Adams @ 2005-01-05 20:48 ` Lennart Borgman 2005-01-05 21:43 ` Drew Adams 2005-01-09 3:23 ` Richard Stallman 1 sibling, 1 reply; 71+ messages in thread From: Lennart Borgman @ 2005-01-05 20:48 UTC (permalink / raw) Cc: emacs-devel ----- Original Message ----- From: "Drew Adams" <drew.adams@oracle.com> > As I mentioned, node Easy Customization in Info tells you a few things about > how to customize variables, but it doesn't really tell you about the > Customize UI. Because that UI is not yet ideal in terms of orientation, > navigation, how-to-use, and information provided, I think that some Info doc > on the Customize UI itself would be helpful. Yes, but maybe a GUI user normally do not read manuals? - Lennart ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-05 20:48 ` Lennart Borgman @ 2005-01-05 21:43 ` Drew Adams 2005-01-05 21:54 ` Lennart Borgman 0 siblings, 1 reply; 71+ messages in thread From: Drew Adams @ 2005-01-05 21:43 UTC (permalink / raw) Cc: emacs-devel > As I mentioned, node Easy Customization in Info tells you a few things > about how to customize variables, but it doesn't really tell you about the > Customize UI. Because that UI is not yet ideal in terms of orientation, > navigation, how-to-use, and information provided, I think that some Info > doc on the Customize UI itself would be helpful. Yes, but maybe a GUI user normally do not read manuals? Right. I already lamented the fact that the Customize GUI is so poor that it calls forth the need for doc on how to understand and use it. It should instead be self-explanatory and understandable without any doc. No one wants to read doc - especially just to figure out a user interface. I don't like that state of affairs, but we should recognize it and provide such doc as long as the problem exists. It is too often the case that doc serves a palliative purpose, filling in for poor product design - especially for GUIs. But having such doc is better than not. Even just a list of "gotcha's" and tips would help. For instance, everyone who reads this list now knows about setting `custom-unlispify-tag-names' to nil - those who don't read this list deserve to know that tip too. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-05 21:43 ` Drew Adams @ 2005-01-05 21:54 ` Lennart Borgman 2005-01-06 9:06 ` Per Abrahamsen 2005-01-06 19:55 ` Richard Stallman 0 siblings, 2 replies; 71+ messages in thread From: Lennart Borgman @ 2005-01-05 21:54 UTC (permalink / raw) Cc: emacs-devel ----- Original Message ----- From: "Drew Adams" <drew.adams@oracle.com> > Right. I already lamented the fact that the Customize GUI is so poor that it > calls forth the need for doc on how to understand and use it. It should > instead be self-explanatory and understandable without any doc. No one wants > to read doc - especially just to figure out a user interface. The normal procedure to develop a GUI would be to ask users what aspect of the GUI they do not for some reason like. (Of course the educated guess of the developers are very, very good to have.) I guess a problem here is that many users do not use the custom GUI. Therefore I believe every piece of information we get about how different persons react to this interface is important. I think we should notice that GUIs are used "by intuition". I guess that is what you are trying to point out. BTW I use to hate it when I had to read the docs to find out how to pass the glitches in the user interface. I soon use to realize that it is normally not very much more work needed to get the GUI useable when you have the basic structure. You mostly have to observe what is happening. But sometimes that is just difficult when you doing things "by intuition". - Lennaret ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-05 21:54 ` Lennart Borgman @ 2005-01-06 9:06 ` Per Abrahamsen 2005-01-06 15:26 ` Robert J. Chassell 2005-01-06 19:05 ` Drew Adams 2005-01-06 19:55 ` Richard Stallman 1 sibling, 2 replies; 71+ messages in thread From: Per Abrahamsen @ 2005-01-06 9:06 UTC (permalink / raw) "Lennart Borgman" <lennart.borgman.073@student.lu.se> writes: > Therefore I believe every piece of > information we get about how different persons react to this interface is > important. Unfortunately, expert users are much more likely to provide feedback then casual users. Therefore, free software user interfaces tend to be "expert friendly", rather then "beginner friendly". An in particular, cram way to much information and functionality into the UI, scaring off beginners and casual users. Which is fine in general, expert friendly software is very important. But Emacs has always been expert friendly. Expert users already have an excellent interface for customizing Emacs, namely Lisp. Customize was supposed to add an *additional* interface in order to make customization easier for casual users. Drew Adams feedback seems to build on the mistaken belief that Customize is the preferred way to customize Emacs. Which is far from the truth. (I'd really like to know which "Emacs priest" who gave him that belief, so I could explain that they are spreading false gospel). I do not believe there are any "preferred way" to customize Emacs. There are a number of different mechanisms (Lisp, X resources, the customize group interface, the customize browse interface, the customize menu interface, The Options menu, edit-options, set-variable, and customize-set-variable). None of these are obsolete. Well, maybe "edit-options" is. They are useful in different situations, to different users. And they mostly play along together. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-06 9:06 ` Per Abrahamsen @ 2005-01-06 15:26 ` Robert J. Chassell 2005-01-06 20:23 ` Lennart Borgman 2005-01-06 19:05 ` Drew Adams 1 sibling, 1 reply; 71+ messages in thread From: Robert J. Chassell @ 2005-01-06 15:26 UTC (permalink / raw) As Per Abrahamsen <abraham@dina.kvl.dk> said Unfortunately, expert users are much more likely to provide feedback then casual users. Therefore, free software user interfaces tend to ... cram way to much information and functionality into the UI, scaring off beginners and casual users. Or, sometimes `experts' push too much the other way. This happened with Gnome a year or two ago. The `simple' interface did not let me configure it as I liked. (I don't know whether the bug still exists, since I have not used that window manager since.) The solution is straightforward: always provide an `Advanced customization' option. After you have created a non-expert interface, which can only be done by asking at least five non-experts to sit down and work with the interface, you can provide a more advanced option. (No one on this list is non-expert enough, not even me. I don't know five non-experts who would be willing to sit down. Employing non-experts is the kind of action I had expected some large company that sells hardware or services to fund, but none have except for Sun with one of the interfaces. This befuddles me, since it is clearly in companies' profit-oriented interest to increase the value of a `complementary product'. I do not understand MBAs.) Since the customization commands are designed for Emacs novices and for experts who mostly modify their .emacs files but who may prefer to have it modified for them in occasional cases, as with faces, the `M-x customize' interface and its siblings must be clear and easy. - It should show how everything is related, so novices can learn. - It should tell novices that the interface writes to their .emacs file (and of course the name should be one of the top customizations, even though most will not use it -- this is part of the educational task that customization has). - It should tell the default for each item, the various theme values, if any, the previous value, if any, and the current value. Speaking of `expert friendly software', Per went on to say Which is fine in general, expert friendly software is very important. Yes, very true. ... Drew Adams feedback seems to build on the mistaken belief that Customize is the preferred way to customize Emacs. Which is far from the truth. I am not sure Drew thinks that, but Per is right about the mistaken belief. A better way to customize Emacs is to write Emacs Lisp. The customize feature is supposed to be only a help for people who want to see automatically written Emacs Lisp code in their .emacs file. -- Robert J. Chassell bob@rattlesnake.com GnuPG Key ID: 004B4AC8 http://www.rattlesnake.com http://www.teak.cc ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-06 15:26 ` Robert J. Chassell @ 2005-01-06 20:23 ` Lennart Borgman 0 siblings, 0 replies; 71+ messages in thread From: Lennart Borgman @ 2005-01-06 20:23 UTC (permalink / raw) ----- Original Message ----- From: "Robert J. Chassell" <bob@rattlesnake.com> > - It should show how everything is related, so novices can learn. Agree. This is one of the most important aspects, since you can not do everything through the customize GUI. ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-06 9:06 ` Per Abrahamsen 2005-01-06 15:26 ` Robert J. Chassell @ 2005-01-06 19:05 ` Drew Adams 1 sibling, 0 replies; 71+ messages in thread From: Drew Adams @ 2005-01-06 19:05 UTC (permalink / raw) > Therefore I believe every piece of > information we get about how different persons react to this > interface is important. Unfortunately, expert users are much more likely to provide feedback then casual users. Unfortunately in some ways, but fortunately in others. I agree with your statement (http://www.dina.kvl.dk/~abraham/rants/documentation-goals.html) that "if your goal is to get qualified feedback, preferably in the form of patches or at least useful bug reports, ordinary users aren't going to be what you are after." Therefore, free software user interfaces tend to be "expert friendly", rather then "beginner friendly". An in particular, cram way to much information and functionality into the UI, scaring off beginners and casual users. Power users in the area of UIs give valuable feedback criticizing poor UIs. The average free-software expert user might not be an expert on UIs, but some no doubt are. People who are interested in UIs, whether expert users of the particular UI or not, tend to take a UI-user point of view, just as people interested in doc take a reader point of view. That's helpful. I agree with your point, however, that feedback from users who are not familiar with the application and its UI is 1) important and 2) hard to obtain. In the current case, I am not a novice wrt Emacs, but I am a novice wrt Customize. (We are all novices in some context.) Feedback from Emacs users who are novices to Customize is useful (and apparently hasn't been that hard to obtain :-)). Even if their ultimate use of Customize will not be that of the primary target audience (non-Lispers), their feedback can serve. (See below on the Customize audience.) Which is fine in general, expert friendly software is very important. But Emacs has always been expert friendly. Expert users already have an excellent interface for customizing Emacs, namely Lisp. Customize was supposed to add an *additional* interface in order to make customization easier for casual users. Drew Adams feedback seems to build on the mistaken belief that Customize is the preferred way to customize Emacs. Which is far from the truth. Chalk it up to a mistaken impression on my part. And there are no priests to out :-). Beyond that mistaken impression, I also made the point that a Lisp user of Emacs needs now to have some understanding of Customize (both the UI and the customize functions) - if for no other reason than that reading the Lisp source code now requires it. And writing library code requires it (per priests). If you write code for users of a UI, you need some familiarity with that UI (as a user and as a developer). However, my main point was that dividing Emacs users into two mutually exclusive sets - those who use Lisp and those who use Customize - is a mistake. Customize should be aimed primarily at non-Lisp users, in the sense that one should not _need_ to use or understand Lisp to be able to use Customize. But that does not mean (to me) that Customize should not _also_ be useful for Lisp users of Emacs. I mentioned the benefit of a good options browser to Lisp users as well as beginners. I also pointed out that there are already many parts of the UI that concern Lisp sexps and are obviously _not_ for beginners. There is nothing wrong with that, as long as the UI does not place such stuff in the way of non-Lisp users - it should not distract them; ideally, they would not even see it. I agree with Bob Chassell that "Advanced Customization" is a good (and typical) way to separate the sheep from the goats and still let each stray to the other, apparently greener side if/when they wish. In sum: Customize is for everybody, even if its primary raison d'etre is to help non-Lisp Emacs users customize Emacs. My other main point is that for Emacs aficionados, and _even more so for Emacs novices_ (just a guess), the Customize UI has problems. Problems in orientation, navigation, presentation, clutter, and semantic clarity. And the same UI improvements will help both groups of user. I do not believe there are any "preferred way" to customize Emacs. There are a number of different mechanisms (Lisp, X resources, the customize group interface, the customize browse interface, the customize menu interface, The Options menu, edit-options, set-variable, and customize-set-variable). None of these are obsolete. Well, maybe "edit-options" is. They are useful in different situations, to different users. And they mostly play along together. I agree with all of that. The last sentence is key here, however - I would disagree with it if "mostly" weren't guarding it so well. This thread has been about some ways in which Customize does _not_ play too well with the rest (as well as about some general pbs with Customize). It has included remarks from people for whom it is not clear how to do customize-like or customize-compatible changes from Lisp (so that Lisp and Customize will play well together). It has also included remarks from people like me who feel that Customize should at least provide everything that `C-h v' provides - for both Lisp users and novices (so that Lisp and Customize will play well together). ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-05 21:54 ` Lennart Borgman 2005-01-06 9:06 ` Per Abrahamsen @ 2005-01-06 19:55 ` Richard Stallman 2005-01-06 20:30 ` Lennart Borgman 2005-01-24 22:29 ` Lennart Borgman 1 sibling, 2 replies; 71+ messages in thread From: Richard Stallman @ 2005-01-06 19:55 UTC (permalink / raw) Cc: abraham, drew.adams, emacs-devel The normal procedure to develop a GUI would be to ask users what aspect of the GUI they do not for some reason like. (Of course the educated guess of the developers are very, very good to have.) I guess a problem here is that many users do not use the custom GUI. Therefore I believe every piece of information we get about how different persons react to this interface is important. I agree. One very useful way to get good info is to watch a beginner use custom and say "please report anything you don't like AND anything that isn't obvious how to use". If a few people could do this with their friends, over the coming weeks, that could potentially show us how to make Custom more natural. We may need to wait till after the release before actually making the changes, but we will do it sooner or later. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-06 19:55 ` Richard Stallman @ 2005-01-06 20:30 ` Lennart Borgman 2005-01-24 22:29 ` Lennart Borgman 1 sibling, 0 replies; 71+ messages in thread From: Lennart Borgman @ 2005-01-06 20:30 UTC (permalink / raw) Cc: abraham, drew.adams, emacs-devel ----- Original Message ----- From: "Richard Stallman" <rms@gnu.org> > One very useful way to get good info is to watch a beginner use custom > and say "please report anything you don't like AND anything that isn't > obvious how to use". If a few people could do this with their > friends, over the coming weeks, that could potentially show us how to > make Custom more natural. We may need to wait till after the release > before actually making the changes, but we will do it sooner or later. Positive feedback is not too bad either ;-) I should say that using imagination is very good. Try to get into the state where you understand what is (or will) happening inside the "user". What could change that? Since we may often be busy coding the ideas we already have it might be difficult, but taking that time is useful! Maybe you can also do this alone? Try to have a look at how the customize GUI actually look now and frame your imagination inside that. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-06 19:55 ` Richard Stallman 2005-01-06 20:30 ` Lennart Borgman @ 2005-01-24 22:29 ` Lennart Borgman 1 sibling, 0 replies; 71+ messages in thread From: Lennart Borgman @ 2005-01-24 22:29 UTC (permalink / raw) Cc: abraham, drew.adams, emacs-devel ----- Original Message ----- From: "Richard Stallman" <rms@gnu.org> > One very useful way to get good info is to watch a beginner use custom > and say "please report anything you don't like AND anything that isn't > obvious how to use". If a few people could do this with their > friends, over the coming weeks, that could potentially show us how to > make Custom more natural. We may need to wait till after the release > before actually making the changes, but we will do it sooner or later. In an answer to this I have instead partly rewritten the customize GUI. The rewrite is for Emacs 21.3.1 and is just a proposal (but a working one I hope) for how the GUI could look and work. I have uploaded this to EmacsWiki and you can find it on http://www.emacswiki.org/elisp/changelog.html The file name is cus-new-gui.el. There are no real feature changes, just GUI changes. I feel they are mostly just finishing work once begun on this GUI. The beginning of the file has some comments about what I have done. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-05 17:31 ` Drew Adams 2005-01-05 20:48 ` Lennart Borgman @ 2005-01-09 3:23 ` Richard Stallman 1 sibling, 0 replies; 71+ messages in thread From: Richard Stallman @ 2005-01-09 3:23 UTC (permalink / raw) Cc: abraham, emacs-devel I think that the "Help" button in the same buffer (not the "help" button, which goes to the parent group, "help") already points there. If we don't have a useful separate place for the "Manual" button to point, it should just be removed. Ok. If we want to write any additional documentation about how to use Custom, we would put it into the Easy Customization node which the Help button points to. However, I would rather work on making the UI more natural and intuitive than work on documenting it. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 17:39 ` Stefan Monnier 2005-01-03 20:45 ` Drew Adams @ 2005-01-04 9:24 ` Per Abrahamsen 2005-01-04 14:13 ` Stefan 1 sibling, 1 reply; 71+ messages in thread From: Per Abrahamsen @ 2005-01-04 9:24 UTC (permalink / raw) Stefan Monnier <monnier@iro.umontreal.ca> writes: >> I probably don't fully understand, although I think I follow you. Sounds >> like an implementation problem to me - or perhaps a design problem? > > The designer might call it a feature rather than a problem. > > I do tend to think that it was a mistake to design something that looks like > an elisp variable and which happens to be an elisp variable in 99% of the > cases but which may be something else. I kind of agree, I always thought there instead would be many more "defsomething". The :get, :set and :init were, if I remember right, introduced by XEmacs people for use with specifiers. And since I didn't really care about XEmacs (and certainly didn't understood specifiers to write a defspecifier) I let them have their way. And when it was there, it also got (ab)used in Emacs for minor modes. It should have been part of a define-minor-mode instead, but as I remember there already is was one of those. It is simply too convenient to use these hooks to overload defcustom, rather then define new "def-" whatever. There also is a patch floating around here to overload defcustom for keymaps as well. Again, I can't come up with a good API for a "defkeymap", and wouldn't find the time to implement it anyway. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 9:24 ` Per Abrahamsen @ 2005-01-04 14:13 ` Stefan 2005-01-04 19:54 ` Richard Stallman 2005-01-05 8:48 ` Per Abrahamsen 0 siblings, 2 replies; 71+ messages in thread From: Stefan @ 2005-01-04 14:13 UTC (permalink / raw) >>> I probably don't fully understand, although I think I follow you. Sounds >>> like an implementation problem to me - or perhaps a design problem? >> >> The designer might call it a feature rather than a problem. >> >> I do tend to think that it was a mistake to design something that looks like >> an elisp variable and which happens to be an elisp variable in 99% of the >> cases but which may be something else. > I kind of agree, I always thought there instead would be many more > "defsomething". > The :get, :set and :init were, if I remember right, introduced by > XEmacs people for use with specifiers. And since I didn't really care > about XEmacs (and certainly didn't understood specifiers to write a > defspecifier) I let them have their way. Interesting. And good to hear. > And when it was there, it also got (ab)used in Emacs for minor modes. > It should have been part of a define-minor-mode instead, but as I > remember there already is was one of those. We now have a proper `define-minor-mode' (which internally uses :set but I guess that's OK). > There also is a patch floating around here to overload defcustom for > keymaps as well. Again, I can't come up with a good API for a > "defkeymap", and wouldn't find the time to implement it anyway. I remember trying to introduce `defkeymap' but there wasn't much support for it (it was a long time ago, way before the keymap-custom hack appeared). Most/all keymaps are defined as something similar to: (defvar foo-map (let ((map (make-sparse-keymap))) (define-key map X1 Y1) (define-key map X2 Y2) (define-key map X3 Y3) (substitute-key-definition X4 Y4 map global-map) map)) so I suggested (defkeymap foo-map '((X1 Y1) (X2 Y2) (X3 Y3) (X4 Y4))) with some additional options like :inherit and :suppress. What it does w.r.t Custom can then be adjusted as you please and improved over time. Stefan ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 14:13 ` Stefan @ 2005-01-04 19:54 ` Richard Stallman 2005-01-04 20:39 ` Stefan Monnier 2005-01-05 8:48 ` Per Abrahamsen 1 sibling, 1 reply; 71+ messages in thread From: Richard Stallman @ 2005-01-04 19:54 UTC (permalink / raw) Cc: emacs-devel (defvar foo-map (let ((map (make-sparse-keymap))) (define-key map X1 Y1) (define-key map X2 Y2) (define-key map X3 Y3) (substitute-key-definition X4 Y4 map global-map) map)) so I suggested (defkeymap foo-map '((X1 Y1) (X2 Y2) (X3 Y3) (X4 Y4))) with some additional options like :inherit and :suppress. What it does w.r.t Custom can then be adjusted as you please and improved over time. defkeymap appears to be just an abbreviation. You could argue for it as an abbreviation, but I don't see how it would have any effect on what we can or can't easily do with Customize. How would replacing the defvar with defkeymap affect Custom's handling of this? ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 19:54 ` Richard Stallman @ 2005-01-04 20:39 ` Stefan Monnier 2005-01-05 20:07 ` Richard Stallman 0 siblings, 1 reply; 71+ messages in thread From: Stefan Monnier @ 2005-01-04 20:39 UTC (permalink / raw) Cc: emacs-devel > (defkeymap foo-map > '((X1 Y1) > (X2 Y2) > (X3 Y3) > (X4 Y4))) > with some additional options like :inherit and :suppress. What it does > w.r.t Custom can then be adjusted as you please and improved over time. > defkeymap appears to be just an abbreviation. You could argue for > it as an abbreviation, but I don't see how it would have any effect > on what we can or can't easily do with Customize. > How would replacing the defvar with defkeymap affect Custom's handling > of this? There are two benefits: 1 - abbreviation, as well as a more declarative code. 2 - future updates to the definition of `defkeymap', for example to record all the keymaps defined, or to use the future keymap-support for Custom, or to make it easier for the user to define a binding in her .emacs for a keymap which will be loaded later, ... -- Stefan ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 20:39 ` Stefan Monnier @ 2005-01-05 20:07 ` Richard Stallman 2005-01-05 20:25 ` Stefan Monnier 0 siblings, 1 reply; 71+ messages in thread From: Richard Stallman @ 2005-01-05 20:07 UTC (permalink / raw) Cc: emacs-devel 1 - abbreviation, as well as a more declarative code. That might be worth while. 2 - future updates to the definition of `defkeymap', for example to record all the keymaps defined, I don't see much use for that. or to use the future keymap-support for Custom, The way to define this for Custom would be with :type 'keymap, so it doesn't particularly relate to defkeymap. or to make it easier for the user to define a binding in her .emacs for a keymap which will be loaded later, ... That could be a benefit. However, the magnitude of the benefit is bounded by the difficulty of doing this now, and I think it is pretty easy (just require the package you're going to customize before you redefine its keymap). ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-05 20:07 ` Richard Stallman @ 2005-01-05 20:25 ` Stefan Monnier 2005-01-06 19:56 ` Richard Stallman 0 siblings, 1 reply; 71+ messages in thread From: Stefan Monnier @ 2005-01-05 20:25 UTC (permalink / raw) Cc: emacs-devel > or to use the future keymap-support for Custom, > The way to define this for Custom would be with :type 'keymap, > so it doesn't particularly relate to defkeymap. Of course it does: if you use `defkeymap', changing the definition of the defkeymap macro is all that's needed to take advantage of ":type 'keymap" when it finally appears. With the usual `defvar', it requires changing each and every `defvar'. And if it later turns out that a (defcustom foo ... :type 'keymap) is not enough, you'll have to go through every keymap definition all over again. You seem to consider the cost of introducing a macro `defkeymap' to be enormous (large enough that it needs very significant benefits to justify itself). The macro would probably be about 20 lines long and phasing in its use is easy, so I see the cost as being negligible. Stefan ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-05 20:25 ` Stefan Monnier @ 2005-01-06 19:56 ` Richard Stallman 0 siblings, 0 replies; 71+ messages in thread From: Richard Stallman @ 2005-01-06 19:56 UTC (permalink / raw) Cc: emacs-devel You seem to consider the cost of introducing a macro `defkeymap' to be enormous (large enough that it needs very significant benefits to justify itself). No, I said that you could argue for it as an abbreviation. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 14:13 ` Stefan 2005-01-04 19:54 ` Richard Stallman @ 2005-01-05 8:48 ` Per Abrahamsen 1 sibling, 0 replies; 71+ messages in thread From: Per Abrahamsen @ 2005-01-05 8:48 UTC (permalink / raw) Stefan <monnier@iro.umontreal.ca> writes: >> And when it was there, it also got (ab)used in Emacs for minor modes. >> It should have been part of a define-minor-mode instead, but as I >> remember there already is was one of those. > > We now have a proper `define-minor-mode' (which internally uses :set but > I guess that's OK). Not really, that is just fluff. It still use a variable, so there is (from a conceptual of view) no advantage of the current `define-minor-mode' over defcustom. It is just a thin piece of syntactical sugar, with no real abstraction. But using a variable for minor mode may be the best thing anyway, since minor modes already by convention have a (real) associated variable. Overloading this variable, as is what we have done, probably introduces less complexity than introducing a new "minor mode" abstraction. > so I suggested > > (defkeymap foo-map > '((X1 Y1) > (X2 Y2) > (X3 Y3) > (X4 Y4))) > > with some additional options like :inherit and :suppress. What it does > w.r.t Custom can then be adjusted as you please and improved over time. I believe the API, the UI, and save/load backend (for changes) has to be designed together. Comming up with an API or UI or even save/load backend individually only makes the other parts way harder, like it did for define-minor-mode. Again, keymaps have an associated variable, so resuing that as was done by Alex' hack again would probably be the right thing to do. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 1:57 ` Drew Adams 2005-01-03 17:39 ` Stefan Monnier @ 2005-01-03 17:47 ` Robert J. Chassell 2005-01-03 20:39 ` Stefan Monnier 1 sibling, 1 reply; 71+ messages in thread From: Robert J. Chassell @ 2005-01-03 17:47 UTC (permalink / raw) "Drew Adams" <drew.adams@oracle.com> wrote, If users who potentially would prefer Lisp names don't even know that displaying Lisp names is an option, then that is a loss. It is even worse when it is not an evident option. I just started a plain vanilla Emacs using `emacs -Q' from an Emacs built on 28 Dec 2004. In that instance of Emacs, I brought up the customization buffer for `Escape Glyph' from by clicking on `escape-glyph' in *Faces*. The *Faces* buffer does tell me the Lisp name. However, the *Customize Face: Escape Glyph* buffer does not. I could not find any way of showing it by clicking on either of the two buttons that showed some possibility: `State' and `Value Menu'. (As for the other buttons, I did not click on them because: I did not want to see the parent groups, I did not want to hide the face, and it looked to me that the generic commands, such as `Set for Current Session' were not relevant.) Perhaps I could do something different, but the action is not evident. (The Info for (emacs)Easy Customization did not help either, not in a quick look.) Please, either stop trying to prettify names altogether or provide both the prettified and proper name, as in Escape Glyph face, escape-glyph: (sample) Hide Face rather than Escape Glyph face: (sample) Hide Face Then those of us who would use customize for features we do not understand, like faces, could actually use it. Also, what is the equivalent command to `C-h v' (describe-variable) for faces which are not variables? `C-h C-h' (help-for-help) does not tell, at least, not obviously. (Please remember, all this is for people who are not experts on the topic, so everything must be obvious.) Thank you. -- Robert J. Chassell bob@rattlesnake.com GnuPG Key ID: 004B4AC8 http://www.rattlesnake.com http://www.teak.cc ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 17:47 ` Robert J. Chassell @ 2005-01-03 20:39 ` Stefan Monnier 2005-01-04 1:58 ` Robert J. Chassell 0 siblings, 1 reply; 71+ messages in thread From: Stefan Monnier @ 2005-01-03 20:39 UTC (permalink / raw) Cc: emacs-devel > The *Faces* buffer does tell me the Lisp name. > However, the *Customize Face: Escape Glyph* buffer does not. Could you tell us why you want to know the face's name? > Also, what is the equivalent command to `C-h v' (describe-variable) > for faces which are not variables? Huh? Have you tried M-x describe-face? Stefan ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 20:39 ` Stefan Monnier @ 2005-01-04 1:58 ` Robert J. Chassell 0 siblings, 0 replies; 71+ messages in thread From: Robert J. Chassell @ 2005-01-04 1:58 UTC (permalink / raw) Could you tell us why you want to know the face's name? Yes, so I can check that a customize command did the right thing when I look at the `custom-set-faces' expression in my .emacs file. My `user-init-file' is set to the actual name of my .emacs file, so the command works on the correct file. A customize command may write the file, but I do like checking it. (Also, of course, we encourage non-hackers to do this sort of thing.) And sometimes I modify the expression in my .emacs file. > Also, what is the equivalent command to `C-h v' (describe-variable) > for faces which are not variables? Huh? Have you tried M-x describe-face? That command does not offer an Emacs Lisp expression to put into my `custom-set-faces' expression in my .emacs file. It should provide a name and an expression, somewhat like this: eshell-prompt-face ((t (:foreground "Pink" :weight normal))) (I.e., like setting `custom-unlispify-tag-names' to nil and then pressing return when point is over the `State' button and then selecting option #9, Show as Lisp expression. Except that doing that shows the previous value unless I `Set for Current Session' first; and then `Reset' fails to take me back to the previous setting.....) If the `describe-face' command did provide an Emacs Lisp expression and were documented in the Customize buffer where a novice would find it readily, then it could be useful. (Incidentally, in addition to showing the lisp expression in a appropriate field, the `Documentation:' field of the `describe-face' command should tell one to use `custom-set-faces' rather than `setq'. The `one' may be a novice or have forgot how to deal with faces.) -- Robert J. Chassell bob@rattlesnake.com GnuPG Key ID: 004B4AC8 http://www.rattlesnake.com http://www.teak.cc ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 0:35 ` Stefan 2005-01-03 1:57 ` Drew Adams @ 2005-01-03 7:51 ` David Kastrup 2005-01-04 0:54 ` Luc Teirlinck 2005-01-04 3:38 ` Richard Stallman 2005-01-03 17:28 ` drkm 2 siblings, 2 replies; 71+ messages in thread From: David Kastrup @ 2005-01-03 7:51 UTC (permalink / raw) Cc: Reiner Steib, Drew Adams, emacs-devel Stefan <monnier@iro.umontreal.ca> writes: >> - You need to load `cus-edit.el' to see this variable (not a >> great problem, but it would be good to have it autoloaded). > > Most variables are only visible once the corresponding package is loaded. > That's normal. > >> What about 1) having click-a-name-to-toggle-its-display-type, as I just >> mentioned, and 2) display a message in the echo area when you do this, >> saying that you can use `custom-unlispify-tag-names' to set the custom >> display type globally. Finding this (oddly named) option would then be >> fairly easy and common. > > The problem is that custom's "variables" aren't the same as > Elisp variables. They look very much alike, and they usually are exactly > the same, but that's not always the case. > The :get, :set, and :init thingies allow you to define a custom setting > "foo-bar" which controls "toto" rather than the variable "foo-bar". AFAIR, set-variable by now obeys the :set function. So everything that is user-visible behaves consistent. `setq' OTOH is "low-level". Perhaps we should warn people in the introduction to writing .emacs that setq or setq-default might not do the trick for user-settable variables. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 7:51 ` David Kastrup @ 2005-01-04 0:54 ` Luc Teirlinck 2005-01-05 3:31 ` Richard Stallman 2005-01-04 3:38 ` Richard Stallman 1 sibling, 1 reply; 71+ messages in thread From: Luc Teirlinck @ 2005-01-04 0:54 UTC (permalink / raw) Cc: drew.adams, monnier, Reiner.Steib, emacs-devel David Kastrup wrote: AFAIR, set-variable by now obeys the :set function. So everything that is user-visible behaves consistent. No, that was never implemented. I do not know whether we still want to implement it before the 21.4 release. It does not seem very difficult for setting default values, but setting buffer local values still would not call the :set functions (because :set functions are designed to set _default_ values and hence often can not be used to set buffer local values). So it would definitely not make everything user-visible consistent, even if implemented. Sincerely, Luc. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 0:54 ` Luc Teirlinck @ 2005-01-05 3:31 ` Richard Stallman 2005-01-05 4:43 ` Stefan Monnier 0 siblings, 1 reply; 71+ messages in thread From: Richard Stallman @ 2005-01-05 3:31 UTC (permalink / raw) Cc: Reiner.Steib, monnier, drew.adams, emacs-devel AFAIR, set-variable by now obeys the :set function. So everything that is user-visible behaves consistent. No, that was never implemented. I do not know whether we still want to implement it before the 21.4 release. It does not seem very difficult for setting default values, but setting buffer local values still would not call the :set functions (because :set functions are designed to set _default_ values and hence often can not be used to set buffer local values). We could add defcustom properties :get-local and :set-local to handle local values. This could be useful for running Custom buffers to set things locally, also. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-05 3:31 ` Richard Stallman @ 2005-01-05 4:43 ` Stefan Monnier 2005-01-06 3:46 ` Luc Teirlinck 0 siblings, 1 reply; 71+ messages in thread From: Stefan Monnier @ 2005-01-05 4:43 UTC (permalink / raw) Cc: Luc Teirlinck, Reiner.Steib, drew.adams, emacs-devel > AFAIR, set-variable by now obeys the :set function. So everything > that is user-visible behaves consistent. > No, that was never implemented. I do not know whether we still want > to implement it before the 21.4 release. It does not seem very > difficult for setting default values, but setting buffer local values > still would not call the :set functions (because :set functions are > designed to set _default_ values and hence often can not be used to > set buffer local values). > We could add defcustom properties :get-local and :set-local > to handle local values. This could be useful for running Custom > buffers to set things locally, also. Currently :set and :get are supposed to work buffer-locally if custom-local-buffer is non-nil. Stefan ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-05 4:43 ` Stefan Monnier @ 2005-01-06 3:46 ` Luc Teirlinck 2005-01-06 13:43 ` Stefan Monnier 2005-01-06 19:56 ` Richard Stallman 0 siblings, 2 replies; 71+ messages in thread From: Luc Teirlinck @ 2005-01-06 3:46 UTC (permalink / raw) Cc: drew.adams, rms, Reiner.Steib, emacs-devel Stefan Monnier wrote: Currently :set and :get are supposed to work buffer-locally if custom-local-buffer is non-nil. Actually it is quite confusing. The default :set function is `custom-set-default' for `custom-theme-set-variables' (and for the defcustom docstring) and `set-default' for all the rest of the Custom machinery. Is there some rationale behind that? What is the intended use? For interactive use, `custom-local-buffer' seems to inconvenient (even if it worked reliably, which it does not). Anyway, any case where `custom-set-default' would be used seems irrelevant to the discussion. In the cases where it works, it does not do anything different from what `set-variable' currently does. What we discussed was calling the :set function if there was a _non-default_ :set function. Most of these were not designed to work buffer-locally. The best way to make set-variable work buffer-locally depends on whether and how we want to make Custom work buffer-locally. If we do not care about making Custom set buffer-local values, the best thing would probably be :set-local and :get-local keywords, as Richard suggested. That _maybe_ could also be the case if we wanted to make Custom work buffer-locally. Making Custom work buffer locally is very tricky. It does not seem like something for before the next release. The question is whether we still want to change something to `set-variable' before the next release. Sincerely, Luc. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-06 3:46 ` Luc Teirlinck @ 2005-01-06 13:43 ` Stefan Monnier 2005-01-07 2:49 ` Richard Stallman 2005-01-06 19:56 ` Richard Stallman 1 sibling, 1 reply; 71+ messages in thread From: Stefan Monnier @ 2005-01-06 13:43 UTC (permalink / raw) Cc: drew.adams, rms, Reiner.Steib, emacs-devel > Making Custom work buffer locally is very tricky. It does not seem > like something for before the next release. Actually, I doubt it's even useful because buffer-local customizations can't be usefully saved in a .emacs. What I'd rather want (as a user) is mode-local customizations. Stefan ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-06 13:43 ` Stefan Monnier @ 2005-01-07 2:49 ` Richard Stallman 0 siblings, 0 replies; 71+ messages in thread From: Richard Stallman @ 2005-01-07 2:49 UTC (permalink / raw) Cc: teirllm, Reiner.Steib, drew.adams, emacs-devel Actually, I doubt it's even useful because buffer-local customizations can't be usefully saved in a .emacs. What I'd rather want (as a user) is mode-local customizations. I think that buffer-local customizations are somewhat useful even if they cannot usefully be saved. (And maybe they can be saved, if you use desktop.) However, mode-local customizations are a good idea for a future feature. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-06 3:46 ` Luc Teirlinck 2005-01-06 13:43 ` Stefan Monnier @ 2005-01-06 19:56 ` Richard Stallman 2005-01-07 4:17 ` Luc Teirlinck 1 sibling, 1 reply; 71+ messages in thread From: Richard Stallman @ 2005-01-06 19:56 UTC (permalink / raw) Cc: drew.adams, monnier, Reiner.Steib, emacs-devel The best way to make set-variable work buffer-locally depends on whether and how we want to make Custom work buffer-locally. We want to make Custom work buffer-locally. This is not super-urgent, but it is very desirable for the long term. For interactive use, `custom-local-buffer' seems to inconvenient (even if it worked reliably, which it does not). Of course this is not meant as an end-user interface. It is meant as a mechanism for the end-user interface to use. For that purpose, it is clean enough. If we do not care about making Custom set buffer-local values, the best thing would probably be :set-local and :get-local keywords, as Richard suggested. That _maybe_ could also be the case if we wanted to make Custom work buffer-locally. I had forgotten about custom-local-buffer. Now that I remember it, I see no advantage in :set-local and :get-local. The :set and :get functions can just as easily test custom-local-buffer. Making Custom work buffer locally is very tricky. It does not seem like something for before the next release. If specific :set and :get functions fail to handle custom-local-buffer, that is a bug. We can fix these bugs at any time. Would you like to find some cases that fail, and fix them? Adding a nice UI so that Custom uses custom-local-buffer is a different job. We might not want to install that now; however, people could start implementing it now, to be installed later. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-06 19:56 ` Richard Stallman @ 2005-01-07 4:17 ` Luc Teirlinck 2005-01-07 23:04 ` Richard Stallman 0 siblings, 1 reply; 71+ messages in thread From: Luc Teirlinck @ 2005-01-07 4:17 UTC (permalink / raw) Cc: Reiner.Steib, monnier, drew.adams, emacs-devel Richard Stallman wrote: If specific :set and :get functions fail to handle custom-local-buffer, that is a bug. They are _currently_ not really bugs (at least not user visible bugs), since there currently are no situations where custom-local-buffer can be meaningfully used. From the moment we start using custom-local-buffer they would become (user visible) bugs. We can fix these bugs at any time. Yes, except that time spent doing that means less time spent working toward a release. We only have a motivation to spend time on that _before_ rather than _after_ the release if we plan on using `custom-local-buffer' meaningfully before the next release. Would you like to find some cases that fail, and fix them? I could look at those defcustoms that I am very familiar with, but that is a very small fraction of all defcustoms with :set functions that are out there. (Fortunately, :get functions appear to be very rare.) For many :set functions it may not be immediately obvious what the best way to make them work buffer-locally is, and there are tons of defcustoms with :set functions. The only reason to worry about making :set and :get functions work buffer locally now would be to allow `set-variable' to call the :set functions buffer locally. But if we try to do that _now_, the next release will be full of newly introduced bugs, because we will not be able to come even remotely close to adapt all :set functions. The next release seems already remote enough that I do not believe that we should delay it further by trying to change the behavior of `set-variable' right now. All of this is not a question about what should be done, but whether it should be done for 21.4 or for 22. Sincerely, Luc. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-07 4:17 ` Luc Teirlinck @ 2005-01-07 23:04 ` Richard Stallman 0 siblings, 0 replies; 71+ messages in thread From: Richard Stallman @ 2005-01-07 23:04 UTC (permalink / raw) Cc: Reiner.Steib, monnier, drew.adams, emacs-devel They are _currently_ not really bugs (at least not user visible bugs), since there currently are no situations where custom-local-buffer can be meaningfully used. They are bugs, and I invite people to fix them. They are not urgent, but it isn't bad to fix them. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 7:51 ` David Kastrup 2005-01-04 0:54 ` Luc Teirlinck @ 2005-01-04 3:38 ` Richard Stallman 1 sibling, 0 replies; 71+ messages in thread From: Richard Stallman @ 2005-01-04 3:38 UTC (permalink / raw) Cc: drew.adams, monnier, Reiner.Steib, emacs-devel Perhaps we should warn people in the introduction to writing .emacs that setq or setq-default might not do the trick for user-settable variables. It already says this in the node Init Syntax. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 0:35 ` Stefan 2005-01-03 1:57 ` Drew Adams 2005-01-03 7:51 ` David Kastrup @ 2005-01-03 17:28 ` drkm 2005-01-03 18:16 ` Lennart Borgman 2005-01-04 9:49 ` Per Abrahamsen 2 siblings, 2 replies; 71+ messages in thread From: drkm @ 2005-01-03 17:28 UTC (permalink / raw) Stefan <monnier@iro.umontreal.ca> writes: > The problem is that custom's "variables" aren't the same as > Elisp variables. They look very much alike, and they usually are exactly > the same, but that's not always the case. > The :get, :set, and :init thingies allow you to define a custom setting > "foo-bar" which controls "toto" rather than the variable "foo-bar". So a big difference between variables and customs is: - with a variable, you can `setq' it before evaluate its definition, to overload its default value. It's very convenient in .emacs. For example, you don't have to load any library to change the variable value; - with a custom, you have to wait its definition to be evaluated before setting it in any way, to have its :get and al. to be known. So you have to deal with `require' or `eval-after-load' in .emacs, or correctly load autoloads file if provided (and if it contains the desired defcustom form). Right ? If it is, I don't know any standard way to do that directly in ELisp, if I don't want to use Customize. I think about something like : (defmacro set-custom (custom value lib) (if (boundp custom) `(set-variable ',custom ,value) `(eval-after-load ,lib '(set-variable ',custom ,value)))) But for using it, I have to know CUSTOM to be defined as a custom, where it is defined, etc. And this doesn't deal with non-evaluating the "default value form" (in defcustom) if `set-custom' is evaluated before loading the LIB. This point can be important if the custom' value is used when loading the file, for example to compute the default value of another variable: (defcustom a-custom 'default "..." :set ...) (defvar a-internal-var (compute a-custom)) How can I do in this case to change the value of `a-custom' (and have `a-internal-var' correctly set)? Hum, I suppose it's the responsability of the :set'er of `a-custom'... So what's the clean way to set custom' value in ELisp, in a user point of view? --drkm ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 17:28 ` drkm @ 2005-01-03 18:16 ` Lennart Borgman 2005-01-03 18:56 ` drkm 2005-01-04 9:49 ` Per Abrahamsen 1 sibling, 1 reply; 71+ messages in thread From: Lennart Borgman @ 2005-01-03 18:16 UTC (permalink / raw) Maybe you could use (custom-set-variables ...) Though you have to know how the values look when written. But should not that "do the right thing"? But there is more to it of course, controlling what to save etc. When looking at the code in custom I got the feeling that there are needed some break up of the code so it is easy to do handle the variables from code. For example I just copied some code to find out whether it would be possible to customize a variable. - Lennart ----- Original Message ----- From: "drkm" <darkman_spam@yahoo.fr> ... > If it is, I don't know any standard way to do that directly in > ELisp, if I don't want to use Customize. I think about something > like : > > (defmacro set-custom (custom value lib) > (if (boundp custom) > `(set-variable ',custom ,value) > `(eval-after-load ,lib > '(set-variable ',custom ,value)))) > > But for using it, I have to know CUSTOM to be defined as a custom, .. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 18:16 ` Lennart Borgman @ 2005-01-03 18:56 ` drkm 0 siblings, 0 replies; 71+ messages in thread From: drkm @ 2005-01-03 18:56 UTC (permalink / raw) "Lennart Borgman" <lennart.borgman.073@student.lu.se> writes: > Maybe you could use (custom-set-variables ...) I thinked I had seen that `custom-set-variables' have to be used only once. I can't find where I have see that. Maybe it's a mistake from me. > Though you have to know how the values look when written. But should not > that "do the right thing"? I don't know verry well the Custom package, but it seems to be the right way to do that. It is ? By the way, Info doc maybe lacks these informations. --drkm ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-03 17:28 ` drkm 2005-01-03 18:16 ` Lennart Borgman @ 2005-01-04 9:49 ` Per Abrahamsen 1 sibling, 0 replies; 71+ messages in thread From: Per Abrahamsen @ 2005-01-04 9:49 UTC (permalink / raw) drkm <darkman_spam@yahoo.fr> writes: > So what's the clean way to set custom' value in ELisp, in a user > point of view? The doc string of each customize variable that cannot be set reliably simply by setq, is supposed to describe how to set it from Lisp. Usually this means calling the same specialized "inialization" functions as the customize interface does. If some doc strings doesn't do this, report it as a bug. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-02 23:52 ` Drew Adams 2005-01-03 0:35 ` Stefan @ 2005-01-04 9:32 ` Per Abrahamsen 2005-01-04 12:53 ` Lennart Borgman 2005-01-04 18:12 ` Drew Adams 1 sibling, 2 replies; 71+ messages in thread From: Per Abrahamsen @ 2005-01-04 9:32 UTC (permalink / raw) "Drew Adams" <drew.adams@oracle.com> writes: > - You need to load `cus-edit.el' to see this variable (not a > great problem, but it would be good to have it autoloaded). It is a generic problem that customize variables are only visible when a package is loaded. It should be fixed, but for all variables, not by adding autoloads for individual variables. There is certainly nothing that merrits treating 'custom-unlispify-tag-names', at the time where you are annoyed that the variables are unlispyfied, you are most likely to be in a custimize buffer (and thus, have cus-edit.el loaded). > I suggested that each variable name itself serve as a toggle - click it to > change display of the name locally (but not change the variable > `custom-unlispify-tag-names'). A tooltip would be better. But I think the UI is already overloaded. Given the target audience of customize, the UI should be kept much more minimal than it is. Setting custom-unlispify-tag-names to nil by default might be better, I don't remember why we ended up with the current value. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-04 9:32 ` Per Abrahamsen @ 2005-01-04 12:53 ` Lennart Borgman 2005-01-04 18:12 ` Drew Adams 1 sibling, 0 replies; 71+ messages in thread From: Lennart Borgman @ 2005-01-04 12:53 UTC (permalink / raw) ----- Original Message ----- From: "Per Abrahamsen" <abraham@dina.kvl.dk> > It is a generic problem that customize variables are only visible when > a package is loaded. It should be fixed, but for all variables, not > by adding autoloads for individual variables. Agree. At least for now there should be a possibility to test whether a custom var could be customized at the moment. Such a function can be written easily be breaking up customize-option. This function would anyway be good to have for packages are not part of Emacs (or not searched for vars). - Lennart ^ permalink raw reply [flat|nested] 71+ messages in thread
* RE: Getting more info on a variable in Customize buffers 2005-01-04 9:32 ` Per Abrahamsen 2005-01-04 12:53 ` Lennart Borgman @ 2005-01-04 18:12 ` Drew Adams 1 sibling, 0 replies; 71+ messages in thread From: Drew Adams @ 2005-01-04 18:12 UTC (permalink / raw) > I suggested that each variable name itself serve as a toggle > - click it to > change display of the name locally (but not change the variable > `custom-unlispify-tag-names'). A tooltip would be better. How would a tooltip help? The idea is to toggle the display. Are you suggesting a tooltip with instructions of how to customize `custom-unlispify-tag-names'? But I think the UI is already overloaded. Given the target audience of customize, the UI should be kept much more minimal than it is. It is certainly very *&!BUSY+@~, but that is mainly a problem of: 1) poor choice of visuals: large, bold type for simple names, 3D buttons for everything, whether it is really a link, a menu, or an action button. 2) some poorly chosen names and poorly positioned buttons and info. Other UIs have even more overloading, in fact, in the sense of there being some things you can click by discovery that provide extra info or minor display changes - without the UI appearing overwhelming (busy, loud, confusing, disorienting). There is nothing wrong with having a relatively unimportant UI element be active in some minor way (e.g. tooltip, display toggle). But important UI elements should have their active functionalities be obvious (e.g. links, menus, buttons should be easy to recognize). Setting custom-unlispify-tag-names to nil by default might be better, I don't remember why we ended up with the current value. That would be a good start. ^ permalink raw reply [flat|nested] 71+ messages in thread
* Re: Getting more info on a variable in Customize buffers 2005-01-02 6:41 Getting more info on a variable in Customize buffers Drew Adams 2005-01-02 13:27 ` Luc Teirlinck 2005-01-02 20:25 ` Reiner Steib @ 2005-01-03 0:58 ` Richard Stallman 2 siblings, 0 replies; 71+ messages in thread From: Richard Stallman @ 2005-01-03 0:58 UTC (permalink / raw) Cc: emacs-devel 1) If I click Customize in the *Help* buffer from `C-h v', I arrive at a Customize buffer for only that variable, where there is no link to the custom group of the variable, so I can't see how it might be related to other variables in the group. It might be that what I really need is a similarly named variable, but I can't browse the group to find it. In fact, I can't even see what custom group the variable belongs to (no group name is indicated). It would be useful for these buffers to include a link to move to the whole group. One complication is that the variable can belong to more than one group. I am sure that complication can be overcome. I don't want to implement this, but if someone else does, it can be installed. 2a) The variable name does not appear as such. Instead, the name is prettified using title-case and replacing dashes with spaces. A variable with a mixed-case name like `Info-enable-edit' is indistiguishable in this format from one that is all lowercase. I have always been uncertain whether this prettifying of names is a good thing. I am still not sure. ^ permalink raw reply [flat|nested] 71+ messages in thread
end of thread, other threads:[~2005-01-24 22:29 UTC | newest] Thread overview: 71+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-01-02 6:41 Getting more info on a variable in Customize buffers Drew Adams 2005-01-02 13:27 ` Luc Teirlinck 2005-01-02 19:48 ` Drew Adams 2005-01-02 20:44 ` Luc Teirlinck 2005-01-02 23:52 ` Drew Adams 2005-01-03 16:55 ` Robert J. Chassell 2005-01-03 17:13 ` Drew Adams 2005-01-03 17:20 ` Luc Teirlinck 2005-01-03 17:57 ` Drew Adams 2005-01-04 9:03 ` Per Abrahamsen 2005-01-04 9:10 ` Per Abrahamsen 2005-01-04 9:26 ` Miles Bader 2005-01-04 10:16 ` Per Abrahamsen 2005-01-04 15:55 ` Luc Teirlinck 2005-01-04 18:12 ` Drew Adams 2005-01-04 18:27 ` Luc Teirlinck 2005-01-04 19:50 ` Drew Adams 2005-01-05 8:33 ` Per Abrahamsen 2005-01-05 17:50 ` Robert J. Chassell 2005-01-02 20:25 ` Reiner Steib 2005-01-02 20:34 ` Andreas Schwab 2005-01-02 23:52 ` Drew Adams 2005-01-03 0:35 ` Stefan 2005-01-03 1:57 ` Drew Adams 2005-01-03 17:39 ` Stefan Monnier 2005-01-03 20:45 ` Drew Adams 2005-01-04 9:46 ` Per Abrahamsen 2005-01-04 18:12 ` Drew Adams 2005-01-05 3:31 ` Richard Stallman 2005-01-05 17:31 ` Drew Adams 2005-01-05 20:48 ` Lennart Borgman 2005-01-05 21:43 ` Drew Adams 2005-01-05 21:54 ` Lennart Borgman 2005-01-06 9:06 ` Per Abrahamsen 2005-01-06 15:26 ` Robert J. Chassell 2005-01-06 20:23 ` Lennart Borgman 2005-01-06 19:05 ` Drew Adams 2005-01-06 19:55 ` Richard Stallman 2005-01-06 20:30 ` Lennart Borgman 2005-01-24 22:29 ` Lennart Borgman 2005-01-09 3:23 ` Richard Stallman 2005-01-04 9:24 ` Per Abrahamsen 2005-01-04 14:13 ` Stefan 2005-01-04 19:54 ` Richard Stallman 2005-01-04 20:39 ` Stefan Monnier 2005-01-05 20:07 ` Richard Stallman 2005-01-05 20:25 ` Stefan Monnier 2005-01-06 19:56 ` Richard Stallman 2005-01-05 8:48 ` Per Abrahamsen 2005-01-03 17:47 ` Robert J. Chassell 2005-01-03 20:39 ` Stefan Monnier 2005-01-04 1:58 ` Robert J. Chassell 2005-01-03 7:51 ` David Kastrup 2005-01-04 0:54 ` Luc Teirlinck 2005-01-05 3:31 ` Richard Stallman 2005-01-05 4:43 ` Stefan Monnier 2005-01-06 3:46 ` Luc Teirlinck 2005-01-06 13:43 ` Stefan Monnier 2005-01-07 2:49 ` Richard Stallman 2005-01-06 19:56 ` Richard Stallman 2005-01-07 4:17 ` Luc Teirlinck 2005-01-07 23:04 ` Richard Stallman 2005-01-04 3:38 ` Richard Stallman 2005-01-03 17:28 ` drkm 2005-01-03 18:16 ` Lennart Borgman 2005-01-03 18:56 ` drkm 2005-01-04 9:49 ` Per Abrahamsen 2005-01-04 9:32 ` Per Abrahamsen 2005-01-04 12:53 ` Lennart Borgman 2005-01-04 18:12 ` Drew Adams 2005-01-03 0:58 ` Richard Stallman
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).