* Change `customize-save-variable' to work under "emacs -Q"? @ 2011-07-10 12:22 Lars Magne Ingebrigtsen 2011-07-11 2:30 ` Stephen J. Turnbull ` (4 more replies) 0 siblings, 5 replies; 28+ messages in thread From: Lars Magne Ingebrigtsen @ 2011-07-10 12:22 UTC (permalink / raw) To: emacs-devel If you run "emacs -Q", and you have a piece of code that calls `customize-save-variable', it will error out, saying that it won't overwrite the conf. Would anybody mind if I changed that function to not error out, but instead just do a `setq' on the variable in question, if we're running under -Q? Otherwise all the callers end up doing this very awkward thing: (if (ignore-errors (custom-file)) (progn (customize-save-variable 'smtpmail-smtp-server server) (customize-save-variable 'smtpmail-smtp-service port)) (setq smtpmail-smtp-server server smtpmail-smtp-service port)) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog http://lars.ingebrigtsen.no/ ^ permalink raw reply [flat|nested] 28+ messages in thread
* Change `customize-save-variable' to work under "emacs -Q"? 2011-07-10 12:22 Change `customize-save-variable' to work under "emacs -Q"? Lars Magne Ingebrigtsen @ 2011-07-11 2:30 ` Stephen J. Turnbull 2011-07-11 7:49 ` Lars Magne Ingebrigtsen 2011-07-11 17:36 ` Chong Yidong ` (3 subsequent siblings) 4 siblings, 1 reply; 28+ messages in thread From: Stephen J. Turnbull @ 2011-07-11 2:30 UTC (permalink / raw) To: Lars Magne Ingebrigtsen; +Cc: emacs-devel Lars Magne Ingebrigtsen writes: > If you run "emacs -Q", and you have a piece of code that calls > `customize-save-variable', it will error out, saying that it won't > overwrite the conf. If that's not the appropriate thing to do, isn't the piece of code abusing `customize-save-variable'? Customize itself is carefully designed so that the user has the choice of a one-time setting for this session, and a persistent setting. Code that calls customize functions should similarly respect the user, no? > Otherwise all the callers end up doing this very awkward thing: Why would they do that? Maybe the smtpmail-smtp-* functions are special in this regard, you can be the judge of that, but I would think that most callers are simply trying to provide an even higher-level front-end to Customize, and would respect its conventions about user intent to make a change persistent. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-11 2:30 ` Stephen J. Turnbull @ 2011-07-11 7:49 ` Lars Magne Ingebrigtsen 2011-07-11 9:52 ` Stephen J. Turnbull 0 siblings, 1 reply; 28+ messages in thread From: Lars Magne Ingebrigtsen @ 2011-07-11 7:49 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: emacs-devel "Stephen J. Turnbull" <stephen@xemacs.org> writes: > If that's not the appropriate thing to do, isn't the piece of code > abusing `customize-save-variable'? How is calling `customize-save-variable' to save a user choice abuse of the function? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog http://lars.ingebrigtsen.no/ ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-11 7:49 ` Lars Magne Ingebrigtsen @ 2011-07-11 9:52 ` Stephen J. Turnbull 2011-07-11 9:53 ` Lars Magne Ingebrigtsen 0 siblings, 1 reply; 28+ messages in thread From: Stephen J. Turnbull @ 2011-07-11 9:52 UTC (permalink / raw) To: Lars Magne Ingebrigtsen; +Cc: emacs-devel Lars Magne Ingebrigtsen writes: > "Stephen J. Turnbull" <stephen@xemacs.org> writes: > > > If that's not the appropriate thing to do, isn't the piece of code > > abusing `customize-save-variable'? > > How is calling `customize-save-variable' to save a user choice abuse of > the function? You propose to silently *not* save the user choice, that's how. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-11 9:52 ` Stephen J. Turnbull @ 2011-07-11 9:53 ` Lars Magne Ingebrigtsen 2011-07-11 13:52 ` Stephen J. Turnbull 0 siblings, 1 reply; 28+ messages in thread From: Lars Magne Ingebrigtsen @ 2011-07-11 9:53 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: emacs-devel "Stephen J. Turnbull" <stephen@xemacs.org> writes: > You propose to silently *not* save the user choice, that's how. Instead of bugging out under -Q, yes. And it doesn't have to be silent. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog http://lars.ingebrigtsen.no/ ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-11 9:53 ` Lars Magne Ingebrigtsen @ 2011-07-11 13:52 ` Stephen J. Turnbull 0 siblings, 0 replies; 28+ messages in thread From: Stephen J. Turnbull @ 2011-07-11 13:52 UTC (permalink / raw) To: Lars Magne Ingebrigtsen; +Cc: emacs-devel Lars Magne Ingebrigtsen writes: > "Stephen J. Turnbull" <stephen@xemacs.org> writes: > > > You propose to silently *not* save the user choice, that's how. > > Instead of bugging out under -Q, yes. De gustibus non est disputandum. Bon appetit! ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-10 12:22 Change `customize-save-variable' to work under "emacs -Q"? Lars Magne Ingebrigtsen 2011-07-11 2:30 ` Stephen J. Turnbull @ 2011-07-11 17:36 ` Chong Yidong 2011-07-11 18:08 ` Drew Adams 2011-07-11 18:27 ` PJ Weisberg 2011-07-12 3:32 ` Stefan Monnier ` (2 subsequent siblings) 4 siblings, 2 replies; 28+ messages in thread From: Chong Yidong @ 2011-07-11 17:36 UTC (permalink / raw) To: emacs-devel Lars Magne Ingebrigtsen <larsi@gnus.org> writes: > If you run "emacs -Q", and you have a piece of code that calls > `customize-save-variable', it will error out, saying that it won't > overwrite the conf. > > Would anybody mind if I changed that function to not error out, but > instead just do a `setq' on the variable in question, if we're running > under -Q? I think this is fine. ^ permalink raw reply [flat|nested] 28+ messages in thread
* RE: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-11 17:36 ` Chong Yidong @ 2011-07-11 18:08 ` Drew Adams 2011-07-11 19:32 ` Juanma Barranquero 2011-07-11 18:27 ` PJ Weisberg 1 sibling, 1 reply; 28+ messages in thread From: Drew Adams @ 2011-07-11 18:08 UTC (permalink / raw) To: 'Chong Yidong', emacs-devel > > If you run "emacs -Q", and you have a piece of code that calls > > `customize-save-variable', it will error out, saying that it won't > > overwrite the conf. > > > > Would anybody mind if I changed that function to not error out, but > > instead just do a `setq' on the variable in question, if > > we're running under -Q? > > I think this is fine. Ouch! Maybe I'm misunderstanding, but a user in `emacs -Q' who does `M-x customize-save-variable' and sees no error message will expect that it has been _saved_, no? Likewise any code that a user might run that calls `customize-save-variable'. How can we _silently_ convert saving to just setq? The user will think that something is saved when that is not the case. Sounds like asking for trouble, to me. But maybe I'm missing something. Why is this better than raising an error and letting the user then use `setq' etc.? Why hide the situation from the user? I would think we would want to take advantage of the opportunity to remind the user that s?he invoked `emacs -Q', so no init file, so no place to save the option. Also, why would we convert to just `setq' and not `customize-set-variable'? The latter DTRT wrt :set etc. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-11 18:08 ` Drew Adams @ 2011-07-11 19:32 ` Juanma Barranquero 0 siblings, 0 replies; 28+ messages in thread From: Juanma Barranquero @ 2011-07-11 19:32 UTC (permalink / raw) To: Drew Adams; +Cc: Chong Yidong, emacs-devel On Mon, Jul 11, 2011 at 20:08, Drew Adams <drew.adams@oracle.com> wrote: > Ouch! Maybe I'm misunderstanding, but a user in `emacs -Q' who does `M-x > customize-save-variable' and sees no error message will expect that it has been > _saved_, no? Likewise any code that a user might run that calls > `customize-save-variable'. > > How can we _silently_ convert saving to just setq? I don't think Lars meant silently. Juanma ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-11 17:36 ` Chong Yidong 2011-07-11 18:08 ` Drew Adams @ 2011-07-11 18:27 ` PJ Weisberg 2011-07-11 19:04 ` Chong Yidong 1 sibling, 1 reply; 28+ messages in thread From: PJ Weisberg @ 2011-07-11 18:27 UTC (permalink / raw) Cc: emacs-devel@gnu.org On Monday, July 11, 2011, Chong Yidong <cyd@stupidchicken.com> wrote: > Lars Magne Ingebrigtsen <larsi@gnus.org> writes: > >> If you run "emacs -Q", and you have a piece of code that calls >> `customize-save-variable', it will error out, saying that it won't >> overwrite the conf. >> >> Would anybody mind if I changed that function to not error out, but >> instead just do a `setq' on the variable in question, if we're running >> under -Q? > > I think this is fine. > If the user asks to save a variable for future sessions, but you can only set it for the current session, *shouldn't* that be an error? -- -PJ ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-11 18:27 ` PJ Weisberg @ 2011-07-11 19:04 ` Chong Yidong 2011-07-11 19:28 ` Lars Magne Ingebrigtsen 0 siblings, 1 reply; 28+ messages in thread From: Chong Yidong @ 2011-07-11 19:04 UTC (permalink / raw) To: PJ Weisberg; +Cc: emacs-devel@gnu.org PJ Weisberg <pjweisberg@gmail.com> writes: > On Monday, July 11, 2011, Chong Yidong <cyd@stupidchicken.com> wrote: >> Lars Magne Ingebrigtsen <larsi@gnus.org> writes: >> >>> If you run "emacs -Q", and you have a piece of code that calls >>> `customize-save-variable', it will error out, saying that it won't >>> overwrite the conf. >>> >>> Would anybody mind if I changed that function to not error out, but >>> instead just do a `setq' on the variable in question, if we're running >>> under -Q? >> >> I think this is fine. >> > If the user asks to save a variable for future sessions, but you can > only set it for the current session, *shouldn't* that be an error? Lars had a good point: if we commonly encounter the case where we want to do a "save if possible, otherwise setq" operation, it makes sense to make that easy to do. But, on reflection, maybe (ignore-errors (customize-save-variable ...)) would work just as well. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-11 19:04 ` Chong Yidong @ 2011-07-11 19:28 ` Lars Magne Ingebrigtsen 2011-07-12 0:03 ` Tim Cross 0 siblings, 1 reply; 28+ messages in thread From: Lars Magne Ingebrigtsen @ 2011-07-11 19:28 UTC (permalink / raw) To: emacs-devel Chong Yidong <cyd@stupidchicken.com> writes: > But, on reflection, maybe > > (ignore-errors (customize-save-variable ...)) > > would work just as well. Well, ignoring errors like that is generally not a good idea. If saving the .emacs file errors out, you want to know, for instance. And it doesn't set the variables in question if you do that. I think just making `customize-save-variable' set and warn will make the "emacs -Q" special case work nicely for all use cases. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog http://lars.ingebrigtsen.no/ ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-11 19:28 ` Lars Magne Ingebrigtsen @ 2011-07-12 0:03 ` Tim Cross 2011-07-12 1:07 ` chad 2011-07-12 1:51 ` Stephen J. Turnbull 0 siblings, 2 replies; 28+ messages in thread From: Tim Cross @ 2011-07-12 0:03 UTC (permalink / raw) To: emacs-devel On Tue, Jul 12, 2011 at 5:28 AM, Lars Magne Ingebrigtsen <larsi@gnus.org> wrote: > Chong Yidong <cyd@stupidchicken.com> writes: > >> But, on reflection, maybe >> >> (ignore-errors (customize-save-variable ...)) >> >> would work just as well. > > Well, ignoring errors like that is generally not a good idea. If saving > the .emacs file errors out, you want to know, for instance. > > And it doesn't set the variables in question if you do that. > > I think just making `customize-save-variable' set and warn will make the > "emacs -Q" special case work nicely for all use cases. > I think your on the right track, but a couple of things worth thinking about. An important role of -Q is to provide a well defined, understood environment which is largely common to all users. It is a key first step in reproducing bugs. While the current situation where customizing settings may fail or throw an error and look a bit ugly etc, it at least does have the advantage of providing a consistent environment across users. However, as soon as we allow customized variables to be set, either permanently or temporarily, we run the risk of losing this valuable environment consistency. At the same time, this can also be a source of frustration. For example, if you run emacs -Q to test a recipe for a bug and find it works, you cannot just run report-emacs-bug to submit the bug if your mail settings depend on anything but the default values. You need to copy the backtrace and other important information to a temporary file, exit emacs and start again without the -Q switch and then submit the bug. Furthermore, the environment setting you include in the bug report are now likely to be more complex and not a true reflection of the actual environment that existed when you ran your recipe under emacs -Q. I guess we need the best of both worlds. One possibility might be to modify the code that manages/sets custom variables check for the -Q switch and take some additional or different steps if the -Q switch is also detected. Perhaps something like using setq and adding the variable and value to a special -Q init list that cold be included in bug reports etc so that anyone wanting to reproduce the problem or run the recipe could also run a special bit of -Q init code to ensure at least consistency with the environment provided by the reporter/tester etc. The above is not well thought out - just some thoughts that might trigger better ideas. The main point is that while it might be nice to have some better way to deal with code that wants to set custom variables when runnning under -Q, we also need to try and not lose the important value provided by -Q of a consistent, well understood environment with known and tested values for core variables. Tim ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-12 0:03 ` Tim Cross @ 2011-07-12 1:07 ` chad 2011-07-12 1:51 ` Stephen J. Turnbull 1 sibling, 0 replies; 28+ messages in thread From: chad @ 2011-07-12 1:07 UTC (permalink / raw) To: Emacs devel Since we sometimes want custom to set variables in spite of -Q (for reproducing bugs, which I'll guess is probably the most common use of -Q) and sometimes don't want that, can we make it a switch? I was hoping to suggest a patch, but setting debug-on-entry for customize-save-variables and running Emacs -Q under MacOSX caused a crash, and I don't have the attention right now to hunt it down *and* suggest a patch. Customize itself seems to check 'init-file and offers different text if it's not set; is that sufficient for either asking something like ``Can't save setting; set for session anyway?''? *Chad P.S. In case someone cares about the crash, I've attached the system's dump; it might just be an artifact of the way I ran Emacs -Q. If I can reproduce it, I'll file a bug/patch. Thread 0 Crashed: Dispatch queue: com.apple.main-thread 0 libSystem.B.dylib 0x00007fff8907f0b6 __kill + 10 1 libSystem.B.dylib 0x00007fff8911f9f6 abort + 83 2 org.gnu.Emacs 0x0000000100194dcf ns_term_shutdown + 79 (nsterm.m:4074) 3 org.gnu.Emacs 0x00000001000ab7e5 fatal_error_signal + 293 (emacs.c:344) 4 libSystem.B.dylib 0x00007fff890911ba _sigtramp + 26 5 libSystem.B.dylib 0x00007fff8907f0b6 __kill + 10 6 libSystem.B.dylib 0x00007fff8911f9f6 abort + 83 7 org.gnu.Emacs 0x000000010010d337 Fgarbage_collect + 1575 (alloc.c:3969) 8 org.gnu.Emacs 0x0000000100125aef eval_sub + 239 (eval.c:2256) 9 org.gnu.Emacs 0x000000010014cd6b readevalloop + 907 (lread.c:1814) 10 org.gnu.Emacs 0x000000010014ec61 Fload + 1361 (lread.c:1302) 11 org.gnu.Emacs 0x000000010013188b Frequire + 539 (fns.c:2690) 12 org.gnu.Emacs 0x0000000100126002 eval_sub + 1538 (eval.c:2363) 13 org.gnu.Emacs 0x0000000100129065 internal_lisp_condition_case + 517 (eval.c:1440) 14 org.gnu.Emacs 0x0000000100161f10 exec_byte_code + 2880 (bytecode.c:981) 15 org.gnu.Emacs 0x0000000100126775 funcall_lambda + 805 (eval.c:3240) 16 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 17 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 18 org.gnu.Emacs 0x0000000100126775 funcall_lambda + 805 (eval.c:3240) 19 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 20 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 21 org.gnu.Emacs 0x0000000100126775 funcall_lambda + 805 (eval.c:3240) 22 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 23 org.gnu.Emacs 0x00000001001255b5 Fapply + 485 (eval.c:2457) 24 org.gnu.Emacs 0x000000010012f37d Fwidget_apply + 77 (fns.c:2785) 25 org.gnu.Emacs 0x0000000100126d5b Ffuncall + 1259 (eval.c:2991) 26 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 27 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 28 org.gnu.Emacs 0x00000001001255b5 Fapply + 485 (eval.c:2457) 29 org.gnu.Emacs 0x000000010012f37d Fwidget_apply + 77 (fns.c:2785) 30 org.gnu.Emacs 0x0000000100126d5b Ffuncall + 1259 (eval.c:2991) 31 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 32 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 33 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 34 org.gnu.Emacs 0x0000000100126775 funcall_lambda + 805 (eval.c:3240) 35 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 36 org.gnu.Emacs 0x0000000100128dae call1 + 30 (eval.c:2779) 37 org.gnu.Emacs 0x000000010012fee1 mapcar1 + 161 (fns.c:2347) 38 org.gnu.Emacs 0x00000001001302f0 Fmapcar + 336 (fns.c:2417) 39 org.gnu.Emacs 0x0000000100126d15 Ffuncall + 1189 (eval.c:3012) 40 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 41 org.gnu.Emacs 0x0000000100126775 funcall_lambda + 805 (eval.c:3240) 42 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 43 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 44 org.gnu.Emacs 0x0000000100126775 funcall_lambda + 805 (eval.c:3240) 45 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 46 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 47 org.gnu.Emacs 0x0000000100126775 funcall_lambda + 805 (eval.c:3240) 48 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 49 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 50 org.gnu.Emacs 0x0000000100126775 funcall_lambda + 805 (eval.c:3240) 51 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 52 org.gnu.Emacs 0x0000000100125727 Fapply + 855 (eval.c:2461) 53 org.gnu.Emacs 0x000000010012f37d Fwidget_apply + 77 (fns.c:2785) 54 org.gnu.Emacs 0x0000000100126d5b Ffuncall + 1259 (eval.c:2991) 55 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 56 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 57 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 58 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 59 org.gnu.Emacs 0x0000000100126165 eval_sub + 1893 (eval.c:2329) 60 org.gnu.Emacs 0x00000001001253a9 internal_catch + 217 (eval.c:1247) 61 org.gnu.Emacs 0x0000000100161f4a exec_byte_code + 2938 (bytecode.c:966) 62 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 63 org.gnu.Emacs 0x0000000100162a8c exec_byte_code + 5820 (bytecode.c:785) 64 org.gnu.Emacs 0x0000000100126aa4 Ffuncall + 564 (eval.c:3070) 65 org.gnu.Emacs 0x0000000100122f17 Fcall_interactively + 6279 (callint.c:857) 66 org.gnu.Emacs 0x0000000100126d02 Ffuncall + 1170 (eval.c:3016) 67 org.gnu.Emacs 0x0000000100126ef6 call3 + 38 (eval.c:2810) 68 org.gnu.Emacs 0x00000001000bf634 command_loop_1 + 1140 (keyboard.c:1580) 69 org.gnu.Emacs 0x00000001001252a5 internal_condition_case + 293 (eval.c:1493) 70 org.gnu.Emacs 0x00000001000b4c07 command_loop_2 + 55 (keyboard.c:1157) 71 org.gnu.Emacs 0x00000001001253a9 internal_catch + 217 (eval.c:1247) 72 org.gnu.Emacs 0x00000001000b539c recursive_edit_1 + 364 (keyboard.c:1136) 73 org.gnu.Emacs 0x00000001000b5512 Frecursive_edit + 290 (keyboard.c:821) 74 org.gnu.Emacs 0x00000001000ac5c6 main + 3430 (emacs.c:1704) 75 org.gnu.Emacs 0x0000000100001c24 start + 52 ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-12 0:03 ` Tim Cross 2011-07-12 1:07 ` chad @ 2011-07-12 1:51 ` Stephen J. Turnbull 2011-07-12 2:57 ` Tim Cross 2011-07-12 6:46 ` Lars Magne Ingebrigtsen 1 sibling, 2 replies; 28+ messages in thread From: Stephen J. Turnbull @ 2011-07-12 1:51 UTC (permalink / raw) To: Tim Cross; +Cc: emacs-devel Tim Cross writes: > At the same time, this can also be a source of frustration. For > example, if you run emacs -Q to test a recipe for a bug and find it > works, you cannot just run report-emacs-bug to submit the bug if your > mail settings depend on anything but the default values. You need to > copy the backtrace and other important information to a temporary > file, exit emacs and start again without the -Q switch and then submit > the bug. $ emacs -Q ;; reproduce non-crashing bug M-x report-emacs-bug RET ; get the environment right ;; edit the bug buffer as usual M-: (load-user-init-file) RET ; YMMV, this is XEmacs-specific IIRC ; XEmacs GUI provides a button, ; Emacs can easily do the same if ; it's not already available ;; fix up own address in bug report and send works for me. I do that kind of thing all the time, for the reasons you give. > Furthermore, the environment setting you include in the bug > report are now likely to be more complex and not a true reflection of > the actual environment that existed when you ran your recipe under > emacs -Q. This isn't a problem if done as above. There are surely other ways to accomplish the same thing, too, such as running a separate emacs -Q, formatting the bug buffer in the emacs -Q session, saving to a file, then running M-x report-emacs-bug in your main session, delete all the session information and C-x i the real bug report in. So this thread isn't about making life easier for bug reporters (who very likely don't remember the necessary settings the way Lars does, or even which variables to set, because assistant.el and Customize handle it for them), it's about making life easier for developers like Lars. Nothing wrong with that, but let's remember who benefits here. > One possibility might be to modify the code that manages/sets custom > variables check for the -Q switch and take some additional or > different steps if the -Q switch is also detected. Another possibility might be putting basic infrastructure stuff like mail settings in a different file, loaded on demand by the code that needs it. (Yeah, I know, deliberately putting all eggs in one basket is where this whole thing started.) ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-12 1:51 ` Stephen J. Turnbull @ 2011-07-12 2:57 ` Tim Cross 2011-07-12 4:12 ` Stephen J. Turnbull 2011-07-12 6:46 ` Lars Magne Ingebrigtsen 1 sibling, 1 reply; 28+ messages in thread From: Tim Cross @ 2011-07-12 2:57 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: emacs-devel On Tue, Jul 12, 2011 at 11:51 AM, Stephen J. Turnbull <stephen@xemacs.org> wrote: > Tim Cross writes: > > > At the same time, this can also be a source of frustration. For > > example, if you run emacs -Q to test a recipe for a bug and find it > > works, you cannot just run report-emacs-bug to submit the bug if your > > mail settings depend on anything but the default values. You need to > > copy the backtrace and other important information to a temporary > > file, exit emacs and start again without the -Q switch and then submit > > the bug. > > $ emacs -Q > ;; reproduce non-crashing bug > M-x report-emacs-bug RET ; get the environment right > ;; edit the bug buffer as usual > M-: (load-user-init-file) RET ; YMMV, this is XEmacs-specific IIRC > ; XEmacs GUI provides a button, > ; Emacs can easily do the same if > ; it's not already available > ;; fix up own address in bug report and send > I have used that technique, but have run into problems with packages that have already loaded where the variable needs to be set before they are loaded. The other problem is that it is a solution which really only works for somewhat experienced/confident users. However, bug submission was just an example of the point I was trying to make. The core issue I see is that -Q is useful mainly because it establishes a standard default environment. I think this is an important point - it is this standard default environment which allows developers to try and reproduce bugs without the distraction of local customizations that may cause/hide such bugs and it allows users to quickly and easily identify whether their problem is a bug in the core system or a but in their customization or add-on code/package. Once we allow local customizations to be applied in this environment, this standard base default environment no longer exists. This may be fine, provided there is some mechanism that makes what has been changed explicit and easy to reproduce. > works for me. I do that kind of thing all the time, for the reasons > you give. > > > Furthermore, the environment setting you include in the bug > > report are now likely to be more complex and not a true reflection of > > the actual environment that existed when you ran your recipe under > > emacs -Q. > > This isn't a problem if done as above. There are surely other ways to > accomplish the same thing, too, such as running a separate emacs -Q, > formatting the bug buffer in the emacs -Q session, saving to a file, > then running M-x report-emacs-bug in your main session, delete all the > session information and C-x i the real bug report in. > > So this thread isn't about making life easier for bug reporters (who > very likely don't remember the necessary settings the way Lars does, > or even which variables to set, because assistant.el and Customize > handle it for them), it's about making life easier for developers like > Lars. Nothing wrong with that, but let's remember who benefits here. Bug reporting was not meant as the central theme - it was just an example of one thing that could be affected when you allow local customizations to be applied in a -Q environment. I'm not even against local customizations being applied, but I think such customizations need to be very explicit and I would like to see some easy way to communicate what has been customized and to what so that it can be reproduced by others. What I don't want to see is one party reporting something in a -Q environment that is not seen in another -Q environment (assuming other things, such as platform, version etc being equal) as this could negate the real value of -Q, which is to provide a common base that can be used not only for bug reporting, but also for any development or other discussion where you need to make sure all parties are coming from the same point. The -Q arg is the great leveller that puts the novice, intermediate and expert on the same level and is often critical in establishing good communication. > > > One possibility might be to modify the code that manages/sets custom > > variables check for the -Q switch and take some additional or > > different steps if the -Q switch is also detected. > > Another possibility might be putting basic infrastructure stuff like > mail settings in a different file, loaded on demand by the code that > needs it. (Yeah, I know, deliberately putting all eggs in one basket > is where this whole thing started.) > I think there are probably many different solutions. Mail is just one area where this issue comes up. There are likely others. The solution will likely become evident once we understand the issue well. My only real contribution is to say that for me, the most fundamental property of -Q is that it is emacs with just the defaults and no local customization. I don't mind if it also has local customization, but that customization should be very explicit and I would like it to include a mechanism that would allow me to bundle that up in a simple way that would allow someone else to create a similar environment reliably and consistently. What I don't want is local customizations that are applied 'behind the scenes' or are only applied to some things and not others. I also don't want things to fail totally silently. Tim ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-12 2:57 ` Tim Cross @ 2011-07-12 4:12 ` Stephen J. Turnbull 2011-07-12 10:30 ` Tim Cross 0 siblings, 1 reply; 28+ messages in thread From: Stephen J. Turnbull @ 2011-07-12 4:12 UTC (permalink / raw) To: Tim Cross; +Cc: emacs-devel Tim Cross writes: > I have used that technique, but have run into problems with packages > that have already loaded where the variable needs to be set before > they are loaded. Granted, but that belongs to the "do what's needed to reproduce the bug" part of my workflow. I don't see how it's relevant to the discussion of *excessive* changes to the -Q environment. > The core issue I see is that -Q is useful mainly because it > establishes a standard default environment. [...] > Once we allow local customizations to be applied in this > environment, this standard base default environment no longer > exists. This may be fine, provided there is some mechanism that > makes what has been changed explicit and easy to reproduce. I think that Customize already provides some function for listing variables that are not at their default values, both Customized and "rogue" values. Its output could be added to the bug-reporter's buffer (maybe it's already there in Emacs, but XEmacs doesn't do that yet). Perhaps it should be glossed with a comment that only defcustoms can be listed this way. > Bug reporting was not meant as the central theme - it was just an > example of one thing that could be affected when you allow local > customizations to be applied in a -Q environment. OK. > What I don't want to see is one party reporting something in a -Q > environment that is not seen in another -Q environment (assuming > other things, such as platform, version etc being equal) I'm not sure I understand. Isn't that just a symptom of a poor report, ie, omitting necessary preparation for reproducing the behavior from the recipe? AIUI Lars' code is *not* going to suffer from the problem you describe: only *necessary* changes to the -Q environment will be made, and it's the reporter's responsibility, as usual, to describe them accurately. I'll let Lars speak to the details, though. > What I don't want is local customizations that are applied 'behind > the scenes' or are only applied to some things and not others. Sure. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-12 4:12 ` Stephen J. Turnbull @ 2011-07-12 10:30 ` Tim Cross 2011-07-13 0:31 ` Stephen J. Turnbull 0 siblings, 1 reply; 28+ messages in thread From: Tim Cross @ 2011-07-12 10:30 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: emacs-devel On Tue, Jul 12, 2011 at 2:12 PM, Stephen J. Turnbull <stephen@xemacs.org> wrote: > Tim Cross writes: > > > I have used that technique, but have run into problems with packages > > that have already loaded where the variable needs to be set before > > they are loaded. > > Granted, but that belongs to the "do what's needed to reproduce the > bug" part of my workflow. I don't see how it's relevant to the > discussion of *excessive* changes to the -Q environment. > I don't think "'excessive' changes" is an accurate reflection of what has been discussed her. The issue is about a package which needs local settings which are normally handled by the 'custom' framework. However, when you are running with -Q (and possibly -q), your .emacs is not loaded and no cusotmizations are in effect. To complicate matters, some of the functions in the custom package do not work well or do not work at all if the user's .emacs is not loaded or cannot be saved to. I think Lars wants to find a way to make code, such as smtpmail (I'm gussing) work in a 'clean' way under -Q. My contribution (FWIW) was to try and emphasize that as soon as you allow local configuration settings within the -Q environment, you are fundamentally changing the familiar semantics of that environment. It is no longer the stock standard, out of the box environment which can be duplicated by anyone simply through adding the -Q switch. To get consistency between two environments, it would now be necessary to perform additional steps. [..] > > > Bug reporting was not meant as the central theme - it was just an > > example of one thing that could be affected when you allow local > > customizations to be applied in a -Q environment. > > OK. > > > What I don't want to see is one party reporting something in a -Q > > environment that is not seen in another -Q environment (assuming > > other things, such as platform, version etc being equal) > > I'm not sure I understand. Isn't that just a symptom of a poor > report, ie, omitting necessary preparation for reproducing the > behavior from the recipe? AIUI Lars' code is *not* going to suffer > from the problem you describe: only *necessary* changes to the -Q > environment will be made, and it's the reporter's responsibility, as > usual, to describe them accurately. I'll let Lars speak to the > details, though. You could look at it as a symptom of poor bug reporting, but that isn't sufficient. Bugs are often reported by people with little experience and it can be difficult to know what to include and what not to. A consistent -Q environment helps by creating a consistent setup that can be communicated easily as "start with emacs -Q". We even tell people to see if the issue they have continues when you run under -Q. However, once we lose this standard environment because it may have local configuration settings, we cannot know for certain. Someone reports a problem they see under -Q, but which someone else does not see and now we don't know if its due to local customization or some other issue. However, please, move past bug reporting. The -Q is useful in many other scenarios. Think of it as the ultimate emacs reset button. With -Q everything goes back to the factor defaults. Ironically, I only really mentioned bug reporting as it was an example of how allowing local customization could make that process easier, but at the same time, potentially make other things harder - a double edged sword if you like. Once you change default settings in any way, this property of the -Q switch is lost. Yes, in many cases, it may not be an issue and yes, it may make some things, such as mail, work. However, this is irrelevant to the fact it fundamentally changes -Q in subtle ways that could have other side effects. This may well be acceptable, but if this is the case, it needs to be a decision made after considering such factors. An alternative solution is to accept that some packages, those that require local configuration, just don't work under -Q. I also think it is dangerous to just consider what Lars requires. While we may modify/add a feature to address the specific problem he is encountering, we also need to consider whether over time, others may use that facility incorrectly or in ways that were not thought of when it was implemented and what the consequences of that may be. My view is that the objective Lars is after is reasonable and we need to support his efforts. At the same time, I would like to do this in a way that does not change the semantics of -Q, or if it must, does so in a way where it is easy to get the environment consistency that -Q previously provided. There are numerous ways I think this could be done. An additional switch may be worth considering (either to force a 'only factory defaults' type setting or allow some 'customization' for specific packages - my only hesitation is contributing to emacs becoming a program that has such complex and numerous command line switches that they themselves become an issue! Tim ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-12 10:30 ` Tim Cross @ 2011-07-13 0:31 ` Stephen J. Turnbull 2011-07-13 5:38 ` Tim Cross 0 siblings, 1 reply; 28+ messages in thread From: Stephen J. Turnbull @ 2011-07-13 0:31 UTC (permalink / raw) To: Tim Cross; +Cc: emacs-devel Tim Cross writes: > On Tue, Jul 12, 2011 at 2:12 PM, Stephen J. Turnbull <stephen@xemacs.org> wrote: > saved to. I think Lars wants to find a way to make code, such as > smtpmail (I'm gussing) work in a 'clean' way under -Q. The right way is to use different functions to do the `set' part, which Customize already provides. As an Olde Farte, I am often nonplussed by software that doesn't offer to set or save, but simply reflects changes in the dialog in the settings immediately, and saves them when the dialog is dismissed (or perhaps before). It seems to me that a better approach than screwing with the semantics of "save" and turning it into "save in some circumstances but not others and you'd better remember which you're in, until the end of the session which may be a long time from now", simply do that set (which AFAIK can't fail) and then do a separate save, which makes it clear WTF the code is doing. > > I'm not sure I understand. Isn't that just a symptom of a poor > > report, ie, omitting necessary preparation for reproducing the > > behavior from the recipe? > > You could look at it as a symptom of poor bug reporting, but that > isn't sufficient. I very carefully removed "bug". This is not about bug reporting, it's about communication including bug reporting but not limited to it. I use the word "report" to indicate that certain aspects of the communication need to be precisely stated. > Once you change default settings in any way, this property of the -Q > switch is lost. Sure. I don't see how anything I said depends on *bug* reporting. What it depends on is making changes to the environment. In the case of mail, this may mean choosing a non-default transport (smtpmail vs. sendmail) and setting user options (full name and mail address) and so on. > An alternative solution is to accept that some packages, those that > require local configuration, just don't work under -Q. Well, sure. All that means is that people will continue to use -Q as "the ultimate Emacs reset" (quote of the week!) and proceed to modify that environment as necessary to do the work they're going to do. It will be their responsibility to report those modifications in order for others to reproduce the behavior .... > My view is that the objective Lars is after is reasonable and we need > to support his efforts. We already do. There's nothing hard or unclear about (customize-set-variable VAR ...) (condition-case (customize-save-variable VAR ...) (whatever-error-c-s-v-throws (warn "VAR set but not saved because you haven't loaded custom file"))) Lars just thinks that Emacs should be smart enough to do that itself. I think, as the Japanese say, this is ten years too early for that kind of smartness. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-13 0:31 ` Stephen J. Turnbull @ 2011-07-13 5:38 ` Tim Cross 2011-07-13 11:02 ` Stephen J. Turnbull 0 siblings, 1 reply; 28+ messages in thread From: Tim Cross @ 2011-07-13 5:38 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: emacs-devel On Wed, Jul 13, 2011 at 10:31 AM, Stephen J. Turnbull <stephen@xemacs.org> wrote: > Tim Cross writes: > > On Tue, Jul 12, 2011 at 2:12 PM, Stephen J. Turnbull <stephen@xemacs.org> wrote: > > > saved to. I think Lars wants to find a way to make code, such as > > smtpmail (I'm gussing) work in a 'clean' way under -Q. > > The right way is to use different functions to do the `set' part, > which Customize already provides. > > As an Olde Farte, I am often nonplussed by software that doesn't offer > to set or save, but simply reflects changes in the dialog in the > settings immediately, and saves them when the dialog is dismissed (or > perhaps before). It seems to me that a better approach than screwing > with the semantics of "save" and turning it into "save in some > circumstances but not others and you'd better remember which you're > in, until the end of the session which may be a long time from now", > simply do that set (which AFAIK can't fail) and then do a separate > save, which makes it clear WTF the code is doing. > I *think* I agree, though am not clear what 'saving' means compared to 'setting' within the context of the -Q switch - if it is just a 'no-op' type of operation, it could cause confusion for the user and if it means something else, I'm not sure what that is. > > > I'm not sure I understand. Isn't that just a symptom of a poor > > > report, ie, omitting necessary preparation for reproducing the > > > behavior from the recipe? > > > > You could look at it as a symptom of poor bug reporting, but that > > isn't sufficient. > > I very carefully removed "bug". This is not about bug reporting, it's > about communication including bug reporting but not limited to it. I > use the word "report" to indicate that certain aspects of the > communication need to be precisely stated. OK, but that does not affect my point regarding the importance of -Q representing a standard, well defined and consistent configuration. > > > Once you change default settings in any way, this property of the -Q > > switch is lost. > > Sure. I don't see how anything I said depends on *bug* reporting. > What it depends on is making changes to the environment. In the case > of mail, this may mean choosing a non-default transport (smtpmail > vs. sendmail) and setting user options (full name and mail address) > and so on. This is getting weird. It seems we both agree that -Q and any changes to that environment are about more than bug reporting. I think its about more than reporting. For example, I find it extremely useful in a diagnostic role and have even found it useful in teaching or explaining concepts as it ensures everyone is in the same basic environment. > > > An alternative solution is to accept that some packages, those that > > require local configuration, just don't work under -Q. > > Well, sure. All that means is that people will continue to use -Q as > "the ultimate Emacs reset" (quote of the week!) and proceed to modify > that environment as necessary to do the work they're going to do. It > will be their responsibility to report those modifications in order > for others to reproduce the behavior .... > I think we must have very different views on how -Q is used. I do not see -Q being a switch you would normally use in day-to-day operation. It is something you do when trying to diagnose a problem, formulate a recipe for a bug or possibly do some testing/benchmarking/profiling etc. On some levels, it is reasonable to assume some functionality which depends on local customization will not work, but that could be OK given the current context. > > My view is that the objective Lars is after is reasonable and we need > > to support his efforts. > > We already do. There's nothing hard or unclear about > > (customize-set-variable VAR ...) > (condition-case > (customize-save-variable VAR ...) > (whatever-error-c-s-v-throws > (warn "VAR set but not saved because you haven't loaded custom file"))) > > Lars just thinks that Emacs should be smart enough to do that itself. > I think, as the Japanese say, this is ten years too early for that > kind of smartness. > > Hmm. That wasn't my impression - at least not initially. What I understood was that he wanted to modify how the save operation worked under the -Q switch so that it only set the variable and did not warn the user the value was not saved. I thought the objective was to make code that needed to set custom variables at load time able to handle the -Q situation without the need to jump through extra hoops to avoid it throwing an error. Others mentioned that having code 'silently' fail to do what would be expected i.e. save, was perhaps not a great idea and I tend to agree. However, my concern was whether having code actually change variables from their default state under the -Q switch was a good idea at all as it does change the fundamental meaning of -Q. It means that -Q would no longer mean emacs in a fully default state to emacs in a default state with some things set to local values. It is the 'some things set to local values" which I think could be problematic and my suggestion was that if we do go down that road, we need a convenient way to know what those some things are and possibly a reliable way to communicate that information. The overall point was to question whether this was even a good road to go down at all or whether we are better off leaving -Q to mean EVERYTHING at its default state and doing something else, like having the custom functions do something other than raise an error when code tries to save custom values under -Q (maybe a warning they are not saved rather than an error) or perhaps it already does the right thing and what the code is trying to do is incorrect and needs refactoring. Tim ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-13 5:38 ` Tim Cross @ 2011-07-13 11:02 ` Stephen J. Turnbull 2011-07-13 23:46 ` Tim Cross 0 siblings, 1 reply; 28+ messages in thread From: Stephen J. Turnbull @ 2011-07-13 11:02 UTC (permalink / raw) To: Tim Cross; +Cc: emacs-devel Tim Cross writes: > I *think* I agree, though am not clear what 'saving' means compared to > 'setting' within the context of the -Q switch I think it should mean an error, while the maintainers seem to be (and Lars clearly is) happy with a warning. Nobody *wants* silence. > OK, but that does not affect my point regarding the importance of -Q > representing a standard, well defined and consistent configuration. Right. I think there is consensus on that. My point is simply that in many cases, -Q will not be a useful environment. Lars proposes to make it somewhat more useful, at the cost of complexifying the behavior of custom-save-variable, and making pollution of the -Q environment a bit less painful. > Hmm. That wasn't my impression - at least not initially. What I > understood was that he wanted to modify how the save operation worked > under the -Q switch so that it only set the variable and did not warn > the user the value was not saved. Indeed, that was my impression too, as well as Drew Adams'. But Lars clarified that he just didn't bother to mention adding a warning, I guess because he wanted to focus on the major change from signaling an "unwritable" error to handling it within `custom-save-variable'. > However, my concern was whether having code actually change > variables from their default state under the -Q switch was a good > idea at all as it does change the fundamental meaning of -Q. I think there is a consensus that this should be avoided when possible and done very carefully when necessary. > whether we are better off leaving -Q to mean EVERYTHING at its > default state and doing something else, like having the custom > functions do something other than raise an error when code tries to > save custom values under -Q Of course that's what it means. So the problem is what do you do when what you need to do *requires* changing state? I think it's plausible that almost anything to do with mail will *require* changes to the -Q state before you get useful behavior. Note that saving custom values does not change the -Q environment. It's just that you're unlikely to bother saving in the virgin -Q environment (you can always reproduce that with -Q!), so an attempt to save pretty much implies you've already changed state in a significant way. > (maybe a warning they are not saved rather than an error) or > perhaps it already does the right thing and what the code is trying > to do is incorrect and needs refactoring. My position is that the code needs refactoring, because I don't like the idea of facilitating exceptions here, and I think that changing `custom-save-variable' will make doing customizations in the -Q environment more attractive. But that doesn't seem to be the position of the maintainers. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-13 11:02 ` Stephen J. Turnbull @ 2011-07-13 23:46 ` Tim Cross 2011-07-14 2:13 ` Stephen J. Turnbull 0 siblings, 1 reply; 28+ messages in thread From: Tim Cross @ 2011-07-13 23:46 UTC (permalink / raw) To: Stephen J. Turnbull; +Cc: emacs-devel On Wed, Jul 13, 2011 at 9:02 PM, Stephen J. Turnbull <stephen@xemacs.org> wrote: > > whether we are better off leaving -Q to mean EVERYTHING at its > > default state and doing something else, like having the custom > > functions do something other than raise an error when code tries to > > save custom values under -Q > > Of course that's what it means. So the problem is what do you do when > what you need to do *requires* changing state? I think it's plausible > that almost anything to do with mail will *require* changes to the -Q > state before you get useful behavior. > Agree, but perhaps disagree on how those changes occur. I would prefer that the individual has to explicitly (even manually) make those changes rather than have emacs attempt to anticipate what the user may need when running under a -Q environment. Of course, the downside with this approach is that those who are less comfortable/familiar with emacs will find this difficult. > Note that saving custom values does not change the -Q environment. > It's just that you're unlikely to bother saving in the virgin -Q > environment (you can always reproduce that with -Q!), so an attempt to > save pretty much implies you've already changed state in a significant > way. > I guess your saying that saving and setting are different operations and saving without setting would not affect the current environment? What I'm not clear about is where you would save the values to. The default location I gues swould be the users .emacs file. However, quite a few users also customize this and have the custom variable stuff in a different file because they don't want it mixed up with other stuff in .emacs. Now we have a problem. The -Q switch does not read the .emacs file and therefore we cannot tell which aproach this user prefers and therefore, don't know where we should save these values to. This is why I don't understand what 'save' means in this context or how it would work. Worse yet would be a situation where the user becomes confused when they believe they have saved settings while under -Q, but then next time they run emacs (with or without -Q) their changes have not been saved. To some extent, I would guess this is primarily why you would argue for an error rather than a warning - making it very clear to the user their save action has failed? > > (maybe a warning they are not saved rather than an error) or > > perhaps it al> Tim Cross writes: > > > I *think* I agree, though am not clear what 'saving' means compared to > > 'setting' within the context of the -Q switch > > I think it should mean an error, while the maintainers seem to be (and > Lars clearly is) happy with a warning. Nobody *wants* silence. > I'm divided on error v's warning. On one hand, an error is good as it grabs user attention and makes it clear the values have not been saved - avoiding later confusion. The downside is that it can make the code more complex for developers when -Q is invoked. On the other hand, it could be argued that as this is a known and understood situation, a warning is sufficient. The advantage is that some code would become less complex. The downside is that users may easily overlook the error and then get confused when their settings don't seem to be persisting over sessions etc. I personally think an error is better. However, I also don't fully understand how often package maintainers run into problems initializing their packages when they are run under -Q. If this problem is relatively rare and really only comes up when you would like a package to have some level of functionality under -Q and that can only be achieved by setting values, then an error would certainly seem to be the right choice. However, if this is a frequent issue and an error is resulting in frequently more complex initialization code, then there could be a case to downgrade it to a warning. On the other hand, I would be tempted to look at refactoring how defaults and custom work as this would indicate a deeper design issue IMO. > > OK, but that does not affect my point regarding the importance of -Q > > representing a standard, well defined and consistent configuration. > > Right. I think there is consensus on that. My point is simply that > in many cases, -Q will not be a useful environment. Lars proposes to > make it somewhat more useful, at the cost of complexifying the > behavior of custom-save-variable, and making pollution of the -Q > environment a bit less painful. Yes - I worry about it becoming easier to pollute the -Q environment and whether this will reuslt in -Q becoming less useful over time. I think it is reasonable to expect the -Q environment to be less 'useful' than the standard environment. It is a special purpose environment and losing some functionality in such an environment is acceptable - especially if the lost functionality is functionality that depends on local configuration. > > My position is that the code needs refactoring, because I don't like > the idea of facilitating exceptions here, and I think that changing > `custom-save-variable' will make doing customizations in the -Q > environment more attractive. But that doesn't seem to be the position > of the maintainers. > It would seem we are of similar opinions. I too am concerned that making it easier for code to change custom variables under -Q environments will result in -Q losing its important quality of representing a standard default environment. The suggested changes to custom functions certainly feels wrong in the sense that it seems to be muddying their definition and making matters more complex than desirable. I also suspect that the desire to make -Q more functional may be misplaced. I guess we will have to wait and see what evolves. Tim ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-13 23:46 ` Tim Cross @ 2011-07-14 2:13 ` Stephen J. Turnbull 0 siblings, 0 replies; 28+ messages in thread From: Stephen J. Turnbull @ 2011-07-14 2:13 UTC (permalink / raw) To: Tim Cross; +Cc: emacs-devel Tim Cross writes: > On Wed, Jul 13, 2011 at 9:02 PM, Stephen J. Turnbull <stephen@xemacs.org> wrote: > > So the problem is what do you do when what you need to do > > *requires* changing state? I think it's plausible that almost > > anything to do with mail will *require* changes to the -Q state > > before you get useful behavior. > > Agree, but perhaps disagree on how those changes occur. I think you and I agree that having M-x sendmail prompt for values is implicit, but I'm pretty sure Lars would consider that to be an explicit change. > I guess your saying that saving and setting are different operations > and saving without setting would not affect the current environment? > What I'm not clear about is where you would save the values to. Well, in XEmacs it's not really a problem because by default customizations are saved to ~/.xemacs/custom.el, so I haven't really thought about it. A bit of reflection suggests that if the default is .emacs, this is a real hairball. However, neither of the options currently being advocated (status quo with an error before setting the variable vs. catch the error, set the variable, issue warning) actually does save so the point is moot, I think. That issue aside, IMO if a failure to save customizations in the -Q environment is a problem for some code, that code should handle it. In general, I want to discourage use of Customize in the -Q environment because Customize does way too much magic behind the scenes (a Customize setter can do *anything*). As soon as a recipe says "Customize variable X to Y," you're in a situation where you must analyze Customize as well as the main code. > changes have not been saved. To some extent, I would guess this is > primarily why you would argue for an error rather than a warning - > making it very clear to the user their save action has failed? No, my primary reason is the above. If the warning is obstrusive, the user won't miss it, and it's unlikely that much harm will be done even if they do. They just have to redo the customization in a session without -Q, and only if that is "hard" is there a real loss. > I personally think an error is better. However, I also don't fully > understand how often package maintainers run into problems > initializing their packages when they are run under -Q. Lars says it's not about the package maintainers, it's about the users. It's none of our business why the user is running a mail command in -Q environment, but we should make that as painless as possible. I agree, I just think that it's better to have the burden of handling errors occasioned by operating in the -Q environment placed on developers rather than done behind the scenes by Emacs. > Yes - I worry about it becoming easier to pollute the -Q environment > and whether this will reuslt in -Q becoming less useful over time. Exactly. > I guess we will have to wait and see what evolves. Sure. But although Lars may have long since killed this subthread, I suspect Stefan and/or Yidong lurked long enough to get the point. That doesn't mean they'll agree with us, of course. Until next time :-), ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-12 1:51 ` Stephen J. Turnbull 2011-07-12 2:57 ` Tim Cross @ 2011-07-12 6:46 ` Lars Magne Ingebrigtsen 1 sibling, 0 replies; 28+ messages in thread From: Lars Magne Ingebrigtsen @ 2011-07-12 6:46 UTC (permalink / raw) To: emacs-devel "Stephen J. Turnbull" <stephen@xemacs.org> writes: > So this thread isn't about making life easier for bug reporters (who > very likely don't remember the necessary settings the way Lars does, > or even which variables to set, because assistant.el and Customize > handle it for them), it's about making life easier for developers like > Lars. No, this is about making `M-x mail' (and other commands that (offer to) save variables via the customisation framework) work in "emacs -Q". -- (domestic pets only, the antidote for overdose, milk.) bloggy blog http://lars.ingebrigtsen.no/ ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-10 12:22 Change `customize-save-variable' to work under "emacs -Q"? Lars Magne Ingebrigtsen 2011-07-11 2:30 ` Stephen J. Turnbull 2011-07-11 17:36 ` Chong Yidong @ 2011-07-12 3:32 ` Stefan Monnier 2011-07-15 17:01 ` Dave Abrahams 2011-07-17 14:33 ` Christoph Scholtes 4 siblings, 0 replies; 28+ messages in thread From: Stefan Monnier @ 2011-07-12 3:32 UTC (permalink / raw) To: emacs-devel > Otherwise all the callers end up doing this very awkward thing: > (if (ignore-errors (custom-file)) > (progn > (customize-save-variable 'smtpmail-smtp-server server) > (customize-save-variable 'smtpmail-smtp-service port)) > (setq smtpmail-smtp-server server > smtpmail-smtp-service port)) I'd be surprised if `setq' is the right answer (it's probably more like customize-set or something along these lines), and it deserves a `message', but other than that I guess it's OK. We used to actually save, which resulted in overwriting the user's custom-file with a mostly empty file, so we fixed it by signalling an error, but I guess that just outputting a message and not saving is good enough. Stefan ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-10 12:22 Change `customize-save-variable' to work under "emacs -Q"? Lars Magne Ingebrigtsen ` (2 preceding siblings ...) 2011-07-12 3:32 ` Stefan Monnier @ 2011-07-15 17:01 ` Dave Abrahams 2011-07-17 14:33 ` Christoph Scholtes 4 siblings, 0 replies; 28+ messages in thread From: Dave Abrahams @ 2011-07-15 17:01 UTC (permalink / raw) To: emacs-devel on Sun Jul 10 2011, Lars Magne Ingebrigtsen <larsi-AT-gnus.org> wrote: > If you run "emacs -Q", and you have a piece of code that calls > `customize-save-variable', it will error out, saying that it won't > overwrite the conf. > > Would anybody mind if I changed that function to not error out, but > instead just do a `setq' on the variable in question, if we're running > under -Q? > > Otherwise all the callers end up doing this very awkward thing: > > (if (ignore-errors (custom-file)) > (progn > (customize-save-variable 'smtpmail-smtp-server server) > (customize-save-variable 'smtpmail-smtp-service port)) > (setq smtpmail-smtp-server server > smtpmail-smtp-service port)) My usual workaround for that and related issues is never to run emacs with -Q. Instead I create an empty directory in /tmp and set HOME to point there: HOME=/tmp/test emacs I think that *could* be a much better behavior for emacs -Q even if it means you can't access anything you normally reach via ~. Another option of course would be to populate the test directory with symlinks to make it look more like my home directory, but I actually never needed anything like that. -- Dave Abrahams BoostPro Computing http://www.boostpro.com ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-10 12:22 Change `customize-save-variable' to work under "emacs -Q"? Lars Magne Ingebrigtsen ` (3 preceding siblings ...) 2011-07-15 17:01 ` Dave Abrahams @ 2011-07-17 14:33 ` Christoph Scholtes 2011-07-17 19:13 ` Lars Magne Ingebrigtsen 4 siblings, 1 reply; 28+ messages in thread From: Christoph Scholtes @ 2011-07-17 14:33 UTC (permalink / raw) To: emacs-devel On 7/10/2011 6:22 AM, Lars Magne Ingebrigtsen wrote: > If you run "emacs -Q", and you have a piece of code that calls > `customize-save-variable', it will error out, saying that it won't > overwrite the conf. > > Would anybody mind if I changed that function to not error out, but > instead just do a `setq' on the variable in question, if we're running > under -Q? I am not sure if this is related to this, but I just encountered a rather awkward situation. I run on Windows with my configuration stored in `~/.emacs.d/init.el'. I did a recipe for a bug from `emacs -Q' and tried to submit a bug report. It asked me whether I wanted to save the SMTP setup, which I replied no to. It then proceeded to pop up the configured MUA (Thunderbird) to send the bug report. Next time I launched Emacs it did not load any of my custom configurations. Turns out it wrote a `.emacs' to to ~/, which contained the '(sendmail-query-once-function (quote mailclient-send-it) t) and was loaded in favor of my configuration in `.emacs.d'. I can see this potentially being very confusing for people. Do we have to save this custom variable even when running `emacs -Q'? Christoph ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: Change `customize-save-variable' to work under "emacs -Q"? 2011-07-17 14:33 ` Christoph Scholtes @ 2011-07-17 19:13 ` Lars Magne Ingebrigtsen 0 siblings, 0 replies; 28+ messages in thread From: Lars Magne Ingebrigtsen @ 2011-07-17 19:13 UTC (permalink / raw) To: emacs-devel Christoph Scholtes <cschol2112@googlemail.com> writes: > Turns out it wrote a `.emacs' to to ~/, which contained the > > '(sendmail-query-once-function (quote mailclient-send-it) t) > > and was loaded in favor of my configuration in `.emacs.d'. Yes, that's not nice. Perhaps `customize-save-variable' shouldn't save anything at all under -Q, even if the (default) startup file doesn't exist? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog http://lars.ingebrigtsen.no/ ^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2011-07-17 19:13 UTC | newest] Thread overview: 28+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-07-10 12:22 Change `customize-save-variable' to work under "emacs -Q"? Lars Magne Ingebrigtsen 2011-07-11 2:30 ` Stephen J. Turnbull 2011-07-11 7:49 ` Lars Magne Ingebrigtsen 2011-07-11 9:52 ` Stephen J. Turnbull 2011-07-11 9:53 ` Lars Magne Ingebrigtsen 2011-07-11 13:52 ` Stephen J. Turnbull 2011-07-11 17:36 ` Chong Yidong 2011-07-11 18:08 ` Drew Adams 2011-07-11 19:32 ` Juanma Barranquero 2011-07-11 18:27 ` PJ Weisberg 2011-07-11 19:04 ` Chong Yidong 2011-07-11 19:28 ` Lars Magne Ingebrigtsen 2011-07-12 0:03 ` Tim Cross 2011-07-12 1:07 ` chad 2011-07-12 1:51 ` Stephen J. Turnbull 2011-07-12 2:57 ` Tim Cross 2011-07-12 4:12 ` Stephen J. Turnbull 2011-07-12 10:30 ` Tim Cross 2011-07-13 0:31 ` Stephen J. Turnbull 2011-07-13 5:38 ` Tim Cross 2011-07-13 11:02 ` Stephen J. Turnbull 2011-07-13 23:46 ` Tim Cross 2011-07-14 2:13 ` Stephen J. Turnbull 2011-07-12 6:46 ` Lars Magne Ingebrigtsen 2011-07-12 3:32 ` Stefan Monnier 2011-07-15 17:01 ` Dave Abrahams 2011-07-17 14:33 ` Christoph Scholtes 2011-07-17 19:13 ` Lars Magne Ingebrigtsen
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).