spacemacs/layers/+themes/colors/funcs.el

154 lines
6.0 KiB
EmacsLisp
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; funcs.el --- Colors Layer functions File
;;
;; Copyright (c) 2012-2018 Sylvain Benner & Contributors
;;
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3
;; rainbow-identifiers
(defun colors//rainbow-identifiers-mode-maybe ()
"Enable rainbow identifiers if the major mode is a prog mode."
(when (derived-mode-p 'prog-mode)
(rainbow-identifiers-mode)))
(defun colors//tweak-theme-colors (theme)
"Tweak color themes by adjusting rainbow-identifiers."
(interactive)
;; tweak the saturation and lightness of identifier colors
(when (not (assq theme (get 'rainbow-identifiers-cie-l*a*b*-saturation
'theme-value)))
(let ((sat&light (assq theme colors-theme-identifiers-sat&light)))
(if sat&light
(setq rainbow-identifiers-cie-l*a*b*-saturation (cadr sat&light)
rainbow-identifiers-cie-l*a*b*-lightness (caddr sat&light))
;; fall back to our defaults if there are no per-theme settings
(setq rainbow-identifiers-cie-l*a*b*-saturation colors-default-rainbow-identifiers-sat
rainbow-identifiers-cie-l*a*b*-lightness colors-default-rainbow-identifiers-light))))
;; it isn't enough to just update the variables! we must now refresh the "font
;; locking" (syntax highlighting) in all buffers that have rainbow-identifiers-mode
;; currently active, so that they instantly re-paint with their per-theme values.
;; this loops through all buffers and marks matching ones for re-painting,
;; starting with the current buffer first so that the user sees quick results!
(when (featurep 'rainbow-identifiers)
(dolist ($buf (buffer-list (current-buffer)))
(with-current-buffer $buf
(when (and rainbow-identifiers-mode font-lock-mode)
(if (fboundp 'font-lock-flush)
(font-lock-flush) ; use flush if available
(with-no-warnings (font-lock-fontify-buffer))))))))
(defun colors//change-color-mini-mode-doc (component)
"Display a short documentation in the mini buffer."
(let ((var (intern (format
"rainbow-identifiers-cie-l*a*b*-%s" component))))
(spacemacs/echo "Change color %s mini-mode (value: %s)
+ to increase %s
- to decrease %s
= to reset
Press any other key to exit." component (eval var) component component)))
(defun colors/change-color-component-overlay-map (component)
"Set a temporary overlay map to easily change a color COMPONENT from
rainbow-identifier mode. The color COMPONENT can be 'saturation' or
'lightness'."
(set-temporary-overlay-map
(let ((map (make-sparse-keymap))
(up-func (intern (format "colors/change-color-%s-up" component)))
(down-func (intern (format "colors/change-color-%s-down" component)))
(reset-func (intern (format "colors/change-color-%s-reset" component))))
(define-key map (kbd "+") up-func)
(define-key map (kbd "-") down-func)
(define-key map (kbd "=") reset-func)
map) t)
(colors//change-color-mini-mode-doc component))
(defun colors/init-rainbow-mode ()
(use-package rainbow-mode
:commands rainbow-mode
:init (spacemacs/set-leader-keys "tCc" 'rainbow-mode)
:config (spacemacs|hide-lighter rainbow-mode)))
(defun colors/start-change-color-saturation ()
"Initiate the overlay map to change the saturation."
(interactive)
(colors/change-color-component-overlay-map "saturation"))
(defun colors/change-color-saturation-up ()
"Increase the saturation by 5 units."
(interactive)
(colors//change-color-component-func "saturation" 5))
(defun colors/change-color-saturation-down ()
"Decrease the saturation by 5 units."
(interactive)
(colors//change-color-component-func "saturation" -5))
(defun colors/change-color-saturation-reset ()
"Reset the saturation to default."
(interactive)
(colors//change-color-component-func "saturation" colors-default-rainbow-identifiers-sat t))
(defun colors/start-change-color-lightness ()
"Initiate the overlay map to change the lightness."
(interactive)
(colors/change-color-component-overlay-map "lightness"))
(defun colors/change-color-lightness-up ()
"Increase the lightness by 5 units."
(interactive)
(colors//change-color-component-func "lightness" 5))
(defun colors/change-color-lightness-down ()
"Decrease the lightness by 5 units."
(interactive)
(colors//change-color-component-func "lightness" -5))
(defun colors/change-color-lightness-reset ()
"Reset the lightness to default."
(interactive)
(colors//change-color-component-func "lightness" colors-default-rainbow-identifiers-light t))
(defun colors//change-color-component-func
(component inc &optional reset)
"Change the color component by adding INC value to it. If RESET is not
nil the color component is set to INC."
(let* ((var (intern (format
"rainbow-identifiers-cie-l*a*b*-%s" component)))
(new-value (+ (eval var) inc)))
(if reset
(set var inc)
(progn
(if (< new-value 0)
(setq new-value 0))
(set var new-value)))
(if (fboundp 'font-lock-flush)
(font-lock-flush) ; use flush if available
(with-no-warnings (font-lock-fontify-buffer)))
(colors/change-color-component-overlay-map component)))
(defun colors/add-theme-sat&light (theme-name sat-light)
"Easily add personal per-theme rainbow-identifiers
saturation & lightness settings. Your new values will
override any previous definitions for that theme.
Remember to always refresh the look of your theme after
you've added any new settings!
Example usage:
(colors/add-theme-sat&light 'leuven '(30 50))
(colors/add-theme-sat&light 'anothertheme '(90 20))
(colors/refresh-theme-look)"
(push (cons theme-name sat-light) colors-theme-identifiers-sat&light))
(defun colors/refresh-theme-look ()
"Refresh and re-apply the look of your current theme.
Always run this after adding new per-theme settings!"
(interactive)
(colors//tweak-theme-colors spacemacs--cur-theme))