205 lines
8.7 KiB
Plaintext
205 lines
8.7 KiB
Plaintext
|
||
|
||
<p>Raw link: <a href="https://www.youtube.com/watch?v=e-ApnxQeeTY">https://www.youtube.com/watch?v=e-ApnxQeeTY</a></p>
|
||
|
||
<p>In this video presentation I provide an overview of the current state of
|
||
my Modus themes: this is a pair of highly accessible themes that are
|
||
also built into Emacs28 (the current development target). You can find
|
||
the text of the presentation below. It is in <code>org-mode</code> notation. And
|
||
here is the themes’ manual: <a href="https://protesilaos.com/emacs/modus-themes">https://protesilaos.com/emacs/modus-themes</a>.</p>
|
||
|
||
<hr />
|
||
|
||
<pre><code class="language-org">#+TITLE: Status update on the Modus themes
|
||
#+AUTHOR: Protesilaos Stavrou (https://protesilaos.com)
|
||
#+DATE: 2021-05-19
|
||
|
||
In this presentation I want to update you on the status of the Modus
|
||
themes, my highly accessible themes for Emacs.
|
||
|
||
I will be releasing a new version within the next few days (=1.4.0=), so I
|
||
think this is a good opportunity to inform you about what has changed
|
||
over the course of the last few months, specifically since August 2020
|
||
when I last talked about this subject (version =0.12.0= of the themes).
|
||
|
||
* Overview of the project
|
||
|
||
Some quick facts, in case you are not aware of the project:
|
||
|
||
1. The Modus themes consist of a light and a dark variant:
|
||
~modus-operandi~ and ~modus-vivendi~.
|
||
|
||
2. They conform with the WCAG AAA standard for colour contrast (the
|
||
highest legibility standard). This means that the minimum contrast
|
||
ratio is >= 7:1 between background and foreground.
|
||
|
||
3. Their overall design is also good for red-green colour deficiency
|
||
(deuteranopia). It practically means that they avoid cases where it
|
||
is difficult to tell the difference between two constructs because
|
||
those happen to use red and green for colour coding. (more on this
|
||
later)
|
||
|
||
4. They are built into Emacs since August 2020, which means that they
|
||
are part of Emacs28 (the current development target). My last video
|
||
about the themes was an announcement of this fact and an opportunity
|
||
to express my gratitude to everyone who had contributed code,
|
||
reported issues, or helped with packaging (the manual has an
|
||
"Acknowledgements" section).
|
||
|
||
5. There have been over 1700 commits in less than two years since the
|
||
project became public (first commit to the old =master= branch in
|
||
2019-07-09, new commits to the current =main= branch since 2020-11-11).
|
||
I started the Modus themes as soon as I switched to Emacs.
|
||
|
||
6. Over 300 Emacs packages or face groups are explicitly supported. More
|
||
are covered indirectly, as they inherit styles from some supported
|
||
group. In practice, the themes should work in virtually every
|
||
scenario and I am always prepared to adapt to changes in the Emacs
|
||
ecosystem.
|
||
|
||
7. There are 30 customisation variables. Some are boolean types or
|
||
numbers, though most offer a variety of options. Every variable's
|
||
doc string provides information on what it does.
|
||
|
||
8. The project comes with a fully fledged manual. In source form it is
|
||
available as an =.org= document, though packages get it as an =.info=
|
||
file, which is what Emacs Info reader parses. The manual covers
|
||
everything that the themes provide and offers guidance on how users
|
||
can enact various reforms on their end. It is over 23.000 words
|
||
long, without trying to be verbose.
|
||
|
||
* The switch to =1.0.0=
|
||
|
||
In December 2020, there was a major refactoring of the project. The two
|
||
themes are now derived from a single source and share customisation
|
||
options. They are also packaged together as =modus-themes=.
|
||
|
||
Whereas up to version =0.13.0= they were designed as standalone files and
|
||
were packaged separately: =modus-operandi-theme=, =modus-vivendi-theme=.
|
||
Those old packages have long been removed from MELPA and have already
|
||
been deprecated in GNU ELPA, to the effect that they pull in the new
|
||
=modus-themes= package when you try to install them.
|
||
|
||
I will coordinate with Stefan Monnier, the de facto GNU ELPA maintainer,
|
||
to decide on the best timing for removing the old packages altogether.
|
||
It will probably happen within the next few weeks.
|
||
|
||
Note that the GNU ELPA package is synced with emacs.git so users of
|
||
earlier version can effectively get what is already built into Emacs28.
|
||
|
||
[ Recall that GNU ELPA is the official package archive of Emacs: users
|
||
do not need to set it up. ]
|
||
|
||
The refactoring was an ideal opportunity to change the name of the
|
||
primary branch from =master= to =main= to be better aligned with the
|
||
expectations and sensitivities of users. So if you were tracking the
|
||
git repo, please make sure to update your package accordingly (contact
|
||
me if you need help).
|
||
|
||
* Optimising for red-green colour deficiency (deuteranopia)
|
||
|
||
As already noted, the themes are good for users with red-green colour
|
||
deficiency. This is because most applied colours in the themes are
|
||
situated in the cyan-blue-magenta side of the spectrum or are part of
|
||
the gray scale. That is for technical reasons pertaining to relative
|
||
luminance, though it takes aesthetic judgement to determine exact
|
||
colours values and combinations in each context.
|
||
|
||
There are, however, a couple of cases where the themes are not good for
|
||
deuteranopia out-of-the-box. Those are diffs (e.g. Magit) and keywords
|
||
that denote success, such as Org's TODO and DONE tags. Both use a
|
||
red-green colour coding system by default.
|
||
|
||
For those cases, there are customisation options to switch to a red-blue
|
||
system instead. Briefly:
|
||
|
||
#+begin_src emacs-lisp
|
||
(setq modus-themes-diffs 'deuteranopia)
|
||
;; OR
|
||
(setq modus-themes-diffs 'fg-only-deuteranopia)
|
||
|
||
(setq modus-themes-success-deuteranopia t)
|
||
#+end_src
|
||
|
||
A sample diff hunk with =(setq modus-themes-diffs 'fg-only-deuteranopia)=:
|
||
|
||
#+begin_src diff
|
||
--- a/emacs/.emacs.d/prot-lisp/prot-notmuch.el
|
||
+++ b/emacs/.emacs.d/prot-lisp/prot-notmuch.el
|
||
@@ -219,7 +219,8 @@ ;;;; Mode line unread indicator
|
||
;; does not rely on notmuch as it uses find instead. The following
|
||
;; approach is specific to my setup and is what I prefer now.
|
||
|
||
-(defcustom prot-notmuch-mode-line-search-args "tag:unread and tag:inbox"
|
||
+(defcustom prot-notmuch-mode-line-search-args
|
||
+ "--output:files tag:unread and tag:inbox"
|
||
"Arguments to pass to 'notmuch search' for counting new mail."
|
||
:type 'string
|
||
:group 'prot-notmuch)
|
||
#+end_src
|
||
* Customisations and the manual
|
||
|
||
Customisations can help with accessibility. This is true, for example,
|
||
with the red-green colour deficiency I just described. They can also
|
||
make the theme more pleasant for a user, thus indirectly contributing to
|
||
their productivity (if something is annoying, it is distracting).
|
||
|
||
Here are all the user-facing variables, except the ones for overriding
|
||
colours:
|
||
|
||
#+begin_src emacs-lisp
|
||
(setq modus-themes-slanted-constructs t
|
||
modus-themes-bold-constructs t
|
||
modus-themes-no-mixed-fonts nil
|
||
modus-themes-subtle-line-numbers t
|
||
modus-themes-success-deuteranopia t
|
||
modus-themes-fringes nil
|
||
modus-themes-lang-checkers nil
|
||
modus-themes-mode-line 'accented-3d
|
||
modus-themes-syntax nil
|
||
modus-themes-hl-line 'underline-accented
|
||
modus-themes-paren-match 'intense
|
||
modus-themes-links 'neutral-underline
|
||
modus-themes-prompts 'subtle-gray
|
||
modus-themes-completions nil
|
||
modus-themes-mail-citations 'desaturated
|
||
modus-themes-region 'bg-only-no-extend
|
||
modus-themes-diffs 'fg-only-deuteranopia
|
||
modus-themes-org-blocks nil
|
||
modus-themes-org-habit nil
|
||
modus-themes-headings '((1 . section)
|
||
(2 . line-no-bold)
|
||
(3 . rainbow-section)
|
||
(t . rainbow-no-bold))
|
||
modus-themes-variable-pitch-ui nil
|
||
modus-themes-variable-pitch-headings nil
|
||
modus-themes-scale-headings nil
|
||
modus-themes-scale-1 1.1
|
||
modus-themes-scale-2 1.15
|
||
modus-themes-scale-3 1.21
|
||
modus-themes-scale-4 1.27
|
||
modus-themes-scale-5 1.33)
|
||
#+end_src
|
||
|
||
Let's switch away from this presentation so I can show you the manual.
|
||
|
||
* Next version and future plans
|
||
|
||
I will release version =1.4.0= some time within the next ten days or so.
|
||
It depends on whether there is some last minute issue I need to address.
|
||
And I also need to find time to write the release notes for the new
|
||
version. Each change log entry is detailed (i.e. several thousand
|
||
words) and you can always find them all together in the CHANGELOG.
|
||
|
||
For the future of the project, I plan to continue with =1.X= releases for
|
||
a few more months until I am 100% confident that everything is polished
|
||
and works as expected. I think this is already true, but I prefer to
|
||
err on the side of caution.
|
||
|
||
Once we reach that state I will switch to version =2.0.0= which will mark
|
||
the culmination of those two years work into an official super stable
|
||
release. I might have more to share by that time, though don't expect
|
||
anything groundbreaking.
|
||
</code></pre>
|
||
|
||
|