Emacs: Novel Reading Mode 📜

By Xah Lee. Date: . Last updated: .

Read Novel Mode

Here's a command to make current window suitable for reading long text.

put this in your Emacs Init File:

(defun xah-toggle-read-novel-mode ()
  "Setup current frame to be suitable for reading long novel/article text.
• Set frame width to 80.
• Line wrap at word boundaries.
• Line spacing is increased.
• Proportional width font is used.
Call again to toggle back.

URL `http://xahlee.info/emacs/emacs/emacs_novel_reading_mode.html'
Created: 2019-01-30
Version: 2026-06-13"
  (interactive)
  (let (;; (xnarrow 80)
        ;; (xwide 100)
        )
    (if (equal line-spacing 0.5)
        (progn
          ;; (set-frame-parameter (selected-frame) 'width xwide)
          (variable-pitch-mode 0)
          (setq line-spacing nil)
          (setq word-wrap nil))
      (progn
        ;; (set-frame-parameter (selected-frame) 'width xnarrow)
        (variable-pitch-mode 1)
        (setq line-spacing 0.5)
        (setq word-wrap t))))
  (redraw-frame (selected-frame)))

Before

emacs novel reading mode 2026-06-13 369a1
emacs novel reading mode 2026-06-13 369a1

After

emacs novel reading mode 2026-06-13 36999
emacs novel reading mode 2026-06-13 36999

Emacs Lines, Column, Cursor Position

Soft-Wrap Lines

Reformat Lines

Show Line Number, Column Number

Highlight Current Line, Screen Line