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: 24.0.94; hi-lock-face-buffer/unhighlight-regexp': Augment? Date: Thu, 11 Oct 2012 03:38:51 +0530 Message-ID: <87y5jec74c.fsf@gmail.com> References: <81d37z271c.fsf@gmail.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1349906910 9016 80.91.229.3 (10 Oct 2012 22:08:30 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 10 Oct 2012 22:08:30 +0000 (UTC) To: 11095@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Oct 11 00:08:37 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 1TM4SB-0003zh-Jw for geb-bug-gnu-emacs@m.gmane.org; Thu, 11 Oct 2012 00:08:35 +0200 Original-Received: from localhost ([::1]:45843 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TM4S5-0004nX-7T for geb-bug-gnu-emacs@m.gmane.org; Wed, 10 Oct 2012 18:08:29 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:51499) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TM4S1-0004n8-BT for bug-gnu-emacs@gnu.org; Wed, 10 Oct 2012 18:08:26 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TM4Rx-0007IZ-8i for bug-gnu-emacs@gnu.org; Wed, 10 Oct 2012 18:08:25 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:56200) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TM4Rx-0007I9-3A for bug-gnu-emacs@gnu.org; Wed, 10 Oct 2012 18:08:21 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1TM4Sb-0006S4-Op for bug-gnu-emacs@gnu.org; Wed, 10 Oct 2012 18:09:01 -0400 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: Wed, 10 Oct 2012 22:09: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: Original-Received: via spool by 11095-submit@debbugs.gnu.org id=B11095.134990689124741 (code B ref 11095); Wed, 10 Oct 2012 22:09:01 +0000 Original-Received: (at 11095) by debbugs.gnu.org; 10 Oct 2012 22:08:11 +0000 Original-Received: from localhost ([127.0.0.1]:38218 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TM4Rm-0006R0-Ii for submit@debbugs.gnu.org; Wed, 10 Oct 2012 18:08:11 -0400 Original-Received: from mail-pa0-f44.google.com ([209.85.220.44]:49429) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TM4Rj-0006Qm-Vf for 11095@debbugs.gnu.org; Wed, 10 Oct 2012 18:08:09 -0400 Original-Received: by mail-pa0-f44.google.com with SMTP id fb11so1073452pad.3 for <11095@debbugs.gnu.org>; Wed, 10 Oct 2012 15:07:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:references:date:in-reply-to:message-id:user-agent :mime-version:content-type; bh=R9PrJMyUghVWi7bZ5FSoVTOtFlW0sFBKn0qZwX/WR5c=; b=R3hztJi4xZK/1joYwF9GfIcjIR8KCPMx6HRyvzsMPbY7taV881srULSAQN4aKyQbSa D1uwB0NbHUYn/8pmVasBv3fRpr0wNj20ibzJk3YgnokAIoC+6SFuUy0WgocwwrCaLFLw mQldMLmNgCCrFg/jcC6aNcfLlnIW3lIZYYywqeSvBzPg/XmHyxSpSXXfY/YSbXlQDaFz GLQiN6OdGsJFkhU0yycdspd5pdIRkni2wYF7FzNavVjb1bWaV4CPBERX05ewoYZKwN5o BvBYD620DyYR/mW4qeY6u8PtJ3CpTxuJqDt8x60gMkzb/0DHRxcl6J0w3hcRFWBy7/4r 0UiA== Original-Received: by 10.66.85.133 with SMTP id h5mr66213631paz.10.1349906841112; Wed, 10 Oct 2012 15:07:21 -0700 (PDT) Original-Received: from debian-6.05 ([115.241.51.153]) by mx.google.com with ESMTPS id qb2sm1609190pbb.15.2012.10.10.15.07.17 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 10 Oct 2012 15:07:20 -0700 (PDT) In-Reply-To: <81d37z271c.fsf@gmail.com> (Jambunathan K.'s message of "Mon, 26 Mar 2012 12:16:55 +0530") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2.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 (newer, 2) 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:65474 Archived-At: --=-=-= Content-Type: text/plain Here is a patch for Part-1/Item-2. This patch applies ON TOP OF bug11095-part1.patch attached with http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11095#8) --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=bug11095-part2.patch Content-Description: bug11095-part2.patch === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2012-10-10 20:23:49 +0000 +++ lisp/ChangeLog 2012-10-10 21:59:39 +0000 @@ -1,5 +1,11 @@ 2012-10-10 Jambunathan K + * hi-lock.el (hi-lock-auto-select-face): New user variable. + (hi-lock-auto-select-face-defaults): New buffer local variable. + (hi-lock-read-face-name): Honor `hi-lock-auto-select-face'. + +2012-10-10 Jambunathan K + * hi-lock.el (hi-yellow, hi-pink, hi-green, hi-blue, hi-black-b) (hi-blue-b, hi-green-b, hi-red-b, hi-black-hb): Mark these faces as obsolete. === modified file 'lisp/hi-lock.el' --- lisp/hi-lock.el 2012-10-10 20:23:49 +0000 +++ lisp/hi-lock.el 2012-10-10 21:44:28 +0000 @@ -135,6 +135,14 @@ patterns." ;; It can have a function value. (put 'hi-lock-file-patterns-policy 'risky-local-variable t) +(defcustom hi-lock-auto-select-face nil + "Non-nil if highlighting commands should not prompt for face names. +When non-nil, each hi-lock command will cycle through faces in +`hi-lock-face-defaults'." + :type 'boolean + :group 'hi-lock + :version "24.3") + (defgroup hi-lock-faces nil "Faces for hi-lock." :group 'hi-lock @@ -221,8 +229,15 @@ patterns." "hi-lock-6" "hi-lock-7" "hi-lock-8" "hi-lock-9") "Default faces for hi-lock interactive functions.") -;;(dolist (f hi-lock-face-defaults) -;; (unless (facep f) (error "%s not a face" f))) +(defvar hi-lock-auto-select-face-defaults + (let ((l (copy-sequence hi-lock-face-defaults))) + (setcdr (last l) l)) + "Circular list of faces used for interactive highlighting. +When `hi-lock-auto-select-face' is non-nil, use the face at the +head of this list for next interactive highlighting. See also +`hi-lock-read-face-name'.") + +(make-variable-buffer-local 'hi-lock-auto-select-face-defaults) (define-obsolete-variable-alias 'hi-lock-regexp-history 'regexp-history @@ -577,7 +592,15 @@ not suitable." regexp)) (defun hi-lock-read-face-name () - "Read face name from minibuffer with completion and history." + "Return face name for interactive highlighting. +When `hi-lock-auto-select-face' is non-nil, return head of +`hi-lock-auto-select-face-defaults'. Otherwise, read face name +from minibuffer with completion and history." + (if hi-lock-auto-select-face + ;; Return current head and rotate the face list. + (prog1 (car hi-lock-auto-select-face-defaults) + (setq hi-lock-auto-select-face-defaults + (cdr hi-lock-auto-select-face-defaults))) (intern (completing-read "Highlight using face: " obarray 'facep t @@ -590,7 +613,7 @@ not suitable." (not (equal prefix (car hi-lock-face-defaults)))) (length prefix) 0))) 'face-name-history - (cdr hi-lock-face-defaults)))) + (cdr hi-lock-face-defaults))))) (defun hi-lock-set-pattern (regexp face) "Highlight REGEXP with face FACE." --=-=-= Content-Type: text/plain > Proposal is in two parts. Part-I deals with `hi-lock-face-buffer'. > Part-II deals with `unhighlight-regexp'. Part-III has a dump of the > current customization I have in my .emacs. > > I believe that my proposal is useful in general. So I request that it > be folded in to Emacs-24.1. > > Part-I: `hi-lock-face-buffer' & Co. > ---------------------------------- > > 1) Review the face names used in `hi-lock-face-defaults' and make the > faces customizable. The defaults may not look good on a user's his > own font-lock configuration. > > 2) Make `hi-lock-face-buffer' use a different face on each invocation. > > Here is a real-world usecase for the above request. > > As a programmer, I use highlighting to trace variable dependencies > within a function. For example, in the example below, after > highlighting the variables in __different__ faces, I will come to the > conclusion that "a" depends on "d" and "tmp". > > c = d; > b = c + tmp; > a = b; > > And I use this very often to track variables and how they get their > values from. > > If I were to use the default Emacs provided behaviour then I would > have to press M-n multiple times as I highlight more and more > symbols. (Typically I have 3-5 symbols highlighted before I turn off > highlighting.) > > See elisp snippet at the end of the mail. > > > Part-II: `unhighlight-regexp' > ------------------------------ > > See usecase in Part-I/Item-2 > > 1) I want to selectively turn-off highlighting for certain regexps > (arguably) that _specific_ highlighted regexp cursor is stationed on. > This would happen when I decide that I don't want to factor a > particular variable for my current refactoring exercise. > > I find the current behaviour of `unhighlight-regexp' slightly > tedious. > > 1. There is no completion for which regexp I want to unhighlight and > I have to circle through `hi-lock-interactive-patterns'. > > 2. Browsing the `hi-lock-interactive-patterns' is tedious for the > following reasons: > > - The order in which unhighlighting happens could totally be > unrelated to the order in which highlighting happens. When I am > analyzing the variable flow, I don't want to do a "context > switch" trying to find out what item to choose from the > `unhighlight-regexp' menu. > > 2) I want to unhighlight all regexps. This happens when I am done with > variable analysis. > > > ps: I am not questioning the current defaults. I am only saying that it > the current behaviour is too generic to be immediately useful (atleast > for my usecase) and so needs some sort of extra augmentation. > > Part-III: Elisp snippet > ----------------------- > > ;; Why should the color of the faces be encoded in the variable name? > ;; Seems counter-intutitive to me. I cannot relate to a hi-yellow > ;; face customized to render in red. > > ;; (defvar hi-lock-face-defaults > ;; '("hi-yellow" "hi-pink" "hi-green" "hi-blue" "hi-black-b" > ;; "hi-blue-b" "hi-red-b" "hi-green-b" "hi-black-hb") > ;; "Default faces for hi-lock interactive functions.") > > ;; So roll out my own face for highlighting. Make them > ;; __customizable__. Note that the name of the face doesn't say what > ;; the color of the highlight will be. Works for the color theme that > ;; I have. > (custom-set-faces > '(highlight1 ((t (:background "yellow" :foreground "black")))) > '(highlight2 ((t (:background "OrangeRed" :foreground "black")))) > '(highlight3 ((((class color) (background dark)) (:background "AntiqueWhite" :foreground "black")))) > '(highlight4 ((t (:background "SystemHotTrackingColor")))) > '(highlight5 ((t (:background "VioletRed" :foreground "black"))))) > > ;; override the Emacs default > (setq hi-lock-face-defaults > '("highlight1" "highlight2" "highlight3" "highlight4" "highlight5")) > > (defvar hi-lock-faces > (let ((l (copy-list hi-lock-face-defaults))) > (setcdr (last l) l)) > "Circular list of faces in `hi-lock-face-defaults'.") > > ;; make `hi-lock-faces' buffer local > (make-variable-buffer-local 'hi-lock-faces) > > (defun highlight-symbol () > "Highlight symbol at point. > For illustartion only. Note the use of `hi-lock-face-buffer'. > Choose a new face from `hi-lock-faces' on each invocation. > Overrides the default behaviour in vanilla Emacs which is to use > the face at the head of the list." > (interactive) > (hi-lock-face-buffer > (concat "\\_<" (regexp-quote (thing-at-point 'symbol)) "\\_>") > ;; rotate the face list > (prog1 (car hi-lock-faces) > (setq hi-lock-faces (cdr hi-lock-faces))))) > > (defun my-unhighlight-regexp (arg) > "Wrapper around `unhighlight-regexp'. > With a prefix argument, turn off all highlighting. > > TODO: Check if the symbol is right now on a highlighted regexp. > If yes, unhighlight only that regexp." > (interactive "P") > (if arg > (mapc (lambda (p) > (unhighlight-regexp (car p))) > hi-lock-interactive-patterns) > (call-interactively 'unhighlight-regexp))) > > > > -- --=-=-=--