]> code.delx.au - dotemacs/blob - lisp/my-kill-buffers.el
ansi-color-map
[dotemacs] / lisp / my-kill-buffers.el
1 ;;; -*- lexical-binding: t -*-
2
3 (add-to-list 'delete-frame-functions #'my/kill-buffers-if-deleting-last-frame)
4
5 (defun my/kill-buffers-if-deleting-last-frame (frame)
6 "Kill all buffers when closing the last frame"
7 (when (equal (list frame) (my/frame-list-ignoring-initial-frame))
8 (dolist (buffer (buffer-list))
9 (my/kill-buffer-safely buffer))))
10
11 (defun my/kill-buffers-not-in-frame ()
12 "Kill buffers which are not loaded into some frame"
13 (interactive)
14 (let ((kill-count 0))
15 (dolist (buffer (buffer-list))
16 (let* ((window (get-buffer-window buffer t))
17 (frame (window-frame window)))
18 (if (or (null frame) (not (window-live-p window)) (my/frame-initial-frame-p frame))
19 (if (my/kill-buffer-safely buffer)
20 (cl-incf kill-count)))))
21 (message "Killed %d buffers" kill-count)))
22
23
24
25 (defun my/frame-initial-frame-p (frame)
26 "Returns true if the given frame is the magic 'initial frame' that always exists in GUI emacs sessions"
27 (equal "initial_terminal" (terminal-name frame)))
28
29 (defun my/frame-list-ignoring-initial-frame ()
30 "Returns all frames except the magic 'initial frame' that always exists in GUI emacs sessions"
31 (filtered-frame-list (lambda (frame) (not (my/frame-initial-frame-p frame)))))
32
33 (defun my/kill-buffer-safely (buffer)
34 "Kill the buffer if it is not special or modified"
35 (if (and
36 (not (string-match "^ " (buffer-name buffer)))
37 (not (equal "*Messages*" (buffer-name buffer)))
38 (or
39 (not (buffer-modified-p buffer))
40 (null (buffer-file-name buffer))))
41 (kill-buffer buffer)))