Olivetti is a simple Emacs minor mode for a nice writing environment.
Pictured: Big Fish by John August using using text body width of 66 (top, also using Fountain Mode), lorem ipsum text using text body width of 80 (bottom)
Features
- Set a desired text body width to automatically resize window margins to keep the text comfortably in the middle of the window.
- Text body width can be the number of characters (an integer) or a fraction of the window width (a float between 0.0 and 1.0).
- Interactively change body width with:
olivetti-shrinkC-c [ [ [ ...
olivetti-expandC-c ] ] ] ...
olivetti-set-widthC-c \ - If
olivetti-body-widthis an integer, the text body width will scale with use oftext-scale-mode, whereas if a fraction (float) then the text body width will remain at that fraction. - Optionally remember the state of
visual-line-modeon entry and recall its state on exit. - Optionally hide the mode-line for distraction-free writing.
Olivetti keeps everything it does buffer-local, so you can write prose in one buffer and code in another, side-by-side in the same frame. Or, by hiding the mode-line and using a single window in a fullscreen frame, Olivetti provides a nice distraction-free environment. For those looking for a hardcore distraction-free writing mode with a much larger scope, I recommend writeroom-mode.
Requirements
- Emacs 24.4
Installation
Olivetti is available through MELPA and MELPA-stable. I encourage installing the stable version.
Alternately, download the latest release and put it in your
load-path.
Known Bugs
display-line-numbers-mode(included in Emacs 26.1) has a poor implementation that causes problems with modes that work with the text body width or margins. Discussion at https://debbugs.gnu.org/28248 and https://debbugs.gnu.org/28844. Uselinum-modeinstead.linum-modein Emacs versions earlier than 26.1 has a bug that overwrites margin settings, making it incompatible with modes that work with margins. More information here: https://debbugs.gnu.org/20674.
Please report bugs on GitHub Issues page.
History
See Releases.
Hints
To always use a different width for a specific file, set a File Variable
specifying olivetti-body-width:
M-x add-file-local-variable RET olivetti-body-width RET 66 RET
