This page describes library pp-c-l.el, which displays Control-l (`
^L’) characters in a pretty way.
Control-l is also called the “form feed” character. In many programming languages it is written as `
\f’. The name “form feed” comes from printers that interpret the character as a page break signal, feeding another form (page). Here’s what Wikipedia says about it:
A Control-l character in an Emacs text buffer (e.g. code) appears normally as `
^L’, if option
‘ctl-arrow’ is non-
‘nil’, or as `
\014’ (octal 14) if that option is
‘nil’. It serves as a page-break character for many printers, and, by convention, in code it serves to distinguish sections of code. The Emacs commands for navigating among pages (e.g.
‘forward-page’, bound to `
C-x ]’) simply look for Control-l characters. You can also just use
‘C-s C-q C-l’ to search for them. See PageCommands for more.
While Control-l is useful as a section or page separator, `
^L’ or `
\014’ is a bit ugly, and it doesn’t really let users know that if they print the text a page break will occur at that position.
In Emacs, you can give any character a different display appearance, by redefining its entry in the current display table. Library pp-c-l.el does this to give Control-l a better appearance. You can easily customize this appearance, without fiddling with the display table yourself.
This screenshot shows the default appearance:
Everything between the commented lines corresponds to a single Control-l character. It is (by default) the equivalent of a newline followed by 10 spaces, the text “
Section (Printable Page)” and 10 more spaces.
You can toggle the pretty display on and off, using minor mode
See Also: OverlayControlL for an alternative approach, which uses an overlay.
This library would be even awesomer if by default it put the string that page-ext.el chooses for its titles (see
‘pages-directory’) into the highlighted boxes. – DaveAbrahams
Thanks for your suggestion. I wasn’t even aware of (standard library)
page-ext.el. However, IIUC, I don’t see how pp-c-l.el could do what you suggest. It uses the syntax table to change the display appearance of
^L chars generally (i.e. everywhere). I think what you’re asking for is to visually replace
^L by different page “headers” — i.e., different appearance for different pages. I don’t see how that would be possible. But patches and more info are welcome. – DrewAdams
i have a problem with whitespace-mode. My setup is this:
(require 'pp-c-l) (setq pp^L-^L-string " ") (pretty-control-l-mode 1)
;; Make whitespace-mode with very basic background coloring for whitespaces (setq whitespace-style '(spaces tabs newline space-mark tab-mark newline-mark))
;; Make whitespace-mode and whitespace-newline-mode ;; use “¶” for end of line char and ▷ for tab. (setq whitespace-display-mappings '((space-mark 32  ) ; normal space, MIDDLE DOT, FULL STOP. (space-mark 160  ) (space-mark 2208  ) (space-mark 2336  ) (space-mark 3616  ) (space-mark 3872  ) (newline-mark 10 [182 10]) ; newlne (tab-mark 9 [9655 9] [92 9]))) ; tab
this should make it look like this (second screenshot): http://xahlee.org/emacs/whitespace-mode.html however, it seems when pretty print is loaded, all those triangle and middle dot doesn’t show. – XahLee?
Maybe someone else can help, here. I don’t use
‘whitespace-mode’. I confirm that there is a problem. If I follow your instructions minus loading
pp-c-l.el, and I turn on
‘global-whitespace-mode’, then I see what you expect (your screenshot). If I then load
pp-c-l.el the whitespace effect is gone — even if I then turn off
AFAICT, the only thing
‘pretty-control-l-mode’ does is change the display-table entry for one character (form-feed, aka ^L). Dunno why that would louse things up so much.
Perhaps someone familiar with
‘whitespace-mode’ (Vinicius?) can look into this. From your mail to
email@example.com (), the same problem seems to exist with at least some other libraries, besides
pp-c-l.el. If you do make progress debugging this and can point to a problem in the pp-c-l.el code I’ll try to take a look. Sorry. – DrewAdams
Libraries referenced here: Lisp:pp-c-l.el