Merge remote-tracking branch 'origin/master' into feature/android
This commit is contained in:
commit
733a6776f9
25 changed files with 2334 additions and 291 deletions
|
@ -97,15 +97,16 @@ recent Emacs branch, and apply the command
|
|||
This creates the Debian-based image emacs-inotify, based on the
|
||||
instructions in the file Dockerfile.emba. This image is good for the
|
||||
majority of tests. However, there are also other image build
|
||||
instructions like emacs-filenotify-gio, emacs-eglot, emacs-gnustep and
|
||||
emacs-native-comp-speed{0,1,2}. Use the appropriate one.
|
||||
instructions like emacs-filenotify-gio, emacs-eglot,
|
||||
emacs-tree-sitter, emacs-gnustep and emacs-native-comp-speed{0,1,2}.
|
||||
Use the appropriate one.
|
||||
|
||||
The image contains a directory "/checkout", which is a copy of your
|
||||
local Emacs git repository. Emacs has been built in this directory
|
||||
via "make bootstrap". In order to use the image, start a container
|
||||
like
|
||||
|
||||
docker run --interactive --env EMACS_EMBA_CI=1 --name emacs-inotify \
|
||||
docker run --interactive --tty --env EMACS_EMBA_CI=1 --name emacs-inotify \
|
||||
emacs-inotify /bin/sh -i
|
||||
|
||||
In this container, change the current directory to "/checkout". Now
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
@c %**start of header
|
||||
@setfilename ../../info/erc.info
|
||||
@settitle ERC Manual
|
||||
@set ERCVER 5.5
|
||||
@set ERCVER 5.6
|
||||
@set ERCDIST as distributed with Emacs @value{EMACSVER}
|
||||
@include docstyle.texi
|
||||
@syncodeindex fn cp
|
||||
|
@ -611,6 +611,7 @@ And unlike global toggles, none of these ever mutates
|
|||
Integrations
|
||||
|
||||
* URL:: Opening IRC URLs in ERC.
|
||||
* SOCKS:: Connecting to IRC with a SOCKS proxy.
|
||||
* auth-source:: Retrieving auth-source entries with ERC.
|
||||
|
||||
@end detailmenu
|
||||
|
@ -1252,6 +1253,57 @@ need a function as well:
|
|||
@noindent
|
||||
Users on Emacs 28 and below may need to use @code{browse-url} instead.
|
||||
|
||||
@anchor{SOCKS}
|
||||
@subsection SOCKS
|
||||
@cindex SOCKS
|
||||
|
||||
People wanting to connect to IRC through a @acronym{SOCKS} proxy are
|
||||
most likely interested in doing so over @acronym{TOR} (The Onion
|
||||
Router). If that's @emph{not} you, please adapt these instructions
|
||||
accordingly. Otherwise, keep in mind that support for Tor is
|
||||
experimental and thus insufficient for safeguarding a user's identity
|
||||
and location, especially in the case of targeted individuals.
|
||||
|
||||
ERC's preferred Tor setup works by accessing a local Tor service
|
||||
through the built-in @file{socks.el} library that ships with Emacs.
|
||||
Other means of accessing Tor, such as via @command{torsocks}, are not
|
||||
supported. Before getting started, check that your Tor service is up
|
||||
and running. You can do that with the following command:
|
||||
|
||||
@example
|
||||
curl --proxy socks5h://localhost:9050 https://check.torproject.org | \
|
||||
grep 'Congratulations'
|
||||
@end example
|
||||
|
||||
Networks and servers differ in how they expose Tor endpoints. In all
|
||||
cases, you'll want to first set the option @code{socks-server} to
|
||||
something appropriate, like @code{("tor" "127.0.0.1" 9050 5)}. For
|
||||
some networks, setting @code{erc-server-connect-function} to
|
||||
@code{socks-open-network-stream} might be enough. Others, like
|
||||
@samp{Libera.Chat}, involve additional setup. At the time of writing,
|
||||
connecting to @samp{Libera.Chat} requires both @acronym{TLS} and a
|
||||
non-@samp{PLAIN} @acronym{SASL} mechanism (@pxref{SASL}). One way to
|
||||
achieve that is by using the @samp{EXTERNAL} mechanism, as shown in
|
||||
the following example:
|
||||
|
||||
@lisp
|
||||
(require 'erc)
|
||||
(require 'socks)
|
||||
|
||||
(let* ((socks-password "")
|
||||
(socks-server '("tor" "localhost" 9050 5))
|
||||
(erc-modules (cons 'sasl erc-modules))
|
||||
(erc-sasl-mechanism 'external)
|
||||
(erc-server-connect-function #'erc-open-socks-tls-stream))
|
||||
(erc-tls
|
||||
:server "libera75jm6of4wxpxt4aynol3xjmbtxgfyjpu34ss4d7r7q2v5zrpyd.onion"
|
||||
:port 6697
|
||||
:nick "jrh"
|
||||
:user "jrandomhacker"
|
||||
:full-name "J. Random Hacker"
|
||||
:client-certificate (list "/home/jrh/key.pem" "/home/jrh/cert.pem")))
|
||||
@end lisp
|
||||
|
||||
@node auth-source
|
||||
@subsection auth-source
|
||||
@cindex auth-source
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
#+language: en
|
||||
#+options: ':t toc:nil author:t email:t num:t
|
||||
#+startup: content
|
||||
#+macro: stable-version 4.1.0
|
||||
#+macro: release-date 2023-02-22
|
||||
#+macro: development-version 4.2.0-dev
|
||||
#+macro: stable-version 4.2.0
|
||||
#+macro: release-date 2023-05-30
|
||||
#+macro: development-version 4.3.0-dev
|
||||
#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
|
||||
#+macro: space @@texinfo:@: @@
|
||||
#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
|
||||
|
@ -77,7 +77,7 @@ combinations of background and foreground values. For small sized
|
|||
text, this corresponds to the WCAG AAA standard, which specifies a
|
||||
minimum rate of distance in relative luminance of 7:1.
|
||||
|
||||
The Modus themes consist of six themes, divided into three subgroups.
|
||||
The Modus themes consist of eight themes, divided into four subgroups.
|
||||
|
||||
- Main themes :: ~modus-operandi~ is the project's main light theme,
|
||||
while ~modus-vivendi~ is its dark counterpart. These two themes are
|
||||
|
@ -101,15 +101,23 @@ The Modus themes consist of six themes, divided into three subgroups.
|
|||
users with deueteranopia or deuteranomaly (mostly yellow and blue
|
||||
hues).
|
||||
|
||||
- Tritanopia themes :: ~modus-operandi-tritanopia~ and its counterpart
|
||||
~modus-vivendi-tritanopia~ are optimized for users with blue-yellow
|
||||
color deficiency. The idea is the same as with the deuteranopia
|
||||
variants: color coding relies only on hues that are accessible to
|
||||
people with tritanopia or tritanomaly, namely, shades of red and
|
||||
cyan.
|
||||
|
||||
To ensure that users have a consistently accessible experience, the
|
||||
themes strive to achieve as close to full face coverage as possible,
|
||||
while still targeting a curated list of well-maintained packages
|
||||
([[#h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19][Face coverage]]).
|
||||
|
||||
The overarching objective of this project is to always offer accessible
|
||||
color combinations. There shall never be a compromise on this
|
||||
principle. If there arises an inescapable trade-off between readability
|
||||
and stylistic considerations, we will always opt for the former.
|
||||
The overarching objective of this project is to always offer
|
||||
accessible color combinations. There shall never be a compromise on
|
||||
this principle. If there arises an inescapable trade-off between
|
||||
usability and stylistic considerations, we will always opt for the
|
||||
former.
|
||||
|
||||
Starting with version 0.12.0 and onwards, the themes are built into GNU
|
||||
Emacs.
|
||||
|
@ -441,6 +449,8 @@ will lead to failures in loading the files. If either or both of those
|
|||
variables need to be changed, their values should be defined before the
|
||||
package declaration of the themes.
|
||||
|
||||
[[#h:aabcada6-810d-4eee-b34a-d2a9c301824d][Make the themes look like what the maintainer uses]]
|
||||
|
||||
** Differences between loading and enabling
|
||||
:properties:
|
||||
:custom_id: h:e68560b3-7fb0-42bc-a151-e015948f8a35
|
||||
|
@ -1066,6 +1076,9 @@ palette variable is =THEME-NAME-palette-overrides=, thus yielding:
|
|||
#+vindex: modus-operandi-tinted-palette-overrides
|
||||
+ ~modus-operandi-tinted-palette-overrides~
|
||||
|
||||
#+vindex: modus-operandi-tritanopia-palette-overrides
|
||||
+ ~modus-operandi-tritanopia-palette-overrides~
|
||||
|
||||
#+vindex: modus-vivendi-palette-overrides
|
||||
+ ~modus-vivendi-palette-overrides~
|
||||
|
||||
|
@ -1075,6 +1088,9 @@ palette variable is =THEME-NAME-palette-overrides=, thus yielding:
|
|||
#+vindex: modus-vivendi-tinted-palette-overrides
|
||||
+ ~modus-vivendi-tinted-palette-overrides~
|
||||
|
||||
#+vindex: modus-vivendi-tritanopia-palette-overrides
|
||||
+ ~modus-vivendi-tritanopia-palette-overrides~
|
||||
|
||||
Theme-specific overrides take precedence over the shared ones. It is
|
||||
strongly advised that shared overrides do NOT alter color values, as
|
||||
those will not be appropriate for both dark and light themes. Common
|
||||
|
@ -1123,7 +1139,7 @@ For example, the ~modus-operandi-palette~ is like this:
|
|||
#+end_src
|
||||
|
||||
The ~modus-operandi-palette-overrides~ targets the entries that need
|
||||
to be changed. For example, to make the main foreground colour a dark
|
||||
to be changed. For example, to make the main foreground color a dark
|
||||
gray instead of pure black, use a shade of red for comments, and apply
|
||||
a cyan hue to keywords:
|
||||
|
||||
|
@ -1153,15 +1169,30 @@ Named colors can be previewed, such as with the command
|
|||
For a video tutorial that users of all skill levels can approach,
|
||||
watch: https://protesilaos.com/codelog/2022-12-17-modus-themes-v4-demo/.
|
||||
|
||||
*** Palette override presets
|
||||
* Advanced customization
|
||||
:properties:
|
||||
:custom_id: h:f4651d55-8c07-46aa-b52b-bed1e53463bb
|
||||
:end:
|
||||
|
||||
Unlike the predefined customization options which follow a clear pattern
|
||||
of allowing the user to quickly specify their preference, the themes
|
||||
also provide a more flexible, albeit difficult, mechanism to control
|
||||
things with precision ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]).
|
||||
|
||||
This section is of interest only to users who are prepared to maintain
|
||||
their own local tweaks and who are willing to deal with any possible
|
||||
incompatibilities between versioned releases of the themes. As such,
|
||||
they are labeled as "do-it-yourself" or "DIY".
|
||||
|
||||
** Palette override presets
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:b0bc811c-227e-42ec-bf67-15e1f41eb7bc
|
||||
:END:
|
||||
|
||||
This section shows how to refashion the themes by opting in to the
|
||||
stylistic presets we provide. Those presets override the default
|
||||
color mappings to amplify or tone down the overall coloration of the
|
||||
them.
|
||||
color mappings to amplify, tone down, or refashion the overall
|
||||
coloration of the themes.
|
||||
|
||||
To make almost all aspects of the themes less intense, use this:
|
||||
|
||||
|
@ -1187,6 +1218,18 @@ The ~modus-themes-preset-overrides-intense~ makes many background
|
|||
colors accented instead of gray and increases coloration in a number
|
||||
of places. Colors stand out more and are made easier to spot.
|
||||
|
||||
#+vindex: modus-themes-preset-overrides-cooler
|
||||
#+vindex: modus-themes-preset-overrides-warmer
|
||||
For some stylistic variation try the "cooler" and "warmer" presets:
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
;; This:
|
||||
(setq modus-themes-common-palette-overrides modus-themes-preset-overrides-cooler)
|
||||
|
||||
;; Or:
|
||||
(setq modus-themes-common-palette-overrides modus-themes-preset-overrides-warmer)
|
||||
#+end_src
|
||||
|
||||
Note that the user is not limited to those presets. The system of
|
||||
overrides we provide makes it possible to tweak the value of each
|
||||
individual named color and to change how values are assigned to
|
||||
|
@ -1214,7 +1257,7 @@ the general idea (extra space for didactic purposes):
|
|||
,@modus-themes-preset-overrides-intense))
|
||||
#+end_src
|
||||
|
||||
*** Stylistic variants using palette overrides
|
||||
** Stylistic variants using palette overrides
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:df1199d8-eaba-47db-805d-6b568a577bf3
|
||||
:END:
|
||||
|
@ -1226,7 +1269,7 @@ to take effect. To apply overrides at startup simply define them
|
|||
before the call that loads the theme. Remember that we also provide
|
||||
presets that are easier to apply ([[#h:b0bc811c-227e-42ec-bf67-15e1f41eb7bc][Palette override presets]]).
|
||||
|
||||
**** Make the mode line borderless
|
||||
*** Make the mode line borderless
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:80ddba52-e188-411f-8cc0-480ebd75befe
|
||||
:END:
|
||||
|
@ -1263,7 +1306,7 @@ set their color to that of the underlying background.
|
|||
(border-mode-line-inactive bg-mode-line-inactive)))
|
||||
#+end_src
|
||||
|
||||
**** Make the active mode line colorful
|
||||
*** Make the active mode line colorful
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:e8d781be-eefc-4a81-ac4e-5ed156190df7
|
||||
:END:
|
||||
|
@ -1307,7 +1350,7 @@ have a blue mode line for ~modus-operandi~ and a red one for
|
|||
(border-mode-line-active bg-red-subtle)))
|
||||
#+end_src
|
||||
|
||||
**** Make the tab bar more or less colorful
|
||||
*** Make the tab bar more or less colorful
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:096658d7-a0bd-4a99-b6dc-9b20a20cda37
|
||||
:END:
|
||||
|
@ -1359,7 +1402,7 @@ manual.
|
|||
(bg-tab-other bg-cyan-subtle)))
|
||||
#+end_src
|
||||
|
||||
**** Make the fringe invisible or another color
|
||||
*** Make the fringe invisible or another color
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:c312dcac-36b6-4a1f-b1f5-ab1c9abe27b0
|
||||
:END:
|
||||
|
@ -1393,7 +1436,7 @@ or continuation lines.
|
|||
'((fringe bg-blue-nuanced)))
|
||||
#+end_src
|
||||
|
||||
**** Make links use subtle or no underlines
|
||||
*** Make links use subtle or no underlines
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:6c1d1dea-5cbf-4d92-b7bb-570a7a23ffe9
|
||||
:END:
|
||||
|
@ -1417,7 +1460,7 @@ that underline mappings can read correctly.
|
|||
(underline-link-symbolic unspecified)))
|
||||
#+end_src
|
||||
|
||||
**** Make prompts more or less colorful
|
||||
*** Make prompts more or less colorful
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:bd75b43a-0bf1-45e7-b8b4-20944ca8b7f8
|
||||
:END:
|
||||
|
@ -1454,7 +1497,7 @@ block we show how to add or remove color from prompts.
|
|||
(bg-prompt bg-yellow-subtle))) ; try to replace "subtle" with "intense"
|
||||
#+end_src
|
||||
|
||||
**** Make completion matches more or less colorful
|
||||
*** Make completion matches more or less colorful
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:d959f789-0517-4636-8780-18123f936f91
|
||||
:END:
|
||||
|
@ -1541,7 +1584,7 @@ colors to two:
|
|||
|
||||
The user can mix and match to their liking.
|
||||
|
||||
**** Make comments yellow and strings green
|
||||
*** Make comments yellow and strings green
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:26f53daa-0065-48dc-88ab-6a718d16cd95
|
||||
:END:
|
||||
|
@ -1584,7 +1627,7 @@ reproduce the effect, but also how to tweak it to one's liking.
|
|||
(string yellow-cooler)))
|
||||
#+end_src
|
||||
|
||||
**** Make code syntax use the old alt-syntax style
|
||||
*** Make code syntax use the old alt-syntax style
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:c8767172-bf11-4c96-81dc-e736c464fc9c
|
||||
:END:
|
||||
|
@ -1669,7 +1712,7 @@ The user can always mix and match styles to their liking.
|
|||
|
||||
[[#h:943063da-7b27-4ba4-9afe-f8fe77652fd1][Make use of alternative styles for code syntax]].
|
||||
|
||||
**** Make use of alternative styles for code syntax
|
||||
*** Make use of alternative styles for code syntax
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:943063da-7b27-4ba4-9afe-f8fe77652fd1
|
||||
:END:
|
||||
|
@ -1760,7 +1803,7 @@ theme palette.
|
|||
(variable cyan-warmer)))
|
||||
#+end_src
|
||||
|
||||
**** Make matching parenthesis more or less intense
|
||||
*** Make matching parenthesis more or less intense
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:259cf8f5-48ec-4b13-8a69-5d6387094468
|
||||
:END:
|
||||
|
@ -1790,7 +1833,7 @@ to enable underlines for those highlights.
|
|||
(underline-paren-match fg-main)))
|
||||
#+end_src
|
||||
|
||||
**** Make box buttons more or less gray
|
||||
*** Make box buttons more or less gray
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:4f6b6ca3-f5bb-4830-8312-baa232305360
|
||||
:END:
|
||||
|
@ -1818,7 +1861,7 @@ inactive ones.
|
|||
(fg-button-inactive "gray50")))
|
||||
#+end_src
|
||||
|
||||
**** Make TODO and DONE more or less intense
|
||||
*** Make TODO and DONE more or less intense
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:b57bb50b-a863-4ea8-bb38-6de2275fa868
|
||||
:END:
|
||||
|
@ -1858,7 +1901,7 @@ to subdue them.
|
|||
'((prose-done fg-dim)))
|
||||
#+end_src
|
||||
|
||||
**** Make headings more or less colorful
|
||||
*** Make headings more or less colorful
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:11297984-85ea-4678-abe9-a73aeab4676a
|
||||
:END:
|
||||
|
@ -1915,7 +1958,7 @@ match styles at will.
|
|||
(overline-heading-1 border)))
|
||||
#+end_src
|
||||
|
||||
**** Make Org agenda more or less colorful
|
||||
*** Make Org agenda more or less colorful
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:a5af0452-a50f-481d-bf60-d8143f98105f
|
||||
:END:
|
||||
|
@ -1980,7 +2023,25 @@ A third example that makes the agenda more blue:
|
|||
(date-weekend fg-dim)))
|
||||
#+end_src
|
||||
|
||||
**** Make inline code in prose use alternative styles
|
||||
Yet another example that also affects =DONE= and =TODO= keywords:
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
;; Change dates to a set of more subtle combinations. Deadlines are a
|
||||
;; shade of magenta, scheduled dates are a shade of green that
|
||||
;; complements that of the deadlines, weekday headings use the main
|
||||
;; foreground color while weekends are a shade of gray. The DONE
|
||||
;; keyword is a faint blue-gray while TODO is yellow.
|
||||
(setq modus-themes-common-palette-overrides
|
||||
'((date-deadline magenta-warmer)
|
||||
(date-scheduled green-cooler)
|
||||
(date-weekday fg-main)
|
||||
(date-event fg-dim)
|
||||
(date-now blue)
|
||||
(prose-done fg-alt)
|
||||
(prose-todo yellow)))
|
||||
#+end_src
|
||||
|
||||
*** Make inline code in prose use alternative styles
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:bb5b396f-5532-4d52-ab13-149ca24854f1
|
||||
:END:
|
||||
|
@ -2039,7 +2100,7 @@ do not show every possible permutation.
|
|||
(prose-verbatim red-warmer)))
|
||||
#+end_src
|
||||
|
||||
**** Make mail citations and headers more or less colorful
|
||||
*** Make mail citations and headers more or less colorful
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:7da7a4ad-5d3a-4f11-9796-5a1abed0f0c4
|
||||
:END:
|
||||
|
@ -2108,7 +2169,7 @@ We thus have the following:
|
|||
(mail-other green)))
|
||||
#+end_src
|
||||
|
||||
**** Make the region preserve text colors, plus other styles
|
||||
*** Make the region preserve text colors, plus other styles
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:c8605d37-66e1-42aa-986e-d7514c3af6fe
|
||||
:END:
|
||||
|
@ -2148,7 +2209,7 @@ with an appropriate foreground value.
|
|||
(fg-region fg-main)))
|
||||
#+end_src
|
||||
|
||||
**** Make mouse highlights more or less colorful
|
||||
*** Make mouse highlights more or less colorful
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:b5cab69d-d7cb-451c-8ff9-1f545ceb6caf
|
||||
:END:
|
||||
|
@ -2177,7 +2238,7 @@ mapping that covers mouse hover effects and related highlights:
|
|||
'((bg-hover bg-green-subtle)))
|
||||
#+end_src
|
||||
|
||||
**** Make language underlines less colorful
|
||||
*** Make language underlines less colorful
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:03dbd5af-6bae-475e-85a2-cec189f69598
|
||||
:END:
|
||||
|
@ -2210,7 +2271,7 @@ by code linters and prose spell checkers.
|
|||
(underline-note green-intense)))
|
||||
#+end_src
|
||||
|
||||
**** Make line numbers use alternative styles
|
||||
*** Make line numbers use alternative styles
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:b6466f51-cb58-4007-9ebe-53a27af655c7
|
||||
:END:
|
||||
|
@ -2252,7 +2313,7 @@ this section we show how to affect the ~display-line-numbers-mode~.
|
|||
(bg-line-number-active bg-cyan-intense)))
|
||||
#+end_src
|
||||
|
||||
**** Make diffs use only a foreground
|
||||
*** Make diffs use only a foreground
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:b3761482-bcbf-4990-a41e-4866fb9dad15
|
||||
:END:
|
||||
|
@ -2268,7 +2329,7 @@ adjustments for them by overriding their palettes directly instead of
|
|||
just using the "common" overrides.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
;; Diffs with only foreground colours. Word-wise ("refined") diffs
|
||||
;; Diffs with only foreground colors. Word-wise ("refined") diffs
|
||||
;; have a gray background to draw attention to themselves.
|
||||
(setq modus-themes-common-palette-overrides
|
||||
'((bg-added unspecified)
|
||||
|
@ -2316,7 +2377,7 @@ just using the "common" overrides.
|
|||
(fg-removed-intense yellow-intense)))
|
||||
#+end_src
|
||||
|
||||
**** Make deuteranopia diffs red and blue instead of yellow and blue
|
||||
*** Make deuteranopia diffs red and blue instead of yellow and blue
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:16389ea1-4cb6-4b18-9409-384324113541
|
||||
:END:
|
||||
|
@ -2367,20 +2428,110 @@ respectively. This is achieved by overriding the "changed" and
|
|||
(fg-removed-intense "#ff9095")))
|
||||
#+end_src
|
||||
|
||||
* Advanced customization
|
||||
:properties:
|
||||
:custom_id: h:f4651d55-8c07-46aa-b52b-bed1e53463bb
|
||||
:end:
|
||||
*** Make the themes look like what the maintainer uses
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:aabcada6-810d-4eee-b34a-d2a9c301824d
|
||||
:END:
|
||||
|
||||
Unlike the predefined customization options which follow a clear pattern
|
||||
of allowing the user to quickly specify their preference, the themes
|
||||
also provide a more flexible, albeit difficult, mechanism to control
|
||||
things with precision ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]).
|
||||
Based on what we have learnt from the previous sections of this
|
||||
manual, here is what Protesilaos uses:
|
||||
|
||||
This section is of interest only to users who are prepared to maintain
|
||||
their own local tweaks and who are willing to deal with any possible
|
||||
incompatibilities between versioned releases of the themes. As such,
|
||||
they are labeled as "do-it-yourself" or "DIY".
|
||||
#+begin_src emacs-lisp
|
||||
;; Always reload the theme for changes to take effect!
|
||||
|
||||
(setq modus-themes-custom-auto-reload nil
|
||||
modus-themes-to-toggle '(modus-operandi modus-vivendi)
|
||||
modus-themes-mixed-fonts t
|
||||
modus-themes-variable-pitch-ui nil
|
||||
modus-themes-italic-constructs t
|
||||
modus-themes-bold-constructs nil
|
||||
modus-themes-org-blocks nil
|
||||
modus-themes-completions '((t . (extrabold)))
|
||||
modus-themes-prompts nil
|
||||
modus-themes-headings
|
||||
'((agenda-structure . (variable-pitch light 2.2))
|
||||
(agenda-date . (variable-pitch regular 1.3))
|
||||
(t . (regular 1.15))))
|
||||
|
||||
(setq modus-themes-common-palette-overrides
|
||||
'((cursor magenta-cooler)
|
||||
;; Make the fringe invisible.
|
||||
(fringe unspecified)
|
||||
;; Make line numbers less intense and add a shade of cyan
|
||||
;; for the current line number.
|
||||
(fg-line-number-inactive "gray50")
|
||||
(fg-line-number-active cyan-cooler)
|
||||
(bg-line-number-inactive unspecified)
|
||||
(bg-line-number-active unspecified)
|
||||
;; Make the current line of `hl-line-mode' a fine shade of
|
||||
;; gray (though also see my `lin' package).
|
||||
(bg-hl-line bg-dim)
|
||||
;; Make the region have a cyan-green background with no
|
||||
;; specific foreground (use foreground of underlying text).
|
||||
;; "bg-sage" refers to Salvia officinalis, else the common
|
||||
;; sage.
|
||||
(bg-region bg-sage)
|
||||
(fg-region unspecified)
|
||||
;; Make matching parentheses a shade of magenta. It
|
||||
;; complements the region nicely.
|
||||
(bg-paren-match bg-magenta-intense)
|
||||
;; Make email citations faint and neutral, reducing the
|
||||
;; default four colors to two; make mail headers cyan-blue.
|
||||
(mail-cite-0 fg-dim)
|
||||
(mail-cite-1 blue-faint)
|
||||
(mail-cite-2 fg-dim)
|
||||
(mail-cite-3 blue-faint)
|
||||
(mail-part cyan-warmer)
|
||||
(mail-recipient blue-warmer)
|
||||
(mail-subject magenta-cooler)
|
||||
(mail-other cyan-warmer)
|
||||
;; Change dates to a set of more subtle combinations.
|
||||
(date-deadline magenta-cooler)
|
||||
(date-scheduled magenta)
|
||||
(date-weekday fg-main)
|
||||
(date-event fg-dim)
|
||||
(date-now blue-faint)
|
||||
;; Make tags (Org) less colorful and tables look the same as
|
||||
;; the default foreground.
|
||||
(prose-done cyan-cooler)
|
||||
(prose-tag fg-dim)
|
||||
(prose-table fg-main)
|
||||
;; Make headings less colorful (though I never use deeply
|
||||
;; nested headings).
|
||||
(fg-heading-2 blue-faint)
|
||||
(fg-heading-3 magenta-faint)
|
||||
(fg-heading-4 blue-faint)
|
||||
(fg-heading-5 magenta-faint)
|
||||
(fg-heading-6 blue-faint)
|
||||
(fg-heading-7 magenta-faint)
|
||||
(fg-heading-8 blue-faint)
|
||||
;; Make the active mode line a fine shade of lavender
|
||||
;; (purple) and tone down the gray of the inactive mode
|
||||
;; lines.
|
||||
(bg-mode-line-active bg-lavender)
|
||||
(border-mode-line-active bg-lavender)
|
||||
|
||||
(bg-mode-line-inactive bg-dim)
|
||||
(border-mode-line-inactive bg-inactive)
|
||||
;; Make the prompts a shade of magenta, to fit in nicely with
|
||||
;; the overall blue-cyan-purple style of the other overrides.
|
||||
;; Add a nuanced background as well.
|
||||
(bg-prompt bg-magenta-nuanced)
|
||||
(fg-prompt magenta-cooler)
|
||||
;; Tweak some more constructs for stylistic constistency.
|
||||
(name blue-warmer)
|
||||
(identifier magenta-faint)
|
||||
(keybind magenta-cooler)
|
||||
(accent-0 magenta-cooler)
|
||||
(accent-1 cyan-cooler)
|
||||
(accent-2 blue-warmer)
|
||||
(accent-3 red-cooler)))
|
||||
|
||||
;; Make the active mode line have a pseudo 3D effect (this assumes
|
||||
;; you are using the default mode line and not an extra package).
|
||||
(custom-set-faces
|
||||
'(mode-line ((t :box (:style released-button)))))
|
||||
#+end_src
|
||||
|
||||
** More accurate colors in terminal emulators
|
||||
:PROPERTIES:
|
||||
|
@ -2584,8 +2735,9 @@ for palette overrides. Else it reads only the default palette.
|
|||
|
||||
[[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]].
|
||||
|
||||
With optional =THEME= as a symbol among ~modus-themes-items~, use the
|
||||
palette of that item. Else use the current Modus theme.
|
||||
With optional =THEME= as a symbol among ~modus-themes-items~ (alias
|
||||
~modus-themes-collection~), use the palette of that item. Else use
|
||||
the current Modus theme.
|
||||
|
||||
If =COLOR= is not present in the palette, this function returns the
|
||||
~unspecified~ symbol, which is safe when used as a face attribute's
|
||||
|
@ -3479,6 +3631,90 @@ In this document, we cover ~modus-themes-after-load-theme-hook~ though
|
|||
the user can replace it with ~after-enable-theme-hook~ should they
|
||||
need to (provided they understand the implications).
|
||||
|
||||
** Use more spacious margins or padding in Emacs frames
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:43bcb5d0-e25f-470f-828c-662cee9e21f1
|
||||
:END:
|
||||
|
||||
By default, Emacs frames try to maximize the number of characters that
|
||||
fit in the current visible portion of the buffer. Users may prefer to
|
||||
have some extra padding instead. This can make Emacs frames look more
|
||||
pleasant, but also make it easier to identify the currently active
|
||||
window.
|
||||
|
||||
The way to implement such padding is two-fold:
|
||||
|
||||
1. In the =early-init.el= file instruct Emacs to use a higher value
|
||||
for the ~internal-border-width~ of all frames, as well as for the
|
||||
~right-divider-width~. The former concerns the outer boundaries of
|
||||
Emacs frames, while the latter pertains to dividers between Emacs
|
||||
windows.
|
||||
|
||||
2. Make the relevant faces invisible by changing the value of their
|
||||
relevant attributes to that of the current theme's main background.
|
||||
|
||||
The parameters of Emacs frames are specified in the variables
|
||||
~initial-frame-alist~ and ~default-frame-alist~. The "initial frame"
|
||||
refers to the first frame that appears on Emacs startup. The
|
||||
"default" refers to the fallback values that apply to all other frames
|
||||
that Emacs creates (unless those are explicitly overridden by a
|
||||
bespoke ~make-frame~ call).
|
||||
|
||||
In detail, first we use the same values for the two frame alist variables:
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
;; This must go in the early-init.el so that it applies to the initial
|
||||
;; frame.
|
||||
(dolist (var '(default-frame-alist initial-frame-alist))
|
||||
(add-to-list var '(right-divider-width . 20))
|
||||
(add-to-list var '(internal-border-width . 20)))
|
||||
#+end_src
|
||||
|
||||
What the ~dolist~ does is to call ~add-to-list~ for the two variables
|
||||
we specify there. This economizes on typing.
|
||||
|
||||
Then we define a function that makes the relevant faces invisible.
|
||||
The reason we do this with a function is so we can hook it to the
|
||||
"post load" phase of a theme, thus applying the new background value
|
||||
(otherwise you keep the old background, which likely means that the
|
||||
faces will no longer be invisible).
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(defun my-modus-themes-invisible-dividers ()
|
||||
"Make window dividers invisible.
|
||||
Add this to the `modus-themes-post-load-hook'."
|
||||
(let ((bg (face-background 'default)))
|
||||
(custom-set-faces
|
||||
`(fringe ((t :background ,bg :foreground ,bg)))
|
||||
`(window-divider ((t :background ,bg :foreground ,bg)))
|
||||
`(window-divider-first-pixel ((t :background ,bg :foreground ,bg)))
|
||||
`(window-divider-last-pixel ((t :background ,bg :foreground ,bg))))))
|
||||
|
||||
(add-hook 'modus-themes-post-load-hook #'my-modus-themes-invisible-dividers)
|
||||
#+end_src
|
||||
|
||||
The above will work only for themes that belong to the Modus family.
|
||||
For users of Emacs version 29 or higher, there exists a theme-agnostic
|
||||
hook that takes a function with one argument---that of the theme---and
|
||||
calls in the the "post enable" phase of theme loading. Here is the
|
||||
above snippet, with the necessary tweaks:
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(defun my-modus-themes-invisible-dividers (_theme)
|
||||
"Make window dividers for THEME invisible."
|
||||
(let ((bg (face-background 'default)))
|
||||
(custom-set-faces
|
||||
`(fringe ((t :background ,bg :foreground ,bg)))
|
||||
`(window-divider ((t :background ,bg :foreground ,bg)))
|
||||
`(window-divider-first-pixel ((t :background ,bg :foreground ,bg)))
|
||||
`(window-divider-last-pixel ((t :background ,bg :foreground ,bg))))))
|
||||
|
||||
(add-hook 'enable-theme-functions #'my-modus-themes-invisible-dividers)
|
||||
#+end_src
|
||||
|
||||
Users of older versions of Emacs can read the entry herein about
|
||||
defining their own theme-agnostic hook ([[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][A theme-agnostic hook for theme loading]]).
|
||||
|
||||
** Custom hl-todo colors
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:2ef83a21-2f0a-441e-9634-473feb940743
|
||||
|
@ -3636,7 +3872,7 @@ have lots of extensions, so the "full support" may not be 100% true…
|
|||
+ csv-mode
|
||||
+ ctrlf
|
||||
+ custom (what you get with {{{kbd(M-x customize)}}})
|
||||
- dashboard
|
||||
+ dashboard
|
||||
+ deadgrep
|
||||
+ deft
|
||||
+ devdocs
|
||||
|
@ -3651,6 +3887,7 @@ have lots of extensions, so the "full support" may not be 100% true…
|
|||
+ dired-narrow
|
||||
+ dired-subtree
|
||||
+ diredfl
|
||||
+ disk-usage
|
||||
+ display-fill-column-indicator-mode
|
||||
+ doom-modeline
|
||||
+ ediff
|
||||
|
@ -3715,6 +3952,8 @@ have lots of extensions, so the "full support" may not be 100% true…
|
|||
+ ivy*
|
||||
+ ivy-posframe
|
||||
+ jira (org-jira)
|
||||
+ jit-spell
|
||||
+ jinx
|
||||
+ journalctl-mode
|
||||
+ js2-mode
|
||||
+ julia
|
||||
|
@ -3733,7 +3972,6 @@ have lots of extensions, so the "full support" may not be 100% true…
|
|||
+ minimap
|
||||
+ mode-line
|
||||
+ mood-line
|
||||
+ moody
|
||||
+ mpdel
|
||||
+ mu4e
|
||||
+ multiple-cursors
|
||||
|
@ -3780,6 +4018,7 @@ have lots of extensions, so the "full support" may not be 100% true…
|
|||
+ rg (rg.el)
|
||||
+ ripgrep
|
||||
+ rmail
|
||||
+ rst-mode
|
||||
+ ruler-mode
|
||||
+ sesman
|
||||
+ shell-script-mode
|
||||
|
@ -3969,9 +4208,9 @@ length elsewhere in this manual:
|
|||
;; Doom should not be implementing such hacks because themes
|
||||
;; cannot support them:
|
||||
;; <https://protesilaos.com/codelog/2022-08-04-doom-git-gutter-modus-themes/>.
|
||||
`(git-gutter-fr:added ((,c :foreground ,bg-added-intense)))
|
||||
`(git-gutter-fr:deleted ((,c :foreground ,bg-removed-intense)))
|
||||
`(git-gutter-fr:modified ((,c :foreground ,bg-changed-intense))))))
|
||||
`(git-gutter-fr:added ((,c :foreground ,bg-added-fringe)))
|
||||
`(git-gutter-fr:deleted ((,c :foreground ,bg-removed-fringe)))
|
||||
`(git-gutter-fr:modified ((,c :foreground ,bg-changed-fringe))))))
|
||||
|
||||
(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
|
||||
#+end_src
|
||||
|
@ -4941,9 +5180,10 @@ themes remains consistent.
|
|||
|
||||
The former criterion should be crystal clear as it pertains to the
|
||||
scientific foundations of the themes: high legibility and taking care
|
||||
of the needs of users with red-green color deficiency (deuteranopia)
|
||||
by avoiding red+green color coding paradigms and/or by providing
|
||||
yellow+blue variants ([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]]).
|
||||
of the needs of users with red-green/blue-yellow color deficiency
|
||||
(deuteranopia and tritanopia) by avoiding red+green color coding
|
||||
paradigms and/or by providing yellow+blue variants for deuteranopia
|
||||
and red+cyan for tritanopia ([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]]).
|
||||
|
||||
The latter criterion is the "je ne sais quoi" of the artistic aspect of
|
||||
the themes, which is partially fleshed out in this manual.
|
||||
|
@ -5099,13 +5339,14 @@ The Modus themes are a collective effort. Every bit of work matters.
|
|||
+ Contributions to code or documentation :: Aleksei Gusev, Alex
|
||||
Griffin, Anders Johansson, Antonio Ruiz, Basil L.{{{space()}}}
|
||||
Contovounesios, Björn Lindström, Carlo Zancanaro, Christian Tietze,
|
||||
Daniel Mendler, Eli Zaretskii, Fritz Grabo, Illia Ostapyshyn, Kévin
|
||||
Le Gouguec, Koen van Greevenbroek, Kostadin Ninev, Madhavan
|
||||
Krishnan, Manuel Giraud, Markus Beppler, Matthew Stevenson, Mauro
|
||||
Aranda, Nicolas De Jaeghere, Paul David, Philip Kaludercic, Pierre
|
||||
Téchoueyres, Rudolf Adamkovič, Sergey Nichiporchik, Stephen Gildea,
|
||||
Shreyas Ragavan, Stefan Kangas, Utkarsh Singh, Vincent Murphy,
|
||||
Xinglu Chen, Yuanchen Xie, okamsn.
|
||||
Daniel Mendler, David Edmondson, Eli Zaretskii, Fritz Grabo, Gautier
|
||||
Ponsinet, Illia Ostapyshyn, Kévin Le Gouguec, Koen van Greevenbroek,
|
||||
Kostadin Ninev, Madhavan Krishnan, Manuel Giraud, Markus Beppler,
|
||||
Matthew Stevenson, Mauro Aranda, Nacho Barrientos, Nicolas De
|
||||
Jaeghere, Paul David, Philip Kaludercic, Pierre Téchoueyres, Rudolf
|
||||
Adamkovič, Sergey Nichiporchik, Shreyas Ragavan, Stefan Kangas,
|
||||
Stephen Gildea, Steve Downey, Tomasz Hołubowicz, Utkarsh Singh,
|
||||
Vincent Murphy, Xinglu Chen, Yuanchen Xie, okamsn.
|
||||
|
||||
+ Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
|
||||
Adrian Manea, Aleksei Pirogov, Alex Griffin, Alex Koen, Alex
|
||||
|
@ -5127,19 +5368,20 @@ The Modus themes are a collective effort. Every bit of work matters.
|
|||
Bestley, Mark Burton, Mark Simpson, Marko Kocic, Markus Beppler,
|
||||
Matt Armstrong, Matthias Fuchs, Mattias Engdegård, Mauro Aranda,
|
||||
Maxime Tréca, Michael Goldenberg, Morgan Smith, Morgan Willcock,
|
||||
Murilo Pereira, Nicky van Foreest, Nicolas De Jaeghere, Pablo
|
||||
Stafforini, Paul Poloskov, Pengji Zhang, Pete Kazmier, Peter Wu,
|
||||
Philip Kaludercic, Pierre Téchoueyres, Przemysław Kryger, Robert
|
||||
Hepple, Roman Rudakov, Russell Sim, Ryan Phillips, Rytis Paškauskas,
|
||||
Rudolf Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška,
|
||||
Shreyas Ragavan, Simon Pugnet, Tassilo Horn, Thanos Apollo, Thibaut
|
||||
Verron, Thomas Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley,
|
||||
Tomasz Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent
|
||||
Foley, Zoltan Kiraly. As well as users: Ben, CsBigDataHub1, Emacs
|
||||
Contrib, Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer Emacs,
|
||||
TheBlob42, TitusMu, Trey, bepolymathe, bit9tream, bangedorrunt,
|
||||
derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn,
|
||||
pRot0ta1p, soaringbird, tumashu, wakamenod.
|
||||
Murilo Pereira, Nicky van Foreest, Nicolas De Jaeghere, Nicolas
|
||||
Semrau, Oliver Epper, Pablo Stafforini, Paul Poloskov, Pengji Zhang,
|
||||
Pete Kazmier, Peter Wu, Philip Kaludercic, Pierre Téchoueyres,
|
||||
Przemysław Kryger, Robert Hepple, Roman Rudakov, Russell Sim, Ryan
|
||||
Phillips, Rytis Paškauskas, Rudolf Adamkovič, Sam Kleinman, Samuel
|
||||
Culpepper, Saša Janiška, Shreyas Ragavan, Simon Pugnet, Steve
|
||||
Downey, Tassilo Horn, Thanos Apollo, Thibaut Verron, Thomas
|
||||
Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz
|
||||
Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent Foley,
|
||||
Zoltan Kiraly. As well as users: Ben, CsBigDataHub1, Emacs Contrib,
|
||||
Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer Emacs, TheBlob42,
|
||||
TitusMu, Trey, bepolymathe, bit9tream, bangedorrunt, derek-upham,
|
||||
doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn, pRot0ta1p,
|
||||
soaringbird, tumashu, wakamenod.
|
||||
|
||||
+ Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii,
|
||||
Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core
|
||||
|
|
30
etc/ERC-NEWS
30
etc/ERC-NEWS
|
@ -131,14 +131,26 @@ been restored with a slightly revised role contingent on a few
|
|||
assumptions explained in its doc string. For clarity, it has been
|
||||
renamed 'erc-ensure-target-buffer-on-privmsg'.
|
||||
|
||||
** Improved interplay between buffer truncation and message logging.
|
||||
While most of these improvements are subtle, some affect everyday use.
|
||||
For example, users of the 'truncate' module may notice that truncation
|
||||
now happens between messages rather than arbitrary lines. And those
|
||||
with the default 'erc-insert-timestamp-left-and-right' for their
|
||||
'erc-insert-timestamp-function' will see date stamps reprinted after
|
||||
every "/CLEAR" but omitted from any logs. One notable casualty of
|
||||
these changes has been the deprecation of the ancient option
|
||||
'erc-truncate-buffer-on-save'. Users of the 'log' module can achieve
|
||||
the same effect by issuing a "/CLEAR" at the prompt.
|
||||
|
||||
** Miscellaneous UX changes.
|
||||
Some minor quality-of-life niceties have finally made their way to
|
||||
ERC. For example, the function 'erc-echo-timestamp' is now
|
||||
interactive and can be invoked on any message to view its timestamp in
|
||||
the echo area. The command 'erc-button-previous' now moves to the
|
||||
beginning instead of the end of buttons. And the 'irccontrols' module
|
||||
now supports additional colors and special handling for "spoilers"
|
||||
(hidden text).
|
||||
beginning instead of the end of buttons. A new command, 'erc-news',
|
||||
can now be invoked to visit this very file. And the 'irccontrols'
|
||||
module now supports additional colors and special handling for
|
||||
"spoilers" (hidden text).
|
||||
|
||||
** Changes in the library API.
|
||||
|
||||
|
@ -215,12 +227,12 @@ changes are encouraged to voice their concerns on the bug list.
|
|||
*** Miscellaneous changes
|
||||
Two helper macros from GNU ELPA's Compat library are now available to
|
||||
third-party modules as 'erc-compat-call' and 'erc-compat-function'.
|
||||
In the area of buttons, 'Info-goto-node' has been supplanted by plain
|
||||
old 'info' in 'erc-button-alist', and the bracketed "<URL:...>"
|
||||
pattern entry has been removed because it was more or less redundant.
|
||||
And the "TAB" key is now bound to a new command, 'erc-tab', that only
|
||||
calls 'completion-at-point' when point is in the input area and
|
||||
module-specific commands, like 'erc-button-next', otherwise.
|
||||
In 'erc-button-alist', 'Info-goto-node' has been supplanted by plain
|
||||
old 'info', and the "<URL:...>" entry has been removed because it was
|
||||
more or less redundant. In all ERC buffers, the "<TAB>" key is now
|
||||
bound to a new command, 'erc-tab', that calls 'completion-at-point'
|
||||
inside the input area and otherwise dispatches module-specific
|
||||
commands, like 'erc-button-next'.
|
||||
|
||||
|
||||
* Changes in ERC 5.5
|
||||
|
|
11
etc/NEWS
11
etc/NEWS
|
@ -425,15 +425,16 @@ A major mode based on the tree-sitter library for editing Elixir
|
|||
files.
|
||||
|
||||
---
|
||||
** The highly accessible Modus themes collection has six items.
|
||||
** The highly accessible Modus themes collection has eight items.
|
||||
The 'modus-operandi' and 'modus-vivendi' are the main themes that have
|
||||
been part of Emacs since version 28. The former is light, the latter
|
||||
dark. In addition to these, we now have 'modus-operandi-tinted' and
|
||||
'modus-vivendi-tinted' for easier legibility, as well as
|
||||
'modus-operandi-deuteranopia' and 'modus-vivendi-deuteranopia' to
|
||||
cover the needs of users with red-green color deficiency. The Info
|
||||
manual "(modus-themes) Top" describes the details and showcases all
|
||||
their customization options.
|
||||
'modus-operandi-deuteranopia', 'modus-vivendi-deuteranopia',
|
||||
'modus-operandi-tritanopia', and 'modus-vivendi-tritanopia' to cover
|
||||
the needs of users with red-green or blue-yellow color deficiency.
|
||||
The Info manual "(modus-themes) Top" describes the details and
|
||||
showcases all their customization options.
|
||||
|
||||
|
||||
* Incompatible Lisp Changes in Emacs 30.1
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
;;; modus-operandi-deuteranopia-theme.el --- Elegant, highly legible and customizable light theme -*- lexical-binding:t -*-
|
||||
;;; modus-operandi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a white background -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||
|
||||
|
@ -44,7 +44,7 @@
|
|||
(require 'modus-themes))
|
||||
|
||||
(deftheme modus-operandi-deuteranopia
|
||||
"Elegant, highly legible and customizable light theme.
|
||||
"Deuteranopia-optimized theme with a white background.
|
||||
This variant is optimized for users with red-green color
|
||||
deficiency (deuteranopia). It conforms with the highest
|
||||
legibility standard for color contrast between background and
|
||||
|
@ -77,9 +77,9 @@ standard).")
|
|||
(green-cooler "#00663f")
|
||||
(green-faint "#2a5045")
|
||||
(green-intense "#008900")
|
||||
(yellow "#7b5000")
|
||||
(yellow-warmer "#884900")
|
||||
(yellow-cooler "#7a4f2f")
|
||||
(yellow "#695500")
|
||||
(yellow-warmer "#973300")
|
||||
(yellow-cooler "#77492f")
|
||||
(yellow-faint "#624416")
|
||||
(yellow-intense "#808000")
|
||||
(blue "#0031a9")
|
||||
|
@ -139,10 +139,10 @@ standard).")
|
|||
|
||||
;;; Graphs
|
||||
|
||||
(bg-graph-red-0 "#b0b029")
|
||||
(bg-graph-red-0 "#d0b029")
|
||||
(bg-graph-red-1 "#e0cab4")
|
||||
(bg-graph-green-0 "#90b7c0")
|
||||
(bg-graph-green-1 "#a3dfe5")
|
||||
(bg-graph-green-0 "#8ad080")
|
||||
(bg-graph-green-1 "#afdfa5")
|
||||
(bg-graph-yellow-0 "#ffcf00")
|
||||
(bg-graph-yellow-1 "#f9ff00")
|
||||
(bg-graph-blue-0 "#7f9fff")
|
||||
|
@ -223,17 +223,24 @@ standard).")
|
|||
(identifier yellow-faint)
|
||||
|
||||
(err yellow-warmer)
|
||||
(warning yellow-cooler)
|
||||
(warning yellow)
|
||||
(info blue)
|
||||
|
||||
(underline-err yellow-intense)
|
||||
(underline-warning magenta-faint)
|
||||
(underline-note cyan)
|
||||
|
||||
(bg-prominent-err bg-yellow-intense)
|
||||
(fg-prominent-err fg-main)
|
||||
(bg-prominent-warning bg-magenta-intense)
|
||||
(fg-prominent-warning fg-main)
|
||||
(bg-prominent-note bg-cyan-intense)
|
||||
(fg-prominent-note fg-main)
|
||||
|
||||
;;;; Code mappings
|
||||
|
||||
(builtin magenta-warmer)
|
||||
(comment yellow)
|
||||
(comment yellow-cooler)
|
||||
(constant blue-cooler)
|
||||
(docstring green-faint)
|
||||
(docmarkup magenta-faint)
|
||||
|
@ -278,6 +285,7 @@ standard).")
|
|||
(date-event fg-alt)
|
||||
(date-holiday yellow-warmer)
|
||||
(date-now blue-faint)
|
||||
(date-range fg-alt)
|
||||
(date-scheduled yellow-cooler)
|
||||
(date-weekday cyan)
|
||||
(date-weekend yellow-faint)
|
||||
|
@ -307,13 +315,22 @@ standard).")
|
|||
|
||||
(mail-cite-0 blue-warmer)
|
||||
(mail-cite-1 yellow)
|
||||
(mail-cite-2 blue-cooler)
|
||||
(mail-cite-2 cyan-faint)
|
||||
(mail-cite-3 yellow-faint)
|
||||
(mail-part blue)
|
||||
(mail-recipient blue)
|
||||
(mail-subject yellow-warmer)
|
||||
(mail-subject yellow-cooler)
|
||||
(mail-other cyan-faint)
|
||||
|
||||
;;;; Mark mappings
|
||||
|
||||
(bg-mark-delete bg-yellow-subtle)
|
||||
(fg-mark-delete yellow)
|
||||
(bg-mark-select bg-cyan-subtle)
|
||||
(fg-mark-select cyan)
|
||||
(bg-mark-other bg-magenta-subtle)
|
||||
(fg-mark-other magenta)
|
||||
|
||||
;;;; Prompt mappings
|
||||
|
||||
(fg-prompt blue)
|
||||
|
@ -344,6 +361,12 @@ standard).")
|
|||
(rainbow-7 yellow-faint)
|
||||
(rainbow-8 cyan)
|
||||
|
||||
;;;; Space mappings
|
||||
|
||||
(bg-space unspecified)
|
||||
(fg-space border)
|
||||
(bg-space-err bg-yellow-intense)
|
||||
|
||||
;;;; Heading mappings
|
||||
|
||||
(fg-heading-0 cyan-cooler)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
;;; modus-operandi-theme.el --- Elegant, highly legible and customizable light theme -*- lexical-binding:t -*-
|
||||
;;; modus-operandi-theme.el --- Elegant, highly legible theme with a white background -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||
|
||||
|
@ -44,7 +44,7 @@
|
|||
(require 'modus-themes))
|
||||
|
||||
(deftheme modus-operandi
|
||||
"Elegant, highly legible and customizable light theme.
|
||||
"Elegant, highly legible theme with a white background.
|
||||
Conforms with the highest legibility standard for color contrast
|
||||
between background and foreground in any given piece of text,
|
||||
which corresponds to a minimum contrast in relative luminance of
|
||||
|
@ -139,11 +139,11 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
|
||||
(bg-graph-red-0 "#ef7969")
|
||||
(bg-graph-red-1 "#ffaab4")
|
||||
(bg-graph-green-0 "#4faa09")
|
||||
(bg-graph-green-1 "#8fef00")
|
||||
(bg-graph-green-0 "#2fe029")
|
||||
(bg-graph-green-1 "#75ef30")
|
||||
(bg-graph-yellow-0 "#ffcf00")
|
||||
(bg-graph-yellow-1 "#f9ff00")
|
||||
(bg-graph-blue-0 "#7090ff")
|
||||
(bg-graph-blue-0 "#7f90ff")
|
||||
(bg-graph-blue-1 "#9fc6ff")
|
||||
(bg-graph-magenta-0 "#e07fff")
|
||||
(bg-graph-magenta-1 "#fad0ff")
|
||||
|
@ -228,6 +228,13 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(underline-warning yellow-intense)
|
||||
(underline-note cyan-intense)
|
||||
|
||||
(bg-prominent-err bg-red-intense)
|
||||
(fg-prominent-err fg-main)
|
||||
(bg-prominent-warning bg-yellow-intense)
|
||||
(fg-prominent-warning fg-main)
|
||||
(bg-prominent-note bg-cyan-intense)
|
||||
(fg-prominent-note fg-main)
|
||||
|
||||
;;;; Code mappings
|
||||
|
||||
(builtin magenta-warmer)
|
||||
|
@ -274,8 +281,9 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(date-common cyan)
|
||||
(date-deadline red)
|
||||
(date-event fg-alt)
|
||||
(date-holiday magenta)
|
||||
(date-holiday red-cooler)
|
||||
(date-now fg-main)
|
||||
(date-range fg-alt)
|
||||
(date-scheduled yellow-warmer)
|
||||
(date-weekday cyan)
|
||||
(date-weekend red-faint)
|
||||
|
@ -312,6 +320,15 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(mail-subject magenta-warmer)
|
||||
(mail-other magenta-faint)
|
||||
|
||||
;;;; Mark mappings
|
||||
|
||||
(bg-mark-delete bg-red-subtle)
|
||||
(fg-mark-delete red)
|
||||
(bg-mark-select bg-cyan-subtle)
|
||||
(fg-mark-select cyan)
|
||||
(bg-mark-other bg-yellow-subtle)
|
||||
(fg-mark-other yellow)
|
||||
|
||||
;;;; Prompt mappings
|
||||
|
||||
(fg-prompt cyan-cooler)
|
||||
|
@ -342,6 +359,12 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(rainbow-7 blue-warmer)
|
||||
(rainbow-8 magenta-warmer)
|
||||
|
||||
;;;; Space mappings
|
||||
|
||||
(bg-space unspecified)
|
||||
(fg-space border)
|
||||
(bg-space-err bg-red-intense)
|
||||
|
||||
;;;; Heading mappings
|
||||
|
||||
(fg-heading-0 cyan-cooler)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
;;; modus-operandi-tinted-theme.el --- Elegant, highly legible and customizable light theme -*- lexical-binding:t -*-
|
||||
;;; modus-operandi-tinted-theme.el --- Elegant, highly legible theme with a light ochre background -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||
|
||||
|
@ -43,7 +43,7 @@
|
|||
(require 'modus-themes))
|
||||
|
||||
(deftheme modus-operandi-tinted
|
||||
"Elegant, highly legible and customizable light theme.
|
||||
"Elegant, highly legible theme with a light ochre background.
|
||||
Conforms with the highest legibility standard for color contrast
|
||||
between background and foreground in any given piece of text,
|
||||
which corresponds to a minimum contrast in relative luminance of
|
||||
|
@ -138,11 +138,11 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
|
||||
(bg-graph-red-0 "#ef7969")
|
||||
(bg-graph-red-1 "#ffaab4")
|
||||
(bg-graph-green-0 "#4faa09")
|
||||
(bg-graph-green-1 "#8fef00")
|
||||
(bg-graph-green-0 "#2fe029")
|
||||
(bg-graph-green-1 "#75ef30")
|
||||
(bg-graph-yellow-0 "#ffcf00")
|
||||
(bg-graph-yellow-1 "#f9ff00")
|
||||
(bg-graph-blue-0 "#7090ff")
|
||||
(bg-graph-blue-0 "#7f90ff")
|
||||
(bg-graph-blue-1 "#9fc6ff")
|
||||
(bg-graph-magenta-0 "#e07fff")
|
||||
(bg-graph-magenta-1 "#fad0ff")
|
||||
|
@ -227,6 +227,13 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(underline-warning yellow-intense)
|
||||
(underline-note cyan-intense)
|
||||
|
||||
(bg-prominent-err bg-red-intense)
|
||||
(fg-prominent-err fg-main)
|
||||
(bg-prominent-warning bg-yellow-intense)
|
||||
(fg-prominent-warning fg-main)
|
||||
(bg-prominent-note bg-cyan-intense)
|
||||
(fg-prominent-note fg-main)
|
||||
|
||||
;;;; Code mappings
|
||||
|
||||
(builtin magenta-warmer)
|
||||
|
@ -273,8 +280,9 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(date-common cyan)
|
||||
(date-deadline red)
|
||||
(date-event fg-alt)
|
||||
(date-holiday magenta)
|
||||
(date-holiday red-cooler)
|
||||
(date-now fg-main)
|
||||
(date-range fg-alt)
|
||||
(date-scheduled yellow-warmer)
|
||||
(date-weekday cyan)
|
||||
(date-weekend red-faint)
|
||||
|
@ -311,6 +319,15 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(mail-subject magenta-warmer)
|
||||
(mail-other magenta-faint)
|
||||
|
||||
;;;; Mark mappings
|
||||
|
||||
(bg-mark-delete bg-red-subtle)
|
||||
(fg-mark-delete red)
|
||||
(bg-mark-select bg-cyan-subtle)
|
||||
(fg-mark-select cyan)
|
||||
(bg-mark-other bg-yellow-subtle)
|
||||
(fg-mark-other yellow)
|
||||
|
||||
;;;; Prompt mappings
|
||||
|
||||
(fg-prompt cyan-cooler)
|
||||
|
@ -341,6 +358,12 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(rainbow-7 blue-warmer)
|
||||
(rainbow-8 magenta-warmer)
|
||||
|
||||
;;;; Space mappings
|
||||
|
||||
(bg-space unspecified)
|
||||
(fg-space border)
|
||||
(bg-space-err bg-red-intense)
|
||||
|
||||
;;;; Heading mappings
|
||||
|
||||
(fg-heading-0 cyan-cooler)
|
||||
|
|
442
etc/themes/modus-operandi-tritanopia-theme.el
Normal file
442
etc/themes/modus-operandi-tritanopia-theme.el
Normal file
|
@ -0,0 +1,442 @@
|
|||
;;; modus-operandi-tritanopia-theme.el --- Tritanopia-optimized theme with a white background -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Protesilaos Stavrou <info@protesilaos.com>
|
||||
;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
|
||||
;; URL: https://git.sr.ht/~protesilaos/modus-themes
|
||||
;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
|
||||
;; Keywords: faces, theme, accessibility
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs 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.
|
||||
;;
|
||||
;; GNU Emacs 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
;;
|
||||
;; The Modus themes conform with the highest standard for
|
||||
;; color-contrast accessibility between background and foreground
|
||||
;; values (WCAG AAA). Please refer to the official Info manual for
|
||||
;; further documentation (distributed with the themes, or available
|
||||
;; at: <https://protesilaos.com/emacs/modus-themes>).
|
||||
|
||||
;;; Code:
|
||||
|
||||
|
||||
|
||||
(eval-and-compile
|
||||
(unless (and (fboundp 'require-theme)
|
||||
load-file-name
|
||||
(equal (file-name-directory load-file-name)
|
||||
(expand-file-name "themes/" data-directory))
|
||||
(require-theme 'modus-themes t))
|
||||
(require 'modus-themes))
|
||||
|
||||
(deftheme modus-operandi-tritanopia
|
||||
"Tritanopia-optimized theme with a white background.
|
||||
This variant is optimized for users with blue-yellow color
|
||||
deficiency (tritanopia). It conforms with the highest
|
||||
legibility standard for color contrast between background and
|
||||
foreground in any given piece of text, which corresponds to a
|
||||
minimum contrast in relative luminance of 7:1 (WCAG AAA
|
||||
standard).")
|
||||
|
||||
(defconst modus-operandi-tritanopia-palette
|
||||
'(
|
||||
;;; Basic values
|
||||
|
||||
(bg-main "#ffffff")
|
||||
(bg-dim "#f0f0f0")
|
||||
(fg-main "#000000")
|
||||
(fg-dim "#595959")
|
||||
(fg-alt "#193668")
|
||||
(bg-active "#c4c4c4")
|
||||
(bg-inactive "#e0e0e0")
|
||||
(border "#9f9f9f")
|
||||
|
||||
;;; Common accent foregrounds
|
||||
|
||||
(red "#a60000")
|
||||
(red-warmer "#b21100")
|
||||
(red-cooler "#a0132f")
|
||||
(red-faint "#702000")
|
||||
(red-intense "#d00000")
|
||||
(green "#006800")
|
||||
(green-warmer "#316500")
|
||||
(green-cooler "#00663f")
|
||||
(green-faint "#2a5045")
|
||||
(green-intense "#008900")
|
||||
(yellow "#695500")
|
||||
(yellow-warmer "#973300")
|
||||
(yellow-cooler "#77492f")
|
||||
(yellow-faint "#624416")
|
||||
(yellow-intense "#808000")
|
||||
(blue "#0031a9")
|
||||
(blue-warmer "#3548cf")
|
||||
(blue-cooler "#0000b0")
|
||||
(blue-faint "#003497")
|
||||
(blue-intense "#0000ff")
|
||||
(magenta "#721045")
|
||||
(magenta-warmer "#8f0075")
|
||||
(magenta-cooler "#531ab6")
|
||||
(magenta-faint "#7c318f")
|
||||
(magenta-intense "#cd22bd")
|
||||
(cyan "#005e8b")
|
||||
(cyan-warmer "#3f578f")
|
||||
(cyan-cooler "#005f5f")
|
||||
(cyan-faint "#004f5f")
|
||||
(cyan-intense "#008899")
|
||||
|
||||
;;; Uncommon accent foregrounds
|
||||
|
||||
(rust "#8a290f")
|
||||
(gold "#80601f")
|
||||
(olive "#56692d")
|
||||
(slate "#2f3f83")
|
||||
(indigo "#4a3a8a")
|
||||
(maroon "#731c52")
|
||||
(pink "#7b435c")
|
||||
|
||||
;;; Common accent backgrounds
|
||||
|
||||
(bg-red-intense "#ff8f88")
|
||||
(bg-green-intense "#8adf80")
|
||||
(bg-yellow-intense "#f3d000")
|
||||
(bg-blue-intense "#bfc9ff")
|
||||
(bg-magenta-intense "#dfa0f0")
|
||||
(bg-cyan-intense "#a4d5f9")
|
||||
|
||||
(bg-red-subtle "#ffcfbf")
|
||||
(bg-green-subtle "#b3fabf")
|
||||
(bg-yellow-subtle "#fff576")
|
||||
(bg-blue-subtle "#ccdfff")
|
||||
(bg-magenta-subtle "#ffddff")
|
||||
(bg-cyan-subtle "#bfefff")
|
||||
|
||||
(bg-red-nuanced "#fff1f0")
|
||||
(bg-green-nuanced "#ecf7ed")
|
||||
(bg-yellow-nuanced "#fff3da")
|
||||
(bg-blue-nuanced "#f3f3ff")
|
||||
(bg-magenta-nuanced "#fdf0ff")
|
||||
(bg-cyan-nuanced "#ebf6fa")
|
||||
|
||||
;;; Uncommon accent backgrounds
|
||||
|
||||
(bg-ochre "#f0e0cc")
|
||||
(bg-lavender "#dfdbfa")
|
||||
(bg-sage "#c0e7d4")
|
||||
|
||||
;;; Graphs
|
||||
|
||||
(bg-graph-red-0 "#ef7969")
|
||||
(bg-graph-red-1 "#ffaab4")
|
||||
(bg-graph-green-0 "#70c3b0")
|
||||
(bg-graph-green-1 "#a3dfe5")
|
||||
(bg-graph-yellow-0 "#d99f9f")
|
||||
(bg-graph-yellow-1 "#ffb58f")
|
||||
(bg-graph-blue-0 "#80a0df")
|
||||
(bg-graph-blue-1 "#9fcaff")
|
||||
(bg-graph-magenta-0 "#efafcf")
|
||||
(bg-graph-magenta-1 "#ffdaef")
|
||||
(bg-graph-cyan-0 "#7fd3ed")
|
||||
(bg-graph-cyan-1 "#afefff")
|
||||
|
||||
;;; Special purpose
|
||||
|
||||
(bg-completion "#afdfef")
|
||||
(bg-hover "#ffafbc")
|
||||
(bg-hover-secondary "#9fdfff")
|
||||
(bg-hl-line "#dfeaec")
|
||||
(bg-region "#bdbdbd")
|
||||
(fg-region "#000000")
|
||||
|
||||
(bg-char-0 "#ff8a5f")
|
||||
(bg-char-1 "#bf7aff")
|
||||
(bg-char-2 "#7fe0e0")
|
||||
|
||||
(bg-mode-line-active "#afe0f2")
|
||||
(fg-mode-line-active "#0f0f0f")
|
||||
(border-mode-line-active "#2f4f44")
|
||||
(bg-mode-line-inactive "#e6e6e6")
|
||||
(fg-mode-line-inactive "#585858")
|
||||
(border-mode-line-inactive "#a3a3a3")
|
||||
|
||||
(modeline-err "#8f0000")
|
||||
(modeline-warning "#6f306f")
|
||||
(modeline-info "#00445f")
|
||||
|
||||
(bg-tab-bar "#dfdfdf")
|
||||
(bg-tab-current "#ffffff")
|
||||
(bg-tab-other "#c2c2c2")
|
||||
|
||||
;;; Diffs
|
||||
|
||||
(bg-added "#b5e7ff")
|
||||
(bg-added-faint "#c6f6ff")
|
||||
(bg-added-refine "#9adcef")
|
||||
(bg-added-fringe "#1782cc")
|
||||
(fg-added "#005079")
|
||||
(fg-added-intense "#0043aa")
|
||||
|
||||
(bg-changed "#eecfdf")
|
||||
(bg-changed-faint "#f0dde5")
|
||||
(bg-changed-refine "#e0b0d0")
|
||||
(bg-changed-fringe "#9f6ab0")
|
||||
(fg-changed "#6f1343")
|
||||
(fg-changed-intense "#7f0f9f")
|
||||
|
||||
(bg-removed "#ffd8d5")
|
||||
(bg-removed-faint "#ffe9e9")
|
||||
(bg-removed-refine "#f3b5af")
|
||||
(bg-removed-fringe "#d84a4f")
|
||||
(fg-removed "#8f1313")
|
||||
(fg-removed-intense "#aa2222")
|
||||
|
||||
(bg-diff-context "#f3f3f3")
|
||||
|
||||
;;; Paren match
|
||||
|
||||
(bg-paren-match "#5fcfff")
|
||||
(bg-paren-expression "#efd3f5")
|
||||
(underline-paren-match unspecified)
|
||||
|
||||
;;; Mappings
|
||||
|
||||
;;;; General mappings
|
||||
|
||||
(fringe bg-dim)
|
||||
(cursor red-intense)
|
||||
|
||||
(keybind red)
|
||||
(name red-cooler)
|
||||
(identifier red-faint)
|
||||
|
||||
(err red-warmer)
|
||||
(warning magenta)
|
||||
(info cyan)
|
||||
|
||||
(underline-err red-intense)
|
||||
(underline-warning magenta-intense)
|
||||
(underline-note cyan-intense)
|
||||
|
||||
(bg-prominent-err bg-red-intense)
|
||||
(fg-prominent-err fg-main)
|
||||
(bg-prominent-warning bg-magenta-intense)
|
||||
(fg-prominent-warning fg-main)
|
||||
(bg-prominent-note bg-cyan-intense)
|
||||
(fg-prominent-note fg-main)
|
||||
|
||||
;;;; Code mappings
|
||||
|
||||
(builtin magenta)
|
||||
(comment red-faint)
|
||||
(constant green-cooler)
|
||||
(docstring fg-alt)
|
||||
(docmarkup magenta-faint)
|
||||
(fnname cyan-warmer)
|
||||
(keyword red-cooler)
|
||||
(preprocessor red-warmer)
|
||||
(string cyan)
|
||||
(type blue-warmer)
|
||||
(variable cyan-cooler)
|
||||
(rx-construct red)
|
||||
(rx-backslash magenta)
|
||||
|
||||
;;;; Accent mappings
|
||||
|
||||
(accent-0 cyan)
|
||||
(accent-1 red-warmer)
|
||||
(accent-2 cyan-cooler)
|
||||
(accent-3 magenta)
|
||||
|
||||
;;;; Button mappings
|
||||
|
||||
(fg-button-active fg-main)
|
||||
(fg-button-inactive fg-dim)
|
||||
(bg-button-active bg-active)
|
||||
(bg-button-inactive bg-dim)
|
||||
|
||||
;;;; Completion mappings
|
||||
|
||||
(fg-completion-match-0 cyan)
|
||||
(fg-completion-match-1 red-warmer)
|
||||
(fg-completion-match-2 magenta)
|
||||
(fg-completion-match-3 cyan-cooler)
|
||||
(bg-completion-match-0 unspecified)
|
||||
(bg-completion-match-1 unspecified)
|
||||
(bg-completion-match-2 unspecified)
|
||||
(bg-completion-match-3 unspecified)
|
||||
|
||||
;;;; Date mappings
|
||||
|
||||
(date-common cyan-cooler)
|
||||
(date-deadline red)
|
||||
(date-event fg-alt)
|
||||
(date-holiday red)
|
||||
(date-now fg-main)
|
||||
(date-range fg-alt)
|
||||
(date-scheduled magenta)
|
||||
(date-weekday cyan)
|
||||
(date-weekend red-faint)
|
||||
|
||||
;;;; Line number mappings
|
||||
|
||||
(fg-line-number-inactive fg-dim)
|
||||
(fg-line-number-active fg-main)
|
||||
(bg-line-number-inactive bg-dim)
|
||||
(bg-line-number-active bg-active)
|
||||
|
||||
;;;; Link mappings
|
||||
|
||||
(fg-link cyan)
|
||||
(bg-link unspecified)
|
||||
(underline-link cyan)
|
||||
|
||||
(fg-link-symbolic cyan-cooler)
|
||||
(bg-link-symbolic unspecified)
|
||||
(underline-link-symbolic cyan-cooler)
|
||||
|
||||
(fg-link-visited magenta)
|
||||
(bg-link-visited unspecified)
|
||||
(underline-link-visited magenta)
|
||||
|
||||
;;;; Mail mappings
|
||||
|
||||
(mail-cite-0 cyan-faint)
|
||||
(mail-cite-1 red-faint)
|
||||
(mail-cite-2 magenta-warmer)
|
||||
(mail-cite-3 cyan-warmer)
|
||||
(mail-part cyan-cooler)
|
||||
(mail-recipient cyan)
|
||||
(mail-subject red-cooler)
|
||||
(mail-other cyan)
|
||||
|
||||
;;;; Mark mappings
|
||||
|
||||
(bg-mark-delete bg-red-subtle)
|
||||
(fg-mark-delete red)
|
||||
(bg-mark-select bg-cyan-subtle)
|
||||
(fg-mark-select cyan)
|
||||
(bg-mark-other bg-magenta-subtle)
|
||||
(fg-mark-other magenta)
|
||||
|
||||
;;;; Prompt mappings
|
||||
|
||||
(fg-prompt cyan-cooler)
|
||||
(bg-prompt unspecified)
|
||||
|
||||
;;;; Prose mappings
|
||||
|
||||
(prose-block fg-dim)
|
||||
(prose-code cyan)
|
||||
(prose-done cyan)
|
||||
(prose-macro red-warmer)
|
||||
(prose-metadata fg-dim)
|
||||
(prose-metadata-value fg-alt)
|
||||
(prose-table fg-alt)
|
||||
(prose-tag fg-alt)
|
||||
(prose-todo red)
|
||||
(prose-verbatim magenta-warmer)
|
||||
|
||||
;;;; Rainbow mappings
|
||||
|
||||
(rainbow-0 cyan)
|
||||
(rainbow-1 red)
|
||||
(rainbow-2 cyan-warmer)
|
||||
(rainbow-3 red-cooler)
|
||||
(rainbow-4 cyan-cooler)
|
||||
(rainbow-5 magenta)
|
||||
(rainbow-6 cyan-faint)
|
||||
(rainbow-7 magenta-faint)
|
||||
(rainbow-8 red-faint)
|
||||
|
||||
;;;; Space mappings
|
||||
|
||||
(bg-space unspecified)
|
||||
(fg-space border)
|
||||
(bg-space-err bg-red-intense)
|
||||
|
||||
;;;; Heading mappings
|
||||
|
||||
(fg-heading-0 cyan-cooler)
|
||||
(fg-heading-1 fg-main)
|
||||
(fg-heading-2 red-faint)
|
||||
(fg-heading-3 cyan-faint)
|
||||
(fg-heading-4 magenta)
|
||||
(fg-heading-5 green-faint)
|
||||
(fg-heading-6 magenta-faint)
|
||||
(fg-heading-7 cyan-warmer)
|
||||
(fg-heading-8 fg-dim)
|
||||
|
||||
(bg-heading-0 unspecified)
|
||||
(bg-heading-1 unspecified)
|
||||
(bg-heading-2 unspecified)
|
||||
(bg-heading-3 unspecified)
|
||||
(bg-heading-4 unspecified)
|
||||
(bg-heading-5 unspecified)
|
||||
(bg-heading-6 unspecified)
|
||||
(bg-heading-7 unspecified)
|
||||
(bg-heading-8 unspecified)
|
||||
|
||||
(overline-heading-0 unspecified)
|
||||
(overline-heading-1 unspecified)
|
||||
(overline-heading-2 unspecified)
|
||||
(overline-heading-3 unspecified)
|
||||
(overline-heading-4 unspecified)
|
||||
(overline-heading-5 unspecified)
|
||||
(overline-heading-6 unspecified)
|
||||
(overline-heading-7 unspecified)
|
||||
(overline-heading-8 unspecified))
|
||||
"The entire palette of the `modus-operandi-tritanopia' theme.
|
||||
|
||||
Named colors have the form (COLOR-NAME HEX-VALUE) with the former
|
||||
as a symbol and the latter as a string.
|
||||
|
||||
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
|
||||
with both as symbols. The latter is a named color that already
|
||||
exists in the palette and is associated with a HEX-VALUE.")
|
||||
|
||||
(defcustom modus-operandi-tritanopia-palette-overrides nil
|
||||
"Overrides for `modus-operandi-tritanopia-palette'.
|
||||
|
||||
Mirror the elements of the aforementioned palette, overriding
|
||||
their value.
|
||||
|
||||
For overrides that are shared across all of the Modus themes,
|
||||
refer to `modus-themes-common-palette-overrides'.
|
||||
|
||||
Theme-specific overrides take precedence over shared overrides.
|
||||
The idea of common overrides is to change semantic color
|
||||
mappings, such as to make the cursor red. Wherea theme-specific
|
||||
overrides can also be used to change the value of a named color,
|
||||
such as what hexadecimal RGB value the red-warmer symbol
|
||||
represents."
|
||||
:group 'modus-themes
|
||||
:package-version '(modus-themes . "4.0.0")
|
||||
:version "30.1"
|
||||
:type '(repeat (list symbol (choice symbol string)))
|
||||
:set #'modus-themes--set-option
|
||||
:initialize #'custom-initialize-default
|
||||
:link '(info-link "(modus-themes) Palette overrides"))
|
||||
|
||||
(modus-themes-theme modus-operandi-tritanopia
|
||||
modus-operandi-tritanopia-palette
|
||||
modus-operandi-tritanopia-palette-overrides)
|
||||
|
||||
(provide-theme 'modus-operandi-tritanopia))
|
||||
|
||||
;;;###theme-autoload
|
||||
(put 'modus-operandi-tritanopia 'theme-properties '(:background-mode light :kind color-scheme :family modus))
|
||||
|
||||
;;; modus-operandi-tritanopia-theme.el ends here
|
|
@ -6,7 +6,7 @@
|
|||
;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
|
||||
;; URL: https://git.sr.ht/~protesilaos/modus-themes
|
||||
;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
|
||||
;; Version: 4.1.0
|
||||
;; Version: 4.2.0
|
||||
;; Package-Requires: ((emacs "27.1"))
|
||||
;; Keywords: faces, theme, accessibility
|
||||
|
||||
|
@ -45,14 +45,15 @@
|
|||
"User options for the Modus themes.
|
||||
The Modus themes conform with the WCAG AAA standard for color
|
||||
contrast between background and foreground combinations (a
|
||||
minimum contrast of 7:1---the highest standard of its kind). The
|
||||
themes also strive to empower users with red-green color
|
||||
deficiency: this is achieved through customization variables that
|
||||
replace all relevant instances of green with blue, as well as the
|
||||
overall design of the themes which relies mostly on colors that
|
||||
cover the blue-cyan-magenta side of the spectrum."
|
||||
minimum contrast of 7:1---the highest standard of its kind).
|
||||
|
||||
The Modus themes collection includes themes that are optimized
|
||||
for people with red-green or blue-yellow color
|
||||
deficiency (deuteranopia or tritanopia, respectively)."
|
||||
:group 'faces
|
||||
:link '(info-link "(modus-themes) Top")
|
||||
:link '(url-link :tag "Homepage" "https://protesilaos.com/emacs/modus-themes")
|
||||
:link '(url-link :tag "Sample pictures" "https://protesilaos.com/emacs/modus-themes-pictures")
|
||||
:prefix "modus-themes-"
|
||||
:tag "Modus Themes")
|
||||
|
||||
|
@ -60,6 +61,8 @@ cover the blue-cyan-magenta side of the spectrum."
|
|||
"Faces defined by the Modus themes."
|
||||
:group 'modus-themes
|
||||
:link '(info-link "(modus-themes) Top")
|
||||
:link '(url-link :tag "Homepage" "https://protesilaos.com/emacs/modus-themes")
|
||||
:link '(url-link :tag "Sample pictures" "https://protesilaos.com/emacs/modus-themes-pictures")
|
||||
:prefix "modus-themes-"
|
||||
:tag "Modus Themes Faces")
|
||||
|
||||
|
@ -128,6 +131,14 @@ cover the blue-cyan-magenta side of the spectrum."
|
|||
:version "30.1"
|
||||
:group 'modus-themes-faces))
|
||||
|
||||
(dolist (scope '(note warning error))
|
||||
(custom-declare-face
|
||||
(intern (format "modus-themes-prominent-%s" scope))
|
||||
nil (format "Prominent notification of type %s." scope)
|
||||
:package-version '(modus-themes . "4.2.0")
|
||||
:version "30.1"
|
||||
:group 'modus-themes-faces))
|
||||
|
||||
(dolist (scope '(current lazy))
|
||||
(custom-declare-face
|
||||
(intern (format "modus-themes-search-%s" scope))
|
||||
|
@ -360,10 +371,14 @@ set this variable to a nil value."
|
|||
:type 'boolean
|
||||
:link '(info-link "(modus-themes) Disable other themes"))
|
||||
|
||||
(defvaralias 'modus-themes-collection 'modus-themes-items
|
||||
"Alias of `modus-themes-items'.")
|
||||
|
||||
(defconst modus-themes-items
|
||||
'( modus-operandi modus-vivendi
|
||||
modus-operandi-tinted modus-vivendi-tinted
|
||||
modus-operandi-deuteranopia modus-vivendi-deuteranopia)
|
||||
modus-operandi-deuteranopia modus-vivendi-deuteranopia
|
||||
modus-operandi-tritanopia modus-vivendi-tritanopia)
|
||||
"Symbols of the Modus themes.")
|
||||
|
||||
(defcustom modus-themes-to-toggle '(modus-operandi modus-vivendi)
|
||||
|
@ -928,12 +943,17 @@ colorful/intense. Grays are toned down, gray backgrounds are
|
|||
removed from some contexts, and almost all accent colors are
|
||||
desaturated.
|
||||
|
||||
All the preset overrides the themes provide (including this one):
|
||||
|
||||
- `modus-themes-preset-overrides-faint'
|
||||
- `modus-themes-preset-overrides-intense'
|
||||
- `modus-themes-preset-overrides-cooler'
|
||||
- `modus-themes-preset-overrides-warmer'
|
||||
|
||||
To set a preset, assign its symbol without a quote as the value
|
||||
of the `modus-themes-common-palette-overrides' or as the value of
|
||||
theme-specific options such as `modus-operandi-palette-overrides'.
|
||||
|
||||
Also see `modus-themes-preset-overrides-intense'.
|
||||
|
||||
For overriding named colors and/or semantic color mappings read
|
||||
Info node `(modus-themes) Option for palette overrides'.")
|
||||
|
||||
|
@ -957,6 +977,7 @@ Info node `(modus-themes) Option for palette overrides'.")
|
|||
(date-event blue)
|
||||
(date-holiday magenta-warmer)
|
||||
(date-now blue-faint)
|
||||
(date-range blue)
|
||||
(date-scheduled yellow-warmer)
|
||||
(date-weekday fg-main)
|
||||
(date-weekend red-faint)
|
||||
|
@ -1016,11 +1037,124 @@ This changes many parts of the theme to make them look more
|
|||
colorful/intense. Many background colors are accented and
|
||||
coloration is increased to pop out more.
|
||||
|
||||
All the preset overrides the themes provide (including this one):
|
||||
|
||||
- `modus-themes-preset-overrides-faint'
|
||||
- `modus-themes-preset-overrides-intense'
|
||||
- `modus-themes-preset-overrides-cooler'
|
||||
- `modus-themes-preset-overrides-warmer'
|
||||
|
||||
To set a preset, assign its symbol without a quote as the value
|
||||
of the `modus-themes-common-palette-overrides' or as the value of
|
||||
theme-specific options such as `modus-operandi-palette-overrides'.
|
||||
|
||||
Also see `modus-themes-preset-overrides-faint'.
|
||||
For overriding named colors and/or semantic color mappings read
|
||||
Info node `(modus-themes) Option for palette overrides'.")
|
||||
|
||||
(defvar modus-themes-preset-overrides-cooler
|
||||
'((fg-prompt blue-cooler)
|
||||
|
||||
(builtin magenta-faint)
|
||||
(constant blue-cooler)
|
||||
(fnname cyan-cooler)
|
||||
(keyword magenta-cooler)
|
||||
(preprocessor blue)
|
||||
(string blue-warmer)
|
||||
(type green-cooler)
|
||||
(variable cyan)
|
||||
(rx-construct blue-cooler)
|
||||
(rx-backslash red)
|
||||
|
||||
(name blue-warmer)
|
||||
(identifier magenta-faint)
|
||||
|
||||
(date-deadline magenta-cooler)
|
||||
(date-scheduled yellow-cooler)
|
||||
(date-weekday blue-faint)
|
||||
(date-weekend red-faint)
|
||||
|
||||
(mail-cite-0 blue-faint)
|
||||
(mail-cite-1 cyan-cooler)
|
||||
(mail-cite-2 magenta-faint)
|
||||
(mail-cite-3 yellow-cooler)
|
||||
(mail-part cyan)
|
||||
(mail-recipient blue-warmer)
|
||||
(mail-subject magenta-cooler)
|
||||
(mail-other blue)
|
||||
|
||||
(prose-tag fg-dim)
|
||||
(prose-verbatim blue-cooler))
|
||||
"Preset of palette overrides with cooler colors.
|
||||
|
||||
This changes parts of the palette to use more blue and
|
||||
blue-tinted colors.
|
||||
|
||||
All the preset overrides the themes provide (including this one):
|
||||
|
||||
- `modus-themes-preset-overrides-faint'
|
||||
- `modus-themes-preset-overrides-intense'
|
||||
- `modus-themes-preset-overrides-cooler'
|
||||
- `modus-themes-preset-overrides-warmer'
|
||||
|
||||
To set a preset, assign its symbol without a quote as the value
|
||||
of the `modus-themes-common-palette-overrides' or as the value of
|
||||
theme-specific options such as `modus-operandi-palette-overrides'.
|
||||
|
||||
For overriding named colors and/or semantic color mappings read
|
||||
Info node `(modus-themes) Option for palette overrides'.")
|
||||
|
||||
(defvar modus-themes-preset-overrides-warmer
|
||||
'((fg-prompt magenta-warmer)
|
||||
|
||||
(builtin magenta)
|
||||
(constant blue-warmer)
|
||||
(fnname magenta-cooler)
|
||||
(keyword magenta-warmer)
|
||||
(preprocessor red-cooler)
|
||||
(string olive)
|
||||
(type cyan-cooler)
|
||||
(variable cyan)
|
||||
(rx-construct blue-cooler)
|
||||
(rx-backslash red-warmer)
|
||||
|
||||
(name blue-warmer)
|
||||
(identifier magenta)
|
||||
(keybind magenta-warmer)
|
||||
|
||||
(accent-0 magenta-warmer)
|
||||
(accent-1 cyan)
|
||||
(accent-2 blue-warmer)
|
||||
(accent-3 red-cooler)
|
||||
|
||||
(date-common cyan-cooler)
|
||||
(date-holiday magenta-warmer)
|
||||
|
||||
(mail-cite-0 magenta-faint)
|
||||
(mail-cite-1 cyan-cooler)
|
||||
(mail-cite-2 green-warmer)
|
||||
(mail-cite-3 red-faint)
|
||||
(mail-part cyan)
|
||||
(mail-recipient magenta)
|
||||
(mail-subject blue-warmer)
|
||||
(mail-other magenta-warmer)
|
||||
|
||||
(prose-macro red-cooler)
|
||||
(prose-tag fg-dim))
|
||||
"Preset of palette overrides with warmer colors.
|
||||
|
||||
This changes many parts of the theme to use warmer colors,
|
||||
including green and yellow.
|
||||
|
||||
All the preset overrides the themes provide (including this one):
|
||||
|
||||
- `modus-themes-preset-overrides-faint'
|
||||
- `modus-themes-preset-overrides-intense'
|
||||
- `modus-themes-preset-overrides-cooler'
|
||||
- `modus-themes-preset-overrides-warmer'
|
||||
|
||||
To set a preset, assign its symbol without a quote as the value
|
||||
of the `modus-themes-common-palette-overrides' or as the value of
|
||||
theme-specific options such as `modus-operandi-palette-overrides'.
|
||||
|
||||
For overriding named colors and/or semantic color mappings read
|
||||
Info node `(modus-themes) Option for palette overrides'.")
|
||||
|
@ -1123,10 +1257,13 @@ Which themes are disabled is determined by the user option
|
|||
`modus-themes-disable-other-themes'.
|
||||
|
||||
Run the `modus-themes-after-load-theme-hook' as the final step
|
||||
after loading the THEME."
|
||||
after loading the THEME.
|
||||
|
||||
Return THEME."
|
||||
(modus-themes--disable-themes)
|
||||
(load-theme theme :no-confirm)
|
||||
(run-hooks 'modus-themes-after-load-theme-hook))
|
||||
(run-hooks 'modus-themes-after-load-theme-hook)
|
||||
theme)
|
||||
|
||||
(defun modus-themes--retrieve-palette-value (color palette)
|
||||
"Return COLOR from PALETTE.
|
||||
|
@ -1183,14 +1320,19 @@ symbol, which is safe when used as a face attribute's value."
|
|||
(defvar modus-themes--select-theme-history nil
|
||||
"Minibuffer history of `modus-themes--select-prompt'.")
|
||||
|
||||
(defun modus-themes--annotate-theme (theme)
|
||||
"Return completion annotation for THEME."
|
||||
(format " -- %s" (car (split-string (get (intern theme) 'theme-documentation) "\\."))))
|
||||
|
||||
(defun modus-themes--select-prompt ()
|
||||
"Minibuffer prompt to select a Modus theme."
|
||||
(intern
|
||||
(completing-read
|
||||
"Select Modus theme: "
|
||||
(modus-themes--list-known-themes)
|
||||
nil t nil
|
||||
'modus-themes--select-theme-history)))
|
||||
(let ((completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme)))
|
||||
(intern
|
||||
(completing-read
|
||||
"Select Modus theme: "
|
||||
(modus-themes--list-known-themes)
|
||||
nil t nil
|
||||
'modus-themes--select-theme-history))))
|
||||
|
||||
;;;###autoload
|
||||
(defun modus-themes-select (theme)
|
||||
|
@ -1278,7 +1420,8 @@ color mappings of the palette, instead of its named colors."
|
|||
(defun modus-themes--list-colors-prompt ()
|
||||
"Prompt for Modus theme.
|
||||
Helper function for `modus-themes-list-colors'."
|
||||
(let ((def (format "%s" (modus-themes--current-theme))))
|
||||
(let ((def (format "%s" (modus-themes--current-theme)))
|
||||
(completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme)))
|
||||
(completing-read
|
||||
(format "Use palette from theme [%s]: " def)
|
||||
(modus-themes--list-known-themes) nil t nil
|
||||
|
@ -1544,9 +1687,9 @@ FG and BG are the main colors."
|
|||
`(modus-themes-intense-cyan ((,c :background ,bg-cyan-intense :foreground ,fg-main)))
|
||||
;;;;; mark indicators
|
||||
;; color combinations intended for Dired, Ibuffer, or equivalent
|
||||
`(modus-themes-mark-alt ((,c :inherit bold :background ,bg-yellow-subtle :foreground ,yellow)))
|
||||
`(modus-themes-mark-del ((,c :inherit bold :background ,bg-red-subtle :foreground ,red)))
|
||||
`(modus-themes-mark-sel ((,c :inherit bold :background ,bg-cyan-subtle :foreground ,cyan)))
|
||||
`(modus-themes-mark-alt ((,c :inherit bold :background ,bg-mark-other :foreground ,fg-mark-other)))
|
||||
`(modus-themes-mark-del ((,c :inherit bold :background ,bg-mark-delete :foreground ,fg-mark-delete)))
|
||||
`(modus-themes-mark-sel ((,c :inherit bold :background ,bg-mark-select :foreground ,fg-mark-select)))
|
||||
;;;;; heading levels
|
||||
;; styles for regular headings used in Org, Markdown, Info, etc.
|
||||
`(modus-themes-heading-0 ((,c ,@(modus-themes--heading 0 fg-heading-0 bg-heading-0 overline-heading-0))))
|
||||
|
@ -1562,6 +1705,10 @@ FG and BG are the main colors."
|
|||
`(modus-themes-lang-error ((,c :underline (:style wave :color ,underline-err))))
|
||||
`(modus-themes-lang-note ((,c :underline (:style wave :color ,underline-note))))
|
||||
`(modus-themes-lang-warning ((,c :underline (:style wave :color ,underline-warning))))
|
||||
;;;;; prominent semantic notes
|
||||
`(modus-themes-prominent-error ((,c :background ,bg-prominent-err :foreground ,fg-prominent-err)))
|
||||
`(modus-themes-prominent-note ((,c :background ,bg-prominent-note :foreground ,fg-prominent-note)))
|
||||
`(modus-themes-prominent-warning ((,c :background ,bg-prominent-warning :foreground ,fg-prominent-warning)))
|
||||
;;;;; markup
|
||||
`(modus-themes-prose-code ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-code)))
|
||||
`(modus-themes-prose-macro ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-macro)))
|
||||
|
@ -1581,7 +1728,10 @@ FG and BG are the main colors."
|
|||
`(modus-themes-slant ((,c ,@(modus-themes--slant))))
|
||||
`(modus-themes-ui-variable-pitch ((,c ,@(modus-themes--variable-pitch-ui))))
|
||||
;;;;; other custom faces
|
||||
`(modus-themes-button ((,c :inherit variable-pitch :box ,border :background ,bg-button-active :foreground ,fg-button-active)))
|
||||
`(modus-themes-button ((,c :inherit variable-pitch
|
||||
:box (:line-width 1 :color ,border :style released-button)
|
||||
:background ,bg-button-active
|
||||
:foreground ,fg-button-active)))
|
||||
`(modus-themes-key-binding ((,c :inherit (bold modus-themes-fixed-pitch) :foreground ,keybind)))
|
||||
`(modus-themes-prompt ((,c ,@(modus-themes--prompt fg-prompt bg-prompt))))
|
||||
`(modus-themes-reset-soft ((,c :background ,bg-main :foreground ,fg-main
|
||||
|
@ -1592,9 +1742,9 @@ FG and BG are the main colors."
|
|||
`(default ((,c :background ,bg-main :foreground ,fg-main)))
|
||||
`(cursor ((,c :background ,cursor)))
|
||||
`(fringe ((,c :background ,fringe :foreground ,fg-main)))
|
||||
`(menu ((,c :background ,bg-tab-bar :foreground ,fg-main)))
|
||||
`(scroll-bar ((,c :background ,fringe :foreground ,fg-dim)))
|
||||
`(tool-bar ((,c :background ,bg-tab-bar :foreground ,fg-main)))
|
||||
`(menu ((,c :background ,bg-dim :foreground ,fg-main)))
|
||||
`(scroll-bar ((,c :background ,bg-dim :foreground ,fg-dim)))
|
||||
`(tool-bar ((,c :background ,bg-dim :foreground ,fg-main)))
|
||||
`(vertical-border ((,c :foreground ,border)))
|
||||
;;;;; basic and/or ungrouped styles
|
||||
`(bold ((,c :weight bold)))
|
||||
|
@ -1625,8 +1775,8 @@ FG and BG are the main colors."
|
|||
`(minibuffer-prompt ((,c :inherit modus-themes-prompt)))
|
||||
`(mm-command-output ((,c :foreground ,mail-part)))
|
||||
`(mm-uu-extract ((,c :foreground ,mail-part)))
|
||||
`(next-error ((,c :inherit modus-themes-subtle-red :extend t)))
|
||||
`(pgtk-im-0 ((,c :inherit modus-themes-intense-cyan)))
|
||||
`(next-error ((,c :inherit modus-themes-prominent-error :extend t)))
|
||||
`(pgtk-im-0 ((,c :inherit modus-themes-prominent-note)))
|
||||
`(read-multiple-choice-face ((,c :inherit (bold modus-themes-mark-alt))))
|
||||
`(rectangle-preview ((,c :inherit secondary-selection)))
|
||||
`(region ((,c :background ,bg-region :foreground ,fg-region)))
|
||||
|
@ -1634,7 +1784,7 @@ FG and BG are the main colors."
|
|||
`(separator-line ((,c :underline ,bg-active)))
|
||||
`(shadow ((,c :foreground ,fg-dim)))
|
||||
`(success ((,c :inherit bold :foreground ,info)))
|
||||
`(trailing-whitespace ((,c :background ,bg-red-intense)))
|
||||
`(trailing-whitespace ((,c :background ,bg-space-err)))
|
||||
`(warning ((,c :inherit bold :foreground ,warning)))
|
||||
;;;;; buttons, links, widgets
|
||||
`(button ((,c :background ,bg-link :foreground ,fg-link :underline ,underline-link)))
|
||||
|
@ -1738,7 +1888,7 @@ FG and BG are the main colors."
|
|||
`(anzu-match-3 ((,c :inherit modus-themes-subtle-yellow)))
|
||||
`(anzu-mode-line ((,c :inherit bold)))
|
||||
`(anzu-mode-line-no-match ((,c :inherit error)))
|
||||
`(anzu-replace-highlight ((,c :inherit modus-themes-intense-red :underline t)))
|
||||
`(anzu-replace-highlight ((,c :inherit modus-themes-prominent-error :underline t)))
|
||||
`(anzu-replace-to ((,c :inherit modus-themes-search-current)))
|
||||
;;;;; auctex and Tex
|
||||
`(font-latex-bold-face ((,c :inherit bold)))
|
||||
|
@ -1775,12 +1925,12 @@ FG and BG are the main colors."
|
|||
`(aw-background-face ((,c :foreground "gray50")))
|
||||
`(aw-key-face ((,c :inherit modus-themes-key-binding)))
|
||||
`(aw-leading-char-face ((,c :inherit (bold modus-themes-reset-soft) :height 1.5 :foreground ,red-intense)))
|
||||
`(aw-minibuffer-leading-char-face ((,c :inherit (modus-themes-intense-red bold))))
|
||||
`(aw-minibuffer-leading-char-face ((,c :inherit modus-themes-key-binding)))
|
||||
`(aw-mode-line-face ((,c :inherit bold)))
|
||||
;;;;; binder
|
||||
`(binder-sidebar-highlight ((,c :inherit modus-themes-subtle-cyan)))
|
||||
`(binder-sidebar-highlight ((,c :inherit modus-themes-hl-line)))
|
||||
`(binder-sidebar-marked ((,c :inherit modus-themes-mark-sel)))
|
||||
`(binder-sidebar-missing ((,c :inherit modus-themes-subtle-red)))
|
||||
`(binder-sidebar-missing ((,c :inherit modus-themes-mark-del)))
|
||||
`(binder-sidebar-tags ((,c :foreground ,variable)))
|
||||
;;;;; bongo
|
||||
`(bongo-album-title (( )))
|
||||
|
@ -1807,13 +1957,13 @@ FG and BG are the main colors."
|
|||
`(calendar-today ((,c :inherit bold :underline t)))
|
||||
`(calendar-weekday-header ((,c :foreground ,date-weekday)))
|
||||
`(calendar-weekend-header ((,c :foreground ,date-weekend)))
|
||||
`(diary ((,c :background ,bg-dim :foreground ,accent-0)))
|
||||
`(diary-anniversary ((,c :foreground ,accent-1)))
|
||||
`(diary ((,c :foreground ,date-common)))
|
||||
`(diary-anniversary ((,c :foreground ,date-holiday)))
|
||||
`(diary-time ((,c :foreground ,date-common)))
|
||||
`(holiday ((,c :foreground ,date-holiday)))
|
||||
;;;;; calibredb
|
||||
;; NOTE 2022-12-27: Calibredb needs to be reviewed. I had to
|
||||
;; change the applicable colours for the transition to
|
||||
;; change the applicable colors for the transition to
|
||||
;; modus-themes version 4, but I cannot test this currently (it
|
||||
;; depends on an external program).
|
||||
`(calibredb-archive-face ((,c :foreground ,accent-3)))
|
||||
|
@ -1890,7 +2040,7 @@ FG and BG are the main colors."
|
|||
;;;;; clojure-mode
|
||||
`(clojure-keyword-face ((,c :inherit font-lock-builtin-face)))
|
||||
;;;;; column-enforce-mode
|
||||
`(column-enforce-face ((,c :inherit modus-themes-intense-yellow)))
|
||||
`(column-enforce-face ((,c :inherit modus-themes-prominent-error)))
|
||||
;;;;; company-mode
|
||||
`(company-echo-common ((,c :inherit modus-themes-completion-match-0)))
|
||||
`(company-preview ((,c :background ,bg-dim :foreground ,fg-dim)))
|
||||
|
@ -2051,7 +2201,7 @@ FG and BG are the main colors."
|
|||
;;;;; dired-git-info
|
||||
`(dgi-commit-message-face ((,c :foreground ,docstring)))
|
||||
;;;;; dired-narrow
|
||||
`(dired-narrow-blink ((,c :inherit (modus-themes-subtle-cyan bold))))
|
||||
`(dired-narrow-blink ((,c :inherit (modus-themes-prominent-warning bold))))
|
||||
;;;;; dired-subtree
|
||||
;; remove backgrounds from dired-subtree faces, else they break
|
||||
;; dired-{flagged,marked} and any other face that sets a background
|
||||
|
@ -2089,6 +2239,12 @@ FG and BG are the main colors."
|
|||
`(diredfl-symlink ((,c :inherit dired-symlink)))
|
||||
`(diredfl-tagged-autofile-name ((,c :inherit (diredfl-autofile-name dired-marked))))
|
||||
`(diredfl-write-priv ((,c :foreground ,accent-0)))
|
||||
;;;;; disk-usage
|
||||
`(disk-usage-inaccessible ((,c :inherit error)))
|
||||
`(disk-usage-percent ((,c :foreground ,accent-0)))
|
||||
`(disk-usage-size ((,c :foreground ,accent-1)))
|
||||
`(disk-usage-symlink ((,c :inherit dired-symlink)))
|
||||
`(disk-usage-symlink-directory ((,c :inherit dired-symlink)))
|
||||
;;;;; display-fill-column-indicator-mode
|
||||
`(fill-column-indicator ((,c :height 1 :background ,bg-active :foreground ,bg-active)))
|
||||
;;;;; doom-modeline
|
||||
|
@ -2128,7 +2284,7 @@ FG and BG are the main colors."
|
|||
`(doom-modeline-warning ((,c :inherit warning)))
|
||||
;;;;; ediff
|
||||
`(ediff-current-diff-A ((,c :background ,bg-removed :foreground ,fg-removed)))
|
||||
`(ediff-current-diff-Ancestor ((,c :background ,bg-region))) ; TODO 2022-11-29: Needs review
|
||||
`(ediff-current-diff-Ancestor ((,c :background ,bg-region)))
|
||||
`(ediff-current-diff-B ((,c :background ,bg-added :foreground ,fg-added)))
|
||||
`(ediff-current-diff-C ((,c :background ,bg-changed :foreground ,fg-changed)))
|
||||
`(ediff-even-diff-A ((,c :background ,bg-diff-context)))
|
||||
|
@ -2152,6 +2308,7 @@ FG and BG are the main colors."
|
|||
`(ein:notification-tab-normal ((,c :underline t)))
|
||||
;;;;; eglot
|
||||
`(eglot-mode-line ((,c :inherit modus-themes-bold :foreground ,modeline-info)))
|
||||
`(eglot-diagnostic-tag-unnecessary-face ((,c :inherit modus-themes-lang-note)))
|
||||
;;;;; el-search
|
||||
`(el-search-highlight-in-prompt-face ((,c :inherit italic)))
|
||||
`(el-search-match ((,c :inherit modus-themes-search-current)))
|
||||
|
@ -2236,7 +2393,7 @@ FG and BG are the main colors."
|
|||
`(erc-button ((,c :inherit button)))
|
||||
`(erc-command-indicator-face ((,c :inherit bold :foreground ,accent-3)))
|
||||
`(erc-current-nick-face ((,c :inherit match)))
|
||||
`(erc-dangerous-host-face ((,c :inherit modus-themes-intense-red)))
|
||||
`(erc-dangerous-host-face ((,c :inherit error)))
|
||||
`(erc-direct-msg-face ((,c :inherit shadow)))
|
||||
`(erc-error-face ((,c :inherit error)))
|
||||
`(erc-fool-face ((,c :inherit shadow)))
|
||||
|
@ -2254,8 +2411,8 @@ FG and BG are the main colors."
|
|||
`(erc-timestamp-face ((,c :foreground ,date-common)))
|
||||
`(erc-underline-face ((,c :underline t)))
|
||||
;;;;; ert
|
||||
`(ert-test-result-expected ((,c :inherit modus-themes-intense-cyan)))
|
||||
`(ert-test-result-unexpected ((,c :inherit modus-themes-intense-red)))
|
||||
`(ert-test-result-expected ((,c :inherit modus-themes-prominent-note)))
|
||||
`(ert-test-result-unexpected ((,c :inherit modus-themes-prominent-error)))
|
||||
;;;;; eshell
|
||||
`(eshell-ls-archive ((,c :foreground ,accent-2)))
|
||||
`(eshell-ls-backup ((,c :inherit shadow)))
|
||||
|
@ -2277,7 +2434,7 @@ FG and BG are the main colors."
|
|||
`(evil-ex-info ((,c :inherit font-lock-type-face)))
|
||||
`(evil-ex-lazy-highlight ((,c :inherit modus-themes-search-lazy)))
|
||||
`(evil-ex-search ((,c :inherit modus-themes-search-current)))
|
||||
`(evil-ex-substitute-matches ((,c :inherit modus-themes-intense-yellow :underline t)))
|
||||
`(evil-ex-substitute-matches ((,c :inherit modus-themes-prominent-error :underline t)))
|
||||
`(evil-ex-substitute-replacement ((,c :inherit modus-themes-search-current)))
|
||||
;;;;; eww
|
||||
`(eww-invalid-certificate ((,c :foreground ,err)))
|
||||
|
@ -2292,9 +2449,9 @@ FG and BG are the main colors."
|
|||
`(eyebrowse-mode-line-active ((,c :inherit mode-line-emphasis)))
|
||||
;;;;; flycheck
|
||||
`(flycheck-error ((,c :inherit modus-themes-lang-error)))
|
||||
`(flycheck-fringe-error ((,c :inherit modus-themes-intense-red)))
|
||||
`(flycheck-fringe-info ((,c :inherit modus-themes-intense-cyan)))
|
||||
`(flycheck-fringe-warning ((,c :inherit modus-themes-intense-yellow)))
|
||||
`(flycheck-fringe-error ((,c :inherit modus-themes-prominent-error)))
|
||||
`(flycheck-fringe-info ((,c :inherit modus-themes-prominent-note)))
|
||||
`(flycheck-fringe-warning ((,c :inherit modus-themes-prominent-warning)))
|
||||
`(flycheck-info ((,c :inherit modus-themes-lang-note)))
|
||||
`(flycheck-warning ((,c :inherit modus-themes-lang-warning)))
|
||||
;;;;; flycheck-color-mode-line
|
||||
|
@ -2310,9 +2467,16 @@ FG and BG are the main colors."
|
|||
`(flycheck-indicator-success ((,c :inherit success)))
|
||||
`(flycheck-indicator-warning ((,c :inherit warning)))
|
||||
;;;;; flymake
|
||||
`(flymake-end-of-line-diagnostics-face ((,c :inherit modus-themes-slant :height 0.85 :box ,border)))
|
||||
`(flymake-error ((,c :inherit modus-themes-lang-error)))
|
||||
`(flymake-error-echo ((,c :inherit error)))
|
||||
`(flymake-error-echo-at-eol ((,c :inherit flymake-end-of-line-diagnostics-face :foreground ,err)))
|
||||
`(flymake-note ((,c :inherit modus-themes-lang-note)))
|
||||
`(flymake-note-echo ((,c :inherit success)))
|
||||
`(flymake-note-echo-at-eol ((,c :inherit flymake-end-of-line-diagnostics-face :foreground ,info)))
|
||||
`(flymake-warning ((,c :inherit modus-themes-lang-warning)))
|
||||
`(flymake-warning-echo ((,c :inherit warning)))
|
||||
`(flymake-note-echo-at-eol ((,c :inherit flymake-end-of-line-diagnostics-face :foreground ,warning)))
|
||||
;;;;; flyspell
|
||||
`(flyspell-duplicate ((,c :inherit modus-themes-lang-warning)))
|
||||
`(flyspell-incorrect ((,c :inherit modus-themes-lang-error)))
|
||||
|
@ -2531,16 +2695,16 @@ FG and BG are the main colors."
|
|||
`(ido-subdir ((,c :foreground ,accent-0)))
|
||||
`(ido-virtual ((,c :foreground ,accent-1)))
|
||||
;;;;; iedit
|
||||
`(iedit-occurrence ((,c :inherit modus-themes-intense-blue)))
|
||||
`(iedit-read-only-occurrence ((,c :inherit modus-themes-intense-yellow)))
|
||||
`(iedit-occurrence ((,c :inherit modus-themes-search-lazy)))
|
||||
`(iedit-read-only-occurrence ((,c :inherit modus-themes-search-current)))
|
||||
;;;;; iflipb
|
||||
`(iflipb-current-buffer-face ((,c :inherit bold :foreground ,name)))
|
||||
`(iflipb-other-buffer-face ((,c :inherit shadow)))
|
||||
;;;;; image-dired
|
||||
`(image-dired-thumb-flagged ((,c :inherit modus-themes-intense-red)))
|
||||
`(image-dired-thumb-flagged ((,c :inherit modus-themes-mark-del :box (:line-width -3))))
|
||||
`(image-dired-thumb-header-file-name ((,c :inherit bold)))
|
||||
`(image-dired-thumb-header-file-size ((,c :foreground ,constant)))
|
||||
`(image-dired-thumb-mark ((,c :inherit modus-themes-intense-cyan)))
|
||||
`(image-dired-thumb-mark ((,c :inherit modus-themes-mark-sel :box (:line-width -3))))
|
||||
;;;;; imenu-list
|
||||
`(imenu-list-entry-face-0 ((,c :foreground ,fg-heading-0)))
|
||||
`(imenu-list-entry-face-1 ((,c :foreground ,fg-heading-1)))
|
||||
|
@ -2564,7 +2728,7 @@ FG and BG are the main colors."
|
|||
`(info-header-xref ((,c :foreground ,fg-link)))
|
||||
`(info-index-match ((,c :inherit match)))
|
||||
`(info-menu-header ((,c :inherit bold)))
|
||||
`(info-menu-star ((,c :foreground ,red-intense)))
|
||||
`(info-menu-star ((,c :inherit error)))
|
||||
`(info-node ((,c :inherit bold)))
|
||||
`(info-title-1 ((,c :inherit modus-themes-heading-1)))
|
||||
`(info-title-2 ((,c :inherit modus-themes-heading-2)))
|
||||
|
@ -2613,12 +2777,12 @@ FG and BG are the main colors."
|
|||
`(ioccur-title-face ((,c :inherit bold :foreground ,name)))
|
||||
;;;;; isearch, occur, and the like
|
||||
`(isearch ((,c :inherit modus-themes-search-current)))
|
||||
`(isearch-fail ((,c :inherit modus-themes-intense-red)))
|
||||
`(isearch-fail ((,c :inherit modus-themes-prominent-error)))
|
||||
`(isearch-group-1 ((,c :inherit modus-themes-intense-blue)))
|
||||
`(isearch-group-2 ((,c :inherit modus-themes-intense-magenta)))
|
||||
`(lazy-highlight ((,c :inherit modus-themes-search-lazy)))
|
||||
`(match ((,c :background ,bg-magenta-subtle :foreground ,fg-main)))
|
||||
`(query-replace ((,c :inherit modus-themes-intense-red)))
|
||||
`(query-replace ((,c :inherit modus-themes-prominent-error)))
|
||||
;;;;; ivy
|
||||
`(ivy-action ((,c :inherit modus-themes-key-binding)))
|
||||
`(ivy-confirm-face ((,c :inherit success)))
|
||||
|
@ -2644,6 +2808,10 @@ FG and BG are the main colors."
|
|||
`(jiralib-link-filter-face ((,c :underline t)))
|
||||
`(jiralib-link-issue-face ((,c :underline t)))
|
||||
`(jiralib-link-project-face ((,c :underline t)))
|
||||
;;;;; jit-spell
|
||||
`(jit-spell-misspelling ((,c :inherit modus-themes-lang-error)))
|
||||
;;;;; jinx
|
||||
`(jinx-misspelled ((,c :inherit modus-themes-lang-warning)))
|
||||
;;;;; journalctl-mode
|
||||
`(journalctl-error-face ((,c :inherit error)))
|
||||
`(journalctl-finished-face ((,c :inherit success)))
|
||||
|
@ -3044,6 +3212,7 @@ FG and BG are the main colors."
|
|||
`(orderless-match-face-2 ((,c :inherit modus-themes-completion-match-2)))
|
||||
`(orderless-match-face-3 ((,c :inherit modus-themes-completion-match-3)))
|
||||
;;;;; org
|
||||
`(org-agenda-calendar-daterange ((,c :foreground ,date-range)))
|
||||
`(org-agenda-calendar-event ((,c :foreground ,date-event)))
|
||||
`(org-agenda-calendar-sexp ((,c :inherit (modus-themes-slant org-agenda-calendar-event))))
|
||||
`(org-agenda-clocking ((,c :inherit modus-themes-mark-alt)))
|
||||
|
@ -3211,6 +3380,24 @@ FG and BG are the main colors."
|
|||
`(persp-face-lighter-nil-persp ((,c :inherit bold)))
|
||||
;;;;; perspective
|
||||
`(persp-selected-face ((,c :inherit bold :foreground ,name)))
|
||||
;;;;; proced
|
||||
`(proced-cpu ((,c :foreground ,keyword)))
|
||||
`(proced-emacs-pid ((,c :foreground ,identifier :underline t)))
|
||||
`(proced-executable ((,c :foreground ,name)))
|
||||
`(proced-interruptible-sleep-status-code ((,c :inherit shadow)))
|
||||
`(proced-mem ((,c :foreground ,type)))
|
||||
`(proced-memory-high-usage ((,c :foreground ,err)))
|
||||
`(proced-memory-low-usage ((,c :foreground ,info)))
|
||||
`(proced-memory-medium-usage ((,c :foreground ,warning)))
|
||||
`(proced-pgrp ((,c :inherit proced-pid)))
|
||||
`(proced-pid ((,c :foreground ,identifier)))
|
||||
`(proced-ppid ((,c :inherit proced-pid)))
|
||||
`(proced-run-status-code ((,c :inherit success)))
|
||||
`(proced-sess ((,c :inherit proced-pid)))
|
||||
`(proced-session-leader-pid ((,c :inherit bold :foreground ,identifier)))
|
||||
`(proced-time-colon (( )))
|
||||
`(proced-uninterruptible-sleep-status-code ((,c :inherit error)))
|
||||
`(proced-user (( )))
|
||||
;;;;; popup
|
||||
`(popup-face ((,c :background ,bg-inactive :foreground ,fg-main)))
|
||||
`(popup-isearch-match ((,c :inherit modus-themes-search-current)))
|
||||
|
@ -3229,13 +3416,13 @@ FG and BG are the main colors."
|
|||
`(powerline-inactive2 ((,c :inherit mode-line-inactive)))
|
||||
;;;;; powerline-evil
|
||||
`(powerline-evil-base-face ((,c :background ,fg-main :foreground ,bg-main)))
|
||||
`(powerline-evil-emacs-face ((,c :inherit modus-themes-intense-magenta)))
|
||||
`(powerline-evil-insert-face ((,c :inherit modus-themes-intense-green)))
|
||||
`(powerline-evil-motion-face ((,c :inherit modus-themes-intense-blue)))
|
||||
`(powerline-evil-normal-face ((,c :background ,fg-alt :foreground ,bg-main)))
|
||||
`(powerline-evil-operator-face ((,c :inherit modus-themes-intense-yellow)))
|
||||
`(powerline-evil-replace-face ((,c :inherit modus-themes-intense-red)))
|
||||
`(powerline-evil-visual-face ((,c :inherit modus-themes-intense-cyan)))
|
||||
`(powerline-evil-emacs-face ((,c :inherit bold :background ,bg-main)))
|
||||
`(powerline-evil-insert-face ((,c :inherit success :background ,bg-main)))
|
||||
`(powerline-evil-motion-face ((,c :inherit italic :background ,bg-main)))
|
||||
`(powerline-evil-normal-face ((,c :background ,bg-main :foreground ,fg-alt)))
|
||||
`(powerline-evil-operator-face ((,c :inherit warning :background ,bg-main)))
|
||||
`(powerline-evil-replace-face ((,c :inherit error :background ,bg-main)))
|
||||
`(powerline-evil-visual-face ((,c :inherit bold :background ,bg-main)))
|
||||
;;;;; prescient
|
||||
`(prescient-primary-highlight ((,c :inherit modus-themes-completion-match-0)))
|
||||
`(prescient-secondary-highlight ((,c :inherit modus-themes-completion-match-1)))
|
||||
|
@ -3258,7 +3445,7 @@ FG and BG are the main colors."
|
|||
`(quick-peek-border-face ((,c :background ,border :height 1)))
|
||||
`(quick-peek-padding-face ((,c :background ,bg-inactive :height 0.15)))
|
||||
;;;;; rainbow-delimiters
|
||||
`(rainbow-delimiters-base-error-face ((,c :inherit modus-themes-subtle-red)))
|
||||
`(rainbow-delimiters-base-error-face ((,c :inherit modus-themes-prominent-error)))
|
||||
`(rainbow-delimiters-base-face ((,c :foreground ,fg-main)))
|
||||
`(rainbow-delimiters-depth-1-face ((,c :foreground ,rainbow-0)))
|
||||
`(rainbow-delimiters-depth-2-face ((,c :foreground ,rainbow-1)))
|
||||
|
@ -3269,8 +3456,8 @@ FG and BG are the main colors."
|
|||
`(rainbow-delimiters-depth-7-face ((,c :foreground ,rainbow-6)))
|
||||
`(rainbow-delimiters-depth-8-face ((,c :foreground ,rainbow-7)))
|
||||
`(rainbow-delimiters-depth-9-face ((,c :foreground ,rainbow-8)))
|
||||
`(rainbow-delimiters-mismatched-face ((,c :inherit (bold modus-themes-intense-yellow))))
|
||||
`(rainbow-delimiters-unmatched-face ((,c :inherit (bold modus-themes-intense-red))))
|
||||
`(rainbow-delimiters-mismatched-face ((,c :inherit (bold modus-themes-prominent-warning))))
|
||||
`(rainbow-delimiters-unmatched-face ((,c :inherit (bold modus-themes-prominent-error))))
|
||||
;;;;; rcirc
|
||||
`(rcirc-bright-nick ((,c :inherit bold :foreground ,accent-2)))
|
||||
`(rcirc-dim-nick ((,c :inherit shadow)))
|
||||
|
@ -3316,6 +3503,13 @@ FG and BG are the main colors."
|
|||
;;;;; rmail
|
||||
`(rmail-header-name ((,c :inherit bold)))
|
||||
`(rmail-highlight ((,c :inherit bold :foreground ,mail-other)))
|
||||
;;;;; rst-mode
|
||||
`(rst-level-1 ((,c :inherit modus-themes-heading-1)))
|
||||
`(rst-level-2 ((,c :inherit modus-themes-heading-2)))
|
||||
`(rst-level-3 ((,c :inherit modus-themes-heading-3)))
|
||||
`(rst-level-4 ((,c :inherit modus-themes-heading-4)))
|
||||
`(rst-level-5 ((,c :inherit modus-themes-heading-5)))
|
||||
`(rst-level-6 ((,c :inherit modus-themes-heading-6)))
|
||||
;;;;; ruler-mode
|
||||
`(ruler-mode-column-number ((,c :inherit ruler-mode-default)))
|
||||
`(ruler-mode-comment-column ((,c :inherit ruler-mode-default :foreground ,red)))
|
||||
|
@ -3342,7 +3536,7 @@ FG and BG are the main colors."
|
|||
;;;;; show-paren-mode
|
||||
`(show-paren-match ((,c :background ,bg-paren-match :foreground ,fg-main :underline ,underline-paren-match)))
|
||||
`(show-paren-match-expression ((,c :background ,bg-paren-expression)))
|
||||
`(show-paren-mismatch ((,c :inherit modus-themes-intense-red)))
|
||||
`(show-paren-mismatch ((,c :inherit modus-themes-prominent-error)))
|
||||
;;;;; shr
|
||||
`(shr-abbreviation ((,c :inherit modus-themes-lang-note)))
|
||||
`(shr-code ((,c :inherit modus-themes-prose-verbatim)))
|
||||
|
@ -3352,7 +3546,7 @@ FG and BG are the main colors."
|
|||
`(shr-h4 ((,c :inherit modus-themes-heading-4)))
|
||||
`(shr-h5 ((,c :inherit modus-themes-heading-5)))
|
||||
`(shr-h6 ((,c :inherit modus-themes-heading-6)))
|
||||
`(shr-selected-link ((,c :inherit modus-themes-subtle-red)))
|
||||
`(shr-selected-link ((,c :inherit modus-themes-mark-sel)))
|
||||
;;;;; side-notes
|
||||
`(side-notes ((,c :background ,bg-dim :foreground ,fg-dim)))
|
||||
;;;;; sieve-mode
|
||||
|
@ -3404,7 +3598,7 @@ FG and BG are the main colors."
|
|||
`(sml/name-filling ((,c :inherit warning)))
|
||||
`(sml/not-modified ((,c :inherit sml/global)))
|
||||
`(sml/numbers-separator ((,c :inherit sml/global)))
|
||||
`(sml/outside-modified ((,c :inherit modus-themes-intense-red)))
|
||||
`(sml/outside-modified ((,c :inherit modus-themes-prominent-error)))
|
||||
`(sml/position-percentage ((,c :inherit sml/global)))
|
||||
`(sml/prefix ((,c :foreground ,fg-alt)))
|
||||
`(sml/process ((,c :inherit sml/prefix)))
|
||||
|
@ -3418,7 +3612,7 @@ FG and BG are the main colors."
|
|||
;;;;; smerge
|
||||
`(smerge-base ((,c :inherit diff-changed)))
|
||||
`(smerge-lower ((,c :inherit diff-added)))
|
||||
`(smerge-markers ((,c :inherit diff-heading)))
|
||||
`(smerge-markers ((,c :inherit diff-header)))
|
||||
`(smerge-refined-added ((,c :inherit diff-refine-added)))
|
||||
`(smerge-refined-changed (()))
|
||||
`(smerge-refined-removed ((,c :inherit diff-refine-removed)))
|
||||
|
@ -3533,7 +3727,7 @@ FG and BG are the main colors."
|
|||
;; have to do this with `eldoc-highlight-function-argument'.
|
||||
(list 'transient-argument `((,c :inherit (bold modus-themes-mark-alt))))
|
||||
`(transient-blue ((,c :inherit bold :foreground ,blue)))
|
||||
`(transient-disabled-suffix ((,c :inherit modus-themes-intense-red)))
|
||||
`(transient-disabled-suffix ((,c :inherit modus-themes-mark-del)))
|
||||
`(transient-enabled-suffix ((,c :inherit modus-themes-subtle-cyan)))
|
||||
`(transient-heading ((,c :inherit bold :foreground ,fg-main)))
|
||||
`(transient-inactive-argument ((,c :inherit shadow)))
|
||||
|
@ -3653,19 +3847,22 @@ FG and BG are the main colors."
|
|||
`(vr/match-1 ((,c :inherit modus-themes-intense-yellow)))
|
||||
`(vr/match-separator-face ((,c :inherit bold :background ,bg-active)))
|
||||
;;;;; vterm
|
||||
`(vterm-color-black ((,c :background "gray35" :foreground "gray35")))
|
||||
`(vterm-color-blue ((,c :background ,blue :foreground ,blue)))
|
||||
`(vterm-color-cyan ((,c :background ,cyan :foreground ,cyan)))
|
||||
`(vterm-color-black ((,c :background "gray35" :foreground "black")))
|
||||
`(vterm-color-blue ((,c :background ,blue-warmer :foreground ,blue)))
|
||||
`(vterm-color-cyan ((,c :background ,cyan-cooler :foreground ,cyan)))
|
||||
`(vterm-color-default ((,c :background ,bg-main :foreground ,fg-main)))
|
||||
`(vterm-color-green ((,c :background ,green :foreground ,green)))
|
||||
`(vterm-color-green ((,c :background ,green-cooler :foreground ,green)))
|
||||
`(vterm-color-inverse-video ((,c :background ,bg-main :inverse-video t)))
|
||||
`(vterm-color-magenta ((,c :background ,magenta :foreground ,magenta)))
|
||||
`(vterm-color-red ((,c :background ,red :foreground ,red)))
|
||||
`(vterm-color-magenta ((,c :background ,magenta-cooler :foreground ,magenta)))
|
||||
`(vterm-color-red ((,c :background ,red-warmer :foreground ,red)))
|
||||
`(vterm-color-underline ((,c :underline t)))
|
||||
`(vterm-color-white ((,c :background "gray65" :foreground "gray65")))
|
||||
`(vterm-color-yellow ((,c :background ,yellow :foreground ,yellow)))
|
||||
`(vterm-color-white ((,c :background "white" :foreground "gray65")))
|
||||
`(vterm-color-yellow ((,c :background ,yellow-warmer :foreground ,yellow)))
|
||||
;;;;; vundo
|
||||
`(vundo-highlight ((,c :inherit (bold vundo-node) :foreground ,red-intense)))
|
||||
`(vundo-default ((,c :inherit shadow)))
|
||||
`(vundo-highlight ((,c :inherit (bold vundo-node) :foreground ,red)))
|
||||
`(vundo-last-saved ((,c :inherit (bold vundo-node) :foreground ,blue)))
|
||||
`(vundo-saved ((,c :inherit vundo-node :foreground ,blue-intense)))
|
||||
;;;;; wcheck-mode
|
||||
`(wcheck-default-face ((,c :foreground ,red :underline t)))
|
||||
;;;;; web-mode
|
||||
|
@ -3697,7 +3894,7 @@ FG and BG are the main colors."
|
|||
`(web-mode-current-column-highlight-face ((,c :background ,bg-inactive)))
|
||||
`(web-mode-current-element-highlight-face ((,c :inherit modus-themes-cyan-subtle)))
|
||||
`(web-mode-doctype-face ((,c :inherit font-lock-doc-face)))
|
||||
`(web-mode-error-face ((,c :inherit modus-themes-intense-red)))
|
||||
`(web-mode-error-face ((,c :inherit error)))
|
||||
`(web-mode-filter-face ((,c :inherit font-lock-function-name-face)))
|
||||
`(web-mode-folded-face ((,c :underline t)))
|
||||
`(web-mode-function-call-face ((,c :inherit font-lock-function-name-face)))
|
||||
|
@ -3735,7 +3932,7 @@ FG and BG are the main colors."
|
|||
`(web-mode-type-face ((,c :inherit font-lock-builtin-face)))
|
||||
`(web-mode-underline-face ((,c :underline t)))
|
||||
`(web-mode-variable-name-face ((,c :inherit font-lock-variable-name-face)))
|
||||
`(web-mode-warning-face ((,c :inherit font-lock-warning-face)))
|
||||
`(web-mode-warning-face ((,c :inherit warning)))
|
||||
`(web-mode-whitespace-face ((,c :background ,bg-inactive)))
|
||||
;;;;; wgrep
|
||||
`(wgrep-delete-face ((,c :inherit warning)))
|
||||
|
@ -3747,7 +3944,7 @@ FG and BG are the main colors."
|
|||
`(which-func ((,c :inherit bold :foreground ,modeline-info)))
|
||||
;;;;; which-key
|
||||
`(which-key-command-description-face ((,c :foreground ,fg-main)))
|
||||
`(which-key-group-description-face ((,c :foreground ,err)))
|
||||
`(which-key-group-description-face ((,c :foreground ,keyword)))
|
||||
`(which-key-highlighted-command-face ((,c :foreground ,warning :underline t)))
|
||||
`(which-key-key-face ((,c :inherit modus-themes-key-binding)))
|
||||
`(which-key-local-map-description-face ((,c :foreground ,fg-main)))
|
||||
|
@ -3755,24 +3952,24 @@ FG and BG are the main colors."
|
|||
`(which-key-separator-face ((,c :inherit shadow)))
|
||||
`(which-key-special-key-face ((,c :inherit error)))
|
||||
;;;;; whitespace-mode
|
||||
`(whitespace-big-indent ((,c :inherit modus-themes-subtle-red)))
|
||||
`(whitespace-big-indent ((,c :background ,bg-space-err)))
|
||||
`(whitespace-empty ((,c :inherit modus-themes-intense-magenta)))
|
||||
`(whitespace-hspace ((,c :background ,bg-dim :foreground ,fg-dim)))
|
||||
`(whitespace-indentation ((,c :background ,bg-dim :foreground ,fg-dim)))
|
||||
`(whitespace-line ((,c :inherit modus-themes-subtle-yellow)))
|
||||
`(whitespace-newline ((,c :background ,bg-dim :foreground ,fg-dim)))
|
||||
`(whitespace-space ((,c :background ,bg-dim :foreground ,fg-dim)))
|
||||
`(whitespace-hspace ((,c :background ,bg-space :foreground ,fg-space)))
|
||||
`(whitespace-indentation ((,c :background ,bg-space :foreground ,fg-space)))
|
||||
`(whitespace-line ((,c :background ,bg-space :foreground ,warning)))
|
||||
`(whitespace-newline ((,c :background ,bg-space :foreground ,fg-space)))
|
||||
`(whitespace-space ((,c :background ,bg-space :foreground ,fg-space)))
|
||||
`(whitespace-space-after-tab ((,c :inherit modus-themes-subtle-magenta)))
|
||||
`(whitespace-space-before-tab ((,c :inherit modus-themes-subtle-cyan)))
|
||||
`(whitespace-tab ((,c :background ,bg-dim :foreground ,fg-dim)))
|
||||
`(whitespace-trailing ((,c :inherit modus-themes-intense-red)))
|
||||
`(whitespace-tab ((,c :background ,bg-space :foreground ,fg-space)))
|
||||
`(whitespace-trailing ((,c :background ,bg-space-err)))
|
||||
;;;;; window-divider-mode
|
||||
`(window-divider ((,c :foreground ,border)))
|
||||
`(window-divider-first-pixel ((,c :foreground ,bg-inactive)))
|
||||
`(window-divider-last-pixel ((,c :foreground ,bg-inactive)))
|
||||
;;;;; widget
|
||||
`(widget-button ((,c :inherit bold :foreground ,fg-link)))
|
||||
`(widget-button-pressed ((,c :inherit widget-buton :foreground ,fg-link-visited)))
|
||||
`(widget-button-pressed ((,c :inherit widget-button :foreground ,fg-link-visited)))
|
||||
`(widget-documentation ((,c :inherit font-lock-doc-face)))
|
||||
`(widget-field ((,c :background ,bg-inactive :foreground ,fg-main :extend nil)))
|
||||
`(widget-inactive ((,c :background ,bg-button-inactive :foreground ,fg-button-inactive)))
|
||||
|
@ -3792,7 +3989,7 @@ FG and BG are the main colors."
|
|||
`(xah-elisp-command-face ((,c :inherit font-lock-type-face)))
|
||||
`(xah-elisp-dollar-symbol ((,c :inherit font-lock-variable-name-face)))
|
||||
;;;;; yaml-mode
|
||||
`(yaml-tab-face ((,c :inherit modus-themes-intense-red)))
|
||||
`(yaml-tab-face ((,c :background ,bg-space-err)))
|
||||
;;;;; yasnippet
|
||||
`(yas-field-highlight-face ((,c :inherit highlight))))
|
||||
"Face specs for use with `modus-themes-theme'.")
|
||||
|
@ -3809,9 +4006,9 @@ FG and BG are the main colors."
|
|||
;;;; exwm
|
||||
`(exwm-floating-border-color ,border)
|
||||
;;;; flymake fringe indicators
|
||||
`(flymake-error-bitmap '(flymake-double-exclamation-mark modus-themes-intense-red))
|
||||
`(flymake-warning-bitmap '(exclamation-mark modus-themes-intense-yellow))
|
||||
`(flymake-note-bitmap '(exclamation-mark modus-themes-intense-cyan))
|
||||
`(flymake-error-bitmap '(flymake-double-exclamation-mark modus-themes-prominent-error))
|
||||
`(flymake-warning-bitmap '(exclamation-mark modus-themes-prominent-warning))
|
||||
`(flymake-note-bitmap '(exclamation-mark modus-themes-prominent-note))
|
||||
;;;; highlight-changes
|
||||
`(highlight-changes-colors nil)
|
||||
`(highlight-changes-face-list '(success warning error bold bold-italic))
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
;;; modus-vivendi-deuteranopia-theme.el --- Elegant, highly legible and customizable dark theme -*- lexical-binding:t -*-
|
||||
;;; modus-vivendi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a black background -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||
|
||||
|
@ -43,7 +43,7 @@
|
|||
(require 'modus-themes))
|
||||
|
||||
(deftheme modus-vivendi-deuteranopia
|
||||
"Elegant, highly legible and customizable dark theme.
|
||||
"Deuteranopia-optimized theme with a black background.
|
||||
This variant is optimized for users with red-green color
|
||||
deficiency (deuteranopia). It conforms with the highest
|
||||
legibility standard for color contrast between background and
|
||||
|
@ -76,9 +76,9 @@ standard).")
|
|||
(green-cooler "#00c06f")
|
||||
(green-faint "#88ca9f")
|
||||
(green-intense "#44df44")
|
||||
(yellow "#d0bc00")
|
||||
(yellow-warmer "#fec43f")
|
||||
(yellow-cooler "#dfaf7a")
|
||||
(yellow "#cabf00")
|
||||
(yellow-warmer "#ffa00f")
|
||||
(yellow-cooler "#d8af7a")
|
||||
(yellow-faint "#d2b580")
|
||||
(yellow-intense "#efef00")
|
||||
(blue "#2fafff")
|
||||
|
@ -138,13 +138,13 @@ standard).")
|
|||
|
||||
;;; Graphs
|
||||
|
||||
(bg-graph-red-0 "#705c3c")
|
||||
(bg-graph-red-1 "#504420")
|
||||
(bg-graph-green-0 "#4f666f")
|
||||
(bg-graph-green-1 "#204840")
|
||||
(bg-graph-red-0 "#bf6000")
|
||||
(bg-graph-red-1 "#733500")
|
||||
(bg-graph-green-0 "#6fbf8f")
|
||||
(bg-graph-green-1 "#2f5f4f")
|
||||
(bg-graph-yellow-0 "#c1c00a")
|
||||
(bg-graph-yellow-1 "#6f6f00")
|
||||
(bg-graph-blue-0 "#2fafef")
|
||||
(bg-graph-yellow-1 "#7f6640")
|
||||
(bg-graph-blue-0 "#0f90ef")
|
||||
(bg-graph-blue-1 "#1f2f8f")
|
||||
(bg-graph-magenta-0 "#7f7f8e")
|
||||
(bg-graph-magenta-1 "#4f4f5f")
|
||||
|
@ -222,13 +222,20 @@ standard).")
|
|||
(identifier yellow-faint)
|
||||
|
||||
(err yellow-warmer)
|
||||
(warning yellow-cooler)
|
||||
(warning yellow)
|
||||
(info blue)
|
||||
|
||||
(underline-err yellow-intense)
|
||||
(underline-warning magenta-faint)
|
||||
(underline-note cyan)
|
||||
|
||||
(bg-prominent-err bg-yellow-intense)
|
||||
(fg-prominent-err fg-main)
|
||||
(bg-prominent-warning bg-magenta-intense)
|
||||
(fg-prominent-warning fg-main)
|
||||
(bg-prominent-note bg-cyan-intense)
|
||||
(fg-prominent-note fg-main)
|
||||
|
||||
;;;; Code mappings
|
||||
|
||||
(builtin magenta-warmer)
|
||||
|
@ -277,6 +284,7 @@ standard).")
|
|||
(date-event fg-alt)
|
||||
(date-holiday yellow-warmer)
|
||||
(date-now blue-faint)
|
||||
(date-range fg-alt)
|
||||
(date-scheduled yellow-cooler)
|
||||
(date-weekday cyan)
|
||||
(date-weekend yellow-faint)
|
||||
|
@ -306,13 +314,22 @@ standard).")
|
|||
|
||||
(mail-cite-0 blue-warmer)
|
||||
(mail-cite-1 yellow-cooler)
|
||||
(mail-cite-2 blue-cooler)
|
||||
(mail-cite-2 cyan-faint)
|
||||
(mail-cite-3 yellow)
|
||||
(mail-part blue)
|
||||
(mail-recipient blue)
|
||||
(mail-subject yellow-warmer)
|
||||
(mail-other cyan-faint)
|
||||
|
||||
;;;; Mark mappings
|
||||
|
||||
(bg-mark-delete bg-yellow-subtle)
|
||||
(fg-mark-delete yellow)
|
||||
(bg-mark-select bg-cyan-subtle)
|
||||
(fg-mark-select cyan)
|
||||
(bg-mark-other bg-magenta-subtle)
|
||||
(fg-mark-other magenta-warmer)
|
||||
|
||||
;;;; Prompt mappings
|
||||
|
||||
(fg-prompt blue)
|
||||
|
@ -343,6 +360,12 @@ standard).")
|
|||
(rainbow-7 blue-faint)
|
||||
(rainbow-8 magenta-faint)
|
||||
|
||||
;;;; Space mappings
|
||||
|
||||
(bg-space unspecified)
|
||||
(fg-space border)
|
||||
(bg-space-err bg-yellow-intense)
|
||||
|
||||
;;;; Heading mappings
|
||||
|
||||
(fg-heading-0 cyan-cooler)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
;;; modus-vivendi-theme.el --- Elegant, highly legible and customizable dark theme -*- lexical-binding:t -*-
|
||||
;;; modus-vivendi-theme.el --- Elegant, highly legible theme with a black background -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||
|
||||
|
@ -43,7 +43,7 @@
|
|||
(require 'modus-themes))
|
||||
|
||||
(deftheme modus-vivendi
|
||||
"Elegant, highly legible and customizable dark theme.
|
||||
"Elegant, highly legible theme with a black background.
|
||||
Conforms with the highest legibility standard for color contrast
|
||||
between background and foreground in any given piece of text,
|
||||
which corresponds to a minimum contrast in relative luminance of
|
||||
|
@ -138,10 +138,10 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
|
||||
(bg-graph-red-0 "#b52c2c")
|
||||
(bg-graph-red-1 "#702020")
|
||||
(bg-graph-green-0 "#4fd100")
|
||||
(bg-graph-green-0 "#0fed00")
|
||||
(bg-graph-green-1 "#007800")
|
||||
(bg-graph-yellow-0 "#f1e00a")
|
||||
(bg-graph-yellow-1 "#b08600")
|
||||
(bg-graph-yellow-1 "#b08940")
|
||||
(bg-graph-blue-0 "#2fafef")
|
||||
(bg-graph-blue-1 "#1f2f8f")
|
||||
(bg-graph-magenta-0 "#bf94fe")
|
||||
|
@ -227,6 +227,13 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(underline-warning yellow)
|
||||
(underline-note cyan)
|
||||
|
||||
(bg-prominent-err bg-red-intense)
|
||||
(fg-prominent-err fg-main)
|
||||
(bg-prominent-warning bg-yellow-intense)
|
||||
(fg-prominent-warning fg-main)
|
||||
(bg-prominent-note bg-cyan-intense)
|
||||
(fg-prominent-note fg-main)
|
||||
|
||||
;;;; Code mappings
|
||||
|
||||
(builtin magenta-warmer)
|
||||
|
@ -273,8 +280,9 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(date-common cyan)
|
||||
(date-deadline red)
|
||||
(date-event fg-alt)
|
||||
(date-holiday magenta)
|
||||
(date-holiday red-cooler)
|
||||
(date-now fg-main)
|
||||
(date-range fg-alt)
|
||||
(date-scheduled yellow-warmer)
|
||||
(date-weekday cyan)
|
||||
(date-weekend red-faint)
|
||||
|
@ -311,6 +319,15 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(mail-subject magenta-warmer)
|
||||
(mail-other magenta-faint)
|
||||
|
||||
;;;; Mark mappings
|
||||
|
||||
(bg-mark-delete bg-red-subtle)
|
||||
(fg-mark-delete red-cooler)
|
||||
(bg-mark-select bg-cyan-subtle)
|
||||
(fg-mark-select cyan)
|
||||
(bg-mark-other bg-yellow-subtle)
|
||||
(fg-mark-other yellow)
|
||||
|
||||
;;;; Prompt mappings
|
||||
|
||||
(fg-prompt cyan-cooler)
|
||||
|
@ -341,6 +358,12 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(rainbow-7 blue-warmer)
|
||||
(rainbow-8 magenta-warmer)
|
||||
|
||||
;;;; Space mappings
|
||||
|
||||
(bg-space unspecified)
|
||||
(fg-space border)
|
||||
(bg-space-err bg-red-intense)
|
||||
|
||||
;;;; Heading mappings
|
||||
|
||||
(fg-heading-0 cyan-cooler)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
;;; modus-vivendi-tinted-theme.el --- Elegant, highly legible and customizable dark theme -*- lexical-binding:t -*-
|
||||
;;; modus-vivendi-tinted-theme.el --- Elegant, highly legible theme with a night sky background -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||
|
||||
|
@ -43,7 +43,7 @@
|
|||
(require 'modus-themes))
|
||||
|
||||
(deftheme modus-vivendi-tinted
|
||||
"Elegant, highly legible and customizable dark theme.
|
||||
"Elegant, highly legible theme with a night sky background.
|
||||
Conforms with the highest legibility standard for color contrast
|
||||
between background and foreground in any given piece of text,
|
||||
which corresponds to a minimum contrast in relative luminance of
|
||||
|
@ -132,10 +132,10 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
|
||||
(bg-graph-red-0 "#b52c2c")
|
||||
(bg-graph-red-1 "#702020")
|
||||
(bg-graph-green-0 "#4fd100")
|
||||
(bg-graph-green-0 "#0fed00")
|
||||
(bg-graph-green-1 "#007800")
|
||||
(bg-graph-yellow-0 "#f1e00a")
|
||||
(bg-graph-yellow-1 "#b08600")
|
||||
(bg-graph-yellow-1 "#b08940")
|
||||
(bg-graph-blue-0 "#2fafef")
|
||||
(bg-graph-blue-1 "#1f2f8f")
|
||||
(bg-graph-magenta-0 "#bf94fe")
|
||||
|
@ -227,6 +227,13 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(underline-warning yellow)
|
||||
(underline-note cyan)
|
||||
|
||||
(bg-prominent-err bg-red-intense)
|
||||
(fg-prominent-err fg-main)
|
||||
(bg-prominent-warning bg-yellow-intense)
|
||||
(fg-prominent-warning fg-main)
|
||||
(bg-prominent-note bg-cyan-intense)
|
||||
(fg-prominent-note fg-main)
|
||||
|
||||
;;;; Code mappings
|
||||
|
||||
(builtin magenta-warmer)
|
||||
|
@ -273,8 +280,9 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(date-common cyan)
|
||||
(date-deadline red)
|
||||
(date-event fg-alt)
|
||||
(date-holiday magenta)
|
||||
(date-holiday red-cooler)
|
||||
(date-now fg-main)
|
||||
(date-range fg-alt)
|
||||
(date-scheduled yellow-warmer)
|
||||
(date-weekday cyan)
|
||||
(date-weekend red-faint)
|
||||
|
@ -311,10 +319,20 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(mail-subject magenta-warmer)
|
||||
(mail-other magenta-faint)
|
||||
|
||||
;;;; Mark mappings
|
||||
|
||||
(bg-mark-delete bg-red-subtle)
|
||||
(fg-mark-delete red-cooler)
|
||||
(bg-mark-select bg-cyan-subtle)
|
||||
(fg-mark-select cyan)
|
||||
(bg-mark-other bg-yellow-subtle)
|
||||
(fg-mark-other yellow)
|
||||
|
||||
;;;; Prompt mappings
|
||||
|
||||
(fg-prompt cyan-cooler)
|
||||
(bg-prompt unspecified)
|
||||
(bg-space-err bg-red-intense)
|
||||
|
||||
;;;; Prose mappings
|
||||
|
||||
|
@ -341,6 +359,11 @@ which corresponds to a minimum contrast in relative luminance of
|
|||
(rainbow-7 blue-warmer)
|
||||
(rainbow-8 magenta-warmer)
|
||||
|
||||
;;;; Space mappings
|
||||
|
||||
(bg-space unspecified)
|
||||
(fg-space border)
|
||||
|
||||
;;;; Heading mappings
|
||||
|
||||
(fg-heading-0 cyan-cooler)
|
||||
|
|
441
etc/themes/modus-vivendi-tritanopia-theme.el
Normal file
441
etc/themes/modus-vivendi-tritanopia-theme.el
Normal file
|
@ -0,0 +1,441 @@
|
|||
;;; modus-vivendi-tritanopia-theme.el --- Tritanopia-optimized theme with a black background -*- lexical-binding:t -*-
|
||||
|
||||
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Protesilaos Stavrou <info@protesilaos.com>
|
||||
;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
|
||||
;; URL: https://git.sr.ht/~protesilaos/modus-themes
|
||||
;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs 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.
|
||||
;;
|
||||
;; GNU Emacs 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
;;
|
||||
;; The Modus themes conform with the highest standard for
|
||||
;; color-contrast accessibility between background and foreground
|
||||
;; values (WCAG AAA). Please refer to the official Info manual for
|
||||
;; further documentation (distributed with the themes, or available
|
||||
;; at: <https://protesilaos.com/emacs/modus-themes>).
|
||||
|
||||
;;; Code:
|
||||
|
||||
|
||||
|
||||
(eval-and-compile
|
||||
(unless (and (fboundp 'require-theme)
|
||||
load-file-name
|
||||
(equal (file-name-directory load-file-name)
|
||||
(expand-file-name "themes/" data-directory))
|
||||
(require-theme 'modus-themes t))
|
||||
(require 'modus-themes))
|
||||
|
||||
(deftheme modus-vivendi-tritanopia
|
||||
"Tritanopia-optimized theme with a black background.
|
||||
This variant is optimized for users with blue-yellow color
|
||||
deficiency (tritanopia). It conforms with the highest
|
||||
legibility standard for color contrast between background and
|
||||
foreground in any given piece of text, which corresponds to a
|
||||
minimum contrast in relative luminance of 7:1 (WCAG AAA
|
||||
standard).")
|
||||
|
||||
(defconst modus-vivendi-tritanopia-palette
|
||||
'(
|
||||
;;; Basic values
|
||||
|
||||
(bg-main "#000000")
|
||||
(bg-dim "#1e1e1e")
|
||||
(fg-main "#ffffff")
|
||||
(fg-dim "#989898")
|
||||
(fg-alt "#c6daff")
|
||||
(bg-active "#535353")
|
||||
(bg-inactive "#303030")
|
||||
(border "#646464")
|
||||
|
||||
;;; Common accent foregrounds
|
||||
|
||||
(red "#ff5f59")
|
||||
(red-warmer "#ff6740")
|
||||
(red-cooler "#ff6f9f")
|
||||
(red-faint "#ff9070")
|
||||
(red-intense "#ff5f5f")
|
||||
(green "#44bc44")
|
||||
(green-warmer "#70b900")
|
||||
(green-cooler "#00c06f")
|
||||
(green-faint "#88ca9f")
|
||||
(green-intense "#44df44")
|
||||
(yellow "#cabf00")
|
||||
(yellow-warmer "#ffa00f")
|
||||
(yellow-cooler "#d8af7a")
|
||||
(yellow-faint "#d2b580")
|
||||
(yellow-intense "#efef00")
|
||||
(blue "#2fafff")
|
||||
(blue-warmer "#79a8ff")
|
||||
(blue-cooler "#00bcff")
|
||||
(blue-faint "#82b0ec")
|
||||
(blue-intense "#338fff")
|
||||
(magenta "#feacd0")
|
||||
(magenta-warmer "#f78fe7")
|
||||
(magenta-cooler "#b6a0ff")
|
||||
(magenta-faint "#caa6df")
|
||||
(magenta-intense "#ef7fff")
|
||||
(cyan "#00d3d0")
|
||||
(cyan-warmer "#4ae2ff")
|
||||
(cyan-cooler "#6ae4b9")
|
||||
(cyan-faint "#7fdbdf")
|
||||
(cyan-intense "#00eff0")
|
||||
|
||||
;;; Uncommon accent foregrounds
|
||||
|
||||
(rust "#db7b5f")
|
||||
(gold "#c0965b")
|
||||
(olive "#9cbd6f")
|
||||
(slate "#76afbf")
|
||||
(indigo "#9099d9")
|
||||
(maroon "#cf7fa7")
|
||||
(pink "#d09dc0")
|
||||
|
||||
;;; Common accent backgrounds
|
||||
|
||||
(bg-red-intense "#9d1f1f")
|
||||
(bg-green-intense "#2f822f")
|
||||
(bg-yellow-intense "#7a6100")
|
||||
(bg-blue-intense "#1640b0")
|
||||
(bg-magenta-intense "#7030af")
|
||||
(bg-cyan-intense "#2266ae")
|
||||
|
||||
(bg-red-subtle "#620f2a")
|
||||
(bg-green-subtle "#00422a")
|
||||
(bg-yellow-subtle "#4a4000")
|
||||
(bg-blue-subtle "#242679")
|
||||
(bg-magenta-subtle "#552f5f")
|
||||
(bg-cyan-subtle "#004065")
|
||||
|
||||
(bg-red-nuanced "#2c0614")
|
||||
(bg-green-nuanced "#001904")
|
||||
(bg-yellow-nuanced "#221000")
|
||||
(bg-blue-nuanced "#0f0e39")
|
||||
(bg-magenta-nuanced "#230631")
|
||||
(bg-cyan-nuanced "#041529")
|
||||
|
||||
;;; Uncommon accent backgrounds
|
||||
|
||||
(bg-ochre "#442c2f")
|
||||
(bg-lavender "#38325c")
|
||||
(bg-sage "#0f3d30")
|
||||
|
||||
;;; Graphs
|
||||
|
||||
(bg-graph-red-0 "#b52c2c")
|
||||
(bg-graph-red-1 "#702020")
|
||||
(bg-graph-green-0 "#afd1c0")
|
||||
(bg-graph-green-1 "#607a8f")
|
||||
(bg-graph-yellow-0 "#facfd6")
|
||||
(bg-graph-yellow-1 "#b57b85")
|
||||
(bg-graph-blue-0 "#4f9fdf")
|
||||
(bg-graph-blue-1 "#004559")
|
||||
(bg-graph-magenta-0 "#b6427f")
|
||||
(bg-graph-magenta-1 "#7f506f")
|
||||
(bg-graph-cyan-0 "#57dfea")
|
||||
(bg-graph-cyan-1 "#00808f")
|
||||
|
||||
;;; Special purpose
|
||||
|
||||
(bg-completion "#004253")
|
||||
(bg-hover "#8e3e3b")
|
||||
(bg-hover-secondary "#00405f")
|
||||
(bg-hl-line "#2f3849")
|
||||
(bg-region "#5a5a5a")
|
||||
(fg-region "#ffffff")
|
||||
|
||||
(bg-char-0 "#922a00")
|
||||
(bg-char-1 "#4f3f7f")
|
||||
(bg-char-2 "#00709f")
|
||||
|
||||
(bg-mode-line-active "#003c52")
|
||||
(fg-mode-line-active "#f0f0f0")
|
||||
(border-mode-line-active "#5f8fb4")
|
||||
(bg-mode-line-inactive "#2d2d2d")
|
||||
(fg-mode-line-inactive "#969696")
|
||||
(border-mode-line-inactive "#606060")
|
||||
|
||||
(modeline-err "#ff7fbf")
|
||||
(modeline-warning "#df9f93")
|
||||
(modeline-info "#4fcfef")
|
||||
|
||||
(bg-tab-bar "#313131")
|
||||
(bg-tab-current "#000000")
|
||||
(bg-tab-other "#545454")
|
||||
|
||||
;;; Diffs
|
||||
|
||||
(bg-added "#004254")
|
||||
(bg-added-faint "#003042")
|
||||
(bg-added-refine "#004f7f")
|
||||
(bg-added-fringe "#008fcf")
|
||||
(fg-added "#9fdfdf")
|
||||
(fg-added-intense "#50c0ef")
|
||||
|
||||
(bg-changed "#2f123f")
|
||||
(bg-changed-faint "#1f022f")
|
||||
(bg-changed-refine "#3f325f")
|
||||
(bg-changed-fringe "#7f55a0")
|
||||
(fg-changed "#e3cfff")
|
||||
(fg-changed-intense "#cf9fe2")
|
||||
|
||||
(bg-removed "#4f1119")
|
||||
(bg-removed-faint "#380a0f")
|
||||
(bg-removed-refine "#781a1f")
|
||||
(bg-removed-fringe "#b81a1f")
|
||||
(fg-removed "#ffbfbf")
|
||||
(fg-removed-intense "#ff9095")
|
||||
|
||||
(bg-diff-context "#1a1a1a")
|
||||
|
||||
;;; Paren match
|
||||
|
||||
(bg-paren-match "#2f7f9f")
|
||||
(bg-paren-expression "#453040")
|
||||
(underline-paren-match unspecified)
|
||||
|
||||
;;; Mappings
|
||||
|
||||
;;;; General mappings
|
||||
|
||||
(fringe bg-dim)
|
||||
(cursor red-intense)
|
||||
|
||||
(keybind red)
|
||||
(name red-cooler)
|
||||
(identifier red-faint)
|
||||
|
||||
(err red-warmer)
|
||||
(warning magenta)
|
||||
(info cyan)
|
||||
|
||||
(underline-err red-intense)
|
||||
(underline-warning magenta-intense)
|
||||
(underline-note cyan-intense)
|
||||
|
||||
(bg-prominent-err bg-red-intense)
|
||||
(fg-prominent-err fg-main)
|
||||
(bg-prominent-warning bg-magenta-intense)
|
||||
(fg-prominent-warning fg-main)
|
||||
(bg-prominent-note bg-cyan-intense)
|
||||
(fg-prominent-note fg-main)
|
||||
|
||||
;;;; Code mappings
|
||||
|
||||
(builtin magenta)
|
||||
(comment red-faint)
|
||||
(constant green-faint)
|
||||
(docstring fg-alt)
|
||||
(docmarkup magenta-faint)
|
||||
(fnname cyan-warmer)
|
||||
(keyword red-cooler)
|
||||
(preprocessor red-warmer)
|
||||
(string cyan)
|
||||
(type blue-warmer)
|
||||
(variable cyan-cooler)
|
||||
(rx-construct red)
|
||||
(rx-backslash magenta)
|
||||
|
||||
;;;; Accent mappings
|
||||
|
||||
(accent-0 cyan)
|
||||
(accent-1 red-warmer)
|
||||
(accent-2 cyan-cooler)
|
||||
(accent-3 magenta)
|
||||
|
||||
;;;; Button mappings
|
||||
|
||||
(fg-button-active fg-main)
|
||||
(fg-button-inactive fg-dim)
|
||||
(bg-button-active bg-active)
|
||||
(bg-button-inactive bg-dim)
|
||||
|
||||
;;;; Completion mappings
|
||||
|
||||
(fg-completion-match-0 cyan)
|
||||
(fg-completion-match-1 red-warmer)
|
||||
(fg-completion-match-2 magenta)
|
||||
(fg-completion-match-3 cyan-cooler)
|
||||
(bg-completion-match-0 unspecified)
|
||||
(bg-completion-match-1 unspecified)
|
||||
(bg-completion-match-2 unspecified)
|
||||
(bg-completion-match-3 unspecified)
|
||||
|
||||
;;;; Date mappings
|
||||
|
||||
(date-common cyan-cooler)
|
||||
(date-deadline red)
|
||||
(date-event fg-alt)
|
||||
(date-holiday red-intense)
|
||||
(date-now fg-main)
|
||||
(date-range fg-alt)
|
||||
(date-scheduled magenta)
|
||||
(date-weekday cyan)
|
||||
(date-weekend red-faint)
|
||||
|
||||
;;;; Line number mappings
|
||||
|
||||
(fg-line-number-inactive fg-dim)
|
||||
(fg-line-number-active fg-main)
|
||||
(bg-line-number-inactive bg-dim)
|
||||
(bg-line-number-active bg-active)
|
||||
|
||||
;;;; Link mappings
|
||||
|
||||
(fg-link cyan)
|
||||
(bg-link unspecified)
|
||||
(underline-link cyan)
|
||||
|
||||
(fg-link-symbolic cyan-cooler)
|
||||
(bg-link-symbolic unspecified)
|
||||
(underline-link-symbolic cyan-cooler)
|
||||
|
||||
(fg-link-visited magenta)
|
||||
(bg-link-visited unspecified)
|
||||
(underline-link-visited magenta)
|
||||
|
||||
;;;; Mail mappings
|
||||
|
||||
(mail-cite-0 cyan-faint)
|
||||
(mail-cite-1 red-faint)
|
||||
(mail-cite-2 magenta-warmer)
|
||||
(mail-cite-3 cyan-warmer)
|
||||
(mail-part cyan-cooler)
|
||||
(mail-recipient cyan)
|
||||
(mail-subject red-cooler)
|
||||
(mail-other cyan)
|
||||
|
||||
;;;; Mark mappings
|
||||
|
||||
(bg-mark-delete bg-red-subtle)
|
||||
(fg-mark-delete red)
|
||||
(bg-mark-select bg-cyan-subtle)
|
||||
(fg-mark-select cyan)
|
||||
(bg-mark-other bg-magenta-subtle)
|
||||
(fg-mark-other magenta-warmer)
|
||||
|
||||
;;;; Prompt mappings
|
||||
|
||||
(fg-prompt cyan-cooler)
|
||||
(bg-prompt unspecified)
|
||||
|
||||
;;;; Prose mappings
|
||||
|
||||
(prose-block fg-dim)
|
||||
(prose-code cyan)
|
||||
(prose-done cyan)
|
||||
(prose-macro red-warmer)
|
||||
(prose-metadata fg-dim)
|
||||
(prose-metadata-value fg-alt)
|
||||
(prose-table fg-alt)
|
||||
(prose-tag fg-alt)
|
||||
(prose-todo red)
|
||||
(prose-verbatim magenta-warmer)
|
||||
|
||||
;;;; Rainbow mappings
|
||||
|
||||
(rainbow-0 cyan)
|
||||
(rainbow-1 red)
|
||||
(rainbow-2 cyan-warmer)
|
||||
(rainbow-3 red-cooler)
|
||||
(rainbow-4 cyan-cooler)
|
||||
(rainbow-5 magenta)
|
||||
(rainbow-6 cyan-faint)
|
||||
(rainbow-7 magenta-faint)
|
||||
(rainbow-8 red-faint)
|
||||
|
||||
;;;; Space mappings
|
||||
|
||||
(bg-space unspecified)
|
||||
(fg-space border)
|
||||
(bg-space-err bg-red-intense)
|
||||
|
||||
;;;; Heading mappings
|
||||
|
||||
(fg-heading-0 cyan-cooler)
|
||||
(fg-heading-1 fg-main)
|
||||
(fg-heading-2 red-faint)
|
||||
(fg-heading-3 cyan-faint)
|
||||
(fg-heading-4 magenta)
|
||||
(fg-heading-5 green-faint)
|
||||
(fg-heading-6 magenta-faint)
|
||||
(fg-heading-7 cyan-faint)
|
||||
(fg-heading-8 fg-dim)
|
||||
|
||||
(bg-heading-0 unspecified)
|
||||
(bg-heading-1 unspecified)
|
||||
(bg-heading-2 unspecified)
|
||||
(bg-heading-3 unspecified)
|
||||
(bg-heading-4 unspecified)
|
||||
(bg-heading-5 unspecified)
|
||||
(bg-heading-6 unspecified)
|
||||
(bg-heading-7 unspecified)
|
||||
(bg-heading-8 unspecified)
|
||||
|
||||
(overline-heading-0 unspecified)
|
||||
(overline-heading-1 unspecified)
|
||||
(overline-heading-2 unspecified)
|
||||
(overline-heading-3 unspecified)
|
||||
(overline-heading-4 unspecified)
|
||||
(overline-heading-5 unspecified)
|
||||
(overline-heading-6 unspecified)
|
||||
(overline-heading-7 unspecified)
|
||||
(overline-heading-8 unspecified))
|
||||
"The entire palette of the `modus-vivendi-tritanopia' theme.
|
||||
|
||||
Named colors have the form (COLOR-NAME HEX-VALUE) with the former
|
||||
as a symbol and the latter as a string.
|
||||
|
||||
Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
|
||||
with both as symbols. The latter is a named color that already
|
||||
exists in the palette and is associated with a HEX-VALUE.")
|
||||
|
||||
(defcustom modus-vivendi-tritanopia-palette-overrides nil
|
||||
"Overrides for `modus-vivendi-tritanopia-palette'.
|
||||
|
||||
Mirror the elements of the aforementioned palette, overriding
|
||||
their value.
|
||||
|
||||
For overrides that are shared across all of the Modus themes,
|
||||
refer to `modus-themes-common-palette-overrides'.
|
||||
|
||||
Theme-specific overrides take precedence over shared overrides.
|
||||
The idea of common overrides is to change semantic color
|
||||
mappings, such as to make the cursor red. Wherea theme-specific
|
||||
overrides can also be used to change the value of a named color,
|
||||
such as what hexadecimal RGB value the red-warmer symbol
|
||||
represents."
|
||||
:group 'modus-themes
|
||||
:package-version '(modus-themes . "4.0.0")
|
||||
:version "30.1"
|
||||
:type '(repeat (list symbol (choice symbol string)))
|
||||
:set #'modus-themes--set-option
|
||||
:initialize #'custom-initialize-default
|
||||
:link '(info-link "(modus-themes) Palette overrides"))
|
||||
|
||||
(modus-themes-theme modus-vivendi-tritanopia
|
||||
modus-vivendi-tritanopia-palette
|
||||
modus-vivendi-tritanopia-palette-overrides)
|
||||
|
||||
(provide-theme 'modus-vivendi-tritanopia))
|
||||
|
||||
;;;###theme-autoload
|
||||
(put 'modus-vivendi-tritanopia 'theme-properties '(:background-mode dark :kind color-scheme :family modus))
|
||||
|
||||
;;; modus-vivendi-tritanopia-theme.el ends here
|
|
@ -102,17 +102,23 @@ Integer values are handled in the `range' slot.")
|
|||
obarray)
|
||||
res))
|
||||
|
||||
(defun comp--compute-typeof-types ()
|
||||
(append comp--typeof-builtin-types
|
||||
(mapcar #'comp--cl-class-hierarchy (comp--all-classes))))
|
||||
|
||||
(defun comp--compute--pred-type-h ()
|
||||
(cl-loop with h = (make-hash-table :test #'eq)
|
||||
for class-name in (comp--all-classes)
|
||||
for pred = (get class-name 'cl-deftype-satisfies)
|
||||
when pred
|
||||
do (puthash pred class-name h)
|
||||
finally return h))
|
||||
|
||||
(cl-defstruct comp-cstr-ctxt
|
||||
(typeof-types (append comp--typeof-builtin-types
|
||||
(mapcar #'comp--cl-class-hierarchy (comp--all-classes)))
|
||||
(typeof-types (comp--compute-typeof-types)
|
||||
:type list
|
||||
:documentation "Type hierarchy.")
|
||||
(pred-type-h (cl-loop with h = (make-hash-table :test #'eq)
|
||||
for class-name in (comp--all-classes)
|
||||
for pred = (get class-name 'cl-deftype-satisfies)
|
||||
when pred
|
||||
do (puthash pred class-name h)
|
||||
finally return h)
|
||||
(pred-type-h (comp--compute--pred-type-h)
|
||||
:type hash-table
|
||||
:documentation "Hash pred -> type.")
|
||||
(union-typesets-mem (make-hash-table :test #'equal) :type hash-table
|
||||
|
@ -135,6 +141,15 @@ Integer values are handled in the `range' slot.")
|
|||
:documentation "Serve memoization for
|
||||
`intersection-mem'."))
|
||||
|
||||
(defun comp-cstr-ctxt-update-type-slots (ctxt)
|
||||
"Update the type related slots of CTXT.
|
||||
This must run after byte compilation in order to account for user
|
||||
defined types."
|
||||
(setf (comp-cstr-ctxt-typeof-types ctxt)
|
||||
(comp--compute-typeof-types))
|
||||
(setf (comp-cstr-ctxt-pred-type-h ctxt)
|
||||
(comp--compute--pred-type-h)))
|
||||
|
||||
(defmacro with-comp-cstr-accessors (&rest body)
|
||||
"Define some quick accessor to reduce code vergosity in BODY."
|
||||
(declare (debug (form body))
|
||||
|
|
|
@ -1431,11 +1431,13 @@ clashes."
|
|||
"Byte-compile and spill the LAP representation for INPUT.
|
||||
If INPUT is a symbol, it is the function-name to be compiled.
|
||||
If INPUT is a string, it is the filename to be compiled."
|
||||
(let ((byte-native-compiling t)
|
||||
(byte-to-native-lambdas-h (make-hash-table :test #'eq))
|
||||
(byte-to-native-top-level-forms ())
|
||||
(byte-to-native-plist-environment ()))
|
||||
(comp-spill-lap-function input)))
|
||||
(let* ((byte-native-compiling t)
|
||||
(byte-to-native-lambdas-h (make-hash-table :test #'eq))
|
||||
(byte-to-native-top-level-forms ())
|
||||
(byte-to-native-plist-environment ())
|
||||
(res (comp-spill-lap-function input)))
|
||||
(comp-cstr-ctxt-update-type-slots comp-ctxt)
|
||||
res))
|
||||
|
||||
|
||||
;;; Limplification pass specific code.
|
||||
|
@ -2548,19 +2550,19 @@ TARGET-BB-SYM is the symbol name of the target block."
|
|||
for insns-seq on (comp-block-insns b)
|
||||
do
|
||||
(pcase insns-seq
|
||||
;; (`((set ,(and (pred comp-mvar-p) mvar-tested-copy)
|
||||
;; ,(and (pred comp-mvar-p) mvar-tested))
|
||||
;; (set ,(and (pred comp-mvar-p) mvar-1)
|
||||
;; (call type-of ,(and (pred comp-mvar-p) mvar-tested-copy)))
|
||||
;; (set ,(and (pred comp-mvar-p) mvar-2)
|
||||
;; (call symbol-value ,(and (pred comp-cstr-cl-tag-p) mvar-tag)))
|
||||
;; (set ,(and (pred comp-mvar-p) mvar-3)
|
||||
;; (call memq ,(and (pred comp-mvar-p) mvar-1) ,(and (pred comp-mvar-p) mvar-2)))
|
||||
;; (cond-jump ,(and (pred comp-mvar-p) mvar-3) ,(pred comp-mvar-p) ,bb1 ,bb2))
|
||||
;; (push `(assume ,mvar-tested ,(make-comp-mvar :type (comp-cstr-cl-tag mvar-tag)))
|
||||
;; (comp-block-insns (comp-add-cond-cstrs-target-block b bb2)))
|
||||
;; (push `(assume ,mvar-tested ,(make-comp-mvar :type (comp-cstr-cl-tag mvar-tag) :neg t))
|
||||
;; (comp-block-insns (comp-add-cond-cstrs-target-block b bb1))))
|
||||
(`((set ,(and (pred comp-mvar-p) mvar-tested-copy)
|
||||
,(and (pred comp-mvar-p) mvar-tested))
|
||||
(set ,(and (pred comp-mvar-p) mvar-1)
|
||||
(call type-of ,(and (pred comp-mvar-p) mvar-tested-copy)))
|
||||
(set ,(and (pred comp-mvar-p) mvar-2)
|
||||
(call symbol-value ,(and (pred comp-cstr-cl-tag-p) mvar-tag)))
|
||||
(set ,(and (pred comp-mvar-p) mvar-3)
|
||||
(call memq ,(and (pred comp-mvar-p) mvar-1) ,(and (pred comp-mvar-p) mvar-2)))
|
||||
(cond-jump ,(and (pred comp-mvar-p) mvar-3) ,(pred comp-mvar-p) ,bb1 ,bb2))
|
||||
(push `(assume ,mvar-tested ,(make-comp-mvar :type (comp-cstr-cl-tag mvar-tag)))
|
||||
(comp-block-insns (comp-add-cond-cstrs-target-block b bb2)))
|
||||
(push `(assume ,mvar-tested ,(make-comp-mvar :type (comp-cstr-cl-tag mvar-tag) :neg t))
|
||||
(comp-block-insns (comp-add-cond-cstrs-target-block b bb1))))
|
||||
(`((set ,(and (pred comp-mvar-p) cmp-res)
|
||||
(,(pred comp-call-op-p)
|
||||
,(and (or (pred comp-equality-fun-p)
|
||||
|
|
|
@ -128,6 +128,7 @@ longer than `erc-fill-column'."
|
|||
;; things hard to maintain.
|
||||
'((nicknames 0 erc-button-buttonize-nicks erc-nick-popup 0)
|
||||
(erc-button-url-regexp 0 t browse-url-button-open-url 0)
|
||||
;; ("<URL: *\\([^<> ]+\\) *>" 0 t browse-url-button-open-url 1)
|
||||
;;; ("(\\(\\([^~\n \t@][^\n \t@]*\\)@\\([a-zA-Z0-9.:-]+\\)\\)" 1 t finger 2 3)
|
||||
;; emacs internal
|
||||
("[`‘]\\([a-zA-Z][-a-zA-Z_0-9!*<=>+]+\\)['’]"
|
||||
|
@ -629,15 +630,13 @@ greater than `point-min' with a text property of `erc-callback'.")
|
|||
"Go to the ARGth next button."
|
||||
(declare (advertised-calling-convention (arg) "30.1"))
|
||||
(interactive "p")
|
||||
(setq arg (pcase arg ((pred listp) (prefix-numeric-value arg)) (_ arg)))
|
||||
(erc--button-next arg))
|
||||
(erc--button-next (or arg 1)))
|
||||
|
||||
(defun erc-button-previous (&optional arg)
|
||||
"Go to ARGth previous button."
|
||||
(declare (advertised-calling-convention (arg) "30.1"))
|
||||
(interactive "p")
|
||||
(setq arg (pcase arg ((pred listp) (prefix-numeric-value arg)) (_ arg)))
|
||||
(erc--button-next (- arg)))
|
||||
(erc--button-next (- (or arg 1))))
|
||||
|
||||
(defun erc-button-previous-of-nick (arg)
|
||||
"Go to ARGth previous button for nick at point."
|
||||
|
|
|
@ -124,6 +124,7 @@ custom function which returns the directory part and set
|
|||
(defcustom erc-truncate-buffer-on-save nil
|
||||
"Erase the contents of any ERC (channel, query, server) buffer when it is saved."
|
||||
:type 'boolean)
|
||||
(make-obsolete 'erc-truncate-buffer-on-save 'erc-cmd-CLEAR "30.1")
|
||||
|
||||
(defcustom erc-enable-logging t
|
||||
"If non-nil, ERC will log IRC conversations.
|
||||
|
@ -230,6 +231,7 @@ also be a predicate function. To only log when you are not set away, use:
|
|||
(add-hook 'erc-part-hook #'erc-conditional-save-buffer)
|
||||
;; append, so that 'erc-initialize-log-marker runs first
|
||||
(add-hook 'erc-connect-pre-hook #'erc-log-setup-logging 'append)
|
||||
(add-hook 'erc--pre-clear-functions #'erc-save-buffer-in-logs)
|
||||
(dolist (buffer (erc-buffer-list))
|
||||
(erc-log-setup-logging buffer))
|
||||
(erc--modify-local-map t "C-c C-l" #'erc-save-buffer-in-logs))
|
||||
|
@ -242,6 +244,7 @@ also be a predicate function. To only log when you are not set away, use:
|
|||
(remove-hook 'erc-quit-hook #'erc-conditional-save-queries)
|
||||
(remove-hook 'erc-part-hook #'erc-conditional-save-buffer)
|
||||
(remove-hook 'erc-connect-pre-hook #'erc-log-setup-logging)
|
||||
(remove-hook 'erc--pre-clear-functions #'erc-save-buffer-in-logs)
|
||||
(dolist (buffer (erc-buffer-list))
|
||||
(erc-log-disable-logging buffer))
|
||||
(erc--modify-local-map nil "C-c C-l" #'erc-save-buffer-in-logs)))
|
||||
|
@ -301,6 +304,8 @@ Returns nil if `erc-server-buffer-p' returns t."
|
|||
(dolist (buffer (erc-buffer-list))
|
||||
(erc-save-buffer-in-logs buffer)))
|
||||
|
||||
(defvar erc-log--save-in-progress-p nil)
|
||||
|
||||
;;;###autoload
|
||||
(defun erc-logging-enabled (&optional buffer)
|
||||
"Return non-nil if logging is enabled for BUFFER.
|
||||
|
@ -310,6 +315,7 @@ is writable (it will be created as necessary) and
|
|||
`erc-enable-logging' returns a non-nil value."
|
||||
(or buffer (setq buffer (current-buffer)))
|
||||
(and erc-log-channels-directory
|
||||
(not erc-log--save-in-progress-p)
|
||||
(or (functionp erc-log-channels-directory)
|
||||
(erc-directory-writable-p erc-log-channels-directory))
|
||||
(if (functionp erc-enable-logging)
|
||||
|
@ -399,7 +405,7 @@ automatically.
|
|||
You can save every individual message by putting this function on
|
||||
`erc-insert-post-hook'."
|
||||
(interactive)
|
||||
(or buffer (setq buffer (current-buffer)))
|
||||
(unless (bufferp buffer) (setq buffer (current-buffer)))
|
||||
(when (erc-logging-enabled buffer)
|
||||
(let ((file (erc-current-logfile buffer))
|
||||
(coding-system erc-log-file-coding-system))
|
||||
|
@ -423,10 +429,11 @@ You can save every individual message by putting this function on
|
|||
(write-region start end file t 'nomessage))))
|
||||
(if (and erc-truncate-buffer-on-save
|
||||
(called-interactively-p 'interactive))
|
||||
(progn
|
||||
(let ((inhibit-read-only t)) (erase-buffer))
|
||||
(move-marker erc-last-saved-position (point-max))
|
||||
(erc-display-prompt))
|
||||
(let ((erc-log--save-in-progress-p t))
|
||||
(erc-cmd-CLEAR)
|
||||
(erc-button--display-error-notice-with-keys
|
||||
(erc-server-buffer) "Option `%s' is deprecated."
|
||||
" Use /CLEAR instead." 'erc-truncate-buffer-on-save))
|
||||
(move-marker erc-last-saved-position
|
||||
;; If we place erc-last-saved-position at
|
||||
;; erc-insert-marker, because text gets
|
||||
|
|
|
@ -166,12 +166,14 @@ from entering them and instead jump over them."
|
|||
(add-hook 'erc-insert-modify-hook #'erc-add-timestamp t)
|
||||
(add-hook 'erc-send-modify-hook #'erc-add-timestamp t)
|
||||
(add-hook 'erc-mode-hook #'erc-stamp--recover-on-reconnect)
|
||||
(add-hook 'erc--pre-clear-functions #'erc-stamp--reset-on-clear)
|
||||
(unless erc--updating-modules-p
|
||||
(erc-buffer-filter #'erc-munge-invisibility-spec)))
|
||||
((remove-hook 'erc-mode-hook #'erc-munge-invisibility-spec)
|
||||
(remove-hook 'erc-insert-modify-hook #'erc-add-timestamp)
|
||||
(remove-hook 'erc-send-modify-hook #'erc-add-timestamp)
|
||||
(remove-hook 'erc-mode-hook #'erc-stamp--recover-on-reconnect)
|
||||
(remove-hook 'erc--pre-clear-functions #'erc-stamp--reset-on-clear)
|
||||
(erc-with-all-buffers-of-server nil nil
|
||||
(kill-local-variable 'erc-timestamp-last-inserted)
|
||||
(kill-local-variable 'erc-timestamp-last-inserted-left)
|
||||
|
@ -584,6 +586,20 @@ enabled when the message was inserted."
|
|||
(defun erc--echo-ts-csf (_window _before dir)
|
||||
(erc-echo-timestamp dir (get-text-property (point) 'erc-timestamp)))
|
||||
|
||||
(defun erc-stamp--update-saved-position (&rest _)
|
||||
(remove-function (local 'erc-stamp--insert-date-function)
|
||||
#'erc-stamp--update-saved-position)
|
||||
(move-marker erc-last-saved-position (1- (point))))
|
||||
|
||||
(defun erc-stamp--reset-on-clear (pos)
|
||||
"Forget last-inserted stamps when POS is at insert marker."
|
||||
(when (= pos (1- erc-insert-marker))
|
||||
(add-function :after (local 'erc-stamp--insert-date-function)
|
||||
#'erc-stamp--update-saved-position)
|
||||
(setq erc-timestamp-last-inserted nil
|
||||
erc-timestamp-last-inserted-left nil
|
||||
erc-timestamp-last-inserted-right nil)))
|
||||
|
||||
(provide 'erc-stamp)
|
||||
|
||||
;;; erc-stamp.el ends here
|
||||
|
|
|
@ -50,9 +50,9 @@ This prevents the query buffer from getting too large, which can
|
|||
bring any grown Emacs to its knees after a few days worth of
|
||||
tracking heavy-traffic channels."
|
||||
;;enable
|
||||
((add-hook 'erc-insert-post-hook #'erc-truncate-buffer))
|
||||
((add-hook 'erc-insert-done-hook #'erc-truncate-buffer))
|
||||
;; disable
|
||||
((remove-hook 'erc-insert-post-hook #'erc-truncate-buffer)))
|
||||
((remove-hook 'erc-insert-done-hook #'erc-truncate-buffer)))
|
||||
|
||||
;;;###autoload
|
||||
(defun erc-truncate-buffer-to-size (size &optional buffer)
|
||||
|
@ -75,9 +75,11 @@ region is logged if `erc-logging-enabled' returns non-nil."
|
|||
(save-restriction
|
||||
(widen)
|
||||
(let ((end (- erc-insert-marker size)))
|
||||
;; truncate at line boundaries
|
||||
;; Truncate at message boundary (formerly line boundary
|
||||
;; before 5.6).
|
||||
(goto-char end)
|
||||
(beginning-of-line)
|
||||
(goto-char (or (previous-single-property-change (point) 'erc-command)
|
||||
(pos-bol)))
|
||||
(setq end (point))
|
||||
;; try to save the current buffer using
|
||||
;; `erc-save-buffer-in-logs'. We use this, in case the
|
||||
|
@ -91,10 +93,7 @@ region is logged if `erc-logging-enabled' returns non-nil."
|
|||
;; (not (memq 'erc-save-buffer-in-logs
|
||||
;; erc-insert-post-hook))
|
||||
;; Comments?
|
||||
(when (and (boundp 'erc-enable-logging)
|
||||
erc-enable-logging
|
||||
(erc-logging-enabled buffer))
|
||||
(erc-save-buffer-in-logs))
|
||||
(run-hook-with-args 'erc--pre-clear-functions end)
|
||||
;; disable undoing for the truncating
|
||||
(buffer-disable-undo)
|
||||
(let ((inhibit-read-only t))
|
||||
|
@ -103,10 +102,10 @@ region is logged if `erc-logging-enabled' returns non-nil."
|
|||
|
||||
;;;###autoload
|
||||
(defun erc-truncate-buffer ()
|
||||
"Truncates the current buffer to `erc-max-buffer-size'.
|
||||
Meant to be used in hooks, like `erc-insert-post-hook'."
|
||||
"Truncate current buffer to `erc-max-buffer-size'."
|
||||
(interactive)
|
||||
(erc-truncate-buffer-to-size erc-max-buffer-size))
|
||||
(save-excursion
|
||||
(erc-truncate-buffer-to-size erc-max-buffer-size)))
|
||||
|
||||
(provide 'erc-truncate)
|
||||
;;; erc-truncate.el ends here
|
||||
|
|
|
@ -144,6 +144,8 @@ concerning buffers."
|
|||
(declare-function word-at-point "thingatpt" (&optional no-properties))
|
||||
(autoload 'word-at-point "thingatpt") ; for hl-nicks
|
||||
|
||||
(declare-function gnutls-negotiate "gnutls" (&rest rest))
|
||||
(declare-function socks-open-network-stream "socks" (name buffer host service))
|
||||
(declare-function url-host "url-parse" (cl-x))
|
||||
(declare-function url-password "url-parse" (cl-x))
|
||||
(declare-function url-portspec "url-parse" (cl-x))
|
||||
|
@ -2598,6 +2600,22 @@ PARAMETERS should be a sequence of keywords and values, per
|
|||
(setq args `(,name ,buffer ,host ,port ,@p))
|
||||
(apply #'open-network-stream args)))
|
||||
|
||||
(defun erc-open-socks-tls-stream (name buffer host service &rest parameters)
|
||||
"Connect to an IRC server via SOCKS proxy over TLS.
|
||||
Bind `erc-server-connect-function' to this function around calls
|
||||
to `erc-tls'. See `erc-open-network-stream' for the meaning of
|
||||
NAME and BUFFER. HOST should be a \".onion\" URL, SERVICE a TLS
|
||||
port number, and PARAMETERS a sequence of key/value pairs, per
|
||||
`open-network-stream'. See Info node `(erc) SOCKS' for more
|
||||
info."
|
||||
(require 'gnutls)
|
||||
(require 'socks)
|
||||
(let ((proc (socks-open-network-stream name buffer host service))
|
||||
(cert-info (plist-get parameters :client-certificate)))
|
||||
(gnutls-negotiate :process proc
|
||||
:hostname host
|
||||
:keylist (and cert-info (list cert-info)))))
|
||||
|
||||
;;; Displaying error messages
|
||||
|
||||
(defun erc-error (&rest args)
|
||||
|
@ -2787,6 +2805,18 @@ this option to nil."
|
|||
(cl-assert (< erc-insert-marker erc-input-marker))
|
||||
(cl-assert (= (field-end erc-insert-marker) erc-input-marker)))))
|
||||
|
||||
(defun erc--refresh-prompt ()
|
||||
"Re-render ERC's prompt when the option `erc-prompt' is a function."
|
||||
(erc--assert-input-bounds)
|
||||
(when (functionp erc-prompt)
|
||||
(save-excursion
|
||||
(goto-char erc-insert-marker)
|
||||
;; Avoid `erc-prompt' (the named function), which appends a
|
||||
;; space, and `erc-display-prompt', which propertizes all but
|
||||
;; that space.
|
||||
(insert-and-inherit (funcall erc-prompt))
|
||||
(delete-region (point) (1- erc-input-marker)))))
|
||||
|
||||
(defun erc-display-line-1 (string buffer)
|
||||
"Display STRING in `erc-mode' BUFFER.
|
||||
Auxiliary function used in `erc-display-line'. The line gets filtered to
|
||||
|
@ -2830,7 +2860,7 @@ If STRING is nil, the function does nothing."
|
|||
(when erc-remove-parsed-property
|
||||
(remove-text-properties (point-min) (point-max)
|
||||
'(erc-parsed nil))))
|
||||
(erc--assert-input-bounds)))))
|
||||
(erc--refresh-prompt)))))
|
||||
(run-hooks 'erc-insert-done-hook)
|
||||
(erc-update-undo-list (- (or (marker-position erc-insert-marker)
|
||||
(point-max))
|
||||
|
@ -3406,10 +3436,17 @@ If no USER argument is specified, list the contents of `erc-ignore-list'."
|
|||
(erc-with-server-buffer
|
||||
(setq erc-ignore-list (delete user erc-ignore-list))))))
|
||||
|
||||
(defvar erc--pre-clear-functions nil
|
||||
"Abnormal hook run when truncating buffers.
|
||||
Called with position indicating boundary of interval to be excised.")
|
||||
|
||||
(defun erc-cmd-CLEAR ()
|
||||
"Clear the window content."
|
||||
(let ((inhibit-read-only t))
|
||||
(delete-region (point-min) (line-beginning-position)))
|
||||
(run-hook-with-args 'erc--pre-clear-functions (1- erc-insert-marker))
|
||||
;; Ostensibly, `line-beginning-position' is for use in lisp code.
|
||||
(delete-region (point-min) (min (line-beginning-position)
|
||||
(1- erc-insert-marker))))
|
||||
t)
|
||||
(put 'erc-cmd-CLEAR 'process-not-needed t)
|
||||
|
||||
|
@ -4755,11 +4792,11 @@ This places `point' just after the prompt, or at the beginning of the line."
|
|||
"Functions to try when user hits \\`TAB' outside of input area.
|
||||
Called with a numeric prefix arg.")
|
||||
|
||||
(defun erc-tab (&optional arg)
|
||||
(defun erc-tab (arg)
|
||||
"Call `completion-at-point' when typing in the input area.
|
||||
Otherwise call members of `erc--tab-functions' with raw prefix
|
||||
ARG until one of them returns non-nil."
|
||||
(interactive "P")
|
||||
Otherwise call members of `erc--tab-functions' with a numeric
|
||||
prefix ARG until one of them returns non-nil."
|
||||
(interactive "p")
|
||||
(if (>= (point) erc-input-marker)
|
||||
(completion-at-point)
|
||||
(run-hook-with-args-until-success 'erc--tab-functions arg)))
|
||||
|
@ -6452,7 +6489,7 @@ Return non-nil only if we actually send anything."
|
|||
(narrow-to-region insert-position (point))
|
||||
(run-hooks 'erc-send-modify-hook)
|
||||
(run-hooks 'erc-send-post-hook))
|
||||
(erc--assert-input-bounds)))))
|
||||
(erc--refresh-prompt)))))
|
||||
|
||||
(defun erc-command-symbol (command)
|
||||
"Return the ERC command symbol for COMMAND if it exists and is bound."
|
||||
|
@ -7410,6 +7447,51 @@ If BUFFER is nil, update the mode line in all ERC buffers."
|
|||
(goto-char (point-min))
|
||||
(insert "X-Debbugs-CC: emacs-erc@gnu.org\n")))
|
||||
|
||||
(defconst erc--news-url
|
||||
"https://git.savannah.gnu.org/cgit/emacs.git/plain/etc/ERC-NEWS")
|
||||
|
||||
(defvar erc--news-temp-file nil)
|
||||
|
||||
(defun erc-news (arg)
|
||||
"Show ERC news in a manner similar to `view-emacs-news'.
|
||||
With ARG, download and display the latest revision, which may
|
||||
contain more up-to-date information, even for older versions."
|
||||
(interactive "P")
|
||||
(find-file
|
||||
(or (and arg erc--news-temp-file
|
||||
(time-less-p (current-time) (car erc--news-temp-file))
|
||||
(cdr erc--news-temp-file))
|
||||
(and arg
|
||||
(with-current-buffer (url-retrieve-synchronously erc--news-url)
|
||||
(goto-char (point-min))
|
||||
(search-forward "200 OK" (pos-eol))
|
||||
(search-forward "\n\n")
|
||||
(delete-region (point-min) (point))
|
||||
(let ((tempfile (make-temp-file "erc-news.")))
|
||||
(write-region (point-min) (point-max) tempfile)
|
||||
(kill-buffer)
|
||||
(cdr (setq erc--news-temp-file
|
||||
(cons (time-add (current-time) (* 60 60 12))
|
||||
tempfile))))))
|
||||
(and-let* ((file (or (eval-when-compile (macroexp-file-name))
|
||||
(locate-library "erc")))
|
||||
(dir (file-name-directory file))
|
||||
(adjacent (expand-file-name "ERC-NEWS" dir))
|
||||
((file-exists-p adjacent)))
|
||||
adjacent)
|
||||
(expand-file-name "ERC-NEWS" data-directory)))
|
||||
(when (fboundp 'emacs-news-view-mode)
|
||||
(emacs-news-view-mode))
|
||||
(let ((v (mapcar #'number-to-string
|
||||
(seq-take-while #'natnump (version-to-list erc-version)))))
|
||||
(while (and v
|
||||
(goto-char (point-min))
|
||||
(not (search-forward (concat "\014\n* Changes in ERC "
|
||||
(string-join v "."))
|
||||
nil t)))
|
||||
(setq v (butlast v))))
|
||||
(beginning-of-line))
|
||||
|
||||
(defun erc-port-to-string (p)
|
||||
"Convert port P to a string.
|
||||
P may be an integer or a service name."
|
||||
|
|
|
@ -83,6 +83,62 @@ RUN ./autogen.sh autoconf
|
|||
RUN ./configure
|
||||
RUN make bootstrap
|
||||
|
||||
# Debian bullseye doesn't provide proper packages. So we use Debian
|
||||
# sid for this.
|
||||
FROM debian:sid as emacs-tree-sitter
|
||||
|
||||
# This corresponds to emacs-base.
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \
|
||||
libc-dev gcc g++ make autoconf automake libncurses-dev gnutls-dev \
|
||||
libdbus-1-dev libacl1-dev acl git texinfo gdb \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install tree-sitter library.
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends -o=Dpkg::Use-Pty=0 \
|
||||
libtree-sitter0 libtree-sitter-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY . /checkout
|
||||
WORKDIR /checkout
|
||||
RUN ./autogen.sh autoconf
|
||||
RUN ./configure --with-tree-sitter
|
||||
RUN make bootstrap
|
||||
|
||||
# Install language grammars.
|
||||
RUN mkdir /usr/local/lib/tree-sitter
|
||||
RUN git config --global http.sslverify "false"
|
||||
# See https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos
|
||||
RUN src/emacs -Q --batch \
|
||||
--eval '(setq \
|
||||
treesit-extra-load-path (list "/usr/local/lib/tree-sitter") \
|
||||
treesit-language-source-alist \
|
||||
(quote ((bash "https://github.com/tree-sitter/tree-sitter-bash") \
|
||||
(c "https://github.com/tree-sitter/tree-sitter-c") \
|
||||
(cmake "https://github.com/uyha/tree-sitter-cmake") \
|
||||
(cpp "https://github.com/tree-sitter/tree-sitter-cpp") \
|
||||
(css "https://github.com/tree-sitter/tree-sitter-css") \
|
||||
(elisp "https://github.com/Wilfred/tree-sitter-elisp") \
|
||||
(elixir "https://github.com/elixir-lang/tree-sitter-elixir") \
|
||||
(java "https://github.com/tree-sitter/tree-sitter-java") \
|
||||
(go "https://github.com/tree-sitter/tree-sitter-go") \
|
||||
(gomod "https://github.com/camdencheek/tree-sitter-go-mod") \
|
||||
(heex "https://github.com/phoenixframework/tree-sitter-heex") \
|
||||
(html "https://github.com/tree-sitter/tree-sitter-html") \
|
||||
(javascript "https://github.com/tree-sitter/tree-sitter-javascript" "master" "src") \
|
||||
(json "https://github.com/tree-sitter/tree-sitter-json") \
|
||||
(make "https://github.com/alemuller/tree-sitter-make") \
|
||||
(markdown "https://github.com/ikatyang/tree-sitter-markdown") \
|
||||
(python "https://github.com/tree-sitter/tree-sitter-python") \
|
||||
(ruby "https://github.com/tree-sitter/tree-sitter-ruby") \
|
||||
(toml "https://github.com/tree-sitter/tree-sitter-toml") \
|
||||
(tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src") \
|
||||
(typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src") \
|
||||
(yaml "https://github.com/ikatyang/tree-sitter-yaml"))))' \
|
||||
--eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \
|
||||
(treesit-install-language-grammar lang "/usr/local/lib/tree-sitter"))'
|
||||
|
||||
FROM emacs-base as emacs-gnustep
|
||||
|
||||
RUN apt-get update && \
|
||||
|
|
|
@ -176,6 +176,16 @@ default:
|
|||
- test/infra/*
|
||||
- test/lisp/progmodes/eglot-tests.el
|
||||
|
||||
.tree-sitter-template:
|
||||
rules:
|
||||
- if: '$CI_PIPELINE_SOURCE == "web"'
|
||||
- if: '$CI_PIPELINE_SOURCE == "schedule"'
|
||||
changes:
|
||||
- "**.in"
|
||||
- lisp/progmodes/*-ts-mode.el
|
||||
- test/infra/*
|
||||
- test/lisp/progmodes/*-ts-mode-tests.el
|
||||
|
||||
.native-comp-template:
|
||||
rules:
|
||||
- if: '$CI_PIPELINE_SOURCE == "web"'
|
||||
|
@ -256,6 +266,31 @@ test-eglot:
|
|||
# This is needed in order to get a JUnit test report.
|
||||
make_params: '-k -C test check-expensive LOGFILES="lisp/progmodes/eglot-tests.log"'
|
||||
|
||||
build-image-tree-sitter:
|
||||
stage: platform-images
|
||||
extends: [.job-template, .build-template, .tree-sitter-template]
|
||||
variables:
|
||||
target: emacs-tree-sitter
|
||||
|
||||
test-tree-sitter:
|
||||
stage: platforms
|
||||
extends: [.job-template, .test-template, .tree-sitter-template]
|
||||
needs:
|
||||
- job: build-image-tree-sitter
|
||||
optional: true
|
||||
variables:
|
||||
target: emacs-tree-sitter
|
||||
# This is needed in order to get a JUnit test report.
|
||||
files: >-
|
||||
lisp/progmodes/c-ts-mode-tests.log
|
||||
lisp/progmodes/elixir-ts-mode-tests.log
|
||||
lisp/progmodes/go-ts-mode-tests.log
|
||||
lisp/progmodes/heex-ts-mode-tests.log
|
||||
lisp/progmodes/java-ts-mode-tests.log
|
||||
lisp/progmodes/ruby-ts-mode-tests.log
|
||||
lisp/progmodes/typescript-ts-mode-tests.log
|
||||
make_params: '-k -C test check-expensive LD_LIBRARY_PATH=/usr/local/lib/tree-sitter LOGFILES="$files"'
|
||||
|
||||
build-image-gnustep:
|
||||
stage: platform-images
|
||||
extends: [.job-template, .build-template, .gnustep-template]
|
||||
|
|
207
test/lisp/erc/erc-scenarios-log.el
Normal file
207
test/lisp/erc/erc-scenarios-log.el
Normal file
|
@ -0,0 +1,207 @@
|
|||
;;; erc-scenarios-log.el --- erc-log scenarios -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2023 Free Software Foundation, Inc.
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs 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.
|
||||
|
||||
;; GNU Emacs 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 GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'ert-x)
|
||||
(eval-and-compile
|
||||
(let ((load-path (cons (ert-resource-directory) load-path)))
|
||||
(require 'erc-scenarios-common)))
|
||||
|
||||
(require 'erc-log)
|
||||
(require 'erc-truncate)
|
||||
|
||||
(defvar erc-timestamp-format-left)
|
||||
|
||||
(ert-deftest erc-scenarios-log--kill-hook ()
|
||||
:tags '(:expensive-test)
|
||||
(erc-scenarios-common-with-cleanup
|
||||
((erc-scenarios-common-dialog "base/assoc/bouncer-history")
|
||||
(dumb-server (erc-d-run "localhost" t 'foonet))
|
||||
(tempdir (make-temp-file "erc-tests-log." t nil nil))
|
||||
(erc-log-channels-directory tempdir)
|
||||
(erc-modules (cons 'log erc-modules))
|
||||
(port (process-contact dumb-server :service))
|
||||
(logfile (expand-file-name (format "#chan!tester@127.0.0.1:%d.txt" port)
|
||||
tempdir))
|
||||
(erc-server-flood-penalty 0.1)
|
||||
(expect (erc-d-t-make-expecter)))
|
||||
|
||||
(ert-info ("Connect to foonet")
|
||||
(with-current-buffer (erc :server "127.0.0.1"
|
||||
:port port
|
||||
:nick "tester"
|
||||
:password "foonet:changeme"
|
||||
:full-name "tester")
|
||||
(should (string= (buffer-name) (format "127.0.0.1:%d" port)))
|
||||
(funcall expect 5 "foonet")))
|
||||
|
||||
(with-current-buffer (erc-d-t-wait-for 5 (get-buffer "#chan"))
|
||||
(funcall expect 10 "was created on")
|
||||
(funcall expect 10 "please your lordship")
|
||||
(with-current-buffer "foonet"
|
||||
(delete-process erc-server-process)
|
||||
(funcall expect 5 "failed"))
|
||||
(should-not (file-exists-p logfile))
|
||||
(kill-buffer)
|
||||
(should (file-exists-p logfile)))
|
||||
|
||||
(with-temp-buffer
|
||||
(insert-file-contents logfile)
|
||||
(funcall expect 1 "You have joined")
|
||||
(funcall expect 1 "Playback Complete.")
|
||||
(funcall expect 1 "please your lordship"))
|
||||
|
||||
(erc-log-mode -1)
|
||||
(if noninteractive
|
||||
(delete-directory tempdir :recursive)
|
||||
(add-hook 'kill-emacs-hook
|
||||
(lambda () (delete-directory tempdir :recursive))))))
|
||||
|
||||
;; This shows that, in addition to truncating the buffer, /clear also
|
||||
;; syncs the log.
|
||||
|
||||
(ert-deftest erc-scenarios-log--clear-stamp ()
|
||||
:tags '(:expensive-test)
|
||||
(erc-scenarios-common-with-cleanup
|
||||
((erc-scenarios-common-dialog "base/assoc/bouncer-history")
|
||||
(dumb-server (erc-d-run "localhost" t 'foonet))
|
||||
(tempdir (make-temp-file "erc-tests-log." t nil nil))
|
||||
(erc-log-channels-directory tempdir)
|
||||
(erc-modules (cons 'log erc-modules))
|
||||
(erc-timestamp-format-left "\n[%a %b %e %Y @@STAMP@@]\n")
|
||||
(port (process-contact dumb-server :service))
|
||||
(logfile (expand-file-name (format "#chan!tester@127.0.0.1:%d.txt" port)
|
||||
tempdir))
|
||||
(erc-server-flood-penalty 0.1)
|
||||
(expect (erc-d-t-make-expecter)))
|
||||
|
||||
(unless noninteractive
|
||||
(add-hook 'kill-emacs-hook
|
||||
(lambda () (delete-directory tempdir :recursive))))
|
||||
|
||||
(ert-info ("Connect to foonet")
|
||||
(with-current-buffer (erc :server "127.0.0.1"
|
||||
:port port
|
||||
:nick "tester"
|
||||
:password "foonet:changeme"
|
||||
:full-name "tester")
|
||||
(should (string= (buffer-name) (format "127.0.0.1:%d" port)))
|
||||
(funcall expect 5 "foonet")))
|
||||
|
||||
(with-current-buffer (erc-d-t-wait-for 5 (get-buffer "#chan"))
|
||||
(funcall expect 10 "@@STAMP@@")
|
||||
(funcall expect 10 "Grows, lives")
|
||||
(should-not (file-exists-p logfile))
|
||||
(goto-char (point-max))
|
||||
(erc-cmd-CLEAR)
|
||||
(should (file-exists-p logfile))
|
||||
(funcall expect 10 "please your lordship")
|
||||
(ert-info ("Buffer truncated")
|
||||
(goto-char (point-min))
|
||||
(funcall expect 10 "@@STAMP@@" (point)) ; reset
|
||||
(funcall expect -0.1 "Grows, lives")
|
||||
(funcall expect 1 "For these two")))
|
||||
|
||||
(ert-info ("Current contents saved")
|
||||
(with-temp-buffer
|
||||
(insert-file-contents logfile)
|
||||
(funcall expect 1 "@@STAMP@@")
|
||||
(funcall expect 1 "You have joined")
|
||||
(funcall expect 1 "Playback Complete.")
|
||||
(funcall expect 1 "Grows, lives")
|
||||
(funcall expect -0.01 "please your lordship")))
|
||||
|
||||
(ert-info ("Remainder saved, timestamp printed when option non-nil")
|
||||
(with-current-buffer "foonet"
|
||||
(delete-process erc-server-process)
|
||||
(funcall expect 5 "failed"))
|
||||
(kill-buffer "#chan")
|
||||
(with-temp-buffer
|
||||
(insert-file-contents logfile)
|
||||
(funcall expect 1 "@@STAMP@@")
|
||||
(funcall expect 1 "Grows, lives")
|
||||
(funcall expect -0.01 "@@STAMP@@")
|
||||
(forward-line 1) ; no blank, no timestamp
|
||||
(should (looking-at (rx "<bob> alice: For these two hours,")))
|
||||
(funcall expect 1 "please your lordship")))
|
||||
|
||||
(erc-log-mode -1)
|
||||
(when noninteractive (delete-directory tempdir :recursive))))
|
||||
|
||||
(ert-deftest erc-scenarios-log--truncate ()
|
||||
:tags '(:expensive-test)
|
||||
(erc-scenarios-common-with-cleanup
|
||||
((erc-scenarios-common-dialog "base/assoc/bouncer-history")
|
||||
(dumb-server (erc-d-run "localhost" t 'foonet))
|
||||
(tempdir (make-temp-file "erc-tests-log." t nil nil))
|
||||
(erc-log-channels-directory tempdir)
|
||||
(erc-modules (cons 'truncate (cons 'log erc-modules)))
|
||||
(erc-max-buffer-size 512)
|
||||
(port (process-contact dumb-server :service))
|
||||
(logchan (expand-file-name (format "#chan!tester@127.0.0.1:%d.txt" port)
|
||||
tempdir))
|
||||
(logserv (expand-file-name
|
||||
(format "127.0.0.1:%d!tester@127.0.0.1:%d.txt" port port)
|
||||
tempdir))
|
||||
(erc-server-flood-penalty 0.1)
|
||||
(expect (erc-d-t-make-expecter)))
|
||||
|
||||
(unless noninteractive
|
||||
(add-hook 'kill-emacs-hook
|
||||
(lambda () (delete-directory tempdir :recursive))))
|
||||
|
||||
(ert-info ("Connect to foonet")
|
||||
(with-current-buffer (erc :server "127.0.0.1"
|
||||
:port port
|
||||
:nick "tester"
|
||||
:password "foonet:changeme"
|
||||
:full-name "tester")
|
||||
(should (string= (buffer-name) (format "127.0.0.1:%d" port)))
|
||||
(should-not (file-exists-p logserv))
|
||||
(should-not (file-exists-p logchan))
|
||||
(funcall expect 10 "*** MAXLIST=beI:60")
|
||||
(should (= (pos-bol) (point-min)))
|
||||
(should (file-exists-p logserv))))
|
||||
|
||||
(ert-info ("Log file ahead of truncation point")
|
||||
;; Log contains lines still present in buffer.
|
||||
(with-temp-buffer
|
||||
(insert-file-contents logserv)
|
||||
(funcall expect 10 "*** MAXLIST=beI:60")))
|
||||
|
||||
(with-current-buffer (erc-d-t-wait-for 5 (get-buffer "#chan"))
|
||||
(funcall expect 10 "please your lordship")
|
||||
(should (file-exists-p logchan))
|
||||
(funcall expect -0.1 "[07:04:37] alice: Here," (point-min)))
|
||||
|
||||
(ert-info ("Log ahead of truncation point")
|
||||
(with-temp-buffer
|
||||
(insert-file-contents logchan)
|
||||
(funcall expect 1 "You have joined")
|
||||
(funcall expect 1 "[07:04:37] alice: Here,")
|
||||
(funcall expect 1 "loathed enemy")
|
||||
(funcall expect -0.1 "please your lordship")))
|
||||
|
||||
(erc-log-mode -1)
|
||||
(when noninteractive (delete-directory tempdir :recursive))))
|
||||
|
||||
;;; erc-scenarios-log.el ends here
|
|
@ -269,6 +269,105 @@
|
|||
(kill-buffer "bob")
|
||||
(kill-buffer "ServNet"))))
|
||||
|
||||
(ert-deftest erc--refresh-prompt ()
|
||||
(let* ((counter 0)
|
||||
(erc-prompt (lambda ()
|
||||
(format "%s %d>"
|
||||
(erc-format-target-and/or-network)
|
||||
(cl-incf counter))))
|
||||
erc-accidental-paste-threshold-seconds
|
||||
erc-insert-modify-hook
|
||||
erc--input-review-functions
|
||||
erc-send-completed-hook)
|
||||
|
||||
(ert-info ("Server buffer")
|
||||
(with-current-buffer (get-buffer-create "ServNet")
|
||||
(erc-tests--send-prep)
|
||||
(goto-char erc-insert-marker)
|
||||
(should (looking-at-p "ServNet 3>"))
|
||||
(erc-tests--set-fake-server-process "sleep" "1")
|
||||
(set-process-sentinel erc-server-process #'ignore)
|
||||
(setq erc-network 'ServNet
|
||||
erc-server-current-nick "tester"
|
||||
erc-networks--id (erc-networks--id-create nil)
|
||||
erc-server-users (make-hash-table :test 'equal))
|
||||
(set-process-query-on-exit-flag erc-server-process nil)
|
||||
;; Incoming message redraws prompt
|
||||
(erc-display-message nil 'notice nil "Welcome")
|
||||
(should (looking-at-p "ServNet 4>"))
|
||||
;; Say something
|
||||
(save-excursion (goto-char erc-input-marker)
|
||||
(insert "Howdy")
|
||||
(erc-send-current-line)
|
||||
(forward-line -1)
|
||||
(should (looking-at "No target"))
|
||||
(forward-line -1)
|
||||
(should (looking-at "<tester> Howdy")))
|
||||
(should (looking-at-p "ServNet 6>"))
|
||||
;; Space after prompt is unpropertized
|
||||
(should (get-text-property (1- erc-input-marker) 'erc-prompt))
|
||||
(should-not (get-text-property erc-input-marker 'erc-prompt))
|
||||
;; No sign of old prompts
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(should-not (search-forward (rx (any "3-5") ">") nil t)))))
|
||||
|
||||
(ert-info ("Channel buffer")
|
||||
(with-current-buffer (get-buffer-create "#chan")
|
||||
(erc-tests--send-prep)
|
||||
(goto-char erc-insert-marker)
|
||||
(should (looking-at-p "#chan 9>"))
|
||||
(setq erc-server-process (buffer-local-value 'erc-server-process
|
||||
(get-buffer "ServNet"))
|
||||
erc-networks--id (erc-with-server-buffer erc-networks--id)
|
||||
erc--target (erc--target-from-string "#chan")
|
||||
erc-default-recipients (list "#chan")
|
||||
erc-channel-users (make-hash-table :test 'equal))
|
||||
(erc-update-current-channel-member "alice" "alice")
|
||||
(erc-update-current-channel-member "bob" "bob")
|
||||
(erc-update-current-channel-member "tester" "tester")
|
||||
(erc-display-message nil nil (current-buffer)
|
||||
(erc-format-privmessage "alice" "Hi" nil t))
|
||||
(should (looking-at-p "#chan@ServNet 10>"))
|
||||
(save-excursion (goto-char erc-input-marker)
|
||||
(insert "Howdy")
|
||||
(erc-send-current-line)
|
||||
(forward-line -1)
|
||||
(should (looking-at "<tester> Howdy")))
|
||||
(should (looking-at-p "#chan@ServNet 11>"))
|
||||
(save-excursion (goto-char erc-input-marker)
|
||||
(insert "/query bob")
|
||||
(erc-send-current-line))
|
||||
;; Query does not redraw (nor /help, only message input)
|
||||
(should (looking-at-p "#chan@ServNet 11>"))
|
||||
;; No sign of old prompts
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(should-not (search-forward (rx (or "9" "10") ">") nil t)))))
|
||||
|
||||
(ert-info ("Query buffer")
|
||||
(with-current-buffer (get-buffer "bob")
|
||||
(goto-char erc-insert-marker)
|
||||
(should (looking-at-p "bob@ServNet 14>"))
|
||||
(erc-display-message nil nil (current-buffer)
|
||||
(erc-format-privmessage "bob" "Hi" nil t))
|
||||
(should (looking-at-p "bob@ServNet 15>"))
|
||||
(save-excursion (goto-char erc-input-marker)
|
||||
(insert "Howdy")
|
||||
(erc-send-current-line)
|
||||
(forward-line -1)
|
||||
(should (looking-at "<tester> Howdy")))
|
||||
(should (looking-at-p "bob@ServNet 16>"))
|
||||
;; No sign of old prompts
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(should-not (search-forward (rx (or "14" "15") ">") nil t)))))
|
||||
|
||||
(when noninteractive
|
||||
(kill-buffer "#chan")
|
||||
(kill-buffer "bob")
|
||||
(kill-buffer "ServNet"))))
|
||||
|
||||
(ert-deftest erc--initialize-markers ()
|
||||
(let ((proc (start-process "true" (current-buffer) "true"))
|
||||
erc-modules
|
||||
|
|
Loading…
Add table
Reference in a new issue