From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#14395: 24.3; [PATCH] new feature smie-highlight-matching-block Date: Wed, 15 May 2013 22:31:47 -0400 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1368671591 14429 80.91.229.3 (16 May 2013 02:33:11 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 16 May 2013 02:33:11 +0000 (UTC) Cc: 14395@debbugs.gnu.org To: Leo Liu Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu May 16 04:33:08 2013 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 1Uco0C-00010K-CJ for geb-bug-gnu-emacs@m.gmane.org; Thu, 16 May 2013 04:33:08 +0200 Original-Received: from localhost ([::1]:52832 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uco0B-0000NP-VA for geb-bug-gnu-emacs@m.gmane.org; Wed, 15 May 2013 22:33:07 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:58948) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uco04-0000NG-7V for bug-gnu-emacs@gnu.org; Wed, 15 May 2013 22:33:05 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ucnzz-0004vh-G9 for bug-gnu-emacs@gnu.org; Wed, 15 May 2013 22:33:00 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:58370) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ucnzz-0004vc-Cv for bug-gnu-emacs@gnu.org; Wed, 15 May 2013 22:32:55 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1Uco06-0003L0-Jv for bug-gnu-emacs@gnu.org; Wed, 15 May 2013 22:33:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 16 May 2013 02:33:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14395 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 14395-submit@debbugs.gnu.org id=B14395.136867152612666 (code B ref 14395); Thu, 16 May 2013 02:33:02 +0000 Original-Received: (at 14395) by debbugs.gnu.org; 16 May 2013 02:32:06 +0000 Original-Received: from localhost ([127.0.0.1]:46727 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UcnzB-0003IF-HY for submit@debbugs.gnu.org; Wed, 15 May 2013 22:32:06 -0400 Original-Received: from ironport2-out.teksavvy.com ([206.248.154.182]:53731) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Ucnz7-0003HM-BX for 14395@debbugs.gnu.org; Wed, 15 May 2013 22:32:02 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av4EABK/CFG4rwb8/2dsb2JhbABEvw4Xc4IeAQEEAVYjBQsLDh8HEhQYDSSIHgbBLY1VgzUDpHqBXoMTgUoE X-IPAS-Result: Av4EABK/CFG4rwb8/2dsb2JhbABEvw4Xc4IeAQEEAVYjBQsLDh8HEhQYDSSIHgbBLY1VgzUDpHqBXoMTgUoE X-IronPort-AV: E=Sophos;i="4.84,565,1355115600"; d="scan'208";a="12564964" Original-Received: from 184-175-6-252.dsl.teksavvy.com (HELO fmsmemgm.homelinux.net) ([184.175.6.252]) by ironport2-out.teksavvy.com with ESMTP/TLS/ADH-AES256-SHA; 15 May 2013 22:31:43 -0400 Original-Received: by fmsmemgm.homelinux.net (Postfix, from userid 20848) id 45FFEAE182; Wed, 15 May 2013 22:31:47 -0400 (EDT) In-Reply-To: (Leo Liu's message of "Wed, 15 May 2013 15:13:49 +0800") 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:74311 Archived-At: > Thank you for your comments, Stefan. I have taken these into account and > new patch attached. See below. > One thing in the patch that I dislike is having to forward-declare > smie-highlight-matching-block-mode. Do you have a cleaner way? Move the define-minor-mode before the first use of the variable? > +(defvar smie-highlight-matching-block-mode nil) ; Silence compiler warning A forward declaration takes the form (defvar foo), not (defvar foo nil). > (defun smie-blink-matching-open () > "Blink the matching opener when applicable. > This uses SMIE's tables and is expected to be placed on `post-self-insert-hook'." > (let ((pos (point)) ;Position after the close token. > token) > (when (and blink-matching-paren > + (not smie-highlight-matching-block-mode) I suggest you instead remove smie-blink-matching-open from post-self-insert-hook (and refrain from adding it back) when enabling smie-highlight-matching-block-mode. > +(defvar smie-highlight-matching-block-timer nil) > +(defvar-local smie-highlight-matching-block-overlay nil) > +(defvar-local smie-highlight-matching-block-lastpos -1) Please use the "smie--" prefix for such internal variables. > +(define-minor-mode smie-highlight-matching-block-mode nil Please provide a docstring. > + :global t :group 'smie Don't bother with the ":group 'smie", it'll be added automatically anyway. > + (if smie-highlight-matching-block-mode > + (setq smie-highlight-matching-block-timer > + (run-with-idle-timer 0.2 t #'smie-highlight-matching-block)) > + (when (timerp smie-highlight-matching-block-timer) > + (cancel-timer smie-highlight-matching-block-timer)))) (progn (smie-highlight-matching-block-mode 1) (smie-highlight-matching-block-mode 1)) Will start 2 timers (and lose the reference to the first one, making it harder to cancel). Better structure minor mode bodies as "first unconditionally turn it off, then turn it on is needed" to avoid such problems. Similarly (progn (smie-highlight-matching-block-mode -1) (smie-highlight-matching-block-mode -1)) will try to cancel an already canceled timer, so better reset the timer var to nil after canceling. Stefan