]> code.delx.au - dotemacs/blob - lisp/my-gui.el
3ee090028a0aad4f86cd0695f067a5e0d05b9cf7
[dotemacs] / lisp / my-gui.el
1 ;;; -*- lexical-binding: t -*-
2
3 (require 'pastels-on-dark-theme)
4
5 (menu-bar-mode -1)
6 (tool-bar-mode -1)
7 (scroll-bar-mode -1)
8
9 (setq scroll-conservatively 1)
10 (setq scroll-margin 1)
11 (setq mouse-wheel-scroll-amount '(3))
12 (setq mouse-wheel-progressive-speed nil)
13
14 (setq column-number-mode t)
15 (setq line-number-mode t)
16
17 (show-paren-mode t)
18
19 (setq-default show-trailing-whitespace t)
20
21 (require 'uniquify)
22 (setq uniquify-strip-common-suffix t)
23 (setq uniquify-buffer-name-style 'post-forward)
24
25 (add-to-list 'delete-frame-functions #'my/kill-buffers-if-deleting-last-frame)
26
27 (setq frame-title-format '((:eval (funcall #'my/generate-frame-title))))
28 (setq icon-title-format frame-title-format)
29
30 (add-to-list 'post-command-hook #'my/terminal-update-title)
31
32 (defalias 'yes-or-no-p 'y-or-n-p)
33
34
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)))
38
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)))))
42
43 (defun my/generate-frame-title ()
44 "Returns a string like 'filename (dirname) - Emacs'"
45 (if (buffer-file-name)
46 (concat
47 (file-name-nondirectory (buffer-file-name))
48 (if (buffer-modified-p)
49 " +")
50 " ("
51 (abbreviate-file-name (substring (file-name-directory (buffer-file-name)) 0 -1))
52 ") - Emacs"
53 )
54 (concat
55 (buffer-name)
56 (if (buffer-modified-p)
57 " +")
58 " - Emacs")))
59
60 (defun my/kill-buffer-safely (buffer)
61 "Kill the buffer if it is not special or modified"
62 (if (and
63 (not (string-match "^ " (buffer-name buffer)))
64 (not (equal "*Messages*" (buffer-name buffer)))
65 (or
66 (not (buffer-modified-p buffer))
67 (null (buffer-file-name buffer))))
68 (kill-buffer buffer)))
69
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))))
75
76 (defun my/kill-buffers-not-in-frame ()
77 "Kill buffers which are not loaded into some frame"
78 (interactive)
79 (let ((kill-count 0))
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)))
87
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"))))