diff options
| author | Protesilaos Stavrou <info@protesilaos.com> | 2022-08-22 07:17:27 +0300 |
|---|---|---|
| committer | Protesilaos Stavrou <info@protesilaos.com> | 2022-08-22 07:17:27 +0300 |
| commit | 92724735e8d7c23e5675e4725867814786497f82 (patch) | |
| tree | 75956c77331ea36c9c58fb0109e7f99132758f61 /ef-themes.el | |
| parent | a16c745e7eae0f5a5ce3150bd287102ca6967f59 (diff) | |
Add ef-themes-mixed-fonts user option
My original plan was to not implement such an option and instead direct
users to other packages such as 'mixed-pitch'. However, doing this at
the theme level feels more natural and gives us greater control over
what actually needs to be rendered in 'fixed-pitch'.
Furthermore, adding such an option does not really make the themes
harder to maintain as it does not affect colour combinations.
Diffstat (limited to 'ef-themes.el')
| -rw-r--r-- | ef-themes.el | 66 |
1 files changed, 47 insertions, 19 deletions
diff --git a/ef-themes.el b/ef-themes.el index ee12959..edfb91e 100644 --- a/ef-themes.el +++ b/ef-themes.el @@ -209,8 +209,30 @@ will retain the original aesthetic for that level. For example: :value-type ,ef-themes--headings-choice) :link '(info-link "(ef-themes) Option for headings")) +(defcustom ef-themes-mixed-fonts nil + "Non-nil to enable inheritance from `fixed-pitch' in some faces. + +This is done to allow spacing-sensitive constructs, such as Org +tables and code blocks, to remain monospaced when users opt for a +proportionately spaced font as their default or when they use +something like the command `variable-pitch-mode'. + +Users may need to explicitly configure the font family of +`fixed-pitch' in order to get a consistent experience with their +typography (also check the `fontaine' package on GNU ELPA (by +Protesilaos))." + :group 'ef-themes + :package-version '(ef-themes . "0.4.0") + :type 'boolean + :link '(info-link "(ef-themes) Enable mixed fonts")) + ;;; Helpers for user options +(defun ef-themes--fixed-pitch () + "Conditional application of `fixed-pitch' inheritance." + (when ef-themes-mixed-fonts + (list :inherit 'fixed-pitch))) + (defun ef-themes--key-cdr (key alist) "Get cdr of KEY in ALIST." (cdr (assoc key alist))) @@ -455,9 +477,15 @@ Helper function for `ef-themes-preview-colors'." :package-version '(ef-themes . "0.3.0") :group 'ef-themes-faces) +(defface ef-themes-fixed-pitch nil + "Face for `fixed-pitch' if `ef-themes-mixed-fonts' is non-nil." + :package-version '(ef-themes . "0.4.0") + :group 'ef-themes-faces) + (defconst ef-themes-faces '( ;;;; internal faces + `(ef-themes-fixed-pitch ((,c ,@(ef-themes--fixed-pitch)))) `(ef-themes-heading-0 ((,c ,@(ef-themes--heading 0) :foreground ,rainbow-0))) `(ef-themes-heading-1 ((,c ,@(ef-themes--heading 1) :foreground ,rainbow-1))) `(ef-themes-heading-2 ((,c ,@(ef-themes--heading 2) :foreground ,rainbow-2))) @@ -467,7 +495,7 @@ Helper function for `ef-themes-preview-colors'." `(ef-themes-heading-6 ((,c ,@(ef-themes--heading 6) :foreground ,rainbow-6))) `(ef-themes-heading-7 ((,c ,@(ef-themes--heading 7) :foreground ,rainbow-7))) `(ef-themes-heading-8 ((,c ,@(ef-themes--heading 8) :foreground ,rainbow-8))) - `(ef-themes-key-binding ((,c :inherit bold :foreground ,keybind))) + `(ef-themes-key-binding ((,c :inherit (bold ef-themes-fixed-pitch) :foreground ,keybind))) ;;;; all basic faces `(default ((,c :background ,bg-main :foreground ,fg-main))) `(cursor ((,c :background ,cursor))) @@ -816,7 +844,7 @@ Helper function for `ef-themes-preview-colors'." `(gnus-header-newsgroups ((,c :inherit message-header-newsgroups))) `(gnus-header-subject ((,c :inherit message-header-subject))) ;;;; info - `(Info-quoted ((,c :foreground ,accent-0))) ; the capitalization is canonical + `(Info-quoted ((,c :inherit ef-themes-fixed-pitch :foreground ,accent-0))) ; the capitalization is canonical `(info-header-node ((,c :inherit (shadow bold)))) `(info-index-match ((,c :inherit match))) `(info-menu-header ((,c :inherit bold))) @@ -965,7 +993,7 @@ Helper function for `ef-themes-preview-colors'." ;;;; markdown-mode `(markdown-blockquote-face ((,c :inherit font-lock-doc-face))) `(markdown-bold-face ((,c :inherit bold))) - `(markdown-code-face ((,c :background ,bg-inactive :extend t))) + `(markdown-code-face ((,c :inherit ef-themes-fixed-pitch :background ,bg-inactive :extend t))) `(markdown-gfm-checkbox-face ((,c :foreground ,warning))) `(markdown-header-face (( ))) `(markdown-header-face-1 ((,c :inherit ef-themes-heading-1))) @@ -975,9 +1003,9 @@ Helper function for `ef-themes-preview-colors'." `(markdown-header-face-5 ((,c :inherit ef-themes-heading-5))) `(markdown-header-face-6 ((,c :inherit ef-themes-heading-6))) `(markdown-highlighting-face ((,c :background ,bg-info :foreground ,info))) - `(markdown-inline-code-face ((,c :foreground ,accent-1))) ; same as `org-code' + `(markdown-inline-code-face ((,c :inherit ef-themes-fixed-pitch :foreground ,accent-1))) ; same as `org-code' `(markdown-italic-face ((,c :inherit italic))) - `(markdown-language-keyword-face ((,c :background ,bg-dim))) + `(markdown-language-keyword-face ((,c :inherit ef-themes-fixed-pitch :background ,bg-dim))) `(markdown-line-break-face ((,c :inherit nobreak-space))) `(markdown-link-face ((,c :inherit link))) `(markdown-markup-face ((,c :inherit shadow))) @@ -985,7 +1013,7 @@ Helper function for `ef-themes-preview-colors'." `(markdown-metadata-value-face ((,c :foreground ,string))) `(markdown-missing-link-face ((,c :inherit warning))) `(markdown-pre-face ((,c :inherit markdown-code-face))) - `(markdown-table-face ((,c :foreground ,fg-alt))) ; same as `org-table' + `(markdown-table-face ((,c :inherit ef-themes-fixed-pitch :foreground ,fg-alt))) ; same as `org-table' `(markdown-url-face ((,c :foreground ,fg-alt))) ;;;; messages `(message-cited-text-1 ((,c :foreground ,mail-0))) @@ -1103,27 +1131,27 @@ Helper function for `ef-themes-preview-colors'." `(org-agenda-structure-filter ((,c :inherit (warning org-agenda-structure)))) `(org-agenda-structure-secondary ((,c :foreground ,rainbow-1))) `(org-archived ((,c :background ,bg-alt :foreground ,fg-alt))) - `(org-block ((,c :background ,bg-inactive :extend t))) - `(org-block-begin-line ((,c :inherit shadow :background ,bg-dim :extend t))) + `(org-block ((,c :inherit ef-themes-fixed-pitch :background ,bg-inactive :extend t))) + `(org-block-begin-line ((,c :inherit (shadow ef-themes-fixed-pitch) :background ,bg-dim :extend t))) `(org-block-end-line ((,c :inherit org-block-begin-line))) `(org-checkbox ((,c :foreground ,warning))) `(org-checkbox-statistics-done ((,c :inherit org-done))) `(org-checkbox-statistics-todo ((,c :inherit org-todo))) `(org-clock-overlay ((,c :background ,bg-alt :foreground ,red-cooler))) - `(org-code ((,c :foreground ,accent-1))) + `(org-code ((,c :inherit ef-themes-fixed-pitch :foreground ,accent-1))) `(org-column ((,c :inherit default :background ,bg-alt))) `(org-column-title ((,c :inherit (bold default) :underline t :background ,bg-alt))) - `(org-date ((,c :foreground ,date))) + `(org-date ((,c :inherit ef-themes-fixed-pitch :foreground ,date))) `(org-date-selected ((,c :foreground ,date :inverse-video t))) `(org-dispatcher-highlight ((,c :inherit warning :background ,bg-warning))) `(org-document-info ((,c :foreground ,rainbow-1))) `(org-document-info-keyword ((,c :inherit shadow))) `(org-document-title ((,c :inherit ef-themes-heading-0))) `(org-done ((,c :foreground ,info))) - `(org-drawer ((,c :inherit shadow))) + `(org-drawer ((,c :inherit (shadow ef-themes-fixed-pitch)))) `(org-ellipsis (( ))) ; inherits from the heading's color `(org-footnote ((,c :inherit link))) - `(org-formula ((,c :foreground ,fnname))) + `(org-formula ((,c :inherit ef-themes-fixed-pitch :foreground ,fnname))) `(org-headline-done ((,c :inherit org-done))) `(org-headline-todo ((,c :inherit org-todo))) `(org-hide ((,c :foreground ,bg-main))) @@ -1140,19 +1168,19 @@ Helper function for `ef-themes-preview-colors'." `(org-level-8 ((,c :inherit ef-themes-heading-8))) `(org-link ((,c :inherit link))) `(org-list-dt ((,c :inherit bold))) - `(org-macro ((,c :foreground ,accent-2))) - `(org-meta-line ((,c :inherit shadow))) + `(org-macro ((,c :inherit ef-themes-fixed-pitch :foreground ,accent-2))) + `(org-meta-line ((,c :inherit (shadow ef-themes-fixed-pitch)))) `(org-mode-line-clock (( ))) `(org-mode-line-clock-overrun ((,c :inherit bold :foreground ,err))) `(org-priority ((,c :foreground ,magenta))) - `(org-property-value ((,c :foreground ,fg-alt))) + `(org-property-value ((,c :inherit ef-themes-fixed-pitch :foreground ,fg-alt))) `(org-quote ((,c :inherit org-block))) `(org-scheduled ((,c :foreground ,warning))) `(org-scheduled-previously ((,c :inherit org-scheduled))) `(org-scheduled-today ((,c :inherit (bold org-scheduled)))) `(org-sexp-date ((,c :foreground ,date))) - `(org-special-keyword ((,c :inherit shadow))) - `(org-table ((,c :foreground ,fg-alt))) + `(org-special-keyword ((,c :inherit (shadow ef-themes-fixed-pitch)))) + `(org-table ((,c :inherit ef-themes-fixed-pitch :foreground ,fg-alt))) `(org-table-header ((,c :inherit (bold org-table)))) `(org-tag ((,c :foreground ,fg-alt))) `(org-tag-group ((,c :inherit (bold org-tag)))) @@ -1161,7 +1189,7 @@ Helper function for `ef-themes-preview-colors'." `(org-todo ((,c :foreground ,err))) `(org-upcoming-deadline ((,c :foreground ,warning))) `(org-upcoming-distant-deadline ((,c :inherit org-upcoming-deadline))) - `(org-verbatim ((,c :foreground ,accent-0))) + `(org-verbatim ((,c :inherit ef-themes-fixed-pitch :foreground ,accent-0))) `(org-verse ((,c :inherit org-block))) `(org-warning ((,c :inherit warning))) ;;;; org-habit @@ -1260,7 +1288,7 @@ Helper function for `ef-themes-preview-colors'." `(show-paren-match-expression ((,c :background ,bg-alt))) `(show-paren-mismatch ((,c :background ,bg-red :foreground ,fg-intense))) ;;;; shr - `(shr-code ((,c :foreground ,accent-1))) ; same as `org-code' + `(shr-code ((,c :inherit ef-themes-fixed-pitch :foreground ,accent-1))) ; same as `org-code' `(shr-h1 ((,c :inherit ef-themes-heading-1))) `(shr-h2 ((,c :inherit ef-themes-heading-2))) `(shr-h3 ((,c :inherit ef-themes-heading-3))) |
