branch: externals/colorful-mode commit 106731d545a71fb06408e2f2b39e8b70dcacc68e Author: Elías Gabriel Pérez <eg642...@gmail.com> Commit: Elías Gabriel Pérez <eg642...@gmail.com>
Move coloring in strings to minor mode definition * colorful-mode.el (colorful-highlight-in-comments): New user option. (github #18) (colorful--highlight): New buffer-local variable. (colorful--colorize): Use `when' instead `when-let*' and move whether coloring must be done in strings... (colorful-mode): ... to here. --- colorful-mode.el | 70 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 22 deletions(-) diff --git a/colorful-mode.el b/colorful-mode.el index eac1f40eb2..b0e1ef3737 100644 --- a/colorful-mode.el +++ b/colorful-mode.el @@ -297,7 +297,7 @@ In case colorful breaks a buffer, such as a buffer derived from `help-mode', this option can be useful for you." :type '(repeat string)) -;; (make-obsolete-variable colorful-excluded-buffers nil "1.3.0") +;; (make-obsolete-variable colorful-excluded-buffers nil "1.2.4") (defcustom colorful-short-hex-conversions t "If non-nil, colorful will converted long hex colors to \"#RRGGBB\" format. @@ -307,16 +307,25 @@ Setting this to non-nil can make converted hex inaccurate." (defcustom colorful-only-strings nil "If non-nil, colorful will only highlight colors inside strings. If set to `only-prog', the colors in `prog-mode' will be highlighted -only if they are inside a string. -This doesn't include `css-mode' and derived." +only if they are inside a string, this doesn't include `css-mode' and +derived." :type '(choice boolean (const :tag "Only in prog-modes" only-prog))) +(defcustom colorful-highlight-in-comments nil + "If non-nil, colorful will highlight colors inside comments. +NOTE: If this is set, this will highlight any keyword within the +comments, including color names, which can be annoying." + :type 'boolean) + ;;;; Internal variables (defvar-local colorful-color-keywords nil "Font-lock colors keyword to highlight.") +(defvar-local colorful--highlight nil + "Internal variable used for check when the highlighting must be done.") + ;;;; Internal Functions @@ -603,20 +612,23 @@ POS is the position where start the search." KIND is the color type. COLOR is the string which contains the color matched. BEG and END are color match positions." - (when-let* (;; Check if match isn't blacklisted and is not in a comment ... - ((and (not (member color colorful-exclude-colors)) - (not (nth 4 (syntax-ppss))) - ;; ... and wheter color is in a string according colorful-only-strings... - (or (not colorful-only-strings) - (and colorful-only-strings - (nth 3 (syntax-ppss))) - (and (eq colorful-only-strings 'only-prog) - (or (not (derived-mode-p 'prog-mode)) - ;; CSS is prog-mode derived so ignore only-strings - ;; in CSS derived modes. - (derived-mode-p 'css-mode) - (and (derived-mode-p 'prog-mode) - (nth 3 (syntax-ppss))))))))) + (when + (and + ;; Check if match isn't blacklisted ... + (not (member color colorful-exclude-colors)) + ;; ... and color is in a comment according + ;; colorful-highlight-in-comments ... + (or colorful-highlight-in-comments (not (nth 4 (syntax-ppss)))) + ;; ... and wheter color is in a string according colorful-only-strings. + (or (not colorful-only-strings) + (when (or (eq colorful--highlight 'prog) + (eq colorful-only-strings t)) + (if colorful-highlight-in-comments + ;; Highlight only for strings and comments + (syntax-ppss-context (syntax-ppss)) + ;; Highlight only for strings + (nth 3 (syntax-ppss)))) + (eq colorful--highlight t))) (let* ((match-1 (match-string-no-properties 1)) (match-2 (match-string-no-properties 2)) @@ -963,15 +975,29 @@ This is intended to be used with `colorful-extra-color-keyword-functions'." "C-x c c" #'colorful-convert-and-copy-color "C-x c r" #'colorful-convert-and-change-color) + +;;;; Minor mode definition + ;;;###autoload (define-minor-mode colorful-mode "Preview any color in your buffer such as hex, color names, CSS rgb in real time." :global nil - ;; Do not activate it in these buffers. - (unless (member (buffer-name) colorful-excluded-buffers) - (if colorful-mode - (colorful--turn-on) - (colorful--turn-off)))) + (if colorful-mode + (progn + ;; If `colorful-only-strings' is set to `only-prog', check if + ;; the current major mode is derived from prog-mode for + ;; highlight in strings, otherwise highlight wherever. + (if (eq colorful-only-strings 'only-prog) + (cond + ;; CSS is prog-mode derived so ignore only-strings + ;; in CSS derived modes. + ((or (derived-mode-p 'css-mode) + (not (derived-mode-p 'prog-mode))) + (setq colorful--highlight t)) + ((derived-mode-p 'prog-mode) + (setq colorful--highlight 'prog)))) + (colorful--turn-on)) + (colorful--turn-off))) ;; Silence a byte-compile warning about global-colorful-modes not ;; being defined