Here’s a simple hack for highlighting the current sentence in the text. When writing and especially copyediting, being able to see at once where the current sentence starts and ends – especially in a complex text with long periods and wall-of-text paragraphs – saves a few milliseconds each time, and these milliseconds add up.
This isn’t a real mode; just yank the code below to your .emacs. You need to choose in which major mode it will be active; below it is enabled for Outline mode, which I prefer for writing and editing. If you use XEmacs instead of Emacs, make a few compatibility changes as indicated in the comments below.
(setq sentence-end "[^.].[.?!]+\\(\"')}]*\\|<[^>]+>\\)\\($\\| $\\|\t\\| \\)[ \t\n]*") (setq sentence-color "#d5cfd9") ; foreground color for the current sentence; adjust as needed (setq sentence-face (make-face 'sentence-face-background)) (set-face-foreground sentence-face sentence-color) (defun sentence-begin-pos () (save-excursion (unless (= (point) (point-max)) (forward-char)) (backward-sentence) (point))) (defun sentence-end-pos () (save-excursion (unless (= (point) (point-max)) (forward-char)) (backward-sentence) (forward-sentence) (point))) (setq sentence-highlight-mode nil) (defun sentence-highlight-current (&rest ignore) "Highlight current sentence." (and sentence-highlight-mode (> (buffer-size) 0) (progn (and (boundp 'sentence-extent) sentence-extent (move-overlay sentence-extent (sentence-begin-pos) (sentence-end-pos) (current-buffer)) ;;; XEmacs: use set-extent-endpoints instead of move-overlay ) ))) (setq sentence-extent (make-overlay 0 0)) ;;; XEmacs: use make-extent instead of make-overlay (overlay-put sentence-extent 'face sentence-face) ; ;;; XEmacs: use set-extent-property instead of overlay-put ;;;;; Now, enable this for Outline mode only: (add-hook 'outline-mode-hook (function (lambda () ; .... any other outline mode tweaks or key definitions you may need (make-local-variable 'sentence-highlight-mode) (setq sentence-highlight-mode t) (add-hook 'post-command-hook 'sentence-highlight-current) )))
I have turned this into a minor mode (and cleaned it up somewhat):
(Also available as an [ELPA] package: http://marmalade-repo.org/packages/sentence-highlight/)
See Sentences for information on how Emacs recognizes them.