Emacs: Reformat Lines (Hard-Wrap lines, fill) 🚀
Emacs has a command
fill-paragraph 【Alt+q】 that does hard-wrap of current paragraph (it inserts a newline char at every ~70 chars.)
Emacs also has
fill-region, which acts on a text selection. However, there are some usability problems with these commands. This page discuss the problems and fixes.
One frequently asked question is how to “unfill” — do inverse of
fill-paragraph. Technically, this means replacing newline char by space. Emacs does not have a built-in command for this. The typical answer to this question, is to set the cut-width to a huge number (For example, set fill-column to 10001000), then Alt+x
fill-paragraph, then set fill-column back to previous value. This is inconvenient.
If you need to reformat several paragraphs, Alt+x
fill-region. There is no keyboard shortcut.
Auto Toggle Fill/Unfill/Region
This command automatically toggle “fill” or “unfill” on the current paragraph. If there is a text selection, then the command automatically works on the region.
(defun xah-fill-or-unfill () "Reformat current paragraph or region to `fill-column', like `fill-paragraph' or “unfill”. When there is a text selection, act on the selection, else, act on a text block separated by blank lines. URL `http://xahlee.info/emacs/emacs/modernization_fill-paragraph.html' Version 2017-01-08" (interactive) ;; This command symbol has a property “'compact-p”, the possible values are t and nil. This property is used to easily determine whether to compact or uncompact, when this command is called again (let ( ($compact-p (if (eq last-command this-command) (get this-command 'compact-p) (> (- (line-end-position) (line-beginning-position)) fill-column))) (deactivate-mark nil) ($blanks-regex "\n[ \t]*\n") $p1 $p2 ) (if (use-region-p) (progn (setq $p1 (region-beginning)) (setq $p2 (region-end))) (save-excursion (if (re-search-backward $blanks-regex nil "NOERROR") (progn (re-search-forward $blanks-regex) (setq $p1 (point))) (setq $p1 (point))) (if (re-search-forward $blanks-regex nil "NOERROR") (progn (re-search-backward $blanks-regex) (setq $p2 (point))) (setq $p2 (point))))) (if $compact-p (fill-region $p1 $p2) (let ((fill-column most-positive-fixnum )) (fill-region $p1 $p2))) (put this-command 'compact-p (not $compact-p))))
Note: an early implementation is named “compact-uncompact-block”.
This command is part of ErgoEmacs Keybinding and Emacs: Xah Fly Keys.
Reformat Lines for Source Code
Here's a different implementation that does not use emacs's
fill-region commands. This is useful if you want to use it on programing language source code.
Emacs: Reformat Lines for Source Code 🚀
- Emacs Modernization: Simple Changes Emacs Should Adopt
- Why Emacs Keys are Painful
- Emacs: Problems of the Scratch Buffer
- Emacs M-key Notation vs Alt+key Notation
- Emacs Menu Usability Problem
- Emacs Mode Line Problem
- Emacs cua-mode Problems
- Emacs: Inconsistency of Search Features
- Problems of grep in Emacs
- Emacs: Usability Problems of Mode Documentation
- Problems of Emacs Manual
- Emacs Manual Sucks by Examples
- Emacs: kill-buffer Induces Buffer Accumulation
- Emacs Spell Checker Problems
- Emacs Form Feed ^L
- Emacs: Single Key to Delete Whole Line
- Emacs HTML Mode Sucks
- Emacs Does Not Support Viewing Images Files In Windows
- Emacs Should Adopt HTML as Texinfo Replacement
- Emacs Should Support HTML Mail
- Problems of Emacs's “man” Command
- Emacs Lisp Mode Syntax Coloring Problem
- Emacs AutoHotkey Mode Problems
- Emacs Lisp: Ban Syntax Table
- Emacs: Make elisp-index-search use Current Symbol
- Emacs GNU Texinfo Problems; Invalid HTML
- A Record of Frustration in IT Industry; Disappearing FSF URLs, 2006
- Emacs Manual Node Persistency Issues
- Emacs: dired-do-query-replace-regex Replace ALL (fixed)
- Problems of Emacs Supporting Obsolete Systems
- Emacs Lisp: Function to Copy/Delete a Dir Recursively (fixed)
- Thoughts on Common Lisp Scheme Lisp Based Emacs
- Text Editors Popularity and Market Research
- Text Editor's Cursor Movement Behavior (emacs, vi, Notepad++)
- Emacs: Toggle Letter Case 🚀
- Emacs: Select Line, between Quotes, Extend Selection 🚀
- Emacs: isearch Current Word 🚀
- Emacs: Reformat Lines (Hard-Wrap lines, fill) 🚀