From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Luc Teirlinck Newsgroups: gmane.emacs.devel Subject: Re: undo in loaddefs.el buffer Date: Thu, 30 Dec 2004 19:54:06 -0600 (CST) Message-ID: <200412310154.iBV1s5w05229@raven.dms.auburn.edu> References: <200412211414.iBLEEZ903426@raven.dms.auburn.edu> <200412211541.iBLFfBc03861@raven.dms.auburn.edu> <87llbonyup.fsf@jurta.org> <200412260206.iBQ26wG17970@raven.dms.auburn.edu> <41CEE3B8.9090600@swipnet.se> <200412270231.iBR2VDE19709@raven.dms.auburn.edu> <41CFE247.8090409@swipnet.se> <200412280503.iBS53deD002564@manatee.dms.auburn.edu> <200412290207.iBT27Gk0006913@manatee.dms.auburn.edu> <200412300114.iBU1EY001351@moose.dms.auburn.edu> NNTP-Posting-Host: deer.gmane.org X-Trace: sea.gmane.org 1104458148 15787 80.91.229.6 (31 Dec 2004 01:55:48 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Fri, 31 Dec 2004 01:55:48 +0000 (UTC) Cc: juri@jurta.org, yamaoka@jpl.org, jan.h.d@swipnet.se, emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Dec 31 02:55:40 2004 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1CkC0y-0005rk-00 for ; Fri, 31 Dec 2004 02:55:40 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1CkCBw-0007E5-Oq for ged-emacs-devel@m.gmane.org; Thu, 30 Dec 2004 21:07:00 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1CkCBm-0007Ds-2q for emacs-devel@gnu.org; Thu, 30 Dec 2004 21:06:50 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1CkCBl-0007DW-7S for emacs-devel@gnu.org; Thu, 30 Dec 2004 21:06:49 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1CkCBk-0007DB-Vi for emacs-devel@gnu.org; Thu, 30 Dec 2004 21:06:49 -0500 Original-Received: from [131.204.53.104] (helo=manatee.dms.auburn.edu) by monty-python.gnu.org with esmtp (Exim 4.34) id 1CkBzZ-0007s7-9v; Thu, 30 Dec 2004 20:54:13 -0500 Original-Received: from raven.dms.auburn.edu (raven.dms.auburn.edu [131.204.53.29]) by manatee.dms.auburn.edu (8.12.10/8.12.10) with ESMTP id iBV1s60P003747; Thu, 30 Dec 2004 19:54:06 -0600 (CST) Original-Received: (from teirllm@localhost) by raven.dms.auburn.edu (8.11.7p1+Sun/8.11.7) id iBV1s5w05229; Thu, 30 Dec 2004 19:54:06 -0600 (CST) X-Authentication-Warning: raven.dms.auburn.edu: teirllm set sender to teirllm@dms.auburn.edu using -f Original-To: rms@gnu.org In-reply-to: (message from Richard Stallman on Thu, 30 Dec 2004 11:43:53 -0500) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: main.gmane.org gmane.emacs.devel:31628 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:31628 Richard Stallman wrote: The manual is not supposed to describe every possible exception to the rules that could be made to work. That would make the manual too big, too complicated, and too hard to read for ordinary purposes. But 100% of the known examples (Auto Revert and Auto Revert Tail) contradict the rules. So it would seem better not to mention these rules to begin with. There is no need to distinguish between timers and idle timers in as far as the undo problem is concerned. All cases where we had to worry about were timers, not idle timers. There are several problems with: It is legitimate for an idle timer to edit the current buffer. If it does, it should explicitly call @code{undo-boundary} once at the beginning and once just before exiting, since Emacs won't do that automatically for an idle timer. It should be discussed in the common introduction to timers and idle timers and not distinguish between them. Remember that we arrived at the above conclusion by looking exclusively at timers. We never looked at one single instance of the problem that involved idle timers. Secondly, the correct solution is not always to make two undo boundaries. Sometimes it is to disable undo, sometimes it is to clear out all undo info, as we saw with autorevert. It sometimes might be unnecessary for a timer that runs only once. I believe that we should explicitly mention the problem we want to avoid. The person writing the timer function is best placed to decide what the best solution is. Also, it would make clear that the problem is serious. I believe that there is no need to explicitly mention disabling undo and clearing out undo info, since these are obvious solutions to the problem. The double undo boundary solution is less obvious and should be mentioned, especially since the programmer might have the false impression that Emacs does this automatically anyway. I propose the following alternative patch, which is rather different from the one proposed yesterday. I believe that it says all that needs to be said. It replaces the current two four line paragraphs with one six line paragraph and describes the actual problem. ===File ~/os.texi-diff====================================== *** os.texi 29 Dec 2004 15:49:18 -0600 1.67 --- os.texi 30 Dec 2004 14:20:31 -0600 *************** *** 1368,1377 **** timer to call a function that takes substantial time to run is likely to be annoying. ! Timer functions should normally not alter the current buffer ! contents, but it may be ok to alter some other buffer that exists for ! special purposes. A general guideline is that if a buffer has undo ! enabled, timers should not write in it. @deffn Command run-at-time time repeat function &rest args This sets up a timer that calls the function @var{function} with --- 1368,1379 ---- timer to call a function that takes substantial time to run is likely to be annoying. ! A timer that edits a buffer in which undo is enabled, should be ! careful not to accumulate one huge undo entry over time, since that ! could yield memory problems. To avoid this, it is usually necessary ! for the timer to explicitly call @code{undo-boundary} once at the ! beginning and once just before exiting. Emacs won't do that ! automatically (@pxref{Undo}). @deffn Command run-at-time time repeat function &rest args This sets up a timer that calls the function @var{function} with *************** *** 1486,1496 **** input. Then it becomes idle again, and all the idle timers that are set up to repeat will subsequently run another time, one by one. - It is legitimate for an idle timer to edit the current buffer. If - it does, it should explicitly call @code{undo-boundary} once at the - beginning and once just before exiting, since Emacs won't do that - automatically for an idle timer. - @defun cancel-timer timer Cancel the requested action for @var{timer}, which should be a value previously returned by @code{run-at-time} or @code{run-with-idle-timer}. --- 1488,1493 ---- ============================================================