[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: elisp question

From: Mike Ballard
Subject: Re: elisp question
Date: Fri, 22 Aug 2003 05:52:12 GMT
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1

On Fri Aug 22, Joakim Hove disturbed my nap when he said:

> Mike Ballard <address@hidden> writes:
> > Hi - 
> >
> > I don't know much about elisp but was able to piece together a little
> > snippet that pretty much does what I want.  And that's to determine if a
> > post is to Usenet and write a copy to a file.
> >
> > The problem is if I post again to the same group (w/o restarting Gnus) I
> > get the mb msg '<file> has changed on disk - really edit the buffer?'  I'd
> > like to eliminate that (I can post to other groups fine so long as I don't
> > try more than one post to any group during a single Gnus session).
> >
> > If there was some way to add code which re-reads the disk file before it's
> > written to a second time that (apparently) would fix it.
> Look into the function (revert-buffer). However, if this is a
> buffer/file entirely managed by gnus/emacs I can not understand how it
> changes under your feet - the mb msg '<file> has changed on disk -
> really edit the buffer?'  generally comes when some *other* program
> has altered a file on disk while you have a buffer mapped to this file
> emacs. Actually I suspect that the touch code below works, and by that
> modifies the file such that emacs thinks the file is newer than the
> buffer (which is in this case formally correct, but not what you
> want), and the present with the '<file> has ...' is displayed. So
> altough I think (revert-buffer) is answer to your question, I *think*
> you are asking the wrong question, and should rather focus on *why*
> the file is modified.
> > I tried using file-exists-p but have sort of been going in circles
> > (backwards) without success).
> Why do you have to ensure that the file exists? You can manually set
> the file to store a fresh buffer to by (setq buffer-file-name "filename").

The "touch" is my beginner way of non-interactively creating a var-based
filename (the usenet group name).

Your "other" program comment got me thinking that the way I used
start-process-shell-command:touch in my func definitely was the problem
('really edit?').  The shell proc touch's the file, I post and Emacs
writes to disk (and for the first post it didn't matter if I touch'd an
existing file or not).  After the first write to disk apparently Emacs now
knows the state of the file.

But the way my beginner-code was written it touch'd the file whether or
not it existed.  So what I think happens is that the 2d time through
(after Emacs wrote first post to disk) my func touch'd it again and when
Emacs tried to write my second post to disk it said 'hey, this file's
different than I left it.'

My problem using file-exists (to use touch conditionally) was a misplaced
paren.  I had marked off, simplified, (defun* (if test then1 if (then2))).
then2 did not belong with the first 'if' so I thought file-exists wasn't
working.  I got it straightened out and is working acceptably now.

Thanks for the help.


  "Roses are red, violets are blue,
   I'm schizophrenic and so am I"

reply via email to

[Prev in Thread] Current Thread [Next in Thread]