.emacs.d

the most bloated Emacs config on this planet
git clone https://git.trogloxene.org/.emacs.d.git
Log | Files | Refs

commit 5bd8dd24cd6e9490bbe46bac898661484af15573
parent 775b896742a4abffc6a8e943e9d90623fd64b1ff
Author: andsy10 <andsy1016@gmail.com>
Date:   Sat, 26 Sep 2026 22:12:25 +0800

Add color-picker and colorful-mode integration

Diffstat:
Mlisp/init-kbd.el | 4+++-
Mlisp/init-ui.el | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 88 insertions(+), 1 deletion(-)

diff --git a/lisp/init-kbd.el b/lisp/init-kbd.el @@ -50,7 +50,9 @@ "t" #'consult-theme "f" #'describe-face "k" #'keycast-header-line-mode - "w" #'global-whitespace-mode) + "w" #'global-whitespace-mode + "c" #'colorful-mode + "p" #'my-pick-color) ;; w for whitespace (general-def diff --git a/lisp/init-ui.el b/lisp/init-ui.el @@ -26,6 +26,91 @@ (load-theme 'my-light t) (load-theme 'my-dark t)))) +;; color picker +;; from zHaOdANiuu's ElegantEmacs +(use-package color-picker + :straight (:type git :host github :repo "zHaOdANiuu/color-picker.el") + :commands color-picker my-pick-color + :custom (color-picker-scale 2.0) + :config + (defun my-pick-color (arg) + "Pick and insert color." + (interactive "P") + (let ((target (current-buffer))) + (color-picker + :style (unless arg 'simple) + :ok (lambda (color) + (with-current-buffer target + (when (use-region-p) + (delete-region (region-beginning) (region-end))) + (insert color))))))) + +(use-package colorful-mode + :hook (prog-mode . colorful-mode) + :custom + (colorful-use-prefix t) + (colorful-only-strings 'only-prog) + :config + (add-to-list 'global-colorful-modes 'helpful-mode) + + (when (display-graphic-p) + (require 'svg) + + (defvar color-picker-initial-color) + + (defun my-colorful--svg-img (color) + (let* ((sz (frame-char-width)) + (svg (svg-create sz sz))) + (svg-node svg 'rect + :x 1 :y 1 :width (- sz 2) :height (- sz 2) + :fill color :stroke "#ffffff" :stroke-width "0.5") + (svg-image svg :ascent 'center))) + + (defun my-colorful--ov-hex (ov) + "Return normalized hex color string of colorful overlay OV." + (when-let* ((c (overlay-get ov 'colorful--color))) + (pcase-let ((`(,r ,g ,b) (color-name-to-rgb c))) + (color-rgb-to-hex r g b 2)))) + + (defun my-colorful-color-picker (event) + "Pick color use color-picker." + (interactive "e") + (let* ((pos (event-start event)) + (xy (posn-x-y pos)) + (ov (colorful--find-overlay (posn-point pos)))) + (when ov + (let ((color-picker-initial-color + (or (my-colorful--ov-hex ov) color-picker-initial-color))) + (color-picker + :style 'simple :display 'frame + :x (car xy) :y (cdr xy) + :ok (lambda (picked) + (with-current-buffer (overlay-buffer ov) + (delete-region (overlay-start ov) (overlay-end ov)) + (insert picked)))))))) + + (defvar-keymap my-colorful--color-picker-map + "<mouse-1>" + #'my-colorful-color-picker) + + (defun colorful--colorize-match (color beg end kind face map) + "Overlay match with a face from BEG to END. +The background uses COLOR color value. The foreground is obtained +from `readable-foreground-color'." + (let ((ov (make-overlay beg end))) + (overlay-put ov 'colorful--overlay t) + (overlay-put ov 'colorful--color-kind kind) + (overlay-put ov 'colorful--color color) + (overlay-put ov 'evaporate t) + (overlay-put ov + 'before-string + (propertize + " " + 'display (my-colorful--svg-img color) + 'keymap my-colorful--color-picker-map + 'pointer 'hand)) + (overlay-put ov 'face nil))))) + ;; line numbers (use-package display-line-numbers :straight nil