# rss_item

guid: https://protesilaos.com/codelog/2021-05-15-emacs-notmuch/
title: Demo of the Emacs front-end to Notmuch (email)
url: https://protesilaos.com/codelog/2021-05-15-emacs-notmuch/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Raw link: <a href="https://www.youtube.com/watch?v=g7iF11qamh8">https://www.youtube.com/watch?v=g7iF11qamh8</a></p>
         
         <p>In this video I showcase the Emacs front-end to the <code>notmuch</code> program.
Notmuch is a tool that indexes and searches through a local maildir
directory, while its Emacs interface is a powerful tool for handling
email correspondence, mailing lists, etc.</p>

<p>Notmuch only indexes and searches mail.  To actually fetch and send mail
you need other programs.  I document everything at length in my dotemacs
and I also share my exact configurations for all those tools:
<a href="https://protesilaos.com/emacs/dotemacs">https://protesilaos.com/emacs/dotemacs</a>.</p>

<p>Everything is part of my dotfiles’ repository:
<a href="https://gitlab.com/protesilaos/dotfiles">https://gitlab.com/protesilaos/dotfiles</a>.</p>
        
      


guid: https://protesilaos.com/codelog/2021-05-19-modus-themes-status-update/
title: Status update on the Modus themes for Emacs (2021-05-19)
url: https://protesilaos.com/codelog/2021-05-19-modus-themes-status-update/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <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 &gt;= 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>
        
      


guid: https://protesilaos.com/codelog/2021-05-25-modus-themes-1-4-0/
title: Modus themes 1.4.0 for GNU Emacs
url: https://protesilaos.com/codelog/2021-05-25-modus-themes-1-4-0/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Published version <code>1.4.0</code> of <a href="https://protesilaos.com/emacs/modus-themes">the Modus
themes</a>.  The detailed release
notes are provided below.  For a general overview of the project watch
<a href="https://protesilaos.com/codelog/2021-05-19-modus-themes-status-update/">the status update of
2021-05-19</a>.
For any questions pertaining to this publication feel welcome to
<a href="https://protesilaos.com/contact/">contact me</a>.</p>

<p>A patch to update the version of the themes that are shipped with Emacs
will be prepared right after this announcement is published.  GNU ELPA
syncs from emacs.git, so expect an update shortly thereafter.</p>

<hr />

<h2>Modus themes version 1.4.0</h2>

<p>By Protesilaos Stavrou <a href="mailto:info@protesilaos.com">info@protesilaos.com</a> on 2021-05-25</p>

<p>This entry records the changes made to the project since the release of
version 1.3.0 on 2021-04-17.  There have been around 100 commits in the
meantime, as is the norm.</p>

<p>If you are coming from older versions, please consult the change log
entry for version 1.0.0 with regard to the breaking changes that were
introduced.</p>

<p>Every colour-related modification is always done in accordance with the
overarching accessibility objective of the themes for a minimum contrast
ratio of 7:1 between background and foreground values in their given
combination (the WCAG AAA standard).</p>

<p>URL of the official manual: <a href="https://protesilaos.com/emacs/modus-themes">https://protesilaos.com/emacs/modus-themes</a>.  Or
read it with Emacs’ Info reader by evaluating this form:</p>

<pre><code>(info "(modus-themes) Top")
</code></pre>

<p>Remember that the themes are built into Emacs version 28 (current
development target), and are available on GNU ELPA, as well as other
archives.</p>

<h2>Customisations variables</h2>

<ul>
  <li>
    <p>Redefined the style of <code>fg-only</code> that <code>modus-themes-diffs</code> accepts, so
that it no longer uses a red-green colour coding, but applies a
red-blue distinction instead.  The symbol <code>fg-only</code> is a deprecated
alias for the more descriptive <code>fg-only-deuteranopia</code>.</p>

    <p>This is done because green text on a light background is one of the
worst combinations for the purposes of legibility, as it does not
stand out in its context and thus forces undesirable compromises.
Whereas red and blue work well in this case, while making the style
accessible to users with red-green colour deficiency (deuteranopia).
To avoid inconsistencies between Modus Operandi and Modus Vivendi, we
replace green with blue in both themes.  A full report is available in
issue 183 which was created on April 21, 2021:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/183">https://gitlab.com/protesilaos/modus-themes/-/issues/183</a>.</p>
  </li>
  <li>
    <p>Introduced the boolean <code>modus-themes-success-deuteranopia</code> which
replaces all instances of green with blue in contexts where a
red-green colour coding is in effect (e.g. Org TODO vs DONE keywords,
isearch current match…).</p>
  </li>
  <li>
    <p>Implemented <code>modus-themes-mail-citations</code> to control the colouration
of cited text in email-related buffers, such as Gnus or message.el.
It accepts values nil, <code>faint</code>, and <code>monochrome</code>.  By default (the nil
value) the text of citations cycles through blue, green, red, yellow
depending on the level of depth.</p>
  </li>
  <li>
    <p>Expanded the set of options for <code>modus-themes-mode-line</code> to encompass
the values <code>borderless-accented</code>, <code>borderless-accented-3d</code>, and
<code>borderless-accented-moody</code>.  Those are variations of existing styles.
The complete list:</p>

    <ul>
      <li>nil (default)</li>
      <li>3d</li>
      <li>moody</li>
      <li>borderless</li>
      <li>borderless-3d</li>
      <li>borderless-moody</li>
      <li>accented</li>
      <li>accented-3d</li>
      <li>accented-moody</li>
      <li>borderless-accented</li>
      <li>borderless-accented-3d</li>
      <li>borderless-accented-moody</li>
    </ul>
  </li>
  <li>
    <p>Renamed the non-nil values that <code>modus-themes-org-blocks</code> accepts from
<code>grayscale</code>, <code>rainbow</code> to <code>gray-background</code> and <code>tinted-background</code>,
respectively.  The new symbols better describe their effect on Org
source blocks, namely, that they affect the background of the block
rather than the foreground.  The old symbols will still work but are
considered deprecated aliases of the newer ones.</p>
  </li>
  <li>
    <p>Altered the intensity of the <code>modus-themes-hl-line</code> option
<code>accented-background</code> to a more noticeable shade of cyan/teal.  The
old style was too subtle to have the desired effect.  The value
<code>underline-accented</code> is not affected by this change, as it still uses
the same subtle background it did before in combination with a more
pronounced underline colour.</p>
  </li>
  <li>
    <p>Deleted all deprecation warnings that concerned the transition from
version 0.13.0 of the themes to 1.0.0.  Those had been in effect for
several months, spanning four tagged releases.</p>
  </li>
</ul>

<h2>Faces or face groups</h2>

<ul>
  <li>
    <p>Reconsidered the use of colour in all email-related citation faces to
avoid exaggerations and reduce complexity.  Colour values have been
tweaked to tone down their overall intensity, while the number of
colours has been reduced to four.  Gnus and Mu4e have faces for more
levels of citation depth, though those will simply repeat the
four-colour cycle.</p>
  </li>
  <li>
    <p>Made the <code>message-mml</code> face look consistent with the rest of the
buffer while composing an email by changing its foreground colour from
a yellow to a cyan variant.</p>
  </li>
  <li>
    <p>Refined several faces in the Notmuch group in the interest of harmony:</p>

    <ul>
      <li>
        <p>Individual message headers in <code>notmuch-show-mode</code> use bold text in
addition to their existing subtle background to better stand out in
their context. The face is <code>notmuch-message-summary-face</code>.</p>
      </li>
      <li>
        <p>Tags are no longer set unconditionally to a bold typographic weight.
They become such for unread threads in <code>notmuch-search-mode</code>
buffers, as well as for headers of <code>notmuch-show-mode</code>.</p>
      </li>
      <li>
        <p>Removal and addition of tags is now denoted by a strike-through and
an underline effect, respectively, whereas before they both used
underlines with the only difference being their colour.</p>
      </li>
      <li>
        <p>The subject line in <code>notmuch-search-mode</code> buffers uses the main
foreground instead of a dimmed one.  The field of matching authors
has a tweaked foreground to keep the tabular view easy to read.</p>
      </li>
      <li>
        <p>All cryptography-related faces are simplified to not show a coloured
background but only use a foreground colour instead.</p>
      </li>
    </ul>
  </li>
  <li>
    <p>Removed direct support for <code>counsel-notmuch</code> as it already inherits
from the relevant notmuch faces.  The package is thus considered
indirectly supported.</p>
  </li>
  <li>
    <p>Refrained from setting a background to the <code>csv-separator-face</code> as it
would inevitably colourise the negative space in the tabular view
created by <code>csv-align-mode</code>.  A red text colour is used instead, even
though this is not common practice: it is easier to spot for small,
single characters, such as a comma or a semicolon that is meant to
have a special meaning.  Thanks to Kevin Fleming for reporting the
problem and for offering feedback on the choice of colour in issue
194: <a href="https://gitlab.com/protesilaos/modus-themes/-/issues/194">https://gitlab.com/protesilaos/modus-themes/-/issues/194</a>.</p>
  </li>
  <li>
    <p>Distinguished between ordinary links and widget buttons by removing
the underline from the latter (the <code>widget-button</code> face) and altering
the shade of its foreground colour.  Such widgets are used in Emacs’
Custom interfaces and can also be found in the default Notmuch “hello”
buffer that runs <code>notmuch-hello-mode</code>.</p>
  </li>
  <li>
    <p>Tweaked the Ediff current faces to be consistent with <code>diff-mode</code> and
related.  In practice, this only applies when <code>modus-themes-diffs</code> is
set to a value of <code>fg-only-deuteranopia</code>, as it adds a dim background
to the current diff hunk.  All other styles of <code>modus-themes-diffs</code>
look the same as before while using Ediff.</p>
  </li>
  <li>
    <p>Simplified the faces of <code>corfu</code> to match the current state of the
upstream project.  Thanks to Daniel Mendler (its developer) for
reporting this in issue 184:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/184">https://gitlab.com/protesilaos/modus-themes/-/issues/184</a>.</p>
  </li>
  <li>
    <p>Refined all Eshell faces so that the output of <code>ls</code> is consistent with
the overall aesthetic of the themes.  Also made <code>eshell-prompt</code>
inherit from <code>comint-highlight-prompt</code> to look the same as other such
prompts (all are configurable by <code>modus-themes-prompts</code>).</p>
  </li>
  <li>
    <p>Revised <code>eshell-prompt-extras</code> and <code>eshell-git-prompt</code> to use colours
and typographic weight that better match the style of the various
configurations they offer.</p>
  </li>
  <li>
    <p>Simplified <code>eshell-syntax-highlighting</code> to inherit from the standard
Eshell faces, where appropriate.</p>
  </li>
  <li>
    <p>Adjusted the colour of <code>centaur-tabs-active-bar-face</code> and removed the
bespoke <code>fg-tab-accent</code> colour from <code>modus-themes-operandi-colors</code> and
<code>modus-themes-vivendi-colors</code> that was only used by it (and which
should have never been introduced to begin with).</p>
  </li>
  <li>
    <p>Updated the <code>tab-bar-groups</code> faces to match changes upstream.  Thanks
to Fritz Grabo (its developer) for the patch in merge request 35:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/35">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/35</a>.</p>
  </li>
  <li>
    <p>Changed the Ibuffer title and group faces to better differentiate
between group titles and special or non-file-visiting buffers.  Thanks
to Nicolas De Jaeghere for the patch in merge request 37:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/37">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/37</a>.</p>
  </li>
  <li>
    <p>Ensured that all faces that denote a “success” state, or which are
expected to be coloured in green in a red-green binary, can use an
appropriate blue colour (or colour combination that involves blue)
instead when <code>modus-themes-success-deuteranopia</code> is set to a non-nil
value.</p>
  </li>
  <li>
    <p>Added support for the new <code>bookmark-face</code> in Emacs version 28.  This
means that the built-in bookmark.el library is directly supported by
the themes.  This face can be disabled by setting <code>bookmark-fontify</code>
to nil.  Thanks to Mark Barton for reporting the presence of this new
face and for providing feedback on its style in issue 189:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/189">https://gitlab.com/protesilaos/modus-themes/-/issues/189</a>.</p>
  </li>
  <li>
    <p>Aligned <code>hes-mode</code> (<code>highlight-escape-sequences</code>) with the standard
font-lock faces for regexp grouping.  This means that it conforms with
changes to the <code>modus-themes-syntax</code> variable.</p>
  </li>
  <li>
    <p>Reconfigured the <code>org-quote</code> face to adapt its style depending on the
value of <code>modus-themes-org-blocks</code>.  The default is a subtle blue/cold
foreground colour against the main background.  When a value of
<code>gray-background</code> is assigned to <code>modus-themes-org-blocks</code>, the text’s
colour becomes that of the main foreground in order to maintain a good
level of legibility.  Thanks to Rudolf Adamkovič for the feedback in
issue 190: <a href="https://gitlab.com/protesilaos/modus-themes/-/issues/190">https://gitlab.com/protesilaos/modus-themes/-/issues/190</a>.</p>
  </li>
  <li>
    <p>Refashioned the <code>show-paren-match-expression</code> face to make it apply a
bespoke background colour and not override the expression’s foreground
colours.  This face is used by <code>show-paren-mode</code> when the
customisation variable <code>show-paren-style</code> is set to the <code>expression</code>
value.  Thanks to Rudolf Adamkovič for the feedback in issue 191:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/191">https://gitlab.com/protesilaos/modus-themes/-/issues/191</a>.</p>
  </li>
  <li>
    <p>Made headings level 8 use a fine shade of magenta by default instead
of gray (notwithstanding user changes to <code>modus-themes-headings</code>).
This should have a negligible difference in Org or Outline buffers,
but is more noticeable when editing Elisp in Emacs28 while also using
<code>outline-minor-mode</code> and with <code>outline-minor-mode-highlight</code> set to
<code>override</code>.  That is because several top-level forms use that heading
level with those configurations.</p>
  </li>
</ul>

<h2>Documentation (the manual)</h2>

<ul>
  <li>
    <p>Incorporated a sample configuration block with all customisation
variables and with comment annotations of their available options, in
an attempt to make it easier for users to discover what the themes
provide.</p>
  </li>
  <li>
    <p>Replaced all instances of “modeline” with “mode line” for consistency
with the Emacs style.  Thanks to Rudolf Adamkovič for the patch that
started this process in merge request 33:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/33">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/33</a>.</p>
  </li>
  <li>
    <p>Wrote note on setting mode line faces that indicate the state of
<code>god-mode</code>.  Thanks to Rudolf Adamkovič for the feedback in issue 187:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/187">https://gitlab.com/protesilaos/modus-themes/-/issues/187</a>.  Also
thanks to Rudolf for updating the applicable hook in merge request 34:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/34">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/34</a>.</p>
  </li>
  <li>
    <p>Listed <code>org-mode</code> variables that affect fontification in blocks:
<code>org-src-fontify-natively</code>, <code>org-fontify-whole-block-delimiter-line</code>,
and <code>org-fontify-quote-and-verse-blocks</code>.  This complements the
already documented variables <code>org-fontify-whole-heading-line</code> and
<code>org-fontify-done-headline</code> that pertain to headings.</p>
  </li>
  <li>
    <p>Included note on fontifying inline Latex expressions in Org buffers.
Thanks to Rudolf Adamkovič for the feedback in issue 190:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/190">https://gitlab.com/protesilaos/modus-themes/-/issues/190</a>.</p>
  </li>
  <li>
    <p>Elaborated on the use of <code>face-remap-add-relative</code> by means of sample
code that cycles through arbitrary colours for the <code>region</code> face.
This is filed under the “Do It Yourself” (DIY) section.</p>
  </li>
  <li>
    <p>Provided a DIY method for adapting the fontification of Org source
block delimiter lines to the value of <code>modus-themes-org-blocks</code>.</p>
  </li>
  <li>
    <p>Expanded the DIY entry on overriding the saturation of the active
theme’s colours with a method that combines the programmatic approach
with manual overrides.  The user can thus specify the colour values
they want to override and let the rest be handled by Elisp.</p>
  </li>
  <li>
    <p>Introduced a section with answers to Frequently Asked Questions (FAQ)
about the design of the themes as well as recommendations on how to
ensure optimal reading conditions or start thinking about them.  The
questions are:</p>

    <ul>
      <li>Is the contrast ratio about adjacent colors?</li>
      <li>What does it mean to avoid exaggerations?</li>
      <li>Why are colors mostly variants of blue, magenta, cyan?</li>
      <li>What is the best setup for legibility?</li>
    </ul>
  </li>
</ul>

<h2>Miscellaneous</h2>

<ul>
  <li>
    <p>Removed superfluous code from internal functions and adapted their
indentation to make them easier to read.</p>
  </li>
  <li>
    <p>Recalibrated some values in <code>modus-themes-vivendi-colors</code> to ensure
consistency in luminance with other colours that are used in their
context.  Those are subtle changes that can only be discerned in
side-by-side comparisons of the before and after states.  Thanks to
André Alexandre Gomes for the feedback in issue 193:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/193">https://gitlab.com/protesilaos/modus-themes/-/issues/193</a>.</p>
  </li>
  <li>
    <p>Changed the saturation and hueness of the bespoke <code>fg-comment-yellow</code>
in <code>modus-themes-operandi-colors</code> and <code>modus-themes-vivendi-colors</code> to
better contrast with its context, while still keeping its luminance
consistent with its role as a colour for comments in code.  This is
used when <code>modus-themes-syntax</code> is configured appropriately (read its
doc string or consult the manual).</p>
  </li>
  <li>
    <p>Attempted to add explicit support for the faces of the built-in
pulse.el library, but ultimately opted against them as the doc string
of <code>pulse-highlight-face</code> advises against customising it, even though
it is not clear from the source code in emacs.git what the problem
could be.  We shall reconsider this case for the next release cycle.
Thanks to Gustavo Barros for the feedback on several aspects of this
topic in issues 185 and 200:</p>

    <ul>
      <li><a href="https://gitlab.com/protesilaos/modus-themes/-/issues/185">https://gitlab.com/protesilaos/modus-themes/-/issues/185</a></li>
      <li><a href="https://gitlab.com/protesilaos/modus-themes/-/issues/200">https://gitlab.com/protesilaos/modus-themes/-/issues/200</a></li>
    </ul>
  </li>
  <li>
    <p>Took the feedback of John Haman in issue 199 as a reminder to complete
the set of possible values for the <code>modus-themes-mode-line</code> variable:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/199">https://gitlab.com/protesilaos/modus-themes/-/issues/199</a>.</p>
  </li>
</ul>
        
      


guid: https://protesilaos.com/codelog/2021-06-02-modus-themes-org-agenda/
title: Introducing the variable modus-themes-org-agenda
url: https://protesilaos.com/codelog/2021-06-02-modus-themes-org-agenda/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Starting with commit <code>29b5e57e</code> to the <code>main</code> branch of <a href="https://protesilaos.com/emacs/modus-themes">the Modus
themes</a>, users have the option to
customise the presentation of the Org agenda.  This will become widely
available through upstream Emacs and GNU ELPA in version <code>1.5.0</code> of the
themes (tentative release frame in early July).  The new variable is
<code>modus-themes-org-agenda</code>, which accepts an alist where each combination
corresponds to specific parts of the agenda buffers.  Those parts are
parameterised to be styled independent of each other.</p>

<p>First an overview of the user-facing code and then some screen shots:</p>

<pre><code class="language-elisp">(setq modus-themes-org-agenda
      '((header-block . (variable-pitch scale-title))
        (header-date . (grayscale bold-today))
        (scheduled . uniform)
        (habit . traffic-light-deuteranopia)))
</code></pre>

<p>Those associations correspond in the given order to:</p>

<ul>
  <li>
    <p>The block headers that describe each agenda view.  For example, when
you do <code>M-x org-agenda</code> followed by <code>n</code> you get a header at the top
that describes the days’ view and one further below which pertains to
all pending tasks.</p>
  </li>
  <li>
    <p>The date headers in the day views.</p>
  </li>
  <li>
    <p>Items with a scheduled timestamp assigned to them.  Remember that
“scheduled” refers to the day/time a task should be started: it is not
a deadline (read <a href="https://bzg.fr/en/on-using-to-do-lists-efficiently/">On using to-do lists
efficiently</a>
(2021-04-26) by Bastien Guerry, the Org maintainer).</p>
  </li>
  <li>
    <p>The <code>org-habit</code> graph for those who use it to track their consistency
over recurring tasks (e.g. daily exercise).</p>
  </li>
</ul>

<p>The <code>header-block</code> and <code>header-date</code> keys accept lists of values which
combine their effects.  For instance, <code>header-date</code> can use a
<code>workaholic</code> value to apply uniform colouration to weekdays and weekends
and combine it with <code>grayscale</code> so that the colours are black/white
instead of the default shades of cyan.  Those lists can be one item
long, such as <code>(header-date . (grayscale))</code>.  For more items, the order
is not significant, so <code>(header-date . (workaholic grayscale))</code> and
<code>(header-date . (grayscale workaholic))</code> yield the same results.</p>

<p>The <code>scheduled</code> and <code>habit</code> keys accept a symbol, as shown in the sample
alist above.</p>

<h2>Default looks</h2>

<p>This is an agenda buffer without any customisations whatsoever.  We use
colour to differentiate the various constructs, but try not to overdo it
as users’ agendas can be rich with entries and too much colour can be a
hindrance to productivity.</p>

<p><a href="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-operandi-org-agenda-default.png"><img alt="Modus Operandi default" src="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-operandi-org-agenda-default.png" /></a></p>

<p><a href="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-vivendi-org-agenda-default.png"><img alt="Modus Vivendi default" src="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-vivendi-org-agenda-default.png" /></a></p>

<h2>Tweaked looks</h2>

<p>Here is the same agenda view with the following styles (remember to read
either the doc string or the manual’s entry on the matter):</p>

<pre><code class="language-elisp">(setq modus-themes-org-agenda
      '((header-block . (variable-pitch scale-title))
        (header-date . (grayscale bold-today))
        (scheduled . uniform)
        (habit . simplified)))
</code></pre>

<p><a href="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-operandi-org-agenda-tweaked.png"><img alt="Modus Operandi tweaked" src="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-operandi-org-agenda-tweaked.png" /></a></p>

<p><a href="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-vivendi-org-agenda-tweaked.png"><img alt="Modus Vivendi tweaked" src="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-vivendi-org-agenda-tweaked.png" /></a></p>

<h2>Deuteranopia styles</h2>

<p>As I have noted before, such as in <a href="https://protesilaos.com/codelog/2021-05-19-modus-themes-status-update/">my latest status
report</a>
on the Modus themes’ progress, we provide the tools to empower users
with red-green colour deficiency (deuteranopia).  This practically means
to avoid unconditional colour-coding that relies on a distinction
between red and green, by substituting green with blue.  To that end,
the themes provide <code>modus-themes-success-deuteranopia</code> (e.g. for Org
“DONE” tasks or Isearch matches) and <code>modus-themes-diffs</code> which has
relevant styles with a red-blue design.</p>

<p>For <code>modus-themes-org-agenda</code>, the only place where we need to introduce
such an alternative is for the <code>org-habit</code> graph.  We do so by tweaking
the <code>traffic-light</code> style/workflow as <code>traffic-light-deuteranopia</code>: it
uses red, yellow, and blue to present its indicators.</p>

<p>With those configurations we get the following samples:</p>

<pre><code class="language-elisp">(setq modus-themes-success-deuteranopia t)

(setq modus-themes-org-agenda
      '((header-block . (variable-pitch scale-title))
        (header-date . (grayscale bold-today))
        (scheduled . uniform)
        (habit . traffic-light-deuteranopia)))
</code></pre>

<p><a href="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-operandi-org-agenda-deuteranopia.png"><img alt="Modus Operandi deuteranopia" src="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-operandi-org-agenda-deuteranopia.png" /></a></p>

<p><a href="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-vivendi-org-agenda-deuteranopia.png"><img alt="Modus Vivendi deuteranopia" src="https://protesilaos.com/assets/images/attachments/2021-06-02-modus-vivendi-org-agenda-deuteranopia.png" /></a></p>

<h2>Attention to detail</h2>

<p>To develop this variable, I benefited from the insights, commentary,
suggestions, and testing of Gustavo Barros <a href="https://gitlab.com/protesilaos/modus-themes/-/issues/208">in issue
208</a> (the
discussion has over 200 comments as of this writing).  Gustavo put
forward the idea of reviewing the old defaults, which eventually led us
to the realisation that only a new customisation option would suffice;
an option in the form of an alist to offer us maximum flexibility.</p>

<p>Internally, the design of <code>modus-themes-org-agenda</code> draws from the
in-progress patch of Philip Kaludercic on the redesign of compound
values for the numerous customisation options the themes provide,
starting with <code>modus-themes-mode-line</code> (refer to the discussion in
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/40">merge request
40</a>).</p>

<p>Through the discussion with Gustavo, we also identified areas where Org
itself can be improved.  Those will be formalised as patches and sent to
the maintainers.  Their basic idea is to implement faces that are
optimised for their context in the agenda buffers.  I shall work on
those as soon as I am done with this report and will write about them in
those web pages after they are accepted by upstream.</p>

<p>In short, we pay attention to detail and want the best possible result
for all users.  Thanks again to Gustavo for the fruitful collaboration
thus far and thanks in advance to Philip for the forthcoming patches!</p>

<hr />

<p><strong>NOTE:</strong> The <code>modus-themes-org-agenda</code> supersedes the now-deprecated
<code>modus-themes-org-habit</code>.  Users of the old variable can get the exact
same styles by controlling the <code>habit</code> key inside of the new alist, with
possible values still being the same as before, plus the
deuteranopia-optimised addition, namely: <code>nil</code> (default), <code>simplified</code>,
<code>traffic-light</code>, <code>traffic-light-deuteranopia</code>.</p>
        
      


guid: https://protesilaos.com/codelog/2021-07-15-modus-themes-1-5-0/
title: Modus themes 1.5.0 for GNU Emacs
url: https://protesilaos.com/codelog/2021-07-15-modus-themes-1-5-0/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Just published version <code>1.5.0</code> of <a href="https://protesilaos.com/emacs/modus-themes">the Modus
themes</a>.  The detailed release
notes are reproduced below.</p>

<p>For any questions pertaining to this publication, feel welcome to
<a href="https://protesilaos.com/contact/">contact me</a>.</p>

<p>A patch to update the files that are shipped with Emacs28 will be sent
upstream later today (I need a break after taking several hours to write
this log).  The modus-themes package in GNU ELPA fetches its contents
from emacs.git, so expect an update shortly thereafter.</p>

<hr />

<h2>Modus themes version 1.5.0</h2>

<p>By Protesilaos Stavrou <a href="mailto:info@protesilaos.com">info@protesilaos.com</a> on 2021-07-15</p>

<p>This entry outlines the set of changes made to the project since the
release of version 1.4.0 on 2021-05-25.  There have been over 130
commits since then.</p>

<p>Every colour-related modification referenced herein is always
implemented in accordance with the primary accessibility objective of
the themes for a minimum contrast ratio of 7:1 between background and
foreground values in their given combination (the WCAG AAA standard).
Such edits also account for colour-coding that is optimised for the
needs of users with red-green colour deficiency (deuteranopia or
variants).</p>

<p>Here is the URL of the manual: <a href="https://protesilaos.com/emacs/modus-themes">https://protesilaos.com/emacs/modus-themes</a>.
Or read it from Emacs by evaluating this form:</p>

<pre><code>(info "(modus-themes) Top")
</code></pre>

<p>The themes are built into Emacs version 28 (current development target),
and are available on GNU ELPA as well as other archives.</p>

<h3>Customisation options</h3>

<h4>Overview of new style of sets of properties</h4>

<p>Several variables now accept a list of symbols as a value.  Those
represent properties, which can be combined with each other to realise
the possible styles.  The idea was to simplify their specification in
order to make them easier to both maintain and extend.  Thanks to Philip
Kaludercic for introducing this concept in issue 210:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/210">https://gitlab.com/protesilaos/modus-themes/-/issues/210</a>.</p>

<p>The variables are:</p>

<ul>
  <li>
    <p><code>modus-themes-prompts</code> by Philip Kaludercic in merge request 43:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/43">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/43</a></p>
  </li>
  <li>
    <p><code>modus-themes-mode-line</code> by Philip Kaludercic in merge request 40:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/40">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/40</a>.</p>
  </li>
  <li>
    <p><code>modus-themes-lang-checkers</code> by Philip Kaludercic in merge request 46:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/46">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/46</a></p>
  </li>
  <li><code>modus-themes-org-agenda</code></li>
  <li><code>modus-themes-links</code></li>
  <li><code>modus-themes-headings</code></li>
  <li><code>modus-themes-hl-line</code></li>
  <li><code>modus-themes-paren-match</code></li>
  <li><code>modus-themes-region</code></li>
  <li><code>modus-themes-syntax</code></li>
</ul>

<p>Take <code>modus-themes-syntax</code> as an example.  Up until version 1.4.0, it
would only accept a symbol, signifying a predefined style.  So we had
the possible value <code>faint</code> and another <code>faint-yellow-comments</code>.  To make
a third variant of the “faint” aesthetic, such as by combining it with
the “alt syntax” and/or “green strings”, we would need to write new
presets in the form of <code>faint-green-strings</code>, <code>faint-alt-syntax</code>,
<code>faint-alt-syntax-green-strings</code>, <code>faint-green-strings-yellow-comments</code>,
<code>faint-alt-syntax-green-strings-yellow-comments</code>.  That would have been
inefficient, hence why it was not done.</p>

<p>With the new approach of defining a list of properties, those
combinations are all possible.  Such as:</p>

<pre><code>(setq modus-themes-syntax '(faint alt-syntax))

(setq modus-themes-syntax '(yellow-comments alt-syntax green-strings))
</code></pre>

<p>The order in which the properties are set is not significant.</p>

<p>The doc string of each of the aforementioned variables, or the
corresponding entry in the manual, provides guidance on how to configure
things.  The old forms will continue to work for the time being, though
they are considered deprecated and will stop being supported at a future
date.</p>

<h4>Changes in stylistic variants for variables with sets of properties</h4>

<ul>
  <li>
    <p>The meaning of the “alt syntax” style in <code>modus-themes-syntax</code> has
been redefined.  In the past, it used to have green-coloured strings
and doc strings.  Those are now red.  Some other changes have been
implemented to make the overall looks more consistent.  Users who
liked the old style can retain it by passing this list of properties:</p>

    <pre><code>(alt-syntax green-strings)
</code></pre>

    <p>New styles for the “faint” aesthetic are possible, here shown as lists
of properties:</p>

    <pre><code>(faint green-strings)
(faint alt-syntax)
(faint alt-syntax green-strings)
</code></pre>

    <p>To each of those the <code>yellow-comments</code> property can be added as well.</p>

    <p>Consult the doc string or the manual for the technicalities and code
samples.</p>
  </li>
  <li>
    <p>The <code>modus-themes-hl-line</code> no longer has styles that include only an
underline.  Those proved to be problematic under certain circumstances
and were thus removed.</p>

    <p>Minor changes have been implemented to make the following combination
of properties more consistent, by colourising the underline:</p>

    <pre><code>(accented intense underline)
</code></pre>
  </li>
  <li>
    <p>The <code>modus-themes-paren-match</code> now has styles that include an
<code>underline</code> property.  Those extend the old options, such as:</p>

    <pre><code>(bold intense underline)
</code></pre>
  </li>
  <li>
    <p>The <code>modus-themes-headings</code> have an improved set of styles for the “no
text color” aesthetic.  Those involve the <code>monochrome</code> property, which
can now yield results that include a background (whereas before it was
just colourless text for the headings, optionally without a bold
weight).  As this is an alist, here is an example (always check the
docs for fully fledged code samples):</p>

    <pre><code>(setq modus-themes-headings
      '((1 . (background overline))
        (2 . (overline background rainbow))
        (t . (monochrome no-bold background))))
</code></pre>

    <p>To allow a heading level N to retain its original style, a <code>t</code> value
can be passed.  In the previous version of the themes, it was possible
to use <code>nil</code> for the same purpose, though that is no longer valid.  In
those cases, the fallback value of the alist will be used instead,
such as what is noted above:</p>

    <pre><code>(t . (monochrome no-bold background))
</code></pre>
  </li>
  <li>
    <p>The <code>modus-themes-links</code> provide several new possible styles, due to
an expanded set of properties that includes, among others, <code>bold</code>,
<code>italic</code>, and <code>background</code>.  The documentation covers the details.</p>
  </li>
  <li>
    <p>The <code>modus-themes-lang-checkers</code> can now attain a style that uses a
prominently coloured background in addition to what was available
before as a subtle background and the other variants.</p>
  </li>
</ul>

<h4>New variables</h4>

<ul>
  <li>
    <p>The <code>modus-themes-org-agenda</code> provides the means to refashion the
entirety of the Org agenda buffer.  The value it accepts is an alist,
with some keys expecting a symbol and others a list of properties.
The minutia are covered in its doc string.  A possible configuration
can look like this:</p>

    <pre><code>(setq modus-themes-org-agenda
      '((header-block . (variable-pitch scale-title))
        (header-date . (grayscale workaholic bold-today))
        (scheduled . uniform)
        (habit . traffic-light)))
</code></pre>

    <p><code>modus-themes-org-agenda</code> supersedes the old variable that was specific
to the Org habit graph: <code>modus-themes-org-habit</code>.  There now is a
<code>habit</code> key which accepts the same values as before, plus a new style
that is optimised for users with red-green colour deficiency:
<code>traffic-light-deuteranopia</code>.  Please consult the doc string of
<code>modus-themes-org-agenda</code> or the relevant entry to the manual.</p>

    <p>Thanks to Gustavo Barros for contributing to the creation of this
variable as well as to all other changes in the relevant faces that
were done in the interest of usability.  A full report about
<code>modus-themes-org-agenda</code> with screen shots is available here:
<a href="https://protesilaos.com/codelog/2021-06-02-modus-themes-org-agenda/">https://protesilaos.com/codelog/2021-06-02-modus-themes-org-agenda/</a>.</p>

    <p>A patch has been sent to upstream Org, with its review pending, which
improves upon some of the areas we had identified:
<a href="https://lists.gnu.org/archive/html/emacs-orgmode/2021-06/msg00092.html">https://lists.gnu.org/archive/html/emacs-orgmode/2021-06/msg00092.html</a>.</p>
  </li>
  <li>
    <p>The <code>modus-themes-inhibit-reload</code> controls a new behaviour of
automatically reloading the active theme when an option is set via the
Custom interfaces or with <code>customize-set-variable</code>.  To opt-in to this
feature, set the variable to a <code>nil</code> value.</p>

    <p>Thanks to Philip Kaludercic for implementing this in merge request 40:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/40">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/40</a>.</p>

    <p>In the development phase of this option, a bug was identified
pertaining to recursion, as reported by Gustavo Barros in issue 213:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/213">https://gitlab.com/protesilaos/modus-themes/-/issues/213</a>.  Changes
have been made to remove that possibility, as found in merge request
45: <a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/45">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/45</a>.</p>

    <p>A thread was started on the emacs-devel mailing list to inquire upon
the technicalities of this option, but it did not gain any traction:
<a href="https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00828.html">https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00828.html</a>.</p>

    <p>As such, we have decided to take our chances by pressing on with this
feature.  Users who are interested in it are encouraged to give it a
try and report any possible complications.  Issue 213 remains open.</p>
  </li>
  <li>
    <p>The <code>modus-themes-italic-constructs</code> is the new name of the variable
<code>modus-themes-slanted-constructs</code>.  The term “slant” was considered
too vague or technical and some users could have missed the meaning of
this option.</p>
  </li>
  <li>
    <p>The <code>modus-themes-scale-5</code> is renamed to <code>modus-themes-scale-title</code> to
better convey its utility.</p>
  </li>
</ul>

<h3>Changes to the manual</h3>

<ul>
  <li>
    <p>Rewrote or introduced the documentation for all the customisation
options mentioned above.  Also updated relevant code samples, such as
in the manual’s introduction to the customisation options.  Evaluate
this form for an annotated code overview:</p>

    <pre><code>(info "(modus-themes) Customization Options")
</code></pre>
  </li>
  <li>
    <p>Rephrased a reference to “gamma ray values” as “gamma values”.  Thanks
to Anders Johansson for the contribution in merge request 42:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/42">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/42</a>.</p>
  </li>
  <li>
    <p>Removed the Org macro that would insert the build date in the manual’s
introduction.  This was required to make the file reproducible,
otherwise it would keep changing each time a new version of Emacs was
built.  Refer to Emacs bug#48661 by Glenn Morris:
<a href="https://debbugs.gnu.org/cgi/bugreport.cgi?bug=48661">https://debbugs.gnu.org/cgi/bugreport.cgi?bug=48661</a>.</p>
  </li>
  <li>
    <p>Included note on tweaking the key hints that the Avy package produces.
This is in response to issue 215 by Rudolf Adamkovič:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/215">https://gitlab.com/protesilaos/modus-themes/-/issues/215</a>.  Thanks to
Nicolas De Jaeghere for providing the text.</p>
  </li>
  <li>
    <p>Wrote a note on how to control the underlines that are generated in
compilation-mode buffers and related.  It is about configuring the
variable <code>compilation-message-face</code>.</p>
  </li>
  <li>
    <p>Documented how to configure the colours that are applied to the names
of the days in the <code>M-x calendar</code> interface.  The relevant variable is
<code>calendar-weekend-days</code>.</p>
  </li>
  <li>
    <p>Elaborated on a “do it yourself” (DIY) guide on how to benefit from
the hidden feature of the themes about how they handle the bold weight
and the italic slant.  In short, we do not hardcode values and thus
make it easy for users to specify the particularities of what it means
for a face to have a <code>bold</code> or <code>italic</code> attribute.</p>
  </li>
</ul>

<h3>Faces and face groups</h3>

<h4>New entries</h4>

<p>Newly supported packages:</p>

<ul>
  <li>
    <p><code>ledger-mode</code>.  Thanks to Pengji Zhang for the feedback in issue 202:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/202">https://gitlab.com/protesilaos/modus-themes/-/issues/202</a>.</p>
  </li>
  <li>
    <p><code>gotest</code>.  Thanks to Jerry Zhang for the feedback in issue 226:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/226">https://gitlab.com/protesilaos/modus-themes/-/issues/226</a>.</p>
  </li>
  <li>
    <p><code>css-mode</code></p>
  </li>
</ul>

<p>New faces for already supported groups:</p>

<ul>
  <li>
    <p><code>shr-h1</code>, <code>shr-h2</code>, <code>shr-h3</code>, <code>shr-h4</code>, <code>shr-h5</code>, <code>shr-h6</code> of the
shr.el library (simple HTML renderer, as experienced in, for example,
EWW).  Those are available for Emacs28, with a patch by me:
<a href="http://debbugs.gnu.org/cgi/bugreport.cgi?bug=49433">http://debbugs.gnu.org/cgi/bugreport.cgi?bug=49433</a></p>
  </li>
  <li>
    <p><code>apropos-button</code> as a generic face that fontifies faces in apropos
buffers.  Available for Emacs28, with a patch by me:
<a href="https://debbugs.gnu.org/cgi/bugreport.cgi?bug=49162">https://debbugs.gnu.org/cgi/bugreport.cgi?bug=49162</a>.</p>
  </li>
  <li>
    <p><code>selectrum-mouse-highlight</code>.  This makes the mouse hover effect for
selectrum look the same as in most other contexts.  Thanks to okamsn
for the feedback in issue 203:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/203">https://gitlab.com/protesilaos/modus-themes/-/issues/203</a>.</p>
  </li>
</ul>

<h4>Review of existing entries</h4>

<ul>
  <li>
    <p>Added an <code>:extend</code> property to <code>next-error</code> face.  This face is used
for pulse effects.  It is good to have them extend to the edge of the
window, so that they are easier to spot.  Thanks to Gustavo Barros for
the feedback in issue 200, which is about pulse.el:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/200">https://gitlab.com/protesilaos/modus-themes/-/issues/200</a>.</p>
  </li>
  <li>
    <p>Tweaked the various Apropos faces.  The idea was to remove the colour
from the pseudo headings so that we would not get an exaggerated
result of too much variety in the buffer (e.g. that of <code>M-x apropos</code>).
The individual buttons retain their style as links, meaning that they
are governed by the variable <code>modus-themes-links</code>.</p>
  </li>
  <li>
    <p>Revised <code>whitespace-line</code> face to make it look like a warning, as it
ought to be.  Thanks to Pengji Zhang for the feedback in issue 204:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/204">https://gitlab.com/protesilaos/modus-themes/-/issues/204</a>.</p>
  </li>
  <li>
    <p>Reworked the colour-coding of the Hydra and Transient packages.  These
are meant to tone down some excesses with the standard red and to
adapt other colours to it.  Thanks to Gustavo Barros for providing
suggestions and helping me tweak those in issue 206:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/206">https://gitlab.com/protesilaos/modus-themes/-/issues/206</a>.</p>
  </li>
  <li>
    <p>Recoloured <code>transient-argument</code> to improve its uniqueness in its
context and to better comply with the expectation of hydra-style
colour coding, as noted right above.</p>
  </li>
  <li>
    <p>Made the <code>org-agenda-done</code> face conform with the customisation option
<code>modus-themes-success-deuteranopia</code>.  This means that it will be
coloured in blue instead of green when the option is set to a non-nil
value.</p>
  </li>
  <li>
    <p>Grayed out the foreground of the Org block delimiter lines on the
premise that any extra colouration was not needed, given the presence
of a gray background and the overall markup of the block.</p>
  </li>
  <li>
    <p>Toned down the colouration of the <code>org-code</code> face, so that it is
consistent with <code>org-verbatim</code> as well as the colours used in opening
and closing lines of blocks.  Thanks to Gustavo Barros for suggesting
this change in issue 206, though it went through a couple of reviews:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/206">https://gitlab.com/protesilaos/modus-themes/-/issues/206</a>.</p>
  </li>
  <li>
    <p>Simplified the inheritance of the <code>fixed-pitch</code> face, which is used
for internal purposes to ensure alignment of elements in buffers that
must cope with mixed font configurations, such as an org-mode file
with <code>M-x variable-pitch-font</code> enabled.</p>

    <p>[ Recall that the option <code>modus-themes-no-mixed-fonts</code> can disable
  this feature.  Also note that the <code>mixed-fonts</code> package, or
  equivalent, is not needed while using the Modus themes (though there
  is nothing wrong with having them together). ]</p>
  </li>
  <li>
    <p>Reduced the overall intensity of <code>org-mode-line-clock-overrun</code>.
Thanks to Gustavo Barros for the feedback in issue 208:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/208">https://gitlab.com/protesilaos/modus-themes/-/issues/208</a>.</p>
  </li>
  <li>
    <p>Simplified or otherwise tweaked several Org agenda faces to render
possible the new <code>modus-themes-org-agenda</code> variable, as documented
above.  Thanks to Gustavo Barros for the feedback in issue 208:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/208">https://gitlab.com/protesilaos/modus-themes/-/issues/208</a>.</p>
  </li>
  <li>
    <p>Increased ever so slightly the foreground colour of the <code>highlight</code>
face.  This can help improve the perception of highlights, such as
upon hovering over a link with the mouse.  Thanks to Rudolf Adamkovič
for reporting the potential problem in issue 216:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/216">https://gitlab.com/protesilaos/modus-themes/-/issues/216</a>.</p>
  </li>
  <li>
    <p>Prevented the override of the <code>diff-context</code> face when users assign a
<code>bg-only</code> value to the <code>modus-themes-diffs</code> variable.  This makes it
consistent with the intent of this style, which is to work with a
non-nil value for <code>diff-font-lock-syntax</code> (basically to allow the
usual colour highlights of the underlying code syntax in diff
buffers).</p>
  </li>
  <li>
    <p>Ensured consistency of all prompt-related faces by introducing a new
face, <code>modus-themes-prompt</code>, that is inherited by all others (all
prompt styles are controlled by the variable <code>modus-themes-prompts</code>).
This was originally implemented with the <code>comint-highlight-prompt</code>
face, though that could potentially lead to undefined faces if the
comint library was not loaded.  Whereas the <code>modus-themes-prompt</code>
guarantees that we pass a known face at all times.  Thanks to Philip
Kaludercic for bringing this potential bug to my attention in a
comment to merge request 43:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/43#note_615224855">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/43#note_615224855</a>.</p>
  </li>
  <li>
    <p>Removed the background colour from the <code>widget-inactive</code> face.  It
would create problems in some cases, such as in Custom buffers for
multiple choice options.</p>
  </li>
  <li>
    <p>Refined <code>calendar-weekend-header</code> and <code>calendar-weekday-header</code> to
emulate the design of physical calendars and remain truthful to the
expectations set by the default configuration of the calendar.el
library.  Weekends now use a faint red, while weekdays are rendered in
the same subtle gray they had before.  The underlying principle is to
make weekends convey a subtle warning to the effect that “this is not
a day for work” (notwithstanding precarious economic realities).  As
noted above, there is an entry in the manual on how to make all days
look the same, be it gray or faint red.  Evaluate this form:</p>

    <pre><code>(info "(modus-themes) Note on calendarel weekday and weekend colors")
</code></pre>
  </li>
</ul>

<h3>Request for feedback on a potential version 2.0.0 of the Modus themes</h3>

<p>While we maintain a cautious stance towards preserving the default
styles, there are some cases where we might be forced to introduce
backward-incompatible changes.</p>

<p>Three such cases that can benefit from user feedback are:</p>

<ul>
  <li>
    <p>Issue 196 on <code>modus-themes-no-mixed-fonts</code>
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/196">https://gitlab.com/protesilaos/modus-themes/-/issues/196</a>.</p>
  </li>
  <li>
    <p>Issue 198 on <code>modus-themes-hl-line</code>
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/198">https://gitlab.com/protesilaos/modus-themes/-/issues/198</a></p>

    <p>[ Note that <code>modus-themes-hl-line</code> now accepts a list of properties as
  described in the opening sections of this entry. ]</p>
  </li>
  <li>
    <p>Issue 218 on <code>modus-themes-diffs</code>
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/218">https://gitlab.com/protesilaos/modus-themes/-/issues/218</a>.</p>
  </li>
</ul>

<h3>Miscellaneous</h3>

<ul>
  <li>
    <p>Recalibrated the value of the colour <code>bg-hl-line-intense</code> in the
palette <code>modus-themes-vivendi-colors</code>.  The change should be
practically indecipherable, though it slightly improves things in
certain contexts.</p>
  </li>
  <li>
    <p>Refined the intensity of the three main yellow colours in
<code>modus-themes-vivendi-colors</code>.</p>
  </li>
  <li>
    <p>Introduced a new <code>modus-themes-faces</code> group so that those are
decoupled from the customisation options in the various Custom
buffers.  Thanks to Philip Kaludercic for the patch in merge request
39: <a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/39">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/39</a>.</p>
  </li>
  <li>
    <p>Updated the manual’s “Acknowledgements” section to include all new
users who contributed to the project.</p>
  </li>
</ul>

<p>Thanks again to everyone involved!</p>
        
      


guid: https://protesilaos.com/codelog/2021-07-21-emacs-dired-custom-extras/
title: My custom extras for Dired (Emacs)
url: https://protesilaos.com/codelog/2021-07-21-emacs-dired-custom-extras/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Raw link: <a href="https://www.youtube.com/watch?v=gRQ05rq03j4">https://www.youtube.com/watch?v=gRQ05rq03j4</a></p>
         
         <p>In this video I demonstrate the custom extensions that I have written
from Emacs’ file manager program: <code>dired</code>.  Dired is very powerful
out-of-the-box and those extras build on what is already available.  In
short: (i) a general purpose command to insert the contents of
subdirectories in the current buffer, (ii) a more convenient tool to
limit the buffer to items that match (or not) a given regular
expression, (iii) commands to navigate subdirectory headings including
an <code>imenu</code> index, (iv) other utilities to determine the external program
for a certain file type.</p>

<p>I document everything at length in my dotemacs and also share the exact
configurations I use daily: <a href="https://protesilaos.com/emacs/dotemacs">https://protesilaos.com/emacs/dotemacs</a>.</p>

<p>Everything is part of my dotfiles’ repository (and the source code
contains informative documentation strings):
<a href="https://gitlab.com/protesilaos/dotfiles">https://gitlab.com/protesilaos/dotfiles</a>.</p>
        
      


guid: https://protesilaos.com/codelog/2021-07-24-emacs-misc-custom-commands/
title: Miscellaneous custom Emacs commands
url: https://protesilaos.com/codelog/2021-07-24-emacs-misc-custom-commands/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Raw link: <a href="https://www.youtube.com/watch?v=b5D7QsEgzxw">https://www.youtube.com/watch?v=b5D7QsEgzxw</a></p>
         
         <p>In this video I showcase some custom commands that I have extracted from
my Emacs configuration: <a href="https://protesilaos.com/emacs/dotemacs">https://protesilaos.com/emacs/dotemacs</a>.  I use them
regularly to optimise various aspects of my workflow and I have learnt
some Elisp by developing them.</p>

<p>I did a video like this <a href="https://protesilaos.com/codelog/2020-08-03-emacs-custom-functions-galore/">about a year
ago</a>
(2020-08-03).  What I shared back then has since been improved upon.
You can find everything in the various <code>.el</code> files that form part of my
setup.</p>

<p>Below is the code I presented in the video.</p>

<pre><code class="language-elisp">;;; Odds and ends from my dotemacs (.emacs) 

;; All those are from my Emacs setup.  The literate configuration is on
;; my website: &lt;https://protesilaos.com/emacs/dotemacs&gt;.  Otherwise check the
;; Git source: &lt;https://gitlab.com/protesilaos/dotfiles&gt;.

;;;; Excerpt from prot-comment.el 

;; helper code from prot-common.el, which is `require'd by
;; prot-comment.el
(defvar prot-common--line-regexp-alist
  '((empty . "[\s\t]*$")
    (indent . "^[\s\t]+")
    (non-empty . "^.+$")
    (list . "^\\([\s\t#*+]+\\|[0-9]+[^\s]?[).]+\\)")
    (heading . "^[=-]+"))
  "Alist of regexp types used by `prot-common-line-regexp-p'.")

(defun prot-common-line-regexp-p (type &amp;optional n)
  "Test for TYPE on line.
TYPE is the car of a cons cell in
`prot-common--line-regexp-alist'.  It matches a regular
expression.

With optional N, search in the Nth line from point."
  (save-excursion
    (goto-char (point-at-bol))
    (and (not (bobp))
         (or (beginning-of-line n) t)
         (save-match-data
           (looking-at
            (alist-get type prot-common--line-regexp-alist))))))

;; and what follows is from prot-comment.el
(defcustom prot-comment-comment-keywords
  '("TODO" "NOTE" "XXX" "REVIEW" "FIXME")
  "List of strings with comment keywords."
  :type '(repeat string)
  :group 'prot-comment)

(defcustom prot-comment-timestamp-format-concise "%F"
  "Specifier for date in `prot-comment-timestamp-keyword'.
Refer to the doc string of `format-time-string' for the available
options."
  :type 'string
  :group 'prot-comment)

(defcustom prot-comment-timestamp-format-verbose "%F %T %z"
  "Like `prot-comment-timestamp-format-concise', but longer."
  :type 'string
  :group 'prot-comment)

(defvar prot-comment--keyword-hist '()
  "Input history of selected comment keywords.")

(defun prot-comment--keyword-prompt (keywords)
  "Prompt for candidate among KEYWORDS."
  (let ((def (car prot-comment--keyword-hist)))
    (completing-read
     (format "Select keyword [%s]: " def)
     keywords nil nil nil 'prot-comment--keyword-hist def)))

;;;###autoload
(defun prot-comment-timestamp-keyword (keyword &amp;optional verbose)
  "Add timestamped comment with KEYWORD.

When called interactively, the list of possible keywords is that
of `prot-comment-comment-keywords', though it is possible to
input arbitrary text.

If point is at the beginning of the line or if line is empty (no
characters at all or just indentation), the comment is started
there in accordance with `comment-style'.  Any existing text
after the point will be pushed to a new line and will not be
turned into a comment.

If point is anywhere else on the line, the comment is indented
with `comment-indent'.

The comment is always formatted as 'DELIMITER KEYWORD DATE:',
with the date format being controlled by the variable
`prot-comment-timestamp-format-concise'.

With optional VERBOSE argument (such as a prefix argument
`\\[universal-argument]'), use an alternative date format, as
specified by `prot-comment-timestamp-format-verbose'."
  (interactive
   (list
    (prot-comment--keyword-prompt prot-comment-comment-keywords)
    current-prefix-arg))
  (let* ((date (if verbose
                   prot-comment-timestamp-format-verbose
                 prot-comment-timestamp-format-concise))
         (string (format "%s %s: " keyword (format-time-string date)))
         (beg (point)))
    (cond
     ((or (eq beg (point-at-bol))
          (prot-common-line-regexp-p 'empty))
      (let* ((maybe-newline (unless (prot-common-line-regexp-p 'empty 1) "\n")))
        ;; NOTE 2021-07-24: we use this `insert' instead of
        ;; `comment-region' because of a yet-to-be-determined bug that
        ;; traps `undo' to the two states between the insertion of the
        ;; string and its transformation into a comment.
        (insert
         (concat comment-start
                 ;; NOTE 2021-07-24: See function `comment-add' for
                 ;; why we need this.
                 (make-string
                  (comment-add nil)
                  (string-to-char comment-start))
                 comment-padding
                 string
                 comment-end))
        (indent-region beg (point))
        (when maybe-newline
          (save-excursion (insert maybe-newline)))))
     (t
      (comment-indent t)
      (insert (concat " " string))))))

;;;; Excerpt from prot-diff.el 

;;;###autoload
(defun prot-diff-buffer-dwim (&amp;optional arg)
  "Diff buffer with its file's last saved state, or run `vc-diff'.
With optional prefix ARG (\\[universal-argument]) enable
highlighting of word-wise changes (local to the current buffer)."
  (interactive "P")
  (let ((buf))
    (if (buffer-modified-p)
        (progn
          (diff-buffer-with-file (current-buffer))
          (setq buf "*Diff*"))
      (vc-diff)
      (setq buf "*vc-diff*"))
    (when arg
      (with-current-buffer (get-buffer buf)
        (unless diff-refine
          (setq-local diff-refine 'font-lock))))))

(defvar-local prot-diff--refine-diff-state 0
  "Current state of `prot-diff-refine-dwim'.")

;;;###autoload
(defun prot-diff-refine-cycle ()
  "Produce buffer-local, 'refined' or word-wise diffs in Diff mode.

Upon first invocation, refine the diff hunk at point or, when
none exists, the one closest to it.  On second call, operate on
the entire buffer.  And on the third time, remove all word-wise
fontification."
  (interactive)
  (let ((point (point)))
    (pcase prot-diff--refine-diff-state
      (0
       (diff-refine-hunk)
       (setq prot-diff--refine-diff-state 1))
      (1
       (setq-local diff-refine 'font-lock)
       (font-lock-flush)
       (goto-char point)
       (setq prot-diff--refine-diff-state 2))
      (_
       (revert-buffer)
       (goto-char point)
       (recenter)
       (setq prot-diff--refine-diff-state 0)))))

;;;; Excerpt from prot-simple.el 

;;;;; Narrow DWIM 

;; this is the helper code from prot-common.el
;;;###autoload
(defun prot-common-window-bounds ()
  "Determine start and end points in the window."
  (list (window-start) (window-end)))

;;;###autoload
(defun prot-simple-narrow-visible-window ()
  "Narrow buffer to wisible window area.
Also check `prot-simple-narrow-dwim'."
  (interactive)
  (let* ((bounds (prot-common-window-bounds))
         (window-area (- (cadr bounds) (car bounds)))
         (buffer-area (- (point-max) (point-min))))
    (if (/= buffer-area window-area)
        (narrow-to-region (car bounds) (cadr bounds))
      (user-error "Buffer fits in the window; won't narrow"))))

;;;###autoload
(defun prot-simple-narrow-dwim ()
  "Do-what-I-mean narrowing.
If region is active, narrow the buffer to the region's
boundaries.

If no region is active, narrow to the visible portion of the
window.

If narrowing is in effect, widen the view."
  (interactive)
  (unless mark-ring                  ; needed when entering a new buffer
    (push-mark (point) t nil))
  (cond
   ((and (use-region-p)
         (null (buffer-narrowed-p)))
    (let ((beg (region-beginning))
          (end (region-end)))
      (narrow-to-region beg end)))
   ((null (buffer-narrowed-p))
    (prot-simple-narrow-visible-window))
   (t
    (widen)
    (recenter))))

;;;;; Insert date at point 

(defcustom prot-simple-date-specifier "%F"
  "Date specifier for `format-time-string'.
Used by `prot-simple-inset-date'."
  :type 'string
  :group 'prot-simple)

(defcustom prot-simple-time-specifier "%R %z"
  "Time specifier for `format-time-string'.
Used by `prot-simple-inset-date'."
  :type 'string
  :group 'prot-simple)

;;;###autoload
(defun prot-simple-insert-date (&amp;optional arg)
  "Insert the current date as `prot-simple-date-specifier'.

With optional prefix ARG (\\[universal-argument]) also append the
current time understood as `prot-simple-time-specifier'.

When region is active, delete the highlighted text and replace it
with the specified date."
  (interactive "P")
  (let* ((date prot-simple-date-specifier)
         (time prot-simple-time-specifier)
         (format (if arg (format "%s %s" date time) date)))
    (when (use-region-p)
      (delete-region (region-beginning) (region-end)))
    (insert (format-time-string format))))

;;;;; Escape URL/Email 

(autoload 'ffap-url-at-point "ffap")
(defvar ffap-string-at-point-region)

;;;###autoload
(defun prot-simple-escape-url ()
  "Wrap URL in angled brackets."
  (interactive)
  (when-let ((url (ffap-url-at-point)))
    (let* ((reg ffap-string-at-point-region)
           (beg (car reg))
           (end (cadr reg))
           (string (if (string-match-p "^mailto:" url)
                       (substring url 7)
                     url)))
      (delete-region beg end)
      (insert (format "&lt;%s&gt;" string)))))

;;;;; Rename buffer and file 

;; A variant of this is present in the crux.el package by Bozhidar
;; Batsov.
;;;###autoload
(defun prot-simple-rename-file-and-buffer (name)
  "Apply NAME to current file and rename its buffer.
Do not try to make a new directory or anything fancy."
  (interactive
   (list (read-string "Rename current file: " (buffer-file-name))))
  (let ((file (buffer-file-name)))
    (if (vc-registered file)
        (vc-rename-file file name)
      (rename-file file name))
    (set-visited-file-name name t t)))

;;;; Excerpt from prot-search.el 

;;;;; occur 

;; I copy this from `browse-url-button-regexp' simply because there are
;; contexts where we do not need that dependency.
(defvar prot-common-url-regexp
  (concat
   "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|"
   "nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)"
   "\\(//[-a-z0-9_.]+:[0-9]*\\)?"
   (let ((chars "-a-z0-9_=#$@~%&amp;*+\\/[:word:]")
	     (punct "!?:;.,"))
     (concat
      "\\(?:"
      ;; Match paired parentheses, e.g. in Wikipedia URLs:
      ;; http://thread.gmane.org/47B4E3B2.3050402@gmail.com
      "[" chars punct "]+" "(" "[" chars punct "]+" ")"
      "\\(?:" "[" chars punct "]+" "[" chars "]" "\\)?"
      "\\|"
      "[" chars punct "]+" "[" chars "]"
      "\\)"))
   "\\)")
  "Regular expression that matches URLs.
Copy of variable `browse-url-button-regexp'.")

(autoload 'goto-address-mode "goto-addr")

;;;###autoload
(defun prot-search-occur-urls ()
  "Produce buttonised list of all URLs in the current buffer."
  (interactive)
  (let ((buf-name (format "*links in &lt;%s&gt;*" (buffer-name))))
    (add-hook 'occur-hook #'goto-address-mode)
    (occur-1 prot-common-url-regexp "\\&amp;" (list (current-buffer)) buf-name)
    (remove-hook 'occur-hook #'goto-address-mode)))
  
;;;###autoload
(defun prot-search-occur-browse-url ()
  "Point browser at a URL in the buffer using completion.
Which web browser to use depends on the value of the variable
`browse-url-browser-function'.

Also see `prot-search-occur-urls'."
  (interactive)
  (let ((matches nil))
    (save-excursion
      (goto-char (point-min))
      (while (search-forward-regexp prot-common-url-regexp nil t)
        (push (match-string-no-properties 0) matches)))
    (funcall browse-url-browser-function
             (completing-read "Browse URL: " matches nil t))))

;;;;; grep 

(defvar prot-search--grep-hist '()
  "Input history of grep searches.")

;;;###autoload
(defun prot-search-grep (regexp &amp;optional recursive)
  "Run grep for REGEXP.

Search in the current directory using `lgrep'.  With optional
prefix argument (\\[universal-argument]) for RECURSIVE, run a
search starting from the current directory with `rgrep'."
  (interactive
   (list
    (read-from-minibuffer (concat (if current-prefix-arg
                                      (propertize "Recursive" 'face 'warning)
                                    "Local")
                                  " grep for PATTERN: ")
                          nil nil nil 'prot-search--grep-hist)
    current-prefix-arg))
  (unless grep-command
    (grep-compute-defaults))
  (if recursive
      (rgrep regexp "*" default-directory)
    (lgrep regexp "*" default-directory)
    (add-to-history 'prot-search--grep-hist regexp)))

;;;; Honourable mentions (in no particular order): 

;; 1. prot-fonts.el: lets me specify comprehensive sets of font
;;    specifications which I can activate on demand.
;;
;; 2. prot-diary.el: I did a recent video demo about diary+calendar and
;;    how I use them to keep track of time-sensitive events.
;;
;; 3. prot-eww.el: Lots of extras for browsing the web with EWW and now
;;    with Elpher (I did a video some months ago, but will have to cover
;;    the up-and-coming features once the time is right).
;;
;; 4. prot-notmuch.el: There is a recent video about how I use notmuch,
;;    but it does not include the various extras found in that file,
;;    including tagging, custom widgets...
</code></pre>
        
      


guid: https://protesilaos.com/codelog/2021-08-29-emacs-community-new-pc/
title: The Emacs community bought me a new PC
url: https://protesilaos.com/codelog/2021-08-29-emacs-community-new-pc/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Raw link: <a href="https://www.youtube.com/watch?v=y14Hw6twxgc">https://www.youtube.com/watch?v=y14Hw6twxgc</a></p>
         
         <p>My laptop broke a few weeks ago and I had no other personal computer.
The Emacs community helped me with donations and I am back in action.</p>

<p>In this video I provide an overview of what happened and what I am
currently up to.</p>

<p>Below is the text of my presentation, though note that I did not follow
it too closely:</p>

<pre><code class="language-org">#+TITLE: The Emacs community bought me a computer
#+AUTHOR: Protesilaos Stavrou (https://protesilaos.com)
#+DATE: 2021-08-29

Hello everyone!  My name is Protesilaos, also known as "Prot".

As you can tell from the title of this video, this is a status update on
my current condition: *the Emacs community bought me a new computer.* I
both humbled and elated by the fact.

What follows is a summary of events and an overview of my next steps.

* The laptop's battery malfunctioned

On August 5 my laptop's battery stopped receiving power.  It was
behaving erratically for a couple of days prior, as it would abruptly
not send power to the computer, shutting down, and then make the special
sound it does that it was recharging again.  All this while being
plugged to the wall and with capacity to spare.

On the 5th it stopped recharging and the laptop has not worked since.
At the time I posted a short announcement on my website: there is a
dedicated section about "News", which is separate from my other
writings.  Here it is:

#+begin_quote
Laptop battery out; will be back ASAP

2021-08-05

My laptop’s battery is no longer recharging. I double-checked: it has
probably malfunctioned. I need what remains of it to make some final
backups. I’ll have no regular access to a computer afterwards. Need to
check for replacements and if they are worth it. Will reply to your
emails as soon as I can.

https://protesilaos.com/news/2021-08-05-laptop-battery/
#+end_quote

My only access to a computer was at the one available in my local
community.  This is a mountainous region.  Not many options.

Anyhow, I was expecting to remain out of action for several weeks due to
budget constraints.  Though after eleven days since I posted the
announcement, I noticed many emails from Paypal informing me that I had
received donations.  Checked my account and there were EUR 430!  That
was more than I had ever received before.

I could not check all the emails at the time, because I am subscribed to
several mailing lists and without Emacs+Notmuch it was too difficult to
find what I needed.  So I did not have a clear picture of what triggered
those donations.  Nothing like that had never happened before.

On August 16 I posted another announcement informing people that I got
donations and would be able to buy new equipment (by the way, writing a
blog post on Gitlab is much worse than doing it inside of Emacs).  I
explained that it would probably be better to invest in a mini tower
than pay for exorbitant shipping charges for a battery.

* New desktop computer

Shortly after I posted the second announcement, I contacted a friend who
knows more about computer hardware than I do.  I basically know nothing.
He helped me piece together a mini tower.  Some parts are new.  Others
are second-hand.  I am very happy with the outcome, as this is more
powerful than the laptop I had before (Emacs launches faster, I can load
a heavy website with javascript, etc.).

I also got this camera and a small microphone that I have here on my
side.  Hopefully the video and audio quality are better than before, but
don't expect anything fancy.

Anyhow, while I was waiting for the computer to be assembled, the
donations kept flowing in, but I did not know about them at the time.
When I eventually set up the new machine (on the night of August 26 and
the morning after) and finally got back to my email, I started reading
through the notifications from Paypal and the other emails I received.

The sum had tripled at about EUR 1400!  Many donations included a
message.  Almost all were related to Emacs.  Some people were thanking
me for my contributions in general.  Others referred to my Modus themes.
And others still mentioned the videos I do.

I don't know whether I should post the names of the people who
contributed, as this is private information and I have no permission to
divulge it.  Safe to say, there are many names on that list that I
already know.  We have exchanged emails before or collaborated on some
Emacs-related project.  Also, some of those names are very well known in
the Emacs community.

*I wish to thank everyone for their support.* I was not expecting it and
it has definitely made a noticeable improvement in my daily life.

I am still working through my backlog.  You will get a reply in the
coming days.

* Note on recent code updates and latest philosophy post

I have been busy setting things up.  I already had hand-written notes of
all sorts that I have already digitised and published.  Bash scripts,
Elisp snippets, and an 8k word publication on philosophical themes.

Some highlights:

+ I am back to using BSPWM (a tiling window manager).  Those of you who
  may only know me from my Emacs stuff, I used to have my bespoke
  computing environment, which included BSPWM+Tmux+Vim+CLI.  I still
  mostly using nothing but Emacs, though it is better to control the
  other windows with the keyboard.

+ I now publish the derived =*.el= file of my dotemacs.  This is for
  people who do not need to read through a massive document that
  contains more than 70k words.

+ Those are available in my dotfiles' repo.  My dotemacs is also posted
  in HTML on my website: https://protesilaos.com/emacs/dotemacs (includes
  link to the dotfiles).

+ I am back to maintaining my Git projects.  There has been an update to
  my Tempus themes, which are not Emacs-related.  Templates for the
  Alacritty terminal emulator are now available, as well as a dedicated
  =tempus-themes-alacritty= repo.

  - The shell scripts for maintaining the numerous Tempus themes have
    also been updated.

+ And now some philosophy.  I started writing this before my laptop
  failed, but I think the topic relates to the help I received from the
  Emacs community.  I will let you check the actual text on your own.
  It is written in a dialogue style, based on real experiences.  The
  title is /Why you are not important/ and relates to egocentrism,
  escapism, and related concepts.  Instead of my text, let me read you
  this, which many of you already know about.

#+begin_quote
Notmuch is not much of an email program.  It doesn't receive messages
(no POP or IMAP support).  It doesn't send messages (no mail composer,
no network code at all).  And for what it does do (email search) that
work is provided by an external library, Xapian.  So if Notmuch provides
no user interface and Xapian does all the heavy lifting, then what's
left here?  Not much.

https://notmuchmail.org/
#+end_quote
</code></pre>
        
      


guid: https://protesilaos.com/codelog/2021-08-31-emacs-second-brain-mindfulness/
title: Emacs as a ‘second brain’ and mindfulness
url: https://protesilaos.com/codelog/2021-08-31-emacs-second-brain-mindfulness/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Raw link: <a href="https://www.youtube.com/watch?v=bFJO8ScRmj0">https://www.youtube.com/watch?v=bFJO8ScRmj0</a></p>
         
         <p>In this recorded live stream, I offered a presentation that was divided
in two parts:</p>

<ul>
  <li>
    <p>In the first, I talked in general about how Emacs can boost one’s
productivity through its sheer power, extensibility, and the
interconnectedness of its environment.</p>
  </li>
  <li>
    <p>While in the second I elaborated on the need to be mindful of our
disposition towards knowledge and learning so that we give ourselves a
chance to grow.</p>
  </li>
</ul>

<p>This ultimately is about how we go about maintaining an exomind with the
help of Emacs while being mindful of the quality of what goes into it.</p>

<p>Below is the text of the presentation (in Org format):</p>

<pre><code class="language-org">#+TITLE: Live: Emacs note-taking and the mindful attitude
#+AUTHOR: Protesilaos Stavrou (https://protesilaos.com)
#+DATE: 2021-08-31

* Overview of how I plan to do live streams

Hello everyone!  My name is Protesilaos, also known as "Prot".

This is my first ever live stream.  I have never done one before nor
participated in any because my old computer could not handle it.  Now
that I have slightly better hardware, it is time to experiment with this
format.

[ I talked about my laptop woes in the last video:
  https://protesilaos.com/codelog/2021-08-29-emacs-community-new-pc/. ]

If there is anyone in the chat, feel welcome to send your questions and
I will reply to them once I conclude the presentation.  I am keeping the
chat here on the side though, so I might also answer some questions
while switching between chapters.

Today's topic and those of any live stream in the foreseeable future
will be about Emacs.  Though the connection may sometimes be tangential,
as I will be elaborating on broader themes as well.

What I will talk to you about today is the process of approaching a new
subject of sophistication or intellectual interest.  And I will link it
to Emacs' capacity to take notes with efficiency and, generally, help us
capture and then retrieve our thoughts.

If you wish to follow live streams that are exclusively about Emacs or
related technological topics, you can follow (A-Z):

+ Andrew Tropin :: https://www.youtube.com/channel/UCuj_loxODrOPxSsXDfJmpng
+ System Crafters (David Wilson) :: https://www.youtube.com/channel/UCAiiOTio8Yu69c3XnR7nQBQ
+ Xah Lee :: https://www.youtube.com/channel/UCXEJNKH9I4xsoyUNN3IL96A

There is also Sacha Chua, but I am not sure how often there are streams
there: https://www.youtube.com/channel/UClT2UAbC6j7TqOWurVhkuHQ.  Maybe
there is Twitch, but I am not familiar with it.

Perhaps there are other live streamers as well, but I am new to this, so
apologies if I have missed any.  Will include them next time.

Other useful Emacs-related videos:

+ Emacs Elements (Raoul Comninos) :: https://www.youtube.com/channel/UCe5excZqMeG1CIW-YhMTCEQ
+ Mike Zamansky :: https://www.youtube.com/channel/UCxkMDXQ5qzYOgXPRnOBrp1w

[ In my dotemacs, I maintain a section about other people's work.  The
  aforementioned and others are included: https://protesilaos.com/emacs/dotemacs. ]
* Taking notes in general

We document our ideas all the time, be it with pen and paper or by using
our software of choice.  It helps us clarify our thoughts and elucidate
concepts that would otherwise be hard to grasp.  We may also retrieve
information we have stored for later use.

When it comes to software, Emacs is a powerhouse for taking notes and
staying organised.  Apart from all its text-editing capabilities, its
ability to search recursively through files and edit the results
directly, its superb keyboard macros, and so on, the Emacs milieu has
the highly acclaimed Org mode.

At its core, Org is a lightweight markup language similar in spirit to
Markdown.  What makes Org special though is the ecosystem of Emacs Lisp
that has grown organically around it.  Users have been writing and
sharing code which let's you do practically everything with Org and the
'magic' of Emacs Lisp (Elisp).  For example:

1. Devise your own "Getting Things Done" workflow.
2. Organise your agenda, by scheduling tasks, adding appointment
   notifications, determining what should be tracked as a habit, etc.
3. Write a journal (org-journal).
4. Maintain a personal knowledge base using the zettelkasten method or
   some variant thereof (org-roam, zetteldeft).
5. Publish a website entirely with Org or, at least, by exporting
   specific documents to HTML (among numerous other formats).
6. Do literate programming.
7. Learn something new with flashcards and spaced repetition
   (org-drill).
8. Draw linkages between various contexts, such as by connecting a
   particular email message to a to-do item.

It seems that the possibilities are only limited by one's imagination.
Of course, all of the above can be achieved without using Org, provided
one is willing to experiment with alternatives and some custom code,
perhaps for educational or recreational purposes.

The point is that Emacs is all about choice.  It does not enforce a
specific workflow, nor does it come with stringent requirements of how
data should be stored and organised.  In other words, there isn't a
canonical way of using Emacs: that is always up to the user.

This is all possible because Emacs is programmable and extensible.  You
just write some ELisp and it can evaluate it live.  Though chances are
that there already exist packages which provide you with everything you
need to accomplish your goals.  In fact, you might never have to write
any code yourself and still be very effective with your Emacs usage.

* Emacs can help you develop a second brain

By using Emacs and Org with all of its accoutrements we can have the
basic components we need to set up our very own exomind or second brain.
This is a state where the distance between our mind and what the
software renders possible is reduced and where we can both add and
extract information in a near-frictionless fashion.  The second brain is
a higher state of efficiency.

What exactly goes into one's exomind will depend on their particular
requirements and how much time and effort they are willing to invest in
integrating their computing experience inside of Emacs.  I think it is
worth bringing everything into Emacs because of the innate
interconnectedness of its environment.

Some common tasks that can be done with Emacs:

1. Read RSS/Atom feeds (e.g. Elfeed).
2. Handle email correspondance (Gnus, Notmuch, Mu4e...)
3. Browse the Internet in a text-centric browser (EWW, Elpher).
4. Perform context-sensitive actions on the thing-at-point (Embark).
5. Seamlessly open your PGP/GPG-encrypted files (many built-in tools).
6. Bulk rename your files as if they were regular text, using ordinary
   text editing, keyboard macros, multiple cursors, and the like
   (Dired/Wdired).
7. Gain easy access to your ~pass~ store, where all your passwords are
   stored (pass, password-store).
8. Jump to any heading or "point of interest" in a file using ordinary
   search or more advanced patterns (built-in Imenu and extensions like
   Consult, and several completion frameworks such as Vertico).
9. Play back your music collection (Bongo, EMMS).

For all those and many others, you are always working in the same
environment, where it is trivial to either go from one place to the next
or to connect different packages in emergent workflows.  For example, to
have Elfeed interface with Bongo so that you can add the feed entry of
some music channel you are following directly to your playlist queue.

This is where Org comes in to play.  Specifically ~org-capture~ and
~org-store-link~.  These two commands can be used to quickly store any
kind of structured note and to create a direct link to the context it
was taken from.  A typical example is to read an important email and
capture it as a task that should appear in the Org agenda.

All those can be pieced together into a bigger system to reach that
higher state of productivity; that second brain.  But there is a catch!
Unlike the first brain, the second one does not think things through.
Its output will be as good or bad as your input.  And so there arises a
general problem of the state of mind one must have while documenting
their ideas about some newfound knowledge or piece of information.

* Remaining open to new ideas

As I said in the introduction, we want to be mindful of our attitude
when we are engaging with a new subject of sophistication or
intellectual pursuit.  Because even the most efficient text-editing
setup will not be able to affect our mindset, our dispotition towards
learning.

Maybe you have done this before or are aware of others who have done it:
you start reading a book and as you go through its pages you take
notes.  Maybe you will draw an underline under the text as you go
through it, or add some paper note there.  If the medium is digital, you
will be doing that with Emacs or something along those lines.

The point is that you are taking notes while still trying to parse new
information.  And that can prove problematic.  Sometimes the book, or
the resource more broadly, provides profound insights that require some
time to be fully understood and internalised.  You may have to read and
re-read the text before you are in a position to assess its content.

What happens then, is that if you write notes upon first encounter with
some new material, your input essentially codifies your previous
self---the one who was not yet aware of the book's teachings.  In other
words, those notes are not as useful as you would like to believe,
because they unconsiously embed your prior opinions.

When you engage with a new source that you consider worthy of your time,
at least based on first impressions, you want to give it some room to
grow or some time to sink in.

It is like how fermentation occurs over time.  Take wine production, for
example.  You start with grape juice that you store in a vessel, a
barrel perhaps.  After a few days, the liquid starts developing alcohol.
If you take out a portion of it, what you are getting is some unfinished
product.  Either some bad grape juice or something akin to the cheapest
plonk you can get on the market.  It is not good.  To truly appreciate
it, you have to let the fermentation process run its course.

Incoming ideas are just like that.  If you wrestle with them right away
and take a snapshot of your thoughts at the moment, you are effectively
consuming the unfinished article.  Whereas what you want is to refrain
from passing judgement upon first contact and allow the ideas the time
they need to come together.  This means that you may have to think about
them many times over.

No second brain will do that for you.  No second brain will prevent you
from storing notes that capture your unrefined or immature views.  No
second brain can tell you whether your inconsiderately captured notes
condition your current thought processes.  It is up to the first brain
to be mindful of the potential pitfalls.

* Avoid the dogma of self-identification through mindfulness

To take notes effectively with the intent of growing out of our mould,
we have to rely on our first brain, not the one that Emacs or some other
program/method may provide us with.  When we take notes, or generally
when we encounter something new, we essentially face a dilemma of either
(i) clinging on to our position or (ii) remaining open to the
possibility of refashioning ourselves.

If you hold firm in your views, such as when you read a new book and
comment on it in parallel, you are effectively implying that what you
already knew before reading the book is all you ever needed to know.
Put differently, you are developing a certain brand of dogmatism, of
insistance on the narrative you have about who you are and what it is
that you are doing.  Let me call this the "dogma of self-identification"
in which we do not recognise, tacitly or otherwise, the possibility of
not knowing something and where we claim to be capable of more than what
we actually are.

This is a trap that anyone who wants to flourish as a person should
actively try to avoid.  When we engage with new material, we want to be
mindful of our condition.  We must admit that we are not omniscient,
that we are fallible.  And we have to unequivocally tell ourselves how
our sense of self is a work-in-progress that remains open to influences
of all sorts.

There is no scope for pretense here.  No need to fake being tough or
smart or whatnot.  The open mind, the inquisitive spirit, has no trouble
acknowledging its inadequacies because it understands that it can only
improve by surfacing them, scrutinising them, and working towards
circumventing them.

And so, when we take notes---when we learn---our goal must be to always
keep open a window into the unknown.  Take as much time as you need to
think things through.  Give ideas the space they need to grow and become
fecund.  Then, just like the farmer who respects the land, reap the
fruits in a spirit of sustainability, in a way that allows ideas to grow
again perhaps by means of exposure to yet newer concepts.

What matters then is the attitude we have before implementing the
methodology.  The second brain may be powerful and extremely useful.
But it cannot think for itself and it cannot support the first brain in
rectifying its errors; errors which stem from a position of dogma.

Through such a mindful attitude we can expand our awareness of things
simply by being more considerate, more careful, more deliberate.  It is
not the volume or the efficiency.  It is not about productivity per se,
measured in some dubious unit of output.  This is about how we enrich
the quality of what goes into our mind and what eventually gets codified
into some note-taking system.

* Closing thoughts

As I mentioned in the introduction, I am new to the live-streaming
world.  Perhaps this format is the wrong one, but I just had to start
with something and see how it goes.

If there are any questions in the chat, I will answer them now.  They
can be related to what I just covered, or maybe to something else.  I
will try my best to be helpful.

In short:

+ Emacs can boost one's productivity through its sheer power,
  extensibility, and the interconnectedness of its environment.

+ The second brain is a good idea.  But it is not omnipotent.  You still
  have to put some serious effort into what you are doing.

  - This is true for Emacs in general and for every other field that
    involves some degree of sophistication.
  
+ We grow when we learn to let go.  And we are at our best when we are
  prepared to let go of our most cherished beliefs, such as our sense of
  self once taken as a snapshot.

+ Dogmatism, even one which is latent in what we do, is an impediment to
  our intellectual growth.  Without being mindful of our condition, we
  are forever trapped in a web of predispositions where we pretend to
  know more than we do.

As you could tell, part of this is tangentially about Emacs and even
about taking notes.  The emphasis is on our disposition, the attitude we
ought to maintain.  The rest follows from there and falls right in
place.

That's all.  Thank you for your attention!  Now let's check the chat for
any feedback, otherwise I am concluding this show.
</code></pre>
        
      


guid: https://protesilaos.com/codelog/2021-09-08-emacs-bookmarks-intro/
title: Primer on Emacs bookmarks
url: https://protesilaos.com/codelog/2021-09-08-emacs-bookmarks-intro/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Raw link: <a href="https://www.youtube.com/watch?v=7eWAfmABHMs">https://www.youtube.com/watch?v=7eWAfmABHMs</a></p>
         
         <p>In this video I offer an introduction to the built-in bookmarking
framework of Emacs.  Bookmarks are compartments that store arbitrary
data about files/contexts that we can retrieve on demand.  They can
potentially work with practically every major-mode inside of Emacs and
can interface with other core features such as TRAMP to, e.g., restore
an Eshell buffer over a particular file access protocol.</p>

<p>The video also briefly covers my custom extensions for the bookmarks’
list view as well as my handler function for making EWW compliant with
the standard <code>bookmark.el</code> library instead of its own bookmarking
facility.</p>

<p>All configurations and custom code are published on this website as part
of my dotemacs: <a href="https://protesilaos.com/emacs/dotemacs">https://protesilaos.com/emacs/dotemacs</a>.  The link includes
references to the Git sources.</p>
        
      


guid: https://protesilaos.com/codelog/2021-09-22-live-stream-emacs-unix/
title: Live stream: Emacs and the Unix philosophy
url: https://protesilaos.com/codelog/2021-09-22-live-stream-emacs-unix/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Raw link: <a href="https://www.youtube.com/watch?v=FmOYj0SyKfg">https://www.youtube.com/watch?v=FmOYj0SyKfg</a></p>
         
         <p>This was a live stream that got recorded.  It started on 2021-09-26
13:00 +0300 and lasted for about two hours.</p>

<p>I talked about the persistent question of how Emacs conforms with the
Unix philosophy, what it means for a set of views to constitute a
philosophy, whether those tenets are generalisable, and what lessons may
be learnt from them for our day-to-day computing.</p>

<p>After the presentation was concluded, I joined the live chat for further
comments on a variety of issues.</p>

<p>The text of my talk is copied below.  It is written in Org notation:</p>

<pre><code class="language-org">#+TITLE: Live: Emacs and the Unix philosophy
#+AUTHOR: Protesilaos Stavrou (https://protesilaos.com)
#+DATE: 2021-09-26

* How I approach the Emacs VS Unix problématique

Hello everyone!  My name is Protesilaos, also known as "Prot".  In this
live stream, which is being recorded as well, I will talk to you about
the Unix philosophy and how Emacs conforms with it while addressing its
main usability flaw.  The show notes are available on my website:
https://protesilaos.com/codelog/2021-09-22-live-stream-emacs-unix/

My approach to today's topic is informed by my experience as someone who
had used a combination of a tilling window manager, Tmux, Vim, various
ncurses-based programs (e.g. Mutt), and command-line utilities for years
before consolidating around GNU Emacs.  My perspective is further
informed by my background as a social scientist and, ultimately, a
philosopher.  Not as a programmer, though these days I do code a lot for
recreational or educational purposes.

In this presentation I will make arguments against dogmatism; against
misunderstandings in what Unix stands for and how it must work in the
real world.  I will also critically assess the vaunted notions of
minimalism and so-called "bloat" as they pertain to software and discuss
what the appropriate attitude should be when thinking about this and
concomitant issues.  The key word is "attitude": the disposition we
ought to have in order to avoid becoming dogmatic.

This is my second video on the topic.  I did one a couple of years ago,
shortly after I switched to Emacs.  I have also published an article:

+ Emacs mindset and Unix philosophy:
  https://protesilaos.com/codelog/2019-08-09-vlog-emacs-unix/
+ Comment on Unix versus Emacs:
  https://protesilaos.com/codelog/2020-12-28-comment-unix-vs-emacs/

The reason I am doing this again is because I keep getting questions
about my experience with Emacs; questions which typically reveal
deep-seated assumptions that are either outright untrue or ill
considered.

In short, much of this talk will be about theoretical issues.  While I
understand that coding is a technical endeavour, I still believe there
are important insights to be drawn from theoretical work; insights which
will eventually find their application in everyday scenaria.  Besides,
we cannot afford to assume the Unix philosophy as a technical constant
when it clearly is formulated as a /philosophy/.

Finally, note that I will participate in the live chat after I conclude
this presentation.  If you have any questions related to today's topic
or any other subject I cover on my website (https://protesilaos.com),
please let me know.

* Unix minimalism is not a dogma

The Unix philosophy consists of teachings that are based on decades of
experience with systems programming.  Those are encapsulated in the KISS
principle of engineering: Keep It Simple Stupid (or variants).

Unix values specialised tools that can interface with each other to
contribute to emergent workflows.  Its brand of minimalism rests on the
practical consideration of maintainability: both with regard to fixing
bugs and conserving programmer time.  The Unix philosophy prioritises
modularity and composability over monolith-like implementations.  Simple
designs can adapt to evolving circumstances while those that make all
sorts of assumptions and have lots of explicit or implicit dependencies
are unsustainable over the long-term.

Unix programmers did not invent all the concepts associated with their
philosophy.  Humanity had discovered them through aeons of continuous
experimentation and practical reasonableness.  And what better teacher
than the vastness of life all around us?  Natural systems consist of
subsystems, just like our body, forests, oceans, and so on.  In nature
we find division of labour or else the separation of concerns,
specialisation and compartmentalisation, composition of localised
patterns into emergent phenomena...  Everything.

This is not to discount the contributions of Unix, but rather to couch
them in terms of the wider milieu in which we operate.  By framing it
this way, we are better prepared to let go of views that are ultimately
detrimental to our life.  Such as the dogmatic belief that the Unix
philosophy is impeccable and must not be criticised.

Dogma is the misrepresentation of a context-dependent insight as a
universal truth.  In practical terms: when you find yourself not
listening to a counterpoint, consider whether you are giving the other
side a fair chance.  If not, you are most likely being dogmatic.

The Unix philosophy is not the undisputed source of truth.  As with
every corpus of thought, what we learn from Unix remains open to
interpretation.  This means that its followers must assume a sceptical
disposition.  They have to remain open-minded about cases where the
principles of their tradition should not be followed to the letter.  The
practitioner has to exercise judgement and use their discretion to find
the right answer for the task at hand.  Dogma is the enemy of every
school of thought.

Consider the difference between the disciple and the grandmaster.  The
student knows how to faithfully abide by all the precepts of their
tradition.  Whereas the grandmaster not only applies the rules but
understands their underpinnings and thus knows when to suspend their
application and why.  In other words, the student is prone to dogmatism
because of their enthusiasm coupled with their lack of perspective.

* Emacs conforms with the Unix philosophy

In analytical terms, Emacs has two facets to its being:

+ The Lisp interpreter :: We must think of it as the equivalent of a
  POSIX shell like =#!/bin/sh= or whatever environment we use to execute
  scripts.  With Emacs we run or "evaluate" Emacs Lisp code (Elisp).
  That is all we can do with it.
+ The interactive environment :: This is the counterpart of command-line
  shells like =bash=, with the difference being that its event loop, which
  is its interactivity, is more pronounced.  Simply put, Emacs is like a
  shell with superpowers, which looks a text editor upon first sight.
  And this is possible because it is built on top of the interpreter.

Those two aspects of Emacs are woven together into the same application,
making it a /computing environment/ rather than yet another text editor or
IDE.  Still, the analytical distinction is important in light of the
Unix philosophy.  As I already noted, Unix is all about sharp and
specialised tools that can be combined with one another: modularity and
composability.  Emacs is such a tool through its Lisp interpreter.

Just as it is perfectly fine to have a shell interpreter with which to
run arbitrary scripts, it is acceptable to have a Lisp machine for the
purposes of evaluating Lisp.  Similarly, it is customary to run an
interactive shell inside of a terminal emulator.  By the same token, it
is perfectly reasonable to use Emacs' own interactive environment to
interface with the Lisp interpreter.

Emacs should not be compared to Desktop Environments like GNOME or KDE,
or to tilling window managers such as i3, BSPWM, etc.  The reason is
that those are wrappers of otherwise disparate programs.  They basically
bundle different processes inside of a main session, where the joint
presence of distinct applications is a mere coincidence.

In contradistinction, Emacs only runs Elisp and what happens inside of
Emacs participates in the same environment.  This is best understood by
means of an example: if I want to change the font size in my current
BSPWM session, I have to edit the configuration file of my terminal
emulator, my settings daemon for GTK apps, Firefox, and so on.  In other
words, those applications do not know that they are all subprocesses of
the BSPWM session.  Whereas in Emacs, if I change the font size, the
effect is propagated across the entire Emacs environment.

This means that not only does Emacs conform with the Unix philosophy,
but it also has the potential to address its main flaw.  By following
Unix precepts we often find ourselves in scenaria where there is no
integration between the programs we use.  While Emacs ensures that we
get a singular experience /without hacks/: the same commands, the same
fonts and colours, the same paradigms of interaction, and so on.  This
makes Emacs an /integrated computing environment/.

* The integration that Emacs offers is not "bloat"

Which brings us to the dubious notion of bloat in software.  You will
find self-professed proponents of the Unix philosophy dismissing the
value proposition of Emacs on the premise that it is just doing too much
and thus does not abide by the tenets of the Unix faith.  This stems
from the misunderstanding of treating Emacs as a text editor.  Which
naturally raises questions, such as "why should Emacs ever be my Git
front-end, when I already have the command-line?" or "why use Emacs'
windows when Tmux is specialised in multiplexing?".

This is why I stressed that Emacs is a Lisp interpreter that only does
one thing: evaluate Lisp.  And so it is capable of all those wonderful
workflows like editing code, handling your agenda, doing presentations
with plain text like this one, and so on.  If you cavalierly talk about
bloat in Emacs, you are effectively making the argument that =#!/bin/sh=
is at fault because of what shell scripts the user may be running.

Then we have another problem with those who criticise Emacs from a
position of, dare I say, ignorance or based on rumours and hearsay.  And
that is that they themselves do not follow the simulacrum of the Unix
philosophy that is their dogma.  What I mean by that is that you will
often find them using Vim as their text editor.  Last time I checked,
Vim can do multiplexing, it has a concept of workspaces or tabs, it can
spawn a terminal with the =:term= command, and so on.  If you think that
Emacs violates the Unix tradition because it too can do the things that
Vim does, then why do you use Vim?  Why aren't you doing everything with
=ed= or perhaps =sed=?  Or, at the very least, why are you not switching to
=vi=, which is closer to what you claim to stand for.

Maybe then the problem is that you have misunderstood Unix altogether
and are being dogmatic.  Take a pause and think how your totalising
claims are detrimental to your own computing experience: if you follow
them to the letter, you will be missing out on quality-of-life advances
in software.  For what?  Plus you will be tacitly holding that the Unix
tradition is flawless, which is nonsense.

Make no mistake: Vim, Tmux, Mutt, Newsboat, tilling window managers are
all excellent programs in their own right.  But what about their
combination?  What about the /gestalt/?  They lack integration.  To
configure Vim you use Vimscript, Tmux has something like a shell syntax,
Mutt and Newsboat use something else, your window manager may
communicate with shell commands or might require editing a C header
file, and so on.  It is a bit of everything.  And their joint operation
is a mere coincidence, as I already explained: they do not share a
common basis.  Whereas Emacs only knows how to interpret Elisp and all
you do inside of it is an extension of that basic principle, to the
effect that you get what every GNU/Linux power user actually wants: a
singular computing experience that minimises the distance between their
mind and what the machine is doing.  What better minimalism than that?

* Understanding minimalism in context

Let's now consider minimalism as such.  I define minimalism as the
attitude of achieving minimum viable sufficiency for a given task.

To test whether something is minimalist, we must know what it is
designed to do.  Design, however, has two sides to it.  The first is
what the designer thinks is the telos.  The second is what the user
considers as the end goal of the design.

As an example, imagine a sword.  The smith who forged it fathomed a
telos where the sword is fit as a weapon or, at the very least, that it
has a cutting edge.  Now suppose that some collector buys this item and
installs it on their wall for decorative purposes, perhaps to show their
wealth and social status.  To understand the utility and end goal of
this sword, we have to account for the context or, as I say, for the
constitution of the case.  And that is because nothing has a standalone
presence: it always exists in a given context which contributes to its
actuality.

[ Read (among others): On role and actuality
  (https://protesilaos.com/books/2021-04-15-role-actuality/) ]

The same goes for minimalism, whether it is about software or not.  When
we assess the minimum viable sufficiency for a given task, we have to
consider the foresight of the designer or developer but also try to
anticipate the expectations of users.  In other words, there is no
innate minimalism; minimalism that is intrinsic to an otherwise
decontextualised thing.  We must always look at the context.

Allow me to tell you a personal experience with markdown editors from
the days I first switched to GNU/Linux in mid-2016.  I wanted something
that could centre text on the screen like how I am doing it in this
presentation.  It should also have spell checking for English and Greek.
And it should let me configure the colours on display and the size of
the fonts.  So I found several self-styled minimalist apps which would
lack at least one of those basic features.  Now you may think that
changing colours is "bloat", but to me it is a key usability feature,
especially when the designer has not considered applying good colour
contrast for legibility, else accessibility (by the way, I am the author
of the =modus-themes= which are also built into Emacs version 28---they
are designed for the highest legibility standard).

When software calls itself minimalist, it sometimes means that it
actually is incomplete and has not reached the state of minimum viable
sufficiency for the tasks it seeks out to accomplish.  And, by the by, I
will let you connect the dots when marketing folks peddle "minimalism".

* You don't have to switch to Emacs, though you might want to

In conclusion, I encourage you to exercise judgement when thinking about
how some philosophy influences your day-to-day experience.  Do not let
yourself fall into the trap of dogmatism and become a victim of your own
misunderstandings.  In practical terms, always give the other side of
the argument the benefit of the doubt, always keep an open mind, and
always maintain a dubitative and inquisitive disposition.

Emacs is all about integration.  And I already gave some examples, but
let me add another one here.  In Emacs, we have commands to introspect
the environment.  So I can invoke a command which tells me what a key
combination does (=describe-key=).  Or I can call another command which
informs me to which keys is a certain function bound to (=where-is=).
Whereas in my otherwise Unix-y tilling window manager, I have no
built-in way to introspect what the hotkey daemon (=sxhkd=) does when I
type in a certain key chord.  Similarly, my terminal emulator has no
such capabilities, nor do the programs that run inside of it like Vim
and Mutt.  Finding what you want is part of the reason you are using a
computer, so that you do not have to memorise everything.

Basic functionality does not really need that degree of homogeneity.
For instance, =grep= and =sed= get the job done perfectly well, whether
independently or in tandem.  The importance of integration becomes
evident when you operate at a higher level of emergence, where things
must work in concert for optimal results.

To me the Unix philosophy is very important.  It is what inspires me to
separate my programs based on their scope and, more generally, to avoid
duplication of effort.  It also guides me to pursue minimalist solutions
which are fit for their purpose.  I also am, however, a pragmatist who
understands that the Unix tradition is not a dogma.  We can find cases
where improvements can be made to it, such as with the integration of
applications.  When we have a layer of interconnectedness, such as the
one provided by Emacs, we get more consistent results for emergent
workflows, which ultimately lead to a superior end-user experience.

So, should you switch to Emacs?  The answer is "it depends".  If you
need a singular experience that allows you to draw linkages between your
various workflows, then I would say "yes".  Otherwise it really is up to
you.  Whatever you do, however, do it from a position of knowledge, with
a clear purpose, and remain committed to it.  Do not follow trends or
pernicious memes without applying common sense.  Emacs has a learning
curve, but so do all the disparate programs that are glued together in
an ad-hoc fashion in some GNU/Linux power user's setup.  You have to
work for the good things.

That's all for today's presentation, folks.  Now I will check the chat
and comment on any questions or remarks.  Thank you!
</code></pre>

<hr />

<p>The video thumbnail is a tweak of the Levitating, Meditating,
Flute-playing Gnu under the terms of the GNU General Public License:
<a href="https://www.gnu.org/graphics/meditate.html">https://www.gnu.org/graphics/meditate.html</a>.</p>
        
      


guid: https://protesilaos.com/codelog/2021-09-29-modus-themes-1-6-0/
title: Modus themes 1.6.0 for GNU Emacs
url: https://protesilaos.com/codelog/2021-09-29-modus-themes-1-6-0/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Just published version <code>1.6.0</code> of <a href="https://protesilaos.com/emacs/modus-themes">the Modus
themes</a>.  The detailed release
notes are reproduced below.</p>

<p>For any questions pertaining to this publication, feel welcome to
<a href="https://protesilaos.com/contact/">contact me</a>.</p>

<p>I will now prepare the patch for emacs.git.  The modus-themes package in
GNU ELPA fetches its contents from emacs.git, so expect an update
shortly thereafter.</p>

<hr />

<h2>Modus themes version 1.6.0</h2>

<p>By Protesilaos Stavrou <a href="mailto:info@protesilaos.com">info@protesilaos.com</a> on 2021-09-29</p>

<p>This entry records the changes made to the project since the release of
version 1.5.0 on 2021-07-15.  There have been around 70 commits since
then.</p>

<p>Every colour-related modification referenced herein is always
implemented in accordance with the primary accessibility objective of
the themes for a minimum contrast ratio of 7:1 between background and
foreground values in their given combination (the WCAG AAA standard).
Such edits also account for colour-coding that is optimised for the
needs of users with red-green colour deficiency (deuteranopia or
variants).</p>

<p>Here is the URL of the manual: <a href="https://protesilaos.com/emacs/modus-themes">https://protesilaos.com/emacs/modus-themes</a>.
Or read it from Emacs by evaluating this form:</p>

<pre><code>(info "(modus-themes) Top")
</code></pre>

<p>The themes are built into Emacs version 28 (current development target),
and are available on GNU ELPA as well as other archives.  This release
is the final one for the emacs-28 branch, as that gets cut as the next
stable release of GNU Emacs.  Future releases will target Emacs 29 once
that becomes the new <code>master</code> branch.</p>

<h3>Customisation options</h3>

<p>[ Themes need to be reloaded for changes to take effect. ]</p>

<ul>
  <li>
    <p>Introduced the new <code>modus-themes-tabs-accented</code> boolean option.  When
set to non-nil, it renders the background of all tab interfaces in a
shade of blue.  Those interfaces are tab-bar (built-in), tab-line
(built-in), and Centaur tabs.</p>

    <ul>
      <li>The background “accented” colour is the same as the one used for
mode lines when <code>modus-themes-mode-line</code> is configured accordingly.</li>
    </ul>
  </li>
  <li>
    <p>Tweaked the <code>modus-themes-mode-line</code> to accept a <code>padded</code> symbol as
part of the list of properties it can read.  This will increase the
spacing around the mode lines’ text, making the line taller overall
but also more spacious.</p>

    <p>Thanks to Manuel Uberti for making the proposal and providing feedback
in issue 228: <a href="https://gitlab.com/protesilaos/modus-themes/-/issues/228">https://gitlab.com/protesilaos/modus-themes/-/issues/228</a>.</p>
  </li>
  <li>
    <p>Added the <code>modus-themes-scale-small</code> which complements the existing
scale values with one that is meant to be smaller than the base
height.  This option is reserved for special cases and is currently
only used as an opt-in feature in the Org agenda.</p>
  </li>
  <li>
    <p>Expanded the <code>modus-themes-org-agenda</code> with more parameters:</p>

    <ul>
      <li>The current date can now also be underlined.</li>
      <li>Date headings can be scaled/enlarged in size.</li>
      <li>Events, like those of the Diary or sexp entries, can be customised.</li>
    </ul>

    <p>Consult the manual or the variable’s doc string for the details.</p>
  </li>
  <li>
    <p>Removed the obsoleted aliases <code>modus-themes-slanted-constructs</code> and
<code>modus-themes-scale-5</code>.  Those are superseded by the more
appropriately named <code>modus-themes-italic-constructs</code> and
<code>modus-themes-scale-title</code>.</p>

    <p>Thanks to Nicolas De Jaeghere for the patch in merge request 47:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/47">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/47</a>.</p>
  </li>
</ul>

<h3>Faces and face groups</h3>

<ul>
  <li>
    <p>Make the <code>prodigy</code> faces for red/green/yellow inherit from the faces
<code>error</code>/<code>success</code>/<code>warning</code>, respectively.  This is done to (i) avoid
duplication and (ii) ensure that the green/success colour coding is
consistent with the goal of the themes to empower users with red-green
colour deficiency.  The boolean option that changes all such greens to
shades of blue is <code>modus-themes-success-deuteranopia</code>.</p>
  </li>
  <li>
    <p>Assigned the <code>:extend</code> attribute to the <code>org-code</code> face.  This is
necessary when the Org source contains lines that start with a colon
sign.  Those are interpreted as code blocks.  For example:</p>

    <pre><code># Sample code block
:  #+BEGIN_SRC emacs-lisp
:    (defun in-interval (bounds el)
:      (and (&gt;= el (car bounds)) (&lt;= el (cadr bounds))))
:  #+END_SRC
</code></pre>

    <p>With the <code>:extend</code> in place, the background stretches to the edge of
the window, thus giving those lines a uniform rectangular shape.  For
inline uses of <code>org-code</code>, the background should remain limited to the
span of the text.</p>
  </li>
  <li>
    <p>Broadened support for <code>marginalia</code> faces in two phases.</p>

    <ul>
      <li>
        <p>The first pertained to the file permissions that are shown when
completing against file paths.  Their style is similar to what
<code>dired+</code> or the <code>direfl</code> packages provide, however we have taken
care to optimise the interface for the purposes of completion
UIs—where things can look like Dired, we make them alike, but
where they must differ, we differentiate the designs accordingly.
There can be no compromises or arbitrary constraints.</p>

        <p>Also read: <a href="https://github.com/minad/marginalia/pull/91">https://github.com/minad/marginalia/pull/91</a>.</p>
      </li>
      <li>
        <p>The second batch covered all sorts of extra classes that provide
granular control over the appearance of Marginalia instances.
Refinements also had to be made to already-supported faces for the
sake of achieving consistency across the various Marginalia
interfaces.</p>

        <p>Also read: <a href="https://github.com/minad/marginalia/pull/92">https://github.com/minad/marginalia/pull/92</a>.</p>
      </li>
    </ul>
  </li>
  <li>
    <p>Refined <code>diredfl</code> and <code>dired+</code> faces.  For the various “priv” faces,
the intent is to increase the difference in hueness between adjacent
file permissions (the changes are minor, but they do change the
overall result).  Numbers are toned down so that they do not clash
with dates.  The file suffix no longer uses cyan to stand out more in
detailed views.</p>
  </li>
  <li>
    <p>Made <code>icomplete-selected-match</code> (Emacs28) more legible by aligning its
presentation with metaphors that are estaslished across the
modus-themes.  Thanks to Kévin Le Gouguec (peniblec) for noting the
inconsistency with the new face upstream and for writing the patch for
it in merge request 50:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/50">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/50</a>.
Also thanks to Manuel Uberti for confirming that things would look
consistent in the comments’ section of that merge request.</p>
  </li>
  <li>
    <p>Fixed faulty inheritance for the <code>web-mode-keyword-face</code>.  It should
now properly copy the attributes of <code>font-lock-keyword-face</code>.</p>
  </li>
  <li>
    <p>Made inheritance of the new <code>help-key-binding</code> (Emacs28 key) the
default for all faces that need to style key bindings.</p>

    <p>In Emacs 28 all key bindings are automatically displayed with the face
<code>help-key-binding</code> which uses some new face attributes to draw a
cleaner box around it.  Given that the themes must work with earlier
versions of Emacs, we cannot inherit it unconditionally so we added
the relevant conditionality.  It is nice to offer this feature to
those who use the themes on Emacs 28.  Older versions retain the
previous style of a blue colour coupled with a bold weight.</p>

    <p>The exception to this rule is the transient.el faces (this is the
pop-up window used by Magit, among others—transient.el is now built
into Emacs).  The box effect creates unpredictable misalignments, so
we default to the old key binding style for those.</p>

    <p>Thanks to Manuel Uberti and Kevin Fleming for their feedback in issue
232: <a href="https://gitlab.com/protesilaos/modus-themes/-/issues/232">https://gitlab.com/protesilaos/modus-themes/-/issues/232</a>.</p>
  </li>
  <li>
    <p>Added support for the new <code>notmuch-jump-key</code> face.  I contributed this
face in commits c37c9912, 5cc106b0 to the Notmuch git repo:
<a href="https://git.notmuchmail.org/git/notmuch">https://git.notmuchmail.org/git/notmuch</a>.</p>
  </li>
  <li>
    <p>Updated the <code>bookmark-face</code> (Emacs28) as it has been changed upstream
to be a fringe indicator instead of an in-buffer, line-wide background
highlight.</p>
  </li>
  <li>
    <p>Aligned Ediff faces with other <code>modus-themes-diffs</code> styles.  Before we
would differentiate a “focus state”, though that is now considered
surplus to requirements.  The notion of a “focus state” only make
sense in Magit which applies variegated colour-coding to diff hunks
based on their state.  Whereas non-active Ediff changes are grayed
out, so there is no need for further colour-coding nuances.  The most
noticeable change is with:</p>

    <pre><code>(setq modus-themes-diffs 'bg-only)
</code></pre>

    <p>As noted in the commit message of 64c74ae (from 2021-09-04):</p>

    <pre><code>If users think this change is for the worse, we can always define a
helper function like this:

    (defun modus-themes--ediff-style (bgonly default)
      "Diff style for Ediff.
    BGONLY and DEFAULT depend on the value of `modus-themes-diffs'.
    The former is more subtle."
      (if (eq modus-themes-diffs 'bg-only)
          (list bgonly)
        (list default)))

And apply it thus:

    `(ediff-current-diff-A ((,class :inherit ,@(modus-themes--ediff-style
                                                'modus-themes-diff-removed
                                                'modus-themes-diff-focus-removed))))
</code></pre>

    <p>No feedback was received towards that end in about a month, so we
consider the change to be acceptable, without prejudice to the
possibility of future updates.</p>
  </li>
  <li>
    <p>Unified the styles of <code>org-agenda-calendar-sexp</code>, <code>org-agenda-diary</code>,
and <code>org-agenda-calendar-event</code>.  This is not a user-facing change but
an internal refactoring to avoid repetition.  It also makes things
easier for the implementation of the <code>modus-themes-org-agenda</code> (as
mentioned above).</p>
  </li>
  <li>
    <p>Ensured that the <code>bookmark-menu-bookmark</code> face inherits from the
<code>bold</code> face.  By default it hardcodes the bold weight, whereas we
instruct it to inherit the <code>bold</code> face.  A user can thus change the
<code>:weight</code> of that face to whatever they want, like semibold,
extrabold, etc.  We do this throughout the themes for bold and
italics—consider it a “hidden feature” of sorts.  Check the manual
for more on the matter:</p>

    <pre><code>(info "(modus-themes) Configure bold and italic faces (DIY)")
</code></pre>
  </li>
  <li>
    <p>Provided support for tab-bar groups (Emacs28).  Specifically the faces
<code>tab-bar-tab-group-current</code> and <code>tab-bar-tab-group-inactive</code>.</p>

    <p>Thanks to Adam Porter (alphapapa) for the feedback in issue 8 over at
the Github mirror: <a href="https://github.com/protesilaos/modus-themes/issues/8">https://github.com/protesilaos/modus-themes/issues/8</a>.</p>
  </li>
  <li>
    <p>Decoupled the <code>stripes</code> face from that of <code>hl-line-face</code>.  This is
because the stripes are not meant to change depending on the value of
the user option <code>modus-themes-hl-line</code>.</p>
  </li>
  <li>
    <p>Revised the red shade of “flagged” entries in mu4e and notmuch.  Those
are now consistent with Gnus.  The shade of red that was used before
was closer to the orange side of the spectrum whereas the current has
hints of blue (a cherry colour) and thus combines better with the cyan
and blue that prevail in those interfaces.  These are fine margins,
though the effect is noticeable regardless.</p>
  </li>
  <li>
    <p>Configured the new <code>ansi-color</code> faces (Emacs28) which are used by
shells and terminals (among others).  Thanks to Manuel Uberti for
reporting the changes to upstream Emacs in issue 236:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/236">https://gitlab.com/protesilaos/modus-themes/-/issues/236</a>.</p>
  </li>
  <li>
    <p>Expanded support for EMMS faces, pertaining to its browser views.
Thanks to Feng Shu (tumashu) for bringing those to my attention in
issue 11 over at the Github mirror:
<a href="https://github.com/protesilaos/modus-themes/issues/11">https://github.com/protesilaos/modus-themes/issues/11</a>.</p>
  </li>
  <li>
    <p>Styled the new <code>tab-line-tab-modified</code> face (Emacs28).  It should now
use a faint red colour to denote changes to the underlying file.
Thanks to Adam Porter (alphapapa) for bringing it to my attention in
issue 12 over at the Github mirror:
<a href="https://github.com/protesilaos/modus-themes/issues/12">https://github.com/protesilaos/modus-themes/issues/12</a>.</p>
  </li>
  <li>
    <p>Configured the single face that the <code>cursor-flash</code> package has to
offer.  Thanks to Manuel Uberti for the feedback in issue 231:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/231">https://gitlab.com/protesilaos/modus-themes/-/issues/231</a>.</p>
  </li>
  <li>
    <p>Included <code>elpher</code> in the list of supported packages by means of
covering the heading faces it implements.</p>
  </li>
  <li>
    <p>Recalibrated certain dedicated colours for inactive tabs and tweaked
tab faces to (i) marginally improve the default aesthetic and (ii)
harmonise it with the style of <code>modus-themes-tabs-accented</code>.</p>
  </li>
  <li>
    <p>Removed the foreground attribute from all markup faces that are meant
to denote emphasis in italics.  That is because such faces are
typically composed with others, so we do not wish to inadvertently
override any other colour that would otherwise have taken effect.</p>
  </li>
  <li>
    <p>Wrote the faces for upstream Org that improve the contextuality of
various agenda views (included in version 9.5).  This was done in
close collaboration with Gustavo Barros who offered detailed feedback
in issue 208 (which also led to the creation and eventual expansion of
the <code>modus-themes-org-agenda</code> user option):
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/208">https://gitlab.com/protesilaos/modus-themes/-/issues/208</a>.</p>

    <p>Four new faces improve certain styles and offer more flexibility for
some Org agenda views: <code>org-agenda-date-weekend-today</code>,
<code>org-imminent-deadline</code>, <code>org-agenda-structure-secondary</code>,
<code>org-agenda-structure-filter</code>.  They inherit from existing faces in
order to remain backward-compatible.</p>

    <p>Quoting from <a href="https://list.orgmode.org/87lf7q7gpq.fsf@protesilaos.com/">https://list.orgmode.org/87lf7q7gpq.fsf@protesilaos.com/</a>:</p>

    <pre><code>+ The 'org-imminent-deadline' is useful to disambiguate generic
  warnings from deadlines.  For example, a warning could be
  rendered in a yellow colored text and have a bold weight,
  whereas a deadline might be red and styled with italics.

+ The 'org-agenda-structure-filter' applies to all tag/term
  filters in agenda views that search for keywords or patterns.
  It is designed to inherit from 'org-agenda-structure' in
  addition to the 'org-warning' face that was present before (and
  removes the generic 'warning' face from one place).  This offers
  the benefit of consistency, as, say, an increase in font height
  or a change in font family in 'org-agenda-structure' will
  propagate to the filter as well.  The whole header line thus
  looks part of a singular design.

+ The 'org-agenda-structure-secondary' complements the above for
  those same views where a description follows the header.  For
  instance, the tags view provides information to "Press N r" to
  filter by a numbered tag.  Themes/users may prefer to
  disambiguate this line from the header above it, such as by
  using a less intense color or by reducing its height relative to
  the 'org-agenda-structure'.

+ The 'org-agenda-date-weekend-today' provides the option to
  differentiate the current date on a weekend from the current
  date on weekdays.
</code></pre>
  </li>
</ul>

<p>Other patches I have made to, inter alia, emacs.git and org.git with
regard to faces are documented in previous change log entries.</p>

<h3>Documentation</h3>

<ul>
  <li>
    <p>Removed references to old versions of the themes from before their
refactoring in version 1.0.0.  Those old packages no longer exist.
Users must install the <code>modus-themes</code> and then load either of
<code>modus-operandi</code> or <code>modus-vivendi</code>.</p>
  </li>
  <li>
    <p>Included various extensions of the Vertico package in the list of
indirectly supported packages.  Those define faces which either
inherit from basic ones that we already support or use colours that
are consistent with our accessibility target.</p>
  </li>
  <li>
    <p>Referenced <code>side-hustle</code>, <code>tide</code>, <code>bufler</code> as an indirectly supported
packages for the same reasons.</p>
  </li>
  <li>
    <p>Simplified time-stamp local variables that are used in modus-themes.el
to show the time the file was edited.  We apply <code>time-stamp-pattern</code>
instead of setting multiple time-stamp variables.  Thanks to Stephen
Gildea for the patch, which was sent to me via email (yes, you can
always do that).</p>
  </li>
  <li>
    <p>Updated the manual’s “acknowledgements” section to name all new
contributors to code/ideas/feedback.</p>
  </li>
  <li>
    <p>Furnished information on how to configure the <code>highlight-parentheses</code>
package and extend its faces for use with the themes.  The entry
provides a complete Elisp implementation.</p>
  </li>
  <li>
    <p>Improved the code samples for the prism.el setup that users may wish
to set up by themselves.  The new lists of colours work better when
Prism’s colouration is limited to a small set of hues.</p>
  </li>
  <li>
    <p>Deleted trailing whitespace in the manual which had adverse effects
when trying to compile the modus-themes.org over at emacs.git.  Thanks
to Philip Kaludercic for the patch in merge request 49:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/49">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/49</a>.</p>
  </li>
</ul>

<p>Thanks again to everyone involved.  Looking forward to see the Modus
themes, version 1.6.0, as part of the next stable release of Emacs.</p>
        
      


guid: https://protesilaos.com/codelog/2021-10-02-introducing-tmr-el/
title: Introducing tmr.el for Emacs
url: https://protesilaos.com/codelog/2021-10-02-introducing-tmr-el/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Just created a standalone Git repository for my <code>tmr.el</code> library:
<a href="https://gitlab.com/protesilaos/tmr.el">https://gitlab.com/protesilaos/tmr.el</a>.</p>

<p>This has been part of <a href="https://protesilaos.com/emacs/dotemacs">my dotemacs</a>
for several months now and I thought it was right to turn it into its
own package.  No ELPA package is planned for the foreseeable future.</p>

<p>Excerpt from its documentation:</p>

<blockquote>
  <p>This package provides a single command for setting a timer: <code>tmr</code>.</p>

  <p>The command prompts for a unit of time, which is represented as a string
that consists of a number and, optionally, a single character suffix
which specifies the unit of time.</p>

  <p>Valid formats:</p>

  <table>
    <thead>
      <tr>
        <th>Input</th>
        <th>Meaning</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>5</td>
        <td>5 minutes</td>
      </tr>
      <tr>
        <td>5m</td>
        <td>5 minutes</td>
      </tr>
      <tr>
        <td>5s</td>
        <td>5 seconds</td>
      </tr>
      <tr>
        <td>5h</td>
        <td>5 hours</td>
      </tr>
    </tbody>
  </table>

  <p>If <code>tmr</code> is called with an optional prefix argument (<code>C-u</code>), it also asks
for a description which accompanies the given timer.  Preconfigured
candidates are specified in the user option <code>tmr-descriptions-list</code>,
though any arbitrary input is acceptable at the minibuffer prompt.</p>

  <p>When the timer is set, a message is sent to the echo area recording the
current time and the point in the future when the timer elapses.  Echo
area messages can be reviewed with the <code>view-echo-area-messages</code> which is
bound to <code>C-h e</code> by default.</p>

  <p>Once the timer runs its course, it produces a desktop notification and
plays an alarm sound.  The notification’s message is practically the
same as that which is sent to the echo area.  The sound file for the
alarm is defined in <code>tmr-sound-file</code>, while the urgency of the
notification can be set through the <code>tmr-notification-urgency</code> option.</p>

  <p>The <code>tmr-cancel</code> command cancels the last <code>tmr</code>.  Note that for the time
being it has no notion of multiple timers—just the last one.</p>
</blockquote>

<hr />

<p>As with every piece of Elisp I produce for my private needs, this is all
done for recreational and/or educational purposes.  Though I believe
<code>tmr.el</code> can be used by others as well, provided they are willing to
install it manually.</p>

<p>The initial release notwithstanding, there are a couple of user-facing
improvements to be made:</p>

<ol>
  <li>Make the <code>tmr-cancel</code> command prompt with completion for a timer
object when more than one is present.</li>
  <li>Create a <code>tmr-list</code> command which lists all <code>tmr</code> objects (yes, I
know about <code>list-timers</code>, but I want something more specific).</li>
</ol>
        
      


guid: https://protesilaos.com/codelog/2021-10-15-emacs-29-eww-rename-buffers/
title: EWW buffers can now be auto-renamed in Emacs 29
url: https://protesilaos.com/codelog/2021-10-15-emacs-29-eww-rename-buffers/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Starting with commit <code>171de3eee4</code> to the Emacs <code>master</code> branch, users
can now opt-in to a feature that automatically renames EWW buffers to
something more usable than the default <code>*eww*</code>.</p>

<p>The point of entry is the customisation option <code>eww-auto-rename-buffer</code>.
When given a <code>title</code> value, it will use the web page’s title as the name
of the buffer.  When the value is <code>url</code>, the page’s URL shall be used
instead.  Otherwise it is possible to give it the symbol of a function
that runs without parameters and returns a string.  So users can
configure this however they like.</p>

<p>Detail of the commit:</p>

<pre><code>  commit 171de3eee459ed64388a8ced7d07fa031ea025a6
  Author: Protesilaos Stavrou &lt;info@protesilaos.com&gt;
  Date:   Fri Oct 15 14:12:32 2021 +0200

      Add new option to rename eww buffers

      * etc/NEWS: Document the new user options.

      * lisp/net/eww.el (eww-auto-rename-buffer, eww-buffer-name-length):
      Add new user options.
      (eww--rename-buffer): Introduce new function that performs the
      renaming of buffers.
      (eww--after-page-change): Add new wrapper function which calls
      'eww-update-header-line-format' and 'eww--rename-buffer'.
      (eww, eww-render, eww-tag-title, eww-readable, eww-restore-history):
      Include eww--after-page-change.

      Fix bug#51176.

      Co-authored-by: Abhiseck Paira &lt;abhiseckpaira@disroot.org&gt;
      Co-authored-by: Protesilaos Stavrou &lt;info@protesilaos.com&gt;

   doc/misc/eww.texi |  8 +++++++
   etc/NEWS          | 10 +++++++++
   lisp/net/eww.el   | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
   3 files changed, 78 insertions(+), 5 deletions(-)
</code></pre>

<p>Thanks to everyone who participated in <a href="https://lists.gnu.org/archive/html/bug-gnu-emacs/2021-10/msg01314.html">the discussion around
bug#51176</a>.
Thanks to the Emacs co-maintainer, Lars Ingebrigtsen, for the feedback
and for merging the patch.  And special thanks to Abhiseck Paira, my
co-author for this patch, for all the work in making this happen.</p>

<p>I am very happy to see this merged into core.  I have been using a
variant of it for several months now.  It had been one of the most
useful additions of mine in making EWW my main web browser.</p>

<p>[ Watch: <a href="https://protesilaos.com/codelog/2021-03-25-emacs-eww/">EWW and my extras (text-based Emacs web
browser)</a>
(2021-03-25) ]</p>

<p>Going forward, the plan is to extract more out of my <code>prot-eww.el</code>,
refine it, and push it to emacs.git.  Same principle for everything else
that goes into <a href="https://protesilaos.com/emacs/dotemacs">my dotemacs</a>.</p>
        
      


guid: https://protesilaos.com/codelog/2021-10-21-emacs-conf-presentation/
title: My talk at EmacsConf 2021 and its backstory
url: https://protesilaos.com/codelog/2021-10-21-emacs-conf-presentation/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>This year’s Emacs conference (EmacsConf 2021) will take place on
November 27 and 28.  I will be among the speakers.  My talk’s
description:</p>

<blockquote>
  <p>How Emacs made me appreciate software freedom</p>

  <p>The theme will be “how Emacs empowered my software freedom”.  I will
outline the key moments in my transition to a GNU/Linux operating
system and mark those which eventually contributed towards me becoming
an Emacs user, maintainer of a—dare I say—popular package, and
contributor to upstream Emacs (among others).  By alluding to personal
experiences, I will draw generalisable insights and connect them to
what I believe are irreducible qualities of Emacs qua software and
Emacs as a community of like-minded people.  The talk will be
theoretical in nature: there won’t be any code-related demonstration
nor technical references that only people with a background in
computer science would likely recognise.  Personal anecdotes shall be
tangential to the point and considered as ancillary to the thesis of
what Emacs represents from the standpoint of software freedom and user
empowerment.  The presentation is intended for a general audience that
is interested in GNU software in general and Emacs in particular.  My
formal educational background as a social scientist (i.e.  not a
programmer) and later as a philosopher informs my approach to this
topic.</p>

  <p>The presentation shall be 40 minutes long.  Its text will be in essay
form and shall be supplied as complementary material to the video.
The notation will be in Org mode.</p>
</blockquote>

<h2>Backstory</h2>

<p>I had no intention to participate in the event, even though I was well
aware of it and despite the fact that I had followed the previous two
conferences.  My reasoning was that (i) I probably had no technical
insight to share that wasn’t already known to the members of—and
likely participants in—such a setting, (ii) I already have my website
with a dedicated section on Emacs where I can publish any article or
video I want, and (iii) EmacsConf provides a platform for people who are
otherwise not disseminating their own stories to reach a wider audience.
Some or all of these assumptions may have been fallacious.  They still
represent what I believed at the time.</p>

<p>At around the end of September, a few days before the deadline for the
submission of proposals, someone knowledgeable of the conference’s
logistics, whose name shall not be divulged, contacted me and asked me
to deliver a talk.  I was eventually persuaded to make an attempt at
taking a 20-minute slot, but it was not feasible to condense my thoughts
to such a short video, especially given the tight deadline (I was
preoccupied with other issues, including <a href="https://protesilaos.com/codelog/2021-09-29-modus-themes-1-6-0/">the release of modus-themes
version 1.6.0</a>
that was made just in time for the creation of the <code>emacs-28</code> branch in
emacs.git).  So I replied, perhaps with some relief, that I would not be
available for this year’s event and would consider trying again the year
after.</p>

<p>To cut the long story short, the 40-minute slot was considered a viable
option and I made a last-ditch effort to submit an abstract before the
deadline.  It happened on the 30th of September.</p>

<p>There are lots of talks in this year’s conference.  All seem very
interesting and I am looking forward to watch them.  Hopefully mine will
be worth it as well.</p>
        
      


guid: https://protesilaos.com/codelog/2021-10-22-emacs-mct-demo/
title: Demo of my Minibuffer and Completions in Tandem (mct.el) for Emacs
url: https://protesilaos.com/codelog/2021-10-22-emacs-mct-demo/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Raw link: <a href="https://www.youtube.com/watch?v=roSD50L2z-A">https://www.youtube.com/watch?v=roSD50L2z-A</a></p>
         
         <p>In this video I showcase my new package, <code>mct.el</code>.  It makes the default
completion experience feel closer to what you get with vertically
aligned third-party completion interfaces, by only re-using built-in
functionality and its own glue code.</p>

<p>Quoting <a href="https://protesilaos.com/emacs/mct">from its documentation</a>:</p>

<blockquote>
  <p>Minibuffer and Completions in Tandem, also known as “MCT”, “Mct”, mct,
or mct.el, is a package that enhances the default minibuffer and
<code>*Completions*</code> buffer of Emacs 28 (or higher) so that they work
together as part of a unified framework.  The idea is to make the
presentation and overall functionality be consistent with other
popular, vertically aligned completion UIs while leveraging built-in
functionality.</p>

  <p>The main feature set that unifies the minibuffer and the
<code>*Completions*</code> buffer consists of commands that cycle between the
two, making it seem like they are part of a contiguous space.</p>

  <p>MCT tries to find a middle ground between the frugal defaults and the
more opinionated completion UIs.  This is most evident in its approach
on how to present completion candidates.  Instead of showing them
outright or only displaying them on demand, MCT implements a minimum
input threshold as well as a slight delay before it pops up the
<code>*Completions*</code> buffer and starts updating it to respond to user
input.</p>

  <p>Customisation options control the input threshold
(<code>mct-minimum-input</code>) and the delay between live updates
(<code>mct-live-update-delay</code>).  Similarly, a blocklist and a passlist for
commands are on offer.</p>
</blockquote>

<p>MCT is not available in any package archive for the time being, though I
do plan to submit it to GNU ELPA.  In the meantime, you will have to
install it manually or with the help of <code>straight.el</code>, <code>quelpa</code>, or
similar.  Its source code: <a href="https://gitlab.com/protesilaos/mct">https://gitlab.com/protesilaos/mct</a> (a
Github mirror exists as well).</p>

<hr />

<p>Those familiar with <a href="https://protesilaos.com/emacs/dotemacs">my dotemacs</a> may
notice that <code>mct.el</code> is derived from my now-deprecated
<code>prot-minibuffer.el</code> library.  The longer-term plan is to turn every
piece of my custom code into its own package or submit it as a patch for
emacs.git (as we did with the <a href="https://protesilaos.com/codelog/2021-10-15-emacs-29-eww-rename-buffers/">auto-renaming feature of EWW
buffers</a>).</p>
        
      


guid: https://protesilaos.com/codelog/2021-10-29-interview-brown-uni-mag-emacs-life/
title: My ‘Brown University Interviews’ on Emacs and life
url: https://protesilaos.com/codelog/2021-10-29-interview-brown-uni-mag-emacs-life/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>I was interviewed by Kristoffer Balintona from Brown University about my
participation in the free software and Emacs communities, as well as
general themes related to university education and mountain life.</p>

<p>The publication is <a href="https://browninterviews.org/stand-up-and-tell-people-that-you-cannot-just-be-the-red-carpet-upon-which-others-will-parade-brown-interviews-protesilaos-stavrou/">“Stand up and tell people that you cannot just be
the red carpet upon which others will parade.” — Brown Interviews
Protesilaos
Stavrou</a>.</p>

<p>Quote from the introduction:</p>

<blockquote>
  <p>Born in Greece in 1988, Protesilaos Stavrou is involved in the
<a href="https://opensource.com/resources/linux">Linux</a> (alternative to
Windows and MacOS; an open-source operating system) and
<a href="https://opensource.com/resources/what-emacs">Emacs</a> (extensible and
versatile text editing software used by programmers, authors,
bloggers, and more) communities. Stavrou is a philosopher; he releases
video essays on
<a href="https://www.youtube.com/c/ProtesilaosStavrou/videos">YouTube</a> and
writings on his <a href="https://protesilaos.com/">blog</a> which blend distant
philosophies related to free and open source software and Unix to law
and politics. Stavrou has a formal education in European politics, law
and economics, intellectually specializing in the European Union’s
Economic and Monetary Union and having previously worked in
politics-related fields including as a parliamentary assistant at the
European Parliament.</p>

  <p>In this interview we discuss his experience building a small yet loyal
internet following, the philosophy of thinking for yourself and living
on your own terms, the role of a university education, living in the
mountains, and the facets of his humanity not often revealed online.</p>
</blockquote>

<p>Thanks to Kristoffer Balintona for approaching me for a call and then
transcribing the whole thing!</p>

<hr />

<p>P.S. The picture in the interview is from April (I had to borrow a phone
to take it).  In other words, the beard is longer now :)</p>

<!-- The following is just a backup in case Brown Interviews ever disappears. -->

<!-- Kristoffer Balintona: Let’s talk about your YouTube channel. Why did you
 !-- decide to make one?
 !-- 
 !-- Protesilaos Stavrou: I actually wanted to practice my English. I know it
 !-- seems odd since my content is not at all related to that, but I used to
 !-- live in Brussels, the capital of Belgium. When I came back to Cyprus a
 !-- few years ago, all I could speak was Greek. I wasn’t practicing English
 !-- nor French at all. So my first motivation to produce YouTube videos was
 !-- simply to practice my English. It was mostly me just recording my voice,
 !-- I didn’t care about reaching out to a specific audience and didn’t have
 !-- a predetermined plan. It was only afterwards that I discovered free
 !-- software on Linux as well as Emacs which gave me something more concrete
 !-- and a niche to focus on. From there, my channel grew organically. 
 !-- 
 !-- Unlike other YouTubers, your channel seems unconcerned with growing its
 !-- following. Is that accurate?
 !-- 
 !-- You’re right, I don’t really care about the channel per se. For me, the
 !-- channel itself, whether it grows, whether it makes money, or whether it
 !-- becomes popular, is not really of interest. In my opinion, if you put
 !-- something like that as your number-one goal, then, whatever you do, you
 !-- will instrumentalize that motive in order to pursue that end. If you
 !-- have to conform with expectations then you will become the embodiment of
 !-- those expectations and you will no longer be yourself. Instead, you will
 !-- become someone that conforms with those expectations which will
 !-- inevitably dilute what you have to say. Whereas, if you are true to
 !-- yourself, you don’t need to do that. It will be sustainable; you can do
 !-- it forever.
 !-- 
 !-- I think you should put yourself first and then the audience will follow.
 !-- Even if there is no audience, what matters is whether you can be
 !-- yourself and get the most out of what you are doing. For me that is, at
 !-- the end of the day, an intellectual activity that broadens my mind and
 !-- satisfies an innate curiosity.
 !-- 
 !-- Then what are your goals for the channel, if you have any at all?
 !-- 
 !-- I don’t want others to follow my channel or to follow me in particular,
 !-- in the sense of tracking the minutiae of my life. I want others to focus
 !-- more on the principles I talk about. I see the world under political,
 !-- social, and human terms, which is not the case for most of those in the
 !-- Linux and Emacs communities. Reality does not consist of each person
 !-- living in their own bubble; there are systemic magnitudes and structural
 !-- issues. Regardless of the topic, I want it to be useful to others by
 !-- speaking in a way that can be applied generally to everyday life. For
 !-- me, the only long-term objective for the channel is to keep growing
 !-- organically and for it to continue being a place where I post my
 !-- thoughts in the way I do now. So as long as I get to do my thing, this
 !-- will remain a hobby rather than a job. I don’t see it as something that
 !-- has to pay dividends.
 !-- 
 !-- What has been the most pleasant lesson you’ve learned from posting
 !-- YouTube videos and blogging?
 !-- 
 !-- What surprised me the most was that there exists a whole social and
 !-- human element to the free and open source software communities. I
 !-- receive emails [from those who have seen my videos] practically every
 !-- day now where I discuss topics pertaining to technology but also life in
 !-- general. I became impressed by the vibrant communities I found that
 !-- exist around these tools. 
 !-- 
 !-- I learned that they are not just tools; they are also what keeps us
 !-- together and I am very happy to be part of this community. These
 !-- software are developed by a distributed network of volunteers willing to
 !-- disseminate knowledge that has been processed or considered thoroughly,
 !-- which is incredibly inspiring. When you are in this kind of community,
 !-- you really want to put the best version of yourself out there and be
 !-- useful to others.
 !-- 
 !-- What life lessons did you learn from your university experience?
 !-- 
 !-- I studied European politics, law, and economics, which is an
 !-- interdisciplinary study. My focus was on European Integration: how the
 !-- EU (European Union) has gone from a small coalition of states centered
 !-- around a specific set of interests into today’s federal system of sorts.
 !-- I’m not interested in politics in the narrow sense of party politics or
 !-- in the sense of what person X says about situation A. I am mostly
 !-- interested in the bigger picture, which includes not just the political
 !-- process — party politics — but also economic implications with social
 !-- and cultural dimensions. There is always a broader narrative, something
 !-- that we can extract and generalize independent of the specifics of the
 !-- case.
 !-- 
 !-- Even though I attended university, I came from a working class
 !-- background. I didn’t necessarily have the prospects to succeed. Going
 !-- into university was actually a luxury for people in my income
 !-- distribution. I had to work full time. I didn’t have the university life
 !-- of going into campus, going to classes, and then having free time. For
 !-- me to attend university and have to study and work full time wasn’t
 !-- easy. I was not particularly talented either.
 !-- 
 !-- Nevertheless, I actually learned more than what was expected because I
 !-- didn’t miss any classes. When we would have homework, the professor
 !-- would give us three or four chapters from a book to study, but I would
 !-- read the entire book because I wanted to learn. It wasn’t about the
 !-- homework itself or the degree; it was about learning the content. Even
 !-- over the weekends, I would study if I wasn’t preoccupied with my job.
 !-- 
 !-- As someone who provides a comprehensive and free resource for
 !-- autodidacts, what role do you think formal schooling plays in education?
 !-- 
 !-- The university itself cannot teach you anything. You have to teach
 !-- yourself. Of course, it offers you a platform to learn. It offers you
 !-- everything that you need access to: libraries, one-on-one meetings with
 !-- professionals who are experts in their field, like-minded peers.
 !-- However, at the end of the day, they cannot do the work for you. You are
 !-- the one who has to read the books, study on your own, and think things
 !-- through. It’s about learning for your own betterment.
 !-- 
 !-- And, of course, when it comes to making sense of the world, when it’s no
 !-- longer about assignments, that broadened horizon really helps you see
 !-- the bigger picture. University is its own little bubble where you are
 !-- safe if you follow the rules and get good grades. You will learn a lot,
 !-- of course, but when it comes to the outside world, the world beyond the
 !-- confines of the university, you really need to learn to think for
 !-- yourself, not just whatever box you were placed in at school,
 !-- university, et cetera.
 !-- 
 !-- I am aware that you moved to a remote area in the mountains. What
 !-- prompted that decision? Is that related to your belief that we should
 !-- always think for ourselves?
 !-- 
 !-- Yes. I grew up in a small city in Greece and lived most of my life in
 !-- urban areas. I currently live in mountains located in Cyprus, which is
 !-- an island in the eastern part of the Mediterranean Sea. I saw this as an
 !-- experiment: I thought I would take the risk and see what happens. Going
 !-- back is always an option if I change my mind or get bored and is really
 !-- the worst case. The reason for this decision was that I wanted a change
 !-- of pace. I wanted someplace that would be literally and metaphorically
 !-- far away from the urban “EU bubble” that I felt I was in when living in
 !-- Brussels.
 !-- 
 !-- I didn’t always have this mindset. My mindset used to be: “Let’s focus
 !-- on the task that I have to do. Let’s just conform with the rules of the
 !-- game. Let’s just do what we are told to do and see how it goes from
 !-- there.” The point is that I thought I was happy. I had fun and work to
 !-- do — and enjoyed those moments — but I started to feel that I was not
 !-- moving at the pace where I felt I was 100% committed to what I was
 !-- doing. I was thinking that I wanted to move in a different direction. I
 !-- wanted to go one way, but life was taking me another way. My lifestyle
 !-- needed to change. At the time, I was feeling this tension, but I
 !-- couldn’t specify it. So, I wanted to take a step back and see how things
 !-- stand and reassess them by listening to my mind. I wanted to withdraw,
 !-- take things in, think things through, and then commit again.
 !-- 
 !-- I think I was really asking myself this: “What are your priorities? Do
 !-- you want to put your own wellness first or what is best for your
 !-- employer first?” For me, I wanted to prioritize my wellness. If I am
 !-- well, if I am fine with myself, if I am focused on what I’m doing, then,
 !-- of course, I can also perform in my work. On the other hand, if I must
 !-- follow someone else’s schedule or lifestyle, there will be friction
 !-- which causes me to not feel 100% comfortable. I won’t be 100% committed
 !-- to the cause. Thus, I wanted to take control and see whether I can turn
 !-- things around. 
 !-- 
 !-- It may have been drastic, but it was effective. It has helped me a lot
 !-- to escape from the fast pace of city life.
 !-- 
 !-- Would you say that your Linux and Emacs journey is a manifestation of
 !-- those values?
 !-- 
 !-- Yes, but I would say that those are epiphenomena, the things that
 !-- happened afterwards. What preceded them was this exact change in
 !-- mentality. This shift in mindset into a gradually more deliberate
 !-- lifestyle, a lifestyle where I control more of the factors that affect
 !-- my life. So that was the general principle; to be in control of as many
 !-- factors as possible. Of course, I cannot control everything, but to at
 !-- least be in charge of whatever I can. This inspired me to search for
 !-- alternatives for the software I used to use. And, of course, part of
 !-- that process was the discovery of Linux and all the other free software
 !-- tools in the free software space, including Emacs.
 !-- 
 !-- What have you learned specifically from living in the mountains?
 !-- 
 !-- Since coming here, I’ve learned a lot from a new freedom to think and
 !-- commit to work without any distractions. For example, every morning I go
 !-- hiking for an hour or so. Ten kilometers (6.21 miles) is now a regular
 !-- walk for me. I think this basic level of fitness can really help your
 !-- intellectual pursuits. For example, I wake up in the morning and have
 !-- lots of energy because I am in this regular cycle of good fitness and
 !-- diet. This gives me the energy needed for the clarity of mind to pursue
 !-- other interests. In Ancient Greece it was said that “A healthy mind
 !-- exists within a healthy body.” I also hike for the opportunity to be
 !-- alone in the mountains with nature. I get the chance to withdraw from
 !-- all the noise, literally and metaphorically, and to freely think about
 !-- my projects and clarify my thoughts. 
 !-- 
 !-- But there is also simply the awesomeness of nature. When I stand on a
 !-- mountaintop and I see the various open horizons, mountain ranges,
 !-- landscapes, and forests, it really revitalizes me. It’s a special
 !-- experience that I never had in an urban setting.
 !-- 
 !-- Besides hiking, are there any other hobbies viewers might be surprised
 !-- to hear you have?
 !-- 
 !-- I used to be a football player, particularly a midfielder. The reason I
 !-- didn’t become a professional is because of an injury. Of course, I enjoy
 !-- sports in general. I like to exercise: hiking, running, calisthenics.
 !-- These are things which I have been doing since I was in my teens. I also
 !-- like to learn about herbs that I come across in the area. After a walk
 !-- or hike, I come home and search online for the indigenous ferns and read
 !-- about their properties and uses.
 !-- 
 !-- You’ve mentioned your dog. Does he ever accompany you on your
 !-- adventures?
 !-- 
 !-- Of course! I really like all animals. I do have a dog (cross-breed
 !-- between a German Shepherd Dog and an American Pitbull Terrier) named
 !-- Atlas, but I also like cats and all sorts of other animals. I have taken
 !-- care of dogs for several years, and I see my dogs as part of the family.
 !-- They aren’t just pets. They’re really your friends and can help in all
 !-- sorts of ways. They’re also my hiking partners — there’s always a dog by
 !-- my side when I go out into the mountains.
 !-- 
 !-- Finally, if you had to give your nineteen-year-old self advice, what
 !-- would it be?
 !-- 
 !-- In life, you should not always try to accommodate other people’s wants.
 !-- At some point you should draw a line and say, “Look, I understand your
 !-- circumstances, but you also have to take me into your own account and my
 !-- own subjectivity, personality, and specific way of operating.” I think
 !-- this is especially true for people who are, like me, quiet and don’t
 !-- speak much. I know this may sound weird because all my videos are
 !-- basically monologues, but I am the silent, introverted type. So for a
 !-- person like me, it’s even more difficult to stand up and say, “Hey, you
 !-- need to think of me as well.” Stand up and tell people that you cannot
 !-- just be the red carpet upon which others will parade.
 !-- 
 !-- *This interview has been edited for length and clarity. -->
        
      


guid: https://protesilaos.com/codelog/2021-10-29-live-stream-impostor-syndrome-emacs/
title: Live stream: impostor syndrome and the Emacs community
url: https://protesilaos.com/codelog/2021-10-29-live-stream-impostor-syndrome-emacs/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Raw link: <a href="https://www.youtube.com/watch?v=Hy-QUCSHoWM">https://www.youtube.com/watch?v=Hy-QUCSHoWM</a></p>
         
         <p>On Saturday 2021-10-30 at 13:00 +0300 I did a live stream.  The video
was recorded for future reference and is available on this page.</p>

<p>I talked about the impostor syndrome; of how we might seriously think of
ourselves as frauds.  My intention was to provide a philosophical
outlook and to outline certain methods we may apply to cope with
impostor syndrome and, perhaps, overcome it.</p>

<p>As you would expect from my other two live streams, much of the
presentation was theoretical and targeted at a general audience.  Though
I also described some experiences from my participation in the Emacs
community.  Thes did not go into technicalities, but only served as
examples from which we could draw insights about everyday life.</p>

<p>The text of the presentation is reproduced below.  It is in Org
notation.</p>

<p>After I concluded my talk, I joined the live chat to answer any
questions and/or to comment on any remarks.  Those were about the topic
of the live stream and other subjects related to what I post on my
website.</p>

<hr />

<pre><code class="language-org">#+TITLE: Live: Impostor syndrome and the Emacs community
#+AUTHOR: Protesilaos Stavrou (https://protesilaos.com)
#+DATE: 2021-10-30

* Introduction

Hello everyone!  My name is Protesilaos, also known as "Prot".

In this video I want to talk to you about something that relates to
human relations and which I have discerned in tech-related communities,
such as that of Emacs.  This is about how some persons in those
communities may feel about themselves and their contributions.  What is
the self-image that they have and which are the associations or thought
processes that might relate to it.

I want to talk to you about the phenomenon of thinking that you are a
fraud, an infamous charlatan who does not really know anything about
the subject matter in question.  This is also known as the "impostor
syndrome".

I will approach this topic mostly at the theoretical level and gradually
include some more specific examples, such as references from my
participation in the Emacs community.

The intention is to share with you what the problem can be and discuss
some techniques we may use to ameliorate the pressure and, perhaps,
circumvent the obstacles that our mind puts in front of us.

The first part of this presentation is general, but then I will be a bit
more specific with examples about Emacs and related topics.

The reason I want to talk about this is because I have experienced it in
the past and have a sense that others may also struggle with it.

To be clear and unequivocal: *I am not a professional therapist and this
is not medical advice*.  I am just a lay person who is about to say lay
person things.

Recall that this is a live stream.  It is being recorded and will be
available for future review.  The show notes are on my website:
https://protesilaos.com/codelog/2021-10-29-live-stream-impostor-syndrome-emacs.

As always, I am taking questions from the live chat and will reply to
them once I conclude today's presentation.  The questions can be about
the current topic or anything else related to what I post on my website:
https://protesilaos.com.

* What does it mean to feel like a fraud?

This is about your perception.  How you think your disposition and your
contributions are interpreted by others.  You have this sense of
self-doubt that everything you do is scrutinised by those around you.
You get the idea that they are looking carefully at every single motion
and every single word of yours in search for something erroneous.  You
dread that because you believe that if you make a mistake it will expose
your little secret: the fact that you are a fraud.  And if that happens,
you fear your whole life will collapse.

Feeling like an impostor is all about what goes on in your mind.  People
don't really tell you that you are a fraud.  And you have never actually
confirmed that your peers are putting everything you do under the
microscope.  There might have been certain cases that made you think
that you may be a fraud, but those have been the exception to the norm.
Or you may have been the victim of abuse, which is no longer about
thikning of yourself as a fraud, but suffering from trauma, which is
different.  If this is just about believing that you are incompetent, it
may be that your mind is making a tiger out of a cat, a major problem
out of a minor one.

The triggers for those sentiments are not purely negative.  There is a
constructive aspect to them.  You are introspective, which is key to
identifying the areas where you can further improve yourself.  You are
self-conscious, which is of paramount importance in understanding
yourself in relation to others and, thus, in recognising the others.
And you are questioning yourself, which shows the capacity to avoid
becoming dogmatic about that which you cherish the most: your selfhood.

What is destructive, however, what can cause you harm and hamper your
contributions to the world is how far you take your introspection, your
self-consciousness, your self-doubt.  There has to be a balance, a
virtuous midpoint, otherwise you are approaching an extreme state of
affairs that is suboptimal.

As with everything that is not binary in nature, the difference between
poison and medicine is one of degree.  The right amount is benign.  An
excess supply, or a shortage, is detrimental to your health.  Think
about food: no food leads to starvation, too much food can cause death,
while the right amount of food keeps you going.

The same is true for what happens in our mind.  The total absence of
introspection, self-consciousness, self-doubt turns you into an
arrogant, foolish, sociopath.  But too much introspection makes you lose
touch with the world around you.  Too much self-consciousness renders
you self-centred and boosts your confidence about knowing yourself to a
fault.  While too much self-doubt forces you into submission, as you can
no longer make basic, practical choices that entail a degree of
uncertainty.

* Hubris: from perfectionism to defeatism

Here I want to introduce a term you either are not familiar with or may
have heard before but did not pay too much attention to.  The word is
"hubris", which comes from ancient Greek.  Hubris describes the human
condition that has gone past its limits; a condition that has drifted
away from the virtuous midpoint into an extreme state of affairs.

In mythology and ancient tragedy, hubris meant that the gods would
punish the human transgressor, for their excessive cockiness, their
extremism.  But we do not need the theological underpinnings of Greek
polytheism to appreciate the value of having a balanced approach to what
we do.  We do not have to subscribe to a specific school of thought in
order to recognise facts of life, such as the difference in degree
between poison and medicine.

For those who are struggling with the impostor syndrome, hubris
describes the extreme predicament they find themselves in.  And that
condition may be because of another quality that people have:
perfectionism or, else, conscientiousness.

To be a perfectionist, or to be conscientious, is to really care about
what you do to the point where you want to achieve the best results.
Again, this is a good thing to have, especially when considered together
with what we have already covered about being introspective,
self-conscious, and self-critical (self-doubt).  Though, as we said
before, when you take your perfectionism or conscientiousness to the
extreme, you start getting adverse results.  You commit hubris.

One such adverse result is defeatism and its concomitant sense of
nihilist self-deprecation.  This is how it goes: you set yourself up to
deliver on an ambitious project.  You put in every ounce of effort that
you can, expecting it to be a runaway success.  But as the project
develops, you realise that your work is not perfect.  So you keep
postponing the deadline you had set for yourself and eventually get
trapped in a cycle of postponements and reviews, where you always
dismiss what you have achieved as simply not being up to the standard
you had envisioned.  Because you had those lofty ambitions, those
unrealisable expectations, you conclude that what you do is in vein.

Instead of recognising your hubris, your excessive perfectionism, you
rationalise your condition as not being fit for the task.  So you tell
yourself that you will always fail no matter how hard you try.  That is
your defeatism being rationalised as your actuality.  And then you take
it a step further and tell yourself how everything you do is totally
useless.  That is your defeatism transmogrifying into nihilist
self-deprecation.  This is all hubris; hubris writ large.  Which calls
for a return to a more balanced approach to life.

* Challenge yourself: what's wrong with being a fraud?

The impostor syndrome can really harm you.  It can prove detrimental to
your productivity and it can become deleterious for your sanity.  So it
is not to be taken lightly.  There are, however, some techniques we may
employ to change the course of things so that we move away from the
extremes and back to a state of mind where we can find the virtuous
midpoint.

One such technique is to turn the accusation of you being a fraud on its
head.  Instead of apologising to yourself for being an impostor, take a
deep breath, drink some water, and turn that nihilism of yours
upside-down.  Ask yourself what will happen to the world if it actually
believes that I am a charlatan?  Let's say that you are writing some
Emacs Lisp code, or you are doing a presentation in a live stream.  Take
me, what will happen to me right now if someone watching this thinks
that I am not a philosopher or that I am not this or that?  Will the
thoughts of that person stop me from getting enjoyment out of what I do?
Will my body, my mind, my entire being suddenly find no amusement, no
food for the soul, so to speak, in whatever it is I am doing?

So calm down and ask yourself what can go wrong in the world if you
indeed are a fraud?  Let's say that I discover this right now: I am not
who I thought I was.  I truly am a fraud!  Did you watching this lose
something following this revelation?  Perhaps you lost your time, but
otherwise it is inconsequential.  Was I gaining something from you
before that realisation which will now be lost simply because something
flipped in my mind and I am now supposedly a fraud?  No.  The only thing
that has changed is a thought in my mind.  The world, however, does not
revolve around that thought.

Now you may be thinking about cases where something hinges on your
performance.  Let's say that you are a doctor and are saving lives out
there.  What happens if you think you are a fraud?  We are all doomed
because however bad you think you are, those of us who are not doctors
are definitely worse at what you are doing.  And the same principle for
every position where others depend on you.  For you to be in that
position, it clearly means that you are not as bad as you think you are.

And then we have activities that are of a more modest nature compared to
saving lives.  For example, you are writing Emacs Lisp code and you are
packaging it so that other people may use it as well.  Again, what can
possibly go wrong if someone, somewhere gets this idea that you are a
fraud.  So what?  Nothing happens.  But we will revisit this point a bit
later.

Use the nihilism that was contributing to your downfall against your
defeatism.  Use it in a constructive way to show the absurdity of
getting bogged down by extreme self-doubt; the absurdity of questioning
yourself to death, so to speak.

* Let the ideal be the guide of the good, not its enemy

Another technique that we can employ is to reconsider the relationship
between the ideal and the actual.  We said that the impostor syndrome
can be an inwardly corrupt perfectionism or a kind of conscientiousness
gone wrong.  And the reason behind that may be how we set ourselves up
for failure by misunderstanding what the ideal actually represents.

What we want is for the ideal to be our guide in life.  We wish to
approximate it and emulate it as much as possible, so that what we do
gets better and better.  What we should not do, though, is compare the
actual to the ideal only so that we may discard what we have.  Because
if we keep doing that, we will simply be left with nothing.  The ideal
is unattainable because it is a mental construct, an absolute that is
not instantiated in some particular case.  We can never attain the
absolute.  We can only ever do something that is within our means or,
generally, framed by the factors that govern the prevailing conditions
in our life.

Let's think about this situation by means of a thought experiment.  The
point is to not be so abstract all the time.  Suppose that there exist
two versions of Protesilaos in the world.  One is my current self right
here, and the other is a 20-year-old version of me.  Let's call the
latter "young Prot" and I am, in this case, "old Prot" (hey, I'm 33!).
So young Prot has been following old Prot's publications.  And young
Prot has all those ideas that he wants to write about and put them on a
personal website.  Young Prot wants to become old Prot and sets out to
produce those publications that will go into his new website.  But young
Prot is beset on all sides by this persistent doubt that he is not good
enough.  Imagine that we can read his mind.  It goes like this:

#+begin_quote
I want to set up a website and write about all those topics that
interest me.  This Protesilaos fellow is inspiring me to do so.  Maybe I
should even send him my works.  But who am I trying to deceive?  I am a
nobody with nothing to show for.  Whereas look at him: he has written
about all those subjects... plus, he has this luscious beard! [joke!]  I
better sit here and accept that I am incompetent.
#+end_quote

What do you think will happen to young Prot is he maintains that
attitude?  Will he ever grow up to become old Prot?  No, because he is
setting himself up for failure.  He is comparing his current state to a
desired state that he has misunderstood and he is misusing that ideal to
belittle himself.  What young Prot needs to do is simply give it a try
and play to the beat of his own being; follow his heart, as they say.
Ignore the comparisons.  Blot out everything that prevents the actual
from becoming good and the good from becoming better.  The ideal must be
our guide, the lodestar we look up to find our way in the wilderness.
It is not our enemy.

* Learn to accept counterpoints gracefully

The other technique that can help is to become more dialectical.  Don't
cling on to your position and try to win the argument.  I have written
about this issue at length, though here I want to put it in concrete
terms by using an example with Emacs. I will show some code, but even if
you don't understand it, please bear with me as the point is general.

[ The Dialectician's Ethos:
  https://protesilaos.com/books/2020-09-30-ethos-dialectic/ ]

A couple of days ago I was working on refining a user option in my
=modus-themes=.  What had to be done, was to compare the elements of two
lists in order to find the first match between them.  I did not know how
to do it in a clean way, so I wrote some ugly code which, nonetheless,
did return the values I was looking for.  The function was this:

#+begin_src emacs-lisp
(defun modus-themes--heading-weight (list)
  (let (weight)
    (setq weight
          (mapcar (lambda (elt)
                    (member elt modus-themes--heading-weights))
                  list))
    (setq weight (delq nil weight))
    (setq weight (caar weight))))
#+end_src

You would pass to it a list of symbols and it would compare it to
another list: the =modus-themes--heading-weights=.  So I committed that.
The person with whom we were discussing this new addition, Christian
Tietze, told me about a more efficient way to accomplish the same task
by simply using the =cl-intersection= function which compares two lists
directly.  So I went with Christian's suggestion.  Then Daniel Mendler
pointed out that this use of =cl-intersection= required its library at
runtime, so we could opt for another approach that would have no such
dependency.  The short version of the story is that I was wrong and
those folks showed me how to do it right.

My attitude was always cooperative and open-minded.  When someone
demonstrates that I am wrong, I am happy to concede the point and I am
eager to follow their thesis.  And that is because I believe that when
someone shows you the error of your ways, they are actually doing you a
service.  They are helping you free yourself from that falsehood, that
incorrect belief, that bad technique, etc.

If I had felt attacked by Christian and Daniel, if I was insecure by
picturing myself as a fraud, we wouldn't have the better code, plus I
would be feeling inadequate and a complete idiot.  Maybe I would want to
hide somewhere, instead of talking about it here.  It would be horrible.

* People don't judge you for trivialities

The truth of the matter is that we sometimes worry too much about what
others may think.  Our mind is magnifying the problem by weaving all
those imaginary scenaria together in one grand narrative that ultimately
functions against our sanity.

This is not to downplay the significance of the problem, nor to suggest
some simplistic and generic cliché of "get up and do it".  It does not
work that way.  What I am saying here is that everything can benefit
from a more refined technique.  Our thinking processes are no different.
If we apply the right method and are patient about it, we stand a better
chance of disentangling our thoughts, of putting them in order, and of
not falling into traps that we have set up for ourselves.

You may be thinking at this point a bit like young Prot in my thought
experiment earlier.  "Oh, but I am not strong enough".  My argument is
that you can improve yourself by changing your method.  It all is a
matter of attitude, of how you approach things.  As for not being
"strong enough", you may have heard about the ancient mathematician
called Archimedes.  He wanted to explain to his peers how leverage
works.  So he claimed that there is a certain point to which we can
apply sufficient pressure in order to move large objects.  And he
exaggerated by claiming that he can move the Earth, if the right point
exists, upon which to apply the appropriate leverage.  If we want to
draw the general insight from this claim and use it for our purposes
here, we can say that strength is a function of technique.  Archimedes
could move massive objects with the correct method, not with his sheer
power.  The same is true for us: we can do seemingly impossible things
by changing our disposition.

Finally, I wish to conclude this presentation with a few words about my
participation in the Emacs community.  As you may know, I have been
using Emacs since the summer of 2019.  I am not a programmer and had no
knowledge of Lisp when I started with Emacs.  But that did not stop me
from trying to get better.  I took baby steps and started learning my
way around.  Then I began writing my super simple Elisp tweaks.  Over
time I got better at it and am always looking forward to learn something
new.

During all this time, the Emacs community has been welcoming.  Was I
always good with Elisp?  No, absolutely not.  Was I always insightful
about how to use Emacs?  Again, the answer is firmly negative.  So a
defeatist back in 2019, let's call him "young Prot" once again, would
have stayed away from this milieu without even trying.  Because young
Prot would have imagined how hostile and elitist the Emacs community is,
with their niche program and all its weird methods.

But I tried.  And I learnt that people don't judge you for trivialities.
</code></pre>

<hr />

<p>The video thumbnail is a tweak of the Levitating, Meditating,
Flute-playing Gnu under the terms of the GNU General Public License:
<a href="https://www.gnu.org/graphics/meditate.html">https://www.gnu.org/graphics/meditate.html</a>.</p>
        
      


guid: https://protesilaos.com/codelog/2021-11-01-introducing-lin/
title: Introducing lin.el for Emacs
url: https://protesilaos.com/codelog/2021-11-01-introducing-lin/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>I published a new package which I intend to submit to GNU ELPA sometime
before the 10th of November (together with <code>mct.el</code>—see my <a href="https://protesilaos.com/emacs/">Emacs
packages</a>).</p>

<p><em>LIN Is Noticeable</em> (aka LIN, lin, <code>lin.el</code>, etc.) remaps <code>hl-line</code> face
buffer-locally to a style that is optimal for major modes where line
selection is the primary mode of interaction.</p>

<p>Quote from <a href="https://protesilaos.com/emacs/lin">the manual</a> on the
rationale for this package:</p>

<blockquote>
  <p>The idea is that <code>hl-line</code> cannot work equally well for contexts with
competing priorities: (i) line selection, or (ii) simple line
highlight.  In the former case, the current line needs to be made
prominent because it carries a specific meaning of some significance
in the given context.  Whereas in the latter case, the primary mode of
interaction does not revolve around the line highlight itself: it may
be because the focus is on editing text or reading through the
buffer’s contents, so the current line highlight is more of a gentle
reminder of the point’s location on the vertical axis.</p>
</blockquote>

<p>LIN provides the end-user with the flexibility of optimising for the
specifics of each type of interaction.  The user must set up the major
modes where that is to take effect.</p>

<p>By means of illustration, the default style of the <code>hl-line</code> face in <a href="https://protesilaos.com/emacs/modus-themes">my
Modus themes</a> (built into
Emacs 28 or higher) is a subtle gray background.  While there is the
<code>modus-themes-hl-line</code> option to make it more intense, add an accented
background, and the like, the fact remains that you still cannot apply a
case-by-case approach for different types of line highlighting.</p>

<p>Whereas with LIN, we can keep one style for regular text editing and use
<code>lin-mode</code> in contexts where <code>hl-line-mode</code> is meant to be all about
line selection, such as in Elfeed and Notmuch buffers.</p>

<p>Here is a sample with the <code>modus-operandi</code> theme, with the top buffer
showing the regular <code>hl-line</code> face and the bottom buffer displaying a
Notmuch listing with <code>lin-mode</code> enabled (click to enlarge):</p>

<p><a href="https://protesilaos.com/assets/images/attachments/2021-11-01-lin-modus-operandi-demo.png"><img alt="Modus Operandi with LIN active" src="https://protesilaos.com/assets/images/attachments/2021-11-01-lin-modus-operandi-demo.png" /></a></p>

<p>LIN’s source code is available on Gitlab:
<a href="https://gitlab.com/protesilaos/lin">https://gitlab.com/protesilaos/lin</a>.  There also exists a Github
mirror: <a href="https://github.com/protesilaos/lin">https://github.com/protesilaos/lin</a>.</p>
        
      


guid: https://protesilaos.com/codelog/2021-11-12-mct-gnu-elpa/
title: Emacs: mct is on GNU ELPA
url: https://protesilaos.com/codelog/2021-11-12-mct-gnu-elpa/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>My Minibuffer and Completions in Tandem (<code>mct</code>) package is now available
on GNU ELPA for Emacs version 28 or higher.  You can install it with
these commands:</p>

<pre><code>M-x package-refresh-contents
M-x package-install RET mct
</code></pre>

<p>As I have <a href="https://protesilaos.com/codelog/2021-10-22-emacs-mct-demo/">demonstrated in a recent
video</a>, MCT
is a very thin layer of interactivity on top of the default minibuffer
and the standard <code>*Completions*</code> buffer.  It basically adds commands to
cycle between the minibuffer and the Completions, making the two work as
parts of a unified space.</p>

<p>The package comes with a fully fledged Info manual.  It provides a
detailed overview of the functionality on offer, the customisation
options, a sample configuration which also covers other useful built-in
utilities (like <code>file-name-shadow-mode</code>), and more.  Read the manual
after you have installed the package by evaluating the following:</p>

<pre><code>(info "(mct) Top")
</code></pre>

<p>Note that I just pushed a new tagged release: version <code>0.2.0</code>.  It
improves a few things in the code base and expands the manual.
Depending on when you install the package, expect an update to be
available soon.</p>
        
      


guid: https://protesilaos.com/codelog/2021-11-18-modus-themes-1-7-0/
title: Modus themes 1.7.0 for GNU Emacs
url: https://protesilaos.com/codelog/2021-11-18-modus-themes-1-7-0/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>I just released version <code>1.7.0</code> of <a href="https://protesilaos.com/emacs/modus-themes">the Modus
themes</a>.  The release notes
are reproduced below.  For any questions pertaining to this publication,
feel welcome to <a href="https://protesilaos.com/contact/">contact me</a>.</p>

<p>I will now prepare the patch for the <code>master</code> branch on emacs.git
(currently this corresponds to Emacs version 29).  The <code>modus-themes</code>
package in GNU ELPA fetches its contents from emacs.git, so expect an
update to trickle down shortly after my patch is merged.</p>

<hr />

<h2>Modus themes version 1.7.0</h2>

<p>By Protesilaos Stavrou <a href="mailto:info@protesilaos.com">info@protesilaos.com</a> on 2021-11-18</p>

<p>The present entry records the changes made to the project since the
release of version 1.6.0 on 2021-09-29.  There have been more than 60
commits since then.</p>

<p>Every modification pertaining to colour combinations referenced herein
is implemented in accordance with the primary accessibility objective of
the themes for a minimum contrast ratio of 7:1 between background and
foreground values in their given combination (the WCAG AAA standard).
Edits also account for colour-coding that is optimised for the needs of
users with red-green colour deficiency (deuteranopia).</p>

<p>To access the URL of the manual visit this web page:
<a href="https://protesilaos.com/emacs/modus-themes">https://protesilaos.com/emacs/modus-themes</a>.  Or read it from Emacs by
evaluating this form:</p>

<pre><code>(info "(modus-themes) Top")
</code></pre>

<p>The themes are built into Emacs version 28 (next stable release), and
are available on GNU ELPA as well as other archives.  This release is
the first one that is included with Emacs 29, or else the <code>master</code>
branch in emacs.git.</p>

<h3>Customisation options</h3>

<ul>
  <li>
    <p>The <code>modus-themes-no-mixed-fonts</code> has been deprecated and replaced by
the <code>modus-themes-mixed-fonts</code>.  This is a breaking change for users
who want to use “mixed fonts”: they must set the new variable to
non-nil.</p>

    <p>As the name implies, the new variable changes the meaning of the
feature to make it opt-in by default.  This is consistent with the
principle of least surprise, as users may not know why some fonts look
different than others in certain cases.</p>

    <p>Thanks to Christian Tietze for clarifying the doc string of this new
user option in merge request 51:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/51">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/51</a>.</p>

    <p>For context, “mixed fonts” refers to a design where spacing-sensitive
constructs, such as code blocks and Org tables, inherit from the
<code>fixed-pitch</code> face to remain monospaced (and properly aligned) at all
times.  Depending on the user’s configurations, the <code>fixed-pitch</code> face
may not use the typeface that the user expects.</p>

    <p>The manual provides information on how to set the desired fonts by
editing the <code>default</code>, <code>fixed-pitch</code>, and <code>variable-pitch</code> faces.</p>
  </li>
  <li>
    <p>The new <code>modus-themes-mode-line-padding</code> can be used to control the
apparent padding of the mode line when the user option
<code>modus-themes-mode-line</code> includes the <code>padded</code> property.  The padding
must be a positive integer (otherwise the code would be needlessly
complex to guard against values that make the mode line look awkward,
like anything lower than -3 or maybe even -2).</p>

    <p>Thanks to Guilherme Semente and Manuel Uberti for the feedback in
issue 245: <a href="https://gitlab.com/protesilaos/modus-themes/-/issues/245">https://gitlab.com/protesilaos/modus-themes/-/issues/245</a>.</p>

    <p>Note that the out-of-the-box style of the themes has a padding of 1
(technically a <code>:line-width</code> of 1 for the <code>:box</code> attribute), whereas
the default style of Emacs has it at -1.  This is a design choice to
avoid an overlap between the outer boundaries of a font’s glyphs and
the borders of the mode line, when using certain common typefaces at
various point sizes.  Such an overlap can hinder readability.</p>

    <p>The manual contains a new Do-It-Yourself (DIY) section with detailed
code samples on how to apply a negative value.</p>
  </li>
  <li>
    <p>The new <code>modus-themes-intense-markup</code> option can be set to non-nil to
make constructs such as inline code and verbatim text more colourful.
This has a general utility, though its consideration was prompted by a
phenomenon reported by Stefan Kangas in issue 238 where the overlay of
the <code>hl-line-face</code> overrides the subtle background these constructs
use and can thus make them virtually indistinguishable from ordinary
text: <a href="https://gitlab.com/protesilaos/modus-themes/-/issues/238">https://gitlab.com/protesilaos/modus-themes/-/issues/238</a>.</p>

    <p>Such is the standard behaviour of <code>hl-line-mode</code> and there is nothing
a theme can (or rather “should”) do about it.  Thanks to Stefan Kangas
for the feedback.</p>
  </li>
  <li>
    <p>The <code>modus-themes-headings</code> option can now accept and apply an exact
font weight such as <code>semibold</code> or <code>light</code>.  (The list of available
weights is the value of the <code>modus-themes--heading-weights</code> internal
variable.)  This supersedes the now-deprecated <code>no-bold</code> property:
<code>no-bold</code> is henceforth understood as the presence of a <code>regular</code>
weight.</p>

    <p>Recall that this user option is an alist and can be used to target
heading levels individually, which further reinforces the utility of
this new property.</p>

    <p>Thanks to Christian Tietze for suggesting this idea in issue 248:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/248">https://gitlab.com/protesilaos/modus-themes/-/issues/248</a>.  And
thanks to Daniel Mendler for refining its implementation in commit
54bfd62, which was sent as a patch file (yes, we accept those and I
actually prefer them over a web app’s UI).</p>
  </li>
  <li>
    <p>The <code>modus-themes-org-agenda</code> has seen improvements to its <code>event</code> key
(this is an alist that has multiple keys).  It now accepts a <code>varied</code>
property which differentiates between (i) plain timestamp entries and
(ii) entries that are generated from either the diary or a symbolic
expression.  The <code>varied</code> property combines with the other available
properties to particularise their effects.  Consult the doc string or
the manual for the technicalities.</p>

    <p>Thanks to Gustavo Barros for the detailed commentary in issue 241:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/241">https://gitlab.com/protesilaos/modus-themes/-/issues/241</a>.</p>
  </li>
  <li>
    <p>The <code>modus-themes-lang-checkers</code> now accepts a <code>faint</code> property.  This
has the effect of toning down the colours in use.  By default, the
only colour is that of the underline, though more can be added by
combining the properties accepted by this user option.  Consult its
doc string or the manual for further details.</p>

    <p>Thanks to Morgan Smith for suggesting the idea in issue 239:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/239">https://gitlab.com/protesilaos/modus-themes/-/issues/239</a>.</p>
  </li>
</ul>

<h3>Add support for new packages or face groups</h3>

<ul>
  <li>
    <p><code>company-tooltip-deprecated</code> face.  Thanks to Roman Rudakov for the
 feedback in issue 247: <a href="https://gitlab.com/protesilaos/modus-themes/-/issues/247">https://gitlab.com/protesilaos/modus-themes/-/issues/247</a>.</p>
  </li>
  <li>
    <p><code>corfu-default</code> face.  Thanks to Daniel Mendler (Corfu’s developer)
for the feedback in issue 254:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/254">https://gitlab.com/protesilaos/modus-themes/-/issues/254</a>.</p>
  </li>
  <li>
    <p><code>image-dired</code> package (Emacs 29).  Thanks to Stefan Kangas for making it
happen in emacs.git and for the feedback in issue 250:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/250">https://gitlab.com/protesilaos/modus-themes/-/issues/250</a>.</p>
  </li>
  <li>
    <p><code>nano-modeline</code> package.</p>
  </li>
  <li>
    <p><code>vertico-quick</code> package.  Thanks to Nicolas De Jaeghere for the
contribution in merge request 48:
<a href="https://gitlab.com/protesilaos/modus-themes/-/merge_requests/51">https://gitlab.com/protesilaos/modus-themes/-/merge_requests/51</a>.</p>
  </li>
</ul>

<h3>Changes to existing faces or face groups</h3>

<ul>
  <li>
    <p>Added support for the new Org agenda faces that improve the
contextuality of various views.  We implemented those upstream for Org
version 9.5 in close cooperation with Gustavo Barros.  Thanks to
Gustavo for the detailed feedback in issue 241:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/241">https://gitlab.com/protesilaos/modus-themes/-/issues/241</a>.  The
thread about the patch upstream:
<a href="https://list.orgmode.org/87lf7q7gpq.fsf@protesilaos.com/">https://list.orgmode.org/87lf7q7gpq.fsf@protesilaos.com/</a></p>
  </li>
  <li>
    <p>Refined Org agenda date faces in the interest of consistency and in
accordance with the aforementioned change.  Thanks again to Gustavo
Barros for the discussion in issue 241.</p>
  </li>
  <li>
    <p>Applied the <code>shadow</code> face more consistently across all contexts where
only a subtle foreground value is expected.  This design choice makes
it possible for users to manually edit the foreground colour of
<code>shadow</code> to something even more subtle than the <code>fg-alt</code> palette
variable we use, which maps to a gray colour (e.g. they could use
“gray50”).</p>
  </li>
  <li>
    <p>Implemented a subtle background colour to the <code>widget-inactive</code> face.
This makes it easier to discern inactive buttons, checkboxes, and the
like, in contexts such as the Customize User Interface.  Thanks to
Stefan Kangas for the feedback in issue 242:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/242">https://gitlab.com/protesilaos/modus-themes/-/issues/242</a>.</p>
  </li>
  <li>
    <p>Tweaked <code>file-name-shadow</code> to also use italics (inherit from the
<code>italic</code> face) in order to be more easy to distinguish it from
ordinary text in the minibuffer.</p>

    <p>Recall that the manual documents the meaning of inheriting from the
<code>bold</code> and <code>italic</code> faces instead of hardcoding a bold weight and an
italic slant, respectively.  In short: users can change the weight to
what they want (e.g. semibold) and/or use distinct font families.</p>
  </li>
  <li>
    <p>Amplified the style of Version Control (VC) warnings and errors to let
them draw more attention to themselves (because these indicators need
to be acted upon).</p>
  </li>
  <li>
    <p>Recoloured the <code>custom-group-tag</code> face to make it fit better in its
context and be consistent with the rest of the themes’ established
patterns.</p>
  </li>
  <li>
    <p>Made marks for selection in Dired, Ibuffer, and related, conform with
the <code>modus-themes-success-deuteranopia</code> option.  This means that they
use blue colours when the option is non-nil, instead of their default
shades of green.</p>
  </li>
  <li>
    <p>Adjusted the box width of key bindings for Emacs 28 or higher.  They
should no longer cause any alignment issues.  This style is now used
throughout the themes, including in transient views (e.g. Magit) which
were the exception before.  Thanks to Manuel Uberti and Kevin Fleming
for the feedback in issue 232:
<a href="https://gitlab.com/protesilaos/modus-themes/-/issues/232">https://gitlab.com/protesilaos/modus-themes/-/issues/232</a>.</p>
  </li>
</ul>

<h3>Miscellaneous</h3>

<ul>
  <li>
    <p>Wrote a brief description of every user option in the manual.  Also
covered its type, as in boolean, alist, et cetera.</p>
  </li>
  <li>
    <p>Corrected the mode line border width for one combination of properties
in the <code>modus-themes-mode-line</code> option.  This should now have the same
height as all others:</p>

    <pre><code>(setq modus-themes-mode-line '(accented borderless))
</code></pre>
  </li>
  <li>
    <p>Ensured that mode line attributes would not be set to nil, but kept at
an <code>unspecified</code> value instead, where relevant.  This avoids problems
with [faulty] code that unconditionally depends on something that does
not exist, as in the following while <code>:box</code> is nil:</p>

    <pre><code>(face-attribute 'mode-line :box)
</code></pre>
  </li>
  <li>
    <p>Expanded, reworded, or otherwise improved the manual, based on the
aforementioned.</p>
  </li>
</ul>

<p>Thanks once again to everyone involved!</p>
        
      


guid: https://protesilaos.com/codelog/2021-11-19-mct-0-3-0/
title: Emacs: mct version 0.3.0
url: https://protesilaos.com/codelog/2021-11-19-mct-0-3-0/
feedurl: https://protesilaos.com/codelog.xml
content_mime_type: text/html
content:
        
         
         <p>Below are the release notes.  If you have no idea what <code>mct</code> is, it is a
very thin layer of interactivity on top of the default completion user
interface.  Watch the <a href="https://protesilaos.com/codelog/2021-10-22-emacs-mct-demo/">video demo of the initial
release</a>.</p>

<h2>Version 0.3.0 on 2021-11-19</h2>

<p>This entry describes the changes to Minibuffer and Completions in Tandem
(mct) since the release of <a href="#h:4fab7648-d672-4af3-90b5-74242292f633">version 0.2.0 on
2021-11-12</a>.  There have been
more than 40 commits since then.  For further details, please consult
the manual online: <a href="https://protesilaos.com/emacs/mct">https://protesilaos.com/emacs/mct</a>.  Or evaluate the
following expression if you have the <code>mct</code> package installed:</p>

<pre><code>(info "(mct) Top")
</code></pre>

<p>As this release is a continuation of version <code>0.2.0</code>, the changelog for
that version is also provided below (I released version <code>0.2.0</code> earlier
than anticipated so that users could get a stable package on GNU ELPA).
Here is a brief description of what has been achieved in <code>0.3.0</code>.</p>

<h3>MCT on Emacs 27</h3>

<ul>
  <li>
    <p>MCT now works on Emacs 27.  This was not possible in the past
because <code>mct-mode</code> was originally designed to operate with the
<code>one-column</code> style of the <code>completions-format</code>, which was added in
Emacs 28.  To make everything behave intuitively, several parts of
the code had to be abstracted and refactored (the changelog of
version <code>0.2.0</code> (further below) covers everything not mentioned
here).</p>
  </li>
  <li>The scenaria where the functionality was thoroughly tested involve
all the available formats and cover commands that fulfil the
following criteria:
    <ul>
      <li>Plain completion candidates, as in <code>switch-to-buffer</code>.</li>
      <li>Dynamic completion like that of <code>find-file</code>.</li>
      <li>Annotated candidates, as seen in <code>describe-symbol</code> for versions of
Emacs 28 or higher.</li>
      <li>Commands where candidates are grouped by heading, as done by
various extensions of the <code>consult</code> package, such as
<code>consult-imenu</code>.</li>
      <li>Commands where no completion category is associated with them.</li>
    </ul>
  </li>
  <li>
    <p>The only change which is visible to the user is the implementation
of a bespoke overlay to highlight the current candidate.  In
previous versions, this was provided by the built-in <code>hl-line-mode</code>,
though that does not work as intended with either the <code>vertical</code> or
<code>horizontal</code> layouts of the <code>completions-format</code> as it covers the whole
line instead of the candidate at point.</p>
  </li>
  <li>
    <p>The highlight extends to the edge of the window when the <code>one-column</code>
format is used for the <code>completions-format</code> (Emacs 28 or higher).  In
the other views it stretches from the beginning to the end of the
completion candidate.</p>
  </li>
  <li>Thanks to Case Duckworth for the initial request and subsequent
testing in issue 1: <a href="https://gitlab.com/protesilaos/mct/-/issues/1">https://gitlab.com/protesilaos/mct/-/issues/1</a>.</li>
</ul>

<h3>Miscellaneous changes</h3>

<ul>
  <li>There is a new command that is active in the minibuffer which allows
to complete and exit immediately: <code>C-RET</code> (<code>mct-complete-and-exit</code>).
This economises on key presses when all the user wants is to select
the top-most candidate (or last highlighted one) without first
switching to the Completions’ buffer and then confirming it from
there (<code>RET</code> in the <code>*Completions*</code> buffer completes and exits
directly).
    <ul>
      <li>Thanks to José Antonio Ortega Ruiz for the contribution in merge
requests 3 and 4 as discussed in issue 8:
        <ul>
          <li><a href="https://gitlab.com/protesilaos/mct/-/merge_requests/3">https://gitlab.com/protesilaos/mct/-/merge_requests/3</a></li>
          <li><a href="https://gitlab.com/protesilaos/mct/-/merge_requests/4">https://gitlab.com/protesilaos/mct/-/merge_requests/4</a></li>
          <li><a href="https://gitlab.com/protesilaos/mct/-/issues/8">https://gitlab.com/protesilaos/mct/-/issues/8</a></li>
        </ul>
      </li>
      <li>Note that “exit” in this context denotes the process of terminating
the session while accepting the current input.  The term used to
quit without accepting the input is “abort”.</li>
    </ul>
  </li>
  <li>
    <p>The <code>mct-mode</code> does not get activated in contexts where (i) the
minibuffer is involved but (ii) no completion takes place.  For
example, the <code>eval-expression</code> command (bound to <code>M-:</code> by default).</p>
  </li>
  <li>
    <p><code>mct-mode</code> no longer remaps the faces of the <code>display-line-numbers-mode</code>.
This was a useful experiment from the early days of the code base,
although it is bad practice for a user-facing package.</p>
  </li>
  <li>
    <p>Various tweaks and refinements to the manual.</p>
  </li>
  <li>Retroactive introduction of a CHANGELOG.org file and coverage of all
noteworthy changes hitherto.</li>
</ul>

<p><a id="h:4fab7648-d672-4af3-90b5-74242292f633"></a></p>

<h2>0.2.0 on 2021-11-12</h2>

<p>This entry describes the changes to Minibuffer and Completions in Tandem
(mct) since the release of version 0.1.0 on 2021-10-22.  There have been
70 commits since then.  For further details, please consult the manual
online: <a href="https://protesilaos.com/emacs/mct">https://protesilaos.com/emacs/mct</a>.  Or evaluate the following
expression if you have the <code>mct</code> package installed:</p>

<pre><code>(info "(mct) Top")
</code></pre>

<h3>Packaged version of MCT</h3>

<p><code>mct</code> is now available on the official GNU ELPA archive for users of Emacs
version 28 or higher.  One can install the package without any further
configuration.  The following commands shall suffice:</p>

<pre><code>M-x package-refresh-contents
M-x package-install RET mct
</code></pre>

<h3>Changes to the format and placement of the Completions</h3>

<ul>
  <li>
    <p>The user option <code>mct-live-completion</code> controls how and when the
Completions’ buffer should be placed in a window and be updated live
in response to user feedback.  Copying from the doc string:</p>

    <blockquote>
      <p>mct-live-completion is a variable defined in ‘mct.el’.</p>

      <p>Its value is t</p>

      <p>Control auto-display and live-update of Completions’ buffer.</p>

      <p>When nil, the user has to manually request completions, using the
regular activating commands.  The Completions’ buffer is never updated
live to match user input.  Updating has to be handled manually.  This
is like the out-of-the-box minibuffer completion experience.</p>

      <p>When set to the value <code>visible</code>, the Completions’ buffer is live
updated only if it is visible.  The actual display of the completions
is still handled manually.  For this reason, the <code>visible</code> style does
not read the <code>mct-minimum-input</code>, meaning that it will always try to
live update the visible completions, regardless of input length.</p>

      <p>When non-nil (the default), the Completions’ buffer is automatically
displayed once the <code>mct-minimum-input</code> is met and is hidden if the
input drops below that threshold.  While visible, the buffer is
updated live to match the user input.</p>

      <p>Note that every function in the <code>mct-completion-passlist</code> ignores this
option altogether.  This means that every such command will always
show the Completions’ buffer automatically and will always update its
contents live.  Same principle for every function declared in the
<code>mct-completion-blocklist</code>, which will always disable both the
automatic display and live updating of the Completions’ buffer.</p>
    </blockquote>

    <ul>
      <li>Thanks to Jonathan Irving for the feedback in issue 4:
<a href="https://gitlab.com/protesilaos/mct/-/issues/4">https://gitlab.com/protesilaos/mct/-/issues/4</a>.</li>
    </ul>
  </li>
  <li>As with all buffers, the placement of the <code>*Completions*</code> can be
controlled with the <code>display-buffer</code> machinery.  The default is to show
the completions at the bottom of the frame, though users can easily
move it to, say, the left side window.  The doc string of the user
option <code>mct-display-buffer-action</code> explains how to do so.
    <ul>
      <li>
        <p>Thanks to Philip Kaludercic for the initial implementation in commit
<code>436b24e</code> (was sent via email as a patch).</p>
      </li>
      <li>
        <p>Thanks to Kostadin Ninev for reporting a bug where the Completions’
buffer would proliferate during completion:
<a href="https://gitlab.com/protesilaos/mct/-/issues/3">https://gitlab.com/protesilaos/mct/-/issues/3</a>.  It was fixed by
Philip Kaludercic in commit <code>51c1e17</code>.</p>
      </li>
    </ul>
  </li>
  <li>MCT now supports all the available styles of the <code>completions-format</code>,
whereas the original design was only meant to work with the value
<code>one-column</code>, which was introduced in Emacs 28.  The user option is
<code>mct-completions-format</code>.  If that variable is set with <code>setq</code>, the
<code>mct-mode</code> has to be restarted manually for changes to take effect
(setting the variable through <code>customize-set-variable</code> (and related)
handles the mode reloading automatically).
    <ul>
      <li>
        <p>Thanks to Philip Kaludercic for the patch in commit <code>b392b0b</code>.</p>
      </li>
      <li>
        <p>Several changes were then made to ensure that the cyclic motions
that move between the <code>*Completions*</code> and the minibuffer work
intuitively in a grid view.  In short: <code>C-n</code>, <code>C-p</code> or the down/up arrow
keys, perform a vertical motion, while the left/right arrow keys
move laterally.  Prior to those changes, <code>C-n</code> or down arrow as well
as <code>C-p</code> or up arrow, would perform a lateral motion as that is
internally the meaning of the next/previous completion candidate.</p>
      </li>
      <li>
        <p>The command <code>mct-choose-completion-number</code> was updated to throw a user
error when a grid view is active.  That is because it is designed to
jump to a given line number, which only works as intended when there
is only one candidate per line. (Perhaps a future release should
overlay characters over candidates in the grid view to select them
directly.)</p>
      </li>
    </ul>
  </li>
  <li>The <code>mct-mode</code> no longer sets the <code>completions-detailed</code> variable.  That
is a matter of user preference.  It is not integral to the
functionality of MCT.</li>
</ul>

<h3>Group motions</h3>

<ul>
  <li>Emacs 28 provides infrastructure for commands to group candidates
based on their contents.  These groups can have their own heading in
the Completions’ buffer, as well as a separator.  Overall, it makes
things look more organised.  The commands <code>mct-next-completion-group</code>
and <code>mct-previous-completion-group</code> move between those headings.  While
in the <code>*Completions*</code> buffer, they are bound to <code>M-n</code> and <code>M-p</code>,
respectively.  Thanks to James Norman Vladimir Cash for the
contribution in merge request 2:
<a href="https://gitlab.com/protesilaos/mct/-/merge_requests/2">https://gitlab.com/protesilaos/mct/-/merge_requests/2</a>.</li>
</ul>

<h3>Miscellaneous changes</h3>

<ul>
  <li>
    <p>The <code>TAB</code> key in the Completions’ buffer never exits the minibuffer (the
command is <code>mct-choose-completion-no-exit</code>).  Instead, it expands the
current candidate in the minibuffer and switches focus to it.  Before,
this behaviour would only happen in <code>find-file</code> and related prompts, but
consistency/predictability is better.</p>

    <p>[ By contrast, <code>RET</code> (<code>mct-choose-completion-exit</code>) in the Completions
  buffer always exits with the candidate at point. ]</p>

    <p>Note that in this context “exit” means to close the session and accept
the current input.</p>
  </li>
  <li>
    <p>There is a new heuristic to deal with commands that <code>let</code> bind the
<code>crm-separator</code> (e.g. <code>org-set-tags-command</code> sets the separator to <code>:</code>).
This is used to make <code>M-RET</code> (<code>mct-choose-completion-dwim</code>) in the
Completions buffer work in all <code>completing-read-multiple</code> contexts.
Thanks to James Norman Vladimir Cash for contributing the heuristic in
merge request 1:
<a href="https://gitlab.com/protesilaos/mct/-/merge_requests/1">https://gitlab.com/protesilaos/mct/-/merge_requests/1</a>.</p>
  </li>
  <li>
    <p>The aforementioned <code>M-RET</code> command used to have the same effect as <code>RET</code>
when not in a <code>completing-read-multiple</code> prompt (“CRM prompt”).  This
has now been revised to behave like <code>TAB</code> instead (as described further
above), which is consistent with the ordinary behaviour of <code>M-RET</code>
in CRM prompts where it appends the candidate at point to the
minibuffer, without exiting.</p>
  </li>
  <li>
    <p>The check for <code>display-line-numbers-mode</code> tests whether it is bound,
thus avoiding possible errors.  Thanks to Philip Kaludercic for the
patch in commit <code>6bd2457</code>.</p>
  </li>
  <li>
    <p>Made several improvements to doc strings and various snippets of code.</p>
  </li>
</ul>

<h3>Updates to the manual</h3>

<ul>
  <li>All of the aforementioned were documented, where appropriate.</li>
  <li>A Makefile is now on offer, which is used to generate the mct.info and
mct.texi files.  Thanks to Philip Kaludercic for the patch in commit
<code>295bac0</code>.</li>
  <li>A sample setup is available for <code>mct</code> as well as several built-in
options pertaining to the minibuffer.</li>
  <li>There are sections about third-party extensions as well as one that
describes alternatives to MCT.  Thanks to Manuel Uberti for the
feedback in issue 5: <a href="https://gitlab.com/protesilaos/mct/-/issues/5">https://gitlab.com/protesilaos/mct/-/issues/5</a>.</li>
  <li>The “Acknowledgements” section includes the names of people who have
contributed to the project in one way or another (code, ideas, user
feedback, …).</li>
</ul>
        
      


title: The intellectual right’s war on America’s institutions
author: Zack Beauchamp
feedurl: http://www.vox.com/rss/policy-and-politics/index.xml
content_mime_type: text/html
guid:
https://www.vox.com/policy-and-politics/2021/11/19/22787269/conservatives-america-chris-rufo-patrick-deneen

url:
https://www.vox.com/policy-and-politics/2021/11/19/22787269/conservatives-america-chris-rufo-patrick-deneen

content:
  

    <figure>
      <img alt="Protesters hold a Trump flag by the Capitol." src="https://cdn.vox-cdn.com/thumbor/9_4DrRbBhAH5OBpDxpy7wIRraaQ=/659x0:6884x4669/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70165832/1230734387.0.jpg" />
        <figcaption>An image from January 6 outside the Capitol. | Brent Stirton/Getty Images</figcaption>
    </figure>

  <p>“It’s time to clean house in America,” one influential right-wing activist wrote this week. And he’s not alone.</p> <p id="N2tIPx">Chris Rufo is arguably the most important intellectual entrepreneur on the political right today. A senior fellow at the <a href="https://www.manhattan-institute.org/expert/christopher-f-rufo">right-wing Manhattan Institute</a>, he is <a href="https://www.newyorker.com/news/annals-of-inquiry/how-a-conservative-activist-invented-the-conflict-over-critical-race-theory">nearly single-handedly responsible</a> for the rise of critical race theory as a right-wing boogeyman — an issue that came to dominate the national political conversation during <a href="https://www.vox.com/policy-and-politics/2021/11/4/22761168/virginia-governor-glenn-youngkin-critical-race-theory">the Virginia gubernatorial election</a>.</p>
<p id="id__kf1vj861yrb">On Tuesday, Rufo elaborated a bit more on the project he has in mind: “It’s time to clean house in America: remove the attorney general, lay siege to the universities, abolish the teachers’ unions, and overturn the school boards,” <a href="https://twitter.com/realchrisrufo/status/1460711361239928835">he tweeted</a>.</p>
<p id="mGxGbK">Confronted with <a href="https://twitter.com/deonteleologist/status/1460733102699913216">unsavory parallels</a> to militant fascist rhetoric against intellectuals, Rufo clarified that he was not calling for violence. “For the <a href="https://www.washingtonpost.com/news/the-intersect/wp/2017/08/14/the-creator-of-godwins-law-explains-why-some-nazi-comparisons-dont-break-his-famous-internet-rule/">Godwin’s Law</a> aficionados: remove the attorney general through resignation or impeachment, lay siege to the universities through cutting federal subsidies, abolish the teachers’ unions through legislation, and overturn school boards through winning elections,” he <a href="https://twitter.com/realchrisrufo/status/1460800802302218243">tweeted on Tuesday night</a>.</p>
<p id="SvYlXZ">Some of the clarifications are reassuring (there’s nothing wrong with contesting elections). But others, in particular the comments on universities and teachers unions, were disturbing. Rufo is calling for the use of law as a weapon to weaken or even eliminate the social bases of his opponents’ political power. It’s a vision of politics in which power is not shared democratically but wielded against one’s enemies.</p>
<p id="wksc58">He’s been quite explicit about this. During an appearance at the National Conservatism Conference in early November, Rufo <a href="https://unherd.com/thepost/is-christopher-rufo-a-right-wing-leninist/">argued</a> that “reform around the edges is not enough” to protect America from the progressive “revolution.” Instead, conservatives should embrace a “<a href="https://unherd.com/thepost/is-christopher-rufo-a-right-wing-leninist/">defund the left</a>” political strategy in which they “strangle new identity programs in red tape” and “accelerate the student loan Ponzi scheme [and] make universities partially responsible for defaults.”</p>
<p id="n1gHTd">Rufo’s ruthlessness is best understood as the applied version of a political vision that has become widespread in influential right-wing intellectual circles. From demagogues like Tucker Carlson to highbrow thinkers like Notre Dame’s Patrick Deneen, the emerging right-wing line is that America’s core institutions have become captured by the left and must be seized if the country is to be saved. </p>
<p id="WxcbL2">This means going on offense when you have power — not merely to accomplish conservative policy goals but to crush the left and stamp out its cultural viability.</p>
<h3 id="n2hsCf">The “post-liberal” right wants to go on offense</h3>
<p id="7eGcDe">The Postliberal Order is a new Substack publication by four right-wing Christian intellectuals: Deneen, Harvard’s Adrian Vermeule, University of Dallas’s Gladden Pappin, and Catholic University’s Chad Pecknold. Its premise is that “the modern liberal ordering of the world is exhausted” — meaning not just liberalism in the American political sense but the more capacious philosophical one. </p>
<p id="NYBawC">Liberal ideals of individual rights, separation of church and state, and free markets have, in their view, created a society “ever more solitary, ever more detached from ourselves, from our families, from our countries, and our God.”</p>
<p id="DSk6Rc">In <a href="https://postliberalorder.substack.com/p/abandoning-defensive-crouch-conservatism">an essay</a> published Wednesday, Deneen essentially develops an intellectual framework for Rufo-ism — the high-level justification for using the state to crush liberals and their institutions.</p>
<p id="0Gdyri">Deneen believes that conservatism is in a “defensive crouch” — and has been so “since its rise in the 20th century.” This may seem odd to liberals and leftists, who have seen a string of conservative victories in the past several decades: the <a href="https://www.vox.com/2016/6/20/11789988/clintons-welfare-reform">withering of the social safety net</a>, the <a href="https://www.vox.com/policy-and-politics/22307891/democrats-unions-pro-act-policy-feedback">demolition of labor unions</a>, the spread of <a href="https://www.vox.com/2019/12/23/21024312/abortion-laws-2019-ohio-georgia-roe-wade">strict state-level abortion restrictions</a>, and even <a href="https://www.vox.com/policy-and-politics/2021/6/15/22522504/republicans-authoritarianism-trump-competitive">the restructuring of the electoral system in the GOP’s favor</a>. Yet in Deneen’s view, the Supreme Court’s jurisprudence on social issues over that time — abortion, same-sex marriage, and trans anti-discrimination protections — left progressivism ascendant. </p>
<p id="Gh8Hfm">“It began to dawn on many conservatives that, in spite of apparent electoral victories that have occurred regularly since the Reagan years, they have consistently lost, and lost overwhelmingly to progressive forces,” he writes.</p>
<p id="Ac3JLC">What is the reason for this failure? Deneen cites mainstream conservative adherence to seven liberal principles — religious liberty, limited government, “the inviolability of private institutions (e.g., corporations),” academic freedom, constitutional originalism, free markets, and free speech — as the root of its defects.</p>
<p id="xfH3S6">“Liberalism has become consistently more aggressive in extending each of these features to their logical conclusion — their own contradiction in the form of liberal totalitarianism,” Deneen argues. Liberalism inevitably produces “the evisceration of all institutions that were originally responsible for fostering human virtue: family, ennobling friendship, community, university, polity, church.” </p>
<p id="8qHxob">This so-called liberal totalitarianism — Deneen is not specific on what current policies exactly resemble Soviet or Nazi repression — cannot be defeated<strong> </strong>by the conservative establishment because it accepts basic liberal premises. In his view, mainstream conservatives “play a key role in propping up the regime,” acting as a “controlled opposition” for “the powers behind the powers — the oligarchs, the corporations, the power elite.”</p>
  <figure class="e-image">
        <img alt="Kentucky Freedom Rally Held To Protest Mask And Vaccine Mandates" data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/eS-5x38mNi_6ywjcXhATqm7I2rE=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23024805/1234925227.jpg">
      <cite>Jon Cherry/Getty Images</cite>
      <figcaption>A protest against Kentucky Gov. Andy Beshear (D) in Frankfort, Kentucky.</figcaption>
  </figure>
<p id="reOfl2">Deneen, a political theorist who likes to write at a high level of abstraction, does not lay out what policies follow from his diagnosis. But he does suggest that any progress requires abandoning core liberal commitments to ideals like free speech and religious liberty — that any new conservatism should not see a respect for the diversity inherent in a large and complex society as a defining value.</p>
<p id="SDKaYI">“What to liberalism seems a tolerant and decent regime, in the eyes of its predecessor tradition seems nothing more than cruel indifference, allowing clear vices not only to proliferate, but to enjoy implicit public approval,” he writes, calling for a return to pre-modern Christian politics in the tradition of St. Thomas Aquinas.</p>
<p id="gdSjFk">So what does it mean to actually practice a politics that’s no longer “indifferent” to “clear vices”? </p>
<p id="sbBcgw">Rufo provides an answer. There is a reason both Rufo and Deneen single out universities for special ire: For all their flaws, they are one of the key places where liberal cultural ideals flourish.</p>
<p id="KjsTNo">There are differences between the two: Rufo places more emphasis on left-wing racial politics while Deneen is more exercised by debates over gender and sexuality. But what they share is a vision of conservatism on offense, wielding the power of the state against its political opponents.</p>
<h3 id="kWuvXu">The right against America</h3>
<p id="DZ31nT">Rufo and Deneen are part of a bigger intellectual trend on the right — one in which America’s core institutions are described as hopelessly corrupted by liberal forces.</p>
<p id="mWb61e">Take Tucker Carlson. His new documentary, <em>Patriot Purge</em>, is <a href="https://www.mediamatters.org/fox-nation/tucker-carlsons-revisionist-january-6-series-fascist-propaganda">a conspiratorial retelling of January 6</a> in which peaceful demonstrators were pushed to violence by FBI agents. </p>
<p id="jZPU7C">This isn’t true, obviously. But think about what it would mean if it were: that the FBI, of all government agencies, was so deeply in league with Democrats and liberals that it had masterminded a totalitarian crackdown on Trump supporters. It would mean the entire edifice of the American state has become a tool for repressing conservatives.</p>
<p id="6qFAM0">That is the more or less explicit message of the documentary. “If permanent Washington is willing to launch a second war on terror on its citizens, what else are they capable of?” Carlson asks. “They’re telling you that crushing the civil rights of American citizens is necessary. ... We must spy on our political opponents, silence them, defame them, prevent them from having jobs, take away their bank accounts, throw them in solitary confinement, shoot them in the neck.”</p>
<div id="aYl2ui"><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;"><iframe src="https://www.youtube.com/embed/_Ezf79GDmdM?rel=0" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;" allowfullscreen="" scrolling="no" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture;"></iframe></div></div>
<p id="8wMRdb">The Claremont Institute, a right-wing think tank in California, is dedicated to developing a more highbrow version of Carlson’s worldview — one in which American institutions and even citizens are the right’s enemy. Claremont is undoubtedly the most radically pro-Trump of any major right-wing intellectual institution, its thinkers <a href="https://thebulwark.com/what-the-hell-happened-to-the-claremont-institute/">willing to defend both his presidency and his false claims of a stolen election</a>. </p>
<p id="Re94Tw">Claremont’s output in the past year or two has been astonishingly radical, all but openly calling for regime change and rebellion.</p>
<p id="2715xI">In a <a href="https://www.youtube.com/watch?v=sb8lNtIN7Us">May Claremont podcast</a>, Hillsdale College lecturer and former Trump administration official Michael Anton chatted with entrepreneur Curtis Yarvin — a self-described monarchist who wants to appoint <a href="https://thebaffler.com/latest/mouthbreathing-machiavellis">a Silicon Valley CEO king of America</a> — about their shared desire to topple what Anton terms the American “regime,” a government Yarvin characterizes in the podcast as a “theocratic oligarchy” controlled by a cadre of progressive “priests.”  </p>
<p id="fSA2WV">During the episode, Yarvin muses about how an American strongman — whom he alternatively calls “Caesar” and, more honestly, “Trump” — could seize authoritarian control of the US government by turning the National Guard and FBI into his personal stormtroopers. </p>
<p id="l38jON">In a March article in <a href="https://americanmind.org/salvo/why-the-claremont-institute-is-not-conservative-and-you-shouldnt-be-either/">the American Mind</a>, Claremont’s blog, writer Glenn Elmers declares that “most people living in the United States today — certainly more than half — are not Americans in any meaningful sense of the term.” If Trump voters and conservatives do not band together and wage “a sort of counter-revolution” against these “citizen-aliens,” then “the victory of progressive tyranny will be assured.”</p>
<p id="Qx0mXe">And an August essay <a href="https://claremontreviewofbooks.com/the-finger-in-the-dike-election/">in the Claremont Review of Books</a> by scholar Angelo Codevilla describes a country whose government is clinging to “an illusion of legitimacy” after “a half-century of Progressive rule’s abuse” has demolished American society.</p>
<p id="sOpyaw">Views like these — that repudiate America’s core institutions and ideals, up to and often including its democracy — are becoming <a href="https://www.vox.com/22600500/olympics-conservatives-simone-biles-anti-american">more and more mainstream on the right</a>. They can be found at right-wing intellectual gatherings, like <a href="https://www.theatlantic.com/ideas/archive/2021/11/scary-future-american-right-national-conservatism-conference/620746/">the National Conservatism conference</a>. They can be found from <a href="https://www.politico.com/news/2021/05/17/peter-thiel-senate-megadonor-488799">one of the right’s leading moneymen</a>, venture capitalist Peter Thiel, who <a href="https://www.politico.com/magazine/story/2016/11/donald-trump-steve-bannon-peter-thiel-214490/">once argued </a>that “I no longer think that freedom and democracy are compatible.” They even have champions on Capitol Hill, like Sen. Josh Hawley (R-MO), a critic of “<a href="https://www.theguardian.com/us-news/2021/apr/26/josh-hawley-book-attacks-woke-capitalism">woke capitalism</a>” who has argued that the idea that a person should be free to “define your own values” is a kind of “<a href="https://www.christianitytoday.com/ct/2019/june-web-only/age-of-pelagius-joshua-hawley.html">heresy</a>.”</p>
<p id="gM5Eso">It’s easy to dismiss this kind of illiberal language as purely rhetorical: radical posturing with few practical implications. But the past year of conservative politics, from the January 6 riot to the spread of voting restrictions and extreme gerrymandering to the rise of Rufo’s war on the education system, has shown that the right’s illiberal impulses are actually shaping our reality.</p>
<p id="sygtRF">Conservatism, in theory, is supposed to be an ideology of preservation. But the current right is increasingly being shaped by a reactionary impulse bent on the radical transformation — if not the outright destruction — of America’s leading institutions.</p>


guid: https://www.vox.com/2021/11/19/22787237/build-back-better-prescription-drug-byrd-rule
title: Senate rules could undercut Democrats’ prescription drug plan
author: Dylan Scott
url: https://www.vox.com/2021/11/19/22787237/build-back-better-prescription-drug-byrd-rule
feedurl: http://www.vox.com/rss/policy-and-politics/index.xml
content_mime_type: text/html
content:
  

    <figure>
      <img alt="" src="https://cdn.vox-cdn.com/thumbor/GdZGZIGemY2NQjeKj_cd3-fu-Q8=/0x0:4608x3456/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70166460/GettyImages_1156932622.0.jpg" />
        <figcaption>Democrats have a multi-pronged strategy for addressing drug prices in the Build Back Better Act — but one of those prongs may not be allowed under the Senate’s rules. | Getty Images</figcaption>
    </figure>

  <p>Democrats want to lower drug costs for commercial health plans — if the Byrd Rule will let them.</p> <p id="j2726y">A critical part of <a href="https://www.vox.com/policy-and-politics/2021/11/4/22763175/build-back-better-reconciliation-bill-medicare-drug-prices">Democrats’ plan to control prescription drug prices</a> would apply not only to the government’s Medicare program but also to the commercial market that covers most working Americans — unless the Senate’s rules stop it.</p>
<p id="m0CJXY">Democrats have a multi-pronged strategy for addressing drug prices in <a href="https://www.vox.com/2021/10/28/22748554/biden-budget-build-back-better-democrats-child-care-taxes">the Build Back Better Act</a>. First, they would allow Medicare to negotiate with pharmaceutical manufacturers on the prices of a certain number of prescription drugs, something they have been promising to do for years. But Democrats also want to limit drug companies’ ability to hike the prices of their medications for everyone — regardless of what kind of health insurance they have — in the future. </p>
<p id="i4ktx9">To do that, Congress has proposed requiring drugmakers to pay rebates for any price increases, in either the Medicare health program or <a href="https://www.kff.org/other/state-indicator/health-insurance-coverage-of-the-total-population-cps/?dataView=1&amp;currentTimeframe=0&amp;sortModel=%7B%22colId%22:%22Location%22,%22sort%22:%22asc%22%7D">the commercial health plans</a> that cover 180 million Americans.</p>
<p id="Om3v4Z">But, as Politico <a href="https://www.politico.com/news/2021/11/13/democrats-drug-prices-521213">reported</a> this week, the plan to apply the inflation-indexed rebates to the commercial market could be in trouble.<strong> </strong></p>
<p id="w06PbS">Senate Republicans — at the urging of the drug industry — plan to challenge whether the rebates for commercial health plans are permissible in a bill passed through the budget reconciliation process. If they succeed, it could have significant consequences for US patients and the prices they pay for medicines.</p>
<h3 id="UGtS6D">The Byrd Rule could alter Democrats’ drug pricing proposal</h3>
<p id="TonDTz">This precarious situation is a direct consequence of the process Democrats are using to pass the Build Back Better Act: budget reconciliation, which allows them to pass a bill with a slim majority but must meet a certain condition known as the Byrd Rule.</p>
<p id="xQIwSz">In brief, the Byrd Rule requires that all the provisions in a budget reconciliation bill directly change federal spending or revenue.</p>
<p id="rLSTjj">Republicans will argue that the purpose of the provision is to control drug prices for the private plans, full stop, and that does not have anything to do with federal spending or revenue — at least not directly.</p>
<p id="S6ffuf">The Democratic counterargument would be that applying these rebates to commercial plans would have a serious, more than incidental, effect on the federal budget. The federal government subsidizes almost all private insurance plans in one way or another, and so lower or higher costs for those plans could have major implications and lower costs for private health plans could also mean higher wages for workers, who would then pay more in taxes.</p>
<p id="xhNONX">Who wins is likely ultimately a decision for the Senate parliamentarian.</p>
<p id="tzfV8Y">But what would happen if the parliamentarian determines rebates covering commercial plans cannot be allowed under the Byrd Rule?</p>
<p id="NDvVmK">The big fear, voiced by advocates of the Democrats’ plan, is that drug companies would extract higher prices from the commercial market in order to make up for the revenue they would lose from Medicare once that program’s new price controls take effect.</p>
<p id="MsYcDc">According to several experts, that appears unlikely. Loren Adler, associate director of the USC-Brookings Schaeffer Initiative for Health Policy, covered why in <a href="https://www.brookings.edu/blog/usc-brookings-schaeffer-on-health-policy/2021/09/24/cost-shifting-in-drug-pricing-or-the-lack-thereof/">a lengthy analysis</a> published in September.</p>
<p id="CghZ9t">“Fundamentally, for this to occur, it would have to be the case that drug companies are benevolently choosing not to profit-maximize at present,” Adler told me this week, “which I find rather difficult to believe.”</p>
<p id="TI1cP3">In other words, drug companies are already charging the highest possible prices they can get in their negotiations with private insurers. They are not suddenly going to be able to secure higher prices in this new reality; private insurers will have the same incentives and leverage to keep costs down that they did before.</p>
<p id="dxBk1s">“Drug companies maximize their profits and get as much as they can out of their negotiations,” Darius Lakdawalla, a USC health economist, told me. “They are not leaving money on the table that they would then choose to scoop up if they lose Medicare profits.”</p>
<p id="hJyRKL">Private health plans may actually still see some savings, according to <a href="https://www.cbo.gov/system/files/2019-07/Expected_Effects.pdf">the Congressional Budget Office</a>, because inflation penalties in Medicare could discourage drug companies from raising list prices altogether.</p>
<p id="2vOpjF">But the savings would not be as big as they would be if the inflation rebates covered the commercial market as well — and there may be some cases where drug companies charge ahead and hike their list prices higher than inflation anyway. </p>
<p id="oZiKtf">Under the current plan, drugmakers would pay a rebate based on their sales volume in both the Medicare and commercial markets. In that scenario, there would be little reason to raise list prices faster than inflation, because you are paying the penalty based on the entire market.</p>
<p id="ofNXAS">But if those rebates can’t include the commercial market, the penalty will be based on the Medicare market only — making it a smaller price to pay if a company does decide to hike the list price of a drug at a rate higher than inflation.</p>
<p id="Yn1Ahg">“If the penalty is only based on Medicare sales, it still may be worth it financially for drug companies to increase their list price faster than inflation, just as they would have before, even though it won’t mean any higher revenue from Medicare,” Adler said.</p>
<p id="vWVe3a">Most people don’t pay the list prices of medications, and health insurers negotiate the prices they pay to drug companies. They will still have the same incentives to drive down that price as much as they can, which should limit the likelihood that drug costs would rise for commercial plans in the aggregate.</p>
<p id="16BRfI">But rising list prices can still drive up costs to patients, if they must meet their deductible before their insurance kicks in or if they must pay any coinsurance that is based on a list price. Deductibles and coinsurance have been steadily rising as a share of out-of-pocket costs over the past few years, according to <a href="https://www.iqvia.com/-/media/iqvia/pdfs/institute-reports/medicine-spending-and-affordability-in-the-united-states.pdf?&amp;_=1637171412878">a 2020 report from the IQVIA Institute</a>.</p>
<p id="7nXfrM">Those rising costs can have a deleterious effect on people’s health. About 1 in 12 prescriptions issued for people on commercial plans are abandoned, likely because of the out-of-pocket cost to the patient, a higher rate than is seen in Medicare, according to the same IQVIA report. For uninsured people who pay entirely in cash, and who would still be exposed to price increases going forward, 1 in 5 prescriptions end up being abandoned.</p>
<p id="jySuD4">The bottom line is, if the commercial rebates are nixed under the Byrd Rule, the people on private plans would end up saving less money than they would have if the Democratic plan were enacted in full — and any future price increases that are allowed under a more limited version of the plan could end up hitting certain patients particularly hard.</p>
<p id="vHwNJj">The price controls for only Medicare would still be a big step. But they would end up being a half-measure compared to what Democrats currently propose.</p>
<p id="UTskhf">“The real problem for [large-employer insurance plans] would be the loss of a rare opportunity to gain relief from high drug prices, which are becoming a bigger problem over time,” Paul Ginsburg, a senior health economist at the Brookings Institution, told me.</p>
<h3 id="dWRNGL">The filibuster is the problem</h3>
<p id="shqNaU">Why do prescription drug savings for half of Americans ultimately turn on how one person interprets the Senate’s rules? Because budget reconciliation is dictating the legislative process, leading to half-measures and incoherent policies that do not work as originally intended in the real world. </p>
<p id="r0j9qJ">So long as the filibuster still exists, budget reconciliation is the only way for the Democrats to move a bill, unless 10 Republicans were willing to break ranks with their party and break a filibuster. That is exceedingly unlikely in a highly polarized Congress.</p>
<p id="iC0n6H">But the budget reconciliation rules place such tight restrictions on which provisions can be included and which ones can’t — all subject to the interpretation of the parliamentarian — that it can be difficult to craft policies that are internally consistent. A prescription drug plan that lowers costs for some people and increases them for others would be entirely the result of this misshapen process.</p>
<p id="eIxdSn">Budget reconciliation wasn’t meant to pass complex legislation. It was created in the 1970s to make sure no amount of partisan gridlock could prevent Congress from dealing with its most basic duty — determining how much the federal government spends and how much revenue it raises. The Byrd Rule exists in the first place, to limit the process’s use to those core functions.</p>
<p id="SMfxDQ">But over time, as bipartisan comity faltered and filibusters against any and every kind of legislation became the norm, budget reconciliation has devolved into the only tool by which a slim Senate majority can advance its legislative agenda. Yet both parties keep bumping up against its limitations. </p>
<p id="2XoCNh">In 2017, Republican majorities struggled to roll back the Affordable Care Act’s insurance reforms in part because a straightforward repeal or even a more modest alteration was not allowed under the Byrd Rule. It didn’t directly affect federal spending or revenue enough to satisfy the parliamentarian, and they were forced to come up with awkward workarounds to clear the Byrd Rule. (Ultimately, they failed to craft a plan that could win 50 votes.)</p>
<p id="sBPrpM">Now, Democrats are trying to pass an omnibus social spending bill — which covers everything from prescription drugs to child care to green energy — within the strictures set down by Sen. Robert Byrd (D-WV) many years ago. </p>
<p id="7EVnGg">If there were no filibuster, they could have simply put up one bill for child care, another bill for green energy, another bill for prescription drugs. Each one could pass on its own merits if it had 50 votes. The provisions wouldn’t be subject to the arbitrary restrictions of budget reconciliation. The plan to apply these drug pricing rebates to the commercial market could be approved as intended. The dissonance would be gone.</p>
<p id="La1fv1">Instead, Democrats may end up being forced to pass a compromised version of their drug pricing proposal — with significant consequences for millions of patients.</p>
<p id="GwJZIf"></p>
<p id="HQSUCU"></p>
<p id="o0uyZL"></p>
<p id="RiHtx4"></p>


guid: https://www.vox.com/22744837/house-senate-democrats-build-back-better-child-care
title: Democrats’ child care plan could help millions — or it could be a big mess
author: Andrew Prokop
url: https://www.vox.com/22744837/house-senate-democrats-build-back-better-child-care
feedurl: http://www.vox.com/rss/policy-and-politics/index.xml
content_mime_type: text/html
content:
  

    <figure>
      <img alt="" src="https://cdn.vox-cdn.com/thumbor/dl7Vn1effUjuqozExy6VDuhSAcc=/0x0:4363x3272/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70176766/GettyImages_1235897688t.0.jpg" />
        <figcaption>President Joe Biden greets a group of children at the Capitol Child Development Center in Hartford, Connecticut, on October 15. | Brendan Smialowski/AFP via Getty Images</figcaption>
    </figure>

  <p>The ambitious proposal in the Build Back Better Act is a gamble.</p> <p id="WTX2a7">The child care plan in <a href="https://www.vox.com/2021/11/19/22776638/house-democrats-pass-185-trillion-social-spending-bill">President Joe Biden’s Build Back Better Act</a> is arguably the bill’s most ambitious proposal. It could be its most challenging to implement, and politically perilous, as well.</p>
<p id="2POOCW">The plan aims to help millions of families with children under age 6 get affordable child care for the first time, funding most or all of the cost of their care at licensed providers. The bill would also steer an influx of federal cash to boost wages for child care workers and spur the opening or expansion of child care facilities.</p>
<p id="YW2dM5">“This is game changing, and it’s gotten lost in the shuffle at times,” says Julie Kashen, director for women’s economic justice at the Century Foundation. “It guarantees families access to affordable child care, something that does not currently exist.”</p>
<p id="jqLCHD">But critics of a variety of political persuasions — left, centrist, and conservative — say the plan could actually drive up prices for many parents, and may lead to a shortage of licensed child care options as millions of parents enter an already-crowded market for the first time.</p>
<p id="wYVGba">Per the plan, low- and lower-middle income families would get generous federal subsidies to help them purchase child care at licensed providers right away. Since many of those families currently don’t use licensed child care, that would mean significant new demand for care that’s already difficult or expensive to secure in much of the country. The plan would “dramatically increase demand for child-care services as newly subsidized users pour into the sector,” Matt Bruenig, founder of the People’s Policy Project, a left-leaning think tank, <a href="https://www.theatlantic.com/ideas/archive/2021/11/democratic-childcare-proposal-hurts-families/620749/">writes at the Atlantic</a>.</p>
<p id="ooRdzT">If the supply of providers can’t keep up with this new demand, that’s a recipe for shortages or price hikes. Shortages would bedevil everyone. But price hikes would be a particular problem for middle- and upper-middle-class families. That’s because, the way the plan’s phase-in is designed, those families wouldn’t be eligible for subsidies just yet — and many won’t be until 2025. They’d have to pay any higher costs themselves, and could see their current child care arrangements thrown into chaos as changes ripple through the sector.</p>
  <figure class="e-image">
        <img alt=" " data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/KqdSit5xUklvPfnBiOSmENjCLUM=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23028574/GettyImages_1232802545t.jpg">
      <cite>Matt Roth/Washington Post via Getty Images</cite>
      <figcaption>A teacher zips up the coat of a young child at Little Flowers Early Childhood and Development Center in Baltimore, Maryland, on January 12, 2021.</figcaption>
  </figure>
<p id="IOimmF">The bill’s drafters are aware of these concerns. “We don’t want a subsidy to nowhere,” says one Democratic aide, speaking on condition of anonymity, alluding to the worry that parents will be promised assistance they can’t actually use anywhere due to shortages. That’s why the bill also sends billions for states to use to increase the supply of child care over the next few years. </p>
<p id="IrF2Pp">“The status quo of rising child care costs and waiting lists is not working for parents, and to fix it you do have to tackle the problems of cost and supply at once,” an aide for Sen. Patty Murray (D-WA), one of the architects of the plan, said. “That’s why this bill lowers more and more families’ child care costs over the first three years, while prioritizing helping states invest in opening new providers, increasing wages for the early childhood workforce, and adding slots.” The White House did not respond to a request for comment.</p>
<p id="OuO2X2">Ramping up supply is easier said than done, though. And there’s another catch: After 2027, the whole program would vanish unless a future Congress and president choose to pass a new law extending it.</p>
<aside id="cQ2cI8"><div data-anthem-component="readmore" data-anthem-component-data='{"stories":[{"title":"One weird trick to fix our broken child care system","url":"https://www.vox.com/the-goods/22360152/child-care-free-public-funding"}]}'></div></aside><p id="aItguU">“I’ve looked at a number of government programs over the years and usually I think there’s a way to make them work,” says Marc Goldwein of the Committee for a Responsible Federal Budget. “This one I worry about.”</p>
<h3 id="zQYViD">The child care status quo</h3>
<p id="pBzeoV">In the United States, in the years before kids are sent off to school, families are basically on their own in deciding what to do with them, in an economy and culture where both parents are increasingly expected to work. </p>
<p id="tJJSWU">Some parents stay home. Others recruit family members, friends, or neighbors, paid or unpaid, to watch their children. Others hire nannies. And some send their kids to the day care centers and smaller licensed home-based providers that make up the formal child care industry. </p>
<p id="5CyAAr">Reformers look at that industry and see several problems. A big one is that child care is very expensive. This hits low-income people hardest but burdens middle- and upper-middle-income people as well: The <a href="https://www.americanprogress.org/issues/early-childhood/reports/2021/06/28/501067/true-cost-high-quality-child-care-across-united-states/">Center for American Progress estimated</a> that the average yearly cost for center-based infant care (a particularly expensive type of care) is nearly $16,000; in some cities, the <a href="https://www.npr.org/local/305/2020/01/09/794851835/for-some-d-c-parents-it-s-too-expensive-to-work">average cost</a> can be as high as $24,000. This puts such care out of the price range of many families and drives women especially out of the workforce. </p>
<p id="2O0sAc">But there are other, interrelated problems. There isn’t enough licensed child care to meet demand in some areas, leading to many waiting lists and difficulty securing slots. Some child care is <a href="https://newrepublic.com/article/112892/hell-american-day-care">of low quality</a>. Workers in the sector are <a href="https://www.cnbc.com/2021/02/24/child-care-workers-among-the-one-of-the-lowest-paid-occupations.html">generally paid very little</a>. </p>
<p id="GxJoCk">Those problems have many roots, but one common one is that child care providers aren’t making enough money — not enough to pay workers decent wages or to spur a dramatic expansion of the industry. It’s a labor-intensive business where a certain ratio of workers to children <a href="https://worldpopulationreview.com/state-rankings/child-care-ratio-by-state">is legally required</a>, as well as other safety regulations that drive up costs. <a href="https://www.bloomberg.com/news/features/2021-11-18/biden-s-build-back-better-wants-to-save-america-s-child-care-business?sref=DiETcxvV">Bloomberg Businessweek’s Claire Suddath recently wrote</a> about how child care is “the most broken business in America.”</p>
<p id="yCmtjg">“Today, parents and providers are essentially pitted against each other,” says Kashen. “Either providers are raising wages and parents can’t afford it, or parents can afford it and providers are paying poverty-level wages.” In theory many people would like the worker supervising their child to be paid a decent salary, but where exactly is that money going to come from?</p>
<p id="qt97Vg">Democrats have an answer: the federal government.</p>
<h3 id="Tkda4G">What the bill would do</h3>
<p id="v6axgU">At its core, the Build Back Better bill would devote a whole lot of federal funds to the child care sector — money to help families buy care, and money to the states to help them expand child care supply and improve its quality.</p>
<p id="5Bdu2F">From the family end, the main goal is to cap child care expenses at a certain percentage of their yearly income by offering subsidies. For some, this would come as a coupon or voucher families could get from the government and redeem at licensed providers. For others, families would go to the state government to request subsidized slots that are already reserved at providers. The end result is the same: Subsidized families would only be responsible for paying a “copay,” not the full cost of care. </p>
  <figure class="e-image">
        <img alt=" " data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/ttcCa_ggOOJhn4hljPdXI6aRVo8=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23028649/GettyImages_1236327479t.jpg">
      <cite>Jeff Kowalsky/AFP via Getty Images</cite>
      <figcaption>A 6-year-old child is comforted by her mother as she receives her first dose of the Pfizer/BioNTech Covid-19 vaccine on November 3, in Novi, Michigan.</figcaption>
  </figure>
<p id="NyT2hb">The subsidies, which are calculated based on state median income levels by family size, are most generous for families with lower incomes, and they gradually get less generous as incomes rise. Let’s use a state median income of about $100,000 for a family of four for easy math (that’s about where it is <a href="https://www.justice.gov/ust/eo/bapcpa/20200401/bci_data/median_income_table.htm">in Wisconsin</a> and several other states). </p>
<p id="z7zREW">When fully phased in, in 2025, here’s how the subsidies would work for a family of four (<a href="https://rules.house.gov/sites/democrats.rules.house.gov/files/BILLS-117HR5376RH-RCP117-17.pdf">according to</a> the current version of the House bill).</p>
<ul>
<li id="LzSZor">Families of four with yearly income below $75,000 (75 percent of the median) will pay nothing for child care — the government pays for it all.</li>
<li id="wc2JM0">Families of four making $100,000 (100 percent of the median) will have a copayment of about $2,000 per year (the government pays for any expenses above that).</li>
<li id="WJo2QF">Families of four making $150,000 (150 percent of the median) will have costs capped at about $10,500 (7 percent of their yearly income).</li>
<li id="wCLlCY">Families of four making $250,000 (250 percent of the median) will have their costs capped at about $17,500 (7 percent of their yearly income).</li>
<li id="jbNNBw">Families of four making more than $250,000 (above 250 percent of the median) will not be eligible for any subsidies. They’d have to pay the full cost of child care, as they do now. (This is what’s known as a benefit cliff, where a slight increase in income leads to the loss of potentially thousands of dollars in benefits.)</li>
</ul>
<p id="tUFVWs">All that would be quite a big deal for most families with young children — the federal government would newly be picking up most of their child care costs. </p>
<p id="JSSvQ4">”Look at what’s happening on the ground right now,” the Democratic aide says. “The cost for child care is too high and it’s only going to increase with and without this bill. Right now it’s causing providers to underpay their staff or close those doors. We’re addressing that issue by shifting the costs to the government, with those subsidies. That is really, really meaningful.” </p>
<p id="zm98uf">But there is also some fine print.</p>
<p id="gHctqL">First, there’s the issue of who will be eligible for this subsidized help. Some families won’t qualify, since there’s an “<a href="https://www.peoplespolicyproject.org/2021/10/29/dem-child-care-proposal-uses-welfare-reform-tactics-to-exclude-the-poor/">activity test</a>” that will likely exclude some of the very poor. Others will qualify eventually — but not right away because of the plan’s gradual rollout. Only families at or below the state median income will be guaranteed subsidies right away; those with higher incomes will have to wait one to three years.</p>
  <figure class="e-image">
        <img alt=" " data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/_8SDgf0pX__VZ4aURczczA830Os=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23028639/GettyImages_1349024409t.jpg">
      <cite>Michael M. Santiago/Getty Images</cite>
      <figcaption>President Joe Biden salutes a service member during a speech about his Build Back Better agenda on October 25.</figcaption>
  </figure>
<p id="AqAonv">Second, a great deal of discretion is left to state governments, including whether they’ll participate in the plan at all. In practice, red states could opt out, especially because states would be expected to pick up a proportion of the costs starting in 2025.  </p>
<p id="dzGdNv">Finally, as written, all of this spending would end after 2027. No one actually thinks this is a good idea or a good way to design policy. But it’s the way Democrats have chosen to address concerns from moderates about the bill’s overall price tag. </p>
<h3 id="VrZY1l">What skeptics fear will happen</h3>
<p id="JogUeJ">The precursor to this child care plan, the <a href="https://www.americanprogress.org/press/release-murray-scott-child-care-bill-create-2-3-million-new-jobs/">Child Care for Working Families Act</a>, was crafted back in 2017 by advocates for parents and industry providers working with the top Democrats on the relevant congressional committees — Sen. Patty Murray (D-WA) and Rep. Bobby Scott (D-VA). The core ideas were that most families shouldn’t have to pay more than 7 percent of their income for child care, and that providers in the industry needed financial help. Rather than creating a new publicly run child care system akin to public schools, the proposal involved steering a ton of federal money in the industry’s direction.</p>
<p id="17DXvb">Quickly, this became something like the consensus Democratic Party policy on the issue, backed by <a href="https://www.americanprogress.org/press/release-murray-scott-child-care-bill-create-2-3-million-new-jobs/">positive analyses</a> from think tanks like the Center for American Progress. Many 2020 Democratic candidates, including Joe Biden, adopted something like it as part of their campaigns. And once Biden was in office, it made it into his <a href="https://www.vox.com/2021/4/28/22404411/biden-american-families-plan-inequality">American Families Plan</a> and then <a href="https://www.vox.com/22577374/reconciliation-bill-biden-medicare-climate">into the reconciliation bill</a> — the Build Back Better Act.</p>
<p id="d1PUd5">In all that time, the proposal received little scrutiny outside the community of advocates and providers that crafted it. But that changed last month when liberal wonkworld was set aflame by a <a href="https://www.peoplespolicyproject.org/2021/10/20/democratic-child-care-plan-will-spike-prices-for-the-middle-class-by-13000/">series</a> <a href="https://www.peoplespolicyproject.org/2021/10/21/responses-to-the-child-care-piece/">of critiques</a> <a href="https://www.peoplespolicyproject.org/2021/10/22/one-more-time-on-child-care/">from</a> <a href="https://www.peoplespolicyproject.org/2021/10/29/dem-child-care-proposal-uses-welfare-reform-tactics-to-exclude-the-poor/">Matt Bruenig</a> of the People’s Policy Project, who argued that the bill would, in practice, sharply raise child care costs for middle-class families over the next few years.</p>
<p id="7v5pHj">Here’s the basic issue: It’s already quite difficult and expensive to find child care in much of the country. Long-running supply problems were exacerbated by the pandemic; about 110,000 child care workers <a href="https://www.wsj.com/articles/millions-of-workers-stay-home-to-watch-young-children-as-daycares-struggle-11635087600">have left the labor force</a> in the past year and a half. But if the plan passes, millions of families in the bottom half of the income distribution, most of whom currently do not use licensed child care, would get generous subsidies right away. That would likely mean a surge in demand for care, and if supply can’t keep up, price hikes and/or shortages would ensue. </p>
<p id="hTfUXG">Shortages would be a problem for everyone, but because of the way the subsidies work, price hikes wouldn’t be a problem for low-income families. Unsubsidized families would not be so lucky. And in the first few years of the program, during the phase-in, many in the middle and upper-middle class would not yet be eligible for subsidies and would have to pay those potentially sharply higher costs themselves.</p>
<p id="AmkxAb">Democratic staffers involved in crafting the bill told me they know meeting the new demand they’re stoking will be a challenge — you can’t wave a magic wand and make child care supply expand overnight. So they want to prioritize people who need help most initially. </p>
<p id="tQDJbP">“If you give everyone an uncapped entitlement all at once, we know what will happen in who will get the slots and who will get shut out,” says another aide who spoke on condition of anonymity, arguing that comparatively better-off families would be better able to game the system and the poor would lose out.  “A program that would make everyone eligible at phase one and hand them a voucher they can’t use anywhere would be a policy and political disaster.” </p>
<p id="IfRO60">Now, Democrats’ hope is that the supply of care will expand, because during this phase-in period, money is allotted to states for that purpose. States can use it to make grants to help providers start up or expand services, or to help with recruiting costs, and so on. But it’s unclear that will be enough to prevent the problem of shortages or rising prices in the short term. “You can’t create new child care workers from thin air,” says <a href="https://www.nytimes.com/2021/11/18/opinion/democrats-build-back-better-regulations.html">Samuel Hammond of the Niskanen Center</a>. “At best you can try to pull them from other sectors.” </p>
  <figure class="e-image">
        <img alt=" " data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/Dp6wpKBh8JLjuNgEs3LqLt0fkfs=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23028658/GettyImages_1234744749t.jpg">
      <cite>Chandan Khanna/AFP via Getty Images</cite>
      <figcaption>A mother adjusts her child’s face mask at the St. Lawrence Catholic School in August, in Miami, Florida.</figcaption>
  </figure>
<p id="1c0wGf">Furthermore, the limited subsidies early on create a new political issue: middle-class families may be furious about seeing rising short-term costs. After all, Democrats had promised more affordable child care for all — not soaring prices or shortages in the short term while they spend a few years setting up a better system. (Many parents’ kids will age out of even needing care before they’re eligible for subsidies.) </p>
<p id="kxoCOr">If this transpires, the middle- and upper-middle-income parents who’d be hit hardest are also those who tend to have disproportionate power in the political system — they’re <a href="https://econofact.org/voting-and-income">more likely to vote</a> and more adept at making their outrage known. This resembles Obamacare, where many people who saw their existing insurance plans disrupted during the phase-in of the new system were furious.</p>
<p id="Qa8j9Z">So much hinges on how quickly this promised new supply of child care can materialize. And no one really knows the answer to that. “Building supply is not going to be easy,” says Rasheed Malik, associate director of research for early childhood policy at the Center for American Progress. “There are a lot of variables that are unknown at this point, and we can’t fully game out what is going to happen. But I think that this is sufficiently flexible and smartly designed to try and eventually deal with the challenges that will arise.” </p>
<p id="SJDlWz">One aspect of the flexibility is that states have leeway to devote some of their funds to either more subsidy spending — potentially for upper-middle-income families if they think it necessary — or for supply-building in these early years.</p>
<h3 id="7nN1uV">Is it better than the status quo?</h3>
<p id="E5AHnb">Overall, the bill’s supporters think critics are focusing too much on the phase-in period and are unfairly downplaying the game-changing effects that a truckload of federal money would have on the sector in the long term. “The number one supply issue is that we pay providers poverty wages,” says Melissa Boteach, vice president for income security and child care at the National Women’s Law Center. Billions of federal dollars can help change that.</p>
<p id="S3lgLr">But that gets to the other pesky issue with the bill — that, as currently written, those billions won’t be around forever, since the child care program is set to expire after 2027. Of course, supporters of the plan would like to make the money permanent, but moderate Democrats have demanded the bill’s cost be reduced, and the party overall has been reluctant to jettison more of the other programs currently in the bill. The expiration date makes the program look cheaper on paper.</p>
<p id="flXihQ">Most Democrats hope that, in practice, the program will prove popular, and a future president and Congress will pass a new law extending it rather than letting it vanish. Still, it isn’t particularly likely Democrats will still control the entire federal government by 2027. Would Republicans truly agree to a new law continuing Biden’s child care program? </p>
<p id="REi52G">The answer may depend on whether red states actually accept and come to rely on the funds — and on whether implementation goes well or poorly in general. Still, those considering expanding or setting up new child care businesses might be wary about those federal funds being set to vanish.</p>
<p id="zt0kuo">Like the rest of the program, it’s a gamble. But supporters of the bill say that, compared to the status quo, it’s a gamble worth taking.</p>


title: Americans are mad about the economy, but still ready to shop
author: Emily Stewart
feedurl: http://www.vox.com/rss/policy-and-politics/index.xml
content_mime_type: text/html
guid:
https://www.vox.com/the-goods/22791953/inflation-christmas-shopping-thanksgiving-black-friday-target-walmart

url:
https://www.vox.com/the-goods/22791953/inflation-christmas-shopping-thanksgiving-black-friday-target-walmart

content:
  

    <figure>
      <img alt="Santa bumping elbows with shoppers." src="https://cdn.vox-cdn.com/thumbor/2kdFD7fvasbryhuo4BiHlcbjwV0=/255x0:4680x3319/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70176878/1230163247.0.jpg" />
        <figcaption>Mel Melcon / Los Angeles Times via Getty Images</figcaption>
    </figure>

  <p>Inflation and supply chain woes aren’t stopping shopping, but they’re changing it.</p> <p id="SJZaUY"></p>
<p id="K5y0jh"></p>
<p id="Vss14e">Holiday shopping is <a href="https://www.vox.com/the-goods/22725031/buying-less-supply-chain-holiday-shopping">going to be annoying this year</a>. Many things are more expensive, and in-demand items are hard to find. It’s a real “All I want for Christmas is to stop hearing about supply chains and inflation for half a second” moment.</p>
<p id="I91wmc">While it’s a weird time in the economy, that weirdness isn’t necessarily translating to people holding back on buying. People are shopping a little differently this holiday season, but they’re not <em>not</em> shopping. Nearly two years into a pandemic, the American consumer will not be deterred, at least not entirely.</p>
<p id="vle1x7">But they probably won’t be happy about it. <a href="https://www.bls.gov/news.release/cpi.nr0.htm">The consumer price index</a>, which measures what consumers pay for goods and services, increased by 6.2 percent from a year ago in October, and it crept up by 0.9 percent over the course of the month alone. Regardless of the arguments over how serious a threat inflation is to the American economy right now (some economists say it’s a big deal, <a href="https://www.vox.com/the-goods/2021/11/10/22775092/inflation-cpi-october-economy-biden-fed">others that it’s not</a>), <a href="https://www.nytimes.com/2021/11/06/upshot/inflation-psychology-economy.html">consumers hate it</a>. The price of food is up 5.3 percent over the last year, meaning holiday meals are going to be more expensive. Gas is pricey, too, meaning so is traveling by car. Big-ticket items, including cars, are more expensive, but so are smaller-ticket ones, like apparel.</p>
<p id="kHE7Y0">Likewise, <a href="https://www.vox.com/22757240/global-supply-chain-management-shortage-covid">supply chain problems are popping up in many places</a>. Before people can even worry about how much something is going to cost, they’ve got to first wonder whether they’re even going to be able to get ahold of it.</p>
<p id="bMPrwb">Despite the one-two punch of inflation and supply chain woes, it seems like consumers are determined to forge ahead. <a href="https://www.nytimes.com/2021/11/16/business/retail-sales-october.html">Some people are spending a little earlier</a>, but they <a href="https://www.bloomberg.com/news/articles/2021-10-27/u-s-holiday-spending-plans-tempered-by-inflation-survey-shows">still appear to be spending</a>. As the job market improves and more people get back to work, they’ve got more money to put out there, which they are.</p>
<p id="FokK5w">“You get more people employed, and obviously, more people employed means more income and therefore it means more total consumption,” said Michael Gapen, head of US economics research at Barclays. “None of this is to say that we should be happy with where inflation is — it’s a problem.”</p>
<h3 id="AlGW9p">Consumers are annoyed, but still buying</h3>
<p id="1xRayJ">Consumers are certainly not happy with the current economic situation.</p>
<p id="XCG6uF">The University of Michigan’s <a href="http://www.sca.isr.umich.edu/">consumer sentiment index</a>, which measures how consumers are feeling, fell to its lowest level since 2011 in November. Richard Curtin, chief economist at the survey, in commentary on the results, said the sentiment is a result of the “escalating inflation rate and the growing belief among consumers that no effective policies have yet been developed to reduce the damage from surging inflation.” People were especially frustrated with the rising prices of homes, vehicles, and durable goods.</p>
<p id="vLFAF6">To put the way consumers are feeling in perspective, <a href="https://www.politico.com/newsletters/morning-money/2021/11/15/is-the-economy-really-worse-off-than-in-april-2020-798887">they feel worse than they did in April 2020</a>, when the Covid-19 pandemic was sweeping the country, and it really seemed as though the United States might be heading into an economic depression. To be sure, there’s a partisan divide with these survey results (Republicans feel bad about the economy with a Democrat in the White House, Democrats feel bad about the economy with a Republican in the White House), but people are still generally displeased with the economy.</p>
<p id="d5S5sZ">Still, they plan to spend or, at least, try to. According to a <a href="https://www.conference-board.org/press/Holiday-Spending-2021">survey</a> from the Conference Board from October, consumers are poised to spend an average of $1,022 on holiday gifts and related items this holiday season, with $648 going toward gifts and $374 being directed elsewhere. The gift spending is slightly down from 2019 and 2020, perhaps in part because people are expecting to be able to socialize more this year and accrue costs associated with that.</p>
<p id="dLUZfV">“We saw a little bit of a decline in what they said they intended to purchase for gifts, but nothing really substantial,” said Lynn Franco, senior director of economic indicators and surveys at the Conference Board.</p>
<p id="ZYZK1H">The Conference Board’s survey found that people are ready to get back out there and head to the mall on <a href="https://www.cnn.com/2021/11/21/investing/stocks-week-ahead/index.html">Black Friday</a> and beyond, as concerns about the Covid-19 outbreak lessen. People anticipate buying gift cards as well as apparel, toys, and games.</p>
<p id="HQGoUd">“They do expect to pay more for both food and gifts this year compared to last year,” Franco said. “At least at this point in time, it doesn’t appear to be deterring or impacting spending overall.”</p>
<p id="6Fmlx8">Nikki Baird, vice president of retail innovation at Aptos, a retail technology company, said some retailers are, in part, anticipating a “back to basics” holiday. Some retailers narrowed the assortment of products available on their shelves in light of the uncertainty surrounding the holiday, replicating a tactic they used around back-to-school time. It’s not that you’re not going to be able to find, say, holiday candles; it’s just that there will maybe be 10 options instead of 20. This year, there’s also no big must-have toy.</p>
<p id="pRgOpu">“There’s no character-driven merchandise from blockbuster movies, there’s no toys from blockbuster movies, because there haven’t been any blockbuster movies,” Baird said. “It’s fascinating to me to see that parents are really concentrating on back-to-basics toys.”</p>
<h3 id="iRJxgs">Holiday shoppers are shopping earlier (and stores are still offering discounts)</h3>
<p id="nEptOq">Current economic conditions aren’t necessarily stifling holiday shopping, but they are changing it as people try to adjust to the current landscape.</p>
<p id="ZHV0aD">October retail sales rose by 1.7 percent compared to the previous month, <a href="https://www.census.gov/retail/marts/www/marts_current.pdf">according to the US Department of Commerce</a>. Consumer spending went up in online shopping, electronics and appliances, department stores, building materials, cars, sports, and music, among other items. With the news, JPMorgan <a href="https://www.wsj.com/articles/jpmorgan-upgrades-fourth-quarter-gdp-growth-forecast-to-5-from-4-11637095973">upgraded</a> its expectations for economic growth in the fourth quarter.</p>
<p id="uxz5R6">Part of what’s going on is that people seem to be doing their shopping a little earlier this year. Given all the headlines about supply chain woes and potential shortages, it’s understandable. So some of the holiday retail sales that would normally take place in November and December were pulled into October.</p>
<p id="sG5Qzf">Baird said that the retailers she works with are certainly seeing some earlier shoppers this year compared to holiday seasons past. Thus far, consumers seem more concerned about being able to get items than what they’re paying for it. “They are less price-sensitive,” she said. “They’re not put off by the higher prices; they’re more concerned about availability.”</p>
<p id="WrC8VT">Retailers are putting forward relatively rosy forecasts for the holidays despite hiccups. Walmart <a href="https://www.nytimes.com/2021/11/16/business/walmart-3q-2021-earnings.html">beat third-quarter earnings expectations</a> after its sales rose and said it’s preparing for a “strong holiday season.” <a href="https://www.wsj.com/articles/home-depot-sales-rise-continuing-pandemic-streak-11637064232?mod=article_inline">Home Depot</a>,<a href="https://www.wsj.com/articles/target-posts-strong-sales-and-says-it-has-plenty-in-stock-for-black-friday-11637148726"> Target, and TJX</a> (the parent company of TJ Maxx, Marshalls, and HomeGoods) posted strong third-quarter earnings as well and expect holiday business to be good, despite some challenges. Ernie Herrman, the CEO of TJX, <a href="https://www.axios.com/retailers-inventory-holiday-shopping-8fab66d7-0109-4c99-adf3-9a978f3899c7.html">said</a> the company is in an “excellent inventory position, with most of the product needed for the holiday season either on hand or scheduled to arrive at our stores and online in time for the holidays.”</p>
<p id="yjH1PC">How retailers are handling inflation pressures can vary. As <a href="https://www.cnbc.com/2021/11/17/walmart-and-target-clash-with-investors-over-low-price-strategy-.html">CNBC</a> notes, Walmart and Target are trying to keep their costs low in order to keep customers coming back, even if that cuts into their profits. It’s not a strategy investors love.</p>
<p id="CuFKUi">There’s a sort of game of chicken that retailers have to play with each other every year around the holidays. They’re competing to capture what is typically a relatively set budget on the part of consumers. Discounts and promotions are a way to get consumers in the door; the hope is they’ll fill up their carts while they’re there.</p>
<p id="MYgAjl">Baird said that Aptos has noticed that retailers are offering fewer or shallower discounts, which may be a way to deal with inflation. “They are offering promotions to try to attract consumers, but they either scaled back the depth of the promotion or how many things are on promotion,” she said. Instead of, say, offering 40 percent off the entire store, a retailer will offer 25 percent off winter accessories. “Part of it is also an inflation hedge. You don’t have to raise prices on your base price if you’re offering a shallower discount because you’ve got some protection in your margin built in.”</p>
<p id="dnrBdm">Some retailers are also shifting their inventory around in an attempt to combat potential shipping issues, in the e-commerce space especially, Baird said. She expects some retailers will move items to physical stores and encourage consumers to shop in store or order online and pick up instead of depending on direct-to-consumer e-commerce shipments, especially as the holidays approach.</p>
<h3 id="zt57DL">This holiday economy is still better than the last one</h3>
<p id="8KR2Pb">Here are some headlines from around this time last year: “<a href="https://time.com/5913620/covid-third-wave/">The US Covid outbreak is worse than it’s ever been</a>.” “<a href="https://www.businessinsider.com/us-record-level-daily-covid-19-deaths-thanksgiving-2020-11">On the eve of Thanksgiving, the US recorded its highest single-day coronavirus death toll since May</a>.” “<a href="https://www.nbcnews.com/think/opinion/trump-vetoing-covid-stimulus-bill-could-be-disastrous-signing-it-ncna1252258">Trump vetoing the Covid stimulus bill could be disastrous</a>.” None of that was good.</p>
<p id="pyn8Ru">The US seems better positioned with the pandemic than it was a year ago — vaccines are widely available, and many people have gotten them. <a href="https://www.nytimes.com/interactive/2021/us/covid-cases.html">Coronavirus case counts</a> have risen again recently in some parts of the country, but are still below where they were last year at this point. With the economy, things are generally better, too. Government stimulus has put real money into real people’s pockets. The country is continuing to add back the millions of jobs lost. The October 2020 unemployment rate was 6.9 percent; the October 2021 unemployment rate was 4.6 percent.</p>
<p id="sJgCpG">Gapen noted that wages have on average kept up with inflation, <a href="https://www.washingtonpost.com/business/2021/11/10/inflation-wages-workers-october/">though price increases are cutting into some income gains</a>. In the bigger picture, on aggregate, labor market income is going up because more people are working more hours at higher wages as they go back to work and get paid better. In October, <a href="https://www.bls.gov/news.release/empsit.nr0.htm">the economy added 531,000 more jobs</a>, and numbers from August and September were revised upward by an additional 235,000 jobs.</p>
<p id="kFctbC">“That’s three-quarters of a million more people who will be earning income,” Gapen said. “They are going from, in theory, earning nothing to earning whatever the median income is in the US. So yeah, inflation’s gone up, but your purchasing power’s just gone up by a lot more.”</p>
<p id="3RUmY2">None of this is to say that there aren’t real problems or that the economy is perfect. The supply chain issues are complicated; so is inflation. If you want to buy a <a href="https://www.consumerreports.org/car-pricing-negotiation/average-new-car-price-all-time-high-a4060089312/">new car</a> right now, it’s going to be much pricier than it would have been a year ago. <a href="https://fred.stlouisfed.org/series/ASPUS">Home prices</a> are up a ton if you’re on the market. Overall, daily life is costlier, including gas and food. And if you are spending more to put gas in your car, you might wind up spending less on Christmas presents, or at least consider it. There are a lot of open questions about when things will get back to normal, and about what “normal” will look like. Still, overall, many people are better off.</p>
<p id="JBILd6">Thus far, it looks as though many consumers are determined to celebrate the holiday as usual, by spending money. And if you have to <a href="https://www.vox.com/the-goods/22725031/buying-less-supply-chain-holiday-shopping">buy a little less</a> or differently but are able to spend the time more safely with your loved ones, it’s not the worst trade-off in the world. </p>


title: The limits of popularism
author: Sean Illing
feedurl: http://www.vox.com/rss/policy-and-politics/index.xml
content_mime_type: text/html
guid:
https://www.vox.com/vox-conversations-podcast/2021/11/22/22783093/vox-conversations-briahna-joy-gray-democratic-party-popularism

url:
https://www.vox.com/vox-conversations-podcast/2021/11/22/22783093/vox-conversations-briahna-joy-gray-democratic-party-popularism

content:
  

    <figure>
      <img alt="" src="https://cdn.vox-cdn.com/thumbor/j3p3w3370qbFbpqpMm85en5SFTU=/0x0:7339x5504/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70177911/GettyImages_1236588745t.0.jpg" />
        <figcaption>President Joe Biden delivers remarks before signing the Infrastructure Investment and Jobs Act on the South Lawn at the White House on November 15. | Kenny Holston/Getty Images</figcaption>
    </figure>

  <p>Briahna Joy Gray on how Democrats can solve their messaging problem.</p> <p id="XNOnUe">How can Democrats win more votes in rural America?</p>
<p id="WH86Jw">I don’t know if that’s the most important question for progressive politics right now, but it’s the one I think about the most. Democrats have had their share of victories lately — after all, they currently control the White House and Congress — but the reality is that it’s not enough, due to the <a href="https://www.vox.com/2021/10/18/22724808/democrats-senate-disadvantage-shor-klein">idiosyncrasies of our electoral system</a>. </p>
<p id="huZhOI">To pass a meaningful agenda, Democrats need to win more rural voters — “rural voters” is often code for white people, but it also includes Black and brown voters who don’t live in cities. </p>
<p id="CAqMzl">There’s a raging debate on the left about how to do this. Depending on who you ask, the problem is either too much “<a href="https://www.vox.com/22338417/james-carville-democratic-party-biden-100-days">wokeness</a>” on the progressive side or too much <a href="https://www.washingtonpost.com/opinions/2021/09/26/why-are-moderate-democrats-okay-with-killing-bidens-legislative-agenda/">milquetoast moderation</a> from the centrists. A great deal of this argument — not all of it, but most of it — is about how to navigate the politics of race and class. And that is part of an ever broader conversation about identity and culture and the media landscape.</p>
<p id="SmX1Pk">My views on all this are hard to pin down, and the more I think about it, the more questions I have. But one thing seems clear: The left needs to build a more sustainable working-class coalition, and rural Americans have to be a part of it. The best way to do this is, well, not so clear.</p>
  <figure class="e-image">
        <img alt=" " data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/Lin29k6nbzyzKCRXs1SU1ouDiHs=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23034426/GettyImages_1332797116t.jpg">
      <cite>Spencer Platt/Getty Images</cite>
      <figcaption>People attend the county fair in Rolla, Missouri, on August 6, 2021.</figcaption>
  </figure>
<p id="kgteLb">So I reached out to Briahna Joy Gray, host of the podcast <a href="https://podcasts.apple.com/us/podcast/bad-faith/id1531192509"><em>Bad Faith</em></a>, for the latest episode of <a href="https://podcasts.apple.com/us/podcast/vox-conversations/id1081584611"><em>Vox Conversations</em></a>. As a Black woman and former press secretary for Sen. Bernie Sanders’s 2020 presidential campaign, Gray brings a unique perspective to these debates, and I’ve wanted to engage with her for a long time. She has a lot to say about race and class and why the problem with Democrats isn’t merely about strategy or messaging — it’s about policy.</p>
<p id="Dq1Zc9">Below is an excerpt from our conversation, edited for length and clarity. As always, there’s much more in the full podcast, so subscribe to <em>Vox Conversations</em> on <a href="https://apps.apple.com/us/app/vox-conversations/id1215557536">Apple Podcasts</a>, <a href="https://podcasts.google.com/search/vox%20conversations">Google Podcasts</a>, <a href="https://open.spotify.com/show/6NOJ6IkTb2GWMj1RpmtnxP">Spotify</a>, <a href="https://www.stitcher.com/show/vox-conversations">Stitcher</a>, or wherever you listen to podcasts.</p>
<div id="hRXax5"><iframe src="https://open.spotify.com/embed/episode/7zlfErJ8IZlrP2lzFEpgJz?utm_source=generator" width="100%" height="232" frameborder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture"></iframe></div>
<p id="Rie8ma"></p>
<hr class="p-entry-hr" id="mSoTOi">
<h4 id="RsNY9X">Sean Illing</h4>
<p id="WNmbTk">The big debate on the left right now is over what people are calling “<a href="https://www.nytimes.com/2021/10/08/opinion/democrats-david-shor-education-polarization.html">popularism</a>.” The basic idea is pretty simple: Democrats should figure out which views are popular, and which aren’t, and then frame their message accordingly. There’s some obvious wisdom to that, but also some limitations. Why do you think Democrats are losing non-college educated whites, and even increasingly losing ground among Black and Latino voters? Is it a policy problem? Is it a messaging problem? Is it something else?</p>
<h4 id="CC8PZd">Briahna Joy Gray </h4>
<p id="k0stu5">Well, I’d say that it is definitely a policy problem, but not just that they weren’t running on popular policies, which is true. They’ll either run on them and betray those promises, the way Biden has done with a $15 minimum wage, canceling student debt, marijuana decriminalization, etc. Or, they won’t run on them to begin with. So that’s, let’s say, Joe Biden, ignoring the fact that <a href="https://www.newsweek.com/87-democrats-support-medicare-all-though-joe-biden-doesnt-1522833">88 percent</a> of Democrats support <a href="https://morningconsult.com/2021/03/24/medicare-for-all-public-option-polling/">Medicare-for-all</a>. </p>
<p id="B6wQSq">But my feeling about it is having policies that are very, very popular is useful rhetorically. If I can say that 88 percent of Democrats and 50 percent, approximately, of Republicans support Medicare-for-all, I can use that as a rhetorical cudgel to ask why the Democratic Party can only get 118 members of the House to sign on to the Medicare-for-all legislation. I can use it to draw a contrast between the will of the people and what our elected officials are willing to do, and then use that to open up a conversation about what’s motivating elected officials, other than their constituents.</p>
<p id="LVF0CS">What I don’t think is right is to exclusively support policies that you should be supporting ethically, as a matter of principle, just because they’re not popular. And we all are familiar, I think, with the examples of how unpopular the civil rights movement was, and Martin Luther King was as a human being, when that activism was ongoing. And some people look at, say, slogans like “<a href="https://fivethirtyeight.com/features/how-views-on-black-lives-matter-have-changed-and-why-that-makes-police-reform-so-hard/">defund the police</a>,” principles like police abolition, that was polling up to 40 percent last spring and summer, after the murder of George Floyd really horrified the country and galvanized all those protests.</p>
<p id="tiDizq">What happened then was an entire summer of Joe Biden and the Democratic Party making the argument that to support defunding, to support these protests, was to jeopardize Joe Biden’s chances of defeating Donald Trump. And ... when presented with that zero-sum equation, people started to back away from the slogan and their support from protests in the media and in the public sphere, and the polling started to shift.</p>
<p id="blyBOV">Now, you could also imagine a world with a different kind of candidate, who rode the coattails of the popular movement, and the fact that even Republicans were very sympathetic, after the on-camera murder of George Floyd, toward meaningful police reform. There was some openness, there were some cracks there among the libertarian right on this issue, to push the polls the other way. </p>
<p id="kk5QlW">But polls are only weaponized by corporate parties to explain why they shouldn’t do something. And when polls are inconvenient, they’re ignored. There is absolutely no conversation in this country about the ability to use persuasion, and what I would argue is the true work of politics, to push polls for principles that you believe in, in a positive direction.</p>
<h4 id="vnxuJl">Sean Illing</h4>
<p id="OStD5N">You’re a comms person, so I really want to hear your take on “message discipline.” I have to say I’m very skeptical of the possibilities of this and I’d love to be convinced that I’m wrong. My view is that what Democrats say is far less important than what the voters they’re trying to reach can hear. We have a polarized media environment, and because of that there’s a wall between what Dems are saying and what voters are hearing, and that wall is an insulated right-wing media machine that exists to reinforce conservative propaganda and define the Democrats in the minds of voters. </p>
<p id="TFCvTD">I’m not saying the Dems should say dumb or unpopular stuff, but I’m also not sure it matters as much we’d like to believe. Where am I going wrong here?</p>
<h4 id="8RrYJp">Briahna Joy Gray</h4>
<p id="RwGz2s">I think that Donald Trump putting those checks in people’s pockets mattered, I think that Joe Biden promising to put more checks in people’s pockets, and then delivering less than was promised, mattered, left a bad taste in people’s mouths. Look, we’re on Covid, we’re still shut down. I’m a professional podcaster, I don’t get out much. But one of the ways that I can try to judge what people who are different from me, in different contexts, are thinking and feeling about politics is to look at the comment sections in nonpolitical spaces. So I’ll go to something like The Shade Room, pop culture websites, who occasionally post clips about political news, and see what the people underneath are saying.</p>
<p id="kDI9xQ">People are still talking about how they were promised $2,000 and didn’t get it. People are still talking about it. The Biden administration is clearly trying to present an image that the crisis has been handled, and the recovery is well on its way. And not to diminish what has been achieved on that score, but it does them a disservice to gaslight enormous amounts of Americans who are in a more precarious situation than they’ve ever been in their lives, and for whom a $2,000 check, a $1,600 check, got eaten up immediately.</p>
<p id="s69kXo">I feel like a lot of people in those comment sections are still talking about, “Well, I thought my student debt was getting canceled.” Forty-four million Americans have student loan debt. Seniors are the fastest growing population with student loan debt, and Social Security checks are being garnished at quite a clip to pay that student loan debt. If those 44 million Americans had their student loan debt canceled, which Joe Biden could do by executive order, I promise you, voters would feel that, and it would cut through a lot of noise of the Fox News machine.</p>
<p id="QRqEgz">I think that when you actually deliver for voters, they absolutely feel it, and it matters. And my last point of proof for that would be FDR, who delivered in such a way, that they had to change the rules. He had to die to get out of office, and they had to change the rules, so nobody could do that again, because he got reelected so many times. Right?</p>
<h4 id="xSOzsi">Sean Illing</h4>
<p id="8b1Wwt">This is why I keep coming back to the media landscape. It’s a totally different world now. I think less about changing minds and more about dictating salience, because I actually think most people don’t really have fixed or coherent views, and they’re pretty pliable. It’s all about what issues are salient at any given time, and why. If a conservative candidate, or the Republican Party, is determined to make <a href="https://www.vox.com/policy-and-politics/2021/11/4/22761168/virginia-governor-glenn-youngkin-critical-race-theory">critical race theory</a> or something like that a salient issue by constantly talking about it, and talking about it to an audience that is pretty insulated, what the hell is a Democratic candidate supposed to do about that?</p>
<h4 id="Iz0it6">Briahna Joy Gray</h4>
<p id="qPDQ2y">You cannot be reactionary, you cannot respond, you cannot spend all of your time explaining why CRT is right and good. I simply will not discuss CRT. Look, the answer is not to say nothing is happening in schools, the answer is not to say that it’s a figment of your imagination or try to argue what the definition of CRT is. I might do that on my show, I’m not a politician. I would not advise any politician to get into the weeds and say, “But okay, what’s being taught is not really CRT.” </p>
<p id="MYRcJC">A lot of the anxiety was actually about school closures, which Republicans were able to capitalize on, this anxiety that parents had, that their kids were not going to get the full benefit of the education they need, because Covid closures have kept them out of the classroom. You have to redirect. And to your point about salience, counterattacking with an issue of greater natural salience than whether or not some acronym that nobody had ever heard of before a year ago should be at the top of the list. </p>
<p id="XvI6aN">So if I were <a href="https://www.vox.com/2021/11/3/22752593/virginia-governor-results-youngkin-wins">Terry McAuliffe</a> running for governor in Virginia, and someone asked me a question about CRT; “Aren’t you concerned about CRT being taught in school?” I would say, “I am concerned, like many Virginia parents, that our kids are not getting the quality of education they have come to expect, because Covid closures cut them out of the classroom, and distance learning is really hard. And I want to make sure, as governor of Virginia, that I bring parents and teachers together to make sure we have these kids prepared, maximally, for the rest of their lives.” </p>
  <figure class="e-image">
        <img alt=" " data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/PL975RNchs29D4_lUfF73qVA5sc=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23034447/GettyImages_1231211421t.jpg">
      <cite>Matt McClain/The Washington Post via Getty Images</cite>
      <figcaption>A kindergarten student sits during his special education class in February 2021 in Alexandria, Virginia.</figcaption>
  </figure>
<p id="69rNsm">“That doesn’t just mean the workplace, that means to be good citizens of this country, that means learning about all of our history, good and bad, and I know that Virginia parents want the same. Now, let’s talk about ways we can deliver on what your economic and social priorities are here in this state.”</p>
<h4 id="KN0P1e">Sean Illing</h4>
<p id="5LzCQ4">I hear all of that. And let me just say very clearly that I think Terry McAuliffe was a bad candidate. But if you told him, “Hey, look, the CRT stuff is hurting your campaign, just shut the hell up about it,” or pivot in the way that you suggested, which I think is the smartest thing you could possibly do, I’m not sure it makes much difference in the end. How much do you think that will help or matter if the right-wing media machine is working in concert to systematically make CRT, or “defund the police,” or whatever “the thing” is at that moment, the central issue? Do you really think that’s something that can be circumnavigated by staying on message?</p>
<h4 id="us07Xx">Briahna Joy Gray</h4>
<p id="s7o5OS">I do. And that is not to say that it’s easy, but here is one thing that I’ve observed. And there’s some people on the left, the Bernie left, the left left ... We’ve been having this conversation about why it is that our media ecosystem is operating so differently than the right-wing or conservative media ecosystem.<strong> </strong>And part of it is that the left media ecosystem is divided. There is very little coordination, there is a very different kind of messaging that’s going on in the corporate MSNBC media cycle or the marginalized, online left media space that I am in, and that I’ve been cordoned off in, because the mainstream media, fundamentally, won’t have someone like me on.</p>
<p id="hC6zE5">I am aware of the fact that I have screengrabs of some poor booker somewhere who suggested me for a popular MSNBC host’s show, who was blacklisted from working for that show again, just because they brought up my name. There’s like an internal war here, and it’s because there’s a real, fundamental disagreement about what’s motivating voters, and what kind of messages you should use to redirect. </p>
<p id="KUvlFT">So liberals and moderate Dems are very confident that just saying everybody’s racist all the time is going to motivate people, and that is the punch to land. They did it with Trump in 2016, and lost; they did it in Trump in 2020, and Covid saved Biden; and they did it with Terry McAuliffe. And the Lincoln Project. Former Republicans, literally, <a href="https://www.washingtonpost.com/dc-md-va/2021/10/29/lincoln-project-torches-charlottesville-youngkin/">staged that tiki torch thing</a>. And I don’t know how many times they had to ... they even tried to make up instances of racism, because that’s the only play that they have. </p>
<p id="Drxtvn">Because what do they have in lieu of identity fear-mongering? Nothing, because they won’t simply support the basic policies that everybody wants. </p>
<p id="Vs3Egm">Now, I could be wrong. It could be that Joe Biden passes a $15 minimum wage, gives everybody another round, or two, or three, or recurring, of $2,000 checks, cancels 44 million Americans’ student loan debt, and people still decide to go and vote for whoever the Republican nominee is. </p>
<p id="l1lCOR">If that happens, sue me. I think you’ll still like the fact that your debt has been forgiven, and that your life is demonstrably better, but I’ll reevaluate if and when Democrats deliver on core promises that are enormously popular and still lose. But we literally have not seen that happen. The last time we had a minimum wage raise was 2009, the year of our Lord 2009. It has been the last longest period [without a] minimum wage raise since my guy, FDR, founded the thing nearly a century ago.</p>
<hr class="p-entry-hr" id="EUBHTt">
<p id="VR7RjK"><em>To hear the rest of the conversation, </em><a href="https://open.spotify.com/episode/7zlfErJ8IZlrP2lzFEpgJz?si=4ErgMqiJTxyDFscaXBJXCQ"><em>click here</em></a><em>, and be sure to subscribe to </em>Vox Conversations<em> on </em><a href="https://apps.apple.com/us/app/vox-conversations/id1215557536"><em>Apple Podcasts</em></a><em>, </em><a href="https://podcasts.google.com/search/vox%20conversations"><em>Google Podcasts</em></a><em>, </em><a href="https://open.spotify.com/show/6NOJ6IkTb2GWMj1RpmtnxP"><em>Spotify</em></a><em>, </em><a href="https://www.stitcher.com/show/vox-conversations"><em>Stitcher</em></a><em>, or wherever you listen to podcasts.</em></p>


title: Kyle Rittenhouse and the scary future of the American right
author: Zack Beauchamp
feedurl: http://www.vox.com/rss/policy-and-politics/index.xml
content_mime_type: text/html
guid:
https://www.vox.com/policy-and-politics/22792136/kyle-rittenhouse-verdict-militia-violence-self-defense

url:
https://www.vox.com/policy-and-politics/22792136/kyle-rittenhouse-verdict-militia-violence-self-defense

content:
  

    <figure>
      <img alt="A cut-out of Kyle Rittenhouse’s face and hand in the foreground, the courthouse and a protester in the background." src="https://cdn.vox-cdn.com/thumbor/uEqaSVWF3QKMKnpg3dAlySdnlgw=/0x0:4988x3741/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70179446/1236601901.0.jpg" />
        <figcaption>A poster of Kyle Rittenhouse held in protests outside his trial. | Nathan Howard/Getty Images</figcaption>
    </figure>

  <p>The verdict exposed a disturbing point of agreement between violent militias and the GOP.</p> <p id="AG6sLl">In the apocalyptic imagination of the American far-right, violence plays a central role. The right’s radical extremists believe that mainstream American institutions have been rotted from within, undermined by the nefarious influence of Blacks, Jews, and liberals. White Americans are justified — maybe even obligated — to take up arms to protect their people and their culture.</p>
<p id="86Ct4c">Immediately after Kyle Rittenhouse’s acquittal on Friday, the fringe right’s online forums lit up with celebration — and among some, a belief that they too can kill without legal consequence. On Telegram, a secure messaging app popular with extremists, <a href="https://www.adl.org/blog/right-wing-extremists-cheer-rittenhouse-verdict-in-predictable-fashion">the leader of a neo-Nazi group wrote</a> that the verdict gives “good Americans legal precedent and license to kill violent commies without worrying about doing life in prison if we defend ourselves in a riot.” </p>
<p id="PaVJOU">There is every reason to take such rhetoric seriously. “It has never taken more than a whisper of approval to fan the flames of militant right action. The Kenosha acquittal is a shout,” <a href="https://twitter.com/kathleen_belew/status/1461773034931511297">writes Kathleen Belew</a>, a historian of white power movements at the University of Chicago. Based on how it’s been cheered in some quarters, the verdict is potentially setting the stage for future violence.</p>
<p id="Cw3pAS"><a href="https://acleddata.com/2021/08/23/armed-assembly-guns-demonstrations-and-political-violence-in-america/">Data from the Armed Conflict Location &amp; Event Data Project</a> shows that, between January 2020 and June 2021, there were 560 protest events where either demonstrators or counter-demonstrators showed up with guns — about 2 percent of all protests in the United States during the studied time period. The data also shows that these demonstrations are more than five times more likely to involve violent or destructive behavior as compared to unarmed ones. </p>
<p id="VyfvLp">Johns Hopkins political scientist Lilliana<strong> </strong>Mason — the co-author (with Nathan Kalmoe) of the forthcoming <em>Radical American Partisanship </em>— worries that this trend will escalate. At future protests on charged issues like racial justice and voting rights, armed right-wing counterprotesters may continue to descend on America’s cities, in increasingly large numbers. “The January 6 folks coming by, Kyle Rittenhouse-style,” as she put it. </p>
<p id="akNvXD">Mason and Kalmoe’s research documents rising support for political violence in the US, prompting worries that eventually, the killing in Kenosha will repeat itself elsewhere. The more it does, the more likely it is to lead to retaliatory violence from the other side. The ultimate risk may be what Mason terms “an endless cycle” of partisan killing, like <a href="https://www.economist.com/prospero/2017/11/27/italians-are-still-haunted-by-the-years-of-lead">Italy’s Years of Lead</a> or <a href="https://www.pbs.org/wgbh/aia/part4/4p2952.html">pre-Civil War Bleeding Kansas</a>. </p>
<p id="73TQEO">Looking at the reaction to the verdict from mainstream conservatives makes the current predicament even scarier. Far from cooling the passions of the fringes, mainstream <a href="https://twitter.com/zackbeauchamp/status/1461793075160928261">Republican politicians</a> and <a href="https://www.theguardian.com/us-news/2021/nov/22/kyle-rittenhouse-fox-news-tucker-carlson-interview">allied media</a> are canonizing Rittenhouse, elevating him into a model for ordinary conservatives to follow.</p>
<aside id="HWuNsv"><div data-anthem-component="readmore" data-anthem-component-data='{"stories":[{"title":"Kyle Rittenhouse’s tears","url":"https://www.vox.com/2021/11/11/22775093/kyle-rittenhouse-trial-kenosha-testimony-crying"}]}'></div></aside><p id="5NQfjm">Rittenhouse’s acquittal is in a certain sense unsurprising: <a href="https://nymag.com/intelligencer/2021/11/rittenhouse-jury-verdict-self-defense-legal-analysis.html">America’s self-defense laws are incredibly permissive</a>, making it difficult to convict someone in a violent situation who claims to fear for their life. Yet it is one thing for conservatives to say the jury reached the legally correct verdict and another thing entirely to describe Rittenhouse as a moral exemplar: a gun-toting American standing guard against the country’s internal enemies. </p>
<p id="UT01gp">“By suggesting he is a hero,” Mason tells me, “the implication is that what he did was not a tragedy at all. It wasn’t a conflict gone lethally wrong, it was a good lethal conflict.”</p>
<p id="dro3CQ">A bloody turn in this deeply polarized moment for American democracy need not be inevitable. But the Rittenhouse case has revealed a scary convergence between the fringe and the mainstream on the wisdom of turning guns against their political enemies. Its resolution validates that belief in ways that challenge the basic nonviolent compact at the heart of democratic political life.</p>
<h3 id="4YENdX">After Rittenhouse’s acquittal, the fringe right gears up for battle</h3>
<p id="5h9wKj">According to the Anti-Defamation League, a Jewish nonprofit that tracks the fringe right, extremists <a href="https://www.adl.org/blog/right-wing-extremists-cheer-rittenhouse-verdict-in-predictable-fashion">have spent the past year lionizing Rittenhouse</a> as an example of a white man taking the struggle against the left into his own hands. The “not guilty” verdict was, for them, a kind of vindication.</p>
<p id="Rm23b4">“As soon as the jury announced its verdict, online extremist spaces erupted in cheers and self-congratulatory rhetoric,” the ADL explained in a Friday blog post. “Supporters heralded the Rittenhouse verdict as a victory for the principle of self-defense and providing legal precedent for violent responses to perceived threats, and some argued that people no longer need to avoid acting during tense situations for fear of legal repercussions, a potentially dangerous development.”</p>
<p id="3d3hiU">The ADL <a href="https://www.adl.org/blog/right-wing-extremists-cheer-rittenhouse-verdict-in-predictable-fashion">documented</a> a wealth of examples, including a large number of right-wing extremists interpreting the ruling as a license to engage in intimidation or violence at future Black Lives Matter protests:</p>
<ul>
<li id="10JadB">A user on a chat room called “Warriors for America (Oath Keepers)” wrote that it was “open season on lib trash commies!”</li>
<li id="UmIJOD">A Twitter user affiliated with the extreme right <a href="https://www.vox.com/2020/6/8/21276911/boogaloo-explained-civil-war-protests">boogaloo movement</a> — which reportedly seeks to foment civil disorder — wrote “WE CAN PROTECT OUR COMMUNITIES NOW REFERENCING RITTENHOUSE V. Wisconsin.”</li>
<li id="xYPDtm">One member of patriots.win, a pro-Trump web forum, wrote that “BLMKKK gotta be shitting. We have permission to defend ourselves now.”</li>
</ul>
<p id="2xBg5g">The ADL is not the only organization or expert to notice a surge in right-wing calls to arms on Friday. </p>
<p id="VG5V7T">Within minutes of the jury’s announcement, “the verdict [was] already being rallied around as justification for racial violence” <a href="https://twitter.com/AlexBNewhouse/status/1461762667262193669">writes Alex Newhouse</a>, the deputy director of the extremism research center at the Middlebury Institute of International Studies. “Rittenhouse has been ‘sanctified’ (joining the ranks of mass shooters like the Christchurch, El Paso, Norway shooters).”</p>
<p id="VOsVhd">Over direct message, Newhouse pointed me to a group of extremist Telegram channels, frequented by people he called “the absolute worst of the worst.” Perusing these forums, I found memes celebrating Rittenhouse’s violence, dancing on the graves of those he killed, and a sense that the ruling was a real victory for their movement.</p>
<p id="kAYm1p">“Hey parasites, Kyle Rittenhouse killed 2 of your friends and got away with it. Now he’s celebrating life as a free man, and being showered with praise,” one Telegram extremist wrote. “Your impotent rage only makes the victory all the more sweet for us. Literal National Socialists are celebrating your failure. ... Hail Rittenhouse.”</p>
<p id="13QN1F">Another far-right group claimed to be “monitoring” a protest in Boston after the verdict, vowing that “our activists will intervene if senseless attacks are carried out by Antifa on white civilians.” </p>
<p id="m5Eeg8">As of Monday, there haven’t yet been national media reports of deadly far-right violence in Boston or other parts of the country since the verdict. This reflects the fact that many of these Telegram posters are just that: posters. They talk tough on the internet but don’t actually plan to act on it in practice.</p>
<p id="yI3j2u">But all it takes is one to really mean it: The <a href="https://www.vox.com/the-highlight/2019/10/18/20899208/tree-of-life-anniversary-pittsburgh-shooting-american-jews">Pittsburgh synagogue shooter</a>, for example, posted about his plans on <a href="https://www.npr.org/2018/10/28/661532688/a-look-at-gab-the-free-speech-social-site-where-synagogue-shooting-suspect-poste">the social media site Gab</a> before he killed 11 people in 2018. And for that reason, experts are warning that the Rittenhouse verdict could have far-ranging consequences for the safety of American protesters and American politics more broadly.</p>
  <figure class="e-image">
        <img alt="A person in camouflage gear, carrying a large gun and a United States flag, stands outside a statehouse." data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/z-I9j4f-QijpV-TQC99Zb9AT4Gc=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23035050/1230643795.jpg">
      <cite>Joseph Prezioso/AFP/Getty Images</cite>
      <figcaption>Armed members of the boogaloo movement outside the State Capitol in Concord, New Hampshire, in January.</figcaption>
  </figure>
<p id="6svby1">“We’ve already seen a lot of armed activity around protests over the last couple years,” J.M. Berger, an associate fellow at the International Center for Counter-Terrorism at the Hague, tells me. “This verdict likely ensures that those armed people will feel more comfortable taking a much more confrontational stance.”</p>
<p id="pcr4RK">This is how the country could start drifting in the direction of Mason’s nightmare scenario. The more Rittenhouse’s acquittal inspires armed right-wingers to take it on themselves to “police” liberal protests, the more likely it is that there is another deadly incident. This is especially the case when far-right extremists who’ve been marinating in fantasies of violence get involved, as the country saw in the murder of Heather Heyer during the 2017 Charlottesville, Virginia, far-right rally. </p>
<p id="tDAr2C">In their studies of previous episodes of political violence, Mason and Kalmoe document a self-perpetuating effect: “Violent episodes tend to increase support for violence,” as Mason puts it. People see their side being killed and see violence against their enemies as a justified response. </p>
<p id="ZdY9f7">Rittenhouse’s acquittal might not be the end of the story. It could be the beginning of a bigger and scarier one.</p>
<h3 id="enh1dT">The dangerous convergence of the violent fringe and the GOP mainstream </h3>
<p id="ICIYax">Violent white nationalists on the internet’s fringes weren’t the only ones to immediately celebrate Rittenhouse’s acquittal. Within minutes of the not-guilty verdict, Rep. Madison Cawthorn (R-NC) had already offered him an internship.</p>
<p id="29Co1D">“Kyle, if you want an internship reach out to me,” <a href="https://www.instagram.com/stories/madisoncawthorn/2710578555990905722/?hl=en">he wrote on Instagram</a>, adding that his supporters should “be armed, be dangerous, and be moral” — like Rittenhouse, presumably.</p>
<p id="GBj1N6">Cawthorn has competition. Two other House Republicans, Reps. Paul Gosar (AZ) and Matt Gaetz (FL), have also <a href="https://www.nbcnews.com/news/us-news/matt-gaetz-says-s-open-hiring-kyle-rittenhouse-intern-rcna5972">suggested</a> they want Rittenhouse in their office. Gosar, fresh off of an official censure for <a href="https://www.vox.com/2021/11/17/22787188/paul-gosar-censure-aoc-joe-biden">posting a video in which he is depicted killing Rep. Alexandria Ocasio-Cortez (D-NY)</a>,  <a href="https://twitter.com/DrPaulGosar/status/1461761699728572425">tweeted that</a> “I will arm wrestle Matt Gaetz to get dibs for Kyle as an intern.”</p>
<p id="6yM3iU">The celebrations in conservative media were, if anything, even more effusive. </p>
<p id="Z4WvAc">“Not only did Kyle Rittenhouse have the right to do this, I encourage you to do it,” <a href="https://www.mediamatters.org/steven-crowder/youtube-steven-crowder-encourages-people-take-arms-against-protesters-its-not-only">said Steven Crowder</a>, a popular right-wing YouTube host. “Some people needed a catalyst, let today be the day,” he continued — adding that conservatives will make sure “there will not be another town burned down” if they take up arms against “this evil of the left.”</p>
<p id="wM0hwc">“Kyle Rittenhouse wound up on the streets in Kenosha with a gun in the first place for one reason. He was there because, in the summer of 2020, the leadership of the Democratic Party endorsed mob violence for political ends,” <a href="https://video.foxnews.com/v/6282863956001#sp=show-clips">Fox’s Tucker Carlson said on Friday evening</a>, while touting an exclusive interview to air on Monday night. </p>
<p id="Pvhdt6">“If Kyle Rittenhouse can save his own life, you can too,” he said. </p>
<p id="ZKcMyY">In theory, it would have been possible for conservatives to say the verdict was the right one without lionizing Rittenhouse. A handful of anti-Trump conservatives — like David French, who is <a href="https://www.nationalreview.com/2019/08/second-amendment-right-to-effective-self-defense-more-important-than-ever/">also a staunch Second Amendment supporter</a> — <a href="https://twitter.com/DavidAFrench/status/1461779998906503171">did just that</a>.</p>
<p id="KBxDcj">But that’s not the tack that much of the mainstream right has chosen. They sound less like French than they sound like the extremists on Telegram — turning Rittenhouse into a hero, a model to be emulated, rather than a cautionary tale. </p>
<p id="KQTmkE">“The rhetoric is stated slightly differently, but the end result is the same: This is a young man who did the right thing,” Art Jipson, a professor at the University of Dayton who studies white racial extremism, told <a href="https://www.washingtonpost.com/national/reaction-rittenhouse-verdict/2021/11/19/bd9c9ede-47d4-11ec-973c-be864f938c72_story.html">the Washington Post</a>. “The arguments start from different origin points, but they create an almost iconic, or at least a powerful, symbol.” </p>
  <figure class="e-image">
        <img alt="Two people argue face to face outside a state building." data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/ZozyNfsvF4xujd5dvnQeoepitV8=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23035070/1236626871.jpg">
      <cite>Nathan Howard/Getty Images</cite>
      <figcaption>Pro and anti-Rittenhouse protesters argue outside the Kenosha County Courthouse on November 17.</figcaption>
  </figure>
<p id="Ch5sha">In some cases, there are ties among the Republicans celebrating Rittenhouse and parts of the violent fringe. Gosar met with an Arizona chapter of the Oath Keepers militia and, according to one participant, said that <a href="https://www.nytimes.com/2021/01/29/us/republicans-trump-capitol-riot.html">America was already in the midst of a civil war</a>. Gaetz attended a rally where <a href="https://www.vox.com/2018/10/15/17978358/proud-boys-trump-biden-debate-violence">the Proud Boys</a>, a “Western chauvinist” street brawling group, was providing security — and then <a href="https://www.howtofightantisemitism.com/timeline/the-proud-boys-provide-security-at-an-event-headlined-by-matt-gaetz">praised them on his podcast</a>. In this, they were following former President Donald Trump’s praise of the fringe, referring to the “very fine people” at the Charlottesville rally and telling the Proud Boys to “stand back and stand by” during a 2020 presidential debate.</p>
<p id="wYHcRA">The fringe and the mainstream right differ on many key points — among others, the bigotry of the extremists is far more naked and eliminationist — but they agree on a conspiratorial worldview in which liberals are not mere political rivals but existential threats to the American way of life. </p>
<p id="id__qkuvoraa8o">“One of the biggest problems this country faces is perceived polarization, driven by misinformation on the right [claiming] leftist extremists want to destroy our way of life and, thus, it is reasonable to do everything in our power to stop them,” <a href="https://twitter.com/ylelkes/status/1462574955271442433">writes Yphtach Lelkes</a>, a scholar of political rhetoric at the University of Pennsylvania.</p>
<p id="jx0QS7">In this narrative, every illiberal move Republicans and conservatives make is a form of self-defense. <a href="https://www.vox.com/policy-and-politics/22368044/georgia-sb202-voter-suppression-democracy-big-lie">Seizing partisan control of vote counting</a> is justified as a means of stopping Democratic fraud. <a href="https://www.npr.org/2021/11/11/1054798508/when-schools-ban-books">Banning school libraries from carrying books by Black and LGBTQ authors</a> is a means of stopping liberal indoctrination. Laws that <a href="https://slate.com/business/2021/04/drivers-hit-protesters-laws-florida-oklahoma-republicans.html">protect drivers who run over protesters</a> from lawsuits are a way of protecting communities from rioters.</p>
<p id="oALbqM">Rittenhouse is a powerful symbol for the right because he acted out a long-held fantasy — a man with his gun, standing up to the liberal hordes. That he was found not guilty is validation that fantasy could be made reality, a godsend to genuine extremists. </p>
<p id="duV30x">But his acquittal’s celebration across a much broader spectrum of the right is perhaps even more troubling. It threatens the mainstream consensus that political violence has no place in a democratic society — and the related notion that Americans need to share a country with people who disagree with them.</p>


guid: https://www.vox.com/2021/11/23/22797722/kyle-rittenhouse-tucker-carlson-kenosha-jacob-blake
title: The ironic spectacle of Kyle Rittenhouse’s Tucker Carlson interview
author: Jamil Smith
url: https://www.vox.com/2021/11/23/22797722/kyle-rittenhouse-tucker-carlson-kenosha-jacob-blake
feedurl: http://www.vox.com/rss/policy-and-politics/index.xml
content_mime_type: text/html
content:
  

    <figure>
      <img alt="" src="https://cdn.vox-cdn.com/thumbor/ZODtXage18v1bh7AkOxJqI_vFwM=/379x0:5190x3608/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70183998/GettyImages_1236623350.0.jpg" />
        <figcaption>Kyle Rittenhouse was acquitted last week in the shooting deaths of two men during racial justice protests in Kenosha, Wisconsin, in summer 2020. | Sean Krajacic/Getty Images</figcaption>
    </figure>

  <p>Days after his acquittal and as protests continued, he likened his jail cell to “a one-star hotel” and lashed out at the American legal system. </p> <p id="9SYDqR">Ever since<strong> </strong>Kyle Rittenhouse shot and killed two men and injured a third in Kenosha, Wisconsin, during racial justice demonstrations last year, legions of <a href="https://www.vox.com/policy-and-politics/22792136/kyle-rittenhouse-verdict-militia-violence-self-defense">conservatives and far-right extremists</a> have celebrated an 18-year-old as both a hero and a victim. Soon after receiving a “not guilty” verdict last Friday, Rittenhouse attempted to take part in his own beatification.</p>
<p id="hYBhcJ">Adopting a posture both confrontational to his critics and satiating for his most ardent supporters,<strong> </strong>Rittenhouse appeared in his first national television interview on Fox News’s <em>Tucker Carlson Tonight </em>after a Wisconsin jury acquitted him on all charges in the August 2020 shooting deaths of Joseph Rosenbaum and Anthony Huber and injury of Gaige Grosskreutz. Even as Carlson’s interview aired during primetime, <a href="https://www.npr.org/2021/11/20/1057643957/kyle-rittenhouse-verdict-prompts-protests-in-several-cities">protests over the verdict</a> that began over the weekend continued in major cities. </p>
<p id="cHvyqp">The interview came as Rittenhouse’s trial and subsequent verdict has stirred up fierce debate on some of the nation’s most contentious issues, including gun rights and the <a href="https://www.washingtonpost.com/politics/2021/11/21/americans-do-not-want-guns-protests-this-research-shows/">right to protest</a> without threat of violence. However, the court proceedings were often deeply unserious, starting with Judge Bruce Schroeder declaring that the attorneys in the case <a href="https://www.nbcnews.com/news/us-news/men-shot-rittenhouse-can-t-be-called-victims-during-trial-n1282466">were not allowed to refer to</a> Rittenhouse’s victims as “victims.” The defendant himself actually helped randomly select the jury, using an <a href="https://time.com/6120079/kyle-rittenhouse-jury/">unusual</a>, old-fashioned lottery-style draw. And lest we forget, there was a day of dubitable <a href="https://www.vox.com/2021/11/11/22775093/kyle-rittenhouse-trial-kenosha-testimony-crying">sobbing on the witness stand</a>.</p>
<aside id="nqvTRq"><div data-anthem-component="readmore" data-anthem-component-data='{"stories":[{"title":"Kyle Rittenhouse’s tears","url":"https://www.vox.com/2021/11/11/22775093/kyle-rittenhouse-trial-kenosha-testimony-crying"}]}'></div></aside><p id="8BvZa4">Contrary to that weepy court testimony, Rittenhouse mostly spoke with a calm voice as he swung at Carlson’s softballs. The host did his utmost to center Rittenhouse’s trauma and pain, teeing him up to lash out at President Joe Biden and invoke incorporeal forces like a “mob mentality” that he blamed for his legal plight. </p>
<p id="Jh2wzq">His guest also said that he supported Black Lives Matter and that those committing violence during the demonstrations following Jacob Blake’s shooting by Kenosha police were “opportunist, taking advantage of the BLM movement.”</p>
<p id="zUs4hI">It was odd to hear Rittenhouse say that, particularly in the middle of a Fox News interview. Stating one’s social-justice bona fides serves, for white liberals, to signify allyship. But for conservatives or people playing to that audience’s sympathies, doing so is often a move to seek cover from charges of racism. The resurgence of extremist, white supremacist violence, and intimidation during the last several years has been, in their view, an act of self-defense. </p>
<p id="vH0NXd">How, then, in that context, are we to take it when we see Rittenhouse argue to Carlson, “It wasn’t Kyle Rittenhouse on trial in Wisconsin; it was the right of self-defense on trial”? When the same people who support Rittenhouse believe the country needs defending from people who aren’t white and don’t believe in defending Black lives, he can say he supports Black Lives Matter all he wants. </p>
<p id="evvFEt">What’s evident, no matter Rittenhouse’s intent, is that he came to the right show on the right network. </p>
<p id="4zDuJ2">True to his program’s formula, Carlson’s hour was devoted to stoking misguided cultural grievances on Rittenhouse’s behalf. <a href="https://www.nytimes.com/2021/08/06/opinion/tucker-carlson-viktor-orban.html">Known for its reckless demagoguery and fabulism</a>, <em>Tucker Carlson Tonight </em>regularly focuses on convincing his heavily white audience that they’re right to fear a society supposedly out to get them (and only them). Throughout the broadcast, the host promoted a forthcoming documentary about Rittenhouse’s trial, despite <a href="https://www.nytimes.com/2021/11/21/business/jonah-goldberg-steve-hayes-quit-fox-tucker-carlson.html">the ongoing controversy</a> about his revisionist January 6 special.  </p>
<p id="CqhpP3">Acquittal, in the Fox News arena, became absolution. “What a sweet boy,” Carlson remarked about the 18-year-old before a commercial break.</p>
<p id="6KCMgW">It was the seventh anniversary of the day that an actual boy, <a href="https://www.vox.com/2014/11/26/7297265/tamir-rice-age-police">12-year-old Tamir Rice</a>, was mistaken for a man by Cleveland police before an officer shot him dead. But on <em>Tucker Carlson Tonight</em>, Rittenhouse was supposedly the victim this November 22, and the host gave him every chance to deny the most injurious claim his detractors have made. No, not that he is a murderer — that he is a bigot.</p>
<p id="6pkNNy">“I’m not a racist person,” Rittenhouse said, adding that he felt his case was not about race. (The victims in the case were all white, but prosecutors noted earlier this year that Rittenhouse had been <a href="https://www.washingtonpost.com/nation/2021/01/14/kyle-rittenhouse-proud-boys-bar/">photographed with Proud Boys</a> and flashing a hand sign known as a symbol for “white power.” ) Whether this <em>is </em>about race is not Rittenhouse’s decision, though, and whether he is in fact racist <a href="https://youtu.be/b0Ti-gkJiXc">seems irrelevant</a>. He likely won’t dissuade his critics in the press and elsewhere who have labeled him a white supremacist, nor the self-identifying <a href="https://www.vox.com/2021/11/11/22775093/kyle-rittenhouse-trial-kenosha-testimony-crying">neo-Nazis celebrating his acquittal</a>. More interesting, however, was how Rittenhouse described being affected by his time spent within American jurisprudence.</p>
<p id="n8fKGx">Rittenhouse had already twice stated his support for the Black Lives Matter movement (which strongly <a href="https://twitter.com/Blklivesmatter/status/1462871952478007297">rebuked him in a tweet</a> about the interview) when he took note of the inequities and degradation he experienced while in jail.</p>
<p id="Yyrw4x">“I believe there needs to be change,” Rittenhouse said, “I believe there’s a lot of prosecutorial misconduct — not just in my case, but in other cases. And it’s just amazing to see how much a prosecutor can take advantage of somebody. If they did this to me, imagine what they could have done to a person of color who doesn’t maybe have the resources I do or isn’t widely publicized, like my case.”</p>
<p id="UrhB35">Rittenhouse spoke of a jail cell he likened to “a one-star hotel,” where he had a mobile phone and tablet, but allegedly no running water. He didn’t shower for nearly a month, he told Carlson. Though he complained of being pepper-sprayed in Kenosha, Rittenhouse spoke glowingly of law enforcement — even thanking the guards at his first jail and praising their professionalism. But he also detailed how he spent more than 80 days in jail due to a problem too many defendants have: incompetent counsel. His allies at the time included QAnon conspiracy theorist Lin Wood; Rittenhouse <a href="https://www.thedailybeast.com/kyle-rittenhouse-rips-lawyers-lin-wood-and-john-pierce-as-they-feud-over-his-dollar2m-bail">alleged Wood exploited</a> his case after Wood sought to claw back money raised for Rittenhouse’s bail. But some defendants are far unluckier, and some <a href="https://www.vox.com/2021/11/18/22787680/oklahoma-execution-julius-jones-lethal-injection">end up on death row</a>. </p>
<p id="PiT24S">Carlson reacted to these details as if he was shocked to hear such things could happen in America, as if a man named <a href="https://www.vox.com/2021/11/18/22787680/oklahoma-execution-julius-jones-lethal-injection">Julius Jones</a> professing his innocence in Oklahoma had not narrowly escaped lethal injection the day before Rittenhouse’s verdict. Carlson’s only reference to the man whose shooting prompted the Kenosha protests where Rittenhouse fired on the three men was a baseless claim that “the media lies about the shooting of Jacob Blake.” </p>
<p id="GKlV0v">Still, almost by accident, Carlson’s program reinforced that there are many things wrong with the American project. They could have done an hour on Monday night reexamining Rice’s death and the family’s campaign to have his killing reconsidered for prosecution by the Department of Justice. Such a show might have made the same or similar points, but it’s foolish to expect Carlson, known for his <a href="https://www.cnn.com/2021/04/09/media/adl-letter-fox-news-tucker-carlson/index.html">openly racist appeals</a> to white grievances, to recognize what’s wrong with America without peering through the lens of victimhood. </p>
<aside id="KoWrN8"><div data-anthem-component="readmore" data-anthem-component-data='{"stories":[{"title":"Kyle Rittenhouse and the scary future of the American right","url":"https://www.vox.com/policy-and-politics/22792136/kyle-rittenhouse-verdict-militia-violence-self-defense"}]}'></div></aside><p id="DOyqna">If only Carlson and Rittenhouse were able to discuss the terrible state of American jurisprudence without putting themselves in the spotlight. For all of Rittenhouse’s recognition of America’s faulty system of criminal punishment, the two still failed to acknowledge that it was the AR-15-style rifle he wielded that instigated the intimidation and harassment. Had they, the ridiculous spectacle on Fox News might have come close to having some worth.</p>
<p id="g8kKe3"></p>
<p id="CfZ880"></p>


guid: https://www.vox.com/future-perfect/22798944/jerome-powell-federal-reserve-unemployment-inflation
title: Biden made one of the best decisions of his presidency this week
author: Dylan Matthews
url: https://www.vox.com/future-perfect/22798944/jerome-powell-federal-reserve-unemployment-inflation
feedurl: http://www.vox.com/rss/policy-and-politics/index.xml
content_mime_type: text/html
content:
  

    <figure>
      <img alt="Fed chair Jerome Powell speaks from a lectern as President Joe Biden stands behind him and looks on." src="https://cdn.vox-cdn.com/thumbor/TUz7FwYYfrG0hMqkuu408KFk08U=/820x0:7412x4944/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70186900/GettyImages_1354936818.0.jpg" />
        <figcaption>On Monday, President Joe Biden picked Jerome Powell to continue to serve as the chair of the Federal Reserve. | Alex Wong/Getty Images</figcaption>
    </figure>

  <p>America is still 6 million jobs short compared to before Covid-19. Reappointing Jerome Powell as Fed chair could help with that.</p> <p id="ohKiqy">On Monday morning, President Joe Biden made the most important hiring decision of his first term, at least so far as the economy is concerned: He <a href="https://www.nytimes.com/2021/11/22/business/economy/fed-chair-jerome-powell-biden.html">announced</a> he would be reappointing Jerome “Jay” Powell as chair of the Federal Reserve. Lael Brainard, a fellow Fed board member widely rumored to be the runner-up for Powell’s job, would be tapped as vice chair.</p>
<p id="pkjcve">The Fed is perhaps the most underappreciated policymaking body in Washington. It sets what’s known as the federal funds rate, which determines the cost of borrowing for banks and, in turn, can raise or lower interest rates for business loans, credit cards, mortgages, cars, and so on. By raising rates, the Fed can reduce borrowing and spending, slow the economy, and prevent inflation; by cutting them, it can boost spending and reduce unemployment, and possibly raise prices. When it needs to, it can buy US Treasuries and other bonds with money it prints out of thin air to give the economy a boost.</p>
<p id="IypRJe">Only Congress rivals the Fed’s power to determine the course of the economy — and the Fed is able to move much quicker than Congress ever could.</p>
<p id="EQnnEO">Powell, who was first put on the Fed board by President Obama and made chair under President Trump, is expected to breeze through the Senate confirmation process, with both the top Democrat and top Republican on the Senate Banking Committee <a href="https://www.politico.com/news/2021/11/22/biden-renames-powell-to-lead-fed-risking-the-lefts-wrath-523177">praising the pick</a>.</p>
<p id="BN67eA">This is news worth celebrating. As the economics writer Alan Cole <a href="https://fullstackeconomics.com/biden-should-reappoint-jerome-powell/">laid out in his case for Powell</a>, the chair’s first four-year term has seen an epochal shift in monetary policy, away from a singular focus on preventing inflation and toward aggressively attempting to get unemployment as low as possible.</p>
<div class="c-float-right"><div id="z06pLf"><div data-anthem-component="aside:10296380"></div></div></div>
<p id="t7RrI2">That focus is, of course, being tested now that inflation is spiking, and Powell’s second term may require a more aggressive stance toward price increases. That this is the dilemma we find ourselves in is a testament to the fact that Powell helped cut the US unemployment rate by more than two-thirds since it peaked last April.</p>
<p id="YuDyZ5">Powell’s innovation as Fed chair was to really care much more about employment, relative to inflation, than his recent predecessors had.</p>
<p id="gemBv5">In 2019, he <a href="https://www.nytimes.com/2019/10/30/business/economy/federal-reserve-interest-rates.html">began lowering interest rates</a> during an economic expansion, a genuinely unprecedented action that conceded the rate hikes he introduced the previous year were a mistake. </p>
<p id="0sOQJp">He repeatedly invoked <a href="https://www.washingtonpost.com/business/2021/04/17/homeless-tent-city-federal-reserve-jerome-powell/">homelessness</a> and <a href="https://www.bloomberg.com/news/articles/2021-04-06/the-fed-is-making-wall-street-forecasters-pay-attention-to-black-unemployment">high Black unemployment</a> as reasons to keep pushing rates lower, saying the job wasn’t done until it was done for everyone. </p>
<p id="Xh5snF">In 2020, he issued a <a href="https://www.richmondfed.org/publications/research/econ_focus/2021/q1/federal_reserve">new formal framework</a> explicitly pushing the Fed away from its traditional fixation with inflation and toward worrying about employment.</p>
<p id="UeQWKW">He made these changes in the context of a world where inflation was consistently low and employment and wages were short of where they should’ve been. But in 2020, and especially 2021, the tasks before Powell changed. First he had to prevent a pandemic-driven collapse of the global financial system akin to what occurred in 2008. </p>
<p id="DKXSxF">Then he was — is — faced with the question of what to do now that inflation is high for the first time in decades. That challenge, and the question of whether Powell can be as effective at controlling inflation as he has been at promoting employment, will frame his next term.</p>
<h3 id="2kSZTr">How Powell saved the day in 2020</h3>
<p id="70G974">Powell was <a href="https://www.vox.com/22348364/united-states-stimulus-covid-coronavirus">masterful in his response to Covid-19</a>, stabilizing global markets vastly more effectively than policymakers did during the 2008 economic crisis and aggressively lobbying for fiscal stimulus from Congress.</p>
<p id="vGIihO">Just to give one example that’s often unheralded: In March 2020, as the pandemic set in, the world saw a massive exodus of investments from low- and middle-income countries, a phenomenon known as “flight to safety.” </p>
<p id="yosYcs">By March 24, 2020, foreign investors had pulled $78 billion from emerging market economies, a <a href="https://twitter.com/econchart/status/1242448434847797248">greater amount than they had <em>put in</em> in all of 2019</a>. It was the worst outflow on record, <a href="https://www.oecd.org/investment/COVID19-and-global-capital-flows-OECD-Report-G20.pdf#page=5">worse than during the 2008 financial crisis</a>.</p>
<p id="f8AYrt">Left unchecked, this could have led to a much worse economic crash across the world than actually happened. When this kind of capital flight occurs, it devastates the economy of the country being fled from, weakens the value of their currency, and makes it harder for the country to borrow. This can lead to sovereign debt crises of the kind seen in Greece, Spain, and Italy a decade ago, or in Argentina in the early 2000s (when it wound up defaulting on its debts).</p>
<p id="Eq2hqP">That did not happen in 2020. By the end of the year, the outflows from emerging economies had not only been entirely reversed, but there were <a href="https://www.ft.com/content/e12a1eee-2571-4ae5-bc91-cc17ee7f40d0">massive <em>inflows</em> to emerging market economies</a>. What happened? <a href="https://www.wsj.com/articles/fed-federal-reserve-jerome-powell-covid-coronavirus-dollar-lending-economy-foreign-currency-11596228151">Fed Chair Jay Powell happened</a>.</p>
<p id="UwVmts">Powell worked closely with counterparts at other central banks, especially the People’s Bank of China, to establish what are known as “swap lines.” These are facilities that let poor countries trade assets denominated in their own currencies (like Mexican pesos, or the Brazilian real, for example) for dollar-denominated debt, usually US Treasuries. This stabilizes the local currency and ensures the country has access to dollars, which developing countries need to pay their debts and buy key goods like oil.</p>
<p id="SQNt5r">The US has offered swap lines in the past, most notably in the 2008 crisis, but it <a href="https://www.federalreserve.gov/newsevents/pressreleases/swap-lines-faqs.htm">brought them back at huge scale in 2020</a>, as did the <a href="https://www.globalcapital.com/article/jbwzrctv83cz/pboc-currency-swaps-to-boost-global-rmb-anz">People’s Bank of China</a>. The <a href="https://www.piie.com/blogs/realtime-economic-issues-watch/enhancing-central-bank-cooperation-covid-19-pandemic">European Central Bank and Bank of Japan</a> made the most expansive use of swaps, but they were available to select emerging markets like Brazil and Mexico too. The People’s Bank had ties to dozens more central banks that let even more countries have zero-risk access to dollars. </p>
<p id="qCLMPj">The result, a <a href="https://www.stlouisfed.org/on-the-economy/2020/november/fed-dollar-swap-lines-work">Federal Reserve Bank of St. Louis analysis found</a>, was that while non-dollar currencies were largely in free fall before the swap lines were announced, the Fed action stabilized them very rapidly.</p>
<h3 id="V7vzED">Why I’m okay with an inflation dove during high inflation</h3>
<p id="wFjP1W">The next year will likely feature the largest-scale inflation the US has experienced in three decades. Despite that, an inflation dove like Powell still seems like the best person to lead the Fed. </p>
<p id="IwNgF0">A chair less committed to full employment, like Powell’s rumored rival for the position <a href="https://www.atlantafed.org/blogs/macroblog/2018/10/26/on-maximizing-employment-a-case-for-caution">Raphael Bostic</a>, might take rising inflation as a reason to hike rates immediately. And a skeptic might wonder if Powell is to blame for that inflation in the first place, making him the wrong person to control it.</p>
<p id="lElOMJ">That’s a fair perspective. But policymaking is all about weighing the risks and benefits of different ideas, and on balance, my fear of <a href="https://rooseveltinstitute.org/publications/rethinking-inflation-policy-a-toolkit-for-economic-recovery/">raising rates too soon</a> continues to outweigh my worries about long-run inflation. </p>
<p id="8nBSPR">As Skanda Amarnath and Alex Williams, two sharp economic analysts at the group Employ America, <a href="https://www.politico.com/news/agenda/2021/11/18/inflation-is-bad-killing-jobs-is-worse-522943">recently noted</a>, our current inflation is the result of businesses not being able to keep up with the higher-than-expected incomes and spending of Americans coming out of the 2020 downturn.</p>
<p id="D0vo4V">That is, in a sense, Powell’s fault — but in another sense he’s the victim of his own success. Our inflation problem is a direct result of Powell and other leaders causing employment and spending to recover much faster than anyone anticipated.</p>
<p id="VlaaUe">There are two possible answers to that problem. One is to raise interest rates in an attempt to increase unemployment and/or reduce Americans’ incomes, so their level of spending better matches what corporations are able to produce.</p>
<p id="JtElHa">That sounds cruel, but inflation can be cruel too, and has been high enough that <a href="https://twitter.com/arindube/status/1460824658081632257">many people have seen their incomes fall</a> after you adjust for price increases. That effect has been unequal — people at the bottom of the income scale have actually <a href="https://twitter.com/arindube/status/1460824658081632257">seen their incomes go up a lot</a>, while those in the middle are seeing their wages just somewhat keep up with inflation — but if millions of Americans are seeing their real incomes decline, that’s a problem. It’s not crazy to think about rate hikes in that environment.</p>
<p id="T0SH1B">But there’s another path: to keep spending high so that businesses are pushed to expand their capacity and produce enough to meet demand. The second road entails enduring some short-run inflation but promises a richer, more abundant America at the end. There’s a risk that short-run inflation becomes long-run inflation, but that’s a risk still worth taking given where the economy is.</p>
<p id="wMnnVJ">And where we are is still <a href="https://www.piie.com/research/piie-charts/us-labor-market-makes-gains-october-many-are-staying-out-labor-force">6 million jobs short</a> relative to where we should be. Powell is likely to keep his focus on that problem, and that’s a good sign for the US economy, and the world’s.</p>
<h3 id="f59LVO">What’s next for the Fed</h3>
<p id="mWjU5J">But Powell needs help. Right now, a seat on the Federal Reserve board of governors is vacant; Republican Richard Clarida vacates his seat at the end of January, and fellow Republican Randal Quarles is <a href="https://www.cnbc.com/2021/11/08/randal-quarles-to-resign-at-year-end-paving-way-for-biden-to-further-remake-the-federal-reserve.html">resigning at the end of December</a>.</p>
<p id="ncPayb">As of February 2022, there will be three vacant seats on the Fed. While the president has made good first steps in reappointing Powell as chair and making Lael Brainard vice chair, Biden needs to nominate candidates to those three spots who will support Powell in encouraging the economic recovery and allowing some modest inflation in the coming year.</p>
<p id="z2vl3G">The administration promises to <a href="https://twitter.com/KateDavidson/status/1462786859550003200">announce appointments for those posts</a> in early December. I hope they keep that promise; the recovery will be stronger for it.</p>
<p id="PlKipp"><em>A version of this story was initially published in the </em>Future Perfect<em> newsletter. </em><a href="https://confirmsubscription.com/h/d/A2BA26698741513A"><em><strong>Sign up here to subscribe!</strong></em></a></p>


guid: https://www.vox.com/22796307/paid-leave-budget-reconciliation-senate-joe-manchin
title: Why Democrats shouldn’t cut paid leave from their social spending bill
author: Li Zhou
url: https://www.vox.com/22796307/paid-leave-budget-reconciliation-senate-joe-manchin
feedurl: http://www.vox.com/rss/policy-and-politics/index.xml
content_mime_type: text/html
content:
  

    <figure>
      <img alt="Adults and children carrying umbrellas over their heads gather on the US Capitol lawn carrying signs that read, “Families demand paid leave,” and, “Save paid leave!”" src="https://cdn.vox-cdn.com/thumbor/6FrVZOb7-cf-_BGd7nVAuKwEZjc=/907x0:8192x5464/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70191904/GettyImages_1350894158.0.jpg" />
        <figcaption>Families, parents, and caregivers rally in front of the US Capitol to call on Congress to include paid family and medical leave in the ‘Build Back Better’ legislative package on November 2. | Paul Morigi/Getty Images for PL+US</figcaption>
    </figure>

  <p>If passed, it would be transformative for women’s workplace participation and economic growth. </p> <p id="pnT7zE">The need for paid leave has only become more clear during the pandemic. </p>
<p id="bq15JE">In the last two years, workers have been forced to juggle caregiving, sick leave, and professional responsibilities, often facing impossible choices among all three. Many women, who’ve borne the brunt of these demands, have reduced their involvement in the workforce or left it altogether. </p>
<p id="IsxV7F">Democrats hope to tackle these issues with a new measure included in their <a href="https://www.vox.com/2021/11/19/22776638/house-democrats-pass-185-trillion-social-spending-bill">Build Back Better Act</a>. It passed the House of Representatives last week, and would guarantee US workers four weeks of paid family and sick leave, a major protection that <a href="https://americanprogress.org/article/urgent-case-permanent-paid-leave/">millions of people don’t currently have</a>. At the moment, however, the provision’s chances of passing the Senate are uncertain given pushback from Sen. Joe Manchin (D-WV) — and the narrow margins the party has to advance legislation. </p>
<p id="ZOEqiD">The US’s recent loss of women workers has been striking. At the start of the pandemic, 3.5 million moms of school-age children temporarily or permanently left their jobs, <a href="https://www.usnews.com/news/business/articles/2021-11-04/burned-out-why-wont-more-women-return-to-the-job-market">according to the Associated Press</a>. As of this fall, one in three women said they’ve considered leaving the workforce or “downshifting” their jobs, <a href="https://www.mckinsey.com/featured-insights/diversity-and-inclusion/women-in-the-workplace">according to a McKinsey study</a>. And per data from <a href="https://www.cnn.com/2021/11/08/economy/us-women-jobs-recovery/index.html">the Bureau of Labor Statistics</a>, thousands of women still haven’t returned to the labor force after departing during the pandemic. </p>
<p id="T06y6f">There’s a host of reasons for these departures, but as <a href="https://www.vox.com/recode/22568635/women-remote-work-home">Vox’s Rani Molla has reported</a>, women are far more likely than men to have significant caregiving responsibilities. And these responsibilities have surged during the pandemic, when many women have taken on caregiving for their school-age children and sick family members. </p>
<p id="Kn6gT6"><a href="https://www.vox.com/2021/11/19/22776638/house-democrats-pass-185-trillion-social-spending-bill">The Build Back Better Act</a> tries to help workers balance caregiving responsibilities, and sick leave, with work. The $1.85 trillion legislation boosts funding for child care, and makes a roughly $205 billion (over 10 years) investment in a new federal paid family and sick leave program.</p>
<p id="BMOPJZ">By itself, the program is far from enough to address the needs that workers face, and it won’t go into effect until 2024, but if enacted it could eventually help keep more women in the workforce. </p>
<p id="f6i4wH">The US is the <a href="https://www.nytimes.com/2021/10/25/upshot/paid-leave-democrats.html">only industrialized country</a> without a comprehensive federal paid leave program, meaning workers only have access to such protections if their company or state happens to offer them. <a href="https://www.bls.gov/ncs/ebs/benefits/2020/employee-benefits-in-the-united-states-march-2020.pdf#page=299">According to 2020 data from the Bureau of Labor Statistics,</a> just 20 percent of workers have access to paid family leave, and just 75 percent have access to paid sick leave, <a href="https://www.vox.com/2021/10/29/22749595/paid-leave-sick-parental-leave-biden-build-back-better-bill">numbers that are even lower for low-wage workers</a>. Among lower-wage workers, 8 percent have access to paid family leave, and 49 percent have access to paid sick leave. </p>
<p id="Vx3Ajg">The effects of this federal program could be substantial: In addition to boosting women’s participation in the workforce, existing paid leave programs have been found to reduce families’ food insecurity, improve children’s health outcomes, and reduce worker turnover. </p>
<p id="scUOTH">For it to become a reality, however, the legislation still needs to make it through the Senate. </p>
<h3 id="6GkyDO">How people would be able to access paid leave under BBB</h3>
<p id="ht70hw"><a href="https://rules.house.gov/sites/democrats.rules.house.gov/files/Section_by_Section_BBB_RCP117-18__.pdf">The program,</a> which would officially launch in 2024, would guarantee four weeks (or 20 workdays) of paid family and sick leave for most workers each year. </p>
<p id="L0mx0e">To qualify for the program, workers will need to have made at least $2,000 over the two years prior to their application for the leave. It’s a threshold that could exclude low-wage workers unable to work consistently because of caregiving responsibilities or other reasons, but New America paid leave expert Vicki Shabo notes that it would include the overwhelming majority of workers. </p>
<aside id="bE7EZG"><div data-anthem-component="readmore" data-anthem-component-data='{"stories":[{"title":"The case against means testing  ","url":"https://www.vox.com/2021/10/15/22722418/means-testing-social-spending-reconciliation-bill"}]}'></div></aside><p id="s3fweB">The program also aims to cover workers left out of the existing Family and Medical Leave Act program, which guarantees the ability to take unpaid leave. Because of the way it’s written, FMLA doesn’t currently apply to a swath of smaller employers and certain part-time workers, exceptions this new proposal would avoid. The House paid leave policy is also accessible to people who are self-employed and members of the gig economy, as long as they meet the earnings eligibility requirements. </p>
<p id="SLdyic">“Anybody that satisfies that earnings and work history requirement would be eligible, and that would be critical because the very people that are left out of FMLA are the ones in the most precarious position,” Shabo says. </p>
<p id="R8j8bG">The money paid to workers would be distributed through a couple different channels. The federal government would set up a new program run by the Social Security Administration, through which people could submit applications if their states and employers don’t already provide paid leave. To apply through the federal program, workers would have to submit their leave requests up to 90 days before they take leave, or up to 90 days after they do so. </p>
<p id="4njuX7">Workers whose state or employer already have paid leave programs in place would continue to receive benefits through these channels. The federal government would then reimburse those states and companies. </p>
<p id="kuIzTY">This policy design is intended to fill in current gaps while making sure companies and states that already offer paid leave programs aren’t disincentivized from doing so. The availability of these programs is pretty inconsistent right now: Nine states and the District of Columbia have implemented some form of paid family and sick leave, and roughly 25 percent of employers offer paid family leave while 68 percent provide paid sick leave, <a href="https://www.kff.org/womens-health-policy/fact-sheet/paid-family-leave-and-sick-days-in-the-u-s/">according to 2019 and 2017 Kaiser Family Foundation surveys</a>.</p>
<p id="xdGh6F">The benefits a worker on leave would receive depends on their prior wages, and could be as much as 90 percent of what they were making. Workers would receive 90 percent of the first $290 they make per week, 73 percent of their next $290 to $659, and 53 percent of any additional wages between $659 and $1,192. Democrats designed the policy this way to ensure low-wage workers received the support they needed — and the highest proportion of wage replacement. </p>
<p id="ljQK7D">Overall, the maximum amount that a worker is able to receive is capped at $814 a week, or $3,256 for all four weeks. </p>
<p id="dUsvCM">While past Democratic proposals have paid for this benefit using a payroll tax, the House’s program will be fully covered by revenue raisers like a new corporate minimum tax rate and a new tax on stock buybacks. The program currently isn’t slated to sunset, and could run indefinitely if the revenue raisers proposed continue to cover its costs. </p>
<p id="vPVHsh">Four weeks of paid leave would put the US at the lower end of the spectrum relative to other countries: Although programs vary, the global average is 29 weeks of paid maternity leave and 16 weeks of paid paternity leave, <a href="https://www.nytimes.com/2021/10/25/upshot/paid-leave-democrats.html">according to the New York Times</a>. </p>
<p id="06hcJO"><a href="https://www.nytimes.com/2019/01/25/upshot/paid-parental-leave-sweet-spot-six-months-gates.html">Previous research</a> of other country’s programs found around six months to be the ideal period of time for family leave, specifically, because it allows parents to bond with their children without facing the professional backlash that a longer duration of leave can result in. </p>
<p id="zhrwf3">The economic effects of a federal program could also be considerable. <a href="https://bipartisanpolicy.org/blog/to-build-back-better-paid-family-leave-must-support-work/#:~:text=Women%20who%20take%20paid%20family,women%20who%20quit%20during%20pregnancy.">According to the Bipartisan Policy Center,</a> women who take paid family leave are 40 percent more likely to return to work after a new child than those who do not, meaning these programs could keep a whole group of people in the workforce, boosting economic growth. <a href="https://americanprogress.org/article/covid-19-sent-womens-workforce-progress-backward/">The Center for American Progress</a> has estimated that the longer-term effects of women’s departures during the pandemic could be as much as $64.5 billion in lost wages and economic activity each year. </p>
<p id="FD9Kbw">“New mothers, in particular, and caregivers to seriously ill loved ones are more likely to return to work if they have access to paid leave,” Shabo says. </p>
<h3 id="VzlpdL">Opposition from the Senate could wind up killing the paid leave plan</h3>
<p id="hf37iG">Paid leave is facing a steep challenge in the Senate. Joe Manchin, a key moderate, has repeatedly questioned whether this policy should be included in the budget bill. </p>
<p id="rbKdRy">His concerns have led Democrats to pare down their original plans of a 12-week paid leave program modeled after one Sen. Kirsten Gillibrand (D-NY) has been pushing for years.</p>
  <figure class="e-image">
        <img alt=" " data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/O8Pzbo4PkXTp83q8WDnsrRhyO0c=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23040069/GettyImages_1347952953.jpg">
      <cite>Paul Morigi/Getty Images for MomsRising Together</cite>
      <figcaption>Sen. Kirsten Gillibrand speaks at a press conference supporting Build Back Better investments in home care, child care, paid leave and expanded CTC payments on October 21.</figcaption>
  </figure>
<p id="sY2qW8">Part of Manchin’s problem with the policy is that he feels reconciliation isn’t the process that should be used to pass this measure. As the bill contains so many social and climate spending proposals that Republicans are against, Democrats are trying to pass it through reconciliation, which requires only majority support in both houses of Congress. Because Democrats have 50 votes in the Senate, with Manchin aboard, they could pass paid leave, and everything else in the Build Back Better Act, without a single GOP vote. </p>
<p id="o6ICAy">“I don’t think it belongs in the bill,” <a href="https://www.cnn.com/2021/11/04/politics/joe-manchin-democrats-spending-bill-cnntv/index.html">Manchin said in a CNN interview in early November</a>. “We can do that in a bipartisan way. We can make sure it’s lasting.”</p>
<p id="HGmIzu">Up to this point, attempts to find a bipartisan approach for paid leave have failed. </p>
<p id="MlsKK4">Historically, there have been disagreements over how to pay for the legislation, with Democrats advocating for a payroll tax to cover its costs, while Republicans have pushed for people to borrow from their future Social Security benefits. Additionally, there have been conflicts over whether the program should require employer participation or whether it should be voluntary. During the Trump administration, Ivanka Trump’s attempts at a paid leave program wound up largely floundering as well, though they did contribute to Congress approving paid leave for federal employees. </p>
<p id="6pmiUv">Because of Manchin’s concerns, paid leave may well be removed from the Build Back Better Act or cut significantly. And that would be a great loss for millions of workers.</p>
<p id="vzV4pR">Gillibrand has said that she’s hopeful a paid leave provision will wind up in the legislation — even if it’s a narrower one than the House included. </p>
<p id="dkxr3O">“I think Sen. Manchin and I can come together hopefully in the next couple of weeks on something that could be included in this package that would be a Democratic-only proposal that we could start with, something modest, perhaps,” Gillibrand <a href="https://thehill.com/homenews/sunday-talk-shows/582539-gillibrand-manchin-has-come-a-long-way-on-paid-leave">said in a CBS interview last weekend</a>. </p>
<p id="BZXQDi">One way lawmakers could curb the program further is to limit how long it would last, perhaps setting a specific deadline for the program to sunset, for example. They could also slash the number of weeks the benefit would cover, or apply <a href="https://www.vox.com/2021/10/15/22722418/means-testing-social-spending-reconciliation-bill">means testing</a> to exclude workers making over a certain amount.</p>
<p id="a3hWck">Were the proposal to be removed, it would leave millions of workers exactly where they are now: forced to choose between caregiving and their own health and income, even as the US continues to navigate a devastating pandemic.</p>


title: Prices for food and gas are rising sharply. Is health care next?
author: Dylan Scott
feedurl: http://www.vox.com/rss/policy-and-politics/index.xml
content_mime_type: text/html
guid:
https://www.vox.com/policy-and-politics/22798580/us-inflation-2021-health-care-prices-premiums-forecast

url:
https://www.vox.com/policy-and-politics/22798580/us-inflation-2021-health-care-prices-premiums-forecast

content:
  

    <figure>
      <img alt="A finger balancing a wobbling board holding up hospital equipment and a pile of coins." src="https://cdn.vox-cdn.com/thumbor/rCmmqhthvjEoFGSF3wAXHMIl26Y=/240x0:2160x1440/1310x983/cdn.vox-cdn.com/uploads/chorus_image/image/70197853/GettyImages_1224840122.0.jpg" />
        <figcaption>iStock/Getty Images</figcaption>
    </figure>

  <p>Health insurance premiums could spike in 2022, experts warn.</p> <p id="artEje"><a href="https://www.vox.com/the-goods/2021/11/10/22775092/inflation-cpi-october-economy-biden-fed">Inflation</a> is on the rise, driving up the price of gas and food. One sector of the US economy is behaving particularly strangely: For once, medical prices have been increasing at a significantly lower rate than prices in the overall economy.</p>
<p id="jwbG7L">In October 2021, according to <a href="https://altarum.org/sites/default/files/uploaded-publication-files/SHSS-Price-Brief_November_2021.pdf">the nonprofit health care analysis group Altarum</a>, prices for health care services rose at a 2 percent rate year-over-year, compared to a 6.2 percent rate for all consumer products.</p>
<p id="0qA3mY">But a sharp rise in medical prices could still be around the corner, experts say, delayed only because of unique features of the health care industry. </p>
<p id="Ir11Xr">Over the last 30 years, consumer prices have almost never risen faster than medical inflation, which measures the change in the prices paid for medical services, everything from doctor’s visits to surgeries to prescription drugs. If anything, the opposite has been true, particularly during economic downturns; after the 2008 financial crisis, for example, overall inflation slowed down to almost nothing but medical prices continued to grow at a 2 to 3 percent rate. </p>
<p id="vOUPSg">In fact, since 2010, prices in the overall economy and in health care have moved more or less in tandem — until the spring of 2020.</p>
<div class="c-float-right">  <figure class="e-image">
        <img alt="Chart: Growth rates of health industry versus GDP show GDP rising above in the pandemic" data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/TZL6sHjPLAORQ1-uWJx6lUCDB2s=/800x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/23037484/Screen_Shot_2021_11_23_at_10.36.34_AM.png">
      <cite>Altarum</cite>
  </figure>
</div>
<p id="ZSLqlx">But while that may make it sound as though the health care sector is enjoying a welcome respite from the general inflation creating so much nervousness among businesses and political leaders, the reality appears less reassuring. This comparatively slow growth in medical prices could be a mirage. And if health care inflation does eventually catch up with the broader economy, patients would largely be the ones paying for it.</p>
<h3 id="L7hi9R">Why medical inflation could accelerate soon</h3>
<p id="9tKH93">The same problems driving up prices in the rest of the economy — rising costs within the supply chain, difficulty finding workers for open jobs — are issues in the health care sector too. The workforce crisis in particular is acute and not likely to go away any time soon, given how many nurses and doctors have left their jobs during the pandemic. </p>
<p id="qikDEM">A recent survey from the Chartis Group found that 99 percent of rural hospitals said they were experiencing a staffing shortage; 96 percent of them said they were having the most difficulty finding nurses. That has <a href="https://www.vox.com/coronavirus-covid19/22763417/us-covid-19-hospitals-nurses-shortage">forced hospitals to increase their pay and benefits or hire temporary help</a> from travel nursing companies that are more expensive — sometimes much more expensive — than regular full-time staff. The costs for purchasing personal protective equipment and other supplies have also been elevated because of Covid.</p>
<p id="PMx6tQ">Hospitals are going to want to make up for those higher costs by bringing in more money. While the numbers of patients they served fell sharply in March and April of 2020, patient numbers are already back near their pre-pandemic levels. There are only so many ways to increase how many services they provide, especially amid a staffing crisis. </p>
<p id="rc4rbu">The other option is trying to charge health insurers more money for procedures and treatment, particularly the private insurers that directly negotiate prices with health care providers.</p>
<p id="Ltx82j">So while it might be a while before higher prices hit patients, they likely will — just on a time delay.</p>
<p id="OfAdLH">For medical services in particular, there is a lag between when the inflationary pressures like rising supply costs or labor shortages first appear and when they are actually felt in health care prices.</p>
<p id="4kqtpd">In the rest of the economy, inflation and increased costs ripple through the market pretty quickly. If the cost of beef goes up today, the restaurant can raise the price of hamburgers tomorrow. If they can’t find fry cooks and need to increase wages to attract new workers, the restaurant can immediately charge more money for fries.</p>
<p id="zj5arC">But the prices for health care services are set in advance, written into binding contracts after negotiations between insurers and providers or after the government issues new regulations for public programs like Medicare. And those prices are generally set for an entire year, until another round of negotiations establishes new prices for the next year.</p>
<p id="MAFUXZ">Altarum’s inflation experts told me the negotiations for 2022 plans will determine how much the current inflation crisis ends up affecting medical prices.</p>
<p id="7EsYSf">These inflation-driving trends, like the rising workforce costs, have only accelerated throughout 2021. For the last decade, health care prices have consistently grown at roughly a rate of 1 percent to 2 percent. Already, in the last 18 months, prices for hospital and physician prices have exceeded a 3 percent inflation rate. Altarum’s experts say they are watching whether health care prices eventually increase at the same 5 percent to 7 percent rate currently being seen in the rest of the economy — which would be the fastest rate since 1993. </p>
<p id="oA2cX1">Such historic medical inflation would ultimately end up raising costs to patients in two distinct ways. First, if providers negotiate higher payments from insurers to make up for their increasing costs, the insurer will turn around and increase premiums for its customers.</p>
<p id="wvgQGF">But patients also feel the rising costs more directly because they are being asked to pay more money out of pocket for their health care. Deductibles and other cost-sharing have been steadily rising for the 180 million Americans enrolled in commercial health plans. At the same time, the number of Americans considered underinsured — meaning they do carry insurance but the insurance would not necessarily provide them adequate financial protection if they had a medical emergency — has been growing.</p>
<p id="v8M5r0">So if medical prices end up increasing at a historic rate, consumers are going to feel it both when they pay their premium and when they pick up their prescription: They’ll end up getting squeezed from both sides.</p>


guid: https://www.cyberciti.biz/faq/?p=149769
title: How to copy and transfer files remotely on Linux using scp and rsync
author: Vivek Gite
url: https://www.cyberciti.biz/faq/how-to-copy-and-transfer-files-remotely-on-linux-using-scp-and-rsync/
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><div style="float: right; margin-top: 0; margin-left: 5px;"><a href="https://www.cyberciti.biz/faq/category/linux/" title="See all GNU/Linux related FAQ"><img alt="See all GNU/Linux related FAQ" border="0" src="https://www.cyberciti.biz/media/new/category/old/linux-logo.png"/></a></div>
<p><span class="drop_cap">I</span>n Linux, how do I copy and transfer files remotely between two Linux machines? What command do I need to use to transfer files between Unix/macOS and Linux computers securely?</p>
<p>Love this? sudo share_on: <strong><a href="https://twitter.com/intent/tweet?url=https://www.cyberciti.biz/faq/how-to-copy-and-transfer-files-remotely-on-linux-using-scp-and-rsync/&amp;text=How to copy and transfer files remotely on Linux using scp and rsync&amp;via=nixcraft">Twitter</a></strong> - <strong><a href="https://www.facebook.com/sharer/sharer.php?u=https://www.cyberciti.biz/faq/how-to-copy-and-transfer-files-remotely-on-linux-using-scp-and-rsync/">Facebook</a></strong> - <strong><a href="https://www.linkedin.com/sharing/share-offsite/?url=https://www.cyberciti.biz/faq/how-to-copy-and-transfer-files-remotely-on-linux-using-scp-and-rsync/">LinkedIn</a></strong> - <strong><a href="https://wa.me/?text=How to copy and transfer files remotely on Linux using scp and rsync https://www.cyberciti.biz/faq/how-to-copy-and-transfer-files-remotely-on-linux-using-scp-and-rsync/">Whatsapp</a></strong> - <strong><a href="https://reddit.com/submit?url=https://www.cyberciti.biz/faq/how-to-copy-and-transfer-files-remotely-on-linux-using-scp-and-rsync/&amp;title=How to copy and transfer files remotely on Linux using scp and rsync">Reddit</a></strong></p>
<p>The post <a href="https://www.cyberciti.biz/faq/how-to-copy-and-transfer-files-remotely-on-linux-using-scp-and-rsync/" rel="nofollow">How to copy and transfer files remotely on Linux using scp and rsync</a> appeared first on <a href="https://www.cyberciti.biz/faq/" title="Linux and Unix tutorials for new and seasoned sysadmin section">nixCraft</a>.</p></div>
    


guid: https://www.cyberciti.biz/faq/linux-laptop-battery-status-temperature/
title: Linux commands to check the Laptop battery's status via the terminal
author: Vivek Gite
url: https://www.cyberciti.biz/faq/linux-laptop-battery-status-temperature/
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><img border="0" src="https://www.cyberciti.biz/media/new/faq/2010/07/command-line-How-to-check-battery-status-using-terminal.jpeg"/><br/>{<strong>Updated</strong>} How do I find out details about my Linux Laptops temperature, battery status and other information from the command prompt? How can I check battery status using the terminal on Linux?<br/><br/>The post <a href="https://www.cyberciti.biz/faq/linux-laptop-battery-status-temperature/">Linux commands to check the Laptop battery's status via the terminal</a> appeared first on <a href="https://www.cyberciti.biz/">nixCraft</a>.</div>
    


guid: https://www.cyberciti.biz/faq/?p=149771
title: How to set up ZFS ARC size on Ubuntu/Debian Linux
author: Vivek Gite
url: https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><div style="float: right; margin-top: 0; margin-left: 5px;"><a href="https://www.cyberciti.biz/faq/category/ubuntu-linux/" title="See all Ubuntu Linux related FAQ"><img alt="See all Ubuntu Linux related FAQ" border="0" src="https://www.cyberciti.biz/media/new/category/old/ubuntu-logo.jpg"/></a></div>
<p><span class="drop_cap">W</span>hen working with Ubuntu, Debian Linux, and ZFS, you will run into ZFS cache size problems. You see, not all Ubuntu or Debian servers need aggressive file caching. Some servers act as a web server or run Linux container workloads or KVM guest VMs where you want those guest VMs to manage their own caching. Therefore, it would be best to have tons of ECC RAM for ZFS. Unfortunately, not all projects get that kind of extravagance in real life. This page explains how to set up ZFS arc size on Ubuntu/Debian or any Linux distro of your choice. So that, Linux kernel avoid running out of memory.</p>
<p>Love this? sudo share_on: <strong><a href="https://twitter.com/intent/tweet?url=https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/&amp;text=How to set up ZFS ARC size on Ubuntu/Debian Linux&amp;via=nixcraft">Twitter</a></strong> - <strong><a href="https://www.facebook.com/sharer/sharer.php?u=https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/">Facebook</a></strong> - <strong><a href="https://www.linkedin.com/sharing/share-offsite/?url=https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/">LinkedIn</a></strong> - <strong><a href="https://wa.me/?text=How to set up ZFS ARC size on Ubuntu/Debian Linux https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/">Whatsapp</a></strong> - <strong><a href="https://reddit.com/submit?url=https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/&amp;title=How to set up ZFS ARC size on Ubuntu/Debian Linux">Reddit</a></strong></p>
<p>The post <a href="https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/" rel="nofollow">How to set up ZFS ARC size on Ubuntu/Debian Linux</a> appeared first on <a href="https://www.cyberciti.biz/faq/" title="Linux and Unix tutorials for new and seasoned sysadmin section">nixCraft</a>.</p></div>
    


guid: https://www.cyberciti.biz/faq/linux-unix-reuse-openssh-connection/
title: How To Reuse SSH Connection To Speed Up Remote Login Process Using Multiplexing
author: Vivek Gite
url: https://www.cyberciti.biz/faq/linux-unix-reuse-openssh-connection/
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><img border="0" src="https://www.cyberciti.biz/media/new/faq/2008/08/Using-SSH-Multiplexing-on-Linux-or-Unix-to-Speed-Up-Login.png"/><br/>{<strong>Updated</strong>} How do I reuse ssh connection using multiplexing to speed up remote login procedure with OpenSSH client under Linux, macOS, *BSD and Unix-like operating systems?<br/><br/>The post <a href="https://www.cyberciti.biz/faq/linux-unix-reuse-openssh-connection/">How To Reuse SSH Connection To Speed Up Remote Login Process Using Multiplexing</a> appeared first on <a href="https://www.cyberciti.biz/">nixCraft</a>.</div>
    


guid: https://www.cyberciti.biz/faq/?p=149775
title: How to see what packages updates available on Alpine Linux
author: Vivek Gite
url: https://www.cyberciti.biz/faq/list-show-what-packages-updates-available-on-alpine-linux/
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><div style="float: right; margin-top: 0; margin-left: 5px;"><a href="https://www.cyberciti.biz/faq/category/alpine-linux/" title="See all Alpine Linux related FAQ"><img alt="See all Alpine Linux related FAQ" border="0" src="https://www.cyberciti.biz/media/new/category/alpinelinux-logo.jpg"/></a></div>
<p><span class="drop_cap">O</span>n Debian or Ubuntu Linux, one can run '<kbd>apt list --upgradable</kbd>' command to see and list available package updates. On RHEL, we can use '<kbd>dnf check-update</kbd>' to list available updates on screen. However, the apk command does not have an option to show and list available security software updates. But fear not. Some other tricks can list, and you can see what packages updates are available on Alpine Linux using the <a href="https://www.cyberciti.biz/faq/10-alpine-linux-apk-command-examples/" title="See Linux/Unix apk command examples for more info">apk command</a>.</p>
<p>Love this? sudo share_on: <strong><a href="https://twitter.com/intent/tweet?url=https://www.cyberciti.biz/faq/list-show-what-packages-updates-available-on-alpine-linux/&amp;text=How to see what packages updates available on Alpine Linux&amp;via=nixcraft">Twitter</a></strong> - <strong><a href="https://www.facebook.com/sharer/sharer.php?u=https://www.cyberciti.biz/faq/list-show-what-packages-updates-available-on-alpine-linux/">Facebook</a></strong> - <strong><a href="https://www.linkedin.com/sharing/share-offsite/?url=https://www.cyberciti.biz/faq/list-show-what-packages-updates-available-on-alpine-linux/">LinkedIn</a></strong> - <strong><a href="https://wa.me/?text=How to see what packages updates available on Alpine Linux https://www.cyberciti.biz/faq/list-show-what-packages-updates-available-on-alpine-linux/">Whatsapp</a></strong> - <strong><a href="https://reddit.com/submit?url=https://www.cyberciti.biz/faq/list-show-what-packages-updates-available-on-alpine-linux/&amp;title=How to see what packages updates available on Alpine Linux">Reddit</a></strong></p>
<p>The post <a href="https://www.cyberciti.biz/faq/list-show-what-packages-updates-available-on-alpine-linux/" rel="nofollow">How to see what packages updates available on Alpine Linux</a> appeared first on <a href="https://www.cyberciti.biz/faq/" title="Linux and Unix tutorials for new and seasoned sysadmin section">nixCraft</a>.</p></div>
    


guid: https://bash.cyberciti.biz/?p=981
title: Shell script to monitor MariaDB replication and send email alert about server health status
author: Vivek Gite
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
url:
https://bash.cyberciti.biz/monitoring/shell-script-to-monitor-mariadb-replication-and-send-email-alert-about-server-health-status/

content:
<div xmlns="http://www.w3.org/1999/xhtml"><span class="drop_cap">H</span>ere is a simple shell script to notify secondary read-only replica (slave) MariaDB server health status failure via email and push notification. Master-slave data replication allows you to copy databases to multiple MariaDB servers. It is useful for backup, data recovery, load balancing, and much more. See <a href="https://www.cyberciti.biz/faq/how-to-set-up-mariadb-master-slave-replication-with-ssl-on-ubuntu-linux/" rel="noopener" target="_blank">how to configure SSL-protected MariaDB replication between a master and slave server</a>.</div>
    


guid: https://www.cyberciti.biz/faq/what-does-double-dash-mean-in-ssh-command/
title: What Does ‐‐ (double dash) Mean In SSH Shell Command?
author: Vivek Gite
url: https://www.cyberciti.biz/faq/what-does-double-dash-mean-in-ssh-command/
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><img border="0" src="https://www.cyberciti.biz/media/new/faq/2013/12/What-Does-%E2%80%93-%E2%80%93-double-dash-Mean-In-SSH-Shell-Command-under-Linux-and-Unix.png"/><br/>{<strong>Updated</strong>} This page explains the use of the double-dash ('<kbd>‐‐</kbd>') in Linux, macOS, and Unix shell commands. For example: <kbd>lxc exec container ‐‐ sh -c 'apt update &amp;&amp; apt -y upgrade'</kbd>. First, let us see what it does and when we might need it.<br/><br/>The post <a href="https://www.cyberciti.biz/faq/what-does-double-dash-mean-in-ssh-command/">What Does ‐‐ (double dash) Mean In SSH Shell Command?</a> appeared first on <a href="https://www.cyberciti.biz/">nixCraft</a>.</div>
    


guid: https://www.cyberciti.biz/?p=1852
title: How to find a path of a Linux command like a pro
author: Vivek Gite
url: https://www.cyberciti.biz/howto/finding-a-path-of-a-linux-command-like-a-pro/
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><p><span class="drop_cap">O</span>ne of the most common questions I get is how can I find a Linux command path that I just installed on Linux using a package manager such as <a href="https://www.cyberciti.biz/faq/ubuntu-lts-debian-linux-apt-command-examples/" title="See Linux/Unix apt command examples for more info">apt</a>/dnf command. We have many new developers coming from the Windows world. Many are first-time Linux users. Some are using Linux from WSL, and others are directly dealing with cloud servers over ssh. Let us see some common commands to list or find a path for Linux commands.</p>
<p>Love this? sudo share_on: <strong><a href="https://twitter.com/intent/tweet?url=https://www.cyberciti.biz/howto/finding-a-path-of-a-linux-command-like-a-pro/&amp;text=How to find a path of a Linux command like a pro&amp;via=nixcraft">Twitter</a></strong> - <strong><a href="https://www.facebook.com/sharer/sharer.php?u=https://www.cyberciti.biz/howto/finding-a-path-of-a-linux-command-like-a-pro/">Facebook</a></strong> - <strong><a href="https://www.linkedin.com/sharing/share-offsite/?url=https://www.cyberciti.biz/howto/finding-a-path-of-a-linux-command-like-a-pro/">LinkedIn</a></strong> - <strong><a href="https://wa.me/?text=How to find a path of a Linux command like a pro https://www.cyberciti.biz/howto/finding-a-path-of-a-linux-command-like-a-pro/">Whatsapp</a></strong> - <strong><a href="https://reddit.com/submit?url=https://www.cyberciti.biz/howto/finding-a-path-of-a-linux-command-like-a-pro/&amp;title=How to find a path of a Linux command like a pro">Reddit</a></strong></p>
<p>The post <a href="https://www.cyberciti.biz/howto/finding-a-path-of-a-linux-command-like-a-pro/" rel="nofollow">How to find a path of a Linux command like a pro</a> appeared first on <a href="https://www.cyberciti.biz" rel="nofollow">nixCraft</a>.</p></div>
    


guid: https://www.cyberciti.biz/faq/howto-ssh-changing-passphrase/
title: OpenSSH Change a Passphrase With ssh-keygen command
author: Vivek Gite
url: https://www.cyberciti.biz/faq/howto-ssh-changing-passphrase/
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><img border="0" src="https://www.cyberciti.biz/media/new/faq/2008/02/OpenSSH-Change-a-Passphrase-With-ssh-keygen-command.png"/><br/>{<strong>Updated</strong>} How do I change OpenSSH passphrase for one of my private keys under Linux, OpenBSD, FreeBSD, Apple macOS/OS X or Unix-like operating systems?<br/><br/>The post <a href="https://www.cyberciti.biz/faq/howto-ssh-changing-passphrase/">OpenSSH Change a Passphrase With ssh-keygen command</a> appeared first on <a href="https://www.cyberciti.biz/">nixCraft</a>.</div>
    


guid: https://www.cyberciti.biz/faq/check-bios-version-linux/
title: Linux Find Out BIOS Version Using a Command Line Option
author: Vivek Gite
url: https://www.cyberciti.biz/faq/check-bios-version-linux/
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><img border="0" src="https://www.cyberciti.biz/media/new/faq/2009/07/Linux-Find-Out-BIOS-Version-using-dmidecode-command.png"/><br/>{<strong>Updated</strong>} How do I find out BIOS version using a Linux command line option? How do I check the motherboard BIOS version using Linux command line option?<br/><br/>The post <a href="https://www.cyberciti.biz/faq/check-bios-version-linux/">Linux Find Out BIOS Version Using a Command Line Option</a> appeared first on <a href="https://www.cyberciti.biz/">nixCraft</a>.</div>
    


guid: https://www.cyberciti.biz/faq/?p=149790
title: How to define multiple when conditions in Ansible
author: Vivek Gite
url: https://www.cyberciti.biz/faq/how-to-define-multiple-when-conditions-in-ansible/
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><div style="float: right; margin-top: 0; margin-left: 5px;"><a href="https://www.cyberciti.biz/faq/tag/ansible/" title="See all Ansible related FAQ"><img alt="See all Ansible related FAQ" border="0" src="https://www.cyberciti.biz/media/new/category/ansible_logo.png"/></a></div>
<p><span class="drop_cap">S</span>ometimes we need to evaluate multiple when conditions in Ansible playbooks. Let us see how to define multiple when conditions in Ansible for a single task.</p>
<p>Love this? sudo share_on: <strong><a href="https://twitter.com/intent/tweet?url=https://www.cyberciti.biz/faq/how-to-define-multiple-when-conditions-in-ansible/&amp;text=How to define multiple when conditions in Ansible&amp;via=nixcraft">Twitter</a></strong> - <strong><a href="https://www.facebook.com/sharer/sharer.php?u=https://www.cyberciti.biz/faq/how-to-define-multiple-when-conditions-in-ansible/">Facebook</a></strong> - <strong><a href="https://www.linkedin.com/sharing/share-offsite/?url=https://www.cyberciti.biz/faq/how-to-define-multiple-when-conditions-in-ansible/">LinkedIn</a></strong> - <strong><a href="https://wa.me/?text=How to define multiple when conditions in Ansible https://www.cyberciti.biz/faq/how-to-define-multiple-when-conditions-in-ansible/">Whatsapp</a></strong> - <strong><a href="https://reddit.com/submit?url=https://www.cyberciti.biz/faq/how-to-define-multiple-when-conditions-in-ansible/&amp;title=How to define multiple when conditions in Ansible">Reddit</a></strong></p>
<p>The post <a href="https://www.cyberciti.biz/faq/how-to-define-multiple-when-conditions-in-ansible/" rel="nofollow">How to define multiple when conditions in Ansible</a> appeared first on <a href="https://www.cyberciti.biz/faq/" title="Linux and Unix tutorials for new and seasoned sysadmin section">nixCraft</a>.</p></div>
    


guid: https://www.opensourceflare.com/?p=109
title: How to set up Redis sentinel cluster on Ubuntu or Debian Linux
author: Vivek Gite
url: https://www.opensourceflare.com/how-to-set-up-redis-sentinel-cluster-on-ubuntu-or-debian-linux/
feedurl: http://cyberciti.biz/feed
enclosure_url: https://www.opensourceflare.com/wp-content/uploads/2021/07/redis-cli-session.mp4
enclosure_type: video/mp4
content_mime_type: application/xhtml+xml
content:
<div xmlns="http://www.w3.org/1999/xhtml"><p>{<strong>nixCraft <a href="https://www.patreon.com/nixcraft">Patreon</a> supporters content</strong>}</p><span class="drop_cap">T</span>his guide explains how to set up Redis sentinel failover cluster for caching database or any other data type in high availability node.
<h2>Software and hardware requirements</h2>
Minimum <strong>three VMs</strong> running at cloud providers or bare metal servers. Always keep an ODD number of servers.
<ol>
 	<li>Ubuntu 20.04 or Debian 10 Linux LTS.</li>
 	<li>Redis server with sentinel on each VM.</li>
 	<li>HAProxy for load balancing and traffic redirection to healthy Redis node for writing or reading data.</li>
 	<li>Keepalived for IP failover for HAProxys.</li>
        <li>The Redis cluster will be protected using firewall, password, and VLAN or VPC.</li>
        <li>Email-based alert for HAproxy and Keepalived cluster.</li>
        <li>Simple web-based stats for Redis.</li>
</ol>
Out sample setup:
<p><img alt="How to set up Redis sentinel cluster on Ubuntu or Debian Linux" class="size-full wp-image-113" height="584" src="https://www.opensourceflare.com/wp-content/uploads/2021/07/How-to-set-up-Redis-sentinel-cluster-on-Ubuntu-or-Debian-Linux.png" width="733"/> </p>
All clients (your web app written in Python/PHP/Perl) will send Redis to read and write requests to 172.0.0.5 TCP port 6379. HAproxy will redirect read requests based upon the health status of the Redis server among three servers. The Redis write request will redirect to an active node in the sentinel cluster. Keepalived is used to maintain standby HAPorxy node in case primary HAPorxy node is down for any reason. In addition, Keepalived will provide IP failover based upon the VRRP protocol running on an interface.
This in-depth guide will cover the following topics:
<p><img alt="toc-redis-cluster-preview" class="aligncenter size-full wp-image-270" height="1170" src="https://www.opensourceflare.com/wp-content/uploads/2021/07/toc-redis-cluster-preview.png" width="614"/></p><p>The post <a href="https://www.opensourceflare.com/how-to-set-up-redis-sentinel-cluster-on-ubuntu-or-debian-linux/">How to set up Redis sentinel cluster on Ubuntu or Debian Linux</a> appeared first on <a href="https://www.opensourceflare.com/">Opensource Flare</a>✨.</p></div>
    


guid: https://www.opensourceflare.com/?p=289
title: How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
author: Vivek Gite
feedurl: http://cyberciti.biz/feed
content_mime_type: application/xhtml+xml
url:
https://www.opensourceflare.com/how-to-set-up-ssh-keys-with-yubikey-as-two-factor-authentication-u2f-fido2/

content:
<div xmlns="http://www.w3.org/1999/xhtml"><p>{<strong>nixCraft <a href="https://www.patreon.com/nixcraft">Patreon</a> supporters content</strong>}</p><span class="drop_cap">A</span>ll Linux and Unix servers are managed manually or by automation tools such as Ansible using ssh. For example, say you have a server at Linode or AWS. Then you copy your public ssh key to a remote cloud server. Once copied, you can now login to those servers without a password as long as ssh keys are matched. It is the best practice. Unfortunately, you are not protecting ssh keys stored on a local desktop or dev machine at $HOME/.ssh/ directory. If your keys are stolen, an attacker can get access to all of your cloud servers, including backup servers. To avoid this mess, we can protect our ssh keys stored on local dev/desktop machines using physical security keys such as YubiKey. 
<p><img alt="How to configure SSH with YubiKey" class="aligncenter size-full wp-image-291" height="581" src="https://www.opensourceflare.com/wp-content/uploads/2021/08/How-to-configure-SSH-with-YubiKey.png" width="1085"/></p>
In both cases, you need to insert your YubiKey (or any FIDO2 compatible hardware key) into a USB port and complete the authentication. In other words, ssh login will not work when malware or attacker has stolen your passphrase and ssh keys as they can not insert YubiKey and press the button on it to complete OTP for ssh keys.<br/>
In the corporate environment, we have a <a href="https://en.wikipedia.org/wiki/Bastion_host" rel="noopener" target="_blank">bastion host</a> that allows ssh access with Yubikey. It is a special-purpose server on a network specifically designed and configured to withstand attacks. The server generally hosts an sshd process, and all other services are removed. Once logged into bastion host, you can access all other cloud servers easily. This guide will cover the following topics:
<p><img alt="ssh-key-yubikey-welcome" class="aligncenter size-full wp-image-311" height="445" src="https://www.opensourceflare.com/wp-content/uploads/2021/08/ssh-key-yubikey-welcome.png" width="558"/></p><p>The post <a href="https://www.opensourceflare.com/how-to-set-up-ssh-keys-with-yubikey-as-two-factor-authentication-u2f-fido2/">How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)</a> appeared first on <a href="https://www.opensourceflare.com/">Opensource Flare</a>✨.</p></div>
    


