;;; -*- lexical-binding: t -*- (require 'pastels-on-dark-theme) (menu-bar-mode -1) (tool-bar-mode -1) (scroll-bar-mode -1) (setq scroll-conservatively 1) (setq scroll-margin 1) (setq mouse-wheel-scroll-amount '(3)) (setq mouse-wheel-progressive-speed nil) (setq column-number-mode t) (setq line-number-mode t) (show-paren-mode t) (require 'uniquify) (setq uniquify-strip-common-suffix t) (setq uniquify-buffer-name-style 'post-forward) (add-to-list 'delete-frame-functions #'my/kill-buffers-if-deleting-last-frame) (setq frame-title-format '((:eval (funcall #'my/generate-frame-title)))) (setq icon-title-format frame-title-format) (add-to-list 'post-command-hook #'my/terminal-update-title) (defalias 'yes-or-no-p 'y-or-n-p) (defun my/frame-initial-frame-p (frame) "Returns true if the given frame is the magic 'initial frame' that always exists in GUI emacs sessions" (equal "initial_terminal" (terminal-name frame))) (defun my/frame-list-ignoring-initial-frame () "Returns all frames except the magic 'initial frame' that always exists in GUI emacs sessions" (filtered-frame-list (lambda (frame) (not (my/frame-initial-frame-p frame))))) (defun my/generate-frame-title () "Returns a string like 'filename (dirname) - Emacs'" (if (buffer-file-name) (concat (file-name-nondirectory (buffer-file-name)) (if (buffer-modified-p) " +") " (" (abbreviate-file-name (substring (file-name-directory (buffer-file-name)) 0 -1)) ") - Emacs" ) (concat (buffer-name) (if (buffer-modified-p) " +") " - Emacs"))) (defun my/kill-buffer-safely (buffer) "Kill the buffer if it is not special or modified" (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 my/kill-buffers-if-deleting-last-frame (frame) "Kill all buffers when closing the last frame" (when (equal (list frame) (my/frame-list-ignoring-initial-frame)) (dolist (buffer (buffer-list)) (my/kill-buffer-safely buffer)))) (defun my/kill-buffers-not-in-frame () "Kill buffers which are not loaded into some frame" (interactive) (let ((kill-count 0)) (dolist (buffer (buffer-list)) (let* ((window (get-buffer-window buffer t)) (frame (window-frame window))) (if (or (null frame) (not (window-live-p window)) (my/frame-initial-frame-p frame)) (if (my/kill-buffer-safely buffer) (cl-incf kill-count))))) (message "Killed %d buffers" kill-count))) (defun my/terminal-update-title () "If using a terminal frame then sends the escape codes to update the title." (if (terminal-parameter (frame-terminal) 'terminal-initted) (send-string-to-terminal (concat "\033]0;" (my/generate-frame-title) "\007"))))