- ;; turn off font lock
- (set (make-local-variable 'whitespace-font-lock-mode)
- font-lock-mode)
- (font-lock-mode 0)
- ;; add whitespace-mode color into font lock
- (when (memq 'spaces whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show SPACEs
- (list whitespace-space-regexp 1 whitespace-space t)
- ;; Show HARD SPACEs
- (list whitespace-hspace-regexp 1 whitespace-hspace t))
- t))
- (when (memq 'tabs whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show TABs
- (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))
- t))
- (when (or (memq 'lines whitespace-active-style)
- (memq 'lines-tail whitespace-active-style))
- (font-lock-add-keywords
- nil
- (list
- ;; Show "long" lines
- (list
- (let ((line-column (or whitespace-line-column fill-column)))
- (format
- "^\\([^\t\n]\\{%s\\}\\|[^\t\n]\\{0,%s\\}\t\\)\\{%d\\}%s\\(.+\\)$"
- whitespace-tab-width
- (1- whitespace-tab-width)
- (/ line-column whitespace-tab-width)
- (let ((rem (% line-column whitespace-tab-width)))
- (if (zerop rem)
- ""
- (format ".\\{%d\\}" rem)))))
- (if (memq 'lines whitespace-active-style)
- 0 ; whole line
- 2) ; line tail
- whitespace-line t))
- t))
- (cond
- ((memq 'space-before-tab whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show SPACEs before TAB (indent-tabs-mode)
- (list whitespace-space-before-tab-regexp
- (if whitespace-indent-tabs-mode 1 2)
- whitespace-space-before-tab t))
- t))
- ((memq 'space-before-tab::tab whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show SPACEs before TAB (SPACEs)
- (list whitespace-space-before-tab-regexp
- 1 whitespace-space-before-tab t))
- t))
- ((memq 'space-before-tab::space whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show SPACEs before TAB (TABs)
- (list whitespace-space-before-tab-regexp
- 2 whitespace-space-before-tab t))
- t)))
- (cond
- ((memq 'indentation whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show indentation SPACEs (indent-tabs-mode)
- (list (whitespace-indentation-regexp)
- 1 whitespace-indentation t))
- t))
- ((memq 'indentation::tab whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show indentation SPACEs (SPACEs)
- (list (whitespace-indentation-regexp 'tab)
- 1 whitespace-indentation t))
- t))
- ((memq 'indentation::space whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show indentation SPACEs (TABs)
- (list (whitespace-indentation-regexp 'space)
- 1 whitespace-indentation t))
- t)))
- (when (memq 'empty whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show empty lines at beginning of buffer
- (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
- 1 whitespace-empty t))
- t))
- (cond
- ((memq 'space-after-tab whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show SPACEs after TAB (indent-tabs-mode)
- (list (whitespace-space-after-tab-regexp)
- 1 whitespace-space-after-tab t))
- t))
- ((memq 'space-after-tab::tab whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show SPACEs after TAB (SPACEs)
- (list (whitespace-space-after-tab-regexp 'tab)
- 1 whitespace-space-after-tab t))
- t))
- ((memq 'space-after-tab::space whitespace-active-style)
- (font-lock-add-keywords
- nil
- (list
- ;; Show SPACEs after TAB (TABs)
- (list (whitespace-space-after-tab-regexp 'space)
- 1 whitespace-space-after-tab t))
- t)))
- ;; now turn on font lock and highlight blanks
- (font-lock-mode 1)))
+ ;; Add whitespace-mode color into font lock.
+ (setq
+ whitespace-font-lock-keywords
+ `(
+ ,@(when (memq 'spaces whitespace-active-style)
+ ;; Show SPACEs.
+ `((,whitespace-space-regexp 1 whitespace-space t)
+ ;; Show HARD SPACEs.
+ (,whitespace-hspace-regexp 1 whitespace-hspace t)))
+ ,@(when (memq 'tabs whitespace-active-style)
+ ;; Show TABs.
+ `((,whitespace-tab-regexp 1 whitespace-tab t)))
+ ,@(when (memq 'trailing whitespace-active-style)
+ ;; Show trailing blanks.
+ `((,#'whitespace-trailing-regexp 1 whitespace-trailing t)))
+ ,@(when (or (memq 'lines whitespace-active-style)
+ (memq 'lines-tail whitespace-active-style))
+ ;; Show "long" lines.
+ `((,(let ((line-column (or whitespace-line-column fill-column)))
+ (format
+ "^\\([^\t\n]\\{%s\\}\\|[^\t\n]\\{0,%s\\}\t\\)\\{%d\\}%s\\(.+\\)$"
+ whitespace-tab-width
+ (1- whitespace-tab-width)
+ (/ line-column whitespace-tab-width)
+ (let ((rem (% line-column whitespace-tab-width)))
+ (if (zerop rem)
+ ""
+ (format ".\\{%d\\}" rem)))))
+ ,(if (memq 'lines whitespace-active-style)
+ 0 ; whole line
+ 2) ; line tail
+ whitespace-line prepend)))
+ ,@(when (or (memq 'space-before-tab whitespace-active-style)
+ (memq 'space-before-tab::tab whitespace-active-style)
+ (memq 'space-before-tab::space whitespace-active-style))
+ `((,whitespace-space-before-tab-regexp
+ ,(cond
+ ((memq 'space-before-tab whitespace-active-style)
+ ;; Show SPACEs before TAB (indent-tabs-mode).
+ (if whitespace-indent-tabs-mode 1 2))
+ ((memq 'space-before-tab::tab whitespace-active-style)
+ 1)
+ ((memq 'space-before-tab::space whitespace-active-style)
+ 2))
+ whitespace-space-before-tab t)))
+ ,@(when (or (memq 'indentation whitespace-active-style)
+ (memq 'indentation::tab whitespace-active-style)
+ (memq 'indentation::space whitespace-active-style))
+ `((,(cond
+ ((memq 'indentation whitespace-active-style)
+ ;; Show indentation SPACEs (indent-tabs-mode).
+ (whitespace-indentation-regexp))
+ ((memq 'indentation::tab whitespace-active-style)
+ ;; Show indentation SPACEs (SPACEs).
+ (whitespace-indentation-regexp 'tab))
+ ((memq 'indentation::space whitespace-active-style)
+ ;; Show indentation SPACEs (TABs).
+ (whitespace-indentation-regexp 'space)))
+ 1 whitespace-indentation t)))
+ ,@(when (memq 'empty whitespace-active-style)
+ ;; Show empty lines at beginning of buffer.
+ `((,#'whitespace-empty-at-bob-regexp
+ 1 whitespace-empty t)
+ ;; Show empty lines at end of buffer.
+ (,#'whitespace-empty-at-eob-regexp
+ 1 whitespace-empty t)))
+ ,@(when (or (memq 'space-after-tab whitespace-active-style)
+ (memq 'space-after-tab::tab whitespace-active-style)
+ (memq 'space-after-tab::space whitespace-active-style))
+ `((,(cond
+ ((memq 'space-after-tab whitespace-active-style)
+ ;; Show SPACEs after TAB (indent-tabs-mode).
+ (whitespace-space-after-tab-regexp))
+ ((memq 'space-after-tab::tab whitespace-active-style)
+ ;; Show SPACEs after TAB (SPACEs).
+ (whitespace-space-after-tab-regexp 'tab))
+ ((memq 'space-after-tab::space whitespace-active-style)
+ ;; Show SPACEs after TAB (TABs).
+ (whitespace-space-after-tab-regexp 'space)))
+ 1 whitespace-space-after-tab t)))))
+ (font-lock-add-keywords nil whitespace-font-lock-keywords t)
+ (when font-lock-mode
+ (font-lock-fontify-buffer))))