rnkn/olivetti
rnkn/olivetti has 1,298 GitHub stars and 34 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-07 08:13 UTC. Last push 2026-05-24.
Emacs minor mode to automatically balance window margins
What you can do
- 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), a fraction of the window width (a float between 0.0 and 1.0), or nil which uses the value of fill-column +2.
- Interactively change body width with:olivetti-shrink C-c { { { ...olivetti-expand C-c } } } ...olivetti-set-width C-c |
- If olivetti-body-width is an integer, the text body width will scale with use of text-scale-mode, whereas if a fraction (float) then the text body width will remain at that fraction.
Measured star growth
- in 24h
- 0
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalOlivetti
A simple Emacs minor mode for a nice writing environment.

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), a fraction of
the window width (a float between 0.0 and 1.0), or
nilwhich uses the value offill-column+2. - Interactively change body width with:
olivetti-shrink C-c { { { ...olivetti-expand C-c } } } ...olivetti-set-width C-c | - If
olivetti-body-widthis an integer, the text body width will scale with use of text-scale-mode, whereas if a fraction (float) then the text body width will remain at that fraction. - Change the way the text body margins look with option
olivetti-style: use margins, fringes, or both for a fancy "page" look. - Customize
olivetti-fringeface to affect only Olivetti buffers. - Optionally remember the state of
visual-line-modeon entry and recall its state on exit.
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.
Requirements
- Emacs 24.4
Installation
The latest stable release of Olivetti is available via MELPA-stable. First, add MELPA-stable to your package archives:
M-x customize-option RET package-archives RET
Insert an entry named melpa-stable with URL:
https://stable.melpa.org/packages/
You can then find the latest stable version of olivetti in the
list returned by:
M-x list-packages RET
If you prefer the latest but perhaps unstable version, do the above using MELPA.
Advanced Installation
Download the latest tagged release, move this file into your load-path
and add to your init.el file:
(require 'olivetti)
If you wish to contribute to or alter Olivetti's code, clone the repository into your load-path and require as above:
git clone https://github.com/rnkn/olivetti.git
Bugs and Feature Requests
Use GitHub issues or send me an email (address in the package header). For bugs, please ensure you can reproduce with:
$ emacs -Q -l olivetti.el
Alternatives
For those looking for a hardcore distraction-free writing mode with a much larger scope, I recommend Writeroom Mode.
Donations
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
560,769 starspublic-apis/public-apis
A collective list of free APIs
496,989 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
440,739 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,139 stars