From de46dda0bcd75acde774806bd393761666860f80 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Wed, 15 Jan 2025 14:14:19 -0800 Subject: 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. --- oni-gui/icons/recycle.svg | 3 + oni-gui/icons/search.svg | 3 + oni-gui/oni-gui.el | 140 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 oni-gui/icons/recycle.svg create mode 100644 oni-gui/icons/search.svg create mode 100644 oni-gui/oni-gui.el (limited to 'oni-gui') diff --git a/oni-gui/icons/recycle.svg b/oni-gui/icons/recycle.svg new file mode 100644 index 0000000..21d1bd9 --- /dev/null +++ b/oni-gui/icons/recycle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/oni-gui/icons/search.svg b/oni-gui/icons/search.svg new file mode 100644 index 0000000..3318054 --- /dev/null +++ b/oni-gui/icons/search.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file 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 +;; 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 . + +;;; 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 '("*/" "**/")))))) + (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 -- cgit v1.3-2-g0d8e