1 ;;; -*- lexical-binding: t -*-
3 (require 'pastels-on-dark-theme)
9 (setq scroll-conservatively 1)
10 (setq scroll-margin 1)
11 (setq mouse-wheel-scroll-amount '(3))
12 (setq mouse-wheel-progressive-speed nil)
14 (setq column-number-mode t)
15 (setq line-number-mode t)
19 (setq-default show-trailing-whitespace t)
22 (setq uniquify-strip-common-suffix t)
23 (setq uniquify-buffer-name-style 'post-forward)
25 (add-to-list 'delete-frame-functions #'my/kill-buffers-if-deleting-last-frame)
27 (setq frame-title-format '((:eval (funcall #'my/generate-frame-title))))
28 (setq icon-title-format frame-title-format)
30 (add-to-list 'post-command-hook #'my/terminal-update-title)
32 (defalias 'yes-or-no-p 'y-or-n-p)
35 (defun my/frame-initial-frame-p (frame)
36 "Returns true if the given frame is the magic 'initial frame' that always exists in GUI emacs sessions"
37 (equal "initial_terminal" (terminal-name frame)))
39 (defun my/frame-list-ignoring-initial-frame ()
40 "Returns all frames except the magic 'initial frame' that always exists in GUI emacs sessions"
41 (filtered-frame-list (lambda (frame) (not (my/frame-initial-frame-p frame)))))
43 (defun my/generate-frame-title ()
44 "Returns a string like 'filename (dirname) - Emacs'"
45 (if (buffer-file-name)
47 (file-name-nondirectory (buffer-file-name))
48 (if (buffer-modified-p)
51 (abbreviate-file-name (substring (file-name-directory (buffer-file-name)) 0 -1))
56 (if (buffer-modified-p)
60 (defun my/kill-buffer-safely (buffer)
61 "Kill the buffer if it is not special or modified"
63 (not (string-match "^ " (buffer-name buffer)))
64 (not (equal "*Messages*" (buffer-name buffer)))
66 (not (buffer-modified-p buffer))
67 (null (buffer-file-name buffer))))
68 (kill-buffer buffer)))
70 (defun my/kill-buffers-if-deleting-last-frame (frame)
71 "Kill all buffers when closing the last frame"
72 (when (equal (list frame) (my/frame-list-ignoring-initial-frame))
73 (dolist (buffer (buffer-list))
74 (my/kill-buffer-safely buffer))))
76 (defun my/kill-buffers-not-in-frame ()
77 "Kill buffers which are not loaded into some frame"
80 (dolist (buffer (buffer-list))
81 (let* ((window (get-buffer-window buffer t))
82 (frame (window-frame window)))
83 (if (or (null frame) (not (window-live-p window)) (my/frame-initial-frame-p frame))
84 (if (my/kill-buffer-safely buffer)
85 (cl-incf kill-count)))))
86 (message "Killed %d buffers" kill-count)))
88 (defun my/terminal-update-title ()
89 "If using a terminal frame then sends the escape codes to update the title."
90 (if (terminal-parameter (frame-terminal) 'terminal-initted)
91 (send-string-to-terminal (concat "\033]0;" (my/generate-frame-title) "\007"))))