I've been into plain text for fifteen years now, and for much of that time I adhered to the rule of maintaining an eighty-character column width. While I usually continue to adhere to that for comments in source code, I've recently softened my stance when it comes to other text. This change occurred during the writing of the thesis proposal for my Master's degree (currently in progress). It turns out that viewing diffs (even word diffs) is difficult when text changes reflow the paragraph onto different lines. So as a result of my newly-found love for text that is easily diffed, I sought out a way to turn paragraphs containing line breaks into a single, unbroken line.
In Emacs, the process of reflowing text to fit between the left margin and a chosen column is called 'filling'. Emacs maintains a variable,
fill-column, which defaults to
70. This variable is used by
fill-paragraph (bound to
M-q) and together they are used to reflow text into a given column size. Frequently, both in fixing my thesis proposal and copying snippets of text into this blog, I need to reflow text as though it had an infinite column width, and the below does just that:
;;; Originally by Stefan Monnier <email@example.com> (defun mak::unfill-paragraph (&optional region) "Takes a multi-line paragraph and makes it into a single line of text." (interactive (progn (barf-if-buffer-read-only) '(t))) (let ((fill-column (point-max))) (fill-paragraph nil region)))
fill-paragraph is bound to
M-q, binding its complement to
M-Q seems appropriate:
(global-set-key (kbd "M-Q") 'mak::unfill-paragraph)
I don't want text to scroll horizontally in a window, nor do I wish for it to wrap in the middle of a word.
visual-line-mode takes care of that. Here we add a hook to all modes that inherit from
text-mode, which is most writing/programming modes, that enables
visual-line-mode in their buffers:
(add-hook 'text-mode-hook 'turn-on-visual-line-mode)
I still use
fill-paragraph on occasion, so we will give it a more modern value:
(setq-default fill-column 80)
setq-default here instead of
setq because some variables are global, and some are local to the buffer in which they are set.
setq-default provides a default value for buffer-local values, like