From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Noah Lavine Newsgroups: gmane.emacs.devel Subject: Re: PATCH: num3-mode for highlighting groups of digits in long numbers Date: Wed, 26 Sep 2012 08:56:21 -0400 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1348664202 22417 80.91.229.3 (26 Sep 2012 12:56:42 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 26 Sep 2012 12:56:42 +0000 (UTC) Cc: Felix Lee , Stefan Monnier , emacs-devel@gnu.org To: Michal Nazarewicz Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Sep 26 14:56:46 2012 Return-path: Envelope-to: ged-emacs-devel@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 1TGrAQ-00015e-At for ged-emacs-devel@m.gmane.org; Wed, 26 Sep 2012 14:56:42 +0200 Original-Received: from localhost ([::1]:40329 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGrAL-0001IH-Do for ged-emacs-devel@m.gmane.org; Wed, 26 Sep 2012 08:56:37 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:38761) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGrAD-0001Fe-3J for emacs-devel@gnu.org; Wed, 26 Sep 2012 08:56:35 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TGrA6-0001ZH-Iv for emacs-devel@gnu.org; Wed, 26 Sep 2012 08:56:29 -0400 Original-Received: from mail-oa0-f41.google.com ([209.85.219.41]:53476) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGrA6-0001Y0-8a for emacs-devel@gnu.org; Wed, 26 Sep 2012 08:56:22 -0400 Original-Received: by oagk14 with SMTP id k14so620841oag.0 for ; Wed, 26 Sep 2012 05:56:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=a8CEGZa8RtfhtvKSNRZYRtLG2rgi5KddW4FMc2Vi8Co=; b=JSaXIXTfHkzfg4YV49ClUFMnDZlhYsI615f/LxdR7W/LmzR8Q7OFGFYGcV8qGOXc+n 2HhMrFMbnwkKU/HHGxs4Y5Yn+J3GzFaa5afwNe7c8PL2P6IuMkhviU+P4+rm1xaJGP0G eRTdRMkUuyAD9HITlQx6nD6GnR2gf01+3lxmf+fzxeuCazk8OMWqu9PI0QKz5Wh8zXsn g/JeIiVtV7OuvtHfgAZuYzlttI0M8j9Zf2w7ZSc6nD9luvKHqjzNfp5F2NcLti9xeM7y LZ+uvgg3BS17nGlfwtqtV5EQ0H9WV8ZnYZFfCKoLp9HzqA+lLg7SwJ+4taJlYCWz0Ejc 4asA== Original-Received: by 10.182.193.7 with SMTP id hk7mr343184obc.30.1348664181206; Wed, 26 Sep 2012 05:56:21 -0700 (PDT) Original-Received: by 10.76.167.197 with HTTP; Wed, 26 Sep 2012 05:56:21 -0700 (PDT) In-Reply-To: X-Google-Sender-Auth: hlRYOH5MZxrjnQyhjDLZ50zaVXA X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.85.219.41 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:153573 Archived-At: I don't usually post, but something confuses me about this patch (which otherwise looks awesome, by the way): in the doc string for num3-mode, you say `num3-face-even' face (which is empty by default) is the one used for the group closest to the decimal point. But looking at the faces, it appears that num3-face-odd is '((t)), and num3-face-even has lots of attributes. Am I misunderstanding the documentation, or did you switch the faces? Thanks for writing this. It looks great. Noah Lavine On Wed, Sep 26, 2012 at 8:27 AM, Michal Nazarewicz wrote: > On Wed, Sep 26 2012, Stefan Monnier wrote: >> For single-file packages, you just need to file to be structured >> correctly (try C-u M-x checkdoc-current-buffer) and have "Version:" >> and "Maintainer:" headers at the beginning. > > Attached below. > > checkdoc-current-buffer gives me two errors but I'm not sure how to fix > those since in given instances num3-mode refers to the mode. > > num3.el:102: Disambiguate num3-mode by preceding w/ function,command,vari= able,option or symbol. > num3.el:111: Disambiguate num3-mode by preceding w/ function,command,vari= able,option or symbol. > >> Also the packages need to have their copyright paperwork in order, just >> like code included with Emacs, so we can easily move code between >> the two. > > Everything should be in order on that part. Google holds the Copyright, > but it has the proper paperwork done (I have contributed previously). > > ---------- >% ---------------------------------------------------------- > > ;;; num3-mode.el --- highlight groups of digits in long numbers -*- lexi= cal-binding: t -*- > > ;; Copyright (C) 2012 Free Software Foundation, Inc. > > ;; Author: Felix Lee , Michal Nazarewicz > ;; Maintainer: Michal Nazarewicz > ;; Version: 1.0 > ;; Keywoards: faces, minor-mode > > ;; GNU Emacs 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. > > ;; GNU Emacs 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 GNU Emacs. If not, see . > > ;;; Commentary: > > ;; Num3 is a minor mode that makes long numbers more readable by > ;; highlighting groups of 3 (customisable) decimal digits or 4 hex > ;; digits when font-lock is on. Highlighting alternates between two > ;; faces that can be customised. > > ;;; Usage: > > ;; M-x num3-mode toggle for current buffer. > ;; M-x global-num3-mode toggle for all buffers. > ;; > ;; Or add the following to your ~/.emacs file: > ;; (load "path/to/num3") > ;; (global-num3-mode) > > ;;; Code: > > (defgroup num3 nil > "Num3 is a minor mode that makes long numbers more readable by > highlighting groups of decimal digits or 4 hex digits when > font-lock is on." > :group 'text) > > (defcustom num3-group-size 3 > "Number of digits to group in decimal numbers.") > > (defcustom num3-threshold 5 > "Number must be at least that long to start highlighting.") > > (defface num3-face-odd > '((t)) > "Face to add for odd groups of digits." > :group 'num3) > > (defface num3-face-even > '((t :underline t :weight bold :background "#eeeeee")) > "Face to add for even groups of digits. > The default face uses redundant signaling, because this is in > addition to any other font-lock highlighting." > :group 'num3) > > ;;; Implementation: > > (require 'font-lock) > > ;;;###autoload > (define-minor-mode num3-mode > "Toggle num3 minor mode in the current buffer. > Num3 minor mode makes long numbers more readable by highlighting > groups of digits when font-lock mode is on. > > If a number is longer than `num3-threshold', the mode will split > it into a group of `num3-group-size' (if number is decimal) or > 4 (if number is hexadecimal) digits. Hexadecimal number is > detected as one starting with 0x, 0X or #. > > With decimal numbers, fractions are recognised as well and > grouped from the beginning rathar then from end. For instance, > with group size of 3, a number \"12345.12345\" will be split into > groups as follows: \"12|345.123|45\". Fractions without integer > part are also recognised, eg. \".12345\". > > The groups are highlighted alternately using `num3-face-odd' and > `num3-face-even' faces. `num3-face-even' face (which is empty by > default) is the one used for the group closest to the decimal point." > nil " num3" nil > (if num3-mode > (unless (assoc '-num3-matcher font-lock-keywords) > (font-lock-add-keywords nil '(-num3-matcher) 'append)) > (font-lock-remove-keywords nil '(-num3-matcher))) > (when font-lock-mode > (font-lock-fontify-buffer))) > > ;;;###autoload > (define-globalized-minor-mode global-num3-mode num3-mode turn-on-num3-mod= e) > > ;;;###autoload > (defun turn-on-num3-mode () > "Turn `num3-mode' on if it's not enabled." > (unless num3-mode (num3-mode t))) > > (defconst -num3-number-re > (concat "\\(?:0[xX]\\|#\\)\\([0-9a-fA-F]+\\)" ; 1 =3D hexadecimal > "\\|\\([0-9]+\\)" ; 2 =3D decimal > "\\|\\.\\([0-9]+\\)")) ; 3 =3D fraction > > (defun -num3-matcher (lim) > "Function used as a font-lock-keywoard handler used in `num3-mode'. > Performs fontification of numbers from point to LIM." > (save-excursion > (while (re-search-forward -num3-number-re lim t) > (-num3-int (match-beginning 1) (match-end 1) 4) > (-num3-int (match-beginning 2) (match-end 2) num3-group-size) > (-num3-frac (match-beginning 3) (match-end 3) num3-group-size))) > nil) > > (defun -num3-int (lo hi n) > "Highlight groups of digits in a long number. > LO and HI arguments specify the range where the number is > located. If the length of that region exceeds `num3-threshold', > the function will split it into groups of N digits and fontify > tham alternately using `num3-face-odd' and `num3-face-even' > faces. Grouping is done from the end, eg. (12)(345)." > (when (and lo (>=3D (- hi lo) num3-threshold)) > (let (even) > (while (< lo hi) > (-num3-put even (max lo (- hi n)) hi) > (setq hi (- hi n) even (not even)))))) > > (defun -num3-frac (lo hi n) > "Highlight groups of digits in a long number. > LO and HI arguments specify the range where the number is > located. If the length of that region exceeds `num3-threshold', > the function will split it into groups of N digits and fontify > tham alternately using `num3-face-odd' and `num3-face-even' > faces. Grouping is done from the beginning, eg. (123)(45)." > (when (and lo (>=3D (- hi lo) num3-threshold)) > (let (even) > (while (< lo hi) > (-num3-put even lo (min hi (+ lo n))) > (setq lo (+ lo n) even (not even)))))) > > (defun -num3-put (even lo hi) > "Add font lock text property to highlight a single group of digit. > Use `num3-face-odd' if EVEN is nil and `num3-face-even' if EVEN is > non-nil. The region the face is set to is from LO to HI." > (font-lock-append-text-property lo hi 'face > (if even 'num3-face-even 'num3-face-odd= ))) > > (provide 'num3) > > ;;; num3.el ends here > > ---------- >% ---------------------------------------------------------- > > -- > Best regards, _ _ > .o. | Liege of Serenely Enlightened Majesty of o' \,=3D./ `o > ..o | Computer Science, Micha=C5=82 =E2=80=9Cmina86=E2=80=9D Nazarewicz = (o o) > ooo +------------------ooO--(_)--Ooo-- > >