* save-buffer like save-excursion
@ 2007-03-18 7:57 Matthew Flaschen
0 siblings, 0 replies; 9+ messages in thread
From: Matthew Flaschen @ 2007-03-18 7:57 UTC (permalink / raw)
To: emacs
Is there a command like save-excursion that only saves the buffer? I
have several functions that must set-buffer temporarily, then do things
that change point. I always want these point changes, but if set-buffer
changed the buffer (not necessarily true), I want to reverse that change.
So, is there already a command for this?
Matt Flaschen
^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <mailman.1069.1174204758.7795.help-gnu-emacs@gnu.org>]
* Re: save-buffer like save-excursion
[not found] <mailman.1069.1174204758.7795.help-gnu-emacs@gnu.org>
@ 2007-03-18 9:23 ` Harald Hanche-Olsen
2007-03-18 9:56 ` Matthew Flaschen
2007-03-19 3:54 ` Stefan Monnier
1 sibling, 1 reply; 9+ messages in thread
From: Harald Hanche-Olsen @ 2007-03-18 9:23 UTC (permalink / raw)
To: help-gnu-emacs
+ Matthew Flaschen <matthew.flaschen@gatech.edu>:
| Is there a command like save-excursion that only saves the buffer? I
| have several functions that must set-buffer temporarily, then do things
| that change point. I always want these point changes, but if set-buffer
| changed the buffer (not necessarily true), I want to reverse that change.
|
| So, is there already a command for this?
You are aware of the difference between set-buffer and
swith-to-buffer, I presume? Even if a function does set-buffer, at
the end of an interactive command you are back in the buffer you had.
So there may not be a need to do what you want at all.
On the other hand, if you want to temporarily change the buffer within
a function, you can use macro like this one:
(defmacro with-saved-buffer (&rest command)
(let ((cur (make-symbol "cur")))
`(let ((,cur (current-buffer)))
(unwind-protect
(progn ,@command)
(set-buffer ,cur)))))
and use it like
(with-saved-buffer
(set-buffer "blah")
...)
;; here, the buffer is back to what it was
The unwind-protect in there is not necessary in the case where an
error brings you back to the interactive top-level. But if your code
performs a non-local exit for some reason, it's essential.
--
* Harald Hanche-Olsen <URL:http://www.math.ntnu.no/~hanche/>
- It is undesirable to believe a proposition
when there is no ground whatsoever for supposing it is true.
-- Bertrand Russell
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: save-buffer like save-excursion
2007-03-18 9:23 ` Harald Hanche-Olsen
@ 2007-03-18 9:56 ` Matthew Flaschen
0 siblings, 0 replies; 9+ messages in thread
From: Matthew Flaschen @ 2007-03-18 9:56 UTC (permalink / raw)
To: emacs
Harald Hanche-Olsen wrote:
> + Matthew Flaschen <matthew.flaschen@gatech.edu>:
>
> | Is there a command like save-excursion that only saves the buffer? I
> | have several functions that must set-buffer temporarily, then do things
> | that change point. I always want these point changes, but if set-buffer
> | changed the buffer (not necessarily true), I want to reverse that change.
> |
> | So, is there already a command for this?
>
> You are aware of the difference between set-buffer and
> swith-to-buffer, I presume?
I think so. set-buffer doesn't change the UI, only the working buffer.
Even if a function does set-buffer, at
> the end of an interactive command you are back in the buffer you had.
Right...but I'd like to preserve the buffer within interactive commands.
> So there may not be a need to do what you want at all.
>
> On the other hand, if you want to temporarily change the buffer within
> a function, you can use macro like this one:
> (defmacro with-saved-buffer (&rest command)
> (let ((cur (make-symbol "cur")))
> `(let ((,cur (current-buffer)))
> (unwind-protect
> (progn ,@command)
> (set-buffer ,cur)))))
>
> and use it like
>
> (with-saved-buffer
> (set-buffer "blah")
> ...)
> ;; here, the buffer is back to what it was
Right, thanks. I'll probably use something similar, or just do it
manually (depending on how often it's necessary). I might also be able
to avoid the issue neatly just by calling set-buffer again in the client
code. I was just wondering if there was already something, so I
wouldn't be wasting my time.
> The unwind-protect in there is not necessary in the case where an
> error brings you back to the interactive top-level.
I think that's the case for me. But I won't have any errors anyway! My
code is tested. ;)
Matt Flaschen
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: save-buffer like save-excursion
[not found] <mailman.1069.1174204758.7795.help-gnu-emacs@gnu.org>
2007-03-18 9:23 ` Harald Hanche-Olsen
@ 2007-03-19 3:54 ` Stefan Monnier
2007-03-19 5:30 ` Matthew Flaschen
2007-03-19 7:33 ` Harald Hanche-Olsen
1 sibling, 2 replies; 9+ messages in thread
From: Stefan Monnier @ 2007-03-19 3:54 UTC (permalink / raw)
To: help-gnu-emacs
> Is there a command like save-excursion that only saves the buffer? I
> have several functions that must set-buffer temporarily, then do things
> that change point. I always want these point changes, but if set-buffer
> changed the buffer (not necessarily true), I want to reverse that change.
> So, is there already a command for this?
with-current-buffer (or save-current-buffer).
Stefan
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: save-buffer like save-excursion
2007-03-19 3:54 ` Stefan Monnier
@ 2007-03-19 5:30 ` Matthew Flaschen
2007-03-19 7:33 ` Harald Hanche-Olsen
1 sibling, 0 replies; 9+ messages in thread
From: Matthew Flaschen @ 2007-03-19 5:30 UTC (permalink / raw)
To: emacs
Stefan Monnier wrote:
>> Is there a command like save-excursion that only saves the buffer? I
>> have several functions that must set-buffer temporarily, then do things
>> that change point. I always want these point changes, but if set-buffer
>> changed the buffer (not necessarily true), I want to reverse that change.
>
>> So, is there already a command for this?
>
> with-current-buffer (or save-current-buffer)
Thanks. I'll refactor the code (again)
Matt
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: save-buffer like save-excursion
2007-03-19 3:54 ` Stefan Monnier
2007-03-19 5:30 ` Matthew Flaschen
@ 2007-03-19 7:33 ` Harald Hanche-Olsen
2007-03-19 21:36 ` Matthew Flaschen
[not found] ` <mailman.1132.1174340311.7795.help-gnu-emacs@gnu.org>
1 sibling, 2 replies; 9+ messages in thread
From: Harald Hanche-Olsen @ 2007-03-19 7:33 UTC (permalink / raw)
To: help-gnu-emacs
+ Stefan Monnier <monnier@iro.umontreal.ca>:
| with-current-buffer (or save-current-buffer).
Duh. Another wheel reinvented (in my earlier post in the thread).
--
* Harald Hanche-Olsen <URL:http://www.math.ntnu.no/~hanche/>
- It is undesirable to believe a proposition
when there is no ground whatsoever for supposing it is true.
-- Bertrand Russell
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: save-buffer like save-excursion
2007-03-19 7:33 ` Harald Hanche-Olsen
@ 2007-03-19 21:36 ` Matthew Flaschen
[not found] ` <mailman.1132.1174340311.7795.help-gnu-emacs@gnu.org>
1 sibling, 0 replies; 9+ messages in thread
From: Matthew Flaschen @ 2007-03-19 21:36 UTC (permalink / raw)
To: emacs
Harald Hanche-Olsen wrote:
> + Stefan Monnier <monnier@iro.umontreal.ca>:
>
> | with-current-buffer (or save-current-buffer).
>
> Duh. Another wheel reinvented (in my earlier post in the thread).
Anytime I work on something in emacs I have the overwhelmingly feeling
it's already been done. Half the time I turn out to be right. The
naming conventions seem totally arbitrary, so even with apropos and
everything it's hard to find the function you want.
Maybe I should ask again about the main project I'm working on. Has an
ed emulator already been made for emacs?
Matthew Flaschen
^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <mailman.1132.1174340311.7795.help-gnu-emacs@gnu.org>]
* Re: save-buffer like save-excursion
[not found] ` <mailman.1132.1174340311.7795.help-gnu-emacs@gnu.org>
@ 2007-03-21 19:42 ` Stefan Monnier
2007-03-23 1:35 ` Matthew Flaschen
0 siblings, 1 reply; 9+ messages in thread
From: Stefan Monnier @ 2007-03-21 19:42 UTC (permalink / raw)
To: help-gnu-emacs
>> + Stefan Monnier <monnier@iro.umontreal.ca>:
>>
>> | with-current-buffer (or save-current-buffer).
>>
>> Duh. Another wheel reinvented (in my earlier post in the thread).
> Anytime I work on something in emacs I have the overwhelmingly feeling
> it's already been done. Half the time I turn out to be right. The
> naming conventions seem totally arbitrary, so even with apropos and
> everything it's hard to find the function you want.
> Maybe I should ask again about the main project I'm working on. Has an
> ed emulator already been made for emacs?
I suspect some part of it might be included in viper.
Stefan
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: save-buffer like save-excursion
2007-03-21 19:42 ` Stefan Monnier
@ 2007-03-23 1:35 ` Matthew Flaschen
0 siblings, 0 replies; 9+ messages in thread
From: Matthew Flaschen @ 2007-03-23 1:35 UTC (permalink / raw)
To: emacs
Stefan Monnier wrote:
>>> + Stefan Monnier <monnier@iro.umontreal.ca>:
>>>
>>> | with-current-buffer (or save-current-buffer).
>>>
>>> Duh. Another wheel reinvented (in my earlier post in the thread).
>
>> Anytime I work on something in emacs I have the overwhelmingly feeling
>> it's already been done. Half the time I turn out to be right. The
>> naming conventions seem totally arbitrary, so even with apropos and
>> everything it's hard to find the function you want.
>
>> Maybe I should ask again about the main project I'm working on. Has an
>> ed emulator already been made for emacs?
>
> I suspect some part of it might be included in viper.
I don't think so. As far as I can tell, ed is almost nothing like vi.
Reviewing the Viper manual just now, I see no reference to ed. Glad to
be corrected, though.
Matt Flaschen
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2007-03-23 1:35 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-18 7:57 save-buffer like save-excursion Matthew Flaschen
[not found] <mailman.1069.1174204758.7795.help-gnu-emacs@gnu.org>
2007-03-18 9:23 ` Harald Hanche-Olsen
2007-03-18 9:56 ` Matthew Flaschen
2007-03-19 3:54 ` Stefan Monnier
2007-03-19 5:30 ` Matthew Flaschen
2007-03-19 7:33 ` Harald Hanche-Olsen
2007-03-19 21:36 ` Matthew Flaschen
[not found] ` <mailman.1132.1174340311.7795.help-gnu-emacs@gnu.org>
2007-03-21 19:42 ` Stefan Monnier
2007-03-23 1:35 ` Matthew Flaschen
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).