From 9af2ecc36d1d15bb63fb6b28a9b5baa6990f79b8 Mon Sep 17 00:00:00 2001 From: Tino Calancha Date: Thu, 27 Apr 2017 12:01:19 +0900 Subject: [PATCH] Drop face from hi-lock--unused-faces only when used * lisp/hi-lock.el (hi-lock-set-pattern): If REGEXP is already highlighted, then push FACE into hi-lock--unused-faces (Bug#26666). * test/lisp/hi-lock-tests.el (hi-lock-bug26666): Add test. --- lisp/hi-lock.el | 3 ++- test/lisp/hi-lock-tests.el | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 test/lisp/hi-lock-tests.el diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el index ebd18621ef9..5139e01fa84 100644 --- a/lisp/hi-lock.el +++ b/lisp/hi-lock.el @@ -695,7 +695,8 @@ with completion and history." (setq regexp (hi-lock--hashcons regexp)) (let ((pattern (list regexp (list 0 (list 'quote face) 'prepend)))) ;; Refuse to highlight a text that is already highlighted. - (unless (assoc regexp hi-lock-interactive-patterns) + (if (assoc regexp hi-lock-interactive-patterns) + (add-to-list 'hi-lock--unused-faces (face-name face)) (push pattern hi-lock-interactive-patterns) (if (and font-lock-mode (font-lock-specified-p major-mode)) (progn diff --git a/test/lisp/hi-lock-tests.el b/test/lisp/hi-lock-tests.el new file mode 100644 index 00000000000..2cb662cfaca --- /dev/null +++ b/test/lisp/hi-lock-tests.el @@ -0,0 +1,40 @@ +;;; hi-lock-tests.el --- Tests for hi-lock.el -*- lexical-binding: t; -*- + +;; Copyright (C) 2017 Free Software Foundation, Inc. + +;; Author: Tino Calancha +;; Keywords: + +;; 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 3 of the License, 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. If not, see . + +;;; Code: + +(require 'ert) +(require 'hi-lock) + +(ert-deftest hi-lock-bug26666 () + "Test for http://debbugs.gnu.org/26666 ." + (let ((faces hi-lock-face-defaults)) + (with-temp-buffer + (insert "a A b B\n") + (cl-letf (((symbol-function 'completing-read) + (lambda (prompt coll x y z hist defaults) + (car defaults)))) + (dotimes (_ 2) + (let ((face (hi-lock-read-face-name))) + (hi-lock-set-pattern "a" face)))) + (should (equal hi-lock--unused-faces (cdr faces)))))) + +(provide 'hi-lock-tests) +;;; hi-lock-tests.el ends here -- 2.11.4.GIT