General refactor
In preparation for some big changes. I'd like to split out themes into their own plugins and facilitate other users pulling in doom-themes to publish their own derivatives.
This commit is contained in:
parent
06a6292c4e
commit
bda168b670
7 changed files with 532 additions and 524 deletions
|
@ -1,6 +1,6 @@
|
|||
;;; doom-themes-common.el -*- lexical-binding: t; -*-
|
||||
;;; doom-themes-base.el -*- lexical-binding: t; -*-
|
||||
|
||||
(defvar doom-themes-common-faces
|
||||
(defvar doom-themes-base-faces
|
||||
'(;; --- custom faces -----------------------
|
||||
(doom-modeline-error
|
||||
:background (doom-darken red 0.25)
|
||||
|
@ -1217,6 +1217,7 @@
|
|||
(org-table :foreground violet)
|
||||
(org-tag :foreground doc-comments :weight 'normal)
|
||||
(org-ref-cite-face :foreground yellow :weight 'light :underline t)
|
||||
(org-latex-and-related :foreground magenta)
|
||||
(org-todo :foreground green :bold 'inherit)
|
||||
(org-verbatim :foreground green)
|
||||
(org-warning :foreground warning)
|
||||
|
@ -1286,7 +1287,7 @@
|
|||
(web-mode-html-tag-bracket-face :foreground operators))
|
||||
"TODO")
|
||||
|
||||
(defvar doom-themes-common-vars
|
||||
(defvar doom-themes-base-vars
|
||||
'((ansi-color-names-vector
|
||||
(vconcat (mapcar #'doom-color '(bg red green yellow blue magenta cyan fg))))
|
||||
|
||||
|
@ -1321,171 +1322,5 @@
|
|||
(vc-annotate-background (doom-color 'bg)))
|
||||
"TODO")
|
||||
|
||||
|
||||
;;
|
||||
;; Library
|
||||
;;
|
||||
|
||||
(defvar doom-themes--colors)
|
||||
(defvar doom--min-colors '(257 256 16))
|
||||
(defvar doom--quoted-p nil)
|
||||
(defvar doom-themes--faces nil)
|
||||
|
||||
(defun doom-themes--colors-p (item)
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(when item
|
||||
(cond ((listp item)
|
||||
(let ((car (car item)))
|
||||
(cond ((memq car '(quote doom-color)) nil)
|
||||
|
||||
((memq car '(backquote \`))
|
||||
(let ((doom--quoted-p t))
|
||||
(doom-themes--colors-p (cdr item))))
|
||||
|
||||
((eq car '\,)
|
||||
(let (doom--quoted-p)
|
||||
(doom-themes--colors-p (cdr item))))
|
||||
|
||||
((or (doom-themes--colors-p car)
|
||||
(doom-themes--colors-p (cdr-safe item)))))))
|
||||
|
||||
((and (symbolp item)
|
||||
(not (keywordp item))
|
||||
(not doom--quoted-p)
|
||||
(not (equal (substring (symbol-name item) 0 1) "-"))
|
||||
(assq item doom-themes--colors))))))
|
||||
|
||||
(defun doom-themes--apply-faces (new-faces &optional default-faces)
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(let ((default-faces (or default-faces doom-themes-common-faces))
|
||||
(faces (make-hash-table :test #'eq :size (+ (length default-faces) (length new-faces))))
|
||||
(directives (make-hash-table :test #'eq)))
|
||||
(dolist (spec (append (mapcar #'copy-sequence default-faces) new-faces))
|
||||
(if (listp (car spec))
|
||||
(cl-destructuring-bind (face action &optional arg) (car spec)
|
||||
(unless (assq face new-faces)
|
||||
(puthash face (list action arg (cdr spec))
|
||||
directives)))
|
||||
(puthash (car spec) (cdr spec) faces)))
|
||||
(cl-loop for face being the hash-keys of directives
|
||||
for (action target spec) = (gethash face directives)
|
||||
unless (memq action '(&inherit &extend &override))
|
||||
do (error "Invalid operation (%s) for '%s' face" action face)
|
||||
if (eq (car spec) 'quote)
|
||||
do (error "Can't extend literal face spec (for '%s')" face)
|
||||
;; TODO Add &all/&light/&dark extension support
|
||||
else if (memq (car spec) '(&all &light &dark))
|
||||
do (error "Can't extend face with &all, &light or &dark specs (for '%s')" face)
|
||||
else do
|
||||
(puthash face
|
||||
(let ((old-spec (gethash (or target face) faces))
|
||||
(plist spec))
|
||||
;; remove duplicates
|
||||
(while (keywordp (car plist))
|
||||
(setq old-spec (plist-put old-spec (car plist) (cadr plist))
|
||||
plist (cddr plist)))
|
||||
old-spec)
|
||||
faces))
|
||||
(let (results)
|
||||
(maphash (lambda (face plist)
|
||||
(when (keywordp (car plist))
|
||||
;; TODO Clean up duplicates in &all/&light/&dark blocks
|
||||
(dolist (prop (append (unless doom-themes-enable-bold '(:weight normal :bold nil))
|
||||
(unless doom-themes-enable-italic '(:slant normal :italic nil))))
|
||||
(when (and (plist-member plist prop)
|
||||
(not (eq (plist-get plist prop) 'inherit)))
|
||||
(plist-put plist prop
|
||||
(if (memq prop '(:weight :slant))
|
||||
(quote 'normal))))))
|
||||
(push (cons face plist) results))
|
||||
faces)
|
||||
(nreverse results))))
|
||||
|
||||
(defun doom-themes--colorize (item type)
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(when item
|
||||
(let ((doom--quoted-p doom--quoted-p))
|
||||
(cond ((listp item)
|
||||
(cond ((memq (car item) '(quote doom-color))
|
||||
item)
|
||||
((eq (car item) 'doom-ref)
|
||||
(doom-themes--colorize
|
||||
(apply #'doom-ref (cdr item)) type))
|
||||
((let* ((item (append item nil))
|
||||
(car (car item))
|
||||
(doom--quoted-p
|
||||
(cond ((memq car '(backquote \`)) t)
|
||||
((eq car '\,) nil)
|
||||
(t doom--quoted-p))))
|
||||
(cons car
|
||||
(cl-loop
|
||||
for i in (cdr item)
|
||||
collect (doom-themes--colorize i type)))))))
|
||||
|
||||
((and (symbolp item)
|
||||
(not (keywordp item))
|
||||
(not doom--quoted-p)
|
||||
(not (equal (substring (symbol-name item) 0 1) "-"))
|
||||
(assq item doom-themes--colors))
|
||||
`(doom-color ',item ',type))
|
||||
|
||||
(item)))))
|
||||
|
||||
(defun doom-themes--build-face (face)
|
||||
(declare (pure t) (side-effect-free t))
|
||||
`(list
|
||||
',(car face)
|
||||
,(let ((face-body (cdr face)))
|
||||
(cond ((keywordp (car face-body))
|
||||
(let ((real-attrs face-body)
|
||||
defs)
|
||||
(if (doom-themes--colors-p real-attrs)
|
||||
(dolist (cl doom--min-colors `(list ,@(nreverse defs)))
|
||||
(push `(list '((class color) (min-colors ,cl))
|
||||
(list ,@(doom-themes--colorize real-attrs cl)))
|
||||
defs))
|
||||
`(list (list 't (list ,@real-attrs))))))
|
||||
|
||||
((memq (car-safe (car face-body)) '(quote backquote \`))
|
||||
(car face-body))
|
||||
|
||||
((let (all-attrs defs)
|
||||
(dolist (attrs face-body `(list ,@(nreverse defs)))
|
||||
(cond ((eq (car attrs) '&all)
|
||||
(setq all-attrs (append all-attrs (cdr attrs))))
|
||||
|
||||
((memq (car attrs) '(&dark &light))
|
||||
(let ((bg (if (eq (car attrs) '&dark) 'dark 'light))
|
||||
(real-attrs (append all-attrs (cdr attrs) '())))
|
||||
(cond ((doom-themes--colors-p real-attrs)
|
||||
(dolist (cl doom--min-colors)
|
||||
(push `(list '((class color) (min-colors ,cl) (background ,bg))
|
||||
(list ,@(doom-themes--colorize real-attrs cl)))
|
||||
defs)))
|
||||
|
||||
((push `(list '((background ,bg)) (list ,@real-attrs))
|
||||
defs)))))))))))))
|
||||
|
||||
|
||||
;;
|
||||
;; Public functions
|
||||
;;
|
||||
|
||||
(defun doom-themes-prepare-facelist (custom-faces)
|
||||
"Return an alist of face definitions for `custom-theme-set-faces'.
|
||||
|
||||
Faces in EXTRA-FACES override the default faces."
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(setq doom-themes--faces (doom-themes--apply-faces custom-faces))
|
||||
(mapcar #'doom-themes--build-face doom-themes--faces))
|
||||
|
||||
(defun doom-themes-prepare-varlist (vars)
|
||||
"Return an alist of variable definitions for `custom-theme-set-variables'.
|
||||
|
||||
Variables in EXTRA-VARS override the default ones."
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(cl-loop for (var val) in (append doom-themes-common-vars vars)
|
||||
collect `(list ',var ,val)))
|
||||
|
||||
(provide 'doom-themes-common)
|
||||
(provide 'doom-themes-base)
|
||||
;;; doom-themes-common.el ends here
|
|
@ -1,68 +1,35 @@
|
|||
;;; doom-themes-neotree.el -*- lexical-binding: t; -*-
|
||||
;;; doom-themes-ext-neotree.el -*- lexical-binding: t; -*-
|
||||
|
||||
(unless doom-themes--inhibit-warning
|
||||
(message "doom-themes: loading `doom-themes-neotree' directly is obsolete, call `doom-themes-neotree-config' instead"))
|
||||
|
||||
(defgroup doom-neotree nil
|
||||
(defgroup doom-themes-neotree nil
|
||||
"Options for doom's neotree theme"
|
||||
:group 'doom-themes)
|
||||
|
||||
;;
|
||||
(defface doom-neotree-dir-face '((t (:inherit neo-dir-link-face)))
|
||||
"Face for directory labels."
|
||||
:group 'doom-neotree)
|
||||
|
||||
(defface doom-neotree-file-face '((t (:inherit neo-file-link-face)))
|
||||
"Face for file name labels."
|
||||
:group 'doom-neotree)
|
||||
|
||||
;; file type faces
|
||||
(defface doom-neotree-hidden-file-face '((t (:inherit font-lock-comment-face)))
|
||||
"Face for labels of hidden files. See `doom-neotree-file-face-re-alist'."
|
||||
:group 'doom-neotree)
|
||||
|
||||
(defface doom-neotree-text-file-face '((t (:inherit neo-file-link-face)))
|
||||
"Face for labels of text/documentation files (readmes, org files, etc). See
|
||||
`doom-neotree-file-face-re-alist'."
|
||||
:group 'doom-neotree)
|
||||
|
||||
(defface doom-neotree-media-file-face '((t (:inherit neo-file-link-face)))
|
||||
"Face for labels of media files. See `doom-neotree-file-face-re-alist'."
|
||||
:group 'doom-neotree)
|
||||
|
||||
(defface doom-neotree-data-file-face '((t (:inherit neo-file-link-face)))
|
||||
"Face for labels of data files (json, yaml, xml, etc). See
|
||||
`doom-neotree-file-face-re-alist'."
|
||||
:group 'doom-neotree)
|
||||
|
||||
(defface doom-neotree-executable-file-face '((t (:inherit neo-file-link-face)))
|
||||
"TODO"
|
||||
:group 'doom-neotree)
|
||||
|
||||
|
||||
;;
|
||||
(defcustom doom-neotree-project-size 1.4
|
||||
;;; Variables
|
||||
|
||||
(defcustom doom-themes-neotree-project-size 1.4
|
||||
"What :height to display the project icon at the top at."
|
||||
:type 'float
|
||||
:group 'doom-neotree)
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defcustom doom-neotree-folder-size 1.05
|
||||
(defcustom doom-themes-neotree-folder-size 1.05
|
||||
"What :height to display the folder icons at."
|
||||
:type 'float
|
||||
:group 'doom-neotree)
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defcustom doom-neotree-chevron-size 0.8
|
||||
(defcustom doom-themes-neotree-chevron-size 0.8
|
||||
"What :height to display the chevron icons at."
|
||||
:type 'float
|
||||
:group 'doom-neotree)
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defcustom doom-neotree-line-spacing 2
|
||||
(defcustom doom-themes-neotree-line-spacing 2
|
||||
"Line-spacing for neotree buffer."
|
||||
:type 'symbol
|
||||
:group 'doom-neotree)
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(define-obsolete-variable-alias 'doom-neotree-enable-file-icons 'doom-neotree-file-icons)
|
||||
(defcustom doom-neotree-file-icons 'simple
|
||||
(define-obsolete-variable-alias 'doom-themes-neotree-enable-file-icons 'doom-themes-neotree-file-icons)
|
||||
(defcustom doom-themes-neotree-file-icons 'simple
|
||||
"The style to use for the file icons. Can be nil (disabled), non-nil (for a
|
||||
diverse iconset), or 'simple, which is closest's to Atom's style as it only
|
||||
distinguishes text, source, pdfs, images and binary files."
|
||||
|
@ -70,63 +37,63 @@ distinguishes text, source, pdfs, images and binary files."
|
|||
(const :tag "A diverse array of file icons based on file type" t)
|
||||
(const :tag "Minimalistic file icons (like Atom's)" 'simple)
|
||||
(const :tag "Disable file icons" nil))
|
||||
:group 'doom-neotree)
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defcustom doom-neotree-enable-folder-icons t
|
||||
(defcustom doom-themes-neotree-enable-folder-icons t
|
||||
"If non-nil, display folder icons next to each file. Different icons are used
|
||||
depending on whether the folder is a repo, symlink or regular folder."
|
||||
:type 'boolean
|
||||
:group 'doom-neotree)
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defcustom doom-neotree-enable-open-chevron-icons t
|
||||
(defcustom doom-themes-neotree-enable-open-chevron-icons t
|
||||
"If non-nil, display the chevron-down icon next to each expanded folder."
|
||||
:type 'boolean
|
||||
:group 'doom-neotree)
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defcustom doom-neotree-enable-closed-chevron-icons t
|
||||
(defcustom doom-themes-neotree-enable-closed-chevron-icons t
|
||||
"If non-nil, display the chevron-right icon next to each collapsed folder."
|
||||
:type 'boolean
|
||||
:group 'doom-neotree)
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defcustom doom-neotree-enable-variable-pitch nil
|
||||
"If non-nil, labels will use the `doom-neotree-dir-face' and
|
||||
`doom-neotree-dir-face' faces, which inherit from the `variable-pitch' face."
|
||||
(defcustom doom-themes-neotree-enable-variable-pitch nil
|
||||
"If non-nil, labels will use the `doom-themes-neotree-dir-face' and
|
||||
`doom-themes-neotree-dir-face' faces, which inherit from the `variable-pitch' face."
|
||||
:type 'boolean
|
||||
:group 'doom-neotree)
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defcustom doom-neotree-enable-type-colors t
|
||||
(defcustom doom-themes-neotree-enable-type-colors t
|
||||
"If non-nil, color each file/folder based on the categories determined by
|
||||
`doom-neotree-file-face-re-alist'."
|
||||
`doom-themes-neotree-file-face-re-alist'."
|
||||
:type 'boolean
|
||||
:group 'doom-neotree)
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
|
||||
(defun doom--neo-is-repo-dir-p (path)
|
||||
(defun doom-themes--neo-is-repo-dir-p (path)
|
||||
(or (file-exists-p (format "%s/.git" path))
|
||||
(all-the-icons-dir-is-submodule path)))
|
||||
|
||||
(defvar doom-neotree-dir-rules
|
||||
(defvar doom-themes-neotree-dir-rules
|
||||
(eval-when-compile
|
||||
`(("/\\(?:node_modules\\|vendor\\)$"
|
||||
:face doom-neotree-hidden-file-face)
|
||||
:face doom-themes-neotree-hidden-file-face)
|
||||
("/\\.[^$/#]+$"
|
||||
:face doom-neotree-hidden-file-face)
|
||||
:face doom-themes-neotree-hidden-file-face)
|
||||
(file-symlink-p
|
||||
:icon (all-the-icons-octicon "file-symlink-directory"))
|
||||
(doom--neo-is-repo-dir-p
|
||||
(doom-themes--neo-is-repo-dir-p
|
||||
:icon (all-the-icons-octicon "file-submodule"))
|
||||
(t :icon (all-the-icons-octicon "file-directory"))))
|
||||
"TODO")
|
||||
|
||||
(defvar doom-neotree-file-rules
|
||||
(defvar doom-themes-neotree-file-rules
|
||||
(eval-when-compile
|
||||
`((file-symlink-p
|
||||
:icon (all-the-icons-octicon "file-symlink-file"))
|
||||
(file-executable-p
|
||||
:face doom-neotree-executable-file-face
|
||||
:face doom-themes-neotree-executable-file-face
|
||||
:icon (all-the-icons-octicon "file-binary"))
|
||||
("\\.\\(?:md\\|org\\|rst\\|log\\)\\|/[A-Z_-]+\\(?:\\.[a-z]+\\)?$"
|
||||
:face doom-neotree-text-file-face
|
||||
:face doom-themes-neotree-text-file-face
|
||||
:icon (all-the-icons-octicon "file-text"))
|
||||
(,(concat "\\." (regexp-opt '("htm" "html" "phtml" "tpl" "erb" "mustache"
|
||||
"twig" "ejs" "erb" "jsx" "haml" "inky-haml"
|
||||
|
@ -145,37 +112,75 @@ depending on whether the folder is a repo, symlink or regular folder."
|
|||
"mov" "avi" "mp4" "webm" "mkv" ; video
|
||||
"wav" "mp3" "ogg" "midi")) ; audio
|
||||
"$")
|
||||
:face doom-neotree-data-file-face
|
||||
:face doom-themes-neotree-data-file-face
|
||||
:icon (all-the-icons-octicon "file-media"))
|
||||
(,(concat "\\.\\(?:[gl]?zip\\|bzip2\\|deb\\|dmg\\|iso\\|7z\\|rpm\\|pkg\\|dat\\|[rjt]ar\\(?:\\.gz\\)?\\)$")
|
||||
:face doom-neotree-data-file-face
|
||||
:face doom-themes-neotree-data-file-face
|
||||
:icon (all-the-icons-octicon "file-zip"))
|
||||
("\\.pdf$"
|
||||
:face doom-neotree-data-file-face
|
||||
:face doom-themes-neotree-data-file-face
|
||||
:icon (all-the-icons-octicon "file-pdf"))
|
||||
("\\.\\(?:lock\\|resolved\\|dll\\|so\\|pyc\\|elc\\|class\\|css\\.map\\)$"
|
||||
:face doom-neotree-hidden-file-face
|
||||
:face doom-themes-neotree-hidden-file-face
|
||||
:icon (all-the-icons-octicon "file-binary"))
|
||||
("/\\.[^$/#]+$"
|
||||
:face doom-neotree-hidden-file-face)
|
||||
:face doom-themes-neotree-hidden-file-face)
|
||||
(t :icon (all-the-icons-octicon "file-text"))))
|
||||
"TODO")
|
||||
|
||||
|
||||
;;
|
||||
(defun doom--neotree-no-fringes ()
|
||||
"Remove fringes in neotree. They get reset each time you select the neotree
|
||||
pane and are highlighted incorrectly."
|
||||
;;; Faces
|
||||
|
||||
(defface doom-themes-neotree-dir-face '((t (:inherit neo-dir-link-face)))
|
||||
"Face for directory labels."
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defface doom-themes-neotree-file-face '((t (:inherit neo-file-link-face)))
|
||||
"Face for file name labels."
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
;; file type faces
|
||||
(defface doom-themes-neotree-hidden-file-face '((t (:inherit font-lock-comment-face)))
|
||||
"Face for labels of hidden files. See `doom-themes-neotree-file-face-re-alist'."
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defface doom-themes-neotree-text-file-face '((t (:inherit neo-file-link-face)))
|
||||
"Face for labels of text/documentation files (readmes, org files, etc). See
|
||||
`doom-themes-neotree-file-face-re-alist'."
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defface doom-themes-neotree-media-file-face '((t (:inherit neo-file-link-face)))
|
||||
"Face for labels of media files. See `doom-themes-neotree-file-face-re-alist'."
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defface doom-themes-neotree-data-file-face '((t (:inherit neo-file-link-face)))
|
||||
"Face for labels of data files (json, yaml, xml, etc). See
|
||||
`doom-themes-neotree-file-face-re-alist'."
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
(defface doom-themes-neotree-executable-file-face '((t (:inherit neo-file-link-face)))
|
||||
"TODO"
|
||||
:group 'doom-themes-neotree)
|
||||
|
||||
|
||||
;;
|
||||
;;; Helpers
|
||||
|
||||
(defun doom-themes--neotree-no-fringes ()
|
||||
"Remove fringes in neotree.
|
||||
They are reset each time you select the neotree pane and highlighted
|
||||
incorrectly, so remove them."
|
||||
(set-window-fringes neo-global--window 0 0))
|
||||
|
||||
(defun doom--neotree-setup (&rest _)
|
||||
(setq line-spacing doom-neotree-line-spacing
|
||||
(defun doom-themes--neotree-setup (&rest _)
|
||||
(setq line-spacing doom-themes-neotree-line-spacing
|
||||
tab-width 1)
|
||||
(when (featurep 'hl-line)
|
||||
(set (make-local-variable 'hl-line-sticky-flag) t)
|
||||
(hl-line-mode +1)))
|
||||
|
||||
(defun doom-neotree-spec (node rules)
|
||||
(defun doom-themes-neotree-spec (node rules)
|
||||
(let (case-fold-search)
|
||||
(cl-loop for spec in rules
|
||||
for pred = (car spec)
|
||||
|
@ -188,7 +193,7 @@ pane and are highlighted incorrectly."
|
|||
|
||||
(defun doom--neotree-insert-file-icon (node icon &optional faces)
|
||||
(if node
|
||||
(cond ((eq doom-neotree-file-icons 'simple)
|
||||
(cond ((eq doom-themes-neotree-file-icons 'simple)
|
||||
(propertize
|
||||
(if icon
|
||||
(apply (car icon) (cdr icon))
|
||||
|
@ -205,23 +210,23 @@ pane and are highlighted incorrectly."
|
|||
(all-the-icons-octicon
|
||||
(format "chevron-%s" (if (eq type 'open) "down" "right"))
|
||||
:v-adjust 0.1
|
||||
:height doom-neotree-chevron-size
|
||||
:height doom-themes-neotree-chevron-size
|
||||
:face `(:inherit ,faces
|
||||
:family ,(all-the-icons-octicon-family)
|
||||
:height ,doom-neotree-chevron-size))
|
||||
:height ,doom-themes-neotree-chevron-size))
|
||||
"\t")
|
||||
"\t"
|
||||
(when doom-neotree-enable-folder-icons
|
||||
(when doom-themes-neotree-enable-folder-icons
|
||||
(all-the-icons-octicon
|
||||
(cond ((file-symlink-p node) "file-symlink-directory")
|
||||
((file-exists-p (format "%s/.git" node)) "file-submodule")
|
||||
((all-the-icons-dir-is-submodule node) "file-submodule")
|
||||
("file-directory"))
|
||||
:v-adjust 0
|
||||
:height doom-neotree-folder-size
|
||||
:height doom-themes-neotree-folder-size
|
||||
:face `(:inherit ,faces
|
||||
:family ,(all-the-icons-octicon-family)
|
||||
:height ,doom-neotree-folder-size)))))
|
||||
:height ,doom-themes-neotree-folder-size)))))
|
||||
|
||||
(defun doom--neotree-insert-icon (type node &optional icon faces)
|
||||
"Custom hybrid unicode theme with leading whitespace."
|
||||
|
@ -231,35 +236,38 @@ pane and are highlighted incorrectly."
|
|||
(insert
|
||||
(concat spc
|
||||
(doom--neotree-insert-dir-icon
|
||||
node (if doom-neotree-enable-open-chevron-icons type)
|
||||
node (if doom-themes-neotree-enable-open-chevron-icons type)
|
||||
faces)
|
||||
vspc)))
|
||||
((eq type 'close)
|
||||
(insert
|
||||
(concat spc
|
||||
(doom--neotree-insert-dir-icon
|
||||
node (if doom-neotree-enable-closed-chevron-icons type)
|
||||
node (if doom-themes-neotree-enable-closed-chevron-icons type)
|
||||
faces)
|
||||
vspc)))
|
||||
((eq type 'leaf)
|
||||
(insert
|
||||
(concat (when (or doom-neotree-enable-open-chevron-icons
|
||||
doom-neotree-enable-closed-chevron-icons)
|
||||
(concat (when (or doom-themes-neotree-enable-open-chevron-icons
|
||||
doom-themes-neotree-enable-closed-chevron-icons)
|
||||
spc)
|
||||
(when doom-neotree-enable-folder-icons spc)
|
||||
(when doom-neotree-file-icons
|
||||
(when doom-themes-neotree-enable-folder-icons spc)
|
||||
(when doom-themes-neotree-file-icons
|
||||
(concat spc (doom--neotree-insert-file-icon node icon faces)))
|
||||
vspc))))))
|
||||
|
||||
|
||||
;;
|
||||
(defun doom-neotree-insert-root (node)
|
||||
;;; Public library
|
||||
|
||||
(defun doom-themes-neotree-insert-root (node)
|
||||
;; insert icon
|
||||
(when (display-graphic-p)
|
||||
(insert
|
||||
(concat (propertize "\t" 'face 'neo-root-dir-face)
|
||||
(all-the-icons-octicon
|
||||
"repo"
|
||||
:height doom-neotree-project-size
|
||||
:height doom-themes-neotree-project-size
|
||||
:face 'neo-root-dir-face
|
||||
:v-adjust -0.1)
|
||||
(propertize " " 'face 'neo-root-dir-face))))
|
||||
|
@ -268,12 +276,12 @@ pane and are highlighted incorrectly."
|
|||
(propertize
|
||||
(concat (or (neo-path--file-short-name node) "-")
|
||||
"\n")
|
||||
'face `(:inherit ,(append (if doom-neotree-enable-variable-pitch '(variable-pitch))
|
||||
'face `(:inherit ,(append (if doom-themes-neotree-enable-variable-pitch '(variable-pitch))
|
||||
'(neo-root-dir-face))))))
|
||||
|
||||
(defun doom-neotree-insert-dir (node depth expanded)
|
||||
(defun doom-themes-neotree-insert-dir (node depth expanded)
|
||||
(let ((short-name (neo-path--file-short-name node))
|
||||
(faces '(doom-neotree-dir-face))
|
||||
(faces '(doom-themes-neotree-dir-face))
|
||||
icon-text)
|
||||
;; insert indentation
|
||||
(insert-char ?\s (* (- depth 1) 2))
|
||||
|
@ -286,7 +294,7 @@ pane and are highlighted incorrectly."
|
|||
(not (eq (cdr vc) 'neo-vc-up-to-date-face))
|
||||
(setq faces (list (cdr vc))))
|
||||
(cl-destructuring-bind (&key face icon)
|
||||
(doom-neotree-spec node doom-neotree-dir-rules)
|
||||
(doom-themes-neotree-spec node doom-themes-neotree-dir-rules)
|
||||
(if face (push face faces))
|
||||
(if icon (setq icon-text icon)))))
|
||||
;; insert icon
|
||||
|
@ -295,7 +303,7 @@ pane and are highlighted incorrectly."
|
|||
(doom--neotree-insert-icon type node icon-text faces)
|
||||
(neo-buffer--insert-fold-symbol type node)))
|
||||
;; insert label button
|
||||
(when doom-neotree-enable-variable-pitch
|
||||
(when doom-themes-neotree-enable-variable-pitch
|
||||
(push 'variable-pitch faces))
|
||||
(insert-button short-name
|
||||
'follow-link t
|
||||
|
@ -306,10 +314,10 @@ pane and are highlighted incorrectly."
|
|||
(neo-buffer--node-list-set nil node)
|
||||
(neo-buffer--newline-and-begin)))
|
||||
|
||||
(defun doom-neotree-insert-file (node depth)
|
||||
(defun doom-themes-neotree-insert-file (node depth)
|
||||
(let ((short-name (neo-path--file-short-name node))
|
||||
(vc (if neo-vc-integration (neo-vc-for-node node)))
|
||||
(faces '(doom-neotree-file-face))
|
||||
(faces '(doom-themes-neotree-file-face))
|
||||
icon-text)
|
||||
;; insert indentation
|
||||
(insert-char ?\s (* (- depth 1) 2))
|
||||
|
@ -318,7 +326,7 @@ pane and are highlighted incorrectly."
|
|||
(not (eq (cdr vc) 'neo-vc-up-to-date-face))
|
||||
(setq faces (list (cdr vc))))
|
||||
(cl-destructuring-bind (&key face icon)
|
||||
(doom-neotree-spec node doom-neotree-file-rules)
|
||||
(doom-themes-neotree-spec node doom-themes-neotree-file-rules)
|
||||
(if face (push face faces))
|
||||
(if icon (setq icon-text icon))))
|
||||
;; insert icon
|
||||
|
@ -326,7 +334,7 @@ pane and are highlighted incorrectly."
|
|||
(doom--neotree-insert-icon 'leaf node icon-text faces)
|
||||
(neo-buffer--insert-fold-symbol 'leaf node))
|
||||
;; insert label button
|
||||
(when doom-neotree-enable-variable-pitch
|
||||
(when doom-themes-neotree-enable-variable-pitch
|
||||
(push 'variable-pitch faces))
|
||||
(insert-button short-name
|
||||
'follow-link t
|
||||
|
@ -337,23 +345,30 @@ pane and are highlighted incorrectly."
|
|||
(neo-buffer--node-list-set nil node)
|
||||
(neo-buffer--newline-and-begin)))
|
||||
|
||||
;;
|
||||
(eval-after-load 'neotree
|
||||
(lambda ()
|
||||
(unless (require 'all-the-icons nil t)
|
||||
(error "all-the-icons isn't installed"))
|
||||
|
||||
;; Enable buffer-local hl-line and adjust line-spacing
|
||||
(add-hook 'neo-after-create-hook #'doom--neotree-setup)
|
||||
;; Incompatible
|
||||
(setq neo-vc-integration nil)
|
||||
;; Remove fringes in Neotree pane
|
||||
(advice-add #'neo-global--select-window :after #'doom--neotree-no-fringes)
|
||||
;; Patch neotree to use `doom--neotree-insert-icon'
|
||||
(advice-add #'neo-buffer--insert-file-entry :override #'doom-neotree-insert-file)
|
||||
(advice-add #'neo-buffer--insert-dir-entry :override #'doom-neotree-insert-dir)
|
||||
;; Shorter pwd in neotree override
|
||||
(advice-add #'neo-buffer--insert-root-entry :override #'doom-neotree-insert-root)))
|
||||
;;; Bootstrap
|
||||
|
||||
(provide 'doom-themes-neotree)
|
||||
(with-eval-after-load 'neotree
|
||||
(unless (require 'all-the-icons nil t)
|
||||
(error "all-the-icons isn't installed"))
|
||||
|
||||
;; Incompatible with this theme
|
||||
(setq neo-vc-integration nil)
|
||||
;; Enable buffer-local hl-line and adjust line-spacing
|
||||
(add-hook 'neo-after-create-hook #'doom-themes--neotree-setup)
|
||||
;; Remove fringes in Neotree pane
|
||||
(advice-add #'neo-global--select-window :after #'doom-themes--neotree-no-fringes)
|
||||
;; Patch neotree to use `doom--neotree-insert-icon'
|
||||
(advice-add #'neo-buffer--insert-file-entry :override #'doom-themes-neotree-insert-file)
|
||||
(advice-add #'neo-buffer--insert-dir-entry :override #'doom-themes-neotree-insert-dir)
|
||||
;; Shorter pwd in neotree override
|
||||
(advice-add #'neo-buffer--insert-root-entry :override #'doom-themes-neotree-insert-root))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-themes-neotree-config ()
|
||||
"Install doom-themes' neotree configuration.
|
||||
|
||||
Includes an Atom-esque icon theme and highlighting based on filetype.")
|
||||
|
||||
(provide 'doom-themes-ext-neotree)
|
||||
;;; doom-themes-neotree.el ends here
|
|
@ -1,27 +1,27 @@
|
|||
;;; doom-themes-org.el --- improve org-mode support for doom-themes -*- lexical-binding: t; -*-
|
||||
;;; doom-themes-ext-org.el --- improve org-mode support for doom-themes -*- lexical-binding: t; -*-
|
||||
|
||||
(defgroup doom-org nil
|
||||
(defgroup doom-themes-org nil
|
||||
"Options for doom's org customizations."
|
||||
:group 'doom-themes)
|
||||
|
||||
(defcustom doom-org-special-tags t
|
||||
"If non-nil, highlight #hashtags and @attags especially."
|
||||
:type 'boolean
|
||||
:group 'doom-org)
|
||||
:group 'doom-themes-org)
|
||||
|
||||
;; TODO Remove this once released with org-mode
|
||||
(defface org-upcoming-distant-deadline '((t :inherit font-lock-comment-face))
|
||||
"Face for items scheduled previously, not done, and have a distant deadline.
|
||||
See also `org-agenda-deadline-faces'."
|
||||
:group 'doom-org)
|
||||
:group 'doom-themes-org)
|
||||
|
||||
;;
|
||||
(defsubst doom-org--tag-face (n)
|
||||
(defsubst doom-themes--org-tag-face (n)
|
||||
(let ((kwd (match-string n)))
|
||||
(or (and (equal kwd "#") 'org-tag)
|
||||
(and (equal kwd "@") 'org-formula))))
|
||||
|
||||
(defun doom-org-custom-fontification ()
|
||||
(defun doom-themes-enable-org-fontification ()
|
||||
"Correct (and improve) org-mode's font-lock keywords.
|
||||
|
||||
1. Re-set `org-todo' & `org-headline-done' faces, to make them respect
|
||||
|
@ -65,7 +65,7 @@ See also `org-agenda-deadline-faces'."
|
|||
("^ *\\(-----+\\)$" 1 'org-meta-line))
|
||||
;; custom #hashtags & @at-tags for another level of organization
|
||||
(when doom-org-special-tags
|
||||
'(("\\s-\\(\\([#@]\\)[^+ \n.,]+\\)" 1 (doom-org--tag-face 2) prepend)))))))
|
||||
'(("\\s-\\(\\([#@]\\)[^+ \n.,]+\\)" 1 (doom-themes--org-tag-face 2) prepend)))))))
|
||||
|
||||
|
||||
;; Bootstrap
|
||||
|
@ -80,7 +80,11 @@ See also `org-agenda-deadline-faces'."
|
|||
(0.5 . org-upcoming-deadline)
|
||||
(0.0 . org-upcoming-distant-deadline)))
|
||||
|
||||
(add-hook 'org-font-lock-set-keywords-hook #'doom-org-custom-fontification)
|
||||
(add-hook 'org-font-lock-set-keywords-hook #'doom-themes-enable-org-fontification)
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-themes-org-config ()
|
||||
"Enable custom fontification & improves theme integration with org-mode.")
|
||||
|
||||
(provide 'doom-themes-org)
|
||||
;;; doom-themes-org.el ends here
|
173
doom-themes-ext-treemacs.el
Normal file
173
doom-themes-ext-treemacs.el
Normal file
|
@ -0,0 +1,173 @@
|
|||
;;; doom-themes-ext-treemacs.el --- description -*- lexical-binding: t; -*-
|
||||
|
||||
(defgroup doom-themes-treemacs nil
|
||||
"Options for doom's treemacs theme"
|
||||
:group 'doom-themes)
|
||||
|
||||
|
||||
;;
|
||||
;;; Variables
|
||||
|
||||
(defcustom doom-themes-treemacs-enable-variable-pitch t
|
||||
"If non-nil, the labels for files, folders and projects are displayed with the
|
||||
variable-pitch face."
|
||||
:type 'boolean
|
||||
:group 'doom-themes-treemacs)
|
||||
|
||||
(defcustom doom-themes-treemacs-line-spacing 1
|
||||
"Line-spacing for treemacs buffer."
|
||||
:type 'integer
|
||||
:group 'doom-themes-treemacs)
|
||||
|
||||
|
||||
;;
|
||||
;;; Library
|
||||
|
||||
(defun doom-themes-hide-fringes ()
|
||||
"Remove fringes in currnent window."
|
||||
(when (display-graphic-p)
|
||||
(set-window-fringes nil 0 0)))
|
||||
|
||||
(defun doom-themes-setup-treemacs (&rest _)
|
||||
"Set up `line-spacing' and `tab-width'."
|
||||
(setq line-spacing doom-themes-treemacs-line-spacing
|
||||
tab-width 1))
|
||||
|
||||
(defun doom-themes-hide-modeline ()
|
||||
(setq mode-line-format nil))
|
||||
|
||||
(defun doom-themes-enable-treemacs-variable-pitch-labels (&rest _)
|
||||
(when doom-themes-treemacs-enable-variable-pitch
|
||||
(dolist (face '(treemacs-root-face
|
||||
treemacs-git-unmodified-face
|
||||
treemacs-git-modified-face
|
||||
treemacs-git-renamed-face
|
||||
treemacs-git-ignored-face
|
||||
treemacs-git-untracked-face
|
||||
treemacs-git-added-face
|
||||
treemacs-git-conflict-face
|
||||
treemacs-directory-face
|
||||
treemacs-directory-collapsed-face
|
||||
treemacs-file-face
|
||||
treemacs-tags-face))
|
||||
(let ((faces (face-attribute face :inherit nil)))
|
||||
(set-face-attribute
|
||||
face nil :inherit
|
||||
`(variable-pitch ,@(delq 'unspecified (if (listp faces) faces (list faces)))))))))
|
||||
|
||||
|
||||
;;
|
||||
;;; Bootstrap
|
||||
|
||||
(eval-when-compile
|
||||
(require 'treemacs-themes nil t) ; For `treemacs-create-theme'
|
||||
(require 'treemacs-icons nil t)) ; For `treemacs-create-icon'
|
||||
|
||||
(with-eval-after-load 'treemacs
|
||||
(unless (require 'all-the-icons nil t)
|
||||
(error "all-the-icons isn't installed"))
|
||||
|
||||
(add-hook 'treemacs-mode-hook #'doom-themes-setup-treemacs)
|
||||
|
||||
;; The modeline isn't useful in treemacs
|
||||
(add-hook 'treemacs-mode-hook #'doom-themes-hide-modeline)
|
||||
|
||||
;; Disable fringes (and reset them everytime treemacs is selected because it
|
||||
;; may change due to outside factors)
|
||||
(add-hook 'treemacs-mode-hook #'doom-themes-hide-fringes)
|
||||
(advice-add #'treemacs-select-window :after #'doom-themes-hide-fringes)
|
||||
|
||||
;; variable-pitch labels for files/folders
|
||||
(doom-themes-enable-treemacs-variable-pitch-labels)
|
||||
(advice-add #'load-theme :after #'doom-themes-enable-treemacs-variable-pitch-labels)
|
||||
|
||||
;; minimalistic atom-inspired icon theme
|
||||
(treemacs-create-theme "doom"
|
||||
:config
|
||||
(let ((face-spec '(:inherit font-lock-doc-face :slant normal)))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "repo" :v-adjust -0.1 :face face-spec))
|
||||
:extensions (root))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t%s\t"
|
||||
(all-the-icons-octicon "chevron-down" :height 0.75 :v-adjust 0.1 :face face-spec)
|
||||
(all-the-icons-octicon "file-directory" :v-adjust 0 :face face-spec))
|
||||
:extensions (dir-open))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t%s\t"
|
||||
(all-the-icons-octicon "chevron-right" :height 0.75 :v-adjust 0.1 :face face-spec)
|
||||
(all-the-icons-octicon "file-directory" :v-adjust 0 :face face-spec))
|
||||
:extensions (dir-closed))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t%s\t"
|
||||
(all-the-icons-octicon "chevron-down" :height 0.75 :v-adjust 0.1 :face face-spec)
|
||||
(all-the-icons-octicon "package" :v-adjust 0 :face face-spec)) :extensions (tag-open))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t%s\t"
|
||||
(all-the-icons-octicon "chevron-right" :height 0.75 :v-adjust 0.1 :face face-spec)
|
||||
(all-the-icons-octicon "package" :v-adjust 0 :face face-spec))
|
||||
:extensions (tag-closed))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t" (all-the-icons-octicon "tag" :height 0.9 :v-adjust 0 :face face-spec))
|
||||
:extensions (tag-leaf))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t" (all-the-icons-octicon "flame" :v-adjust 0 :face face-spec))
|
||||
:extensions (error))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t" (all-the-icons-octicon "stop" :v-adjust 0 :face face-spec))
|
||||
:extensions (warning))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t" (all-the-icons-octicon "info" :height 0.75 :v-adjust 0.1 :face face-spec))
|
||||
:extensions (info))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-media" :v-adjust 0 :face face-spec))
|
||||
:extensions ("png" "jpg" "jpeg" "gif" "ico" "tif" "tiff" "svg" "bmp"
|
||||
"psd" "ai" "eps" "indd" "mov" "avi" "mp4" "webm" "mkv"
|
||||
"wav" "mp3" "ogg" "midi"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-code" :v-adjust 0 :face face-spec))
|
||||
:extensions ("yml" "yaml" "sh" "zsh" "fish" "c" "h" "cpp" "cxx" "hpp"
|
||||
"tpp" "cc" "hh" "hs" "lhs" "cabal" "py" "pyc" "rs" "el"
|
||||
"elc" "clj" "cljs" "cljc" "ts" "tsx" "vue" "css" "html"
|
||||
"htm" "dart" "java" "kt" "scala" "sbt" "go" "js" "jsx"
|
||||
"hy" "json" "jl" "ex" "exs" "eex" "ml" "mli" "pp" "dockerfile"
|
||||
"vagrantfile" "j2" "jinja2" "tex" "racket" "rkt" "rktl" "rktd"
|
||||
"scrbl" "scribble" "plt" "makefile" "elm" "xml" "xsl" "rb"
|
||||
"scss" "lua" "lisp" "scm" "sql" "toml" "nim" "pl" "pm" "perl"
|
||||
"vimrc" "tridactylrc" "vimperatorrc" "ideavimrc" "vrapperrc"
|
||||
"cask" "r" "re" "rei" "bashrc" "zshrc" "inputrc" "editorconfig"
|
||||
"gitconfig"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "book" :v-adjust 0 :face face-spec))
|
||||
:extensions ("lrf" "lrx" "cbr" "cbz" "cb7" "cbt" "cba" "chm" "djvu"
|
||||
"doc" "docx" "pdb" "pdb" "fb2" "xeb" "ceb" "inf" "azw"
|
||||
"azw3" "kf8" "kfx" "lit" "prc" "mobi" "exe" "or" "html"
|
||||
"pkg" "opf" "txt" "pdb" "ps" "rtf" "pdg" "xml" "tr2"
|
||||
"tr3" "oxps" "xps"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-text" :v-adjust 0 :face face-spec))
|
||||
:extensions ("md" "markdown" "rst" "log" "org" "txt"
|
||||
"CONTRIBUTE" "LICENSE" "README" "CHANGELOG"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-binary" :v-adjust 0 :face face-spec))
|
||||
:extensions ("exe" "dll" "obj" "so" "o" "out"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-pdf" :v-adjust 0 :face face-spec))
|
||||
:extensions ("pdf"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-zip" :v-adjust 0 :face face-spec))
|
||||
:extensions ("zip" "7z" "tar" "gz" "rar" "tgz"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-text" :v-adjust 0 :face face-spec))
|
||||
:extensions (fallback))))
|
||||
|
||||
(treemacs-load-theme "doom"))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-themes-treemacs-config ()
|
||||
"Install doom-themes' treemacs configuration.
|
||||
|
||||
Includes an Atom-esque icon theme and highlighting based on filetype.")
|
||||
|
||||
(provide 'doom-themes-ext-treemacs)
|
||||
;;; doom-themes-treemacs.el ends here
|
36
doom-themes-ext-visual-bell.el
Normal file
36
doom-themes-ext-visual-bell.el
Normal file
|
@ -0,0 +1,36 @@
|
|||
;;; doom-themes-ext-visual-bell.el --- flash mode-line on error -*- lexical-binding: t; -*-
|
||||
|
||||
(defface doom-visual-bell '((t (:inherit error :inverse-video t)))
|
||||
"Face to use for the mode-line when `doom-themes-visual-bell-config' is used."
|
||||
:group 'doom-themes)
|
||||
|
||||
(defvar doom-themes--bell-p nil)
|
||||
;;;###autoload
|
||||
(defun doom-themes-visual-bell-fn ()
|
||||
"Blink the mode-line red briefly. Set `ring-bell-function' to this to use it."
|
||||
(unless doom-themes--bell-p
|
||||
(let ((old-remap (copy-alist face-remapping-alist)))
|
||||
(setq doom-themes--bell-p t)
|
||||
(setq face-remapping-alist
|
||||
(append (delete (assq 'mode-line face-remapping-alist)
|
||||
face-remapping-alist)
|
||||
'((mode-line doom-visual-bell))))
|
||||
(force-mode-line-update)
|
||||
(run-with-timer 0.15 nil
|
||||
(lambda (remap buf)
|
||||
(with-current-buffer buf
|
||||
(when (assq 'mode-line face-remapping-alist)
|
||||
(setq face-remapping-alist remap
|
||||
doom-themes--bell-p nil))
|
||||
(force-mode-line-update)))
|
||||
old-remap
|
||||
(current-buffer)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-themes-visual-bell-config ()
|
||||
"Enable flashing the mode-line on error."
|
||||
(setq ring-bell-function #'doom-themes-visual-bell-fn
|
||||
visible-bell t))
|
||||
|
||||
(provide 'doom-themes-ext-visual-bell)
|
||||
;;; doom-themes-ext-visual-bell.el ends here
|
|
@ -1,161 +0,0 @@
|
|||
;;; doom-themes-treemacs.el --- description -*- lexical-binding: t; -*-
|
||||
|
||||
;;
|
||||
;;; Variables
|
||||
|
||||
(defgroup doom-treemacs nil
|
||||
"Options for doom's treemacs theme"
|
||||
:group 'doom-themes)
|
||||
|
||||
(defcustom doom-treemacs-enable-variable-pitch t
|
||||
"If non-nil, the labels for files, folders and projects are displayed with the
|
||||
variable-pitch face."
|
||||
:type 'boolean
|
||||
:group 'doom-treemacs)
|
||||
|
||||
(defcustom doom-treemacs-line-spacing 1
|
||||
"Line-spacing for treemacs buffer."
|
||||
:type 'integer
|
||||
:group 'doom-treemacs)
|
||||
|
||||
|
||||
;;
|
||||
;;; Library
|
||||
|
||||
(defun doom--treemacs-no-fringes ()
|
||||
"Remove fringes in treemacs. They get reset each time you select the neotree
|
||||
pane and are highlighted incorrectly when used with `solaire-mode'."
|
||||
(when (display-graphic-p)
|
||||
(set-window-fringes nil 0 0)))
|
||||
|
||||
(defun doom--treemacs-setup (&rest _)
|
||||
(setq line-spacing doom-treemacs-line-spacing
|
||||
tab-width 1))
|
||||
|
||||
(defun doom--treemacs-hide-modeline ()
|
||||
(setq mode-line-format nil))
|
||||
|
||||
(defun doom--treemacs-variable-pitch-labels (&rest _)
|
||||
(when doom-treemacs-enable-variable-pitch
|
||||
(dolist (face '(treemacs-root-face
|
||||
treemacs-git-unmodified-face
|
||||
treemacs-git-modified-face
|
||||
treemacs-git-renamed-face
|
||||
treemacs-git-ignored-face
|
||||
treemacs-git-untracked-face
|
||||
treemacs-git-added-face
|
||||
treemacs-git-conflict-face
|
||||
treemacs-directory-face
|
||||
treemacs-directory-collapsed-face
|
||||
treemacs-file-face
|
||||
treemacs-tags-face))
|
||||
(let ((faces (face-attribute face :inherit nil)))
|
||||
(set-face-attribute
|
||||
face nil :inherit
|
||||
`(variable-pitch ,@(delq 'unspecified (if (listp faces) faces (list faces)))))))))
|
||||
|
||||
|
||||
;;
|
||||
;;; Bootstrap
|
||||
|
||||
(defvar all-the-icons-default-adjust)
|
||||
(eval-after-load 'treemacs
|
||||
(lambda ()
|
||||
(unless (require 'all-the-icons nil t)
|
||||
(error "all-the-icons isn't installed"))
|
||||
|
||||
(add-hook 'treemacs-mode-hook #'doom--treemacs-setup)
|
||||
(add-hook 'treemacs-mode-hook #'doom--treemacs-hide-modeline)
|
||||
|
||||
;; no fringes in treemacs window
|
||||
(add-hook 'treemacs-mode-hook #'doom--treemacs-no-fringes)
|
||||
(advice-add #'treemacs-select-window :after #'doom--treemacs-no-fringes)
|
||||
|
||||
;; variable-pitch labels for files/folders
|
||||
(doom--treemacs-variable-pitch-labels)
|
||||
(advice-add #'load-theme :after #'doom--treemacs-variable-pitch-labels)
|
||||
|
||||
;; minimalistic atom-inspired icon theme
|
||||
(treemacs-create-theme "Doom"
|
||||
:config
|
||||
(let ((face-spec '(:inherit font-lock-doc-face :slant normal)))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "repo" :v-adjust -0.1 :face face-spec))
|
||||
:extensions (root))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t%s\t"
|
||||
(all-the-icons-octicon "chevron-down" :height 0.75 :v-adjust 0.1 :face face-spec)
|
||||
(all-the-icons-octicon "file-directory" :v-adjust 0 :face face-spec))
|
||||
:extensions (dir-open))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t%s\t"
|
||||
(all-the-icons-octicon "chevron-right" :height 0.75 :v-adjust 0.1 :face face-spec)
|
||||
(all-the-icons-octicon "file-directory" :v-adjust 0 :face face-spec))
|
||||
:extensions (dir-closed))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t%s\t"
|
||||
(all-the-icons-octicon "chevron-down" :height 0.75 :v-adjust 0.1 :face face-spec)
|
||||
(all-the-icons-octicon "package" :v-adjust 0 :face face-spec)) :extensions (tag-open))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t%s\t"
|
||||
(all-the-icons-octicon "chevron-right" :height 0.75 :v-adjust 0.1 :face face-spec)
|
||||
(all-the-icons-octicon "package" :v-adjust 0 :face face-spec))
|
||||
:extensions (tag-closed))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t" (all-the-icons-octicon "tag" :height 0.9 :v-adjust 0 :face face-spec))
|
||||
:extensions (tag-leaf))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t" (all-the-icons-octicon "flame" :v-adjust 0 :face face-spec))
|
||||
:extensions (error))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t" (all-the-icons-octicon "stop" :v-adjust 0 :face face-spec))
|
||||
:extensions (warning))
|
||||
(treemacs-create-icon
|
||||
:icon (format "%s\t" (all-the-icons-octicon "info" :height 0.75 :v-adjust 0.1 :face face-spec))
|
||||
:extensions (info))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-media" :v-adjust 0 :face face-spec))
|
||||
:extensions ("png" "jpg" "jpeg" "gif" "ico" "tif" "tiff" "svg" "bmp"
|
||||
"psd" "ai" "eps" "indd" "mov" "avi" "mp4" "webm" "mkv"
|
||||
"wav" "mp3" "ogg" "midi"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-code" :v-adjust 0 :face face-spec))
|
||||
:extensions ("yml" "yaml" "sh" "zsh" "fish" "c" "h" "cpp" "cxx" "hpp"
|
||||
"tpp" "cc" "hh" "hs" "lhs" "cabal" "py" "pyc" "rs" "el"
|
||||
"elc" "clj" "cljs" "cljc" "ts" "tsx" "vue" "css" "html"
|
||||
"htm" "dart" "java" "kt" "scala" "sbt" "go" "js" "jsx"
|
||||
"hy" "json" "jl" "ex" "exs" "eex" "ml" "mli" "pp" "dockerfile"
|
||||
"vagrantfile" "j2" "jinja2" "tex" "racket" "rkt" "rktl" "rktd"
|
||||
"scrbl" "scribble" "plt" "makefile" "elm" "xml" "xsl" "rb"
|
||||
"scss" "lua" "lisp" "scm" "sql" "toml" "nim" "pl" "pm" "perl"
|
||||
"vimrc" "tridactylrc" "vimperatorrc" "ideavimrc" "vrapperrc"
|
||||
"cask" "r" "re" "rei" "bashrc" "zshrc" "inputrc" "editorconfig"
|
||||
"gitconfig"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "book" :v-adjust 0 :face face-spec))
|
||||
:extensions ("lrf" "lrx" "cbr" "cbz" "cb7" "cbt" "cba" "chm" "djvu"
|
||||
"doc" "docx" "pdb" "pdb" "fb2" "xeb" "ceb" "inf" "azw"
|
||||
"azw3" "kf8" "kfx" "lit" "prc" "mobi" "exe" "or" "html"
|
||||
"pkg" "opf" "txt" "pdb" "ps" "rtf" "pdg" "xml" "tr2"
|
||||
"tr3" "oxps" "xps"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-text" :v-adjust 0 :face face-spec))
|
||||
:extensions ("md" "markdown" "rst" "log" "org" "txt"
|
||||
"CONTRIBUTE" "LICENSE" "README" "CHANGELOG"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-binary" :v-adjust 0 :face face-spec))
|
||||
:extensions ("exe" "dll" "obj" "so" "o" "out"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-pdf" :v-adjust 0 :face face-spec))
|
||||
:extensions ("pdf"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-zip" :v-adjust 0 :face face-spec))
|
||||
:extensions ("zip" "7z" "tar" "gz" "rar" "tgz"))
|
||||
(treemacs-create-icon
|
||||
:icon (format " %s\t" (all-the-icons-octicon "file-text" :v-adjust 0 :face face-spec))
|
||||
:extensions (fallback))))
|
||||
|
||||
(treemacs-load-theme "Doom")))
|
||||
|
||||
(provide 'doom-themes-treemacs)
|
||||
;;; doom-themes-treemacs.el ends here
|
236
doom-themes.el
236
doom-themes.el
|
@ -67,15 +67,16 @@
|
|||
;;; Code:
|
||||
|
||||
(require 'cl-lib)
|
||||
(require 'doom-themes-common)
|
||||
(require 'doom-themes-base)
|
||||
|
||||
(defgroup doom-themes nil
|
||||
"Options for doom-themes."
|
||||
:group 'faces)
|
||||
|
||||
(defface doom-modeline-error '((t (:inherit error :inverse-video t)))
|
||||
"Face to use for the mode-line when `doom-themes-visual-bell-config' is used."
|
||||
:group 'doom-themes)
|
||||
(defcustom doom-themes-padded-modeline nil
|
||||
"Default value for padded-modeline setting for themes that support it."
|
||||
:group 'doom-themes
|
||||
:type '(or integer boolean))
|
||||
|
||||
;;
|
||||
(defcustom doom-themes-enable-bold t
|
||||
|
@ -88,20 +89,154 @@
|
|||
:group 'doom-themes
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom doom-themes-padded-modeline nil
|
||||
"Default value for padded-modeline setting for themes that support it."
|
||||
:group 'doom-themes
|
||||
:type '(or integer boolean))
|
||||
|
||||
(define-obsolete-variable-alias 'doom-enable-italic 'doom-themes-enable-italic "1.2.9")
|
||||
(define-obsolete-variable-alias 'doom-enable-bold 'doom-themes-enable-bold "1.2.9")
|
||||
;;
|
||||
;;; API
|
||||
|
||||
(defvar doom-themes--colors nil)
|
||||
(defvar doom-themes--inhibit-warning nil)
|
||||
(defvar doom-themes--bell-p nil)
|
||||
(defvar doom--min-colors '(257 256 16))
|
||||
(defvar doom--quoted-p nil)
|
||||
(defvar doom-themes--faces nil)
|
||||
|
||||
(defun doom-themes--colors-p (item)
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(when item
|
||||
(cond ((listp item)
|
||||
(let ((car (car item)))
|
||||
(cond ((memq car '(quote doom-color)) nil)
|
||||
|
||||
((memq car '(backquote \`))
|
||||
(let ((doom--quoted-p t))
|
||||
(doom-themes--colors-p (cdr item))))
|
||||
|
||||
((eq car '\,)
|
||||
(let (doom--quoted-p)
|
||||
(doom-themes--colors-p (cdr item))))
|
||||
|
||||
((or (doom-themes--colors-p car)
|
||||
(doom-themes--colors-p (cdr-safe item)))))))
|
||||
|
||||
((and (symbolp item)
|
||||
(not (keywordp item))
|
||||
(not doom--quoted-p)
|
||||
(not (equal (substring (symbol-name item) 0 1) "-"))
|
||||
(assq item doom-themes--colors))))))
|
||||
|
||||
(defun doom-themes--apply-faces (new-faces &optional default-faces)
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(let ((default-faces (or default-faces doom-themes-base-faces))
|
||||
(faces (make-hash-table :test #'eq :size (+ (length default-faces) (length new-faces))))
|
||||
(directives (make-hash-table :test #'eq)))
|
||||
(dolist (spec (append (mapcar #'copy-sequence default-faces) new-faces))
|
||||
(if (listp (car spec))
|
||||
(cl-destructuring-bind (face action &optional arg) (car spec)
|
||||
(unless (assq face new-faces)
|
||||
(puthash face (list action arg (cdr spec))
|
||||
directives)))
|
||||
(puthash (car spec) (cdr spec) faces)))
|
||||
(cl-loop for face being the hash-keys of directives
|
||||
for (action target spec) = (gethash face directives)
|
||||
unless (memq action '(&inherit &extend &override))
|
||||
do (error "Invalid operation (%s) for '%s' face" action face)
|
||||
if (eq (car spec) 'quote)
|
||||
do (error "Can't extend literal face spec (for '%s')" face)
|
||||
;; TODO Add &all/&light/&dark extension support
|
||||
else if (memq (car spec) '(&all &light &dark))
|
||||
do (error "Can't extend face with &all, &light or &dark specs (for '%s')" face)
|
||||
else do
|
||||
(puthash face
|
||||
(let ((old-spec (gethash (or target face) faces))
|
||||
(plist spec))
|
||||
;; remove duplicates
|
||||
(while (keywordp (car plist))
|
||||
(setq old-spec (plist-put old-spec (car plist) (cadr plist))
|
||||
plist (cddr plist)))
|
||||
old-spec)
|
||||
faces))
|
||||
(let (results)
|
||||
(maphash (lambda (face plist)
|
||||
(when (keywordp (car plist))
|
||||
;; TODO Clean up duplicates in &all/&light/&dark blocks
|
||||
(dolist (prop (append (unless doom-themes-enable-bold '(:weight normal :bold nil))
|
||||
(unless doom-themes-enable-italic '(:slant normal :italic nil))))
|
||||
(when (and (plist-member plist prop)
|
||||
(not (eq (plist-get plist prop) 'inherit)))
|
||||
(plist-put plist prop
|
||||
(if (memq prop '(:weight :slant))
|
||||
(quote 'normal))))))
|
||||
(push (cons face plist) results))
|
||||
faces)
|
||||
(nreverse results))))
|
||||
|
||||
(defun doom-themes--colorize (item type)
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(when item
|
||||
(let ((doom--quoted-p doom--quoted-p))
|
||||
(cond ((listp item)
|
||||
(cond ((memq (car item) '(quote doom-color))
|
||||
item)
|
||||
((eq (car item) 'doom-ref)
|
||||
(doom-themes--colorize
|
||||
(apply #'doom-ref (cdr item)) type))
|
||||
((let* ((item (append item nil))
|
||||
(car (car item))
|
||||
(doom--quoted-p
|
||||
(cond ((memq car '(backquote \`)) t)
|
||||
((eq car '\,) nil)
|
||||
(t doom--quoted-p))))
|
||||
(cons car
|
||||
(cl-loop
|
||||
for i in (cdr item)
|
||||
collect (doom-themes--colorize i type)))))))
|
||||
|
||||
((and (symbolp item)
|
||||
(not (keywordp item))
|
||||
(not doom--quoted-p)
|
||||
(not (equal (substring (symbol-name item) 0 1) "-"))
|
||||
(assq item doom-themes--colors))
|
||||
`(doom-color ',item ',type))
|
||||
|
||||
(item)))))
|
||||
|
||||
(defun doom-themes--build-face (face)
|
||||
(declare (pure t) (side-effect-free t))
|
||||
`(list
|
||||
',(car face)
|
||||
,(let ((face-body (cdr face)))
|
||||
(cond ((keywordp (car face-body))
|
||||
(let ((real-attrs face-body)
|
||||
defs)
|
||||
(if (doom-themes--colors-p real-attrs)
|
||||
(dolist (cl doom--min-colors `(list ,@(nreverse defs)))
|
||||
(push `(list '((class color) (min-colors ,cl))
|
||||
(list ,@(doom-themes--colorize real-attrs cl)))
|
||||
defs))
|
||||
`(list (list 't (list ,@real-attrs))))))
|
||||
|
||||
((memq (car-safe (car face-body)) '(quote backquote \`))
|
||||
(car face-body))
|
||||
|
||||
((let (all-attrs defs)
|
||||
(dolist (attrs face-body `(list ,@(nreverse defs)))
|
||||
(cond ((eq (car attrs) '&all)
|
||||
(setq all-attrs (append all-attrs (cdr attrs))))
|
||||
|
||||
((memq (car attrs) '(&dark &light))
|
||||
(let ((bg (if (eq (car attrs) '&dark) 'dark 'light))
|
||||
(real-attrs (append all-attrs (cdr attrs) '())))
|
||||
(cond ((doom-themes--colors-p real-attrs)
|
||||
(dolist (cl doom--min-colors)
|
||||
(push `(list '((class color) (min-colors ,cl) (background ,bg))
|
||||
(list ,@(doom-themes--colorize real-attrs cl)))
|
||||
defs)))
|
||||
|
||||
((push `(list '((background ,bg)) (list ,@real-attrs))
|
||||
defs)))))))))))))
|
||||
|
||||
|
||||
;; Color helper functions
|
||||
;;
|
||||
;;; Color helper functions
|
||||
|
||||
;; Shamelessly *borrowed* from solarized
|
||||
;;;###autoload
|
||||
(defun doom-name-to-rgb (color)
|
||||
|
@ -130,7 +265,7 @@ float between 0 and 1)"
|
|||
for other in (doom-name-to-rgb color2)
|
||||
collect (+ (* alpha it) (* other (- 1 alpha))))))
|
||||
|
||||
(t color1))))
|
||||
(color1))))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-darken (color alpha)
|
||||
|
@ -142,8 +277,7 @@ float between 0 and 1)"
|
|||
((listp color)
|
||||
(cl-loop for c in color collect (doom-darken c alpha)))
|
||||
|
||||
(t
|
||||
(doom-blend color "#000000" (- 1 alpha)))))
|
||||
((doom-blend color "#000000" (- 1 alpha)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-lighten (color alpha)
|
||||
|
@ -155,8 +289,7 @@ between 0 and 1)."
|
|||
((listp color)
|
||||
(cl-loop for c in color collect (doom-lighten c alpha)))
|
||||
|
||||
(t
|
||||
(doom-blend color "#FFFFFF" (- 1 alpha)))))
|
||||
((doom-blend color "#FFFFFF" (- 1 alpha)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-color (name &optional type)
|
||||
|
@ -189,6 +322,26 @@ between 0 and 1)."
|
|||
prop face (if class (format "'s '%s' class" class) "")))
|
||||
(plist-get spec prop)))
|
||||
|
||||
|
||||
;;
|
||||
;;; Defining themes
|
||||
|
||||
(defun doom-themes-prepare-facelist (custom-faces)
|
||||
"Return an alist of face definitions for `custom-theme-set-faces'.
|
||||
|
||||
Faces in EXTRA-FACES override the default faces."
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(setq doom-themes--faces (doom-themes--apply-faces custom-faces))
|
||||
(mapcar #'doom-themes--build-face doom-themes--faces))
|
||||
|
||||
(defun doom-themes-prepare-varlist (vars)
|
||||
"Return an alist of variable definitions for `custom-theme-set-variables'.
|
||||
|
||||
Variables in EXTRA-VARS override the default ones."
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(cl-loop for (var val) in (append doom-themes-base-vars vars)
|
||||
collect `(list ',var ,val)))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-themes-set-faces (theme &rest faces)
|
||||
"Customize THEME (a symbol) with FACES.
|
||||
|
@ -231,53 +384,6 @@ theme face specs. These is a simplified spec. For example:
|
|||
(unless italic (set-face-italic 'italic nil))
|
||||
(provide-theme ',name))))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-themes-org-config ()
|
||||
"Enable custom fontification and improves doom-themes integration with org-mode."
|
||||
(require 'doom-themes-org))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-themes-neotree-config ()
|
||||
"Install doom-themes' neotree configuration.
|
||||
|
||||
Includes an Atom-esque icon theme and highlighting based on filetype."
|
||||
(let ((doom-themes--inhibit-warning t))
|
||||
(require 'doom-themes-neotree)))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-themes-treemacs-config ()
|
||||
"Install doom-themes' treemacs configuration.
|
||||
|
||||
Includes an Atom-esque icon theme and highlighting based on filetype."
|
||||
(require 'doom-themes-treemacs))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-themes-visual-bell-config ()
|
||||
"Enable flashing the mode-line on error."
|
||||
(setq ring-bell-function #'doom-themes-visual-bell-fn
|
||||
visible-bell t))
|
||||
|
||||
;;;###autoload
|
||||
(defun doom-themes-visual-bell-fn ()
|
||||
"Blink the mode-line red briefly. Set `ring-bell-function' to this to use it."
|
||||
(unless doom-themes--bell-p
|
||||
(let ((old-remap (copy-alist face-remapping-alist)))
|
||||
(setq doom-themes--bell-p t)
|
||||
(setq face-remapping-alist
|
||||
(append (delete (assq 'mode-line face-remapping-alist)
|
||||
face-remapping-alist)
|
||||
'((mode-line doom-modeline-error))))
|
||||
(force-mode-line-update)
|
||||
(run-with-timer 0.15 nil
|
||||
(lambda (remap buf)
|
||||
(with-current-buffer buf
|
||||
(when (assq 'mode-line face-remapping-alist)
|
||||
(setq face-remapping-alist remap
|
||||
doom-themes--bell-p nil))
|
||||
(force-mode-line-update)))
|
||||
old-remap
|
||||
(current-buffer)))))
|
||||
|
||||
;;;###autoload
|
||||
(when (and (boundp 'custom-theme-load-path) load-file-name)
|
||||
(let* ((base (file-name-directory load-file-name))
|
||||
|
|
Loading…
Reference in a new issue