From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Jambunathan K Newsgroups: gmane.emacs.bugs Subject: bug#11095: [PATCH] Re: bug#11095: 24.0.94; hi-lock-face-buffer/unhighlight-regexp': Augment? Date: Mon, 10 Dec 2012 09:56:47 +0530 Message-ID: <87ip8a352w.fsf@gmail.com> References: <81d37z271c.fsf@gmail.com> <87626i2i4r.fsf@gmail.com> <87zk1r3h3b.fsf@gmail.com> <87lidaan4g.fsf@gmail.com> <87a9tq6cs5.fsf@gmail.com> <87sj7iii4f.fsf@gmail.com> <87pq2k6744.fsf@gmail.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1355113480 15569 80.91.229.3 (10 Dec 2012 04:24:40 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 10 Dec 2012 04:24:40 +0000 (UTC) Cc: 11095@debbugs.gnu.org To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Dec 10 05:24:53 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1ThuvA-0000Nk-99 for geb-bug-gnu-emacs@m.gmane.org; Mon, 10 Dec 2012 05:24:48 +0100 Original-Received: from localhost ([::1]:60222 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Thuux-00076g-Fb for geb-bug-gnu-emacs@m.gmane.org; Sun, 09 Dec 2012 23:24:35 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:52597) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Thuut-00076b-Px for bug-gnu-emacs@gnu.org; Sun, 09 Dec 2012 23:24:33 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Thuur-0001zl-Gd for bug-gnu-emacs@gnu.org; Sun, 09 Dec 2012 23:24:31 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:52639) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Thuur-0001zR-Bk for bug-gnu-emacs@gnu.org; Sun, 09 Dec 2012 23:24:29 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1ThuvO-0006l7-8Q for bug-gnu-emacs@gnu.org; Sun, 09 Dec 2012 23:25:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Jambunathan K Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 10 Dec 2012 04:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 11095 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 11095-submit@debbugs.gnu.org id=B11095.135511346125936 (code B ref 11095); Mon, 10 Dec 2012 04:25:02 +0000 Original-Received: (at 11095) by debbugs.gnu.org; 10 Dec 2012 04:24:21 +0000 Original-Received: from localhost ([127.0.0.1]:34657 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Thuuj-0006kG-1D for submit@debbugs.gnu.org; Sun, 09 Dec 2012 23:24:21 -0500 Original-Received: from mail-pa0-f44.google.com ([209.85.220.44]:45735) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Thuuf-0006k5-Gn for 11095@debbugs.gnu.org; Sun, 09 Dec 2012 23:24:18 -0500 Original-Received: by mail-pa0-f44.google.com with SMTP id hz11so1704520pad.3 for <11095@debbugs.gnu.org>; Sun, 09 Dec 2012 20:23:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=KdpfcxFQ3M8UHI+ngHHHmmZN7HYjlpImFLhnmtdJx4U=; b=RAKaFOf4fA/R2YZL2h39/jNpooY2hwpseDdTK1gRX7Mvu0xDmFkJlD3w55tmZG5FKl b7B2f44T8oVI3oRbHVJtHX2i8JCHU0q3BIBQ+F07UiX8+6P96OwfHNpnC+f3KspDov1j iSRBu56YQ1uPYBtEIw6sww1DqcgfABtXal1lsdaOVulfwYKROINz8HXnJXktV0SF8H7e 6djoLkaac6+DXEYJ+qEsaEBsv0Z3aAhmD8eBUffKu2VO8R2s3ycp3vj3KyW3WXEZco6/ iXqTnzuIA6u4Iul6CExDguV00EGJZmrFSucKnsQYZKtNVAoIsfFthN/ta0pjF78zFhT3 1QBg== Original-Received: by 10.69.1.71 with SMTP id be7mr35946918pbd.45.1355113422225; Sun, 09 Dec 2012 20:23:42 -0800 (PST) Original-Received: from debian-6.05 ([115.241.51.212]) by mx.google.com with ESMTPS id ip8sm11106684pbc.36.2012.12.09.20.23.39 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 09 Dec 2012 20:23:41 -0800 (PST) In-Reply-To: <87pq2k6744.fsf@gmail.com> (Jambunathan K.'s message of "Sat, 08 Dec 2012 18:20:03 +0530") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:68256 Archived-At: --=-=-= Content-Type: text/plain This patch which /improves/ status quo. Applies cleanly on top of earlier patch at http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11095#94 This patch makes sure that faces used for highlighting are always distinct and recycles them only when it is inevitable. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=bug11095-rev111152-2.diff === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2012-12-10 04:18:24 +0000 +++ lisp/ChangeLog 2012-12-10 04:18:59 +0000 @@ -1,3 +1,11 @@ +2012-12-10 Jambunathan K + + * hi-lock.el (hi-lock--last-face): Remove it. + (hi-lock--unused-faces): New variable, a free list of faces + available for highlighting text. + (hi-lock-unface-buffer, hi-lock-read-face-name): Propagate above + changes. + 2012-12-08 Jambunathan K * hi-lock.el (hi-lock--regexps-at-point): Use a better heuristic === modified file 'lisp/hi-lock.el' --- lisp/hi-lock.el 2012-12-08 13:06:46 +0000 +++ lisp/hi-lock.el 2012-12-10 04:06:21 +0000 @@ -486,7 +486,9 @@ updated as you type." (push regexp regexps)))))) regexps)) -(defvar-local hi-lock--last-face nil) +(defvar-local hi-lock--unused-faces nil + "List of faces that is not used and is available for highlighting new text. +Face names from this list come from `hi-lock-face-defaults'.") ;;;###autoload (defalias 'unhighlight-regexp 'hi-lock-unface-buffer) @@ -544,9 +546,7 @@ then remove all hi-lock highlighting." (setq regexp (car keyword)) (let ((face (cadr (cadr (cadr keyword))))) ;; Make `face' the next one to use by default. - (setq hi-lock--last-face - (cadr (member (symbol-name face) - (reverse hi-lock-face-defaults))))) + (add-to-list 'hi-lock--unused-faces (face-name face))) (font-lock-remove-keywords nil (list keyword)) (setq hi-lock-interactive-patterns (delq keyword hi-lock-interactive-patterns)) @@ -609,20 +609,26 @@ not suitable." "Return face for interactive highlighting. When `hi-lock-auto-select-face' is non-nil, just return the next face. Otherwise, read face name from minibuffer with completion and history." - (let ((default (or (cadr (member hi-lock--last-face hi-lock-face-defaults)) - (car hi-lock-face-defaults)))) - (setq hi-lock--last-face + (unless hi-lock-interactive-patterns + (setq hi-lock--unused-faces hi-lock-face-defaults)) + (let* ((last-used-face + (when hi-lock-interactive-patterns + (face-name (cadar (cdar (cdar hi-lock-interactive-patterns)))))) + (defaults (append hi-lock--unused-faces + (cdr (member last-used-face hi-lock-face-defaults)) + hi-lock-face-defaults)) + face) (if (and hi-lock-auto-select-face (not current-prefix-arg)) - default - (completing-read - (format "Highlight using face (default %s): " default) - obarray 'facep t nil 'face-name-history - (append (member default hi-lock-face-defaults) - hi-lock-face-defaults)))) - (unless (member hi-lock--last-face hi-lock-face-defaults) - (setq hi-lock-face-defaults - (append hi-lock-face-defaults (list hi-lock--last-face)))) - (intern hi-lock--last-face))) + (setq face (or (pop hi-lock--unused-faces) (car defaults))) + (setq face (completing-read + (format "Highlight using face (default %s): " + (car defaults)) + obarray 'facep t nil 'face-name-history defaults)) + ;; Update list of un-used faces. + (setq hi-lock--unused-faces (delete face hi-lock--unused-faces)) + ;; Grow the list of defaults. + (add-to-list 'hi-lock-face-defaults face t)) + (intern face))) (defun hi-lock-set-pattern (regexp face) "Highlight REGEXP with face FACE." --=-=-=--