ybyygu
ybyygu

Reputation: 137

kill the associated buffer when close the emacs-client frame by pressing Alt+F4

I get used to emacsclient for the speedy response like vim, by putting emacs into sever mode with command "emacs --daemon". But I found it quite annoying that lots of buffers kept alive when I viewed some files and then closed them by pressing Alt+F4. I have to kill the buffer explicitly before closing the frame.

I want to know, if there is a way to make emacsclient behave more like a lightweight GUI editor(e.g. vim) in this point?

Upvotes: 6

Views: 1632

Answers (3)

sds
sds

Reputation: 60004

I suggest that you use the command quit-window which does precisely what you want (with the prefix argument); it is already the binding for q in special-mode (i.e., not self-insert) buffers. You can bind it to, say, C-f4, and it will kill the buffer and the frame when you type C-u C-f4.

Upvotes: 2

Joe Casadonte
Joe Casadonte

Reputation: 16859

Do something like the following:

(defun my-kill-buffer-and-frame ()
  "kill the current buffer and the current frame"
  (interactive)
  (when (y-or-n-p "Are you sure you wish to delete the current frame?")
    (kill-buffer)
    (delete-frame)))

If you're sure you always wnt to do it, you can get rid of the prompt:

(defun my-kill-buffer-and-frame ()
  "kill the current buffer and the current frame"
  (interactive)
  (kill-buffer)
  (delete-frame))

Then bind it to a key of your choice, like so:

(global-set-key [(f5)] 'my-kill-buffer-and-frame)

Enjoy!

Upvotes: 1

scottfrazer
scottfrazer

Reputation: 17327

I think you're asking for trouble, but you you could try this:

(add-hook 'delete-frame-functions
          (lambda (frame)
            (let* ((window (frame-selected-window frame))
                   (buffer (and window (window-buffer window))))
              (when (and buffer (buffer-file-name buffer))
                (kill-buffer buffer)))))

Upvotes: 3

Related Questions