diff --git a/doc/modus-themes.info b/doc/modus-themes.info index d0305f0..edc1af1 100644 --- a/doc/modus-themes.info +++ b/doc/modus-themes.info @@ -97,6 +97,7 @@ Customization Options * Syntax styles:: Choose the overall aesthetic of code syntax * Mixed fonts:: Toggle mixing of font families * Link styles:: Choose among several styles, with or without underline +* Box buttons:: Choose among several styles for buttons * Command prompts:: Choose among plain, subtle, or intense prompts * Mode line:: Choose among several styles, with or without borders * Tab style:: Toggle accented background for tabs @@ -643,6 +644,7 @@ of this manual. * Syntax styles:: Choose the overall aesthetic of code syntax * Mixed fonts:: Toggle mixing of font families * Link styles:: Choose among several styles, with or without underline +* Box buttons:: Choose among several styles for buttons * Command prompts:: Choose among plain, subtle, or intense prompts * Mode line:: Choose among several styles, with or without borders * Tab style:: Toggle accented background for tabs @@ -867,7 +869,7 @@ perhaps because a purpose-specific package has extra functionality. Two possible options are ‘org-variable-pitch’ and ‘mixed-pitch’.  -File: modus-themes.info, Node: Link styles, Next: Command prompts, Prev: Mixed fonts, Up: Customization Options +File: modus-themes.info, Node: Link styles, Next: Box buttons, Prev: Mixed fonts, Up: Customization Options 4.7 Option for links ==================== @@ -936,9 +938,91 @@ controlled by ‘x-use-underline-position-properties’, to their documentation strings.  -File: modus-themes.info, Node: Command prompts, Next: Mode line, Prev: Link styles, Up: Customization Options +File: modus-themes.info, Node: Box buttons, Next: Command prompts, Prev: Link styles, Up: Customization Options -4.8 Option for command prompt styles +4.8 Option for box buttons +========================== + +[ Part of 2.1.0-dev ] + + Brief: Control the style of buttons in the Custom UI and related. + + Symbol: ‘modus-themes-box-buttons’ (‘choice’ type, list of +properties) + + Possible values are expressed as a list of properties (default is +‘nil’ or an empty list). The list can include any of the following +symbols: + + • ‘flat’ + • ‘accented’ + • ‘faint’ + • ‘variable-pitch’ + • ‘underline’ + • A font weight, which must be supported by the underlying typeface: + • ‘thin’ + • ‘ultralight’ + • ‘extralight’ + • ‘light’ + • ‘semilight’ + • ‘regular’ + • ‘medium’ + • ‘semibold’ + • ‘bold’ + • ‘heavy’ + • ‘extrabold’ + • ‘ultrabold’ + • A floating point as a height multiple of the default (e.g. ‘0.9’) + + The default (a nil value or an empty list) is a gray background +combined with a pseudo three-dimensional effect. + + The ‘flat’ property makes the button two dimensional. + + The ‘accented’ property changes the background from gray to an accent +color. + + The ‘faint’ property reduces the overall coloration. + + The ‘variable-pitch’ property applies a proportionately spaced +typeface to the button~s text. + + *note Font configurations for Org and others::. + + The ‘underline’ property draws a line below the affected text and +removes whatever box effect. This is optimal when Emacs runs inside a +terminal emulator (*note More accurate colors in terminal emulators::). +If ‘flat’ and ‘underline’ are defined together, the latter takes +precedence. + + The symbol of a weight attribute adjusts the font of the button +accordingly, such as ‘light’, ‘semibold’, etc. Valid symbols are +defined in the variable ‘modus-themes-weights’. + + *note Configure bold and italic faces::. + + A number, expressed as a floating point (e.g. ‘0.9’), adjusts the +height of the button’s text to that many times the base font size. The +default height is the same as ‘1.0’, though it need not be explicitly +stated. + + Combinations of any of those properties are expressed as a list, like +in these examples: + + (flat) + (variable-pitch flat) + (variable-pitch flat 0.9 semibold) + + The order in which the properties are set is not significant. + + In user configuration files the form may look like this: + + (setq modus-themes-box-buttons '(variable-pitch flat 0.9)) + + +File: modus-themes.info, Node: Command prompts, Next: Mode line, Prev: Box buttons, Up: Customization Options + +4.9 Option for command prompt styles ==================================== Brief: Control the style of command prompts (e.g. minibuffer, shell, @@ -992,8 +1076,8 @@ in these examples:  File: modus-themes.info, Node: Mode line, Next: Tab style, Prev: Command prompts, Up: Customization Options -4.9 Option for mode line presentation -===================================== +4.10 Option for mode line presentation +====================================== Brief: Control the style of the mode lines. @@ -1088,7 +1172,7 @@ option.  File: modus-themes.info, Node: Tab style, Next: Completion UIs, Prev: Mode line, Up: Customization Options -4.10 Option for accented background in tab interfaces +4.11 Option for accented background in tab interfaces ===================================================== Brief: Toggle accent colors for tabbed interfaces. @@ -1110,7 +1194,7 @@ as the Centaur tabs package.  File: modus-themes.info, Node: Completion UIs, Next: Mail citations, Prev: Tab style, Up: Customization Options -4.11 Option for completion framework aesthetics +4.12 Option for completion framework aesthetics =============================================== Brief: Set the overall style of completion framework interfaces. @@ -1159,7 +1243,7 @@ spend some time with every one of those presets.  File: modus-themes.info, Node: Mail citations, Next: Fringes, Prev: Completion UIs, Up: Customization Options -4.12 Option for mail citations +4.13 Option for mail citations ============================== Brief: Set the overall style of citations/quotes when composing emails. @@ -1193,7 +1277,7 @@ not touch.  File: modus-themes.info, Node: Fringes, Next: Language checkers, Prev: Mail citations, Up: Customization Options -4.13 Option for fringe visibility +4.14 Option for fringe visibility ================================= Brief: Control the overall coloration of the fringes. @@ -1217,7 +1301,7 @@ their names imply.  File: modus-themes.info, Node: Language checkers, Next: Line highlighting, Prev: Fringes, Up: Customization Options -4.14 Option for language checkers +4.15 Option for language checkers ================================= Brief: Control the style of in-buffer warnings and errors produced by @@ -1283,7 +1367,7 @@ variables ‘flymake-fringe-indicator-position’ and  File: modus-themes.info, Node: Line highlighting, Next: Line numbers, Prev: Language checkers, Up: Customization Options -4.15 Option for line highlighting +4.16 Option for line highlighting ================================= Brief: Control the style of the current line of ‘hl-line-mode’. @@ -1332,7 +1416,7 @@ as ‘elfeed’, ‘notmuch’, and ‘mu4e’.  File: modus-themes.info, Node: Line numbers, Next: Markup, Prev: Line highlighting, Up: Customization Options -4.16 Option for line numbers +4.17 Option for line numbers ============================ Brief: Toggle subtle line numbers. @@ -1361,7 +1445,7 @@ are updated to accommodate this aesthetic.  File: modus-themes.info, Node: Markup, Next: Matching parentheses, Prev: Line numbers, Up: Customization Options -4.17 Option for markup style in Org and others +4.18 Option for markup style in Org and others ============================================== [ Introduced as part of 2.1.0-dev. Supersedes the @@ -1414,7 +1498,7 @@ in these examples:  File: modus-themes.info, Node: Matching parentheses, Next: Active region, Prev: Markup, Up: Customization Options -4.18 Option for parenthesis matching +4.19 Option for parenthesis matching ==================================== Brief: Control the style of matching delimiters produced by @@ -1462,7 +1546,7 @@ and the ‘smartparens’ package.  File: modus-themes.info, Node: Active region, Next: Diffs, Prev: Matching parentheses, Up: Customization Options -4.19 Option for active region +4.20 Option for active region ============================= Brief: Control the style of the region. @@ -1506,7 +1590,7 @@ in these examples:  File: modus-themes.info, Node: Diffs, Next: Org mode blocks, Prev: Active region, Up: Customization Options -4.20 Option for diff buffer looks +4.21 Option for diff buffer looks ================================= Brief: Set the overall style of diffs. @@ -1552,7 +1636,7 @@ contrast threshold.  File: modus-themes.info, Node: Org mode blocks, Next: Org agenda, Prev: Diffs, Up: Customization Options -4.21 Option for org-mode block styles +4.22 Option for org-mode block styles ===================================== Brief: Set the overall style of Org code blocks, quotes, and the like. @@ -1603,7 +1687,7 @@ aliases for ‘gray-background’ and ‘tinted-background’, respectively.  File: modus-themes.info, Node: Org agenda, Next: Heading styles, Prev: Org mode blocks, Up: Customization Options -4.22 Option for Org agenda constructs +4.23 Option for Org agenda constructs ===================================== Brief: Control the style of the Org agenda. Multiple parameters are @@ -1638,9 +1722,9 @@ those properties: height (a value of 1.15). • The symbol of a weight attribute adjusts the font of the heading accordingly, such as ‘light’, ‘semibold’, etc. Valid symbols are - defined in the internal variable ‘modus-themes--heading-weights’. - The absence of a weight means that bold will be used by virtue of - inheriting the ‘bold’ face. + defined in the variable ‘modus-themes-weights’. The absence of a + weight means that bold will be used by virtue of inheriting the + ‘bold’ face. *note Configure bold and italic faces::. @@ -1788,7 +1872,7 @@ Deuteranopia style.  File: modus-themes.info, Node: Heading styles, Next: UI typeface, Prev: Org agenda, Up: Customization Options -4.23 Option for the headings’ overall style +4.24 Option for the headings’ overall style =========================================== Brief: Control the style of headings. This can be particularised for @@ -1828,7 +1912,7 @@ followed by a presentation of all available properties: • ‘extrabold’ • ‘ultrabold’ • ‘no-bold’ (deprecated alias of a ‘regular’ weight) - • A floating point as a height multiple of the default + • A floating point as a height multiple of the default (e.g. ‘1.1’) By default (a ‘nil’ value for this variable), all headings have a bold typographic weight and use a desaturated text color. @@ -1851,11 +1935,10 @@ typeface). The symbol of a weight attribute adjusts the font of the heading accordingly, such as ‘light’, ‘semibold’, etc. Valid symbols are -defined in the internal variable ‘modus-themes--heading-weights’. The -absence of a weight means that bold will be used by virtue of inheriting -the ‘bold’ face. For backward compatibility, the ‘no-bold’ value is -accepted, though users are encouraged to specify a ‘regular’ weight -instead. +defined in the variable ‘modus-themes-weights’. The absence of a weight +means that bold will be used by virtue of inheriting the ‘bold’ face. +For backward compatibility, the ‘no-bold’ value is accepted, though +users are encouraged to specify a ‘regular’ weight instead. *note Configure bold and italic faces::. @@ -1902,7 +1985,7 @@ others, such as ‘org-fontify-done-headline’.  File: modus-themes.info, Node: UI typeface, Prev: Heading styles, Up: Customization Options -4.24 Option for variable-pitch font in UI elements +4.25 Option for variable-pitch font in UI elements ================================================== Brief: Toggle the use of proportionately spaced (‘variable-pitch’) fonts @@ -5772,6 +5855,7 @@ B.2 Variable index * modus-themes-after-load-theme-hook: Enable and load. (line 6) * modus-themes-bold-constructs: Bold constructs. (line 6) +* modus-themes-box-buttons: Box buttons. (line 6) * modus-themes-completions: Completion UIs. (line 6) * modus-themes-deuteranopia: Deuteranopia style. (line 6) * modus-themes-diffs: Diffs. (line 6) @@ -5879,111 +5963,112 @@ B.3 Concept index  Tag Table: Node: Top860 -Node: Overview7075 -Node: How do the themes look like9199 -Node: Learn about the latest changes9713 -Node: Installation10101 -Node: Install manually from source10582 -Node: Install from the archives11407 -Node: Install on GNU/Linux12184 -Node: Debian 11 Bullseye12632 -Node: GNU Guix12942 -Node: Enable and load13225 -Node: Sample configuration with and without use-package16172 -Node: Differences between loading and enabling18124 -Node: Customization Options20079 -Node: Custom reload theme26565 -Node: Deuteranopia style27355 -Node: Bold constructs28786 -Node: Italic constructs29620 -Node: Syntax styles30387 -Node: Mixed fonts32519 -Node: Link styles33783 -Node: Command prompts36261 -Node: Mode line38082 -Node: Tab style42573 -Node: Completion UIs43236 -Node: Mail citations45329 -Node: Fringes46513 -Node: Language checkers47253 -Node: Line highlighting49695 -Node: Line numbers51292 -Node: Markup52360 -Node: Matching parentheses54053 -Node: Active region55430 -Node: Diffs56843 -Node: Org mode blocks58494 -Node: Org agenda60884 -Node: Heading styles69344 -Node: UI typeface73769 -Node: Advanced customization74668 -Node: More accurate colors in terminal emulators76215 -Node: Visualize the active Modus theme's palette77460 -Node: Per-theme customization settings78460 -Node: Case-by-case face specs using the themes' palette79816 -Node: Face specs at scale using the themes' palette84364 -Node: Remap face with local value89165 -Node: Cycle through arbitrary colors91590 -Node: Override colors98018 -Node: Override color saturation102883 -Node: Override colors through blending108562 -Node: Font configurations for Org and others111419 -Ref: Font configurations for Org and others-Footnote-1114235 -Node: Configure bold and italic faces114422 -Node: Custom Org todo keyword and priority faces118570 -Node: Custom Org emphasis faces122243 -Node: Update Org block delimiter fontification127044 -Node: Measure color contrast128961 -Node: Load theme depending on time of day131684 -Node: Backdrop for pdf-tools132677 -Node: Decrease mode line height135529 -Node: A theme-agnostic hook for theme loading139654 -Node: Diffs with only the foreground142045 -Node: Ediff without diff color-coding145159 -Node: Face coverage147254 -Node: Supported packages147706 -Node: Indirectly covered packages154354 -Node: Notes on individual packages155374 -Node: Note on avy hints156438 -Node: Note on calendarel weekday and weekend colors157606 -Node: Note on underlines in compilation buffers158789 -Node: Note on inline Latex in Org buffers159636 -Node: Note on dimmerel160246 -Node: Note on display-fill-column-indicator-mode161731 -Node: Note on highlight-parenthesesel163294 -Node: Note on mmm-modeel background colors169283 -Node: Note for prism171598 -Node: Note for god-mode174752 -Node: Note on company-mode overlay pop-up176356 -Ref: Note on company-mode overlay pop-up-Footnote-1177046 -Ref: Note on company-mode overlay pop-up-Footnote-2177113 -Node: Note on ERC escaped color sequences177168 -Ref: Note on ERC escaped color sequences-Footnote-1178596 -Node: Note on powerline or spaceline178706 -Node: Note on SHR colors179120 -Node: Note on SHR fonts179532 -Node: Note on Ement colors and fonts180165 -Node: Note on Helm grep181690 -Node: Note on vc-annotate-background-mode183167 -Node: Note on pdf-tools link hints184052 -Node: Frequently Asked Questions186484 -Node: Is the contrast ratio about adjacent colors?187115 -Node: What does it mean to avoid exaggerations?188622 -Node: Why are colors mostly variants of blue magenta cyan?190451 -Node: What is the best setup for legibility?194764 -Node: Are these color schemes?197409 -Node: Port the Modus themes to other platforms?201129 -Node: Contributing203913 -Node: Sources of the themes204310 -Node: Issues you can help with204946 -Node: Patches require copyright assignment to the FSF206146 -Node: Acknowledgements208441 -Node: Meta211428 -Node: GNU Free Documentation License213907 -Node: Indices239259 -Node: Function index239438 -Node: Variable index240961 -Node: Concept index243102 +Node: Overview7148 +Node: How do the themes look like9272 +Node: Learn about the latest changes9786 +Node: Installation10174 +Node: Install manually from source10655 +Node: Install from the archives11480 +Node: Install on GNU/Linux12257 +Node: Debian 11 Bullseye12705 +Node: GNU Guix13015 +Node: Enable and load13298 +Node: Sample configuration with and without use-package16245 +Node: Differences between loading and enabling18197 +Node: Customization Options20152 +Node: Custom reload theme26711 +Node: Deuteranopia style27501 +Node: Bold constructs28932 +Node: Italic constructs29766 +Node: Syntax styles30533 +Node: Mixed fonts32665 +Node: Link styles33929 +Node: Box buttons36403 +Node: Command prompts39097 +Node: Mode line40918 +Node: Tab style45411 +Node: Completion UIs46074 +Node: Mail citations48167 +Node: Fringes49351 +Node: Language checkers50091 +Node: Line highlighting52533 +Node: Line numbers54130 +Node: Markup55198 +Node: Matching parentheses56891 +Node: Active region58268 +Node: Diffs59681 +Node: Org mode blocks61332 +Node: Org agenda63722 +Node: Heading styles72165 +Node: UI typeface76589 +Node: Advanced customization77488 +Node: More accurate colors in terminal emulators79035 +Node: Visualize the active Modus theme's palette80280 +Node: Per-theme customization settings81280 +Node: Case-by-case face specs using the themes' palette82636 +Node: Face specs at scale using the themes' palette87184 +Node: Remap face with local value91985 +Node: Cycle through arbitrary colors94410 +Node: Override colors100838 +Node: Override color saturation105703 +Node: Override colors through blending111382 +Node: Font configurations for Org and others114239 +Ref: Font configurations for Org and others-Footnote-1117055 +Node: Configure bold and italic faces117242 +Node: Custom Org todo keyword and priority faces121390 +Node: Custom Org emphasis faces125063 +Node: Update Org block delimiter fontification129864 +Node: Measure color contrast131781 +Node: Load theme depending on time of day134504 +Node: Backdrop for pdf-tools135497 +Node: Decrease mode line height138349 +Node: A theme-agnostic hook for theme loading142474 +Node: Diffs with only the foreground144865 +Node: Ediff without diff color-coding147979 +Node: Face coverage150074 +Node: Supported packages150526 +Node: Indirectly covered packages157174 +Node: Notes on individual packages158194 +Node: Note on avy hints159258 +Node: Note on calendarel weekday and weekend colors160426 +Node: Note on underlines in compilation buffers161609 +Node: Note on inline Latex in Org buffers162456 +Node: Note on dimmerel163066 +Node: Note on display-fill-column-indicator-mode164551 +Node: Note on highlight-parenthesesel166114 +Node: Note on mmm-modeel background colors172103 +Node: Note for prism174418 +Node: Note for god-mode177572 +Node: Note on company-mode overlay pop-up179176 +Ref: Note on company-mode overlay pop-up-Footnote-1179866 +Ref: Note on company-mode overlay pop-up-Footnote-2179933 +Node: Note on ERC escaped color sequences179988 +Ref: Note on ERC escaped color sequences-Footnote-1181416 +Node: Note on powerline or spaceline181526 +Node: Note on SHR colors181940 +Node: Note on SHR fonts182352 +Node: Note on Ement colors and fonts182985 +Node: Note on Helm grep184510 +Node: Note on vc-annotate-background-mode185987 +Node: Note on pdf-tools link hints186872 +Node: Frequently Asked Questions189304 +Node: Is the contrast ratio about adjacent colors?189935 +Node: What does it mean to avoid exaggerations?191442 +Node: Why are colors mostly variants of blue magenta cyan?193271 +Node: What is the best setup for legibility?197584 +Node: Are these color schemes?200229 +Node: Port the Modus themes to other platforms?203949 +Node: Contributing206733 +Node: Sources of the themes207130 +Node: Issues you can help with207766 +Node: Patches require copyright assignment to the FSF208966 +Node: Acknowledgements211261 +Node: Meta214248 +Node: GNU Free Documentation License216727 +Node: Indices242079 +Node: Function index242258 +Node: Variable index243781 +Node: Concept index245995  End Tag Table diff --git a/doc/modus-themes.org b/doc/modus-themes.org index 81b5ca5..af3b9e3 100644 --- a/doc/modus-themes.org +++ b/doc/modus-themes.org @@ -784,6 +784,91 @@ controlled by ~x-use-underline-position-properties~, ~x-underline-at-descent-line~, ~underline-minimum-offset~. Please refer to their documentation strings. +** Option for box buttons +:properties: +:alt_title: Box buttons +:description: Choose among several styles for buttons +:custom_id: h:8b85f711-ff40-45b0-b7fc-4727503cd2ec +:end: +#+vindex: modus-themes-box-buttons + +[ Part of {{{development-version}}} ] + +Brief: Control the style of buttons in the Custom UI and related. + +Symbol: ~modus-themes-box-buttons~ (=choice= type, list of properties) + +Possible values are expressed as a list of properties (default is ~nil~ or +an empty list). The list can include any of the following symbols: + ++ ~flat~ ++ ~accented~ ++ ~faint~ ++ ~variable-pitch~ ++ ~underline~ ++ A font weight, which must be supported by the underlying typeface: + - ~thin~ + - ~ultralight~ + - ~extralight~ + - ~light~ + - ~semilight~ + - ~regular~ + - ~medium~ + - ~semibold~ + - ~bold~ + - ~heavy~ + - ~extrabold~ + - ~ultrabold~ ++ A floating point as a height multiple of the default (e.g. =0.9=) + +The default (a nil value or an empty list) is a gray background combined +with a pseudo three-dimensional effect. + +The ~flat~ property makes the button two dimensional. + +The ~accented~ property changes the background from gray to an accent +color. + +The ~faint~ property reduces the overall coloration. + +The ~variable-pitch~ property applies a proportionately spaced typeface +to the button~s text. + +[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and others]]. + +The ~underline~ property draws a line below the affected text and +removes whatever box effect. This is optimal when Emacs runs inside a +terminal emulator ([[#h:fbb5e254-afd6-4313-bb05-93b3b4f67358][More accurate colors in terminal emulators]]). If +~flat~ and ~underline~ are defined together, the latter takes +precedence. + +The symbol of a weight attribute adjusts the font of the button +accordingly, such as ~light~, ~semibold~, etc. Valid symbols are +defined in the variable ~modus-themes-weights~. + +[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]]. + +A number, expressed as a floating point (e.g. =0.9=), adjusts the height +of the button's text to that many times the base font size. The default +height is the same as =1.0=, though it need not be explicitly stated. + +Combinations of any of those properties are expressed as a list, +like in these examples: + +#+begin_src emacs-lisp +(flat) +(variable-pitch flat) +(variable-pitch flat 0.9 semibold) +#+end_src + +The order in which the properties are set is not significant. + +In user configuration files the form may look like this: + +#+begin_src emacs-lisp +(setq modus-themes-box-buttons '(variable-pitch flat 0.9)) +#+end_src + ** Option for command prompt styles :properties: :alt_title: Command prompts diff --git a/modus-themes.el b/modus-themes.el index 5872b0f..92a5e95 100644 --- a/modus-themes.el +++ b/modus-themes.el @@ -5,7 +5,7 @@ ;; Author: Protesilaos Stavrou ;; URL: https://gitlab.com/protesilaos/modus-themes ;; Version: 2.0.0 -;; Last-Modified: <2022-02-13 09:26:33 +0200> +;; Last-Modified: <2022-02-14 12:07:07 +0200> ;; Package-Requires: ((emacs "27.1")) ;; Keywords: faces, theme, accessibility @@ -44,6 +44,7 @@ ;; modus-themes-mixed-fonts (boolean) ;; modus-themes-subtle-line-numbers (boolean) ;; modus-themes-variable-pitch-ui (boolean) +;; modus-themes-box-buttons (choice) ;; modus-themes-completions (choice) ;; modus-themes-diffs (choice) ;; modus-themes-fringes (choice) @@ -1630,6 +1631,16 @@ The actual styling of the face is done by `modus-themes-faces'." The actual styling of the face is done by `modus-themes-faces'." :group 'modus-themes-faces) +(defface modus-themes-box-button nil + "Face for widget buttons (e.g. in the Custom UI). +The actual styling of the face is done by `modus-themes-faces'." + :group 'modus-themes-faces) + +(defface modus-themes-box-button-pressed nil + "Face for pressed widget buttons (e.g. in the Custom UI). +The actual styling of the face is done by `modus-themes-faces'." + :group 'modus-themes-faces) + ;;; Customization variables @@ -2930,6 +2941,74 @@ as the Centaur tabs package." :initialize #'custom-initialize-default :link '(info-link "(modus-themes) Tab style")) +(defcustom modus-themes-box-buttons nil + "Control the style of buttons in the Custom UI and related. + +The value is a list of properties, each designated by a symbol. +The default (a nil value or an empty list) is a gray background +combined with a pseudo three-dimensional effect. + +The `flat' property makes the button two dimensional. + +The `accented' property changes the background from gray to an +accent color. + +The `faint' property reduces the overall coloration. + +The `variable-pitch' property applies a proportionately spaced +typeface to the button's text. + +The `underline' property draws a line below the affected text and +removes whatever box effect. This is optimal when Emacs runs +inside a terminal emulator. If `flat' and `underline' are +defined together, the latter takes precedence. + +The symbol of a weight attribute adjusts the font of the button +accordingly, such as `light', `semibold', etc. Valid symbols are +defined in the variable `modus-themes-weights'. + +A number, expressed as a floating point (e.g. 0.9), adjusts the +height of the button's text to that many times the base font +size. The default height is the same as 1.0, though it need not +be explicitly stated. + +Combinations of any of those properties are expressed as a list, +like in these examples: + + (flat) + (variable-pitch flat) + (variable-pitch flat 0.9 semibold) + +The order in which the properties are set is not significant. + +In user configuration files the form may look like this: + + (setq modus-themes-box-buttons (quote (variable-pitch flat 0.9)))" + :group 'modus-themes + :package-version '(modus-themes . "2.1.0") + :version "29.1" + :type '(set :tag "Properties" :greedy t + (const :tag "Two-dimensional button" flat) + (const :tag "Accented background instead of gray" accented) + (const :tag "Proportionately spaced font (variable-pitch)" variable-pitch) + (const :tag "Underline instead of a box effect" underline) + (choice :tag "Font weight (must be supported by the typeface)" + (const :tag "Thin" thin) + (const :tag "Ultra-light" ultralight) + (const :tag "Extra-light" extralight) + (const :tag "Light" light) + (const :tag "Semi-light" semilight) + (const :tag "Regulat (default)" nil) + (const :tag "Medium" medium) + (const :tag "Bold" bold) + (const :tag "Semi-bold" semibold) + (const :tag "Extra-bold" extrabold) + (const :tag "Ultra-bold" ultrabold)) + (float :tag "Number (float) to adjust height by" :value 0.9)) + :set #'modus-themes--set-option + :initialize #'custom-initialize-default + :link '(info-link "(modus-themes) Box buttons")) + ;;; Internal functions @@ -3806,6 +3885,56 @@ application of a variable-pitch font." :foreground (or foreground 'unspecified) :box (if box-p (list :line-width 2 :color background) 'unspecified)))) +(defun modus-themes--button (bg bgfaint bgaccent bgaccentfaint border &optional pressed-button-p) + "Apply `modus-themes-box-buttons' styles. + +Work in progress. BG BGFAINT BGACCENT BGACCENTFAINT BORDER PRESSED-BUTTON-P." + (let* ((properties modus-themes-box-buttons) + (weight (modus-themes--weight properties))) + (list :inherit + (cond + ((and (memq 'variable-pitch properties) + (eq weight 'bold)) + (list 'bold 'variable-pitch)) + ((memq 'variable-pitch properties) + 'variable-pitch) + ((eq weight 'bold) + 'bold) + ('unspecified)) + :background + (cond + ((and (memq 'accented properties) + (memq 'faint properties) + bgaccentfaint)) + ((memq 'faint properties) + bgfaint) + ((memq 'accented properties) + bgaccent) + (bg)) + :box + (cond + ((memq 'underline properties) + 'unspecified) + ((memq 'flat properties) + (list :line-width -1 :color border)) + ((list :line-width -1 + :style (if pressed-button-p + 'pressed-button + 'released-button) + :color border))) + :weight + (cond + ((eq weight 'bold) + 'unspecified) ; we :inherit the `bold' face above + (weight weight) + ('unspecified)) + :height + (seq-find #'floatp properties 'unspecified) + :underline + (if (memq 'underline properties) + t + 'unspecified)))) + ;;;; Utilities for DIY users @@ -4250,6 +4379,13 @@ by virtue of calling either of `modus-themes-load-operandi' and ((,class ,@(if (null modus-themes-completions) (list :foreground magenta-alt-other) (list :inherit 'modus-themes-key-binding))))) +;;;;; buttons + `(modus-themes-box-button + ((,class ,@(modus-themes--button bg-active bg-main bg-active-accent + bg-special-cold bg-region)))) + `(modus-themes-box-button-pressed + ((,class ,@(modus-themes--button bg-active bg-main bg-active-accent + bg-special-cold bg-region t)))) ;;;;; typography `(modus-themes-bold ((,class ,@(modus-themes--bold-weight)))) `(modus-themes-fixed-pitch ((,class ,@(modus-themes--fixed-pitch)))) @@ -4734,12 +4870,9 @@ by virtue of calling either of `modus-themes-load-operandi' and ;;;;; cursor-flash `(cursor-flash-face ((,class :inherit modus-themes-intense-blue))) ;;;;; custom (M-x customize) - `(custom-button ((,class :box (:line-width 2 :color nil :style released-button) - :background ,bg-active :foreground ,fg-main))) - `(custom-button-mouse ((,class :box (:line-width 2 :color nil :style released-button) - :background ,bg-active :foreground ,fg-active))) - `(custom-button-pressed ((,class :box (:line-width 2 :color nil :style pressed-button) - :background ,bg-active :foreground ,fg-main))) + `(custom-button ((,class :inherit modus-themes-box-button))) + `(custom-button-mouse ((,class :inherit (highlight custom-button)))) + `(custom-button-pressed ((,class :inherit modus-themes-box-button-pressed))) `(custom-changed ((,class :inherit modus-themes-subtle-cyan))) `(custom-comment ((,class :inherit shadow))) `(custom-comment-tag ((,class :background ,bg-alt :foreground ,yellow-alt-other))) @@ -5251,8 +5384,7 @@ by virtue of calling either of `modus-themes-load-operandi' and `(eww-form-checkbox ((,class :inherit eww-form-text))) `(eww-form-file ((,class :inherit eww-form-submit))) `(eww-form-select ((,class :inherit eww-form-submit))) - `(eww-form-submit ((,class :box (:line-width 2 :style released-button) - :background ,bg-active))) + `(eww-form-submit ((,class :inherit modus-themes-box-button))) `(eww-form-text ((,class :box ,bg-active :background ,bg-alt))) `(eww-form-textarea ((,class :background ,bg-alt))) ;;;;; eyebrowse