highlight-numbers
highlight-numbers copied to clipboard
Support Python mode
Whatever it is using by default for Python mode works pretty well because it just highlights any token that starts with a number as a number, and any such thing in Python is either a number or invalid syntax. The one exception is that it doesn't highlight the .
in floating point numbers correctly.
Many programming languages have the same syntax. For instance, Java
, C#
, C
, C++
, etc. It would be nice if this feature is implemented! ;)
Try this:
;; https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals
(defvar highlight-numbers-py-bindigit '(any "01"))
(defvar highlight-numbers-py-octdigit '(any "0-7"))
(defvar highlight-numbers-py-hexdigit '(any "0-9" "a-f" "A-F"))
(defvar highlight-numbers-py-nonzerodigit '(any "1-9"))
(defvar highlight-numbers-py-decinteger
'(or (and (eval highlight-numbers-py-nonzerodigit)
(0+ (and (? "_") digit)))
(and (1+ "0") (0+ (and (? "_") "0")))))
(defvar highlight-numbers-py-bininteger
'(and "0" (any "bB") (1+ (and (? "_") (eval highlight-numbers-py-bindigit)))))
(defvar highlight-numbers-py-octinteger
'(and "0" (any "oO") (1+ (and (? "_") (eval highlight-numbers-py-octdigit)))))
(defvar highlight-numbers-py-hexinteger
'(and "0" (any "oO") (1+ (and (? "_") (eval highlight-numbers-py-hexdigit)))))
(defvar highlight-numbers-py-integer
'(or (eval highlight-numbers-py-decinteger)
(eval highlight-numbers-py-bininteger)
(eval highlight-numbers-py-octinteger)
(eval highlight-numbers-py-hexinteger)))
(defvar highlight-numbers-py-digitpart '(and (any "0-9") (0+ (any "_" digit))))
(defvar highlight-numbers-py-fraction
'(and "." (eval highlight-numbers-py-digitpart)))
(defvar highlight-numbers-py-pointfloat
'(or (and (? (eval highlight-numbers-py-digitpart))
(eval highlight-numbers-py-fraction))
(and (eval highlight-numbers-py-digitpart) ".")))
(defvar highlight-numbers-py-exponent
'(and (any "eE")
(? (any "-+"))
(eval highlight-numbers-py-digitpart)))
(defvar highlight-numbers-py-exponentfloat
'(and (or (eval highlight-numbers-py-digitpart)
(eval highlight-numbers-py-pointfloat))
(eval highlight-numbers-py-exponent)))
(defvar highlight-numbers-py-floatnumber
'(or (eval highlight-numbers-py-pointfloat)
(eval highlight-numbers-py-exponentfloat)))
(defvar highlight-numbers-py-imagnumber
'(and (or (eval highlight-numbers-py-floatnumber)
(eval highlight-numbers-py-digitpart))
(any "jJ")))
(setq highlight-numbers-generic-regexp
(rx (and symbol-start
(or (eval highlight-numbers-py-imagnumber)
(eval highlight-numbers-py-floatnumber)
(eval highlight-numbers-py-integer))
symbol-end)))
or https://github.com/Yevgnen/highlight-numbers-extra
This seems to solve the issue,
(setq highlight-numbers-generic-regexp "\\_<[[:digit:]]+\\(?:\\.[0-9]*\\)?\\_>")