(line-beginning-position (+ 1 arg)))
(message "%d line%s copied" arg (if (= 1 arg) "" "s")))
-(add-to-list 'delete-frame-functions #'kill-buffers-if-deleting-last-frame)
+(defun frame-initial-frame-p (frame)
+ (equal "initial_terminal" (terminal-name frame)))
(defun frame-list-ignoring-initial-frame ()
- (filtered-frame-list
- (lambda (frame)
- (not (equal "initial_terminal" (terminal-name frame))))))
+ (filtered-frame-list (lambda (frame) (not (frame-initial-frame-p frame)))))
+
+(defun kill-buffer-safely (buffer)
+ "Kill the buffer if it is not special or modified"
+ (message "Considering %s" (buffer-name buffer))
+ (if (and
+ (not (string-match "^ " (buffer-name buffer)))
+ (not (equal "*Messages*" (buffer-name buffer)))
+ (or
+ (not (buffer-modified-p buffer))
+ (null (buffer-file-name buffer))))
+ (kill-buffer buffer)))
(defun kill-buffers-if-deleting-last-frame (frame)
+ "Kill all buffers when closing the last frame"
(when (equal (list frame) (frame-list-ignoring-initial-frame))
(dolist (buffer (buffer-list))
- (kill-buffer-if-not-modified buffer) buffer)))
+ (kill-buffer-safely buffer))))
(defun kill-buffers-not-in-frame ()
- "Kill buffers which are not loaded into some a frame"
+ "Kill buffers which are not loaded into some frame"
(interactive)
(let ((kill-count 0))
(dolist (buffer (buffer-list))
- (if (not (get-buffer-window buffer t))
- (if (kill-buffer-if-not-modified buffer)
- (cl-incf kill-count))))
+ (let* ((window (get-buffer-window buffer t))
+ (frame (window-frame window)))
+ (if (or (null frame) (not (window-live-p window)) (frame-initial-frame-p frame))
+ (if (kill-buffer-safely buffer)
+ (cl-incf kill-count)))))
(message "Killed %d buffers" kill-count)))
(defun open-line-above ()