emacs/var/elfeed/db/data/d8/d8f75d51c36b1e8a63154976dbc0f0db2932e711
2022-01-03 12:49:32 -06:00

179 lines
6.1 KiB
Plaintext

<p>Raw link: <a href="https://www.youtube.com/watch?v=SLyierm-vyU">https://www.youtube.com/watch?v=SLyierm-vyU</a></p>
<p>In this video I showcase the various tools I have pieced together into a
coherent paradigm for a distraction-free writing workflow. These are
simple toggles or minor modes that combine built-in and third party
packages with my tweaks and configurations. The end result is a state
that allows me to concentrate more effectively on the task at hand,
whether it is composing prose or coding.</p>
<p>Note that mixed-font settings for <code>org-mode</code> will depend on the theme
that you use. My <a href="https://gitlab.com/protesilaos/modus-themes">Modus
themes</a> are designed to
cope well with such demands.</p>
<p>The following code block is excerpted from <a href="https://protesilaos.com/emacs/dotemacs">my
dotemacs</a>. Please bear in mind that I
will not be updating it, so check my dotemacs for the most up-to-date
code I distribute.</p>
<pre><code class="language-elisp">(use-package olivetti
:ensure
:defer
: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)))
(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))))
:bind ("C-c o" . prot/olivetti-mode))
(use-package emacs
:commands prot/hidden-mode-line-mode
:config
(setq mode-line-percent-position '(-3 "%p"))
(setq mode-line-defining-kbd-macro
(propertize " Macro" 'face 'mode-line-emphasis))
(setq-default mode-line-format
'("%e"
mode-line-front-space
mode-line-mule-info
mode-line-client
mode-line-modified
mode-line-remote
mode-line-frame-identification
mode-line-buffer-identification
" "
mode-line-position
(vc-mode vc-mode)
" "
mode-line-modes
" "
mode-line-misc-info
mode-line-end-spaces))
(define-minor-mode prot/hidden-mode-line-mode
"Toggle modeline visibility in the current buffer."
:init-value nil
:global nil
(if prot/hidden-mode-line-mode
(setq-local mode-line-format nil)
(kill-local-variable 'mode-line-format)
(force-mode-line-update))))
(use-package face-remap
:diminish buffer-face-mode ; the actual mode
:commands prot/variable-pitch-mode
:config
(define-minor-mode prot/variable-pitch-mode
"Toggle `variable-pitch-mode', except for `prog-mode'."
:init-value nil
:global nil
(if prot/variable-pitch-mode
(unless (derived-mode-p 'prog-mode)
(variable-pitch-mode 1))
(variable-pitch-mode -1))))
(use-package emacs
:config
(setq-default scroll-preserve-screen-position t)
(setq-default scroll-conservatively 1) ; affects `scroll-step'
(setq-default scroll-margin 0)
(define-minor-mode prot/scroll-centre-cursor-mode
"Toggle centred cursor scrolling behaviour."
:init-value nil
:lighter " S="
:global nil
(if prot/scroll-centre-cursor-mode
(setq-local scroll-margin (* (frame-height) 2)
scroll-conservatively 0
maximum-scroll-margin 0.5)
(dolist (local '(scroll-preserve-screen-position
scroll-conservatively
maximum-scroll-margin
scroll-margin))
(kill-local-variable `,local))))
;; C-c l is used for `org-store-link'. The mnemonic for this is to
;; focus the Line and also works as a variant of C-l.
:bind ("C-c L" . prot/scroll-centre-cursor-mode))
(use-package display-line-numbers
:defer
:config
;; Set absolute line numbers. A value of "relative" is also useful.
(setq display-line-numbers-type t)
(define-minor-mode prot/display-line-numbers-mode
"Toggle `display-line-numbers-mode' and `hl-line-mode'."
:init-value nil
:global nil
(if prot/display-line-numbers-mode
(progn
(display-line-numbers-mode 1)
(hl-line-mode 1))
(display-line-numbers-mode -1)
(hl-line-mode -1)))
:bind ("&lt;f7&gt;" . prot/display-line-numbers-mode))
(use-package frame
:commands prot/cursor-type-mode
:config
(setq-default cursor-type 'box)
(setq-default cursor-in-non-selected-windows '(bar . 2))
(setq-default blink-cursor-blinks 50)
(setq-default blink-cursor-interval nil) ; 0.75 would be my choice
(setq-default blink-cursor-delay 0.2)
(blink-cursor-mode -1)
(define-minor-mode prot/cursor-type-mode
"Toggle between static block and pulsing bar cursor."
:init-value nil
:global t
(if prot/cursor-type-mode
(progn
(setq-local blink-cursor-interval 0.75
cursor-type '(bar . 2)
cursor-in-non-selected-windows 'hollow)
(blink-cursor-mode 1))
(dolist (local '(blink-cursor-interval
cursor-type
cursor-in-non-selected-windows))
(kill-local-variable `,local))
(blink-cursor-mode -1))))
</code></pre>