From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nick Dokos Subject: Re: Buffer *temp* modified; kill anyway? Date: Wed, 04 Mar 2009 16:47:36 -0500 Message-ID: <11062.1236203256@alphaville.usa.hp.com> References: <874oy9gpwo.fsf@wolfram.com> <9344.1236191912@alphaville.usa.hp.com> <87d4cxf4cd.fsf@wolfram.com> Reply-To: nicholas.dokos@hp.com Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LeyxC-0007QR-63 for emacs-orgmode@gnu.org; Wed, 04 Mar 2009 16:48:38 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LeyxA-0007PW-NO for emacs-orgmode@gnu.org; Wed, 04 Mar 2009 16:48:37 -0500 Received: from [199.232.76.173] (port=55417 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LeyxA-0007PE-7e for emacs-orgmode@gnu.org; Wed, 04 Mar 2009 16:48:36 -0500 Received: from g1t0026.austin.hp.com ([15.216.28.33]:19416) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Leyx9-0002jF-Pc for emacs-orgmode@gnu.org; Wed, 04 Mar 2009 16:48:35 -0500 In-Reply-To: Message from Bill White of "Wed, 04 Mar 2009 13:57:54 CST." <87d4cxf4cd.fsf@wolfram.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Bill White Cc: emacs-orgmode@gnu.org Bill White wrote: > On Wed Mar 04 2009 at 12:38, Nick Dokos wrote: > > > Bill White wrote: > > > >> Hi all - > >> > >> "Buffer *temp* modified; kill anyway?" is driving me nuts. > >> > >> Has anyone seen this error message when html-exporting pages that > >> contain #+begin_src ? I get this once for every #+begin_src > >> ... #+end_src group on a page. I assume it's coming from htmlize.el, > >> but I haven't been able to isolate the problem with edebug. I'm using > >> the latest htmlize.el from > >> http://fly.srk.fer.hr/~hniksic/emacs/htmlize.el > >> > >> Any ideas what's going on and how to silence it? If it weren't for this > >> I'd be able to publish without babysitting the process through > >> source-heavy files. > >> > > > > Bill, > > > > I just tried exporting the following: > > > > ,---- > > | * Lisp source code > > | > > | #+begin_src emacs-lisp > > | (defun org-xor (a b) > > | "Exclusive or." > > | (if a (not b) b)) > > | #+end_src > > `---- > > > > and did not have the problem you describe. Can you post a minimal example? > > Here's one that triggers it: > > ,---- > | * Lisp source code > | > | #+begin_src message > | From: Nick Dokos > | Subject: Re: [Orgmode] Buffer *temp* modified; kill anyway? > | To: Bill White > | Cc: emacs-orgmode@gnu.org > | Date: Wed, 04 Mar 2009 13:38:32 -0500 (from Gnus) > | Reply-To: nicholas.dokos@hp.com > | X-Sent: 1 hour, 9 minutes, 51 seconds ago > | Message-ID: <9344.1236191912@alphaville.usa.hp.com> > | #+end_src > `---- > > Interestingly, the message is not triggered when I use your example with > its "#+begin_src emacs-lisp", nor does "#+begin_src mma" trigger > it (using Tim Wichmann's mma.el). > > My versions are: > - Org-mode version 6.23trans > - GNU Emacs 23.0.90.1 (i686-pc-linux-gnu, GTK+ Version 2.12.9) of 2009-02-14 on billw-desktop > - htmlize-version 1.34 > - message.el version 1.169 (from the emacs cvs checkout above) > > Thanks for the example - I didn't realize that some src modes didn't > trigger the problem. > The problem seems to arise in the following code from org-exp.el:org-export-format-source-code-or-example: ... (setq rtn (with-temp-buffer (insert rtn) (if (functionp mode) (funcall mode) (fundamental-mode)) (font-lock-fontify-buffer) (org-export-htmlize-region-for-paste (point-min) (point-max)))) ... The with-temp-buffer macro looks like this (it's in subr.el): (defmacro with-temp-buffer (&rest body) "Create a temporary buffer, and evaluate BODY there like `progn'. See also `with-temp-file' and `with-output-to-string'." (declare (indent 0) (debug t)) (let ((temp-buffer (make-symbol "temp-buffer"))) `(let ((,temp-buffer (generate-new-buffer " *temp*"))) ;; FIXME: kill-buffer can change current-buffer in some odd cases. (with-current-buffer ,temp-buffer (unwind-protect (progn ,@body) (and (buffer-name ,temp-buffer) (kill-buffer ,temp-buffer))))))) The *temp* buffer that is created ends up with the body of the begin_src/end_src construct as its contents, but in the emacs-lisp instance, the call to kill-buffer in the macro succeeds without the "Buffer modified" question being asked, whereas in the message case, it asks the question. In both cases, however the temp buffer seems modified to me.[1] So I don't understand the difference in behavior between the two cases, but maybe this provides enough detail for a better elisper than me to understand and explain to the rest of us. Nick [1] I added a call to debug in the original code, like this: (setq rtn (with-temp-buffer (let ((foo)) (insert rtn) (if (functionp mode) (funcall mode) (fundamental-mode)) (font-lock-fontify-buffer) (setq foo (org-export-htmlize-region-for-paste (point-min) (point-max))) (debug nil (buffer-name)) foo))) and checked the *temp* buffer when I got to the breakpoint, but in both cases it looks modified to my eye (I also evaluated (buffer-modified-p) in each case: it returned t). And I also checked kill-buffer-query-functions and kill-buffer-hook in the two cases: they are the same. In particular, in my emacs, kill-buffer-query-functions has the value (server-kill-buffer-query-function) and kill-buffer-hook has the value (reftex-kill-buffer-hook tramp-flush-file-function preview-kill-buffer-cleanup browse-url-delete-temp-file vc-kill-buffer-hook) Mark me mystified.