OverlayControlL

This page describes the use of an overlay to change the appearance of ^L (Control-L) characters. See PrettyControlL for an alternative approach that uses the display table instead of an overlay.

AndreRiemann contributed this code. It removes the`^L’ and adds an overlay, which is underlined. The overlay only shows a whole line (not only under text), if the background color of the overlay differs from the background color of the window. Maybe I later make a minor mode from this with some more options (or someone else). ‘after-change-major-mode-hook’ is maybe not optimal? – AndreRiemann

(add-hook
 'after-change-major-mode-hook
 (lambda ()
   (font-lock-add-keywords nil
    `((,page-delimiter ;; variable with the regexp (usually "^\f" or "^^L")
        0
        (prog1 nil
          ;; don't display ^L
          (compose-region (match-beginning 0) (match-end 0) "")
          ;; make an overlay (like in hl-line)
          (let ((pdl (make-overlay (line-beginning-position)
                                   (line-beginning-position 2))))
            ;; :background has to be different from the background color
            ;; gray1 here is just a little different from black
            (overlay-put pdl 'face '(:underline "gray30" :background "gray1"))
            (overlay-put pdl 'modification-hooks
                         ;; these arguments are received from modification-hooks
                         '((lambda (overlay after-p begin end &optional length)
                             (delete-overlay overlay))))
            (overlay-put pdl 'insert-in-front-hooks
                         '((lambda (overlay after-p begin end &optional length)
                             (delete-overlay overlay)))))) t)))))

This is very nice, except for the after-change-major-mode-hook which somehow conflicts with Gnus: the Gnus groups and summary buffers become black-only after this has been applied! --FabriceNiessen


PageBreaks CategoryHideStuff