diff options
| author | 2025-01-15 14:14:19 -0800 | |
|---|---|---|
| committer | 2025-01-15 14:14:19 -0800 | |
| commit | de46dda0bcd75acde774806bd393761666860f80 (patch) | |
| tree | 42e76211834d4b8de63d2a77f996b480bfabebe1 /oni-gui/oni-gui.el | |
| parent | 835ece1ca9c08038e3953d7fe4a2a0a5a4332880 (diff) | |
| download | emacs-config-de46dda0bcd75acde774806bd393761666860f80.tar.gz emacs-config-de46dda0bcd75acde774806bd393761666860f80.zip | |
Replace isearch and auto-revert icons with SVG images
The font awesome fonts don't always work quite right, but SVG images are pretty
good to work with.
Diffstat (limited to 'oni-gui/oni-gui.el')
| -rw-r--r-- | oni-gui/oni-gui.el | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/oni-gui/oni-gui.el b/oni-gui/oni-gui.el new file mode 100644 index 0000000..7c6aca4 --- /dev/null +++ b/oni-gui/oni-gui.el @@ -0,0 +1,140 @@ +;;; oni-gui.el --- GUI settings for Emacs -*- lexical-binding: t; -*- + +;; Copyright (C) 2019 Tom Willemse + +;; Author: Tom Willemse <tom@ryuslash.org> +;; Keywords: local +;; Version: 2025.0115.141118 +;; Package-Requires: (oni-ui oni-hydra yoshi-theme diminish) + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; These are my GUI settings. + +;;; Code: + +(require 'hydra) +(require 'oni-ui) + +(defconst oni-gui-root + (file-name-directory + (or load-file-name + (buffer-file-name))) + "The directory where ‘oni-gui’ was loaded from.") + +(defconst oni-gui-icons-dir + (expand-file-name "oni-gui/icons" oni-gui-root) + "The directory where ‘oni-gui’ stores its icons.") + +(add-to-list 'default-frame-alist '(font . "Fantasque Sans Mono-15")) +(add-to-list 'default-frame-alist '(internal-border-width . 15)) + +(defun oni-gui-setup-faces (frame) + "Setup faces for FRAME." + (set-face-attribute 'fixed-pitch frame :font "Fantasque Sans Mono-15") + (set-face-attribute 'variable-pitch frame :font "Comic Neue-15")) + +(defun oni-gui-setup-fontsets (frame) + "Setup fontsets for FRAME. +If FRAME is nil, they’re set for the current frame." + (let ((font-awesome "Font Awesome 5 Free Solid-12")) + (set-fontset-font t #xf026 font-awesome frame) + (set-fontset-font t #xf027 font-awesome frame) + (set-fontset-font t #xf028 font-awesome frame) + (set-fontset-font t #xf240 font-awesome frame) + (set-fontset-font t #xf241 font-awesome frame) + (set-fontset-font t #xf242 font-awesome frame) + (set-fontset-font t #xf243 font-awesome frame) + (set-fontset-font t #xf244 font-awesome frame) + (set-fontset-font t #xf2c9 font-awesome frame) + (set-fontset-font t #xf6a9 font-awesome frame) + (set-fontset-font t #xf769 font-awesome frame) + (set-fontset-font t #xf76b font-awesome frame)) + (let ((font-awesome "Font Awesome 5 Free Regular-12")) + (set-fontset-font t #xf0c8 font-awesome frame) + (set-fontset-font t #xf14a font-awesome frame)) + (let ((dejavu-sans-mono "DejaVu Sans Mono-12")) + (set-fontset-font t #x25c9 dejavu-sans-mono frame) + (set-fontset-font t #x25cb dejavu-sans-mono frame) + (set-fontset-font t #x2738 dejavu-sans-mono frame) + (set-fontset-font t #x273f dejavu-sans-mono frame) + (set-fontset-font t #x2713 dejavu-sans-mono frame))) + +;; Thanks to the article at +;; https://andreyorst.gitlab.io/posts/2020-07-21-programming-ligatures-in-emacs/ +(defun oni-gui-setup-ligatures (&optional _) + "Define ligatures supported by Fantasque Sans Mono." + (let ((ligatures + `((?= . ,(regexp-opt '("==" "===" "=/=" "=>" "==>" "=>>" "=<<"))) + (?! . ,(regexp-opt '("!=" "!=="))) + (?< . ,(regexp-opt '("<-<" "<<-" "<--" "<-" "<->" "<=<" "<<=" "<==" + "<=>" "<~>" "<~~" "<~" "<<<" "<<" "<=" "<>" + "<|||" "<||" "<|" "<|>" "<!--"))) + (?- . ,(regexp-opt '("->" "-->" "->>" "-<" "-<<"))) + (?> . ,(regexp-opt '(">->" ">=>" ">>=" ">>-" ">-" ">=" ">>" ">>>"))) + (?~ . ,(regexp-opt '("~~" "~>" "~~>"))) + (?| . ,(regexp-opt '("|>" "||>" "|||>" "||"))) + (?: . ,(regexp-opt '("::"))) + (?& . ,(regexp-opt '("&&"))) + (?/ . ,(regexp-opt '("//" "/*"))) + (?* . ,(regexp-opt '("*/" "**/")))))) + (dolist (char-regexp ligatures) + (set-char-table-range composition-function-table (car char-regexp) + `([,(cdr char-regexp) 0 font-shape-gstring]))))) + +(with-eval-after-load 'isearch + (diminish 'isearch-mode (propertize " " 'display `(image :type svg :file ,(expand-file-name "search.svg" oni-gui-icons-dir) :ascent center :margin (5 . 0))))) +(with-eval-after-load 'autorevert + (diminish 'auto-revert-mode (propertize " " 'display `(image :type svg :file ,(expand-file-name "recycle.svg" oni-gui-icons-dir) :ascent center :margin (5 . 0))))) + +(defhydra oni-gui-hydra (:color teal :hint nil) + " +^Buffer^ ^Packages^ ^Sort^ +^^^^^^----------------------------------- +_br_: Revert _pl_: List _sl_: Sort +_bi_: Auto Insert ^^ ^^ +" + ("br" (revert-buffer nil t)) + ("bi" auto-insert) + ("pl" list-packages) + ("sl" sort-lines)) + +(setq-default cursor-type '(bar . 2)) +(setq-default cursor-in-non-selected-windows 'box) +(setq frame-resize-pixelwise t) + +(scroll-bar-mode -1) + +(unless (eq system-type 'windows-nt) + (if (daemonp) + (progn + (add-hook 'after-make-frame-functions #'oni-gui-setup-ligatures) + (add-hook 'after-make-frame-functions #'oni-gui-setup-fontsets) + (add-hook 'after-make-frame-functions #'oni-gui-setup-faces)) + (oni-gui-setup-fontsets nil) + (oni-gui-setup-faces nil) + (oni-gui-setup-ligatures))) + +(global-unset-key (kbd "C-z")) +(global-set-key (kbd "C-c c") '("Frequently used commands" . oni-gui-hydra/body)) + +(load-theme 'yoshi :no-confirm) + +(when (fboundp 'pixel-scroll-precision-mode) + (pixel-scroll-precision-mode)) + +(provide 'oni-gui) +;;; oni-gui.el ends here |
