Web lists-archives.com

Re: emacs save and kill buffer for (neo)mutt

On Fri 12 Apr 2019 at 18:04:45 (+0200), Pétùr wrote:
> I use neomutt with emacs.
> I would like to quickly save and kill a buffer in emacs. This is to
> avoid typing C-x C-s and, then, C-x C-c when sending an email. I want
> one shortcut to save and kill the buffer and be back quickly in mutt to
> send the email.
> I tried the following inside my .emacs (binded to C-q). It works but
> kill also the window when inside a terminal. I am not going back to mutt
> after writing inside emacs (-nw) and C-q. How can I fix that?

I just put
(global-set-key [?\C-q] "\C-x\C-s\C-x\C-c")
into my ~/.emacs file and it works just as one would expect, both when
emacs is running in a separate window (which disappears) or when emacs
is running with -nw in an xterm (the xterm is unaffected).

I will finish composing this email (in emacs -nw) by typing ^q and
expect to be left in mutt, whereupon I shall press y to send it.
Is that what you wnat?

Here goes …

> ;; Kill the current buffer immediatly, saving it if needed.
> (defvar kill-save-buffer-delete-windows t
>  "*Delete windows when `kill-save-buffer' is used.
> If this is non-nil, then `kill-save-buffer' will also delete the corresponding
> windows.  This is inverted by `kill-save-buffer' when called with a prefix.")
> (defun kill-save-buffer (arg)
>  "Save the current buffer (if needed) and then kill it.
> Also, delete its windows according to `kill-save-buffer-delete-windows'.
> A prefix argument ARG reverses this behavior."
>  (interactive "P")
>  (let ((del kill-save-buffer-delete-windows))
>    (when arg (setq del (not del)))
>    (when (and (buffer-file-name) (not (file-directory-p (buffer-file-name))))
>      (save-buffer))
>    (let ((buf (current-buffer)))
>      (when del (delete-windows-on buf))
>      (kill-buffer buf))))
> (global-set-key (kbd "C-q") 'kill-save-buffer)