This commit is contained in:
Kinneyzhang 2026-01-06 00:11:14 +08:00
parent edfb7b2e35
commit 65a438c773
2 changed files with 176 additions and 29 deletions

View File

@ -73,6 +73,48 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-tp-palette gray-50
:fg ("#24292f" . "#fafafa") :bg ("#fafafa" . "#171717")
:border ("#e5e5e5" . "#262626"))
(define-tp-palette gray-100
:fg ("#24292f" . "#f5f5f5") :bg ("#f5f5f5" . "#1c1c1c")
:border ("#e5e5e5" . "#262626"))
(define-tp-palette gray-200
:fg ("#24292f" . "#e5e5e5") :bg ("#e5e5e5" . "#262626")
:border ("#d4d4d4" . "#404040"))
(define-tp-palette gray-300
:fg ("#24292f" . "#d4d4d4") :bg ("#d4d4d4" . "#404040")
:border ("#a3a3a3" . "#525252"))
(define-tp-palette gray-400
:fg ("#24292f" . "#a3a3a3") :bg ("#a3a3a3" . "#525252")
:border ("#737373" . "#737373"))
(define-tp-palette gray-500
:fg ("#ffffff" . "#737373") :bg ("#737373" . "#737373")
:border ("#525252" . "#a3a3a3"))
(define-tp-palette gray-600
:fg ("#ffffff" . "#525252") :bg ("#525252" . "#a3a3a3")
:border ("#404040" . "#d4d4d4"))
(define-tp-palette gray-700
:fg ("#ffffff" . "#404040") :bg ("#404040" . "#d4d4d4")
:border ("#262626" . "#e5e5e5"))
(define-tp-palette gray-800
:fg ("#ffffff" . "#262626") :bg ("#262626" . "#e5e5e5")
:border ("#171717" . "#f5f5f5"))
(define-tp-palette gray-900
:fg ("#ffffff" . "#171717") :bg ("#171717" . "#f5f5f5")
:border ("#0a0a0a" . "#fafafa"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-tp-palette todo
:fg ("#ffffff" . "#ffffff") :bg ("#cf222e" . "#da3633")
:border ("#a40e26" . "#f85149"))
@ -141,6 +183,16 @@
(define-tp-palette rainbow-8
:fg ("#bf3989" . "#db61a2") :border ("#bf3989" . "#db61a2"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-tp-palette mark
:fg ("#9a6700" . "#f0c239") :bg ("#fff8c5" . "#533d00")
:border ("#d4a72c" . "#9e6a03"))
(define-tp-palette tag
:fg ("#57606a" . "#8b949e") :bg ("#f6f8fa" . "#21262d")
:border ("#d0d7de" . "#888"))
;;; Utilities
(defun tp-palette--get-color (symbol key)
@ -173,5 +225,68 @@ SYMBOL should be a symbol bound to a palette plist with a :border key.
Returns nil if SYMBOL is unbound or doesn't contain :border."
(tp-palette--get-color symbol :border))
(defun tp-palette-p (symbol)
(assoc symbol tp-palette-alist))
(defun tp-palette-fg-p (symbol)
(save-match-data
(let ((str (symbol-name symbol)))
(and (string-match "\\(.+\\)-fg$" str)
(tp-palette-p (intern (match-string 1 str)))))))
(defun tp-palette-bg-p (symbol)
(save-match-data
(let ((str (symbol-name symbol)))
(and (string-match "\\(.+\\)-bg$" str)
(tp-palette-p (intern (match-string 1 str)))))))
(defun tp-palette-fbg-p (symbol)
(save-match-data
(let ((str (symbol-name symbol)))
(and (string-match "\\(.+\\)-fbg$" str)
(tp-palette-p (intern (match-string 1 str)))))))
(defun tp-palette-border-p (symbol)
(save-match-data
(let ((str (symbol-name symbol)))
(and (string-match "\\(.+\\)-border$" str)
(tp-palette-p (intern (match-string 1 str)))))))
(defun tp-palette-pure (symbol)
(pcase symbol
((pred tp-palette-p) symbol)
((pred tp-palette-fg-p)
(intern (string-trim-right (symbol-name symbol) "-fg")))
((pred tp-palette-bg-p) symbol
(intern (string-trim-right (symbol-name symbol) "-bg")))
((pred tp-palette-fbg-p) symbol
(intern (string-trim-right (symbol-name symbol) "-fbg")))
((pred tp-palette-border-p)
(intern (string-trim-right (symbol-name symbol) "-border")))
(_ (error "Invalid format of tp-palette: %S" symbol))))
(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))))
(pcase palette
((pred tp-palette-p)
`(face ( :foreground ,fg-color
:background ,bg-color
:box (:color ,border-color))))
((pred tp-palette-fg-p)
`(face (:foreground ,fg-color)))
((pred tp-palette-bg-p)
`(face (:background ,bg-color)))
((pred tp-palette-fbg-p)
`(face (:foreground ,fg-color :background ,bg-color)))
((pred tp-palette-border-p)
`(face (:box (:color ,border-color))))
(_ (error "Invalid palette: %S" palette)))))
(provide 'tp-palette)
;;; tp-palette.el ends here

90
tp.el
View File

@ -4074,28 +4074,8 @@ e.g.3 (tp-parse-color '(:light \"red\" :dark \"green\"))"
;;; Built-in text properties
(define-tp tp-palette (palette)
`(face (,@(when-let ((color (tp-palette-fg-color palette)))
`(:foreground ,color))
,@(when-let ((color (tp-palette-bg-color palette)))
`(:background ,color))
,@(when-let ((color (tp-palette-border-color palette)))
`(:box (:color ,color))))))
(define-tp tp-fg (palette)
(when-let ((color (tp-palette-fg-color palette)))
`(face (:foreground ,color))))
(define-tp tp-bg (palette)
(when-let ((color (tp-palette-bg-color palette)))
`(face (:background ,color))))
(define-tp tp-border (palette)
(when-let ((color (tp-palette-border-color palette)))
`(face (:box (:color ,color)))))
(define-tp tp-fbg (palette)
`(tp-fg ,palette tp-bg ,palette))
(defun tp-suffix-symbol (symbol string)
(intern (concat (symbol-name symbol) string)))
;;;###autoload
(defun tp-palette-show ()
@ -4105,19 +4085,55 @@ e.g.3 (tp-parse-color '(:light \"red\" :dark \"green\"))"
(insert
"Please set " (tp-set "'tp-palette" 'tp-palette 'code)
" text property with following symbols:\n\n"
(mapconcat (lambda (item)
(tp-set (symbol-name (car item))
'tp-palette (car item)))
alist "\n")))))
(mapconcat
(lambda (item)
(let* ((symbol (car item))
(name (symbol-name symbol)))
(concat (tp-set name 'tp-palette symbol)
" "
(tp-set (concat name "-fg")
'tp-palette
(tp-suffix-symbol symbol "-fg"))
" "
(tp-set (concat name "-bg")
'tp-palette
(tp-suffix-symbol symbol "-bg"))
" "
(tp-set (concat name "-fbg")
'tp-palette
(tp-suffix-symbol symbol "-fbg"))
" "
(tp-set (concat name "-border")
'tp-palette
(tp-suffix-symbol symbol "-border")))))
alist "\n")))))
(define-tp tp-fg (color)
`(face (:foreground ,color)))
(define-tp tp-bg (color)
`(face (:background ,color)))
(define-tp tp-button (type)
(let ((palette (intern (concat "button-" (symbol-name type)))))
(let ((palette (intern
(format "%s%s%s" "button-" (symbol-name type) "-fbg"))))
`( tp-palette ,palette
mouse-face highlight cursor hand
face (:box ( :line-width -1
:style released-button)))))
(define-tp tp-space (pixel)
`(display (space :width ,pixel)))
(define-tp tp-underline (color)
`(face (:underline (:color ,color))))
(define-tp tp-link ()
(let ((color (tp-palette-fg-color 'info)))
`( tp-underline ,color
tp-palette info-fg
mouse-face highlight
cursor hand)))
(define-tp tp-space (width)
`(display (space :width ,width)))
(define-tp tp-headline (props)
(let (height boldp)
@ -4129,5 +4145,21 @@ e.g.3 (tp-parse-color '(:light \"red\" :dark \"green\"))"
`(face (:height ,height
,@(when boldp '(:weight bold))))))
(define-tp tp-action (sexp)
;; SEXP is a function or plist
(let (action keys)
(if (functionp sexp)
(progn
(setq action sexp)
(setq keys `(,(kbd "RET") [mouse-1])))
(setq action (plist-get sexp :action))
(setq keys (or (plist-get sexp :keys)
`(,(kbd "RET") [mouse-1]))))
`( keymap ,(let ((keymap (make-sparse-keymap)))
(dolist (key keys)
(define-key keymap key action))
keymap)
rear-nonsticky (keymap))))
(provide 'tp)
;;; tp.el ends here