<p>I was asked whether it would be possible to reproduce this aesthetic:
<a href="https://lepisma.xyz/2017/10/28/ricing-org-mode/">https://lepisma.xyz/2017/10/28/ricing-org-mode/</a></p>

<p>I do not want to use <code>writeroom-mode</code> because it assumes far more things
than the narrower-in-scope <code>olivetti-mode</code>.  So I am sticking with the
tools I presented in my last two videos:</p>

<ul>
  <li><a href="https://protesilaos.com/codelog/2020-07-16-emacs-focused-editing/">Emacs: configuring mixed fonts in Org mode</a></li>
  <li><a href="https://protesilaos.com/codelog/2020-07-17-emacs-mixed-fonts-org/">“Focused editing” tools for Emacs</a></li>
</ul>

<h2>Screenshots</h2>

<p>So here are my two themes, Modus Operandi and Modus Vivendi, showcasing
the result.</p>

<p><strong>Remember to visit the image’s direct link</strong> to see it full size.  The
smaller view may distort some of its details.  Also bear in mind that
<em>this is a proof-of-concept</em> that is done on an existing document.  I
did not prepare a fake environment that would make things look good.</p>

<p><img alt="Modus Operandi single window" src="https://protesilaos.com/assets/images/attachments/modus-operandi-org-focus-demo-single-2020-07-18.png" /></p>

<p><img alt="Modus Operandi side-by-side windows" src="https://protesilaos.com/assets/images/attachments/modus-operandi-org-focus-demo-dual-2020-07-18.png" /></p>

<p><img alt="Modus Vivendi single window" src="https://protesilaos.com/assets/images/attachments/modus-vivendi-org-focus-demo-single-2020-07-18.png" /></p>

<p><img alt="Modus Vivendi side-by-side windows" src="https://protesilaos.com/assets/images/attachments/modus-vivendi-org-focus-demo-dual-2020-07-18.png" /></p>

<p>Note that here I also enable a few theme-specific customisation options,
such as scaled headings and distinct org blocks (there are <em>a lot of
options</em>).  For Org blocks, you may also consider the “rainbow” symbol
that you can pass to the relevant variable (check <a href="https://gitlab.com/protesilaos/modus-themes">the project’s
README</a>), which applies a
colour-coded background on a per-programming-language basis (useful for
those who work with multiple languages in an Org buffer).</p>

<h2>The new state of affairs</h2>

<p>Overview of what is new for this proof-of-concept when
<code>prot/olivetti-mode</code> is enabled:</p>

<ul>
  <li>Hides the leading stars from Org headings.  This is done by enabling
<code>org-superstar-mode</code> and by making sure that the heading marks are
empty, thus: <code>(setq org-superstar-headline-bullets-list '(" "))</code></li>
  <li>Configures the built-in <code>window-divider-mode</code> to draw 1px wide borders
to the bottom and right sides of the windows.</li>
</ul>

<p>To make the text look more book-like, I use the <a href="https://huertatipografica.com/en/fonts/alegreya-ht-pro">Alegreya font by Huerta
Typografica</a>,
employing the methods I already explained in my video for mixing fonts.</p>

<p>If you want to force Olivetti to push the contents of the buffer off
centre, you could increase the values of <code>olivetti-body-width</code> and/or
<code>olivetti-minimum-body-width</code> variable.  That would, however, not
produce a good effect when you have two windows side-by-side, so please
experiment accordingly.</p>

<p>For me this result is <em>prima facie</em> both usable and visually pleasing.
If you really want to control more things with padding, then do consider
<code>writeroom-mode</code> instead of <code>olivetti-mode</code>.</p>

<p>If you wish to use the Modus themes but tweak some of their colours,
then I have good news for you: it is possible and supported!  Check the
README for the tools that the themes provide.</p>

<h2>New code snippets</h2>

<p>Below are the little extras you would need (always in addition to what I
covered in the last two videos).  I already had configurations for
those, but I tweaked them a bit for the sake of this demo:</p>

<pre><code class="language-elisp">(use-package org-superstar              ; supersedes `org-bullets'
  :ensure
  :after org
  :config
  (setq org-superstar-remove-leading-stars t)
  (setq org-superstar-headline-bullets-list '(" ")) ;; '("🞛" "◉" "○" "▷")
  (setq org-superstar-item-bullet-alist
        '((?+ . ?•)
          (?* . ?➤)
          (?- . ?–)))
  (org-superstar-mode -1))

(use-package emacs
  :config
  (setq window-divider-default-right-width 1)
  (setq window-divider-default-bottom-width 1)
  (setq window-divider-default-places t)
  (window-divider-mode -1))
</code></pre>

<p>And this is the new <code>prot/olivetti-mode</code>:</p>

<pre><code class="language-elisp">(use-package olivetti
  :ensure
  :diminish
  :config
  (setq olivetti-body-width 0.65)
  (setq olivetti-minimum-body-width 72)
  (setq olivetti-recall-visual-line-mode-entry-state t)

  (define-minor-mode prot/olivetti-mode
    "Toggle buffer-local `olivetti-mode' with additional parameters.

Fringes are disabled.  The modeline is hidden, except for
`prog-mode' buffers (see `prot/hidden-mode-line-mode').  The
default typeface is set to a proportionately-spaced family,
except for programming modes (see `prot/variable-pitch-mode').
The cursor becomes a blinking bar, per `prot/cursor-type-mode'."
    :init-value nil
    :global nil
    (if prot/olivetti-mode
        (progn
          (olivetti-mode 1)
          (set-window-fringes (selected-window) 0 0)
          (prot/variable-pitch-mode 1)
          (prot/cursor-type-mode 1)
          (unless (derived-mode-p 'prog-mode)
            (prot/hidden-mode-line-mode 1))
          (window-divider-mode 1)
          (when (eq major-mode 'org-mode)
            (org-superstar-mode 1)))
      (olivetti-mode -1)
      (set-window-fringes (selected-window) nil) ; Use default width
      (prot/variable-pitch-mode -1)
      (prot/cursor-type-mode -1)
      (unless (derived-mode-p 'prog-mode)
        (prot/hidden-mode-line-mode -1))
      (window-divider-mode -1)
      (when (eq major-mode "org-mode")
        (org-superstar-mode -1))))

  :bind ("C-c o" . prot/olivetti-mode))
</code></pre>