aboutsummaryrefslogtreecommitdiffstats
path: root/elpa/doom-themes-20220504.1557/doom-themes-ext-treemacs.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/doom-themes-20220504.1557/doom-themes-ext-treemacs.el')
-rw-r--r--elpa/doom-themes-20220504.1557/doom-themes-ext-treemacs.el313
1 files changed, 313 insertions, 0 deletions
diff --git a/elpa/doom-themes-20220504.1557/doom-themes-ext-treemacs.el b/elpa/doom-themes-20220504.1557/doom-themes-ext-treemacs.el
new file mode 100644
index 0000000..e969e80
--- /dev/null
+++ b/elpa/doom-themes-20220504.1557/doom-themes-ext-treemacs.el
@@ -0,0 +1,313 @@
+;;; doom-themes-ext-treemacs.el --- ... -*- lexical-binding: t; no-byte-compile: t -*-
+;;
+;; Copyright (C) 2018-2022 Henrik Lissner
+;;
+;; Author: Henrik Lissner <contact@henrik.io>
+;; Maintainer: Henrik Lissner <contact@henrik.io>
+;; Created: July 10, 2018
+;;
+;; This file is not part of GNU Emacs.
+;;
+;;; Commentary:
+;;; Code:
+
+(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, remap file, folder & project labels to `variable-pitch'.
+
+See `doom-themes-treemacs-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)
+
+(defcustom doom-themes-treemacs-theme "doom-atom"
+ "Default treemacs theme."
+ :type '(radio (const :doc "A minimalistic atom-inspired icon theme" "doom-atom")
+ (const :doc "A colorful icon theme leveraging all-the-icons" "doom-colors"))
+ :group 'doom-themes-treemacs)
+
+(defcustom doom-themes-treemacs-bitmap-indicator-width 3
+ "Default treemacs bitmap indicators width."
+ :type 'integer
+ :group 'doom-themes-treemacs)
+
+(defcustom doom-themes-treemacs-variable-pitch-face 'variable-pitch
+ "The face to remap file/directory labels to.
+
+Only takes effect if `doom-themes-treemacs-enable-variable-pitch' is non-nil."
+ :type 'face
+ :group 'doom-themes-treemacs)
+
+
+;;
+;;; Faces
+(defface doom-themes-treemacs-root-face
+ '((t (:inherit font-lock-string-face)))
+ "Face used for the root icon in doom themes' treemacs theme."
+ :group 'doom-themes-treemacs)
+
+(defface doom-themes-treemacs-file-face
+ '((t (:inherit font-lock-doc-face :slant normal)))
+ "Face used for the directory and file icons in doom themes' treemacs theme."
+ :group 'doom-themes-treemacs)
+
+;;
+;;; Library
+
+(defun doom-themes-hide-fringes-maybe (&rest _)
+ "Remove fringes in current window if `treemacs-fringe-indicator-mode' is nil"
+ (when (display-graphic-p)
+ (if treemacs-fringe-indicator-mode
+ (set-window-fringes nil doom-themes-treemacs-bitmap-indicator-width 0)
+ (set-window-fringes nil 0 0))))
+
+(defun doom-themes-setup-tab-width (&rest _)
+ "Set `tab-width' to 1, so tab characters don't ruin formatting."
+ (setq tab-width 1))
+
+(defun doom-themes-define-treemacs-fringe-indicator-bitmap ()
+ "Defines `treemacs--fringe-indicator-bitmap'"
+ (if (fboundp 'define-fringe-bitmap)
+ (define-fringe-bitmap 'treemacs--fringe-indicator-bitmap
+ (make-vector 26 #b111) nil doom-themes-treemacs-bitmap-indicator-width)))
+
+(defun doom-themes-setup-line-spacing ()
+ "Set `line-spacing' in treemacs buffers."
+ (setq line-spacing doom-themes-treemacs-line-spacing))
+
+(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
+ `(,doom-themes-treemacs-variable-pitch-face
+ ,@(delq 'unspecified (if (listp faces) faces (list faces)))))))))
+
+(defun doom-themes-fix-treemacs-icons-dired-mode ()
+ "Set `tab-width' to 1 in dired-mode if `treemacs-icons-dired-mode' is active."
+ (funcall (if treemacs-icons-dired-mode #'add-hook #'remove-hook)
+ 'dired-mode-hook
+ #'doom-themes-setup-tab-width))
+
+;;
+;;; Bootstrap
+
+(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-tab-width)
+ (add-hook 'treemacs-mode-hook #'doom-themes-setup-line-spacing)
+ (add-hook 'treemacs-mode-hook #'doom-themes-define-treemacs-fringe-indicator-bitmap)
+
+ ;; Fix #293: tabs messing up formatting in `treemacs-icons-dired-mode'
+ (add-hook 'treemacs-icons-dired-mode-hook #'doom-themes-fix-treemacs-icons-dired-mode)
+
+ ;; 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-maybe)
+ (advice-add #'treemacs-select-window :after #'doom-themes-hide-fringes-maybe)
+
+ ;; 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
+ (let ((face-spec 'doom-themes-treemacs-file-face))
+ (treemacs-create-theme "doom-atom"
+ :config
+ (progn
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-octicon "repo" :height 1.2 :v-adjust -0.1 :face 'doom-themes-treemacs-root-face))
+ :extensions (root-open))
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-octicon "repo" :height 1.2 :v-adjust -0.1 :face 'doom-themes-treemacs-root-face))
+ :extensions (root-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 "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 ("ai" "aiff" "avi" "bmp" "eps" "flac" "gif" "ico" "indd"
+ "jpeg" "jpg" "midi" "mkv" "mov" "mp3" "mp4" "ogg" "png"
+ "psd" "svg" "tif" "tiff" "wav" "webm" "webp"))
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-octicon "file-code" :v-adjust 0 :face face-spec))
+ :extensions ("accdb" "accdt" "actionscript" "adoc" "adoc" "ansible"
+ "antlr" "applescript" "asciidoc" "asm" "c" "cask" "cc"
+ "cc" "clj" "cljc" "cljs" "cmake" "coffee" "cpp" "css"
+ "cxx" "cython" "d" "dart" "diet" "diff" "dml"
+ "docker-compose.yml" "dockerfile" "dscript" "edn" "eex"
+ "el" "elm" "ex" "exs" "fennel" "fish" "fortran"
+ "fortran-modern" "fortranfreeform" "fsharp" "gdscript"
+ "go" "gradle" "graphql" "h" "hh" "hpp" "hs" "htm" "html"
+ "hy" "iced" "inc" "ino" "j2" "j2" "java" "jinja" "jinja2"
+ "jl" "js" "jsx" "kt" "kts" "ledger" "less" "lhs" "lisp"
+ "lua" "makefile" "matlab" "merlin" "mips" "ml" "mli"
+ "moonscript" "nim" "nims" "nix" "objectpascal" "ocaml"
+ "pascal" "patch" "pde" "perl" "pgsql" "php" "php4" "php5"
+ "phps" "pl" "plt" "pm" "pm6" "pony" "pp" "pp" "pro"
+ "prolog" "ps1" "purs" "py" "pyc" "r" "racket" "rb" "rd"
+ "rdx" "re" "rei" "rkt" "rktd" "rktl" "rs" "rsx" "sass"
+ "sbt" "scala" "scm" "scpt" "scrbl" "scribble" "scss" "sh"
+ "sql" "styles" "sv" "tex" "tpp" "ts" "tsx" "v"
+ "vagrantfile" "vh" "vhd" "vhdl" "vhms" "vim" "vue" "xsl"
+ "zsh" "zshrc"))
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-octicon "book" :v-adjust 0 :face face-spec))
+ :extensions ("azw" "azw3" "cb7" "cba" "cbr" "cbt" "cbz" "ceb" "chm"
+ "djvu" "doc" "docx" "exe" "fb2" "inf" "kf8" "kfx" "lit"
+ "lrf" "lrx" "mobi" "opf" "or" "oxps" "pdb" "pdb" "pdb"
+ "pdg" "pkg" "prc" "ps" "rtf" "tr2" "tr3" "txt" "xeb" "xps"
+ "pot" "potx" "potm" "pps" "ppsx" "ppsm" "ppt" "pptx"
+ "pptm" "pa" "ppa" "ppam" "sldm" "sldx" ))
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-faicon "cogs" :height 0.85 :v-adjust 0 :face face-spec))
+ :extensions ("Vagrantfile" "babel.config.js" "babelignore" "babelrc"
+ "babelrc.js" "babelrc.json" "bashrc" "bazel" "bazelrc"
+ "bower.json" "bowerrc" "cabal" "cfg" "conf" "config"
+ "cson" "csv" "editorconfig" "envrc" "eslintignore"
+ "eslintrc" "feature" "gemfile" "git" "gitattributes"
+ "gitconfig" "gitignore" "gitmodules" "ideavimrc" "iml"
+ "ini" "inputrc" "json" "ledgerrc" "lock" "nginx"
+ "npm-shrinkwrap.json" "npmignore" "npmrc"
+ "package-lock.json" "package.json" "phpunit" "pkg" "plist"
+ "properties" "terminalrc" "toml" "tridactylrc"
+ "vimperatorrc" "vimrc" "vrapperrc" "xdefaults" "xml"
+ "xresources" "yaml" "yarn-integrity" "yarnclean"
+ "yarnignore" "yarnrc" "yml"))
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-octicon "file-text" :v-adjust 0 :face face-spec))
+ :extensions ("md" "markdown" "rst" "org" "log" "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" "elc" "cmake-cache" "csr"
+ "eslintcache" "crt" "cer" "der" "pfx" "p12" "p7b" "p7r"
+ "DS_STORE" "key" "pem" "src" "crl" "sst" "stl" "ipynb"))
+ (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" "xz" "7z" "tar" "gz" "rar" "tgz" "jar"))
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-octicon "file-text" :v-adjust 0 :face face-spec))
+ :extensions (fallback))))
+
+ (treemacs-create-theme "doom-colors"
+ :extends "doom-atom"
+ :config
+ (progn
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-octicon "repo" :height 1.2 :v-adjust -0.1 :face 'doom-themes-treemacs-root-face))
+ :extensions (root-open))
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-octicon "repo" :height 1.2 :v-adjust -0.1 :face 'doom-themes-treemacs-root-face))
+ :extensions (root-closed))
+ (treemacs-create-icon
+ :icon (format "%s\t" (all-the-icons-octicon "flame" :height 0.8 :v-adjust 0 :face 'all-the-icons-red))
+ :extensions (error))
+ (treemacs-create-icon
+ :icon (format "%s\t" (all-the-icons-octicon "stop" :height 0.8 :v-adjust 0 :face 'all-the-icons-yellow))
+ :extensions (warning))
+ (treemacs-create-icon
+ :icon (format "%s\t" (all-the-icons-octicon "info" :height 0.75 :v-adjust 0.1 :face 'all-the-icons-green))
+ :extensions (info))
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-alltheicon "git" :height 0.85 :v-adjust 0.0 :face 'all-the-icons-red))
+ :extensions ("gitignore" "git" "gitattributes" "gitconfig" "gitmodules"))
+ (treemacs-create-icon
+ :icon (format "%s\t" (all-the-icons-octicon "book" :height 1.0 :v-adjust 0.0 :face 'all-the-icons-blue))
+ :extensions (license))
+
+ (dolist (item all-the-icons-extension-icon-alist)
+ (let* ((extension (car item))
+ (func (cadr item))
+ (args (append (list (cadr (cdr item))) '(:v-adjust -0.05 :height 0.85) (cdr (cddr item))))
+ (icon (apply func args)))
+ (let* ((icon-pair (cons (format " %s\t" icon) " "))
+ (gui-icons (treemacs-theme->gui-icons treemacs--current-theme))
+ (tui-icons (treemacs-theme->tui-icons treemacs--current-theme))
+ (gui-icon (car icon-pair))
+ (tui-icon (cdr icon-pair)))
+ (ht-set! gui-icons extension gui-icon)
+ (ht-set! tui-icons extension tui-icon))))
+
+ ;; File extensions for whom the above did not work (likely because their
+ ;; regexp is too complicated to be reversed with
+ ;; `doom-themes--get-treemacs-extensions' -- which is too naive)
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-fileicon "R" :v-adjust 0 :face 'all-the-icons-dblue))
+ :extensions ("r"))
+ (treemacs-create-icon
+ :icon (format " %s\t" (all-the-icons-octicon "file-code" :v-adjust 0 :face face-spec))
+ :extensions ("elc")))))
+
+ (treemacs-load-theme doom-themes-treemacs-theme))
+
+;;;###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