From a1ce94c0dd77a0761e60ea62e2530302e2f0a1d7 Mon Sep 17 00:00:00 2001 From: Kinneyzhang Date: Thu, 8 Jan 2026 15:48:34 +0800 Subject: [PATCH] add heatmap tp-palette --- tp-palette.el | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ tp.el | 54 +++++++++---------------------------------- 2 files changed, 75 insertions(+), 43 deletions(-) diff --git a/tp-palette.el b/tp-palette.el index 406950b..9df6c52 100644 --- a/tp-palette.el +++ b/tp-palette.el @@ -193,8 +193,72 @@ :fg ("#57606a" . "#8b949e") :bg ("#f6f8fa" . "#21262d") :border ("#d0d7de" . "#888")) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; github 经典绿色主题 +(define-tp-palette heatmap-g0 + :fg ("#ebedf0" . "#161b22")) + +(define-tp-palette heatmap-g1 + :fg ("#9be9a8" . "#0e4429")) + +(define-tp-palette heatmap-g2 + :fg ("#40c463" . "#006d32")) + +(define-tp-palette heatmap-g3 + :fg ("#30a14e" . "#26a641")) + +(define-tp-palette heatmap-g4 + :fg ("#216e39" . "#39d353")) + +;; github 万圣节主题 +(define-tp-palette heatmap-h0 + :fg ("#ebedf0" . "#161b22")) + +(define-tp-palette heatmap-h1 + :fg ("#ffee4a" . "#631c03")) + +(define-tp-palette heatmap-h2 + :fg ("#ffc501" . "#bd561d")) + +(define-tp-palette heatmap-h3 + :fg ("#fe9600" . "#fa7a18")) + +(define-tp-palette heatmap-h4 + :fg ("#03001c" . "#fddf68")) + ;;; Utilities +(defun tp-theme-dark-p () + (eq (frame-parameter nil 'background-mode) 'dark)) + +(defun tp-theme-light-p () + (eq (frame-parameter nil 'background-mode) 'light)) + +(defun tp-parse-color (color) + "e.g.1 (tp-parse-color \"red\") +e.g.2 (tp-parse-color '(\"red\" . \"green\")) +e.g.3 (tp-parse-color '(:light \"red\" :dark \"green\"))" + (cond ((stringp color) color) + ((and (consp color) + (stringp (car color)) + (stringp (cdr color))) + (cond + ((tp-theme-light-p) (car color)) + ((tp-theme-dark-p) (cdr color)) + ;; Default to light color when background-mode is unknown + (t (car color)))) + ((and (plistp color) + (or (plist-member color :light) + (plist-member color :dark))) + (cond + ((tp-theme-light-p) (plist-get color :light)) + ((tp-theme-dark-p) (plist-get color :dark)) + ;; Default to light color when background-mode is unknown + (t (plist-get color :light)))) + ((null color) nil) + (t (error "Invalid format of color %S" color)))) + (defun tp-palette--get-color (symbol key) "Get color value for KEY from palette SYMBOL. SYMBOL should be a symbol bound to a palette plist. diff --git a/tp.el b/tp.el index 74c3fde..e54b781 100644 --- a/tp.el +++ b/tp.el @@ -4745,61 +4745,29 @@ Returns the modified object (string) or nil for buffer operations." (read-only-mode 1)) (switch-to-buffer buffer))) -(defun tp-theme-dark-p () - (eq (frame-parameter nil 'background-mode) 'dark)) - -(defun tp-theme-light-p () - (eq (frame-parameter nil 'background-mode) 'light)) - -(defun tp-parse-color (color) - "e.g.1 (tp-parse-color \"red\") -e.g.2 (tp-parse-color '(\"red\" . \"green\")) -e.g.3 (tp-parse-color '(:light \"red\" :dark \"green\"))" - (cond ((stringp color) color) - ((and (consp color) - (stringp (car color)) - (stringp (cdr color))) - (cond - ((tp-theme-light-p) (car color)) - ((tp-theme-dark-p) (cdr color)) - ;; Default to light color when background-mode is unknown - (t (car color)))) - ((and (plistp color) - (or (plist-member color :light) - (plist-member color :dark))) - (cond - ((tp-theme-light-p) (plist-get color :light)) - ((tp-theme-dark-p) (plist-get color :dark)) - ;; Default to light color when background-mode is unknown - (t (plist-get color :light)))) - ((null color) nil) - (t (error "Invalid format of color %S" color)))) - ;;; Built-in text properties (require 'tp-palette) (define-tp tp-palette (palette) (let* ((pure-palette (tp-palette-pure palette)) - (fg-color (or (tp-palette-fg-color pure-palette) - (face-attribute 'default :foreground))) - (bg-color (or (tp-palette-bg-color pure-palette) - (face-attribute 'default :background))) - (border-color (or (tp-palette-border-color pure-palette) - (face-attribute 'default :foreground)))) + (fg-color (tp-palette-fg-color pure-palette)) + (bg-color (tp-palette-bg-color pure-palette)) + (border-color (tp-palette-border-color pure-palette))) (pcase palette ((pred tp-palette-p) - `(face ( :foreground ,fg-color - :background ,bg-color - :box (:color ,border-color)))) + `(face (,@(when fg-color (list :foreground fg-color)) + ,@(when bg-color (list :background bg-color)) + ,@(when border-color (list :box (list :color border-color)))))) ((pred tp-palette-fg-p) - `(face (:foreground ,fg-color))) + `(face (,@(when fg-color (list :foreground fg-color))))) ((pred tp-palette-bg-p) - `(face (:background ,bg-color))) + `(face (,@(when bg-color (list :background bg-color))))) ((pred tp-palette-fbg-p) - `(face (:foreground ,fg-color :background ,bg-color))) + `(face (,@(when fg-color (list :foreground fg-color)) + ,@(when bg-color (list :background bg-color))))) ((pred tp-palette-border-p) - `(face (:box (:color ,border-color)))) + `(face (,@(when border-color (list :box (list :color border-color)))))) (_ (error "Invalid palette: %S" palette))))) (defun tp-suffix-symbol (symbol string)