branch: externals/colorful-mode
commit 8f209221800ceddb38ce5e84418e18e2c04178f4
Author: Elias G. B. Perez <[email protected]>
Commit: Elias G. B. Perez <[email protected]>
Allow only-strings only in prog-modes, refactoring and bug fixes.
* colorful-mode.el (colorful--colorize-match):
Use map inside first `let*' instead
defining multiple `let*'s for mouse-1 map.
I hope this improve the maintainance.
Also bind mouse-1 to change-and-copy if
current buffer is read-only.
(colorful-only-strings): Add only-prog as new
value for only highlight in strings if current
major mode is derived from prog-mode.
(global-colorful-mode): Silence byte-compile warning.
* README.org: Document new option.
---
README.org | 4 ++--
colorful-mode.el | 60 ++++++++++++++++++++++++--------------------------------
2 files changed, 28 insertions(+), 36 deletions(-)
diff --git a/README.org b/README.org
index 22ccfb3990..f7f7e17acf 100644
--- a/README.org
+++ b/README.org
@@ -80,8 +80,8 @@ in real time and in a user friendly way based on
🌈[[https://elpa.gnu.org/pack
values converted by coloful should be as short as possible.
Setting this to t will make hex values follow a 24-bit specification
and can make them inaccurate.
-- =colorful-only-strings (default: nil)= If non-nil colorful will only
- highlight colors inside strings.
+- =colorful-only-strings (default: nil)= If non-nil colorful will only
highlight colors inside strings.
+ If set to only-prog, only highlight colors in strings if current major mode
is derived from prog-mode.
- =global-colorful-modes (default: '(mhtml-mode html-ts-mode css-mode
css-ts-mode emacs-lisp-mode))= Which major modes global-colorful-mode is
switched on in (globally).
** Interactive User Functions.
diff --git a/colorful-mode.el b/colorful-mode.el
index 59132f33a1..3998070aca 100644
--- a/colorful-mode.el
+++ b/colorful-mode.el
@@ -8,7 +8,7 @@
;; Package-Requires: ((emacs "28.1") (compat "29.1.4.5"))
;; Homepage: https://github.com/DevelopmentCool2449/colorful-mode
;; Keywords: faces
-;; Version: 0.1.3
+;; Version: 0.2.0
;; This file is not part of GNU Emacs.
@@ -104,28 +104,13 @@ Must be a list containing regex strings.")
(defgroup colorful nil
"Preview hex colors values in current buffer.."
:tag "Colorful mode"
- :group 'help)
+ :group 'faces
+ :group 'display)
(defface colorful-base
'((t (:box (:line-width -1 :color "grey75" :style flat-button))))
"Face used as base for highlight color names.")
-(defcustom global-colorful-modes t
- "Which major modes `colorful-mode' is switched on in.
-
-This variable can be either t (all major modes), nil (no major modes),
-or a list of modes and (not modes) to switch use this minor mode or
-not. For instance
-
- (c-mode (not message-mode mail-mode) `text-mode')
-
-means \"use this mode in all modes derived from `c-mode', don't use in
-modes derived from `message-mode' or `mail-mode', but do use in other
-modes derived from `text-mode'\". An element with value t means \"use\"
-and nil means \"don't use\". There's an implicit nil at the end of the
-list."
- :type '(choice (const t) (repeat sexp)))
-
(defcustom colorful-extra-color-keyword-functions
'((emacs-lisp-mode . (colorful-add-color-names
colorful-add-rgb-colors))
@@ -192,8 +177,10 @@ and can make them inaccurate."
:type 'boolean)
(defcustom colorful-only-strings nil
- "If non-nil colorful will only highlight colors inside strings."
- :type 'boolean)
+ "If non-nil colorful will only highlight colors inside strings.
+If set to only-prog, only highlight colors in strings if current major
+mode is derived from `prog-mode'."
+ :type '(choice boolean (const :tag "Only in prog-modes" only-prog)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -212,7 +199,7 @@ and can make them inaccurate."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FIXME: THIS MACRO WORKS FINE, HOWEVER IT DOESN'T WORK WITH
-;; MOUSE CLICKS, IF ANYONE KNOW WHY, PLEASE OPEN AN ISSUE.
+;; MOUSE CLICKS, IF ANYONE KNOWs WHY, PLEASE OPEN AN ISSUE.
;; MAYBE THIS CAN BE DELETED.
;;;; (defmacro colorful--check-ov (varlist &rest then)
;; "Check if there is a colorful-ov at current position, execute THEN.
@@ -394,7 +381,13 @@ PROMPT must be a string with 1 format control (generally a
string argument)."
The background uses COLOR color value. The foreground is obtained
converting COLOR to a Emacs RGB value and determined with `color-dark-p',
it can be white or black."
- (let* ((ov (make-overlay beg end nil t t)))
+ (let* ((ov (make-overlay beg end nil t t))
+ (map (make-sparse-keymap)))
+
+ (if colorful-allow-mouse-clicks
+ (keymap-set map "<mouse-1>" (if buffer-read-only
+ #'colorful-convert-and-copy-color
+ #'colorful-change-or-copy-color)))
;; Define colorful overlay tag
(overlay-put ov 'colorful--overlay t)
@@ -417,10 +410,7 @@ it can be white or black."
(propertize colorful-prefix-string
'face `(:foreground ,color)
'mouse-face 'highlight
- 'keymap
- (let ((map (make-sparse-keymap)))
- (keymap-set map "<mouse-1>"
#'colorful-change-or-copy-color)
- map))
+ 'keymap map)
(propertize colorful-prefix-string
'face `(:foreground ,color))))
;; NOTE: This fixs an error for invalid face when using prefix
@@ -430,10 +420,7 @@ it can be white or black."
;; this is the way i found for fix this.
(when colorful-allow-mouse-clicks
(overlay-put ov 'mouse-face 'highlight)
- (overlay-put ov 'keymap
- (let ((map (make-sparse-keymap)))
- (keymap-set map "<mouse-1>"
#'colorful-change-or-copy-color)
- map)))
+ (overlay-put ov 'keymap map))
(overlay-put ov 'face
`((:foreground
,(if (color-dark-p (color-name-to-rgb color))
@@ -447,6 +434,8 @@ it can be white or black."
(string (match-string-no-properties match))
((and (not (member string colorful-exclude-colors))
(or (and colorful-only-strings (nth 3 (syntax-ppss)))
+ (and (eq colorful-only-strings 'only-prog)
+ (not (derived-mode-p 'prog-mode)))
(not colorful-only-strings))))
(beg (match-beginning match))
(end (match-end match)))
@@ -544,17 +533,20 @@ This is intended to be used with
`colorful-extra-color-keyword-functions'."
(define-minor-mode colorful-mode
"Preview color hexs in current buffer.
This will fontify colors strings like \"#aabbcc\" or \"blue\"."
- :lighter nil :group 'colorful :keymap colorful-mode-map
+ :lighter nil :keymap colorful-mode-map
(if colorful-mode
(colorful--turn-on)
(colorful--turn-off)))
+;; Silcense a bye-compile warning about global-colorful-modes not
+;; being defined, if anyone knows why this happens please open an
+;; issue.
+(defvar global-colorful-modes)
+
;;;###autoload
(define-globalized-minor-mode global-colorful-mode
colorful-mode colorful--turn-on
- :predicate
- '(mhtml-mode html-ts-mode css-mode css-ts-mode emacs-lisp-mode)
- :group 'colorful)
+ :predicate '(mhtml-mode html-ts-mode css-mode css-ts-mode prog-mode))
(provide 'colorful-mode)