On Fri, Feb 21 2014, Stefan Monnier wrote: >> When dealing with large hex numbers the default regex of num3-mode can >> detect them as decimals. For example given: >> V28 : 00000000000000000007fc0000000000 vs 0000000000000000000bfc000000000 >> the follow is high-lighted >> V28 : __xxx___xxx___xxx_____x___xxx___ vs _xxx___xxx___xxx_________xxx___ >> which is obviously wrong. > > I guess we could use the patch below. Michal, what do you think? Looks good in general, but this leads to some interesting results: “Aaaaaaa” he screamed as the dentist pulled his teeth out. And if someone sets num3-threshold to 1 and changes num3-face-odd, all the hexadecimal digits will get highlighted in a regular text even when they are inside of a word. I also hope engineers won't get mad when 1000A starts being treated as a hexadecimal number. (They should know to put a non-break space between the number an the unit anyway). Perhaps this would be better: (defconst num3--number-re (concat "[0#][xX]\\([[:xdigit:]]+\\)" ; 1 = hexadecimal "\\|\\(?1:\\b\\(?:[0-9]+[a-fA-F]\\|" ; 1 = hexadecimal "[a-fA-F]+[0-9]\\)[[:xdigit:]]*\\b\\)" "\\|\\([0-9]+\\)" ; 2 = decimal "\\|\\.\\([0-9]+\\)")) ; 3 = fraction So there would have to be at least one decimal digit and the whole sequence would have to be a complete word (i.e. 1000Ah, which would be a pretty big battery, won't be highlighted as a hexadecimal number). >> It wouldn't hurt to have customisable faces as well as the default can >> look quite harsh depending on the theme. > > Hmmm... they are, AFAICT (faces num3-face-odd and num3-face-even). Yep, I have this in my custom.el: '(num3-face-even ((t (:foreground "#CFF" :underline nil :weight normal)))) I don't particularly like the defaults myself, but that was what Felix used in his original code, so I kept it. > diff --git a/packages/num3-mode/num3-mode.el b/packages/num3-mode/num3-mode.el > index b890c89..ae3289a 100644 > --- a/packages/num3-mode/num3-mode.el > +++ b/packages/num3-mode/num3-mode.el > @@ -1,6 +1,6 @@ > ;;; num3-mode.el --- highlight groups of digits in long numbers -*- lexical-binding: t -*- > > -;; Copyright (C) 2012 Free Software Foundation, Inc. > +;; Copyright (C) 2012, 2014 Free Software Foundation, Inc. > > ;; Author: Felix Lee , Michal Nazarewicz > ;; Maintainer: Michal Nazarewicz > @@ -98,7 +98,10 @@ where) decimal point (would be) is." > (define-globalized-minor-mode global-num3-mode num3-mode num3-mode) > > (defconst num3--number-re > - (concat "\\(?:0[xX]\\|#\\)\\([0-9a-fA-F]+\\)" ; 1 = hexadecimal > + ;; Recognize "0x" and "#x" as prefixes announcing hexadecimal (from C and > + ;; Elisp, respectively). > + (concat "[0#][xX]\\([[:xdigit:]]+\\)" ; 1 = hexadecimal > + "\\|\\(?1:[[:xdigit:]]*[a-fA-F][[:xdigit:]]*\\)" ; 1 = hexadecimal > "\\|\\([0-9]+\\)" ; 2 = decimal > "\\|\\.\\([0-9]+\\)")) ; 3 = fraction > -- Best regards, _ _ .o. | Liege of Serenely Enlightened Majesty of o' \,=./ `o ..o | Computer Science, Michał “mina86” Nazarewicz (o o) ooo +------ooO--(_)--Ooo--