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: Sat, 08 Dec 2012 18:20:03 +0530 Message-ID: <87pq2k6744.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> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1354970862 25082 80.91.229.3 (8 Dec 2012 12:47:42 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 8 Dec 2012 12:47:42 +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 Sat Dec 08 13:47:55 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 1ThJow-0000K2-TU for geb-bug-gnu-emacs@m.gmane.org; Sat, 08 Dec 2012 13:47:55 +0100 Original-Received: from localhost ([::1]:56751 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ThJok-0003sn-IU for geb-bug-gnu-emacs@m.gmane.org; Sat, 08 Dec 2012 07:47:42 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:44938) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ThJoi-0003sg-2j for bug-gnu-emacs@gnu.org; Sat, 08 Dec 2012 07:47:41 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ThJog-0004tF-Og for bug-gnu-emacs@gnu.org; Sat, 08 Dec 2012 07:47:39 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:49762) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ThJog-0004tB-Hv for bug-gnu-emacs@gnu.org; Sat, 08 Dec 2012 07:47:38 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1ThJp4-0007kx-0K for bug-gnu-emacs@gnu.org; Sat, 08 Dec 2012 07:48: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: Sat, 08 Dec 2012 12:48:01 +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.135497086029786 (code B ref 11095); Sat, 08 Dec 2012 12:48:01 +0000 Original-Received: (at 11095) by debbugs.gnu.org; 8 Dec 2012 12:47:40 +0000 Original-Received: from localhost ([127.0.0.1]:60013 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1ThJoh-0007kN-Sg for submit@debbugs.gnu.org; Sat, 08 Dec 2012 07:47:40 -0500 Original-Received: from mail-pa0-f44.google.com ([209.85.220.44]:43447) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1ThJof-0007kE-A2 for 11095@debbugs.gnu.org; Sat, 08 Dec 2012 07:47:38 -0500 Original-Received: by mail-pa0-f44.google.com with SMTP id hz11so1045828pad.3 for <11095@debbugs.gnu.org>; Sat, 08 Dec 2012 04:47:12 -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=VmVOg2g8F+yNwEpagTHeXvJI81cHKOqH1zyh0+GWg3U=; b=X6hp8HthbZ8eM/4eRL29Vjrq9kRhrnnLY1f+1GdwA18tZQsmiBKp35unC6J20v2gYa cM5L1hzkKjLHR9UoxNgLcHz38DWkT2bsgn+e5l+LGx/wL1H+HQXpdoUFhFSYOwTdp8Pz r2Un4BJzeFNECdYJ+TSuFdvEzIiudgB6WE14tZtrqKRBtnTpE7D+5k0QULZAmRnYgd8P AzHIwar+plRXYTcPuNT+FG3ze5wK2BR89lEaWiwbyIK5syXMs6zadYrfjVk4+5cInXyg 60DWHAJ2tZkVLNkP3Gwn2IZHuXkpksYPSu7qcolGtKoB7gTnE6nrN/V8Jrvc66MfkphF WStA== Original-Received: by 10.66.86.102 with SMTP id o6mr20907394paz.11.1354970830145; Sat, 08 Dec 2012 04:47:10 -0800 (PST) Original-Received: from debian-6.05 ([101.63.139.66]) by mx.google.com with ESMTPS id sg7sm8414248pbb.50.2012.12.08.04.47.07 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 08 Dec 2012 04:47:09 -0800 (PST) In-Reply-To: (Stefan Monnier's message of "Fri, 07 Dec 2012 11:55:54 -0500") 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:68189 Archived-At: --=-=-= Content-Type: text/plain Attaching a patch. See ChangeLog for details. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=bug11095-rev111152-1.diff === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2012-12-07 16:48:42 +0000 +++ lisp/ChangeLog 2012-12-08 12:43:29 +0000 @@ -1,3 +1,11 @@ +2012-12-08 Jambunathan K + + * hi-lock.el (hi-lock--regexps-at-point): Use a better heuristic + that depends on actual faces rather than their common prefix. + (hi-lock-unface-buffer): Fix unhighlight all, when using overlays. + (hi-lock-set-pattern): Refuse to highlight an already highlighted + regexp. + 2012-12-07 Stefan Monnier * hi-lock.el (hi-lock-unface-buffer): If there's no matching regexp at === modified file 'lisp/hi-lock.el' --- lisp/hi-lock.el 2012-12-07 16:48:42 +0000 +++ lisp/hi-lock.el 2012-12-08 10:38:25 +0000 @@ -471,19 +471,19 @@ (let ((regexp (get-char-property (point) 'hi-lock-overlay-regexp))) (when regexp (push regexp regexps))) ;; With font-locking on, check if the cursor is on an highlighted text. - ;; Checking for hi-lock face is a good heuristic. FIXME: use "hi-lock-". - (and (string-match "\\`hi-" (face-name (face-at-point))) - (let* ((hi-text - (buffer-substring-no-properties - (previous-single-property-change (point) 'face) - (next-single-property-change (point) 'face)))) - ;; Compute hi-lock patterns that match the - ;; highlighted text at point. Use this later in - ;; during completing-read. - (dolist (hi-lock-pattern hi-lock-interactive-patterns) - (let ((regexp (car hi-lock-pattern))) - (if (string-match regexp hi-text) - (push regexp regexps)))))) + (and (member (list 'quote (face-at-point)) + (mapcar #'cadadr hi-lock-interactive-patterns)) + (let* ((hi-text + (buffer-substring-no-properties + (previous-single-property-change (point) 'face) + (next-single-property-change (point) 'face)))) + ;; Compute hi-lock patterns that match the + ;; highlighted text at point. Use this later in + ;; during completing-read. + (dolist (hi-lock-pattern hi-lock-interactive-patterns) + (let ((regexp (car hi-lock-pattern))) + (if (string-match regexp hi-text) + (push regexp regexps)))))) regexps)) (defvar-local hi-lock--last-face nil) @@ -541,6 +541,7 @@ (dolist (keyword (if (eq regexp t) hi-lock-interactive-patterns (list (assoc regexp hi-lock-interactive-patterns)))) (when keyword + (setq regexp (car keyword)) (let ((face (cadr (cadr (cadr keyword))))) ;; Make `face' the next one to use by default. (setq hi-lock--last-face @@ -628,7 +629,8 @@ ;; Hashcons the regexp, so it can be passed to remove-overlays later. (setq regexp (hi-lock--hashcons regexp)) (let ((pattern (list regexp (list 0 (list 'quote face) t)))) - (unless (member pattern hi-lock-interactive-patterns) + ;; Refuse to highlight a text that is already highlighted. + (unless (assoc regexp hi-lock-interactive-patterns) (push pattern hi-lock-interactive-patterns) (if font-lock-mode (progn --=-=-=--