Mercurial > dotfiles
diff .elisp/show-wspace.el @ 0:c30d68fbd368
Initial import from svn.
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Wed, 26 Nov 2008 10:56:09 -0600 |
parents | |
children |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/.elisp/show-wspace.el @@ -0,0 +1,228 @@ +;;; show-wspace.el --- Highlight whitespace of various kinds. +;; +;; Filename: show-wspace.el +;; Description: Highlight whitespace of various kinds. +;; Author: Peter Steiner <unistein@isbe.ch>, Drew Adams +;; Maintainer: Drew Adams +;; Copyright (C) 2000-2008, Drew Adams, all rights reserved. +;; Created: Wed Jun 21 08:54:53 2000 +;; Version: 21.0 +;; Last-Updated: Tue Jan 01 13:59:36 2008 (-28800 Pacific Standard Time) +;; By: dradams +;; Update #: 264 +;; URL: http://www.emacswiki.org/cgi-bin/wiki/show-wspace.el +;; Keywords: highlight, whitespace +;; Compatibility: GNU Emacs 20.x, GNU Emacs 21.x, GNU Emacs 22.x +;; +;; Features that might be required by this library: +;; +;; None +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: +;; +;; Highlight whitespace of various kinds. +;; +;; To use this library: +;; +;; Add this to your initialization file (~/.emacs or ~/_emacs): +;; +;; (require 'show-wspace) ; Load this library. +;; +;; Then you can use commands `toggle-*' (see below) to turn the +;; various kinds of whitespace highlighting on and off in Font-Lock +;; mode. +;; +;; If you want to always use a particular kind of whitespace +;; highlighting, by default, then add the corresponding +;; `show-ws-highlight-*' function (see below) to the hook +;; `font-lock-mode-hook'. Then, whenever Font-Lock mode is turned on, +;; whitespace highlighting will also be turned on. +;; +;; For example, you can turn on tab highlighting by default by adding +;; function `show-ws-highlight-tabs' to `font-lock-mode-hook' in your +;; .emacs file, as follows: +;; +;; (add-hook 'font-lock-mode-hook 'show-ws-highlight-tabs) +;; +;; +;; Faces defined here: +;; +;; `show-ws-hard-space', `show-ws-tab', `show-ws-trailing-whitespace'. +;; +;; Commands defined here: +;; +;; `show-ws-toggle-show-hard-spaces', `show-ws-toggle-show-tabs', +;; `show-ws-toggle-show-trailing-whitespace', +;; `toggle-show-hard-spaces-show-ws' (alias), +;; `toggle-show-tabs-show-ws' (alias), +;; `toggle-show-trailing-whitespace-show-ws' (alias). +;; +;; Non-interactive functions defined here: +;; +;; `show-ws-highlight-hard-spaces', `show-ws-highlight-tabs', +;; `show-ws-highlight-trailing-whitespace'. +;; +;; Internal variables defined here: +;; +;; `show-ws-highlight-hard-spaces-p', `show-ws-highlight-tabs-p', +;; `show-ws-highlight-trailing-whitespace-p'. +;; +;; Drew Adams wrote the `toggle-*' commands and `*-p' variables. +;; +;; Peter Steiner wrote the original code that did the equivalent of +;; the `show-ws-highlight-*' commands here in his `hilite-trail.el'. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Change log: +;; +;; 2007/09/25 dadams +;; Renamed to use prefix show-ws-. Thx to Cyril Brulebois. +;; 2006/11/11 dadams +;; Corrected doc strings. Clarified: hard space is non-breaking space, \240. +;; Included hard space in highlight-trailing-whitespace. +;; 2006/04/06 dadams +;; highlight-*: Use font-lock-add-keywords. Thanks to Karl Chen. +;; 2006/02/20 dadams +;; Mentioned in Commentary how to use non-interactively. +;; 2006/01/07 dadams +;; Added :link for sending bug report. +;; 2006/01/06 dadams +;; Added defgroup and use it. +;; 2005/12/30 dadams +;; Removed require of def-face-const.el. +;; Renamed faces, without "-face". +;; 2005/01/25 dadams +;; Removed ###autoload for defvars. +;; 2004/06/10 dadams +;; Fixed minor bug in highlight-* functions. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Code: + +(and (< emacs-major-version 20) (eval-when-compile (require 'cl))) ;; when, push + +;;;;;;;;;;;;;;;;;;;;;;;;; + +(defgroup Show-Whitespace nil + "Highlight whitespace of various kinds." + :prefix "show-ws-" + :group 'convenience :group 'matching + :link `(url-link :tag "Send Bug Report" + ,(concat "mailto:" "drew.adams" "@" "oracle" ".com?subject=\ +show-wspace.el bug: \ +&body=Describe bug here, starting with `emacs -q'. \ +Don't forget to mention your Emacs and library versions.")) + :link '(url-link :tag "Other Libraries by Drew" + "http://www.emacswiki.org/cgi-bin/wiki/DrewsElispLibraries") + :link '(url-link :tag "Download" + "http://www.emacswiki.org/cgi-bin/wiki/show-wspace.el") + :link '(url-link :tag "Description" + "http://www.emacswiki.org/cgi-bin/wiki/ShowWhiteSpace#ShowWspace") + :link '(emacs-commentary-link :tag "Commentary" "show-wspace") + ) + +(defface show-ws-tab '((t (:background "LemonChiffon"))) + "*Face for highlighting tab characters (`C-i') in Font-Lock mode." + :group 'Show-Whitespace :group 'font-lock :group 'faces) + +(defface show-ws-trailing-whitespace '((t (:background "Gold"))) + "*Face for highlighting whitespace at line ends in Font-Lock mode." + :group 'Show-Whitespace :group 'font-lock :group 'faces) + +(defface show-ws-hard-space '((t (:background "PaleGreen"))) + "*Face for highlighting non-breaking spaces (`\240')in Font-Lock mode." + :group 'Show-Whitespace :group 'font-lock :group 'faces) + + +(defvar show-ws-highlight-tabs-p nil + "Non-nil means font-lock mode highlights TAB characters (`C-i').") + +(defvar show-ws-highlight-trailing-whitespace-p nil + "Non-nil means font-lock mode highlights whitespace at line ends.") + +(defvar show-ws-highlight-hard-spaces-p nil + "Non-nil means font-lock mode highlights non-breaking spaces (`\240').") + +;;;###autoload +(defalias 'toggle-show-tabs-show-ws 'show-ws-toggle-show-tabs) +;;;###autoload +(defun show-ws-toggle-show-tabs () + "Toggle highlighting of TABs, using face `show-ws-tab'." + (interactive) + (if show-ws-highlight-tabs-p + (remove-hook 'font-lock-mode-hook 'show-ws-highlight-tabs) + (add-hook 'font-lock-mode-hook 'show-ws-highlight-tabs)) + (setq show-ws-highlight-tabs-p (not show-ws-highlight-tabs-p)) + (font-lock-mode) (font-lock-mode) + (message "TAB highlighting is now %s." (if show-ws-highlight-tabs-p "ON" "OFF"))) + +;;;###autoload +(defalias 'toggle-show-hard-spaces-show-ws 'show-ws-toggle-show-hard-spaces) +;;;###autoload +(defun show-ws-toggle-show-hard-spaces () + "Toggle highlighting of non-breaking space characters (`\240'). +Uses face `show-ws-hard-space'." + (interactive) + (if show-ws-highlight-hard-spaces-p + (remove-hook 'font-lock-mode-hook 'show-ws-highlight-hard-spaces) + (add-hook 'font-lock-mode-hook 'show-ws-highlight-hard-spaces)) + (setq show-ws-highlight-hard-spaces-p (not show-ws-highlight-hard-spaces-p)) + (font-lock-mode) (font-lock-mode) + (message "Hard (non-breaking) space highlighting is now %s." + (if show-ws-highlight-hard-spaces-p "ON" "OFF"))) + +;;;###autoload +(defalias 'toggle-show-trailing-whitespace-show-ws + 'show-ws-toggle-show-trailing-whitespace) +;;;###autoload +(defun show-ws-toggle-show-trailing-whitespace () + "Toggle highlighting of trailing whitespace. +Uses face `show-ws-trailing-whitespace'." + (interactive) + (if show-ws-highlight-trailing-whitespace-p + (remove-hook 'font-lock-mode-hook 'show-ws-highlight-trailing-whitespace) + (add-hook 'font-lock-mode-hook 'show-ws-highlight-trailing-whitespace)) + (setq show-ws-highlight-trailing-whitespace-p + (not show-ws-highlight-trailing-whitespace-p)) + (font-lock-mode) (font-lock-mode) + (message "Trailing whitespace highlighting is now %s." + (if show-ws-highlight-trailing-whitespace-p "ON" "OFF"))) + +(defun show-ws-highlight-tabs () + "Highlight tab characters (`C-i')." + (font-lock-add-keywords nil '(("[\t]+" (0 'show-ws-tab t))))) +(defun show-ws-highlight-hard-spaces () + "Highlight hard (non-breaking) space characters (`\240')." + (font-lock-add-keywords nil '(("[\240]+" (0 'show-ws-hard-space t))))) +(defun show-ws-highlight-trailing-whitespace () + "Highlight whitespace characters at line ends." + (font-lock-add-keywords + nil '(("[\240\040\t]+$" (0 'show-ws-trailing-whitespace t))))) + +;;;;;;;;;;;;;;;;;;;;;;; + +(provide 'show-wspace) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; show-wspace.el ends here