I'm trying to write a function to do the following tasks:
- Extract a piece of text from the current buffer (specifically, a diff)
- Switch to a temporary buffer in another window, and insert this text into that buffer.
- Set the temporary buffer's major mode (to diff-mode).
- Prompt the user to save that buffer to a file.
- Kill the buffer, and restore the window layout if necessary.
The rough skeleton of the function is as follows:
(defun extract-and-save ()
(interactive)
(let ((text-to-save (get-text-to-save)))
(with-temp-buffer?
(insert text-to-save)
(diff-mode)
(save-buffer))))
I'm not able to get the with-temp-buffer
invocation right -- I either end up saving the buffer before it's visible and not killing it afterwards, or mess up the major mode of the previous buffer before switching.
I've tried using with-temp-buffer-window
and variants, but I don't understand them well enough/they don't work.
Any pointers?