From be28071e56fb3aab5336eccb71e4627a9005bfce Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 17 Dec 2019 17:30:52 +0000 Subject: feat(emacs.d): Add functions & bindings to manage global font size This makes it possible to quickly adjust the size of text in all frames using one keyboard shortcut. Each of these functions understands a prefix argument to mean "please only operate on the current buffer", hence the following bindings and effects: Global: * `C-=`: Increase the global font size (chosen because `+` lies on the `=` key) * `C--`: Decrease the global font size * `C-x C-0`: Restore the global default font size Local: * `C-u C-=`: Increase the local font size * `C-u C--`: Decrease the local font size * `C-u C-x C-0`: Restore the local default font size --- tools/emacs/config/bindings.el | 5 +++-- tools/emacs/config/functions.el | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) (limited to 'tools/emacs/config') diff --git a/tools/emacs/config/bindings.el b/tools/emacs/config/bindings.el index a45c8d4707ab..e77af338951f 100644 --- a/tools/emacs/config/bindings.el +++ b/tools/emacs/config/bindings.el @@ -1,6 +1,7 @@ ;; Font size -(define-key global-map (kbd "C-+") 'text-scale-increase) -(define-key global-map (kbd "C--") 'text-scale-decrease) +(define-key global-map (kbd "C-=") 'increase-default-text-scale) ;; '=' because there lies '+' +(define-key global-map (kbd "C--") 'decrease-default-text-scale) +(define-key global-map (kbd "C-x C-0") 'set-default-text-scale) ;; What does do? Well, it depends ... (define-key prog-mode-map (kbd "") #'company-indent-or-complete-common) diff --git a/tools/emacs/config/functions.el b/tools/emacs/config/functions.el index 4c8aa162cf0b..193e1a7412d1 100644 --- a/tools/emacs/config/functions.el +++ b/tools/emacs/config/functions.el @@ -1,5 +1,3 @@ -(require 's) - (defun load-file-if-exists (filename) (if (file-exists-p filename) (load filename))) @@ -219,4 +217,34 @@ (getenv "USER")) todo)))) +;; Custom text scale adjustment functions that operate on the entire instance +(defun modify-text-scale (factor) + (set-face-attribute 'default nil + :height (+ (* factor 5) (face-attribute 'default :height)))) + +(defun increase-default-text-scale (prefix) + "Increase default text scale in all Emacs frames, or just the + current frame if PREFIX is set." + + (interactive "P") + (if prefix (text-scale-increase 1) + (modify-text-scale 1))) + +(defun decrease-default-text-scale (prefix) + "Increase default text scale in all Emacs frames, or just the + current frame if PREFIX is set." + + (interactive "P") + (if prefix (text-scale-decrease 1) + (modify-text-scale -1))) + +(defun set-default-text-scale (prefix &optional to) + "Set the default text scale to the specified value, or the + default. Restores current frame's text scale only, if PREFIX is + set." + + (interactive "P") + (if prefix (text-scale-adjust 0) + (set-face-attribute 'default nil :height (or to 120)))) + (provide 'functions) -- cgit 1.4.1