179 lines
6.1 KiB
Plaintext
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 ("<f7>" . 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>
|
|
|
|
|