* find-file-hook as illustration of Custom problems @ 2005-02-04 0:36 Luc Teirlinck 2005-02-04 7:16 ` Lennart Borgman 2005-02-05 17:38 ` Richard Stallman 0 siblings, 2 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-04 0:36 UTC (permalink / raw) Programs adding entries to hooks or other lists or alists that are defined by defcustoms can yield _all kinds_ of problems. If you do `emacs -q' and then `M-x customize-rogue' you will see well over twenty variables that are defined with defcustoms and are then changed by code. Just experimenting a little bit with these variables in Custom buffers (_not_ in `emacs -q', because you want a regular customized Emacs for this) will reveal a wide variety of buggish behavior. I _only_ took a look at find-file-hook, because I wanted a really easy example. (Plenty of other variables, look like they might be a much bigger mess.) If you customize find-file-hook, then regret your customizations and select "Erase Customization" VC will not work any more, for newly visited files. If you use auto-revert-tail-mode, it will malfunction from that moment on, for newly visited files. Both will work again if you start a new session, but the fact that they cease to work without warning in the current session is bad enough. The problem is that vc-hooks.el contains: (add-hook 'find-file-hook 'vc-find-file-hook) and autorevert.el contains: (add-hook 'find-file-hook (lambda () (set (make-local-variable 'auto-revert-tail-pos) (save-restriction (widen) (1- (point-max)))))) Since vc-hooks.el is apparently preloaded, one could either call vc-find-file-hook directly from after-find-file or one could add it to the defcustom of find-file-hook. Since it seems to be a function that needs to run _unconditionally_, I personally would lean toward calling it from after-find-file directly. What should be done with the auto-revert-tail-mode problem is not that straightforward. I would say just ignore it for the moment. I just noticed auto-revert-tail, because I use auto-revert-mode, but looking through the code, I noticed that several other packages add stuff to find-file-hook in the same way and hence will also be disabled by "Erase Customization ". I guess that after "21.4" is released, we could split some of the most often used and most problematic hooks (like find-file-hook) into a user and a program hook, thereby solving this kind of problem. (Doing this for all defcustomed hooks would probably be unrealistic, because there are too many of them.) After that more than twenty complete different and much more complex problems with changing stuff outside Custom remain, if we just look at problems present at startup. But problems occurring _after_ startup are much more dangerous, as I pointed out and they are also apparently even way more numerous. I would say, let us tackle this seriously after 21.4 is released and let us leave Custom alone until 21.4 is released. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-04 0:36 find-file-hook as illustration of Custom problems Luc Teirlinck @ 2005-02-04 7:16 ` Lennart Borgman 2005-02-05 17:38 ` Richard Stallman 1 sibling, 0 replies; 65+ messages in thread From: Lennart Borgman @ 2005-02-04 7:16 UTC (permalink / raw) ----- Original Message ----- From: "Luc Teirlinck" <teirllm@dms.auburn.edu> > I guess that after "21.4" is released, we could split some of the most > often used and most problematic hooks (like find-file-hook) into a > user and a program hook, thereby solving this kind of problem. (Doing > this for all defcustomed hooks would probably be unrealistic, because > there are too many of them.) Thanks for the clear example. What we can (and I think we should) do before release is some small changes to Customize to try to help the user avoid the problems. I would suggest the following: 1) Do not at all allow "Erase Customization" for rouge options. Or at least ask and explain the problems at any such attempts. 1) Do not at all allow "Save" for rouge options. Or at least ask and explain explain at any such attempts. 2) Ask and explain before "Set" of any such option. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-04 0:36 find-file-hook as illustration of Custom problems Luc Teirlinck 2005-02-04 7:16 ` Lennart Borgman @ 2005-02-05 17:38 ` Richard Stallman 2005-02-05 18:54 ` Luc Teirlinck ` (3 more replies) 1 sibling, 4 replies; 65+ messages in thread From: Richard Stallman @ 2005-02-05 17:38 UTC (permalink / raw) Cc: emacs-devel The problem is that vc-hooks.el contains: (add-hook 'find-file-hook 'vc-find-file-hook) and autorevert.el contains: (add-hook 'find-file-hook (lambda () (set (make-local-variable 'auto-revert-tail-pos) (save-restriction (widen) (1- (point-max)))))) Such code is legitimate, and it would be absurd to call it broken. The hook in vc-hooks.el could be replaced with explicit code inside after-find-file, and that might be an improvement. But we can't do that for other uses of the hook. This is what the hook is meant for. For the case of hooks, we could imagine changing cus-edit.el so that edits made using Custom only affect elements that were installed using Custom. Any other elements could be invisible and untouchable; or they might be displayed in a separate way as "program-added hooks" and untouchable through the usual Custom features. In effect, this means treating a single list as if it were the combination of too list values, one to be edited through Custom and one to be updated by programs. I don't know how hard this would be. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-05 17:38 ` Richard Stallman @ 2005-02-05 18:54 ` Luc Teirlinck 2005-02-06 21:01 ` Richard Stallman 2005-02-05 19:43 ` Lennart Borgman ` (2 subsequent siblings) 3 siblings, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-05 18:54 UTC (permalink / raw) Cc: emacs-devel Richard Stallman wrote: For the case of hooks, we could imagine changing cus-edit.el so that edits made using Custom only affect elements that were installed using Custom. Any other elements could be invisible and untouchable; or they might be displayed in a separate way as "program-added hooks" and untouchable through the usual Custom features. I believe the latter. The user should know that there are other, untouchable things in the list. In effect, this means treating a single list as if it were the combination of too list values, one to be edited through Custom and one to be updated by programs. I guess that Custom could use an internal custom-list-var for every list-var. Everything specified in the definition of the defcustom should be in custom-list-var and hence, removable. I don't know how hard this would be. That is the problem, of course. The problem occurs not only for hooks, but for every non-atom, to which elements can be added both by code and by the user. So the solution should apply to all such non-atoms. But not to lists that have a fixed length, like values that are a supposed to be a single cons. How do we tell such things apart? Probably from the type. So something in the type of a list to which elements can be added both through code and through Custom should say that Custom needs to use a custom-list-var. Currently, types are not designed with this in mind. How do we determine whether a defcustom of type 'sexp' with standard value nil is intended to be a variable length list or not? I believe that we eventually should go in a direction like this. If we want it for 21.4 somebody should essentially start to try to implement it right now. Per already has said that he has no time. I do currently not have the time to start implementing something like this either. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-05 18:54 ` Luc Teirlinck @ 2005-02-06 21:01 ` Richard Stallman 2005-02-06 22:19 ` Lennart Borgman 0 siblings, 1 reply; 65+ messages in thread From: Richard Stallman @ 2005-02-06 21:01 UTC (permalink / raw) Cc: emacs-devel For the case of hooks, we could imagine changing cus-edit.el so that edits made using Custom only affect elements that were installed using Custom. Any other elements could be invisible and untouchable; or they might be displayed in a separate way as "program-added hooks" and untouchable through the usual Custom features. I believe the latter. The user should know that there are other, untouchable things in the list. In effect, this means treating a single list as if it were the combination of too list values, one to be edited through Custom and one to be updated by programs. I guess that Custom could use an internal custom-list-var for every list-var. Everything specified in the definition of the defcustom should be in custom-list-var and hence, removable. The symbol property that records the value according to Custom can serve this purpose. Instead of saying "Changed outside Custom", it can diff the two values to determine which elements were added outside Custom and which were added within it. After Custom is used to change the latter set, it can merge the two sets. custom-set-variable has to handle this too. So something in the type of a list to which elements can be added both through code and through Custom should say that Custom needs to use a custom-list-var. Yes, we could try handling other kinds of lists in the same way if it works for hooks. How do we determine whether a defcustom of type 'sexp' with standard value nil is intended to be a variable length list or not? Don't worry about it yet. One thing at a time. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-06 21:01 ` Richard Stallman @ 2005-02-06 22:19 ` Lennart Borgman 0 siblings, 0 replies; 65+ messages in thread From: Lennart Borgman @ 2005-02-06 22:19 UTC (permalink / raw) Cc: emacs-devel ----- Original Message ----- From: "Richard Stallman" <rms@gnu.org> > I guess that Custom could use an internal custom-list-var for every > list-var. Everything specified in the definition of the defcustom > should be in custom-list-var and hence, removable. > > The symbol property that records the value according to Custom > can serve this purpose. Instead of saying "Changed outside Custom", > it can diff the two values to determine which elements were added > outside Custom and which were added within it. > > After Custom is used to change the latter set, it can merge the two > sets. Maybe we should not forget that this symbol property according to Per A is a valuable tool to find errors in the handling of defcustom symbols. Perhaps that possibility can be retained by adding a new property corresponding to the users added part? ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-05 17:38 ` Richard Stallman 2005-02-05 18:54 ` Luc Teirlinck @ 2005-02-05 19:43 ` Lennart Borgman 2005-02-05 20:56 ` Popup when buffer file is changed on disk moheb missaghi 2005-02-06 21:01 ` find-file-hook as illustration of Custom problems Richard Stallman 2005-02-06 1:50 ` Luc Teirlinck 2005-02-06 2:07 ` Luc Teirlinck 3 siblings, 2 replies; 65+ messages in thread From: Lennart Borgman @ 2005-02-05 19:43 UTC (permalink / raw) Cc: emacs-devel ----- Original Message ----- From: "Richard Stallman" <rms@gnu.org> > For the case of hooks, we could imagine changing cus-edit.el so that > edits made using Custom only affect elements that were installed using > Custom. Any other elements could be invisible and untouchable; or > they might be displayed in a separate way as "program-added hooks" and > untouchable through the usual Custom features. In effect, this means > treating a single list as if it were the combination of too list > values, one to be edited through Custom and one to be updated > by programs. > > I don't know how hard this would be. Would not this require changes to the run hook functions too? In that case it might be more simple to add a macro (or function) used for creating hooks, maybe "define-hook" that added the normal hook and a second hook used by Custom. (This would of course also require changes to the run hook functions.) This is somewhat in the spirit of define-minor-mode. It would make it rather easy to change all the 400 hooks now defined by defcustom. I assume there would not be big changes necessary to the run hooks functions. It is just to run the hooks in the second list too. (However maybe the marriage between Custom and the C code should feel uncomfortable.) ^ permalink raw reply [flat|nested] 65+ messages in thread
* Popup when buffer file is changed on disk 2005-02-05 19:43 ` Lennart Borgman @ 2005-02-05 20:56 ` moheb missaghi 2005-02-05 22:57 ` Eli Zaretskii 2005-02-06 21:01 ` find-file-hook as illustration of Custom problems Richard Stallman 1 sibling, 1 reply; 65+ messages in thread From: moheb missaghi @ 2005-02-05 20:56 UTC (permalink / raw) Hi: As great as emacs is, sometimes I'd like to use an IDE simultaneously with emacs which has features not currently available in emacs. To give an example, Microsoft's Visual Studio which has something called Intelisense which has a knowledge of object hierarchy and allows object name completion. Most IDE's prompt the user when the file is changed outside them (for example by an editor such as emacs) by poping up a dialog box asking the user if he/she wants to reload the file. emacs gives this warning a bit too late in my opinion, i.e., when the buffer is about to be modified rather than when its frame gets the focus. In the following I am presenting changes for NT emacs which allow poping up of a dialog box to notify the user that the file is changed on disk and the buffer is going to be refreshed. This is my first attempt and I can already think of some improvements (for example if the user doesn't want the file to be reloaded but the warning should popup only once). Just wanted to get some feed back from this group before going further. Here are the changes in cvs diff format delimited by a user flag named USING_WITH_IDE. Please note that this feature is not specific to any IDE and the code on Windows is simply an example. Regards Moheb Index: nt/nmake.defs =================================================================== RCS file: /cvsroot/emacs/emacs/nt/nmake.defs,v retrieving revision 1.20 diff -r1.20 nmake.defs 132a133,135 > > USER_CFLAGS = -DUSING_WITH_IDE > cvs diff: Diffing nt/icons cvs diff: Diffing nt/inc cvs diff: Diffing nt/inc/arpa cvs diff: Diffing nt/inc/netinet cvs diff: Diffing nt/inc/sys cvs diff: Diffing oldXMenu cvs diff: Diffing site-lisp cvs diff: Diffing src Index: src/buffer.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/buffer.c,v retrieving revision 1.473 diff -r1.473 buffer.c 55a56,59 > #if USING_WITH_IDE > #include "w32term.h" > #endif > 1662a1667,1671 > #if USING_WITH_IDE > Lisp_Object buf; > HWND hwnd = FRAME_W32_WINDOW (SELECTED_FRAME ()); > #endif > 1670a1680,1703 > #if USING_WITH_IDE > buf = switch_to_buffer_1 (buffer, norecord); > > // see if file is changed > if (!NILP (current_buffer->filename) > && SAVE_MODIFF >= MODIFF > && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ())) > && !NILP (Ffile_exists_p (current_buffer->filename))) > { > int fileChangedDialogAnswer = MessageBox (NULL, "Buffer file changed > on disk. Buffer will be reloaded from disk.", "Emacs", > MB_OK|MB_ICONWARNING|MB_APPLMODAL|MB_SETFOREGROUND); > char msg[80]; > > if (fileChangedDialogAnswer == IDOK) > { > call3 (intern ("revert-buffer"), Qt, Qt, Qt); > strcpy(msg, "File reverted: "); > strcat(msg, XSTRING(current_buffer->filename)->data); > message (msg); > SetFocus(hwnd); > } > } > > return buf; > #else 1671a1705 > #endif Index: src/w32fns.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/w32fns.c,v retrieving revision 1.246 diff -r1.246 w32fns.c 3558a3559,3578 > #if USING_WITH_IDE > // see if file is changed > if (!NILP (current_buffer->filename) > && SAVE_MODIFF >= MODIFF > && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ())) > && !NILP (Ffile_exists_p (current_buffer->filename))) > { > int fileChangedDialogAnswer = MessageBox (NULL, "Buffer file changed > on disk. Buffer will be reloaded from disk.", "Emacs", > MB_OK|MB_ICONWARNING|MB_APPLMODAL|MB_SETFOREGROUND); > char msg[80]; > > if (fileChangedDialogAnswer == IDOK) > { > call3 (intern ("revert-buffer"), Qt, Qt, Qt); > strcpy(msg, "File reverted: "); > strcat(msg, XSTRING(current_buffer->filename)->data); > message (msg); > SetFocus(hwnd); > } > } > #endif ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-05 20:56 ` Popup when buffer file is changed on disk moheb missaghi @ 2005-02-05 22:57 ` Eli Zaretskii 2005-02-06 0:51 ` Lennart Borgman 2005-02-06 7:23 ` Eli Zaretskii 0 siblings, 2 replies; 65+ messages in thread From: Eli Zaretskii @ 2005-02-05 22:57 UTC (permalink / raw) Cc: emacs-devel > From: "moheb missaghi" <moheb1333@comcast.net> > Date: Sat, 5 Feb 2005 13:56:19 -0700 > > Microsoft's Visual Studio which has something called Intelisense which has a > knowledge of object hierarchy and allows object name completion. Doesn't ECB provide that feature? > Most IDE's prompt the user when the file is changed outside them > (for example by an editor such as emacs) by poping up a dialog box > asking the user if he/she wants to reload the file. emacs gives this > warning a bit too late in my opinion, i.e., when the buffer is about > to be modified rather than when its frame gets the focus. Would switching on auto-revert-mode solve your problem here? ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-05 22:57 ` Eli Zaretskii @ 2005-02-06 0:51 ` Lennart Borgman 2005-02-06 7:20 ` Eli Zaretskii 2005-02-06 7:23 ` Eli Zaretskii 1 sibling, 1 reply; 65+ messages in thread From: Lennart Borgman @ 2005-02-06 0:51 UTC (permalink / raw) Cc: emacs-devel ----- Original Message ----- From: "Eli Zaretskii" <eliz@gnu.org> > > Most IDE's prompt the user when the file is changed outside them > > (for example by an editor such as emacs) by poping up a dialog box > > asking the user if he/she wants to reload the file. emacs gives this > > warning a bit too late in my opinion, i.e., when the buffer is about > > to be modified rather than when its frame gets the focus. > > Would switching on auto-revert-mode solve your problem here? I have been missing this feature too. Emacs behaviour is quite confusing if you are used to the behavior Moheb mentions. I do not believe that auto-revert-mode can do what Moheb (and I myself) wants. What we want to happen is that Emacs should warn at the moment when it gets focus that the file has changed. So the message that the operating system sends to Emacs to tell it that it has got focus must be catched by Emacs message queue and given to elisp. I do not know exactly how to do that but it should be done by letting the detection of the message start a timer that then runs the wanted code. (I mean I don't remember the message name and I do not know how Emacs handles messages.) This description is from my knowledge of w32 but I guess something similar should apply to for example GNU/Linux? ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 0:51 ` Lennart Borgman @ 2005-02-06 7:20 ` Eli Zaretskii 2005-02-06 9:02 ` Lennart Borgman 0 siblings, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2005-02-06 7:20 UTC (permalink / raw) Cc: emacs-devel, moheb1333 > From: "Lennart Borgman" <lennart.borgman.073@student.lu.se> > Cc: <emacs-devel@gnu.org> > Date: Sun, 6 Feb 2005 01:51:43 +0100 > > > Would switching on auto-revert-mode solve your problem here? > > I have been missing this feature too. Emacs behaviour is quite confusing if > you are used to the behavior Moheb mentions. > > I do not believe that auto-revert-mode can do what Moheb (and I myself) > wants. What we want to happen is that Emacs should warn at the moment when > it gets focus that the file has changed. When Emacs warns you that the file was changed, what would you do in response? I thought that you would revert the buffer, so auto-revert seemed like a good solution. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 7:20 ` Eli Zaretskii @ 2005-02-06 9:02 ` Lennart Borgman 2005-02-06 9:53 ` Eli Zaretskii ` (2 more replies) 0 siblings, 3 replies; 65+ messages in thread From: Lennart Borgman @ 2005-02-06 9:02 UTC (permalink / raw) Cc: emacs-devel, moheb1333 ----- Original Message ----- From: "Eli Zaretskii" <eliz@gnu.org> To: "Lennart Borgman" <lennart.borgman.073@student.lu.se> Cc: <moheb1333@comcast.net>; <emacs-devel@gnu.org> Sent: Sunday, February 06, 2005 8:20 AM Subject: Re: Popup when buffer file is changed on disk > > From: "Lennart Borgman" <lennart.borgman.073@student.lu.se> > > Cc: <emacs-devel@gnu.org> > > Date: Sun, 6 Feb 2005 01:51:43 +0100 > > > > > Would switching on auto-revert-mode solve your problem here? > > > > I have been missing this feature too. Emacs behaviour is quite confusing if > > you are used to the behavior Moheb mentions. > > > > I do not believe that auto-revert-mode can do what Moheb (and I myself) > > wants. What we want to happen is that Emacs should warn at the moment when > > it gets focus that the file has changed. > > When Emacs warns you that the file was changed, what would you do in > response? I thought that you would revert the buffer, so auto-revert > seemed like a good solution. auto-revert-mode does what it does later, not at the moment Emacs gets focus. I believe that at the moment when Emacs gets focus it should for all files that are visited in buffers and changed outside of Emacs should ask: "File AA.C has changed on disk. Do you want to reload it?" I think a popup should be used for this since it is more visible. Emacs should also keep track of when this question was asked last time (to avoid asking to many times). After this the usual Emacs handling of the situation should persist. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 9:02 ` Lennart Borgman @ 2005-02-06 9:53 ` Eli Zaretskii 2005-02-06 10:41 ` Lennart Borgman 2005-02-06 12:42 ` Richard Stallman 2005-02-06 13:24 ` Jason Rumney 2 siblings, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2005-02-06 9:53 UTC (permalink / raw) Cc: emacs-devel, moheb1333 > From: "Lennart Borgman" <lennart.borgman.073@student.lu.se> > Cc: <moheb1333@comcast.net>, <emacs-devel@gnu.org> > Date: Sun, 6 Feb 2005 10:02:20 +0100 > > > When Emacs warns you that the file was changed, what would you do in > > response? I thought that you would revert the buffer, so auto-revert > > seemed like a good solution. > > auto-revert-mode does what it does later, not at the moment Emacs gets > focus. ??? auto-revert-mode periodically checks all buffers that are visiting a file. The frequency of these checks is determined by the variable auto-revert-interval, by default every 5 seconds. Perhaps you need to set auto-revert-stop-on-user-input to nil and maybe also play with auto-revert-interval's value, to get almost instanteneous automatic reverts whenever a file changes. > I believe that at the moment when Emacs gets focus it should for all > files that are visited in buffers and changed outside of Emacs should ask: > > "File AA.C has changed on disk. Do you want to reload it?" Perhaps a feature can be added to autorevert.el, whereby it checks the buffers when a focus event arrives. All the rest is already there, I believe. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 9:53 ` Eli Zaretskii @ 2005-02-06 10:41 ` Lennart Borgman 2005-02-06 16:34 ` Luc Teirlinck 2005-02-06 17:04 ` Luc Teirlinck 0 siblings, 2 replies; 65+ messages in thread From: Lennart Borgman @ 2005-02-06 10:41 UTC (permalink / raw) Cc: Emacs Devel ----- Original Message ----- From: "Eli Zaretskii" <eliz@gnu.org> > > auto-revert-mode does what it does later, not at the moment Emacs gets > > focus. > > ??? auto-revert-mode periodically checks all buffers that are visiting > a file. The frequency of these checks is determined by the variable > auto-revert-interval, by default every 5 seconds. Hm. Thanks. Looks like I tested too fast. Sorry. > Perhaps you need to set auto-revert-stop-on-user-input to nil and > maybe also play with auto-revert-interval's value, to get almost > instanteneous automatic reverts whenever a file changes. Setting auto-revert-stop-on-user-input to nil does not work for me. Using CVS, any ideas of what could be wrong. > Perhaps a feature can be added to autorevert.el, whereby it checks the > buffers when a focus event arrives. All the rest is already there, I > believe. The timer is surely good, but checking at the focus event is still desireable IMO since it is more instantaneous when switching to Emacs. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 10:41 ` Lennart Borgman @ 2005-02-06 16:34 ` Luc Teirlinck 2005-02-06 17:52 ` Lennart Borgman 2005-02-06 17:04 ` Luc Teirlinck 1 sibling, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-06 16:34 UTC (permalink / raw) Cc: eliz, emacs-devel Lennart Borgman wrote: Setting auto-revert-stop-on-user-input to nil does not work for me. Using CVS, any ideas of what could be wrong. I believe that what is wrong is that you misunderstand what it is supposed to do. Basically, setting this to nil is only going to make a noticeable difference when a bunch og huge files are changing on disk while you are trying to type. My best guess is that you are not going to enjoy it being nil in such a situation. Do you still believe that it "does not work" after reading the following expanded docstring? ===File ~/autorevert-diff=================================== *** autorevert.el 29 Dec 2004 21:08:55 -0600 1.42 --- autorevert.el 06 Feb 2005 10:14:45 -0600 *************** *** 150,156 **** (auto-revert-set-timer)))) (defcustom auto-revert-stop-on-user-input t ! "When non-nil Auto-Revert Mode stops checking files on user input." :group 'auto-revert :type 'boolean) --- 150,160 ---- (auto-revert-set-timer)))) (defcustom auto-revert-stop-on-user-input t ! "When non-nil Auto-Revert Mode stops checking files on user input. ! This prevents Auto Revert from interrupting you while you are typing. ! This option controls when files are auto-reverted, not which files ! are auto-reverted. Modified files are never auto-reverted, ! regardless of the value of this option." :group 'auto-revert :type 'boolean) ============================================================ ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 16:34 ` Luc Teirlinck @ 2005-02-06 17:52 ` Lennart Borgman 0 siblings, 0 replies; 65+ messages in thread From: Lennart Borgman @ 2005-02-06 17:52 UTC (permalink / raw) Cc: eliz, emacs-devel ----- Original Message ----- From: "Luc Teirlinck" <teirllm@dms.auburn.edu> > Do you still believe that it "does not work" after reading the > following expanded docstring? No. Thanks. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 10:41 ` Lennart Borgman 2005-02-06 16:34 ` Luc Teirlinck @ 2005-02-06 17:04 ` Luc Teirlinck 2005-02-11 0:33 ` Luc Teirlinck 1 sibling, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-06 17:04 UTC (permalink / raw) Cc: eliz, emacs-devel I believe that the following is better than my original patch. Only the second line of the docstring has changed. The thing that can go wrong if the option is nil is less often that you get "interrupted". than that Emacs fails to respond (whether to typing or to other commands). ===File ~/autorevert-diff-b================================= *** autorevert.el 29 Dec 2004 21:08:55 -0600 1.42 --- autorevert.el 06 Feb 2005 10:48:08 -0600 *************** *** 150,156 **** (auto-revert-set-timer)))) (defcustom auto-revert-stop-on-user-input t ! "When non-nil Auto-Revert Mode stops checking files on user input." :group 'auto-revert :type 'boolean) --- 150,160 ---- (auto-revert-set-timer)))) (defcustom auto-revert-stop-on-user-input t ! "When non-nil Auto-Revert Mode stops checking files on user input. ! This prevents Auto Revert from interfering with your normal Emacs usage. ! This option controls when files are auto-reverted, not which files ! are auto-reverted. Modified files are never auto-reverted, ! regardless of the value of this option." :group 'auto-revert :type 'boolean) ============================================================ ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 17:04 ` Luc Teirlinck @ 2005-02-11 0:33 ` Luc Teirlinck 2005-02-11 15:40 ` Eli Zaretskii 2005-02-12 8:37 ` Richard Stallman 0 siblings, 2 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-11 0:33 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, emacs-devel I will install the following doc patch to autorevert.el if there are no objections. The patch would be silly if the first line of the docstring were clear enough without it. But I believe that it is not. ===File ~/autorevert-diff-b================================= *** autorevert.el 29 Dec 2004 21:08:55 -0600 1.42 --- autorevert.el 06 Feb 2005 10:48:08 -0600 *************** *** 150,156 **** (auto-revert-set-timer)))) (defcustom auto-revert-stop-on-user-input t ! "When non-nil Auto-Revert Mode stops checking files on user input." :group 'auto-revert :type 'boolean) --- 150,160 ---- (auto-revert-set-timer)))) (defcustom auto-revert-stop-on-user-input t ! "When non-nil Auto-Revert Mode stops checking files on user input. ! This prevents Auto Revert from interfering with your normal Emacs usage. ! This option controls when files are auto-reverted, not which files ! are auto-reverted. Modified files are never auto-reverted, ! regardless of the value of this option." :group 'auto-revert :type 'boolean) ============================================================ ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-11 0:33 ` Luc Teirlinck @ 2005-02-11 15:40 ` Eli Zaretskii 2005-02-11 16:51 ` David Kastrup 2005-02-12 8:37 ` Richard Stallman 1 sibling, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2005-02-11 15:40 UTC (permalink / raw) Cc: lennart.borgman.073, emacs-devel > Date: Thu, 10 Feb 2005 18:33:13 -0600 (CST) > From: Luc Teirlinck <teirllm@dms.auburn.edu> > Cc: lennart.borgman.073@student.lu.se, eliz@gnu.org, emacs-devel@gnu.org > > (defcustom auto-revert-stop-on-user-input t > ! "When non-nil Auto-Revert Mode stops checking files on user input. > ! This prevents Auto Revert from interfering with your normal Emacs usage. > ! This option controls when files are auto-reverted, not which files > ! are auto-reverted. Modified files are never auto-reverted, > ! regardless of the value of this option." I don't see why the doc string should mention modified files. Modified files have nothing to do with this option. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-11 15:40 ` Eli Zaretskii @ 2005-02-11 16:51 ` David Kastrup 2005-02-11 19:38 ` Luc Teirlinck 0 siblings, 1 reply; 65+ messages in thread From: David Kastrup @ 2005-02-11 16:51 UTC (permalink / raw) Cc: lennart.borgman.073, Luc Teirlinck, emacs-devel "Eli Zaretskii" <eliz@gnu.org> writes: >> Date: Thu, 10 Feb 2005 18:33:13 -0600 (CST) >> From: Luc Teirlinck <teirllm@dms.auburn.edu> >> Cc: lennart.borgman.073@student.lu.se, eliz@gnu.org, emacs-devel@gnu.org >> >> (defcustom auto-revert-stop-on-user-input t >> ! "When non-nil Auto-Revert Mode stops checking files on user input. >> ! This prevents Auto Revert from interfering with your normal Emacs usage. >> ! This option controls when files are auto-reverted, not which files >> ! are auto-reverted. Modified files are never auto-reverted, >> ! regardless of the value of this option." > > I don't see why the doc string should mention modified files. > Modified files have nothing to do with this option. Actually, modified files have _everything_ to do with autorevert-mode. But I think that in this case "modified buffers" was much more likely the intended meaning, and this should be changed accordingly. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-11 16:51 ` David Kastrup @ 2005-02-11 19:38 ` Luc Teirlinck 2005-02-12 11:03 ` Eli Zaretskii 0 siblings, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-11 19:38 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, emacs-devel Sorry, I mistakenly used the word "file" where "buffer" was meant. Of course, the option has nothing to do with modified buffers either, but it is exactly the purpose of the patch to point this out. "on user input" could be misinterpreted as meaning "after you modify the buffer" and "checking files" could be misunderstood as implicitly meaning to revert them, so the user could get the impression that if he sets the option to nil, autorevert will even autorevert modified buffers. For instance, I had the impression that this was how Lennart understood it, when he said that the option "did not work". ===File ~/autorevert-diff-b================================= *** autorevert.el 29 Dec 2004 21:08:55 -0600 1.42 --- autorevert.el 06 Feb 2005 10:48:08 -0600 *************** *** 150,156 **** (auto-revert-set-timer)))) (defcustom auto-revert-stop-on-user-input t ! "When non-nil Auto-Revert Mode stops checking files on user input." :group 'auto-revert :type 'boolean) --- 150,160 ---- (auto-revert-set-timer)))) (defcustom auto-revert-stop-on-user-input t ! "When non-nil Auto-Revert Mode stops checking files on user input. ! This prevents Auto Revert from interfering with your normal Emacs usage. ! This option controls when buffers are auto-reverted, not which buffers ! are auto-reverted. Modified buffers are never auto-reverted, ! regardless of the value of this option." :group 'auto-revert :type 'boolean) ============================================================ ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-11 19:38 ` Luc Teirlinck @ 2005-02-12 11:03 ` Eli Zaretskii 0 siblings, 0 replies; 65+ messages in thread From: Eli Zaretskii @ 2005-02-12 11:03 UTC (permalink / raw) Cc: lennart.borgman.073, emacs-devel > Date: Fri, 11 Feb 2005 13:38:23 -0600 (CST) > From: Luc Teirlinck <teirllm@dms.auburn.edu> > CC: eliz@gnu.org, lennart.borgman.073@student.lu.se, emacs-devel@gnu.org > > Sorry, I mistakenly used the word "file" where "buffer" was meant. I understood that, and this is why I objected to mentioning modified files in the doc string. > Of course, the option has nothing to do with modified buffers either, > but it is exactly the purpose of the patch to point this out. I'm certain that you didn't mean to mention something that is unrelated to the option, as the above sentence seems to imply. > "on user input" could be misinterpreted as meaning "after you modify > the buffer" If ``user input'' is ambiguous, it would be okay to explain in more clear manner what user input means. > and "checking files" could be misunderstood as implicitly > meaning to revert them It would be okay to explain that as well, so that the confusing text is replaced with a more clear one. But mentioning modified buffers is not the way to make these explanations more clear, IMHO. On the contrary, it might make things more confusing, since it makes the doc string less self-contained. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-11 0:33 ` Luc Teirlinck 2005-02-11 15:40 ` Eli Zaretskii @ 2005-02-12 8:37 ` Richard Stallman 2005-02-13 1:41 ` Luc Teirlinck 1 sibling, 1 reply; 65+ messages in thread From: Richard Stallman @ 2005-02-12 8:37 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, teirllm, emacs-devel ! "When non-nil Auto-Revert Mode stops checking files on user input. I don't understand that sentence. Does it mean, "When nil, Auto-Revert Mode checks files on user input--otherwise, it doesn't? If so, what does it mean to "check files on user input"? ! This prevents Auto Revert from interfering with your normal Emacs usage. That is so general that it doesn't mean much. What kind of "interference" does it refer to? ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-12 8:37 ` Richard Stallman @ 2005-02-13 1:41 ` Luc Teirlinck 2005-02-13 4:36 ` Eli Zaretskii 0 siblings, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-13 1:41 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, emacs-devel What about the following docstring? ===File ~/autorevert-diff=================================== diff -c /home/teirllm/emacscvsdir/emacs/lisp/autorevert.el.\~1.42.\~ /home/teirllm/emacscvsdir/emacs/lisp/autorevert.el *** /home/teirllm/emacscvsdir/emacs/lisp/autorevert.el.~1.42.~ Wed Dec 29 21:08:55 2004 --- /home/teirllm/emacscvsdir/emacs/lisp/autorevert.el Sat Feb 12 19:22:19 2005 *************** *** 150,156 **** (auto-revert-set-timer)))) (defcustom auto-revert-stop-on-user-input t ! "When non-nil Auto-Revert Mode stops checking files on user input." :group 'auto-revert :type 'boolean) --- 150,161 ---- (auto-revert-set-timer)))) (defcustom auto-revert-stop-on-user-input t ! "When non-nil, user input temporarily interrupts Auto-Revert Mode. ! When nil, Auto-Revert Mode checks files and reverts buffers, with ! quitting disabled, without paying attention to user input. Thus, ! Emacs could appear to be hung for a while. When non-nil, ! Auto-Revert Mode checks for user input after handling each buffer ! and does not process any further buffers (until the next run of ! the timer) if user input is available." :group 'auto-revert :type 'boolean) Diff finished. Sat Feb 12 19:24:50 2005 ============================================================ ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-13 1:41 ` Luc Teirlinck @ 2005-02-13 4:36 ` Eli Zaretskii 2005-02-15 3:05 ` Luc Teirlinck 0 siblings, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2005-02-13 4:36 UTC (permalink / raw) Cc: lennart.borgman.073, rms, emacs-devel > Date: Sat, 12 Feb 2005 19:41:53 -0600 (CST) > From: Luc Teirlinck <teirllm@dms.auburn.edu> > CC: lennart.borgman.073@student.lu.se, eliz@gnu.org, emacs-devel@gnu.org > > (defcustom auto-revert-stop-on-user-input t > ! "When non-nil, user input temporarily interrupts Auto-Revert Mode. > ! When nil, Auto-Revert Mode checks files and reverts buffers, with > ! quitting disabled, without paying attention to user input. Thus, > ! Emacs could appear to be hung for a while. When non-nil, > ! Auto-Revert Mode checks for user input after handling each buffer > ! and does not process any further buffers (until the next run of > ! the timer) if user input is available." I think you should describe the effects of each possible value (nil and non-nil) without intermixing them. The way this doc string goes, it's confusing: first you say what happens under a non-nil value, then under nil value, then again under non-nil. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-13 4:36 ` Eli Zaretskii @ 2005-02-15 3:05 ` Luc Teirlinck 2005-02-15 4:59 ` Eli Zaretskii 2005-02-16 9:31 ` Richard Stallman 0 siblings, 2 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-15 3:05 UTC (permalink / raw) Cc: lennart.borgman.073, rms, emacs-devel Eli Zaretskii wrote: I think you should describe the effects of each possible value (nil and non-nil) without intermixing them. The way this doc string goes, it's confusing: first you say what happens under a non-nil value, then under nil value, then again under non-nil. What about the following? (defcustom auto-revert-stop-on-user-input t "When non-nil, user input temporarily interrupts Auto-Revert Mode. More precisely, Auto-Revert Mode checks for user input after handling each buffer and does not process any further buffers (until the next run of the timer) if user input is available. When nil, Auto-Revert Mode checks files and reverts buffers, with quitting disabled, without paying attention to user input. Thus, Emacs could appear to be hung for a while." :group 'auto-revert :type 'boolean) ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-15 3:05 ` Luc Teirlinck @ 2005-02-15 4:59 ` Eli Zaretskii 2005-02-16 2:59 ` moheb missaghi 2005-02-16 9:31 ` Richard Stallman 1 sibling, 1 reply; 65+ messages in thread From: Eli Zaretskii @ 2005-02-15 4:59 UTC (permalink / raw) Cc: lennart.borgman.073, rms, emacs-devel > Date: Mon, 14 Feb 2005 21:05:01 -0600 (CST) > From: Luc Teirlinck <teirllm@dms.auburn.edu> > CC: lennart.borgman.073@student.lu.se, rms@gnu.org, emacs-devel@gnu.org > > What about the following? > > (defcustom auto-revert-stop-on-user-input t > "When non-nil, user input temporarily interrupts Auto-Revert Mode. > More precisely, Auto-Revert Mode checks for user input after > handling each buffer and does not process any further > buffers (until the next run of the timer) if user input is > available. When nil, Auto-Revert Mode checks files and reverts > buffers, with quitting disabled, without paying attention to user > input. Thus, Emacs could appear to be hung for a while." > :group 'auto-revert > :type 'boolean) I think this is okay, except that I'd remove "More precisely", and replace the last sentence with something like Thus, Emacs could appear sluggish in reacting to user input. (I don't like telling users that Emacs appears to be hung.) ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-15 4:59 ` Eli Zaretskii @ 2005-02-16 2:59 ` moheb missaghi 0 siblings, 0 replies; 65+ messages in thread From: moheb missaghi @ 2005-02-16 2:59 UTC (permalink / raw) Hi, I posted the following yesterday but I am not sure if it made it to the list. Sorry if it did post but noone chose to comment. Thanks for all the responses to my proposed patch. Autorevert doesn't quite do what Lennart and I want because it is not deterministic, i.e., depends on some frequency value to be set. Also it has to be turned on/off for each buffer unless you set it globally. Problem with global setting is that you might forget that buffers are automatically reverted unless some message or symbol appears on the modeline. Following Lennart's idea, I added a flag to the buffer struct (leaveBufferAlone) which persists the state of whether the user chose to ignore that the buffer file was changed on disk or not. When working with an IDE, the popup provides a symmetric editing experience in that emacs and the IDE notify the user whenever the file is changed on disk (by the other) and give him/her the chance to ignore or revert. In the case of emacs, this works fine with ask-user-about-supersession-threat, if user chooses not to revert. When he/she finally saves the buffer, the leaveBufferAlone flag is reset. It is also a bit more efficient than the current emacs functionality in that it involves one less key stroke. Currently, if the file is changed on disk you have to do an edit action in order to get to choose to revert or not via ask-user-about-supersession-threat (which is a bit annoying to my taste!) whereas with the popup, you'll get the message as soon as you switch to the buffer or as soon as the emacs frame gets the focus if the buffer is currently visited. The new code follows. Regards, Moheb cvs diff: Diffing nt Index: nt/nmake.defs =================================================================== RCS file: /cvsroot/emacs/emacs/nt/nmake.defs,v retrieving revision 1.20 diff -w -r1.20 nmake.defs 132a133,136 > > > USER_CFLAGS = -DUSING_WITH_IDE > cvs diff: Diffing src Index: src/buffer.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/buffer.c,v retrieving revision 1.473 diff -w -r1.473 buffer.c 55a56,59 > #if USING_WITH_IDE > #include "w32term.h" > #endif > 684a689,693 > > #if USING_WITH_IDE > b->leaveBufferAlone = 0; > #endif > 1662a1672,1676 > #if USING_WITH_IDE > Lisp_Object buf; > HWND hwnd = FRAME_W32_WINDOW (SELECTED_FRAME ()); > #endif > 1670a1685,1720 > #if USING_WITH_IDE > buf = switch_to_buffer_1 (buffer, norecord); > > // see if file is changed > if ((!NILP (current_buffer->filename) > && SAVE_MODIFF >= MODIFF > && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ())) > && !NILP (Ffile_exists_p (current_buffer->filename))) && > current_buffer->leaveBufferAlone == 0) > { > int fileChangedDialogAnswer = MessageBox (NULL, "Buffer file changed > on disk, revert?", "Emacs", > MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL|MB_SETFOREGROUND); > char msg[80]; > > if (fileChangedDialogAnswer == IDYES) > { > /* reset the don't change flag */ > current_buffer->leaveBufferAlone = 0; > call3 (intern ("revert-buffer"), Qt, Qt, Qt); > strcpy(msg, "File reverted: "); > strcat(msg, XSTRING(current_buffer->filename)->data); > message (msg); > SetFocus(hwnd); > } > else > { > /* persist that the question was asked and the answer was no */ > current_buffer->leaveBufferAlone = 1; > strcpy(msg, "File changed on disk: "); > strcat(msg, XSTRING(current_buffer->filename)->data); > message (msg); > SetFocus(hwnd); > } > } > > return buf; > #else 1671a1722 > #endif Index: src/buffer.h =================================================================== RCS file: /cvsroot/emacs/emacs/src/buffer.h,v retrieving revision 1.100 diff -w -r1.100 buffer.h 510a511,515 > #if USING_WITH_IDE > /* for persistance when buffer file changes on disk */ > int leaveBufferAlone; > #endif > Index: src/fileio.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/fileio.c,v retrieving revision 1.526 diff -w -r1.526 fileio.c 5276a5277,5281 > #if USING_WITH_IDE > /* reset leaveBufferAlone flag */ > current_buffer->leaveBufferAlone = 0; > #endif > Index: src/w32fns.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/w32fns.c,v retrieving revision 1.246 diff -w -r1.246 w32fns.c 3558a3559,3590 > #if USING_WITH_IDE > // see if file is changed > if ((!NILP (current_buffer->filename) > && SAVE_MODIFF >= MODIFF > && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ())) > && !NILP (Ffile_exists_p (current_buffer->filename))) && > current_buffer->leaveBufferAlone == 0) > { > int fileChangedDialogAnswer = MessageBox (NULL, "Buffer file changed > on disk, revert?", "Emacs", > MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL|MB_SETFOREGROUND); > char msg[80]; > > if (fileChangedDialogAnswer == IDYES) > { > /* reset the flag */ > current_buffer->leaveBufferAlone = 0; > call3 (intern ("revert-buffer"), Qt, Qt, Qt); > strcpy(msg, "File reverted: "); > strcat(msg, XSTRING(current_buffer->filename)->data); > message (msg); > SetFocus(hwnd); > } > else > { > /* don't let the dialog to be annoying */ > current_buffer->leaveBufferAlone = 1; > strcpy(msg, "File changed on disk: "); > strcat(msg, XSTRING(current_buffer->filename)->data); > message (msg); > SetFocus(hwnd); > } > } > #endif ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-15 3:05 ` Luc Teirlinck 2005-02-15 4:59 ` Eli Zaretskii @ 2005-02-16 9:31 ` Richard Stallman 2005-02-16 10:37 ` David Kastrup 1 sibling, 1 reply; 65+ messages in thread From: Richard Stallman @ 2005-02-16 9:31 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, emacs-devel What about the following? (defcustom auto-revert-stop-on-user-input t "When non-nil, user input temporarily interrupts Auto-Revert Mode. More precisely, Auto-Revert Mode checks for user input after handling each buffer and does not process any further buffers (until the next run of the timer) if user input is available. When nil, Auto-Revert Mode checks files and reverts buffers, with quitting disabled, without paying attention to user input. Thus, Emacs could appear to be hung for a while." It seems clear to me. Thanks for working on this. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-16 9:31 ` Richard Stallman @ 2005-02-16 10:37 ` David Kastrup 2005-02-16 15:06 ` Luc Teirlinck 0 siblings, 1 reply; 65+ messages in thread From: David Kastrup @ 2005-02-16 10:37 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, Luc Teirlinck, emacs-devel Richard Stallman <rms@gnu.org> writes: > What about the following? > > (defcustom auto-revert-stop-on-user-input t > "When non-nil, user input temporarily interrupts Auto-Revert Mode. > More precisely, Auto-Revert Mode checks for user input after > handling each buffer and does not process any further > buffers (until the next run of the timer) if user input is > available. When nil, Auto-Revert Mode checks files and reverts > buffers, with quitting disabled, without paying attention to user > input. Thus, Emacs could appear to be hung for a while." > > It seems clear to me. Well, Eli suggested "sluggish" instead of the negatively connotated "hung" (which usually is used for a terminal error condition), but I think that is misleading. I'd suggest using something like "Thus, Emacs might be non-responsive at times." Something like that. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-16 10:37 ` David Kastrup @ 2005-02-16 15:06 ` Luc Teirlinck 2005-02-16 15:21 ` David Kastrup 0 siblings, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-16 15:06 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, rms, emacs-devel David Kastrup wrote: Well, Eli suggested "sluggish" instead of the negatively connotated "hung" (which usually is used for a terminal error condition), but I think that is misleading. I'd suggest using something like "Thus, Emacs might be non-responsive at times." Something like that. I used: Thus, it might take a while before Emacs responds to your input. On the other hand. I kept the "More precisely" (in the second sentence) which Eli suggested removing, because without it things did just not seem to flow right. Because the first sentence of a docstring stands out on its own, it seemed no longer clear that we were talking about the case where the option was nil, and the sentence _is_ repeating what was already said in the first sentence, just in more (I believe necessary) detail. Maybe I installed somewhat too early, but, of course, changes can still be made if there are objections. "When non-nil, user input temporarily interrupts Auto-Revert Mode. More precisely, Auto-Revert Mode checks for user input after handling each buffer and does not process any further buffers \(until the next run of the timer) if user input is available. When nil, Auto-Revert Mode checks files and reverts buffers, with quitting disabled, without paying attention to user input. Thus, it might take a while before Emacs responds to your input." Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-16 15:06 ` Luc Teirlinck @ 2005-02-16 15:21 ` David Kastrup 2005-02-17 1:08 ` Luc Teirlinck 0 siblings, 1 reply; 65+ messages in thread From: David Kastrup @ 2005-02-16 15:21 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, rms, emacs-devel Luc Teirlinck <teirllm@dms.auburn.edu> writes: > David Kastrup wrote: > > Well, Eli suggested "sluggish" instead of the negatively > connotated "hung" (which usually is used for a terminal error > condition), but I think that is misleading. I'd suggest using > something like "Thus, Emacs might be non-responsive at times." > Something like that. > > I used: > > Thus, it might take a while before Emacs responds to your input. Well, I don't like that better, but that's a matter of taste, and the one doing the work should certainly enjoy the benefits of it. > On the other hand. I kept the "More precisely" (in the second > sentence) which Eli suggested removing, because without it things > did just not seem to flow right. Because the first sentence of a > docstring stands out on its own, it seemed no longer clear that we > were talking about the case where the option was nil, and the > sentence _is_ repeating what was already said in the first sentence, > just in more (I believe necessary) detail. But "more precisely" would imply that the first sentence was imprecise in some manner. I'd rather recommend "In this case, Auto-Revert Mode..." or "With this setting, Auto-Revert Mode...". > Maybe I installed somewhat too early, Oh nonsense. If everybody waited for unanimous applause before installing a reworded, obviously mostly improved doc string, we'd not get Emacs 21.4 out in 2004 anymore. Uh, I mean, uhm... -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-16 15:21 ` David Kastrup @ 2005-02-17 1:08 ` Luc Teirlinck 0 siblings, 0 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-17 1:08 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, rms, emacs-devel I have now installed the following: (defcustom auto-revert-stop-on-user-input t "When non-nil, user input temporarily interrupts Auto-Revert Mode. With this setting, Auto-Revert Mode checks for user input after handling each buffer and does not process any further buffers \(until the next run of the timer) if user input is available. When nil, Auto-Revert Mode checks files and reverts buffers, with quitting disabled, without paying attention to user input. Thus, Emacs might be non-responsive at times." :group 'auto-revert :type 'boolean) Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 9:02 ` Lennart Borgman 2005-02-06 9:53 ` Eli Zaretskii @ 2005-02-06 12:42 ` Richard Stallman 2005-02-06 18:00 ` Lennart Borgman 2005-02-06 18:11 ` Luc Teirlinck 2005-02-06 13:24 ` Jason Rumney 2 siblings, 2 replies; 65+ messages in thread From: Richard Stallman @ 2005-02-06 12:42 UTC (permalink / raw) Cc: eliz, moheb1333, emacs-devel focus. I believe that at the moment when Emacs gets focus it should for all files that are visited in buffers and changed outside of Emacs should ask: "File AA.C has changed on disk. Do you want to reload it?" I don't want to install this; I think it would be annoying. However, you could write it and post a patch, and people could try it and report whether they like it. If people generally agree it is a good thing, I will install it. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 12:42 ` Richard Stallman @ 2005-02-06 18:00 ` Lennart Borgman 2005-02-06 18:17 ` Jan D. 2005-02-07 4:04 ` Luc Teirlinck 2005-02-06 18:11 ` Luc Teirlinck 1 sibling, 2 replies; 65+ messages in thread From: Lennart Borgman @ 2005-02-06 18:00 UTC (permalink / raw) Cc: eliz, emacs-devel, moheb1333 ----- Original Message ----- From: "Richard Stallman" <rms@gnu.org> > "File AA.C has changed on disk. Do you want to reload it?" > > I don't want to install this; I think it would be annoying. However, > you could write it and post a patch, and people could try it and > report whether they like it. If people generally agree it is a good > thing, I will install it. I tried to implement it to see how it could work. I took a little bit different road. I let the app activate event call a lisp function (which I named "handle-app-activation"). This should handle both app activation and app deactivation. Any ideas around this? I am only able to implement this on w32. I guess it should be straightforward to do the same for other OS:es if there are events for app activation/deactivation (which I suppose there are). The only part that differs is the "real message loop". ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 18:00 ` Lennart Borgman @ 2005-02-06 18:17 ` Jan D. 2005-02-06 19:59 ` Lennart Borgman 2005-02-07 4:04 ` Luc Teirlinck 1 sibling, 1 reply; 65+ messages in thread From: Jan D. @ 2005-02-06 18:17 UTC (permalink / raw) Cc: eliz, moheb1333, rms, emacs-devel > > I am only able to implement this on w32. I guess it should be > straightforward to do the same for other OS:es if there are events for > app > activation/deactivation (which I suppose there are). The only part that > differs is the "real message loop". I haven't seen other OS:es (i.e. Unix) use the terms activate/deactivate for applications. What does it mean? That some GUI window for the application gets focus? In that case a better implementation is to generate a lisp event for FOCUS_IN. That should work on all platforms directly. Jan D. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 18:17 ` Jan D. @ 2005-02-06 19:59 ` Lennart Borgman 2005-02-06 20:40 ` Jan D. 0 siblings, 1 reply; 65+ messages in thread From: Lennart Borgman @ 2005-02-06 19:59 UTC (permalink / raw) Cc: emacs-devel ----- Original Message ----- From: "Jan D." <jan.h.d@swipnet.se> > I haven't seen other OS:es (i.e. Unix) use the terms > activate/deactivate for applications. What does it mean? That some > GUI window for the application gets focus? In that case a better > implementation is to generate a lisp event for FOCUS_IN. That should > work on all platforms directly. Thanks. I will see what I will do. It gets more complicated in that case (because of the structure of the code) and I do not want to break anything now. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 19:59 ` Lennart Borgman @ 2005-02-06 20:40 ` Jan D. 2005-02-07 4:34 ` Eli Zaretskii 0 siblings, 1 reply; 65+ messages in thread From: Jan D. @ 2005-02-06 20:40 UTC (permalink / raw) Cc: emacs-devel > ----- Original Message ----- > From: "Jan D." <jan.h.d@swipnet.se> > >> I haven't seen other OS:es (i.e. Unix) use the terms >> activate/deactivate for applications. What does it mean? That some >> GUI window for the application gets focus? In that case a better >> implementation is to generate a lisp event for FOCUS_IN. That should >> work on all platforms directly. > > Thanks. I will see what I will do. It gets more complicated in that > case > (because of the structure of the code) and I do not want to break > anything > now. I spoke too soon, w32 and msdos doesn't seem to generate FOCUS_IN, so perhaps a new event is called for. Jan D. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 20:40 ` Jan D. @ 2005-02-07 4:34 ` Eli Zaretskii 0 siblings, 0 replies; 65+ messages in thread From: Eli Zaretskii @ 2005-02-07 4:34 UTC (permalink / raw) Cc: lennart.borgman.073, emacs-devel > From: "Jan D." <jan.h.d@swipnet.se> > Date: Sun, 6 Feb 2005 21:40:29 +0100 > Cc: emacs-devel@gnu.org > > I spoke too soon, w32 and msdos doesn't seem to generate FOCUS_IN, so > perhaps a new event is called for. The MSDOS case is irrelevant: it's not a multi-frame configuration, so focus-in events are meaningless there. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 18:00 ` Lennart Borgman 2005-02-06 18:17 ` Jan D. @ 2005-02-07 4:04 ` Luc Teirlinck 1 sibling, 0 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-07 4:04 UTC (permalink / raw) Cc: eliz, moheb1333, rms, emacs-devel If you are going to do this, at least make it an option that is by default off. The rationale behind checking for and warning about files that have changed on disk _after a focus change_ is apparently the assumption that most files change on disk because you edited them with another editor. Many people only use one editor, Emacs. For them that assumption is completely wrong. Files can change on disk for several reasons, including: 1. Because you edited them with another editor. 2. Because some process is writing to them. 3. Because another person is editing them. 4. Because you changed them from within Emacs in some way that bypassed the buffer. (To be avoided, but can inadvertently happen.) (2), (3) and (4) are unrelated to focus changes. They can happen any time. For people that only edit files using Emacs, (1) never happens. If processes are writing to files visited in buffers, files are going to change on disk all the time. I would be reminded about that on just about every focus change, even though I know that autorevert is going to revert them within 5 seconds or less. This is senseless. Clearly, the best way to deal with all ways that a file can change on disk is a combination of mode line and Buffer Menu. (And still this would only be needed if for some reason you do not want to use autorevert or if you are editing files that could change on disk.) The mode line and Buffer Menu features would not be very difficult to implement. But we are in a feature freeze, so I believe it can wait till Emacs 22. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 12:42 ` Richard Stallman 2005-02-06 18:00 ` Lennart Borgman @ 2005-02-06 18:11 ` Luc Teirlinck 2005-02-06 18:45 ` Luc Teirlinck 1 sibling, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-06 18:11 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, emacs-devel, moheb1333 Richard Stallman wrote: I don't want to install this; I think it would be annoying. I believe that it would be very annoying. It is apparently something people who use MS Windows applications are used to, but I guess that is because they have systematically adapted their customizations and work habits to it. I believe that autorevert mostly covers the functionality. The only problem is that autorevert quits either reverting or warning if the buffer is modified. (Emacs _does_ warn when you try to save your changes to disk.) I believe that it would not be too difficult to adapt the code in autorevert to put a flag in the modeline that says whether the visited file has changed on disk or not, regardless of whether the buffer is modified or not. This would be a mode (more of a mode line feature) that could be enabled independently from Auto Revert. If you do not use Auto Revert, it would just tell you that the file had changed on disk, leaving the decision of whether to revert or not up to the user. It would be analogous to the flag telling you that you have new mail. It would also not be very difficult to add a global flag indicating that at least one file visited in some buffer has changed on disk, but I believe that would be less useful than the "local" variant. While I do not believe that would be terribly difficult to implement, I personally do not have the time right now and we are in a feature freeze. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 18:11 ` Luc Teirlinck @ 2005-02-06 18:45 ` Luc Teirlinck 0 siblings, 0 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-06 18:45 UTC (permalink / raw) Cc: lennart.borgman.073, eliz, moheb1333, rms, emacs-devel >From my previous message: I believe that it would not be too difficult to adapt the code in autorevert to put a flag in the modeline that says whether the visited file has changed on disk or not, In addition the Buffer Menu could display the flag. You can enable Auto Revert in the Buffer Menu, thereby updating the flag every auto-revert-interval seconds. In as far as I am concerned, all stuff for Emacs 22, not 21.4. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 9:02 ` Lennart Borgman 2005-02-06 9:53 ` Eli Zaretskii 2005-02-06 12:42 ` Richard Stallman @ 2005-02-06 13:24 ` Jason Rumney 2005-02-06 13:54 ` Lennart Borgman 2 siblings, 1 reply; 65+ messages in thread From: Jason Rumney @ 2005-02-06 13:24 UTC (permalink / raw) Cc: Eli Zaretskii, moheb1333, emacs-devel "Lennart Borgman" <lennart.borgman.073@student.lu.se> writes: > I think a popup should be used for this since it is more visible. The dialog code has been waiting for someone to implement it on w32 for years. It would be better to put effort into implementing general dialog support than to create a dialog especially for this purpose. > Emacs should also keep track of when this question was asked last > time (to avoid asking to many times). I don't understand the rationale for this. If Emacs decides it has asked too many times, what should it do? ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-06 13:24 ` Jason Rumney @ 2005-02-06 13:54 ` Lennart Borgman 0 siblings, 0 replies; 65+ messages in thread From: Lennart Borgman @ 2005-02-06 13:54 UTC (permalink / raw) Cc: Eli Zaretskii, moheb1333, emacs-devel ----- Original Message ----- From: "Jason Rumney" <jasonr@gnu.org> > > Emacs should also keep track of when this question was asked last > > time (to avoid asking to many times). > > I don't understand the rationale for this. If Emacs decides it has > asked too many times, what should it do? Sorry, "too many times" was not really what I meant. When Emacs asks about a file change it should keep track of the modification (or write time) of the changed file. If that time has not changed then do not ask again. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: Popup when buffer file is changed on disk 2005-02-05 22:57 ` Eli Zaretskii 2005-02-06 0:51 ` Lennart Borgman @ 2005-02-06 7:23 ` Eli Zaretskii 1 sibling, 0 replies; 65+ messages in thread From: Eli Zaretskii @ 2005-02-06 7:23 UTC (permalink / raw) > Date: Sun, 06 Feb 2005 00:57:59 +0200 > From: "Eli Zaretskii" <eliz@gnu.org> > Cc: emacs-devel@gnu.org > > > From: "moheb missaghi" <moheb1333@comcast.net> > > Date: Sat, 5 Feb 2005 13:56:19 -0700 > > > > Microsoft's Visual Studio which has something called Intelisense which has a > > knowledge of object hierarchy and allows object name completion. > > Doesn't ECB provide that feature? It is perhaps noteworthy that Ebrowse and maybe even Speedbar, both bundled with Emacs 21.x, offer similar, if less elaborate, functionality. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-05 19:43 ` Lennart Borgman 2005-02-05 20:56 ` Popup when buffer file is changed on disk moheb missaghi @ 2005-02-06 21:01 ` Richard Stallman 1 sibling, 0 replies; 65+ messages in thread From: Richard Stallman @ 2005-02-06 21:01 UTC (permalink / raw) Cc: teirllm, emacs-devel > For the case of hooks, we could imagine changing cus-edit.el so that > edits made using Custom only affect elements that were installed using > Custom. Any other elements could be invisible and untouchable; or > they might be displayed in a separate way as "program-added hooks" and > untouchable through the usual Custom features. In effect, this means > treating a single list as if it were the combination of too list > values, one to be edited through Custom and one to be updated > by programs. > > I don't know how hard this would be. Would not this require changes to the run hook functions too? My proposal does not involve any changes to run-hooks. I am talking about a change entirely within cus-edit.el. In that case it might be more simple to add a macro (or function) used for creating hooks, maybe "define-hook" that added the normal hook and a second hook used by Custom. (This would of course also require changes to the run hook functions.) It should not be necessary to change all the definitions of hooks. It would be much better to avoid that. So let's look only at solutions that do not require changing all the definitions of hooks. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-05 17:38 ` Richard Stallman 2005-02-05 18:54 ` Luc Teirlinck 2005-02-05 19:43 ` Lennart Borgman @ 2005-02-06 1:50 ` Luc Teirlinck 2005-02-06 3:26 ` Luc Teirlinck 2005-02-06 21:02 ` Richard Stallman 2005-02-06 2:07 ` Luc Teirlinck 3 siblings, 2 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-06 1:50 UTC (permalink / raw) Cc: emacs-devel >From my previous reply: Any other elements could be invisible and untouchable; or they might be displayed in a separate way as "program-added hooks" and untouchable through the usual Custom features. I believe the latter. The user should know that there are other, untouchable things in the list. Actually, the situation is more complex, certainly for non-hook atoms (and I would guess probably also for many hooks). Code puts things in variables like completion-ignored-extensions, debug-ignored-errors, file-coding-system-alist, help-event-list, minibuffer-prompt-properties, mode-line-format, same-window-buffer-names, same-window-regexps, and many others, that the user definitely might want to override. The same could be true for many hooks. So it looks like we should also give the user veto power over code and implement `remove-hook' and `delete' functionality through Custom, adding to the complexity. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-06 1:50 ` Luc Teirlinck @ 2005-02-06 3:26 ` Luc Teirlinck 2005-02-06 4:02 ` Luc Teirlinck 2005-02-06 21:02 ` Richard Stallman 1 sibling, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-06 3:26 UTC (permalink / raw) Cc: rms, emacs-devel >From my previous message: So it looks like we should also give the user veto power over code and implement `remove-hook' and `delete' functionality through Custom, adding to the complexity. Maybe we could avoid that additional complexity if non-preloaded code strictly adhered to the conventions proposed in another message and if preloaded code put, for all involved list-vars, all elements of the involved hook, list or alist, that should be user-overridable in custom-list-var (instead of just in list-var). That way, these elements would _not_ appear in the Custom buffer as "untouchable". We are talking about approximately ten preloaded variables of this type, so it should be not too much of a hassle to treat them separately. This way, not too much complexity is added to the original proposal. I am afraid that implementing the original proposal might nevertheless be more than complex enough. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-06 3:26 ` Luc Teirlinck @ 2005-02-06 4:02 ` Luc Teirlinck 0 siblings, 0 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-06 4:02 UTC (permalink / raw) Cc: rms, emacs-devel >From my previous message: Maybe we could avoid that additional complexity if non-preloaded code strictly adhered to the conventions proposed in another message and if preloaded code put, for all involved list-vars, all elements of the involved hook, list or alist, that should be user-overridable in custom-list-var (instead of just in list-var). That way, these elements would _not_ appear in the Custom buffer as "untouchable". The situation is somewhat more complex. _Newly added_ (by code) elements could be unwittingly overridden by .emacs if they were just put into custom-list-var. (That is one of the reasons why the distinction between list-var and custom-list-var is needed. I forgot about that for a moment.) But _maybe_ it is OK anyway. _Essential_ elements get put in list-var, so Emacs will never malfunction as a result of essential new code being overridden in .emacs. Non-essential ones go in custom-list-var. When upgrading to a new Emacs version, the user could then do `M-x customize-changed-options' to see what new non-essential elements were added and see whether he likes them. Maybe we may need special `remove-hook' and `delete' functionality, maybe we can avoid it. Probably the person volunteering to implement this (if anybody) might have to decide. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-06 1:50 ` Luc Teirlinck 2005-02-06 3:26 ` Luc Teirlinck @ 2005-02-06 21:02 ` Richard Stallman 2005-02-08 1:50 ` Luc Teirlinck 1 sibling, 1 reply; 65+ messages in thread From: Richard Stallman @ 2005-02-06 21:02 UTC (permalink / raw) Cc: emacs-devel Actually, the situation is more complex, certainly for non-hook atoms (and I would guess probably also for many hooks). Code puts things in variables like completion-ignored-extensions, debug-ignored-errors, file-coding-system-alist, help-event-list, minibuffer-prompt-properties, mode-line-format, same-window-buffer-names, same-window-regexps, and many others, that the user definitely might want to override. The right thing to do may not be the same for all these variables. We would need to look at them one by one in order to come to conclusions about what to do with them. For same-window-buffer-names, we could arrange for all the values added by Lisp packages to be part of the "standard value". That would be a start at solving the problem. I don't think that minibuffer-prompt-properties is a problem. It is simply a customizable variable whose value is set up with a setq. Likewise for help-event-list. If there is a problem with these, it is only that they are built-in and handled by cus-start.el rather than a defcustom. We just need to give them the right standard value. Do you want to try to do that? It would be useful to look for other variables that are in the same situation, and handle them. These being localized bug fixes, we could safely install them now. Maybe we could avoid that additional complexity if non-preloaded code strictly adhered to the conventions proposed in another message and if preloaded code put, for all involved list-vars, all elements of the involved hook, list or alist, that should be user-overridable in custom-list-var (instead of just in list-var). We could say that any adding of values to these variables by Lisp code has to be done by an autoload, so that the whole value is constructed by loadup.el. Then we can arrange to record it as the standard value, and that will be a good start at solving the problems. We could have a function custom-add-to-list which adds an element to a list and makes it part of the standard value. Just _loading_ a non-preloaded file should not change any defcustomed variable unless "harmless" (like a hook function only used to gather info and without user visible consequences). This is already the convention. Do you know of any cases where this case is violated? When changing a defcustomed variable from a function, that function should be interactively called by the user and either the _only_ effect should be to implement the documented behavior of the function (for instance by adding a function to a hook that implements that behavior and does not interfere with anything else), or the fact that elements are going to be added to the defcustom should be clearly documented in the docstring and in any manual where the function is described. This seems plausible. Do you know of any specific exceptions? ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-06 21:02 ` Richard Stallman @ 2005-02-08 1:50 ` Luc Teirlinck 2005-02-09 8:10 ` Richard Stallman 0 siblings, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-08 1:50 UTC (permalink / raw) Cc: emacs-devel Richard Stallman wrote: I don't think that minibuffer-prompt-properties is a problem. It is simply a customizable variable whose value is set up with a setq. Likewise for help-event-list. If there is a problem with these, it is only that they are built-in and handled by cus-start.el rather than a defcustom. We just need to give them the right standard value. Do you want to try to do that? If you mean removing the "Changed outside Custom" warning from those rogue-at-startup (with emacs -q) variables that are really harmless, then I could definitely do that way in time for Emacs 22 (old 21.4). The way in which I would do that could be a temporary solution until a more fundamental solution is implemented. I could mention that in a comment. I might need to keep the "Changed outside Custom" warning for the two hooks in the list. I will need to take a closer look at that. At a given moment we will have to implement the splitting of hooks and probably other list vars into two parts which we discussed. Until we do that bugs in Custom will remain, but they are not new bugs. These bugs are serious, but the probability of users encountering them is limited by the fact that the involved variables are not often used by beginning users and are inconvenient to set through Custom anyway. As we get more hooks like `before-save-hook', by which the user can enable two relatively popular features by a simple mouse click or RETURN, the probability of users actually being inconvenienced by those bugs will increase. So we can not wait forever to fix them but I believe we can (actually have to) wait until after the 22 release. Getting rid of the bugs I described will require fundamental changes in the Custom user interface. Until we look at these problems carefully and implement solutions, I would make as few changes to the current Custom interface as possible. I believe it would be bad to have an oddball 22 Custom interface that would be very different from both the 21 and the 23 interface. People are used to the old interface. They should not have to adapt to non-trivial changes for one single release (or *maybe* two releases, should 23 be released very soon after 22). We very definitely need to keep "Set outside Custom" until the bugs are fixed. Whether we still need it afterward depends on the particular interface we wound up with. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-08 1:50 ` Luc Teirlinck @ 2005-02-09 8:10 ` Richard Stallman 2005-02-09 10:42 ` Kim F. Storm ` (2 more replies) 0 siblings, 3 replies; 65+ messages in thread From: Richard Stallman @ 2005-02-09 8:10 UTC (permalink / raw) Cc: emacs-devel If you mean removing the "Changed outside Custom" warning from those rogue-at-startup (with emacs -q) variables that are really harmless, then I could definitely do that way in time for Emacs 22 (old 21.4). The way in which I would do that could be a temporary solution until a more fundamental solution is implemented. I could mention that in a comment. This is the wrong solution. The right solution for variables such as minibuffer-prompt-properties is to set up a valid expression for its standard value. It may be necessary to store the current default value in a new variable so that the standard value can use that variable. This is easy and simple, it's just that each variable needs to be looked at separately. Would you like to do this for some of the variables? ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-09 8:10 ` Richard Stallman @ 2005-02-09 10:42 ` Kim F. Storm 2005-02-10 18:39 ` Richard Stallman 2005-02-10 5:12 ` Luc Teirlinck 2005-02-10 5:26 ` Luc Teirlinck 2 siblings, 1 reply; 65+ messages in thread From: Kim F. Storm @ 2005-02-09 10:42 UTC (permalink / raw) Cc: Luc Teirlinck, emacs-devel Richard Stallman <rms@gnu.org> writes: > If you mean removing the "Changed outside Custom" warning from those > rogue-at-startup (with emacs -q) variables that are really harmless, > then I could definitely do that way in time for Emacs 22 (old 21.4). > > The way in which I would do that could be a temporary solution until a > more fundamental solution is implemented. I could mention that in a > comment. > > This is the wrong solution. The right solution for variables such as > minibuffer-prompt-properties is to set up a valid expression for its > standard value. It may be necessary to store the current default > value in a new variable or use a `valid-expression' property on the variable > so that the standard value can use that > variable. This is easy and simple, it's just that each variable needs > to be looked at separately. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-09 10:42 ` Kim F. Storm @ 2005-02-10 18:39 ` Richard Stallman 2005-02-10 21:42 ` Kim F. Storm 0 siblings, 1 reply; 65+ messages in thread From: Richard Stallman @ 2005-02-10 18:39 UTC (permalink / raw) Cc: teirllm, emacs-devel > This is the wrong solution. The right solution for variables such as > minibuffer-prompt-properties is to set up a valid expression for its > standard value. It may be necessary to store the current default > value in a new variable or use a `valid-expression' property on the variable I do not understand that suggestion. The symbol `valid-expression' does not occur in cus-edit.el. If you are proposing it as the way to represent some new feature, I don't know what the new feature would do. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-10 18:39 ` Richard Stallman @ 2005-02-10 21:42 ` Kim F. Storm 2005-02-12 8:37 ` Richard Stallman 0 siblings, 1 reply; 65+ messages in thread From: Kim F. Storm @ 2005-02-10 21:42 UTC (permalink / raw) Cc: teirllm, emacs-devel Richard Stallman <rms@gnu.org> writes: > > This is the wrong solution. The right solution for variables such as > > minibuffer-prompt-properties is to set up a valid expression for its > > standard value. It may be necessary to store the current default > > value in a new variable > > or use a `valid-expression' property on the variable > > I do not understand that suggestion. > The symbol `valid-expression' does not occur in cus-edit.el. > If you are proposing it as the way to represent some new feature, > I don't know what the new feature would do. Sorry, I misread what you read. The essence of my idea is to use _some_ property on the original variable to "store the current default value", rather than using a "new variable" for that. -- Kim F. Storm <storm@cua.dk> http://www.cua.dk ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-10 21:42 ` Kim F. Storm @ 2005-02-12 8:37 ` Richard Stallman 0 siblings, 0 replies; 65+ messages in thread From: Richard Stallman @ 2005-02-12 8:37 UTC (permalink / raw) Cc: teirllm, emacs-devel The essence of my idea is to use _some_ property on the original variable to "store the current default value", rather than using a "new variable" for that. That is ok. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-09 8:10 ` Richard Stallman 2005-02-09 10:42 ` Kim F. Storm @ 2005-02-10 5:12 ` Luc Teirlinck 2005-02-10 18:40 ` Richard Stallman 2005-02-10 5:26 ` Luc Teirlinck 2 siblings, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-10 5:12 UTC (permalink / raw) Cc: emacs-devel Richard Stallman wrote: This is the wrong solution. The right solution for variables such as minibuffer-prompt-properties is to set up a valid expression for its standard value. It may be necessary to store the current default value in a new variable so that the standard value can use that variable. This is easy and simple, it's just that each variable needs to be looked at separately. Would you like to do this for some of the variables? Yes, for some. Here is a try at one. Actually, I started out with my least favorite Emacs feature, `blink-cursor'. Reason for that is that this one had a very intriguing bug. This extra bug is unrelated to the stuff we have been discussing here, but we should fix it anyway. It is confusing and annoying. Description of bug: Do `emacs -q --eval "(blink-cursor-mode 0)" &'. Then: M-x customize-rogue (actually, `C-h v blink-cursor' works too). We now see that blink-cursor is t, even though the cursor does not blink. If we do `M-x load-library RET frame", the cursor _does_ start blinking. (Courtesy of custom-initialize-reset. I looked away as fast as I could and typed `C-x C-c'.) The problem is that the function `blink-cursor-mode' sets the value of the variable blink-cursor-mode, but not of blink-cursor. The patch below does get rid of blink-cursor altogether and uses blink-cursor-mode instead. I know there must have been some reason why that was not done all along, but I guess it must have been related to the fake defcustom stuff, which the patch also gets rid of (that was the original purpose). One problem is that this will mess things up for the (I suppose many) people who have set blink-cursor to nil_in their custom-set-variables form. The patch keeps blink-cursor as an alias for blink-cursor-mode, but Custom does apparently not recognize aliases. (That is probably something we could and should fix still for Emacs 22.) I do not know whether the combination phony-defvar, then defvar-mimicking setq, then makunbound, then non-top-level defcustom in startup.el is acceptable. It seems to do the job. The problem with a temporary variable, as you suggested, seems to be that code should use the same variable during startup and after that, so it did not seem like it would work very well. As a minor detail: `blink-cursor-timer' now seems to call `blink-cursor-timer-function' instead of `blink-cursor'. The patch addresses this too. ===File ~/frame.el-diff===================================== *** frame.el 09 Feb 2005 15:59:13 -0600 1.215 --- frame.el 09 Feb 2005 22:50:04 -0600 *************** *** 1253,1262 **** (defvar blink-cursor-timer nil "Timer started from `blink-cursor-start'. ! This timer calls `blink-cursor' every `blink-cursor-interval' seconds.") ! (defvar blink-cursor-mode nil ! "Non-nil means blinking cursor is active.") (defun blink-cursor-mode (arg) "Toggle blinking cursor mode. --- 1253,1267 ---- (defvar blink-cursor-timer nil "Timer started from `blink-cursor-start'. ! This timer calls `blink-cursor-timer-function' every ! `blink-cursor-interval' seconds.") ! ;; This will be unbound and defcustomed in startup.el. We can not ! ;; defcustom it here because the default depends on the operating system. ! (defvar blink-cursor-mode) ! (defvaralias 'blink-cursor 'blink-cursor-mode) ! (make-obsolete-variable 'blink-cursor 'blink-cursor-mode "22.1") ! (unless (boundp 'blink-cursor-mode) (setq blink-cursor-mode nil)) (defun blink-cursor-mode (arg) "Toggle blinking cursor mode. *************** *** 1289,1306 **** (setq blink-cursor-mode t)) (internal-show-cursor nil t)))) - ;; Note that this is really initialized from startup.el before - ;; the init-file is read. - - (defcustom blink-cursor nil - "*Non-nil means blinking cursor mode is active." - :group 'cursor - :tag "Blinking cursor" - :type 'boolean - :set #'(lambda (symbol value) - (set-default symbol value) - (blink-cursor-mode (or value 0)))) - (defun blink-cursor-start () "Timer function called from the timer `blink-cursor-idle-timer'. This starts the timer `blink-cursor-timer', which makes the cursor blink --- 1294,1299 ---- ============================================================ ===File ~/startup.el-diff=================================== *** startup.el 28 Dec 2004 09:50:38 -0600 1.337 --- startup.el 09 Feb 2005 19:46:22 -0600 *************** *** 735,747 **** (<= (frame-parameter nil 'tool-bar-lines) 0)) (tool-bar-mode 1)) ! ;; Can't do this init in defcustom because window-system isn't set. ! (unless (or noninteractive ! emacs-quick-startup ! (eq system-type 'ms-dos) ! (not (memq window-system '(x w32)))) ! (setq-default blink-cursor t) ! (blink-cursor-mode 1)) (unless noninteractive ;; DOS/Windows systems have a PC-type keyboard which has both --- 735,753 ---- (<= (frame-parameter nil 'tool-bar-lines) 0)) (tool-bar-mode 1)) ! (makunbound 'blink-cursor-mode) ! (defcustom blink-cursor-mode ! (not (or noninteractive ! emacs-quick-startup ! (eq system-type 'ms-dos) ! (not (memq window-system '(x w32))))) ! "*Non-nil means Blinking Cursor mode is active." ! :group 'cursor ! :tag "Blinking cursor" ! :type 'boolean ! :set #'(lambda (symbol value) ! (set-default symbol value) ! (blink-cursor-mode (or value 0)))) (unless noninteractive ;; DOS/Windows systems have a PC-type keyboard which has both ============================================================ LocalWords: defvar ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-10 5:12 ` Luc Teirlinck @ 2005-02-10 18:40 ` Richard Stallman 2005-02-11 0:09 ` Luc Teirlinck ` (2 more replies) 0 siblings, 3 replies; 65+ messages in thread From: Richard Stallman @ 2005-02-10 18:40 UTC (permalink / raw) Cc: emacs-devel It is rather unclean to have a defcustom inside a function. Let's try to solve this1 some other way. The conventional way to handle custom definitions for variables that are defined too early to use defcustom is thru cus-start.el. Could you make it work that way? I see that, for variables set up in cus-start.el, the standard value is merely whatever value happens to be in effect when cus-edit is loaded. This is a lot like a suggestion that someone made for how to handle settings in the init file. However, it's not right for this case. So I added a feature to make it possible to specify a standard value expression for each variable. Does this patch work right? *** cus-start.el 10 Feb 2005 01:13:19 -0500 1.64 --- cus-start.el 10 Feb 2005 12:12:56 -0500 *************** *** 287,294 **** ;; xterm.c (mouse-autoselect-window display boolean "21.3") (x-use-underline-position-properties display boolean "21.3") ! (x-stretch-cursor display boolean "21.1"))) ! this symbol group type native-p version ;; This function turns a value ;; into an expression which produces that value. (quoter (lambda (sexp) --- 287,302 ---- ;; xterm.c (mouse-autoselect-window display boolean "21.3") (x-use-underline-position-properties display boolean "21.3") ! (x-stretch-cursor display boolean "21.1") ! ;; frame.el ! (blink-cursor-mode cursor boolean ! '(not (or noninteractive ! emacs-quick-startup ! (eq system-type 'ms-dos) ! (not (memq window-system '(x w32)))))) ! ! )) ! this symbol group type standard version native-p ;; This function turns a value ;; into an expression which produces that value. (quoter (lambda (sexp) *************** *** 297,304 **** (and (listp sexp) (memq (car sexp) '(lambda))) (stringp sexp) - ;; (and (fboundp 'characterp) - ;; (characterp sexp)) (numberp sexp)) sexp (list 'quote sexp))))) --- 305,310 ---- *************** *** 309,314 **** --- 315,325 ---- group (nth 1 this) type (nth 2 this) version (nth 3 this) + ;; If we did not specify any standard value expression above, + ;; use the current value as the standard value. + standard (if (nthcdr 4 this) + (nth 4 this) + (funcall quoter (default-value symbol))) ;; Don't complain about missing variables which are ;; irrelevant to this platform. native-p (save-match-data *************** *** 326,333 **** (message "Note, built-in variable `%S' not bound" symbol)) ;; Save the standard value, unless we already did. (or (get symbol 'standard-value) ! (put symbol 'standard-value ! (list (funcall quoter (default-value symbol))))) ;; If this is NOT while dumping Emacs, ;; set up the rest of the customization info. (unless purify-flag --- 337,343 ---- (message "Note, built-in variable `%S' not bound" symbol)) ;; Save the standard value, unless we already did. (or (get symbol 'standard-value) ! (put symbol 'standard-value (list standard))) ;; If this is NOT while dumping Emacs, ;; set up the rest of the customization info. (unless purify-flag ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-10 18:40 ` Richard Stallman @ 2005-02-11 0:09 ` Luc Teirlinck 2005-02-12 8:37 ` Richard Stallman 2005-02-11 0:21 ` Luc Teirlinck 2005-02-11 14:59 ` Luc Teirlinck 2 siblings, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-11 0:09 UTC (permalink / raw) Cc: emacs-devel My previously posted patch was indeed not very good. Among other things `C-h v blinking-cursor-mode' did not find the defcustom. The patch you proposed has a similar problem. Also cus-start.el is meant for variables defined in the C code. I believe that we should avoid using it for Lisp variables, if possible. I now believe that the following patch to frame.el would be better. I believe that Per designed the standard value to be an unevaluated expression exactly to allow what the patch below does. The accompanying patch to startup.el is now very minor. ===File ~/frame.el-diff===================================== *** frame.el 09 Feb 2005 15:59:13 -0600 1.215 --- frame.el 10 Feb 2005 17:42:44 -0600 *************** *** 1253,1262 **** (defvar blink-cursor-timer nil "Timer started from `blink-cursor-start'. ! This timer calls `blink-cursor' every `blink-cursor-interval' seconds.") ! (defvar blink-cursor-mode nil ! "Non-nil means blinking cursor is active.") (defun blink-cursor-mode (arg) "Toggle blinking cursor mode. --- 1253,1289 ---- (defvar blink-cursor-timer nil "Timer started from `blink-cursor-start'. ! This timer calls `blink-cursor-timer-function' every ! `blink-cursor-interval' seconds.") ! ;; The strange sequence below is meant to set both the right temporary ! ;; value and the right "standard expression" , according to Custom, ! ;; for blink-cursor-mode. We do not know the concrete standard ! ;; _evaluated_ value yet, because the standard expression uses values ! ;; that are not yet set. Evaluating it now would yield an error, but ! ;; we make sure that it is not evaluated, by making sure that ! ;; blink-cursor-mode is set before the defcustom is evaluated and by ! ;; using the right :initialize function. The correct evaluated ! ;; standard value will be installed in startup.el using exactly the ! ;; same expression as in the defcustom. ! (defvar blink-cursor-mode) ! (unless (boundp 'blink-cursor-mode) (setq blink-cursor-mode nil)) ! (defcustom blink-cursor-mode ! (not (or noninteractive ! emacs-quick-startup ! (eq system-type 'ms-dos) ! (not (memq window-system '(x w32))))) ! "*Non-nil means Blinking Cursor mode is active." ! :group 'cursor ! :tag "Blinking cursor" ! :type 'boolean ! :initialize 'custom-initialize-set ! :set #'(lambda (symbol value) ! (set-default symbol value) ! (blink-cursor-mode (or value 0)))) ! ! (defvaralias 'blink-cursor 'blink-cursor-mode) ! (make-obsolete-variable 'blink-cursor 'blink-cursor-mode "22.1") (defun blink-cursor-mode (arg) "Toggle blinking cursor mode. *************** *** 1289,1306 **** (setq blink-cursor-mode t)) (internal-show-cursor nil t)))) - ;; Note that this is really initialized from startup.el before - ;; the init-file is read. - - (defcustom blink-cursor nil - "*Non-nil means blinking cursor mode is active." - :group 'cursor - :tag "Blinking cursor" - :type 'boolean - :set #'(lambda (symbol value) - (set-default symbol value) - (blink-cursor-mode (or value 0)))) - (defun blink-cursor-start () "Timer function called from the timer `blink-cursor-idle-timer'. This starts the timer `blink-cursor-timer', which makes the cursor blink --- 1316,1321 ---- ============================================================ ===File ~/startup.el-diff=================================== *** startup.el 28 Dec 2004 09:50:38 -0600 1.337 --- startup.el 10 Feb 2005 17:18:09 -0600 *************** *** 735,746 **** (<= (frame-parameter nil 'tool-bar-lines) 0)) (tool-bar-mode 1)) ! ;; Can't do this init in defcustom because window-system isn't set. (unless (or noninteractive emacs-quick-startup (eq system-type 'ms-dos) (not (memq window-system '(x w32)))) - (setq-default blink-cursor t) (blink-cursor-mode 1)) (unless noninteractive --- 735,748 ---- (<= (frame-parameter nil 'tool-bar-lines) 0)) (tool-bar-mode 1)) ! ;; Can't do this init in defcustom because the relevant variables ! ;; are not set. If you make any changes to the `or' form below, ! ;; you should also change the corresponding expression in the ! ;; defcustom in frame.el, or Custom will be badly confused. (unless (or noninteractive emacs-quick-startup (eq system-type 'ms-dos) (not (memq window-system '(x w32)))) (blink-cursor-mode 1)) (unless noninteractive ============================================================ ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-11 0:09 ` Luc Teirlinck @ 2005-02-12 8:37 ` Richard Stallman 0 siblings, 0 replies; 65+ messages in thread From: Richard Stallman @ 2005-02-12 8:37 UTC (permalink / raw) Cc: emacs-devel This patch is clever. Please install it. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-10 18:40 ` Richard Stallman 2005-02-11 0:09 ` Luc Teirlinck @ 2005-02-11 0:21 ` Luc Teirlinck 2005-02-11 14:59 ` Luc Teirlinck 2 siblings, 0 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-11 0:21 UTC (permalink / raw) Cc: emacs-devel >From my previous reply: My previously posted patch was indeed not very good. Among other things `C-h v blinking-cursor-mode' did not find the defcustom. The patch you proposed has a similar problem. The last remark may have been a little bit confusing. Meant was: finding the defcustom by clicking on "Defined in ...". In the case of your patch, of course it can not do that, because there is no defcustom. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-10 18:40 ` Richard Stallman 2005-02-11 0:09 ` Luc Teirlinck 2005-02-11 0:21 ` Luc Teirlinck @ 2005-02-11 14:59 ` Luc Teirlinck 2 siblings, 0 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-11 14:59 UTC (permalink / raw) Cc: emacs-devel >From my previous message: Among other things `C-h v blinking-cursor-mode' did not find the defcustom. I meant that `C-h v blink-cursor-mode' did not find the defcustom. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-09 8:10 ` Richard Stallman 2005-02-09 10:42 ` Kim F. Storm 2005-02-10 5:12 ` Luc Teirlinck @ 2005-02-10 5:26 ` Luc Teirlinck 2 siblings, 0 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-10 5:26 UTC (permalink / raw) Cc: emacs-devel >From my previously posted patch: ! ;; This will be unbound and defcustomed in startup.el. We can not ! ;; defcustom it here because the default depends on the operating system. ! (defvar blink-cursor-mode) I believe that the following is a somewhat better comment: ;; This will be unbound and defcustomed in startup.el. We can not ;; defcustom it here because `window-system' is not set yet. (defvar blink-cursor-mode) ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-05 17:38 ` Richard Stallman ` (2 preceding siblings ...) 2005-02-06 1:50 ` Luc Teirlinck @ 2005-02-06 2:07 ` Luc Teirlinck 2005-02-06 3:16 ` Luc Teirlinck 3 siblings, 1 reply; 65+ messages in thread From: Luc Teirlinck @ 2005-02-06 2:07 UTC (permalink / raw) Cc: emacs-devel >From my previous message: So it looks like we should also give the user veto power over code and implement `remove-hook' and `delete' functionality through Custom, adding to the complexity. But it is difficult to see how this could work reliably. The `remove-hook' or `delete' functionality is only going to work if the code adds the stuff _before_ the user's custom-set-variables form is executed. Code that runs later will override the user's veto and add the stuff back anyway. We would have to do something like keep track of all Lisp files that add code to defcustoms (and what code to which defcustom) and put the remove-hook or delete in an `eval-after-load' call. That does not seem very attractive. Problems related to Custom tend to grow more and more complex the longer you keep thinking about them. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
* Re: find-file-hook as illustration of Custom problems 2005-02-06 2:07 ` Luc Teirlinck @ 2005-02-06 3:16 ` Luc Teirlinck 0 siblings, 0 replies; 65+ messages in thread From: Luc Teirlinck @ 2005-02-06 3:16 UTC (permalink / raw) Cc: rms, emacs-devel >From my previous message: Code that runs later will override the user's veto and add the stuff back anyway. Note that this is not a problem that would be a consequence of the discussed changes. It is a problem that exists right now. If, in present code, a non-preloaded Lisp file adds elements to a defcustomed hook, list or alist, then there is no way that you can presently override that in your `custom-set-variables' form. To override it in your .emacs you have to use `eval-after-load' or similar. To avoid this, I believe that the following conventions should be documented and followed. Is there any objection against any of the following conventions? In the following "changing" a defcustomed variable means _changing the global default value_. Changing buffer local values or `let' bindings are OK. Just _loading_ a non-preloaded file should not change any defcustomed variable unless "harmless" (like a hook function only used to gather info and without user visible consequences). Currently, just loading autorevert.el adds a function to find-file-hook, but that function is "harmless" in the above sense. When changing a defcustomed variable from a function, that function should be interactively called by the user and either the _only_ effect should be to implement the documented behavior of the function (for instance by adding a function to a hook that implements that behavior and does not interfere with anything else), or the fact that elements are going to be added to the defcustom should be clearly documented in the docstring and in any manual where the function is described. Sincerely, Luc. ^ permalink raw reply [flat|nested] 65+ messages in thread
end of thread, other threads:[~2005-02-17 1:08 UTC | newest] Thread overview: 65+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-02-04 0:36 find-file-hook as illustration of Custom problems Luc Teirlinck 2005-02-04 7:16 ` Lennart Borgman 2005-02-05 17:38 ` Richard Stallman 2005-02-05 18:54 ` Luc Teirlinck 2005-02-06 21:01 ` Richard Stallman 2005-02-06 22:19 ` Lennart Borgman 2005-02-05 19:43 ` Lennart Borgman 2005-02-05 20:56 ` Popup when buffer file is changed on disk moheb missaghi 2005-02-05 22:57 ` Eli Zaretskii 2005-02-06 0:51 ` Lennart Borgman 2005-02-06 7:20 ` Eli Zaretskii 2005-02-06 9:02 ` Lennart Borgman 2005-02-06 9:53 ` Eli Zaretskii 2005-02-06 10:41 ` Lennart Borgman 2005-02-06 16:34 ` Luc Teirlinck 2005-02-06 17:52 ` Lennart Borgman 2005-02-06 17:04 ` Luc Teirlinck 2005-02-11 0:33 ` Luc Teirlinck 2005-02-11 15:40 ` Eli Zaretskii 2005-02-11 16:51 ` David Kastrup 2005-02-11 19:38 ` Luc Teirlinck 2005-02-12 11:03 ` Eli Zaretskii 2005-02-12 8:37 ` Richard Stallman 2005-02-13 1:41 ` Luc Teirlinck 2005-02-13 4:36 ` Eli Zaretskii 2005-02-15 3:05 ` Luc Teirlinck 2005-02-15 4:59 ` Eli Zaretskii 2005-02-16 2:59 ` moheb missaghi 2005-02-16 9:31 ` Richard Stallman 2005-02-16 10:37 ` David Kastrup 2005-02-16 15:06 ` Luc Teirlinck 2005-02-16 15:21 ` David Kastrup 2005-02-17 1:08 ` Luc Teirlinck 2005-02-06 12:42 ` Richard Stallman 2005-02-06 18:00 ` Lennart Borgman 2005-02-06 18:17 ` Jan D. 2005-02-06 19:59 ` Lennart Borgman 2005-02-06 20:40 ` Jan D. 2005-02-07 4:34 ` Eli Zaretskii 2005-02-07 4:04 ` Luc Teirlinck 2005-02-06 18:11 ` Luc Teirlinck 2005-02-06 18:45 ` Luc Teirlinck 2005-02-06 13:24 ` Jason Rumney 2005-02-06 13:54 ` Lennart Borgman 2005-02-06 7:23 ` Eli Zaretskii 2005-02-06 21:01 ` find-file-hook as illustration of Custom problems Richard Stallman 2005-02-06 1:50 ` Luc Teirlinck 2005-02-06 3:26 ` Luc Teirlinck 2005-02-06 4:02 ` Luc Teirlinck 2005-02-06 21:02 ` Richard Stallman 2005-02-08 1:50 ` Luc Teirlinck 2005-02-09 8:10 ` Richard Stallman 2005-02-09 10:42 ` Kim F. Storm 2005-02-10 18:39 ` Richard Stallman 2005-02-10 21:42 ` Kim F. Storm 2005-02-12 8:37 ` Richard Stallman 2005-02-10 5:12 ` Luc Teirlinck 2005-02-10 18:40 ` Richard Stallman 2005-02-11 0:09 ` Luc Teirlinck 2005-02-12 8:37 ` Richard Stallman 2005-02-11 0:21 ` Luc Teirlinck 2005-02-11 14:59 ` Luc Teirlinck 2005-02-10 5:26 ` Luc Teirlinck 2005-02-06 2:07 ` Luc Teirlinck 2005-02-06 3:16 ` Luc Teirlinck
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).