]> code.delx.au - dotemacs/blob - lisp/my-gui.el
only show trailing whitespace in text/prog modes
[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 (require 'uniquify)
20 (setq uniquify-strip-common-suffix t)
21 (setq uniquify-buffer-name-style 'post-forward)
22
23 (add-to-list 'delete-frame-functions #'my/kill-buffers-if-deleting-last-frame)
24
25 (setq frame-title-format '((:eval (funcall #'my/generate-frame-title))))
26 (setq icon-title-format frame-title-format)
27
28 (add-to-list 'post-command-hook #'my/terminal-update-title)
29
30 (defalias 'yes-or-no-p 'y-or-n-p)
31
32
33 (defun my/frame-initial-frame-p (frame)
34 "Returns true if the given frame is the magic 'initial frame' that always exists in GUI emacs sessions"
35 (equal "initial_terminal" (terminal-name frame)))
36
37 (defun my/frame-list-ignoring-initial-frame ()
38 "Returns all frames except the magic 'initial frame' that always exists in GUI emacs sessions"
39 (filtered-frame-list (lambda (frame) (not (my/frame-initial-frame-p frame)))))
40
41 (defun my/generate-frame-title ()
42 "Returns a string like 'filename (dirname) - Emacs'"
43 (if (buffer-file-name)
44 (concat
45 (file-name-nondirectory (buffer-file-name))
46 (if (buffer-modified-p)
47 " +")
48 " ("
49 (abbreviate-file-name (substring (file-name-directory (buffer-file-name)) 0 -1))
50 ") - Emacs"
51 )
52 (concat
53 (buffer-name)
54 (if (buffer-modified-p)
55 " +")
56 " - Emacs")))
57
58 (defun my/kill-buffer-safely (buffer)
59 "Kill the buffer if it is not special or modified"
60 (if (and
61 (not (string-match "^ " (buffer-name buffer)))
62 (not (equal "*Messages*" (buffer-name buffer)))
63 (or
64 (not (buffer-modified-p buffer))
65 (null (buffer-file-name buffer))))
66 (kill-buffer buffer)))
67
68 (defun my/kill-buffers-if-deleting-last-frame (frame)
69 "Kill all buffers when closing the last frame"
70 (when (equal (list frame) (my/frame-list-ignoring-initial-frame))
71 (dolist (buffer (buffer-list))
72 (my/kill-buffer-safely buffer))))
73
74 (defun my/kill-buffers-not-in-frame ()
75 "Kill buffers which are not loaded into some frame"
76 (interactive)
77 (let ((kill-count 0))
78 (dolist (buffer (buffer-list))
79 (let* ((window (get-buffer-window buffer t))
80 (frame (window-frame window)))
81 (if (or (null frame) (not (window-live-p window)) (my/frame-initial-frame-p frame))
82 (if (my/kill-buffer-safely buffer)
83 (cl-incf kill-count)))))
84 (message "Killed %d buffers" kill-count)))
85
86 (defun my/terminal-update-title ()
87 "If using a terminal frame then sends the escape codes to update the title."
88 (if (terminal-parameter (frame-terminal) 'terminal-initted)
89 (send-string-to-terminal (concat "\033]0;" (my/generate-frame-title) "\007"))))