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.el | 135 -------------------------------------------- oni-gui/icons/recycle.svg | 3 + oni-gui/icons/search.svg | 3 + oni-gui/oni-gui.el | 140 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 146 insertions(+), 135 deletions(-) delete mode 100644 oni-gui.el create mode 100644 oni-gui/icons/recycle.svg create mode 100644 oni-gui/icons/search.svg create mode 100644 oni-gui/oni-gui.el diff --git a/oni-gui.el b/oni-gui.el deleted file mode 100644 index 5ba6a13..0000000 --- a/oni-gui.el +++ /dev/null @@ -1,135 +0,0 @@ -;;; oni-gui.el --- GUI settings for Emacs -*- lexical-binding: t; -*- - -;; Copyright (C) 2019 Tom Willemse - -;; Author: Tom Willemse -;; Keywords: local -;; Version: 2023.0805.233624 -;; 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) - -(add-to-list 'default-frame-alist '(font . "Fantasque Sans Mono-15")) -(add-to-list 'default-frame-alist '(internal-border-width . 15)) - -(defconst oni-gui-isearch-icon #xf002) -(defconst oni-gui-arev-icon #xf1b8) - -(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 oni-gui-isearch-icon font-awesome frame) - (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) - (set-fontset-font t oni-gui-arev-icon 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 (string ?\s oni-gui-isearch-icon))) -(with-eval-after-load 'autorevert - (diminish 'auto-revert-mode (string ?\s oni-gui-arev-icon))) - -(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 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