Mercurial > emacs
changeset 105190:a0ecdf08bbf5
New version 12. Bug#4177
author | Vinicius Jose Latorre <viniciusjl@ig.com.br> |
---|---|
date | Fri, 25 Sep 2009 02:23:51 +0000 |
parents | 7669aca277d5 |
children | 3a3daa61c9ff |
files | lisp/ChangeLog lisp/whitespace.el |
diffstat | 2 files changed, 87 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Fri Sep 25 00:32:21 2009 +0000 +++ b/lisp/ChangeLog Fri Sep 25 02:23:51 2009 +0000 @@ -2,6 +2,20 @@ * progmodes/hideshow.el (hs-show-block): Run `hs-show-hook'. (Bug#4548) +2009-09-24 Vinicius Jose Latorre <viniciusjl@ig.com.br> + + * whitespace.el: Does not highlight trailing spaces While point is + at end of line. Does not highligt spaces at beginning of buffer + while point is at beginning of buffer. Does not highlight spaces + at end of buffer while point is at end of buffer. (Bug#4177) + New version 12.0. + (whitespace-display-mappings): Adjust initialization. + (whitespace-point, whitespace-font-lock-refontify): New vars. + (whitespace-color-on, whitespace-color-off): Adjust code. + (whitespace-trailing-regexp, whitespace-empty-at-bob-regexp) + (whitespace-empty-at-eob-regexp, whitespace-space-regexp) + (whitespace-tab-regexp, whitespace-post-command-hook): New funs. + 2009-09-24 Chong Yidong <cyd@stupidchicken.com> * nxml/nxml-mode.el: Alias xml-mode to nxml-mode.
--- a/lisp/whitespace.el Fri Sep 25 00:32:21 2009 +0000 +++ b/lisp/whitespace.el Fri Sep 25 02:23:51 2009 +0000 @@ -6,7 +6,7 @@ ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Keywords: data, wp -;; Version: 11.2.2 +;; Version: 12 ;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre ;; This file is part of GNU Emacs. @@ -870,8 +870,8 @@ ;; Hacked from `visible-whitespace-mappings' in visws.el (defcustom whitespace-display-mappings '( - (space-mark ?\ [?\xB7] [?.]) ; space - centered dot - (space-mark ?\xA0 [?\xA4] [?_]) ; hard space - currency + (space-mark ?\ [?\u00B7] [?.]) ; space - centered dot + (space-mark ?\xA0 [?\u00A4] [?_]) ; hard space - currency (space-mark ?\x8A0 [?\x8A4] [?_]) ; hard space - currency (space-mark ?\x920 [?\x924] [?_]) ; hard space - currency (space-mark ?\xE20 [?\xE24] [?_]) ; hard space - currency @@ -879,7 +879,7 @@ ;; NEWLINE is displayed using the face `whitespace-newline' (newline-mark ?\n [?$ ?\n]) ; eol - dollar sign ;; (newline-mark ?\n [?\u21B5 ?\n] [?$ ?\n]) ; eol - downwards arrow - ;; (newline-mark ?\n [?\xB6 ?\n] [?$ ?\n]) ; eol - pilcrow + ;; (newline-mark ?\n [?\u00B6 ?\n] [?$ ?\n]) ; eol - pilcrow ;; (newline-mark ?\n [?\x8AF ?\n] [?$ ?\n]) ; eol - overscore ;; (newline-mark ?\n [?\x8AC ?\n] [?$ ?\n]) ; eol - negation ;; (newline-mark ?\n [?\x8B0 ?\n] [?$ ?\n]) ; eol - grade @@ -889,7 +889,7 @@ ;; character ?\xBB at that column followed by a TAB which goes to ;; the next TAB column. ;; If this is a problem for you, please, comment the line below. - (tab-mark ?\t [?\xBB ?\t] [?\\ ?\t]) ; tab - left quote mark + (tab-mark ?\t [?\u00BB ?\t] [?\\ ?\t]) ; tab - left quote mark ) "Specify an alist of mappings for displaying characters. @@ -1220,6 +1220,14 @@ (defvar whitespace-tab-width tab-width "Used to save locally `tab-width' value.") +(defvar whitespace-point (point) + "Used to save locally current point value. +Used by `whitespace-trailing-regexp' function (which see).") + +(defvar whitespace-font-lock-refontify nil + "Used to save locally the font-lock refontify state. +Used by `whitespace-post-command-hook' function (which see).") + ;;;###autoload (defun whitespace-toggle-options (arg) @@ -2139,6 +2147,12 @@ (setq whitespace-font-lock t whitespace-font-lock-keywords (copy-sequence font-lock-keywords))) + ;; save current point and refontify when necessary + (set (make-local-variable 'whitespace-point) + (point)) + (set (make-local-variable 'whitespace-font-lock-refontify) + nil) + (add-hook 'post-command-hook #'whitespace-post-command-hook nil t) ;; turn off font lock (set (make-local-variable 'whitespace-font-lock-mode) font-lock-mode) @@ -2149,7 +2163,7 @@ nil (list ;; Show SPACEs - (list whitespace-space-regexp 1 whitespace-space t) + (list #'whitespace-space-regexp 1 whitespace-space t) ;; Show HARD SPACEs (list whitespace-hspace-regexp 1 whitespace-hspace t)) t)) @@ -2158,14 +2172,14 @@ nil (list ;; Show TABs - (list whitespace-tab-regexp 1 whitespace-tab t)) + (list #'whitespace-tab-regexp 1 whitespace-tab t)) t)) (when (memq 'trailing whitespace-active-style) (font-lock-add-keywords nil (list ;; Show trailing blanks - (list whitespace-trailing-regexp 1 whitespace-trailing t)) + (list #'whitespace-trailing-regexp 1 whitespace-trailing t)) t)) (when (or (memq 'lines whitespace-active-style) (memq 'lines-tail whitespace-active-style)) @@ -2177,7 +2191,7 @@ (format "^\\([^\t\n]\\{%s\\}\\|[^\t\n]\\{0,%s\\}\t\\)\\{%d\\}%s\\(.+\\)$" whitespace-tab-width (1- whitespace-tab-width) - (/ whitespace-line-column tab-width) + (/ whitespace-line-column whitespace-tab-width) (let ((rem (% whitespace-line-column whitespace-tab-width))) (if (zerop rem) "" @@ -2243,14 +2257,14 @@ nil (list ;; Show empty lines at beginning of buffer - (list whitespace-empty-at-bob-regexp + (list #'whitespace-empty-at-bob-regexp 1 whitespace-empty t)) t) (font-lock-add-keywords nil (list ;; Show empty lines at end of buffer - (list whitespace-empty-at-eob-regexp + (list #'whitespace-empty-at-eob-regexp 1 whitespace-empty t)) t)) (cond @@ -2287,12 +2301,60 @@ ;; turn off font lock (when (whitespace-style-face-p) (font-lock-mode 0) + (remove-hook 'post-command-hook #'whitespace-post-command-hook) (when whitespace-font-lock (setq whitespace-font-lock nil font-lock-keywords whitespace-font-lock-keywords)) ;; restore original font lock state (font-lock-mode whitespace-font-lock-mode))) + +(defun whitespace-trailing-regexp (limit) + "Match trailing spaces which does not contain the point at end of line." + (let ((status t)) + (while (if (re-search-forward whitespace-trailing-regexp limit t) + (save-match-data + (= whitespace-point (match-end 1))) ;; loop if point at eol + (setq status nil))) ;; end of buffer + status)) + + +(defun whitespace-empty-at-bob-regexp (limit) + "Match spaces at beginning of buffer which does not contain the point at \ +beginning of buffer." + (and (/= whitespace-point 1) + (re-search-forward whitespace-empty-at-bob-regexp limit t))) + + +(defun whitespace-empty-at-eob-regexp (limit) + "Match spaces at end of buffer which does not contain the point at end of \ +buffer." + (and (/= whitespace-point (1+ (buffer-size))) + (re-search-forward whitespace-empty-at-eob-regexp limit t))) + + +(defun whitespace-space-regexp (limit) + "Match spaces." + (setq whitespace-font-lock-refontify t) + (re-search-forward whitespace-space-regexp limit t)) + + +(defun whitespace-tab-regexp (limit) + "Match tabs." + (setq whitespace-font-lock-refontify t) + (re-search-forward whitespace-tab-regexp limit t)) + + +(defun whitespace-post-command-hook () + "Save current point into `whitespace-point' variable. +Also refontify when necessary." + (setq whitespace-point (point)) + (let ((refontify (or (eolp) ; end of line + (= whitespace-point 1)))) ; beginning of buffer + (when (or whitespace-font-lock-refontify refontify) + (setq whitespace-font-lock-refontify refontify) + (jit-lock-refontify)))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Hacked from visws.el (Miles Bader <miles@gnu.org>)