From 81cdebc7f0969fd5b7f64caf8ecfc750e9b695df Mon Sep 17 00:00:00 2001 From: Levi Olson Date: Thu, 22 Aug 2019 09:37:05 -0500 Subject: [PATCH] Adding better M-x with amx; Markdown support; Org reveal for prentations; updating package archives; Org UI updates; Improved swiper (no nil); --- init.el | 1828 ++++++++++++++++++++++++++++++++++++++++++++------- init.elc | Bin 45299 -> 80504 bytes init.org | 1928 +++++++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 3275 insertions(+), 481 deletions(-) diff --git a/init.el b/init.el index aca2927..e66b5ab 100644 --- a/init.el +++ b/init.el @@ -19,6 +19,7 @@ (defvar my-packages '(all-the-icons + amx anzu base16-theme bbdb @@ -39,6 +40,7 @@ elfeed-org elpy emmet-mode + excorporate expand-region fic-mode flycheck @@ -47,13 +49,17 @@ go-playground gorepl-mode iedit + indium ivy ivy-hydra jabber json-mode magit + markdown-mode material-theme multiple-cursors + ox-reveal + poporg projectile rainbow-delimiters rust-mode @@ -64,8 +70,8 @@ web-mode which-key)) -(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) -(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/")) +(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) +(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/")) (when (not package-archive-contents) (package-refresh-contents)) @@ -135,7 +141,7 @@ ;; Set the title (setq dashboard-banner-logo-title "Let's begin...") ;; Set the banner -(setq dashboard-startup-banner "~/.emacs.d/public/emacs-logo-512.png") +(setq dashboard-startup-banner "~/.emacs.d/public/emacs-logo-350.png") ;; Value can be ;; 'official which displays the official emacs logo ;; 'logo which displays an alternative emacs logo @@ -564,13 +570,13 @@ ivy-initial-inputs-alist nil ivy-extra-directories nil) -(global-set-key (kbd "C-s") 'swiper) +(global-set-key (kbd "C-s") 'swiper) (global-set-key (kbd "C-c C-r") 'ivy-resume) -(global-set-key (kbd "M-x") 'counsel-M-x) +(global-set-key (kbd "M-x") 'counsel-M-x) (global-set-key (kbd "C-x C-f") 'counsel-find-file) -(global-set-key (kbd "C-c g") 'counsel-git) -(global-set-key (kbd "C-c j") 'counsel-git-grep) -(global-set-key (kbd "C-c k") 'counsel-ag) +(global-set-key (kbd "C-c g") 'counsel-git) +(global-set-key (kbd "C-c j") 'counsel-git-grep) +(global-set-key (kbd "C-c k") 'counsel-ag) (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history) (defun ivy-open-current-typed-path () @@ -590,6 +596,8 @@ (global-set-key (kbd "C-c g") 'magit-status) (setq magit-completing-read-function 'ivy-completing-read) +(add-to-list 'exec-path "/home/locust/.local/bin") + (add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu/mu4e") (require 'mu4e) @@ -619,23 +627,23 @@ smtpmail-smtp-service 587 ) -(defun leo/convert-message-set-point () - "Set the point to the start of the message body." - (interactive) - (beginning-of-buffer) - (search-forward "--text follows this line--") - (forward-char) - ) -(defun leo/convert-message-from-markdown () - "Convert a markdown flavored mail buffer to html w/mime support." - (interactive) - (if (y-or-n-p "Convert to HTML? ") - ((leo/convert-message-set-point) - (save-excursion - (message-goto-body) - (shell-command-on-region (point) (point-max) "~/.emacs.d/scripts/expand-mime.sh" nil t))) - (message "Aborting.")) - ) +;; (defun leo/convert-message-set-point () +;; "Set the point to the start of the message body." +;; (interactive) +;; (beginning-of-buffer) +;; (search-forward "--text follows this line--") +;; (forward-char) +;; ) +;; (defun leo/convert-message-from-markdown () +;; "Convert a markdown flavored mail buffer to html w/mime support." +;; (interactive) +;; (if (y-or-n-p "Convert to HTML? ") +;; ((leo/convert-message-set-point) +;; (save-excursion +;; (message-goto-body) +;; (shell-command-on-region (point) (point-max) "~/.emacs.d/scripts/expand-mime.sh" nil t))) +;; (message "Aborting.")) +;; ) (setq mu4e-contexts `( @@ -765,6 +773,9 @@ projectile-completion-system 'ivy) (counsel-projectile-mode) +(autoload 'poporg-dwim "poporg" nil t) +(global-set-key (kbd "C-c \"") 'poporg-dwim) + ;;; notify.el --- notification front-end ;; Copyright (C) 2008 Mark A. Hershberger @@ -978,206 +989,6 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." (elfeed-search-fetch nil))) (add-to-list 'hyperspace-actions '("lf" . hyperspace-action->elfeed)) -(require 'rainbow-delimiters) -(global-flycheck-mode) - -(add-hook 'before-save-hook 'delete-trailing-whitespace) -(add-hook 'prog-mode-hook 'rainbow-delimiters-mode) - -(setq-default indent-tabs-mode nil - tab-width 4) -(defvaralias 'c-basic-offset 'tab-width) -(defvaralias 'cperl-indent-level 'tab-width) - -(electric-pair-mode 1) -(show-paren-mode 1) - -(require 'dockerfile-mode) -(add-to-list 'auto-mode-alist '("Dockerfile*\\'" . dockerfile-mode)) - -(require 'gitignore-mode) -(add-to-list 'auto-mode-alist '("gitignore\\'" . gitignore-mode)) - -(require 'json-mode) -(add-to-list 'auto-mode-alist '("\\.json\\'" . json-mode)) - -(require 'web-mode) -(add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode)) - -(elpy-enable) -(setq python-shell-interpreter "jupyter" - python-shell-interpreter-args "console --simple-prompt") - -(when (require 'flycheck nil t) - (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) - (add-hook 'elpy-mode-hook 'flycheck-mode)) - -(require 'py-autopep8) -(setq py-autopep8-options '("--ignore=E501")) -(add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save) - -(require 'go-mode) -(require 'go-playground) -(require 'gorepl-mode) -(require 'company-go) - -(add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode)) -(add-hook 'go-mode-hook (lambda () - (add-hook 'before-save-hook 'gofmt-before-save) - (local-set-key (kbd "M-.") 'godef-jump) - (local-set-key (kbd "M-,") 'pop-tag-mark) - (local-set-key (kbd "C-c C-c") (lambda () - (interactive) - (ansi-term) - (comint-send-string "*ansi-term*" "make\n"))) - (set (make-local-variable 'company-backends) '(company-go)) - (setq company-tooltip-limit 20 - company-echo-delay 0 - company-begin-commands '(self-insert-command)) - (gorepl-mode))) -(defun set-exec-path-from-shell-PATH () - (let ((path-from-shell (replace-regexp-in-string - "[ \t\n]*$" - "" - (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'")))) - (setenv "PATH" path-from-shell) - (setq eshell-path-env path-from-shell) - (setq exec-path (split-string path-from-shell path-separator)))) - -(when window-system (set-exec-path-from-shell-PATH)) - -(setenv "GOPATH" "~/go") -(add-to-list 'exec-path "~/go/bin") - -(defun setup-tide-mode () - "Tide setup function." - (interactive) - (tide-setup) - (flycheck-mode +1) - (setq flycheck-check-syntax-automatically '(save mode-enabled)) - (eldoc-mode +1) - (tide-hl-identifier-mode +1) - (company-mode +1)) - -;; aligns annotation to the right hand side -(setq company-tooltip-align-annotations t) - -;; formats the buffer before saving -(add-hook 'before-save-hook 'tide-format-before-save) - -(add-hook 'typescript-mode-hook #'setup-tide-mode) - -(require 'typescript-mode) -(require 'tide) - -(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)) -(add-hook 'typescript-mode-hook - '(lambda () - (set (make-local-variable 'company-backends) '(company-tide)) - (setq company-tooltip-limit 20 - company-echo-delay 0 - company-begin-commands '(self-insert-command) - tide-format-options '(:insertSpaceAfterFunctionKeywordForAnonymousFunctions t :placeOpenBraceOnNewLineForFunctions nil)) - (tide-setup))) - -(require 'web-mode) -(add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode)) -(add-hook 'web-mode-hook - (lambda () - (when (string-equal "tsx" (file-name-extension buffer-file-name)) - (setup-tide-mode)))) -;; enable typescript-tslint checker -(flycheck-add-mode 'typescript-tslint 'web-mode) - -(require 'web-mode) -(add-to-list 'auto-mode-alist '("\\.jsx\\'" . web-mode)) -(add-hook 'web-mode-hook - (lambda () - (when (string-equal "jsx" (file-name-extension buffer-file-name)) - (setup-tide-mode)))) -;; configure jsx-tide checker to run after your default jsx checker -(flycheck-add-mode 'javascript-eslint 'web-mode) -(flycheck-add-next-checker 'javascript-eslint 'jsx-tide 'append) - -(org-babel-do-load-languages - 'org-babel-load-languages - '((js . t) - (shell . t) - (emacs-lisp . t))) - -(setq org-todo-keywords - '((sequence "TODO(t)" "|" "DONE(d)") - (sequence "BUG(b)" "|" "INPROGRESS(i)" "FIXED(f)") - (sequence "|" "CANCELED(c)") - (sequence "|" "NEEDCLARIFICATION(n)") - (sequence "|" "PROVIDEUPDATE(p)") - (sequence "|" "WAITING(w)") - )) - -(setq org-agenda-files - '("~/Dropbox/Org/todo.org" "~/Dropbox/Org/archive.org")) -(setq org-refile-targets - '((nil :maxlevel . 1) - (org-agenda-files :maxlevel . 1))) - -(add-hook 'focus-in-hook - (lambda () (progn - (setq org-tags-column (- 5 (frame-width)))) (org-align-all-tags))) - -(add-hook 'focus-out-hook - (lambda () (progn - (setq org-tags-column (- 5 (frame-width)))) (org-align-all-tags))) - -(defvar org-src-tab-acts-natively) -(setq org-src-tab-acts-natively t) -;; (setenv "NODE_PATH" -;; (getenv "NODE_PATH")) - -(defvar org-confirm-babel-evaluate) - -(defun my-org-confirm-babel-evaluate (lang _body) - "Execute certain languages without confirming. - Takes LANG to allow and BODY to execute." - (not (or (string= lang "js") - (string= lang "restclient") - (string= lang "emacs-lisp") - (string= lang "shell")))) -(setq org-confirm-babel-evaluate #'my-org-confirm-babel-evaluate) -(add-to-list 'org-structure-template-alist - (list "e" (concat "#+BEGIN_SRC emacs-lisp :results silent\n" - "\n" - "#+END_SRC"))) -(add-to-list 'org-structure-template-alist - (list "j" (concat "#+BEGIN_SRC js :cmd \"babel-node\"\n" - "\n" - "#+END_SRC"))) -(add-to-list 'org-structure-template-alist - (list "r" (concat "#+BEGIN_SRC restclient :results raw\n" - "\n" - "#+END_SRC"))) - -;;store org-mode links to messages -(require 'org-mu4e) -;;store link to message if in header view, not to header query -(setq org-mu4e-link-query-in-headers-mode nil) - -(setq org-capture-templates - '(("t" "todo" entry (file+headline "~/Dropbox/Org/todo.org" "Tasks") - "* TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n"))) - -(elfeed-org) -(setq rmh-elfeed-org-files (list "~/Dropbox/Org/elfeed.org")) - -(defun leo/elfeed-search (arg) - "Search for ARG in feed." - (interactive) - (elfeed-search-set-filter arg)) - -(define-key elfeed-search-mode-map "a" (lambda () (interactive) (leo/elfeed-search ""))) -(define-key elfeed-search-mode-map "e" (lambda () (interactive) (leo/elfeed-search "+emacs"))) -(define-key elfeed-search-mode-map "d" (lambda () (interactive) (leo/elfeed-search "+daily"))) -(define-key elfeed-search-mode-map "x" (lambda () (interactive) (leo/elfeed-search "xkcd"))) - (defun find-user-init-file () "Edit the `~/.emacs.d/init.org' file." (interactive) @@ -1193,6 +1004,14 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." (interactive) (load-file "~/.emacs.d/init.elc")) +(defun leo-swiper () + "LO: Custom swiper." + (interactive) + (let ((word (thing-at-point 'symbol))) + (if word (swiper (format "%s" word))) + (unless word (swiper (format "")))) + ) + (defun jump-to-symbol-internal (&optional backwardp) "Jumps to the next symbol near the point if such a symbol exists. If BACKWARDP is non-nil it jumps backward." (let* ((point (point)) @@ -1386,7 +1205,7 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." (define-key custom-bindings "%" 'match-paren) (define-key custom-bindings (kbd "C-x .") 'dash-at-point) (define-key custom-bindings (kbd "C-x ,") 'dash-at-point-with-docset) -(define-key custom-bindings (kbd "C-s") (lambda () (interactive) (swiper (format "%s" (thing-at-point 'symbol))))) +(define-key custom-bindings (kbd "C-s") 'leo-swiper) (define-key custom-bindings (kbd "C-x C-l m") 'mu4e) (define-key custom-bindings (kbd "C-x C-o t") 'find-todo-file) (define-key custom-bindings (kbd "C-x C-l j") 'jabber) @@ -1405,6 +1224,7 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." (define-key custom-bindings (kbd "C-c p") 'counsel-projectile-switch-project) (define-key custom-bindings (kbd "C-c f") 'counsel-projectile-find-file) +(define-key custom-bindings (kbd "C-c c") 'ivy-resume) (define-key custom-bindings (kbd "C-c m") 'magit-status) (define-key custom-bindings (kbd "C-c D") 'define-word-at-point) (define-key custom-bindings (kbd "C-@") 'er/expand-region) @@ -1428,22 +1248,1574 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." (define-key custom-bindings (kbd "C-x f") 'phil-columns) (define-key custom-bindings (kbd "C-x k") 'kill-this-buffer-unless-scratch) (define-key custom-bindings (kbd "C-c d") 'duplicate-thing) -(define-key custom-bindings (kbd "C-c c") 'comment-or-uncomment-region-or-line) (define-key custom-bindings (kbd "C-;") 'comment-or-uncomment-region-or-line) (define-key custom-bindings (kbd "C-o") 'new-line-below) (define-key custom-bindings (kbd "C-S-o") 'new-line-above) (define-key custom-bindings (kbd "") 'tidy) (define-key custom-bindings (kbd "M-q") 'kill-this-buffer) -(define-key custom-bindings (kbd "M-RET") '(lambda () (interactive) (term (getenv "SHELL")))) +;; (define-key custom-bindings (kbd "M-RET") '(lambda () (interactive) (term (getenv "SHELL")))) (define-minor-mode custom-bindings-mode "A mode that activates custom-bindings." t nil custom-bindings) +(require 'rainbow-delimiters) +(global-flycheck-mode) + +(add-hook 'before-save-hook 'delete-trailing-whitespace) +(add-hook 'prog-mode-hook 'rainbow-delimiters-mode) + +(setq-default indent-tabs-mode nil + tab-width 4) +(defvaralias 'c-basic-offset 'tab-width) +(defvaralias 'cperl-indent-level 'tab-width) + +(electric-pair-mode 1) +(show-paren-mode 1) + +(require 'dockerfile-mode) +(add-to-list 'auto-mode-alist '("Dockerfile*\\'" . dockerfile-mode)) + +(require 'gitignore-mode) +(add-to-list 'auto-mode-alist '("gitignore\\'" . gitignore-mode)) + +;; Workaround to get Projectile to work again +(setq projectile-git-submodule-command nil) + +(require 'json-mode) +(add-to-list 'auto-mode-alist '("\\.json\\'" . json-mode)) + +(require 'web-mode) +(add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode)) + +(elpy-enable) +(setq python-shell-interpreter "jupyter" + python-shell-interpreter-args "console --simple-prompt") + +(when (require 'flycheck nil t) + (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) + (add-hook 'elpy-mode-hook 'flycheck-mode)) + +(require 'py-autopep8) +(setq py-autopep8-options '("--ignore=E501")) +(add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save) + +(require 'go-mode) +(require 'go-playground) +(require 'gorepl-mode) +(require 'company-go) + +(add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode)) +(add-hook 'go-mode-hook (lambda () + (add-hook 'before-save-hook 'gofmt-before-save) + (local-set-key (kbd "M-.") 'godef-jump) + (local-set-key (kbd "M-,") 'pop-tag-mark) + (local-set-key (kbd "C-c C-c") (lambda () + (interactive) + (ansi-term) + (comint-send-string "*ansi-term*" "make\n"))) + (set (make-local-variable 'company-backends) '(company-go)) + (setq company-tooltip-limit 20 + company-echo-delay 0 + company-begin-commands '(self-insert-command)) + (gorepl-mode))) +(defun set-exec-path-from-shell-PATH () + (let ((path-from-shell (replace-regexp-in-string + "[ \t\n]*$" + "" + (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'")))) + (setenv "PATH" path-from-shell) + (setq eshell-path-env path-from-shell) + (setq exec-path (split-string path-from-shell path-separator)))) + +(when window-system (set-exec-path-from-shell-PATH)) + +(setenv "GOPATH" "/home/locust/go") +(add-to-list 'exec-path "/home/locust/go/bin") + +(add-to-list 'exec-path "/usr/local/bin") + +(defun setup-tide-mode () + "Tide setup function." + (interactive) + (tide-setup) + (flycheck-mode +1) + (setq flycheck-check-syntax-automatically '(save mode-enabled)) + (eldoc-mode +1) + (tide-hl-identifier-mode +1) + (company-mode +1)) + +;; aligns annotation to the right hand side +(setq company-tooltip-align-annotations t) + +;; formats the buffer before saving +(add-hook 'before-save-hook 'tide-format-before-save) + +(add-hook 'typescript-mode-hook #'setup-tide-mode) + +(require 'typescript-mode) +(require 'tide) + +(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)) +(add-hook 'typescript-mode-hook + '(lambda () + (set (make-local-variable 'company-backends) '(company-tide)) + (setq company-tooltip-limit 20 + company-echo-delay 0 + company-begin-commands '(self-insert-command) + tide-format-options '(:insertSpaceAfterFunctionKeywordForAnonymousFunctions t :placeOpenBraceOnNewLineForFunctions nil)) + (tide-setup))) + +(require 'web-mode) +(add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode)) +(add-hook 'web-mode-hook + (lambda () + (when (string-equal "tsx" (file-name-extension buffer-file-name)) + (setup-tide-mode)))) +;; enable typescript-tslint checker +(flycheck-add-mode 'typescript-tslint 'web-mode) + +(require 'web-mode) +(add-to-list 'auto-mode-alist '("\\.jsx\\'" . web-mode)) +(add-hook 'web-mode-hook + (lambda () + (when (string-equal "jsx" (file-name-extension buffer-file-name)) + (setup-tide-mode)))) +;; configure jsx-tide checker to run after your default jsx checker +(flycheck-add-mode 'javascript-eslint 'web-mode) +(flycheck-add-next-checker 'javascript-eslint 'jsx-tide 'append) + +(org-babel-do-load-languages + 'org-babel-load-languages + '((js . t) + (shell . t) + (emacs-lisp . t))) + +(setq org-todo-keywords + '((sequence "TODO(t)" "|" "DONE(d)") + (sequence "BUG(b)" "|" "INPROGRESS(i)" "FIXED(f)") + (sequence "TEST(T)" "NOTEST(N)" "|" "COMPLETE(C)") + (sequence "|" "CANCELED(c)") + (sequence "|" "NEEDCLARIFICATION(n)") + (sequence "|" "PROVIDEUPDATE(p)") + (sequence "|" "WAITING(w)") + )) + +(setq org-agenda-files + '("~/Dropbox/Org/todo.org" + "~/Dropbox/Org/archive.org")) +(setq org-refile-targets + '((nil :maxlevel . 1) + (org-agenda-files :maxlevel . 1))) + +;; (add-hook 'focus-in-hook +;; (lambda () (progn +;; (setq org-tags-column (- 5 (frame-width)))) (org-align-all-tags))) + +;; (add-hook 'focus-out-hook +;; (lambda () (progn +;; (setq org-tags-column (- 5 (frame-width)))) (org-align-all-tags))) + +(defvar org-src-tab-acts-natively) +(setq org-src-tab-acts-natively t) + +(defvar org-confirm-babel-evaluate) + +(defun my-org-confirm-babel-evaluate (lang _body) + "Execute certain languages without confirming. + Takes LANG to allow and BODY to execute." + (not (or (string= lang "js") + (string= lang "restclient") + (string= lang "emacs-lisp") + (string= lang "shell")))) +(setq org-confirm-babel-evaluate #'my-org-confirm-babel-evaluate) +(add-to-list 'org-structure-template-alist + (list "e" (concat "#+BEGIN_SRC emacs-lisp :results silent\n" + "\n" + "#+END_SRC"))) +(add-to-list 'org-structure-template-alist + (list "j" (concat "#+BEGIN_SRC js :cmd \"/usr/local/bin/babel-node\" :results output code\n" + "\n" + "#+END_SRC"))) +(add-to-list 'org-structure-template-alist + (list "r" (concat "#+BEGIN_SRC restclient :results raw\n" + "\n" + "#+END_SRC"))) + +(defun my-org-config () + "Activate org and yas in 'org-mode' buffers." + (yas-minor-mode) + (lambda () + (local-set-key (kbd "M-RET") 'org-insert-todo-heading) + (global-set-key (kbd "C-c c") nil) + (local-set-key (kbd "C-c c i") 'org-clock-in) + (local-set-key (kbd "C-c c o") 'org-clock-out) + ) + ) +(add-hook 'org-mode-hook #'my-org-config) + +(require 'ox-reveal) + +(setq org-reveal-root "https://cdn.jsdelivr.net/npm/reveal.js" + org-reveal-klipsify-src t) + +;;store org-mode links to messages +(require 'org-mu4e) +;;store link to message if in header view, not to header query +(setq org-mu4e-link-query-in-headers-mode nil) + +(setq org-capture-templates + '(("t" "todo" entry (file+headline "~/Dropbox/Org/todo.org" "Tasks") + "* TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n"))) + +(elfeed-org) +(setq rmh-elfeed-org-files (list "~/Dropbox/Org/elfeed.org")) + +(defun leo/elfeed-search (arg) + "Search for ARG in feed." + (interactive) + (elfeed-search-set-filter arg)) + +(define-key elfeed-search-mode-map "a" (lambda () (interactive) (leo/elfeed-search ""))) +(define-key elfeed-search-mode-map "e" (lambda () (interactive) (leo/elfeed-search "+emacs"))) +(define-key elfeed-search-mode-map "d" (lambda () (interactive) (leo/elfeed-search "+daily"))) +(define-key elfeed-search-mode-map "x" (lambda () (interactive) (leo/elfeed-search "xkcd"))) + (cond ((member "PragmataPro Mono Liga" (font-family-list)) (set-face-attribute 'default nil :font "PragmataPro Mono Liga-13"))) +(set-face-attribute 'org-level-1 nil :height 1.5) +(set-face-attribute 'org-level-2 nil :height 1.2) +(set-face-attribute 'org-level-3 nil :height 1.1) +(set-face-attribute 'org-level-4 nil :height 1.1) +(set-face-attribute 'org-scheduled-today nil :height 1.0) +(set-face-attribute 'org-agenda-date-today nil :height 1.1) +;; (set-face-attribute 'org-table nil :foreground "#008787") + +;;; rainbow-mode.el --- Colorize color names in buffers + +;; Copyright (C) 2010-2018 Free Software Foundation, Inc + +;; Author: Julien Danjou +;; Keywords: faces +;; Version: 1.0.1 + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: +;; +;; This minor mode sets background color to strings that match color +;; names, e.g. #0000ff is displayed in white with a blue background. +;; + +;;; Code: + +(eval-when-compile + (require 'cl)) + +(require 'regexp-opt) +(require 'faces) +(require 'color) + +(unless (require 'xterm-color nil t) + (require 'ansi-color)) + +(defgroup rainbow nil + "Show color strings with a background color." + :tag "Rainbow" + :group 'help) + +;;; Hexadecimal colors + +(defvar rainbow-hexadecimal-colors-font-lock-keywords + '(("[^&]\\(#\\(?:[0-9a-fA-F]\\{3\\}\\)+\\{1,4\\}\\)" + (1 (rainbow-colorize-itself 1))) + ("^\\(#\\(?:[0-9a-fA-F]\\{3\\}\\)+\\{1,4\\}\\)" + (0 (rainbow-colorize-itself))) + ("[Rr][Gg][Bb]:[0-9a-fA-F]\\{1,4\\}/[0-9a-fA-F]\\{1,4\\}/[0-9a-fA-F]\\{1,4\\}" + (0 (rainbow-colorize-itself))) + ("[Rr][Gg][Bb][Ii]:[0-9.]+/[0-9.]+/[0-9.]+" + (0 (rainbow-colorize-itself))) + ("\\(?:[Cc][Ii][Ee]\\(?:[Xx][Yy][Zz]\\|[Uu][Vv][Yy]\\|[Xx][Yy][Yy]\\|[Ll][Aa][Bb]\\|[Ll][Uu][Vv]\\)\\|[Tt][Ee][Kk][Hh][Vv][Cc]\\):[+-]?[0-9.]+\\(?:[Ee][+-]?[0-9]+\\)?/[+-]?[0-9.]+\\(?:[Ee][+-]?[0-9]+\\)?/[+-]?[0-9.]+\\(?:[Ee][+-]?[0-9]+\\)?" + (0 (rainbow-colorize-itself)))) + "Font-lock keywords to add for hexadecimal colors.") + +;;; rgb() colors + +(defvar rainbow-html-rgb-colors-font-lock-keywords + '(("rgb(\s*\\([0-9]\\{1,3\\}\\(?:\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*)" + (0 (rainbow-colorize-rgb))) + ("rgba(\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)" + (0 (rainbow-colorize-rgb))) + ("hsl(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*)" + (0 (rainbow-colorize-hsl))) + ("hsla(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)" + (0 (rainbow-colorize-hsl)))) + "Font-lock keywords to add for RGB colors.") + +;;; HTML colors + +(defvar rainbow-html-colors-font-lock-keywords nil + "Font-lock keywords to add for HTML colors.") +(make-variable-buffer-local 'rainbow-html-colors-font-lock-keywords) + +(defcustom rainbow-html-colors-alist + '(("AliceBlue" . "#F0F8FF") + ("AntiqueWhite" . "#FAEBD7") + ("Aqua" . "#00FFFF") + ("Aquamarine" . "#7FFFD4") + ("Azure" . "#F0FFFF") + ("Beige" . "#F5F5DC") + ("Bisque" . "#FFE4C4") + ("Black" . "#000000") + ("BlanchedAlmond" . "#FFEBCD") + ("Blue" . "#0000FF") + ("BlueViolet" . "#8A2BE2") + ("Brown" . "#A52A2A") + ("BurlyWood" . "#DEB887") + ("CadetBlue" . "#5F9EA0") + ("Chartreuse" . "#7FFF00") + ("Chocolate" . "#D2691E") + ("Coral" . "#FF7F50") + ("CornflowerBlue" . "#6495ED") + ("Cornsilk" . "#FFF8DC") + ("Crimson" . "#DC143C") + ("Cyan" . "#00FFFF") + ("DarkBlue" . "#00008B") + ("DarkCyan" . "#008B8B") + ("DarkGoldenRod" . "#B8860B") + ("DarkGray" . "#A9A9A9") + ("DarkGrey" . "#A9A9A9") + ("DarkGreen" . "#006400") + ("DarkKhaki" . "#BDB76B") + ("DarkMagenta" . "#8B008B") + ("DarkOliveGreen" . "#556B2F") + ("Darkorange" . "#FF8C00") + ("DarkOrchid" . "#9932CC") + ("DarkRed" . "#8B0000") + ("DarkSalmon" . "#E9967A") + ("DarkSeaGreen" . "#8FBC8F") + ("DarkSlateBlue" . "#483D8B") + ("DarkSlateGray" . "#2F4F4F") + ("DarkSlateGrey" . "#2F4F4F") + ("DarkTurquoise" . "#00CED1") + ("DarkViolet" . "#9400D3") + ("DeepPink" . "#FF1493") + ("DeepSkyBlue" . "#00BFFF") + ("DimGray" . "#696969") + ("DimGrey" . "#696969") + ("DodgerBlue" . "#1E90FF") + ("FireBrick" . "#B22222") + ("FloralWhite" . "#FFFAF0") + ("ForestGreen" . "#228B22") + ("Fuchsia" . "#FF00FF") + ("Gainsboro" . "#DCDCDC") + ("GhostWhite" . "#F8F8FF") + ("Gold" . "#FFD700") + ("GoldenRod" . "#DAA520") + ("Gray" . "#808080") + ("Grey" . "#808080") + ("Green" . "#008000") + ("GreenYellow" . "#ADFF2F") + ("HoneyDew" . "#F0FFF0") + ("HotPink" . "#FF69B4") + ("IndianRed" . "#CD5C5C") + ("Indigo" . "#4B0082") + ("Ivory" . "#FFFFF0") + ("Khaki" . "#F0E68C") + ("Lavender" . "#E6E6FA") + ("LavenderBlush" . "#FFF0F5") + ("LawnGreen" . "#7CFC00") + ("LemonChiffon" . "#FFFACD") + ("LightBlue" . "#ADD8E6") + ("LightCoral" . "#F08080") + ("LightCyan" . "#E0FFFF") + ("LightGoldenRodYellow" . "#FAFAD2") + ("LightGray" . "#D3D3D3") + ("LightGrey" . "#D3D3D3") + ("LightGreen" . "#90EE90") + ("LightPink" . "#FFB6C1") + ("LightSalmon" . "#FFA07A") + ("LightSeaGreen" . "#20B2AA") + ("LightSkyBlue" . "#87CEFA") + ("LightSlateGray" . "#778899") + ("LightSlateGrey" . "#778899") + ("LightSteelBlue" . "#B0C4DE") + ("LightYellow" . "#FFFFE0") + ("Lime" . "#00FF00") + ("LimeGreen" . "#32CD32") + ("Linen" . "#FAF0E6") + ("Magenta" . "#FF00FF") + ("Maroon" . "#800000") + ("MediumAquaMarine" . "#66CDAA") + ("MediumBlue" . "#0000CD") + ("MediumOrchid" . "#BA55D3") + ("MediumPurple" . "#9370D8") + ("MediumSeaGreen" . "#3CB371") + ("MediumSlateBlue" . "#7B68EE") + ("MediumSpringGreen" . "#00FA9A") + ("MediumTurquoise" . "#48D1CC") + ("MediumVioletRed" . "#C71585") + ("MidnightBlue" . "#191970") + ("MintCream" . "#F5FFFA") + ("MistyRose" . "#FFE4E1") + ("Moccasin" . "#FFE4B5") + ("NavajoWhite" . "#FFDEAD") + ("Navy" . "#000080") + ("OldLace" . "#FDF5E6") + ("Olive" . "#808000") + ("OliveDrab" . "#6B8E23") + ("Orange" . "#FFA500") + ("OrangeRed" . "#FF4500") + ("Orchid" . "#DA70D6") + ("PaleGoldenRod" . "#EEE8AA") + ("PaleGreen" . "#98FB98") + ("PaleTurquoise" . "#AFEEEE") + ("PaleVioletRed" . "#D87093") + ("PapayaWhip" . "#FFEFD5") + ("PeachPuff" . "#FFDAB9") + ("Peru" . "#CD853F") + ("Pink" . "#FFC0CB") + ("Plum" . "#DDA0DD") + ("PowderBlue" . "#B0E0E6") + ("Purple" . "#800080") + ("Red" . "#FF0000") + ("RosyBrown" . "#BC8F8F") + ("RoyalBlue" . "#4169E1") + ("SaddleBrown" . "#8B4513") + ("Salmon" . "#FA8072") + ("SandyBrown" . "#F4A460") + ("SeaGreen" . "#2E8B57") + ("SeaShell" . "#FFF5EE") + ("Sienna" . "#A0522D") + ("Silver" . "#C0C0C0") + ("SkyBlue" . "#87CEEB") + ("SlateBlue" . "#6A5ACD") + ("SlateGray" . "#708090") + ("SlateGrey" . "#708090") + ("Snow" . "#FFFAFA") + ("SpringGreen" . "#00FF7F") + ("SteelBlue" . "#4682B4") + ("Tan" . "#D2B48C") + ("Teal" . "#008080") + ("Thistle" . "#D8BFD8") + ("Tomato" . "#FF6347") + ("Turquoise" . "#40E0D0") + ("Violet" . "#EE82EE") + ("Wheat" . "#F5DEB3") + ("White" . "#FFFFFF") + ("WhiteSmoke" . "#F5F5F5") + ("Yellow" . "#FFFF00") + ("YellowGreen" . "#9ACD32")) + "Alist of HTML colors. +Each entry should have the form (COLOR-NAME . HEXADECIMAL-COLOR)." + :type 'alist + :group 'rainbow) + +(defcustom rainbow-html-colors-major-mode-list + '(html-mode css-mode php-mode nxml-mode xml-mode) + "List of major mode where HTML colors are enabled when +`rainbow-html-colors' is set to auto." + :type '(repeat (symbol :tag "Major-Mode")) + :group 'rainbow) + +(defcustom rainbow-html-colors 'auto + "When to enable HTML colors. +If set to t, the HTML colors will be enabled. If set to nil, the +HTML colors will not be enabled. If set to auto, the HTML colors +will be enabled if a major mode has been detected from the +`rainbow-html-colors-major-mode-list'." + :type '(choice (symbol :tag "enable in certain modes" auto) + (symbol :tag "enable globally" t) + (symbol :tag "disable" nil)) + :group 'rainbow) + +;;; X colors + +(defvar rainbow-x-colors-font-lock-keywords + `((,(regexp-opt (x-defined-colors) 'words) + (0 (rainbow-colorize-itself)))) + "Font-lock keywords to add for X colors.") + +(defcustom rainbow-x-colors-major-mode-list + '(emacs-lisp-mode lisp-interaction-mode c-mode c++-mode java-mode) + "List of major mode where X colors are enabled when +`rainbow-x-colors' is set to auto." + :type '(repeat (symbol :tag "Major-Mode")) + :group 'rainbow) + +(defcustom rainbow-x-colors 'auto + "When to enable X colors. +If set to t, the X colors will be enabled. If set to nil, the +X colors will not be enabled. If set to auto, the X colors +will be enabled if a major mode has been detected from the +`rainbow-x-colors-major-mode-list'." + :type '(choice (symbol :tag "enable in certain modes" auto) + (symbol :tag "enable globally" t) + (symbol :tag "disable" nil)) + :group 'rainbow) + +;;; LaTeX colors + +(defvar rainbow-latex-rgb-colors-font-lock-keywords + '(("{rgb}{\\([0-9.]+\\),\s*\\([0-9.]+\\),\s*\\([0-9.]+\\)}" + (0 (rainbow-colorize-rgb-float))) + ("{RGB}{\\([0-9]\\{1,3\\}\\),\s*\\([0-9]\\{1,3\\}\\),\s*\\([0-9]\\{1,3\\}\\)}" + (0 (rainbow-colorize-rgb))) + ("{HTML}{\\([0-9A-Fa-f]\\{6\\}\\)}" + (0 (rainbow-colorize-hexadecimal-without-sharp)))) + "Font-lock keywords to add for LaTeX colors.") + +(defcustom rainbow-latex-colors-major-mode-list + '(latex-mode) + "List of major mode where LaTeX colors are enabled when +`rainbow-x-colors' is set to auto." + :type '(repeat (symbol :tag "Major-Mode")) + :group 'rainbow) + +(defcustom rainbow-latex-colors 'auto + "When to enable LaTeX colors. +If set to t, the LaTeX colors will be enabled. If set to nil, the +LaTeX colors will not be enabled. If set to auto, the LaTeX colors +will be enabled if a major mode has been detected from the +`rainbow-latex-colors-major-mode-list'." + :type '(choice (symbol :tag "enable in certain modes" auto) + (symbol :tag "enable globally" t) + (symbol :tag "disable" nil)) + :group 'rainbow) + +;;; Shell colors + +(defvar rainbow-ansi-colors-font-lock-keywords + '(("\\(\\\\[eE]\\|\\\\033\\|\\\\x1[bB]\\|\033\\)\\[\\([0-9;]*m\\)" + (0 (rainbow-colorize-ansi)))) + "Font-lock keywords to add for ANSI colors.") + +(defcustom rainbow-ansi-colors-major-mode-list + '(sh-mode c-mode c++-mode) + "List of major mode where ANSI colors are enabled when +`rainbow-ansi-colors' is set to auto." + :type '(repeat (symbol :tag "Major-Mode")) + :group 'rainbow) + +(defcustom rainbow-ansi-colors 'auto + "When to enable ANSI colors. +If set to t, the ANSI colors will be enabled. If set to nil, the +ANSI colors will not be enabled. If set to auto, the ANSI colors +will be enabled if a major mode has been detected from the +`rainbow-ansi-colors-major-mode-list'." + :type '(choice (symbol :tag "enable in certain modes" auto) + (symbol :tag "enable globally" t) + (symbol :tag "disable" nil)) + :group 'rainbow) + +;;; R colors + +(defvar rainbow-r-colors-font-lock-keywords nil + "Font-lock keywords to add for R colors.") +(make-variable-buffer-local 'rainbow-r-colors-font-lock-keywords) + +;; use the following code to generate the list in R +;; output_colors <- function(colors) {for(color in colors) {col <- col2rgb(color); cat(sprintf("(\"%s\" . \"#%02X%02X%02X\")\n",color,col[1],col[2],col[3]));}} +;; output_colors(colors()) +(defcustom rainbow-r-colors-alist + '(("white" . "#FFFFFF") + ("aliceblue" . "#F0F8FF") + ("antiquewhite" . "#FAEBD7") + ("antiquewhite1" . "#FFEFDB") + ("antiquewhite2" . "#EEDFCC") + ("antiquewhite3" . "#CDC0B0") + ("antiquewhite4" . "#8B8378") + ("aquamarine" . "#7FFFD4") + ("aquamarine1" . "#7FFFD4") + ("aquamarine2" . "#76EEC6") + ("aquamarine3" . "#66CDAA") + ("aquamarine4" . "#458B74") + ("azure" . "#F0FFFF") + ("azure1" . "#F0FFFF") + ("azure2" . "#E0EEEE") + ("azure3" . "#C1CDCD") + ("azure4" . "#838B8B") + ("beige" . "#F5F5DC") + ("bisque" . "#FFE4C4") + ("bisque1" . "#FFE4C4") + ("bisque2" . "#EED5B7") + ("bisque3" . "#CDB79E") + ("bisque4" . "#8B7D6B") + ("black" . "#000000") + ("blanchedalmond" . "#FFEBCD") + ("blue" . "#0000FF") + ("blue1" . "#0000FF") + ("blue2" . "#0000EE") + ("blue3" . "#0000CD") + ("blue4" . "#00008B") + ("blueviolet" . "#8A2BE2") + ("brown" . "#A52A2A") + ("brown1" . "#FF4040") + ("brown2" . "#EE3B3B") + ("brown3" . "#CD3333") + ("brown4" . "#8B2323") + ("burlywood" . "#DEB887") + ("burlywood1" . "#FFD39B") + ("burlywood2" . "#EEC591") + ("burlywood3" . "#CDAA7D") + ("burlywood4" . "#8B7355") + ("cadetblue" . "#5F9EA0") + ("cadetblue1" . "#98F5FF") + ("cadetblue2" . "#8EE5EE") + ("cadetblue3" . "#7AC5CD") + ("cadetblue4" . "#53868B") + ("chartreuse" . "#7FFF00") + ("chartreuse1" . "#7FFF00") + ("chartreuse2" . "#76EE00") + ("chartreuse3" . "#66CD00") + ("chartreuse4" . "#458B00") + ("chocolate" . "#D2691E") + ("chocolate1" . "#FF7F24") + ("chocolate2" . "#EE7621") + ("chocolate3" . "#CD661D") + ("chocolate4" . "#8B4513") + ("coral" . "#FF7F50") + ("coral1" . "#FF7256") + ("coral2" . "#EE6A50") + ("coral3" . "#CD5B45") + ("coral4" . "#8B3E2F") + ("cornflowerblue" . "#6495ED") + ("cornsilk" . "#FFF8DC") + ("cornsilk1" . "#FFF8DC") + ("cornsilk2" . "#EEE8CD") + ("cornsilk3" . "#CDC8B1") + ("cornsilk4" . "#8B8878") + ("cyan" . "#00FFFF") + ("cyan1" . "#00FFFF") + ("cyan2" . "#00EEEE") + ("cyan3" . "#00CDCD") + ("cyan4" . "#008B8B") + ("darkblue" . "#00008B") + ("darkcyan" . "#008B8B") + ("darkgoldenrod" . "#B8860B") + ("darkgoldenrod1" . "#FFB90F") + ("darkgoldenrod2" . "#EEAD0E") + ("darkgoldenrod3" . "#CD950C") + ("darkgoldenrod4" . "#8B6508") + ("darkgray" . "#A9A9A9") + ("darkgreen" . "#006400") + ("darkgrey" . "#A9A9A9") + ("darkkhaki" . "#BDB76B") + ("darkmagenta" . "#8B008B") + ("darkolivegreen" . "#556B2F") + ("darkolivegreen1" . "#CAFF70") + ("darkolivegreen2" . "#BCEE68") + ("darkolivegreen3" . "#A2CD5A") + ("darkolivegreen4" . "#6E8B3D") + ("darkorange" . "#FF8C00") + ("darkorange1" . "#FF7F00") + ("darkorange2" . "#EE7600") + ("darkorange3" . "#CD6600") + ("darkorange4" . "#8B4500") + ("darkorchid" . "#9932CC") + ("darkorchid1" . "#BF3EFF") + ("darkorchid2" . "#B23AEE") + ("darkorchid3" . "#9A32CD") + ("darkorchid4" . "#68228B") + ("darkred" . "#8B0000") + ("darksalmon" . "#E9967A") + ("darkseagreen" . "#8FBC8F") + ("darkseagreen1" . "#C1FFC1") + ("darkseagreen2" . "#B4EEB4") + ("darkseagreen3" . "#9BCD9B") + ("darkseagreen4" . "#698B69") + ("darkslateblue" . "#483D8B") + ("darkslategray" . "#2F4F4F") + ("darkslategray1" . "#97FFFF") + ("darkslategray2" . "#8DEEEE") + ("darkslategray3" . "#79CDCD") + ("darkslategray4" . "#528B8B") + ("darkslategrey" . "#2F4F4F") + ("darkturquoise" . "#00CED1") + ("darkviolet" . "#9400D3") + ("deeppink" . "#FF1493") + ("deeppink1" . "#FF1493") + ("deeppink2" . "#EE1289") + ("deeppink3" . "#CD1076") + ("deeppink4" . "#8B0A50") + ("deepskyblue" . "#00BFFF") + ("deepskyblue1" . "#00BFFF") + ("deepskyblue2" . "#00B2EE") + ("deepskyblue3" . "#009ACD") + ("deepskyblue4" . "#00688B") + ("dimgray" . "#696969") + ("dimgrey" . "#696969") + ("dodgerblue" . "#1E90FF") + ("dodgerblue1" . "#1E90FF") + ("dodgerblue2" . "#1C86EE") + ("dodgerblue3" . "#1874CD") + ("dodgerblue4" . "#104E8B") + ("firebrick" . "#B22222") + ("firebrick1" . "#FF3030") + ("firebrick2" . "#EE2C2C") + ("firebrick3" . "#CD2626") + ("firebrick4" . "#8B1A1A") + ("floralwhite" . "#FFFAF0") + ("forestgreen" . "#228B22") + ("gainsboro" . "#DCDCDC") + ("ghostwhite" . "#F8F8FF") + ("gold" . "#FFD700") + ("gold1" . "#FFD700") + ("gold2" . "#EEC900") + ("gold3" . "#CDAD00") + ("gold4" . "#8B7500") + ("goldenrod" . "#DAA520") + ("goldenrod1" . "#FFC125") + ("goldenrod2" . "#EEB422") + ("goldenrod3" . "#CD9B1D") + ("goldenrod4" . "#8B6914") + ("gray" . "#BEBEBE") + ("gray0" . "#000000") + ("gray1" . "#030303") + ("gray2" . "#050505") + ("gray3" . "#080808") + ("gray4" . "#0A0A0A") + ("gray5" . "#0D0D0D") + ("gray6" . "#0F0F0F") + ("gray7" . "#121212") + ("gray8" . "#141414") + ("gray9" . "#171717") + ("gray10" . "#1A1A1A") + ("gray11" . "#1C1C1C") + ("gray12" . "#1F1F1F") + ("gray13" . "#212121") + ("gray14" . "#242424") + ("gray15" . "#262626") + ("gray16" . "#292929") + ("gray17" . "#2B2B2B") + ("gray18" . "#2E2E2E") + ("gray19" . "#303030") + ("gray20" . "#333333") + ("gray21" . "#363636") + ("gray22" . "#383838") + ("gray23" . "#3B3B3B") + ("gray24" . "#3D3D3D") + ("gray25" . "#404040") + ("gray26" . "#424242") + ("gray27" . "#454545") + ("gray28" . "#474747") + ("gray29" . "#4A4A4A") + ("gray30" . "#4D4D4D") + ("gray31" . "#4F4F4F") + ("gray32" . "#525252") + ("gray33" . "#545454") + ("gray34" . "#575757") + ("gray35" . "#595959") + ("gray36" . "#5C5C5C") + ("gray37" . "#5E5E5E") + ("gray38" . "#616161") + ("gray39" . "#636363") + ("gray40" . "#666666") + ("gray41" . "#696969") + ("gray42" . "#6B6B6B") + ("gray43" . "#6E6E6E") + ("gray44" . "#707070") + ("gray45" . "#737373") + ("gray46" . "#757575") + ("gray47" . "#787878") + ("gray48" . "#7A7A7A") + ("gray49" . "#7D7D7D") + ("gray50" . "#7F7F7F") + ("gray51" . "#828282") + ("gray52" . "#858585") + ("gray53" . "#878787") + ("gray54" . "#8A8A8A") + ("gray55" . "#8C8C8C") + ("gray56" . "#8F8F8F") + ("gray57" . "#919191") + ("gray58" . "#949494") + ("gray59" . "#969696") + ("gray60" . "#999999") + ("gray61" . "#9C9C9C") + ("gray62" . "#9E9E9E") + ("gray63" . "#A1A1A1") + ("gray64" . "#A3A3A3") + ("gray65" . "#A6A6A6") + ("gray66" . "#A8A8A8") + ("gray67" . "#ABABAB") + ("gray68" . "#ADADAD") + ("gray69" . "#B0B0B0") + ("gray70" . "#B3B3B3") + ("gray71" . "#B5B5B5") + ("gray72" . "#B8B8B8") + ("gray73" . "#BABABA") + ("gray74" . "#BDBDBD") + ("gray75" . "#BFBFBF") + ("gray76" . "#C2C2C2") + ("gray77" . "#C4C4C4") + ("gray78" . "#C7C7C7") + ("gray79" . "#C9C9C9") + ("gray80" . "#CCCCCC") + ("gray81" . "#CFCFCF") + ("gray82" . "#D1D1D1") + ("gray83" . "#D4D4D4") + ("gray84" . "#D6D6D6") + ("gray85" . "#D9D9D9") + ("gray86" . "#DBDBDB") + ("gray87" . "#DEDEDE") + ("gray88" . "#E0E0E0") + ("gray89" . "#E3E3E3") + ("gray90" . "#E5E5E5") + ("gray91" . "#E8E8E8") + ("gray92" . "#EBEBEB") + ("gray93" . "#EDEDED") + ("gray94" . "#F0F0F0") + ("gray95" . "#F2F2F2") + ("gray96" . "#F5F5F5") + ("gray97" . "#F7F7F7") + ("gray98" . "#FAFAFA") + ("gray99" . "#FCFCFC") + ("gray100" . "#FFFFFF") + ("green" . "#00FF00") + ("green1" . "#00FF00") + ("green2" . "#00EE00") + ("green3" . "#00CD00") + ("green4" . "#008B00") + ("greenyellow" . "#ADFF2F") + ("grey" . "#BEBEBE") + ("grey0" . "#000000") + ("grey1" . "#030303") + ("grey2" . "#050505") + ("grey3" . "#080808") + ("grey4" . "#0A0A0A") + ("grey5" . "#0D0D0D") + ("grey6" . "#0F0F0F") + ("grey7" . "#121212") + ("grey8" . "#141414") + ("grey9" . "#171717") + ("grey10" . "#1A1A1A") + ("grey11" . "#1C1C1C") + ("grey12" . "#1F1F1F") + ("grey13" . "#212121") + ("grey14" . "#242424") + ("grey15" . "#262626") + ("grey16" . "#292929") + ("grey17" . "#2B2B2B") + ("grey18" . "#2E2E2E") + ("grey19" . "#303030") + ("grey20" . "#333333") + ("grey21" . "#363636") + ("grey22" . "#383838") + ("grey23" . "#3B3B3B") + ("grey24" . "#3D3D3D") + ("grey25" . "#404040") + ("grey26" . "#424242") + ("grey27" . "#454545") + ("grey28" . "#474747") + ("grey29" . "#4A4A4A") + ("grey30" . "#4D4D4D") + ("grey31" . "#4F4F4F") + ("grey32" . "#525252") + ("grey33" . "#545454") + ("grey34" . "#575757") + ("grey35" . "#595959") + ("grey36" . "#5C5C5C") + ("grey37" . "#5E5E5E") + ("grey38" . "#616161") + ("grey39" . "#636363") + ("grey40" . "#666666") + ("grey41" . "#696969") + ("grey42" . "#6B6B6B") + ("grey43" . "#6E6E6E") + ("grey44" . "#707070") + ("grey45" . "#737373") + ("grey46" . "#757575") + ("grey47" . "#787878") + ("grey48" . "#7A7A7A") + ("grey49" . "#7D7D7D") + ("grey50" . "#7F7F7F") + ("grey51" . "#828282") + ("grey52" . "#858585") + ("grey53" . "#878787") + ("grey54" . "#8A8A8A") + ("grey55" . "#8C8C8C") + ("grey56" . "#8F8F8F") + ("grey57" . "#919191") + ("grey58" . "#949494") + ("grey59" . "#969696") + ("grey60" . "#999999") + ("grey61" . "#9C9C9C") + ("grey62" . "#9E9E9E") + ("grey63" . "#A1A1A1") + ("grey64" . "#A3A3A3") + ("grey65" . "#A6A6A6") + ("grey66" . "#A8A8A8") + ("grey67" . "#ABABAB") + ("grey68" . "#ADADAD") + ("grey69" . "#B0B0B0") + ("grey70" . "#B3B3B3") + ("grey71" . "#B5B5B5") + ("grey72" . "#B8B8B8") + ("grey73" . "#BABABA") + ("grey74" . "#BDBDBD") + ("grey75" . "#BFBFBF") + ("grey76" . "#C2C2C2") + ("grey77" . "#C4C4C4") + ("grey78" . "#C7C7C7") + ("grey79" . "#C9C9C9") + ("grey80" . "#CCCCCC") + ("grey81" . "#CFCFCF") + ("grey82" . "#D1D1D1") + ("grey83" . "#D4D4D4") + ("grey84" . "#D6D6D6") + ("grey85" . "#D9D9D9") + ("grey86" . "#DBDBDB") + ("grey87" . "#DEDEDE") + ("grey88" . "#E0E0E0") + ("grey89" . "#E3E3E3") + ("grey90" . "#E5E5E5") + ("grey91" . "#E8E8E8") + ("grey92" . "#EBEBEB") + ("grey93" . "#EDEDED") + ("grey94" . "#F0F0F0") + ("grey95" . "#F2F2F2") + ("grey96" . "#F5F5F5") + ("grey97" . "#F7F7F7") + ("grey98" . "#FAFAFA") + ("grey99" . "#FCFCFC") + ("grey100" . "#FFFFFF") + ("honeydew" . "#F0FFF0") + ("honeydew1" . "#F0FFF0") + ("honeydew2" . "#E0EEE0") + ("honeydew3" . "#C1CDC1") + ("honeydew4" . "#838B83") + ("hotpink" . "#FF69B4") + ("hotpink1" . "#FF6EB4") + ("hotpink2" . "#EE6AA7") + ("hotpink3" . "#CD6090") + ("hotpink4" . "#8B3A62") + ("indianred" . "#CD5C5C") + ("indianred1" . "#FF6A6A") + ("indianred2" . "#EE6363") + ("indianred3" . "#CD5555") + ("indianred4" . "#8B3A3A") + ("ivory" . "#FFFFF0") + ("ivory1" . "#FFFFF0") + ("ivory2" . "#EEEEE0") + ("ivory3" . "#CDCDC1") + ("ivory4" . "#8B8B83") + ("khaki" . "#F0E68C") + ("khaki1" . "#FFF68F") + ("khaki2" . "#EEE685") + ("khaki3" . "#CDC673") + ("khaki4" . "#8B864E") + ("lavender" . "#E6E6FA") + ("lavenderblush" . "#FFF0F5") + ("lavenderblush1" . "#FFF0F5") + ("lavenderblush2" . "#EEE0E5") + ("lavenderblush3" . "#CDC1C5") + ("lavenderblush4" . "#8B8386") + ("lawngreen" . "#7CFC00") + ("lemonchiffon" . "#FFFACD") + ("lemonchiffon1" . "#FFFACD") + ("lemonchiffon2" . "#EEE9BF") + ("lemonchiffon3" . "#CDC9A5") + ("lemonchiffon4" . "#8B8970") + ("lightblue" . "#ADD8E6") + ("lightblue1" . "#BFEFFF") + ("lightblue2" . "#B2DFEE") + ("lightblue3" . "#9AC0CD") + ("lightblue4" . "#68838B") + ("lightcoral" . "#F08080") + ("lightcyan" . "#E0FFFF") + ("lightcyan1" . "#E0FFFF") + ("lightcyan2" . "#D1EEEE") + ("lightcyan3" . "#B4CDCD") + ("lightcyan4" . "#7A8B8B") + ("lightgoldenrod" . "#EEDD82") + ("lightgoldenrod1" . "#FFEC8B") + ("lightgoldenrod2" . "#EEDC82") + ("lightgoldenrod3" . "#CDBE70") + ("lightgoldenrod4" . "#8B814C") + ("lightgoldenrodyellow" . "#FAFAD2") + ("lightgray" . "#D3D3D3") + ("lightgreen" . "#90EE90") + ("lightgrey" . "#D3D3D3") + ("lightpink" . "#FFB6C1") + ("lightpink1" . "#FFAEB9") + ("lightpink2" . "#EEA2AD") + ("lightpink3" . "#CD8C95") + ("lightpink4" . "#8B5F65") + ("lightsalmon" . "#FFA07A") + ("lightsalmon1" . "#FFA07A") + ("lightsalmon2" . "#EE9572") + ("lightsalmon3" . "#CD8162") + ("lightsalmon4" . "#8B5742") + ("lightseagreen" . "#20B2AA") + ("lightskyblue" . "#87CEFA") + ("lightskyblue1" . "#B0E2FF") + ("lightskyblue2" . "#A4D3EE") + ("lightskyblue3" . "#8DB6CD") + ("lightskyblue4" . "#607B8B") + ("lightslateblue" . "#8470FF") + ("lightslategray" . "#778899") + ("lightslategrey" . "#778899") + ("lightsteelblue" . "#B0C4DE") + ("lightsteelblue1" . "#CAE1FF") + ("lightsteelblue2" . "#BCD2EE") + ("lightsteelblue3" . "#A2B5CD") + ("lightsteelblue4" . "#6E7B8B") + ("lightyellow" . "#FFFFE0") + ("lightyellow1" . "#FFFFE0") + ("lightyellow2" . "#EEEED1") + ("lightyellow3" . "#CDCDB4") + ("lightyellow4" . "#8B8B7A") + ("limegreen" . "#32CD32") + ("linen" . "#FAF0E6") + ("magenta" . "#FF00FF") + ("magenta1" . "#FF00FF") + ("magenta2" . "#EE00EE") + ("magenta3" . "#CD00CD") + ("magenta4" . "#8B008B") + ("maroon" . "#B03060") + ("maroon1" . "#FF34B3") + ("maroon2" . "#EE30A7") + ("maroon3" . "#CD2990") + ("maroon4" . "#8B1C62") + ("mediumaquamarine" . "#66CDAA") + ("mediumblue" . "#0000CD") + ("mediumorchid" . "#BA55D3") + ("mediumorchid1" . "#E066FF") + ("mediumorchid2" . "#D15FEE") + ("mediumorchid3" . "#B452CD") + ("mediumorchid4" . "#7A378B") + ("mediumpurple" . "#9370DB") + ("mediumpurple1" . "#AB82FF") + ("mediumpurple2" . "#9F79EE") + ("mediumpurple3" . "#8968CD") + ("mediumpurple4" . "#5D478B") + ("mediumseagreen" . "#3CB371") + ("mediumslateblue" . "#7B68EE") + ("mediumspringgreen" . "#00FA9A") + ("mediumturquoise" . "#48D1CC") + ("mediumvioletred" . "#C71585") + ("midnightblue" . "#191970") + ("mintcream" . "#F5FFFA") + ("mistyrose" . "#FFE4E1") + ("mistyrose1" . "#FFE4E1") + ("mistyrose2" . "#EED5D2") + ("mistyrose3" . "#CDB7B5") + ("mistyrose4" . "#8B7D7B") + ("moccasin" . "#FFE4B5") + ("navajowhite" . "#FFDEAD") + ("navajowhite1" . "#FFDEAD") + ("navajowhite2" . "#EECFA1") + ("navajowhite3" . "#CDB38B") + ("navajowhite4" . "#8B795E") + ("navy" . "#000080") + ("navyblue" . "#000080") + ("oldlace" . "#FDF5E6") + ("olivedrab" . "#6B8E23") + ("olivedrab1" . "#C0FF3E") + ("olivedrab2" . "#B3EE3A") + ("olivedrab3" . "#9ACD32") + ("olivedrab4" . "#698B22") + ("orange" . "#FFA500") + ("orange1" . "#FFA500") + ("orange2" . "#EE9A00") + ("orange3" . "#CD8500") + ("orange4" . "#8B5A00") + ("orangered" . "#FF4500") + ("orangered1" . "#FF4500") + ("orangered2" . "#EE4000") + ("orangered3" . "#CD3700") + ("orangered4" . "#8B2500") + ("orchid" . "#DA70D6") + ("orchid1" . "#FF83FA") + ("orchid2" . "#EE7AE9") + ("orchid3" . "#CD69C9") + ("orchid4" . "#8B4789") + ("palegoldenrod" . "#EEE8AA") + ("palegreen" . "#98FB98") + ("palegreen1" . "#9AFF9A") + ("palegreen2" . "#90EE90") + ("palegreen3" . "#7CCD7C") + ("palegreen4" . "#548B54") + ("paleturquoise" . "#AFEEEE") + ("paleturquoise1" . "#BBFFFF") + ("paleturquoise2" . "#AEEEEE") + ("paleturquoise3" . "#96CDCD") + ("paleturquoise4" . "#668B8B") + ("palevioletred" . "#DB7093") + ("palevioletred1" . "#FF82AB") + ("palevioletred2" . "#EE799F") + ("palevioletred3" . "#CD6889") + ("palevioletred4" . "#8B475D") + ("papayawhip" . "#FFEFD5") + ("peachpuff" . "#FFDAB9") + ("peachpuff1" . "#FFDAB9") + ("peachpuff2" . "#EECBAD") + ("peachpuff3" . "#CDAF95") + ("peachpuff4" . "#8B7765") + ("peru" . "#CD853F") + ("pink" . "#FFC0CB") + ("pink1" . "#FFB5C5") + ("pink2" . "#EEA9B8") + ("pink3" . "#CD919E") + ("pink4" . "#8B636C") + ("plum" . "#DDA0DD") + ("plum1" . "#FFBBFF") + ("plum2" . "#EEAEEE") + ("plum3" . "#CD96CD") + ("plum4" . "#8B668B") + ("powderblue" . "#B0E0E6") + ("purple" . "#A020F0") + ("purple1" . "#9B30FF") + ("purple2" . "#912CEE") + ("purple3" . "#7D26CD") + ("purple4" . "#551A8B") + ("red" . "#FF0000") + ("red1" . "#FF0000") + ("red2" . "#EE0000") + ("red3" . "#CD0000") + ("red4" . "#8B0000") + ("rosybrown" . "#BC8F8F") + ("rosybrown1" . "#FFC1C1") + ("rosybrown2" . "#EEB4B4") + ("rosybrown3" . "#CD9B9B") + ("rosybrown4" . "#8B6969") + ("royalblue" . "#4169E1") + ("royalblue1" . "#4876FF") + ("royalblue2" . "#436EEE") + ("royalblue3" . "#3A5FCD") + ("royalblue4" . "#27408B") + ("saddlebrown" . "#8B4513") + ("salmon" . "#FA8072") + ("salmon1" . "#FF8C69") + ("salmon2" . "#EE8262") + ("salmon3" . "#CD7054") + ("salmon4" . "#8B4C39") + ("sandybrown" . "#F4A460") + ("seagreen" . "#2E8B57") + ("seagreen1" . "#54FF9F") + ("seagreen2" . "#4EEE94") + ("seagreen3" . "#43CD80") + ("seagreen4" . "#2E8B57") + ("seashell" . "#FFF5EE") + ("seashell1" . "#FFF5EE") + ("seashell2" . "#EEE5DE") + ("seashell3" . "#CDC5BF") + ("seashell4" . "#8B8682") + ("sienna" . "#A0522D") + ("sienna1" . "#FF8247") + ("sienna2" . "#EE7942") + ("sienna3" . "#CD6839") + ("sienna4" . "#8B4726") + ("skyblue" . "#87CEEB") + ("skyblue1" . "#87CEFF") + ("skyblue2" . "#7EC0EE") + ("skyblue3" . "#6CA6CD") + ("skyblue4" . "#4A708B") + ("slateblue" . "#6A5ACD") + ("slateblue1" . "#836FFF") + ("slateblue2" . "#7A67EE") + ("slateblue3" . "#6959CD") + ("slateblue4" . "#473C8B") + ("slategray" . "#708090") + ("slategray1" . "#C6E2FF") + ("slategray2" . "#B9D3EE") + ("slategray3" . "#9FB6CD") + ("slategray4" . "#6C7B8B") + ("slategrey" . "#708090") + ("snow" . "#FFFAFA") + ("snow1" . "#FFFAFA") + ("snow2" . "#EEE9E9") + ("snow3" . "#CDC9C9") + ("snow4" . "#8B8989") + ("springgreen" . "#00FF7F") + ("springgreen1" . "#00FF7F") + ("springgreen2" . "#00EE76") + ("springgreen3" . "#00CD66") + ("springgreen4" . "#008B45") + ("steelblue" . "#4682B4") + ("steelblue1" . "#63B8FF") + ("steelblue2" . "#5CACEE") + ("steelblue3" . "#4F94CD") + ("steelblue4" . "#36648B") + ("tan" . "#D2B48C") + ("tan1" . "#FFA54F") + ("tan2" . "#EE9A49") + ("tan3" . "#CD853F") + ("tan4" . "#8B5A2B") + ("thistle" . "#D8BFD8") + ("thistle1" . "#FFE1FF") + ("thistle2" . "#EED2EE") + ("thistle3" . "#CDB5CD") + ("thistle4" . "#8B7B8B") + ("tomato" . "#FF6347") + ("tomato1" . "#FF6347") + ("tomato2" . "#EE5C42") + ("tomato3" . "#CD4F39") + ("tomato4" . "#8B3626") + ("turquoise" . "#40E0D0") + ("turquoise1" . "#00F5FF") + ("turquoise2" . "#00E5EE") + ("turquoise3" . "#00C5CD") + ("turquoise4" . "#00868B") + ("violet" . "#EE82EE") + ("violetred" . "#D02090") + ("violetred1" . "#FF3E96") + ("violetred2" . "#EE3A8C") + ("violetred3" . "#CD3278") + ("violetred4" . "#8B2252") + ("wheat" . "#F5DEB3") + ("wheat1" . "#FFE7BA") + ("wheat2" . "#EED8AE") + ("wheat3" . "#CDBA96") + ("wheat4" . "#8B7E66") + ("whitesmoke" . "#F5F5F5") + ("yellow" . "#FFFF00") + ("yellow1" . "#FFFF00") + ("yellow2" . "#EEEE00") + ("yellow3" . "#CDCD00") + ("yellow4" . "#8B8B00") + ("yellowgreen" . "#9ACD32")) + "Alist of R colors. +Each entry should have the form (COLOR-NAME . HEXADECIMAL-COLOR)." + :type 'alist + :group 'rainbow) + +(defcustom rainbow-r-colors-major-mode-list + '(ess-mode) + "List of major mode where R colors are enabled when +`rainbow-r-colors' is set to auto." + :type '(repeat (symbol :tag "Major-Mode")) + :group 'rainbow) + +(defcustom rainbow-r-colors 'auto + "When to enable R colors. +If set to t, the R colors will be enabled. If set to nil, the +R colors will not be enabled. If set to auto, the R colors +will be enabled if a major mode has been detected from the +`rainbow-r-colors-major-mode-list'." + :type '(choice (symbol :tag "enable in certain modes" auto) + (symbol :tag "enable globally" t) + (symbol :tag "disable" nil)) + :group 'rainbow) + +;;; Functions + +(defun rainbow-colorize-match (color &optional match) + "Return a matched string propertized with a face whose +background is COLOR. The foreground is computed using +`rainbow-color-luminance', and is either white or black." + (let ((match (or match 0))) + (put-text-property + (match-beginning match) (match-end match) + 'face `((:foreground ,(if (> 0.5 (rainbow-x-color-luminance color)) + "white" "black")) + (:background ,color))))) + +(defun rainbow-colorize-itself (&optional match) + "Colorize a match with itself." + (rainbow-colorize-match (match-string-no-properties (or match 0)) match)) + +(defun rainbow-colorize-hexadecimal-without-sharp () + "Colorize an hexadecimal colors and prepend # to it." + (rainbow-colorize-match (concat "#" (match-string-no-properties 1)))) + +(defun rainbow-colorize-by-assoc (assoc-list) + "Colorize a match with its association from ASSOC-LIST." + (rainbow-colorize-match (cdr (assoc-string (match-string-no-properties 0) + assoc-list t)))) + +(defun rainbow-rgb-relative-to-absolute (number) + "Convert a relative NUMBER to absolute. If NUMBER is absolute, return NUMBER. +This will convert \"80 %\" to 204, \"100 %\" to 255 but \"123\" to \"123\". +If the percentage value is above 100, it's converted to 100." + (let ((string-length (- (length number) 1))) + ;; Is this a number with %? + (if (eq (elt number string-length) ?%) + (/ (* (min (string-to-number (substring number 0 string-length)) 100) 255) 100) + (string-to-number number)))) + +(defun rainbow-colorize-hsl () + "Colorize a match with itself." + (let ((h (/ (string-to-number (match-string-no-properties 1)) 360.0)) + (s (/ (string-to-number (match-string-no-properties 2)) 100.0)) + (l (/ (string-to-number (match-string-no-properties 3)) 100.0))) + (rainbow-colorize-match + (multiple-value-bind (r g b) + (color-hsl-to-rgb h s l) + (format "#%02X%02X%02X" (* r 255) (* g 255) (* b 255)))))) + +(defun rainbow-colorize-rgb () + "Colorize a match with itself." + (let ((r (rainbow-rgb-relative-to-absolute (match-string-no-properties 1))) + (g (rainbow-rgb-relative-to-absolute (match-string-no-properties 2))) + (b (rainbow-rgb-relative-to-absolute (match-string-no-properties 3)))) + (rainbow-colorize-match (format "#%02X%02X%02X" r g b)))) + +(defun rainbow-colorize-rgb-float () + "Colorize a match with itself, with relative value." + (let ((r (* (string-to-number (match-string-no-properties 1)) 255.0)) + (g (* (string-to-number (match-string-no-properties 2)) 255.0)) + (b (* (string-to-number (match-string-no-properties 3)) 255.0))) + (rainbow-colorize-match (format "#%02X%02X%02X" r g b)))) + +(defvar ansi-color-context) +(defvar xterm-color-current) + +(defun rainbow-colorize-ansi () + "Return a matched string propertized with ansi color face." + (let ((xterm-color? (featurep 'xterm-color)) + (string (match-string-no-properties 0)) + color) + (save-match-data + (let* ((replaced (concat + (replace-regexp-in-string + "^\\(\\\\[eE]\\|\\\\033\\|\\\\x1[bB]\\)" + "\033" string) "x")) + xterm-color-current + ansi-color-context + (applied (funcall (if xterm-color? + 'xterm-color-filter + 'ansi-color-apply) + replaced)) + (face-property (get-text-property + 0 + (if xterm-color? 'face 'font-lock-face) + applied))) + (unless (listp (or (car-safe face-property) face-property)) + (setq face-property (list face-property))) + (setq color (funcall (if xterm-color? 'cadr 'cdr) + (or (assq (if xterm-color? + :foreground + 'foreground-color) + face-property) + (assq (if xterm-color? + :background + 'background-color) + face-property)))))) + (when color + (rainbow-colorize-match color)))) + +(defun rainbow-color-luminance (red green blue) + "Calculate the luminance of color composed of RED, GREEN and BLUE. +Return a value between 0 and 1." + (/ (+ (* .2126 red) (* .7152 green) (* .0722 blue)) 256)) + +(defun rainbow-x-color-luminance (color) + "Calculate the luminance of a color string (e.g. \"#ffaa00\", \"blue\"). +Return a value between 0 and 1." + (let* ((values (x-color-values color)) + (r (/ (car values) 256.0)) + (g (/ (cadr values) 256.0)) + (b (/ (caddr values) 256.0))) + (rainbow-color-luminance r g b))) + +;;; Mode + +(defun rainbow-turn-on () + "Turn on raibow-mode." + (font-lock-add-keywords nil + rainbow-hexadecimal-colors-font-lock-keywords + t) + ;; Activate X colors? + (when (or (eq rainbow-x-colors t) + (and (eq rainbow-x-colors 'auto) + (memq major-mode rainbow-x-colors-major-mode-list))) + (font-lock-add-keywords nil + rainbow-x-colors-font-lock-keywords + t)) + ;; Activate LaTeX colors? + (when (or (eq rainbow-latex-colors t) + (and (eq rainbow-latex-colors 'auto) + (memq major-mode rainbow-latex-colors-major-mode-list))) + (font-lock-add-keywords nil + rainbow-latex-rgb-colors-font-lock-keywords + t)) + ;; Activate ANSI colors? + (when (or (eq rainbow-ansi-colors t) + (and (eq rainbow-ansi-colors 'auto) + (memq major-mode rainbow-ansi-colors-major-mode-list))) + (font-lock-add-keywords nil + rainbow-ansi-colors-font-lock-keywords + t)) + ;; Activate HTML colors? + (when (or (eq rainbow-html-colors t) + (and (eq rainbow-html-colors 'auto) + (memq major-mode rainbow-html-colors-major-mode-list))) + (setq rainbow-html-colors-font-lock-keywords + `((,(regexp-opt (mapcar 'car rainbow-html-colors-alist) 'words) + (0 (rainbow-colorize-by-assoc rainbow-html-colors-alist))))) + (font-lock-add-keywords nil + `(,@rainbow-html-colors-font-lock-keywords + ,@rainbow-html-rgb-colors-font-lock-keywords) + t)) + ;; Activate R colors? + (when (or (eq rainbow-r-colors t) + (and (eq rainbow-r-colors 'auto) + (memq major-mode rainbow-r-colors-major-mode-list))) + (setq rainbow-r-colors-font-lock-keywords + `((,(regexp-opt (mapcar 'car rainbow-r-colors-alist) 'words) + (0 (rainbow-colorize-by-assoc rainbow-r-colors-alist))))) + (font-lock-add-keywords nil + rainbow-r-colors-font-lock-keywords + t))) + +(defun rainbow-turn-off () + "Turn off rainbow-mode." + (font-lock-remove-keywords + nil + `(,@rainbow-hexadecimal-colors-font-lock-keywords + ,@rainbow-x-colors-font-lock-keywords + ,@rainbow-latex-rgb-colors-font-lock-keywords + ,@rainbow-r-colors-font-lock-keywords + ,@rainbow-html-colors-font-lock-keywords + ,@rainbow-html-rgb-colors-font-lock-keywords))) + +;;;###autoload +(define-minor-mode rainbow-mode + "Colorize strings that represent colors. +This will fontify with colors the string like \"#aabbcc\" or \"blue\"." + :lighter " Rbow" + (progn + (if rainbow-mode + (rainbow-turn-on) + (rainbow-turn-off)) + ;; Call font-lock-mode to refresh the buffer when used e.g. interactively + (font-lock-mode 1))) + +;;;; ChangeLog: + +;; 2018-05-21 Julien Danjou +;; +;; * rainbow-mode/rainbow-mode.el: do not fail if face-property is a symbol +;; +;; It turns out there are cases when `face-property' can be just a symbol +;; and we need to protect our selves from that, i.e. `car' should not fail. +;; Hence, +;; `car-safe' is there and if it's `nil', then fall back to `face-property' +;; as is. +;; +;; See https://github.com/tarsius/hl-todo/issues/17 +;; +;; 2018-03-26 Julien Danjou +;; +;; rainbow-mode: release 1.0 +;; +;; 2018-03-26 Jonas Bernoulli +;; +;; Allow outline-minor-mode to find section headings +;; +;; 2018-03-26 Jonas Bernoulli +;; +;; Set type of customizable options +;; +;; 2018-03-26 Jonas Bernoulli +;; +;; Enforce use of spaces for indentation +;; +;; Also untabify some code added by a contributor who, unlike you, has not +;; globally set `indent-tabs-mode' to nil. +;; +;; 2017-05-29 Julien Danjou +;; +;; Fix `rainbow-color-luminance' docstring +;; +;; 2015-10-12 Julien Danjou +;; +;; rainbow: add font-lock at the end +;; +;; See https://github.com/fxbois/web-mode/issues/612 +;; +;; 2015-03-06 Julien Danjou +;; +;; rainbow: fix font-lock-mode refresh +;; +;; 2014-10-15 Stefan Monnier +;; +;; * packages/rainbow-mode/rainbow-mode.el (ansi-color-context) +;; (xterm-color-current): Declare. +;; +;; 2014-09-07 Julien Danjou +;; +;; rainbow-mode: support float in CSS and limit to 100% +;; +;; 2013-08-05 Julien Danjou +;; +;; rainbow-mode: 0.9, allow spaces in LaTeX colors +;; +;; 2013-05-03 Julien Danjou +;; +;; rainbow-mode: add support for R, bump version to 0.8 +;; +;; Signed-off-by: Julien Danjou +;; +;; 2013-02-26 Julien Danjou +;; +;; rainbow-mode: version 0.7 +;; +;; * rainbow-mode.el: don't activate font-lock-mode +;; +;; 2012-12-11 Julien Danjou +;; +;; * rainbow-mode: update to 0.6, add support for ANSI coloring +;; +;; 2012-11-26 Julien Danjou +;; +;; rainbow-mode: fix some LaTex docstrings +;; +;; 2012-11-14 Julien Danjou +;; +;; rainbow-mode: version 0.5 +;; +;; * rainbow-mode.el: fix syntax error on +;; `rainbow-hexadecimal-colors-font-lock-keywords'. +;; +;; 2012-11-09 Julien Danjou +;; +;; rainbow-mode: version 0.4 +;; +;; * rainbow-mode.el: Use functions from color package to colorize HSL +;; rather +;; than our own copy. +;; +;; 2012-11-09 Julien Danjou +;; +;; rainbow-mode 0.3 +;; +;; * rainbow-mode.el: avoid colorizing HTML entities +;; +;; 2011-09-23 Julien Danjou +;; +;; Update rainbow-mode to version 0.2 +;; +;; 2011-07-01 Chong Yidong +;; +;; Give every package its own directory in packages/ including single-file +;; packages. +;; + + +(provide 'rainbow-mode) + +;; Local Variables: +;; indent-tabs-mode: nil +;; End: +;;; rainbow-mode.el ends here + (require 'doom-modeline) (doom-modeline-mode 1) diff --git a/init.elc b/init.elc index ec3359202b3f5f5535f3d56bbf428dc95b52c495..2187d3a4c970a00247a079b10ef05b95526c1cef 100644 GIT binary patch literal 80504 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 YdXj63(7iyqeyCP7B7g618Q~e>Kb6lkSO5S3 diff --git a/init.org b/init.org index 789d624..08d5ca4 100644 --- a/init.org +++ b/init.org @@ -48,6 +48,7 @@ (defvar my-packages '(all-the-icons + amx anzu base16-theme bbdb @@ -68,6 +69,7 @@ elfeed-org elpy emmet-mode + excorporate expand-region fic-mode flycheck @@ -76,13 +78,17 @@ go-playground gorepl-mode iedit + indium ivy ivy-hydra jabber json-mode magit + markdown-mode material-theme multiple-cursors + ox-reveal + poporg projectile rainbow-delimiters rust-mode @@ -93,8 +99,8 @@ web-mode which-key)) - (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) - (add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/")) + (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) + (add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/")) (when (not package-archive-contents) (package-refresh-contents)) @@ -176,7 +182,7 @@ ;; Set the title (setq dashboard-banner-logo-title "Let's begin...") ;; Set the banner - (setq dashboard-startup-banner "~/.emacs.d/public/emacs-logo-512.png") + (setq dashboard-startup-banner "~/.emacs.d/public/emacs-logo-350.png") ;; Value can be ;; 'official which displays the official emacs logo ;; 'logo which displays an alternative emacs logo @@ -614,7 +620,44 @@ (dired-hide-details-mode nil)) (add-hook 'dired-mode-hook 'dired-mode-setup) #+END_SRC -*** Ivy +*** Excorporate + #+BEGIN_SRC emacs-lisp :results silent :tangle no + ;;; + ;;; Configuration for our Exchange server + ;;; + (setq-default + excorporate-configuration + '("lolson@eaglecrk.com" . "https://outlook.office365.com/EWS/Exchange.asmx") + org-agenda-include-diary t) + + ;;; + ;;; Make sure that Emacs diary knows how to follow `#include "..."' + ;;; directives (needed by excorporate) + ;;; + (add-hook 'diary-mark-entries-hook 'diary-mark-included-diary-files) + + ;;; + ;;; Create a hook function to pull down Exchange meetings and + ;;; update my Emacs diary whenever org-agenda merges diary into + ;;; agenda. + ;;; + (defun my/agenda-update-diary () + "Update exchange diary." + (interactive) + (exco-diary-diary-advice + (calendar-current-date) + (calendar-current-date) + #'message "Diary updated")) + + (add-hook 'org-agenda-cleanup-fancy-diary-hook 'my/agenda-update-diary) + + ;;; + ;;; Finally, turn on excorporate and enable excorporate-diary + ;;; + (excorporate) + (excorporate-diary-enable) + #+END_SRC +*** Ivy and Amx #+BEGIN_SRC emacs-lisp :results silent (require 'ivy-hydra) (require 'ivy) @@ -628,13 +671,13 @@ ivy-initial-inputs-alist nil ivy-extra-directories nil) - (global-set-key (kbd "C-s") 'swiper) + (global-set-key (kbd "C-s") 'swiper) (global-set-key (kbd "C-c C-r") 'ivy-resume) - (global-set-key (kbd "M-x") 'counsel-M-x) + (global-set-key (kbd "M-x") 'counsel-M-x) (global-set-key (kbd "C-x C-f") 'counsel-find-file) - (global-set-key (kbd "C-c g") 'counsel-git) - (global-set-key (kbd "C-c j") 'counsel-git-grep) - (global-set-key (kbd "C-c k") 'counsel-ag) + (global-set-key (kbd "C-c g") 'counsel-git) + (global-set-key (kbd "C-c j") 'counsel-git-grep) + (global-set-key (kbd "C-c k") 'counsel-ag) (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history) (defun ivy-open-current-typed-path () @@ -658,6 +701,10 @@ (setq magit-completing-read-function 'ivy-completing-read) #+END_SRC +*** Markdown + #+BEGIN_SRC emacs-lisp :results silent + (add-to-list 'exec-path "/home/locust/.local/bin") + #+END_SRC *** Mu4e #+BEGIN_SRC emacs-lisp :results silent (add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu/mu4e") @@ -689,23 +736,23 @@ smtpmail-smtp-service 587 ) - (defun leo/convert-message-set-point () - "Set the point to the start of the message body." - (interactive) - (beginning-of-buffer) - (search-forward "--text follows this line--") - (forward-char) - ) - (defun leo/convert-message-from-markdown () - "Convert a markdown flavored mail buffer to html w/mime support." - (interactive) - (if (y-or-n-p "Convert to HTML? ") - ((leo/convert-message-set-point) - (save-excursion - (message-goto-body) - (shell-command-on-region (point) (point-max) "~/.emacs.d/scripts/expand-mime.sh" nil t))) - (message "Aborting.")) - ) + ;; (defun leo/convert-message-set-point () + ;; "Set the point to the start of the message body." + ;; (interactive) + ;; (beginning-of-buffer) + ;; (search-forward "--text follows this line--") + ;; (forward-char) + ;; ) + ;; (defun leo/convert-message-from-markdown () + ;; "Convert a markdown flavored mail buffer to html w/mime support." + ;; (interactive) + ;; (if (y-or-n-p "Convert to HTML? ") + ;; ((leo/convert-message-set-point) + ;; (save-excursion + ;; (message-goto-body) + ;; (shell-command-on-region (point) (point-max) "~/.emacs.d/scripts/expand-mime.sh" nil t))) + ;; (message "Aborting.")) + ;; ) (setq mu4e-contexts `( @@ -837,6 +884,12 @@ projectile-completion-system 'ivy) (counsel-projectile-mode) #+END_SRC +*** Poporg + Edit comments in a separate window + #+BEGIN_SRC emacs-lisp :results silent + (autoload 'poporg-dwim "poporg" nil t) + (global-set-key (kbd "C-c \"") 'poporg-dwim) + #+END_SRC *** Notify #+BEGIN_SRC emacs-lisp :results silent ;;; notify.el --- notification front-end @@ -1082,225 +1135,6 @@ (elfeed-search-fetch nil))) (add-to-list 'hyperspace-actions '("lf" . hyperspace-action->elfeed)) #+END_SRC -** Development Specific -*** General - #+BEGIN_SRC emacs-lisp :results silent - (require 'rainbow-delimiters) - (global-flycheck-mode) - - (add-hook 'before-save-hook 'delete-trailing-whitespace) - (add-hook 'prog-mode-hook 'rainbow-delimiters-mode) - - (setq-default indent-tabs-mode nil - tab-width 4) - (defvaralias 'c-basic-offset 'tab-width) - (defvaralias 'cperl-indent-level 'tab-width) - - (electric-pair-mode 1) - (show-paren-mode 1) - - (require 'dockerfile-mode) - (add-to-list 'auto-mode-alist '("Dockerfile*\\'" . dockerfile-mode)) - - (require 'gitignore-mode) - (add-to-list 'auto-mode-alist '("gitignore\\'" . gitignore-mode)) - - (require 'json-mode) - (add-to-list 'auto-mode-alist '("\\.json\\'" . json-mode)) - - (require 'web-mode) - (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode)) - #+END_SRC -*** Python - #+BEGIN_SRC emacs-lisp :results silent - (elpy-enable) - (setq python-shell-interpreter "jupyter" - python-shell-interpreter-args "console --simple-prompt") - - (when (require 'flycheck nil t) - (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) - (add-hook 'elpy-mode-hook 'flycheck-mode)) - - (require 'py-autopep8) - (setq py-autopep8-options '("--ignore=E501")) - (add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save) - #+END_SRC -*** Go - #+BEGIN_SRC emacs-lisp :results silent - (require 'go-mode) - (require 'go-playground) - (require 'gorepl-mode) - (require 'company-go) - - (add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode)) - (add-hook 'go-mode-hook (lambda () - (add-hook 'before-save-hook 'gofmt-before-save) - (local-set-key (kbd "M-.") 'godef-jump) - (local-set-key (kbd "M-,") 'pop-tag-mark) - (local-set-key (kbd "C-c C-c") (lambda () - (interactive) - (ansi-term) - (comint-send-string "*ansi-term*" "make\n"))) - (set (make-local-variable 'company-backends) '(company-go)) - (setq company-tooltip-limit 20 - company-echo-delay 0 - company-begin-commands '(self-insert-command)) - (gorepl-mode))) - (defun set-exec-path-from-shell-PATH () - (let ((path-from-shell (replace-regexp-in-string - "[ \t\n]*$" - "" - (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'")))) - (setenv "PATH" path-from-shell) - (setq eshell-path-env path-from-shell) - (setq exec-path (split-string path-from-shell path-separator)))) - - (when window-system (set-exec-path-from-shell-PATH)) - - (setenv "GOPATH" "~/go") - (add-to-list 'exec-path "~/go/bin") - #+END_SRC -*** TypeScript - #+BEGIN_SRC emacs-lisp :results silent - (defun setup-tide-mode () - "Tide setup function." - (interactive) - (tide-setup) - (flycheck-mode +1) - (setq flycheck-check-syntax-automatically '(save mode-enabled)) - (eldoc-mode +1) - (tide-hl-identifier-mode +1) - (company-mode +1)) - - ;; aligns annotation to the right hand side - (setq company-tooltip-align-annotations t) - - ;; formats the buffer before saving - (add-hook 'before-save-hook 'tide-format-before-save) - - (add-hook 'typescript-mode-hook #'setup-tide-mode) - - (require 'typescript-mode) - (require 'tide) - - (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)) - (add-hook 'typescript-mode-hook - '(lambda () - (set (make-local-variable 'company-backends) '(company-tide)) - (setq company-tooltip-limit 20 - company-echo-delay 0 - company-begin-commands '(self-insert-command) - tide-format-options '(:insertSpaceAfterFunctionKeywordForAnonymousFunctions t :placeOpenBraceOnNewLineForFunctions nil)) - (tide-setup))) - #+END_SRC -**** TSX - #+BEGIN_SRC emacs-lisp :results silent - (require 'web-mode) - (add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode)) - (add-hook 'web-mode-hook - (lambda () - (when (string-equal "tsx" (file-name-extension buffer-file-name)) - (setup-tide-mode)))) - ;; enable typescript-tslint checker - (flycheck-add-mode 'typescript-tslint 'web-mode) - #+END_SRC -**** JSX - #+BEGIN_SRC emacs-lisp :results silent - (require 'web-mode) - (add-to-list 'auto-mode-alist '("\\.jsx\\'" . web-mode)) - (add-hook 'web-mode-hook - (lambda () - (when (string-equal "jsx" (file-name-extension buffer-file-name)) - (setup-tide-mode)))) - ;; configure jsx-tide checker to run after your default jsx checker - (flycheck-add-mode 'javascript-eslint 'web-mode) - (flycheck-add-next-checker 'javascript-eslint 'jsx-tide 'append) - #+END_SRC -*** Org - #+BEGIN_SRC emacs-lisp :results silent - (org-babel-do-load-languages - 'org-babel-load-languages - '((js . t) - (shell . t) - (emacs-lisp . t))) - - (setq org-todo-keywords - '((sequence "TODO(t)" "|" "DONE(d)") - (sequence "BUG(b)" "|" "INPROGRESS(i)" "FIXED(f)") - (sequence "|" "CANCELED(c)") - (sequence "|" "NEEDCLARIFICATION(n)") - (sequence "|" "PROVIDEUPDATE(p)") - (sequence "|" "WAITING(w)") - )) - - (setq org-agenda-files - '("~/Dropbox/Org/todo.org" "~/Dropbox/Org/archive.org")) - (setq org-refile-targets - '((nil :maxlevel . 1) - (org-agenda-files :maxlevel . 1))) - - (add-hook 'focus-in-hook - (lambda () (progn - (setq org-tags-column (- 5 (frame-width)))) (org-align-all-tags))) - - (add-hook 'focus-out-hook - (lambda () (progn - (setq org-tags-column (- 5 (frame-width)))) (org-align-all-tags))) - - (defvar org-src-tab-acts-natively) - (setq org-src-tab-acts-natively t) - ;; (setenv "NODE_PATH" - ;; (getenv "NODE_PATH")) - - (defvar org-confirm-babel-evaluate) - - (defun my-org-confirm-babel-evaluate (lang _body) - "Execute certain languages without confirming. - Takes LANG to allow and BODY to execute." - (not (or (string= lang "js") - (string= lang "restclient") - (string= lang "emacs-lisp") - (string= lang "shell")))) - (setq org-confirm-babel-evaluate #'my-org-confirm-babel-evaluate) - (add-to-list 'org-structure-template-alist - (list "e" (concat "#+BEGIN_SRC emacs-lisp :results silent\n" - "\n" - "#+END_SRC"))) - (add-to-list 'org-structure-template-alist - (list "j" (concat "#+BEGIN_SRC js :cmd \"babel-node\"\n" - "\n" - "#+END_SRC"))) - (add-to-list 'org-structure-template-alist - (list "r" (concat "#+BEGIN_SRC restclient :results raw\n" - "\n" - "#+END_SRC"))) - #+END_SRC -**** Mu4e - #+BEGIN_SRC emacs-lisp :results silent - ;;store org-mode links to messages - (require 'org-mu4e) - ;;store link to message if in header view, not to header query - (setq org-mu4e-link-query-in-headers-mode nil) - - (setq org-capture-templates - '(("t" "todo" entry (file+headline "~/Dropbox/Org/todo.org" "Tasks") - "* TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n"))) - #+END_SRC -**** ElFeed - #+BEGIN_SRC emacs-lisp :results silent - (elfeed-org) - (setq rmh-elfeed-org-files (list "~/Dropbox/Org/elfeed.org")) - - (defun leo/elfeed-search (arg) - "Search for ARG in feed." - (interactive) - (elfeed-search-set-filter arg)) - - (define-key elfeed-search-mode-map "a" (lambda () (interactive) (leo/elfeed-search ""))) - (define-key elfeed-search-mode-map "e" (lambda () (interactive) (leo/elfeed-search "+emacs"))) - (define-key elfeed-search-mode-map "d" (lambda () (interactive) (leo/elfeed-search "+daily"))) - (define-key elfeed-search-mode-map "x" (lambda () (interactive) (leo/elfeed-search "xkcd"))) - #+End_SRC ** Functions #+BEGIN_SRC emacs-lisp :results silent (defun find-user-init-file () @@ -1318,6 +1152,14 @@ (interactive) (load-file "~/.emacs.d/init.elc")) + (defun leo-swiper () + "LO: Custom swiper." + (interactive) + (let ((word (thing-at-point 'symbol))) + (if word (swiper (format "%s" word))) + (unless word (swiper (format "")))) + ) + (defun jump-to-symbol-internal (&optional backwardp) "Jumps to the next symbol near the point if such a symbol exists. If BACKWARDP is non-nil it jumps backward." (let* ((point (point)) @@ -1514,7 +1356,7 @@ (define-key custom-bindings "%" 'match-paren) (define-key custom-bindings (kbd "C-x .") 'dash-at-point) (define-key custom-bindings (kbd "C-x ,") 'dash-at-point-with-docset) - (define-key custom-bindings (kbd "C-s") (lambda () (interactive) (swiper (format "%s" (thing-at-point 'symbol))))) + (define-key custom-bindings (kbd "C-s") 'leo-swiper) (define-key custom-bindings (kbd "C-x C-l m") 'mu4e) (define-key custom-bindings (kbd "C-x C-o t") 'find-todo-file) (define-key custom-bindings (kbd "C-x C-l j") 'jabber) @@ -1533,6 +1375,7 @@ (define-key custom-bindings (kbd "C-c p") 'counsel-projectile-switch-project) (define-key custom-bindings (kbd "C-c f") 'counsel-projectile-find-file) + (define-key custom-bindings (kbd "C-c c") 'ivy-resume) (define-key custom-bindings (kbd "C-c m") 'magit-status) (define-key custom-bindings (kbd "C-c D") 'define-word-at-point) (define-key custom-bindings (kbd "C-@") 'er/expand-region) @@ -1556,13 +1399,12 @@ (define-key custom-bindings (kbd "C-x f") 'phil-columns) (define-key custom-bindings (kbd "C-x k") 'kill-this-buffer-unless-scratch) (define-key custom-bindings (kbd "C-c d") 'duplicate-thing) - (define-key custom-bindings (kbd "C-c c") 'comment-or-uncomment-region-or-line) (define-key custom-bindings (kbd "C-;") 'comment-or-uncomment-region-or-line) (define-key custom-bindings (kbd "C-o") 'new-line-below) (define-key custom-bindings (kbd "C-S-o") 'new-line-above) (define-key custom-bindings (kbd "") 'tidy) (define-key custom-bindings (kbd "M-q") 'kill-this-buffer) - (define-key custom-bindings (kbd "M-RET") '(lambda () (interactive) (term (getenv "SHELL")))) + ;; (define-key custom-bindings (kbd "M-RET") '(lambda () (interactive) (term (getenv "SHELL")))) (define-minor-mode custom-bindings-mode @@ -1570,12 +1412,1592 @@ t nil custom-bindings) #+END_SRC -** UI - #+BEGIN_SRC emacs-lisp :results silent - (cond ((member "PragmataPro Mono Liga" (font-family-list)) - (set-face-attribute 'default nil :font "PragmataPro Mono Liga-13"))) - #+END_SRC +** Development Specific +*** General + #+BEGIN_SRC emacs-lisp :results silent + (require 'rainbow-delimiters) + (global-flycheck-mode) + + (add-hook 'before-save-hook 'delete-trailing-whitespace) + (add-hook 'prog-mode-hook 'rainbow-delimiters-mode) + + (setq-default indent-tabs-mode nil + tab-width 4) + (defvaralias 'c-basic-offset 'tab-width) + (defvaralias 'cperl-indent-level 'tab-width) + + (electric-pair-mode 1) + (show-paren-mode 1) + + (require 'dockerfile-mode) + (add-to-list 'auto-mode-alist '("Dockerfile*\\'" . dockerfile-mode)) + + (require 'gitignore-mode) + (add-to-list 'auto-mode-alist '("gitignore\\'" . gitignore-mode)) + ;; Workaround to get Projectile to work again + (setq projectile-git-submodule-command nil) + + (require 'json-mode) + (add-to-list 'auto-mode-alist '("\\.json\\'" . json-mode)) + + (require 'web-mode) + (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode)) + #+END_SRC +*** Python + #+BEGIN_SRC emacs-lisp :results silent + (elpy-enable) + (setq python-shell-interpreter "jupyter" + python-shell-interpreter-args "console --simple-prompt") + + (when (require 'flycheck nil t) + (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) + (add-hook 'elpy-mode-hook 'flycheck-mode)) + + (require 'py-autopep8) + (setq py-autopep8-options '("--ignore=E501")) + (add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save) + #+END_SRC +*** Go + #+BEGIN_SRC emacs-lisp :results silent + (require 'go-mode) + (require 'go-playground) + (require 'gorepl-mode) + (require 'company-go) + + (add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode)) + (add-hook 'go-mode-hook (lambda () + (add-hook 'before-save-hook 'gofmt-before-save) + (local-set-key (kbd "M-.") 'godef-jump) + (local-set-key (kbd "M-,") 'pop-tag-mark) + (local-set-key (kbd "C-c C-c") (lambda () + (interactive) + (ansi-term) + (comint-send-string "*ansi-term*" "make\n"))) + (set (make-local-variable 'company-backends) '(company-go)) + (setq company-tooltip-limit 20 + company-echo-delay 0 + company-begin-commands '(self-insert-command)) + (gorepl-mode))) + (defun set-exec-path-from-shell-PATH () + (let ((path-from-shell (replace-regexp-in-string + "[ \t\n]*$" + "" + (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'")))) + (setenv "PATH" path-from-shell) + (setq eshell-path-env path-from-shell) + (setq exec-path (split-string path-from-shell path-separator)))) + + (when window-system (set-exec-path-from-shell-PATH)) + + (setenv "GOPATH" "/home/locust/go") + (add-to-list 'exec-path "/home/locust/go/bin") + #+END_SRC +*** JS +**** Indium + #+BEGIN_SRC emacs-lisp :results silent + (add-to-list 'exec-path "/usr/local/bin") + #+END_SRC +*** TypeScript + #+BEGIN_SRC emacs-lisp :results silent + (defun setup-tide-mode () + "Tide setup function." + (interactive) + (tide-setup) + (flycheck-mode +1) + (setq flycheck-check-syntax-automatically '(save mode-enabled)) + (eldoc-mode +1) + (tide-hl-identifier-mode +1) + (company-mode +1)) + + ;; aligns annotation to the right hand side + (setq company-tooltip-align-annotations t) + + ;; formats the buffer before saving + (add-hook 'before-save-hook 'tide-format-before-save) + + (add-hook 'typescript-mode-hook #'setup-tide-mode) + + (require 'typescript-mode) + (require 'tide) + + (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)) + (add-hook 'typescript-mode-hook + '(lambda () + (set (make-local-variable 'company-backends) '(company-tide)) + (setq company-tooltip-limit 20 + company-echo-delay 0 + company-begin-commands '(self-insert-command) + tide-format-options '(:insertSpaceAfterFunctionKeywordForAnonymousFunctions t :placeOpenBraceOnNewLineForFunctions nil)) + (tide-setup))) + #+END_SRC +**** TSX + #+BEGIN_SRC emacs-lisp :results silent + (require 'web-mode) + (add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode)) + (add-hook 'web-mode-hook + (lambda () + (when (string-equal "tsx" (file-name-extension buffer-file-name)) + (setup-tide-mode)))) + ;; enable typescript-tslint checker + (flycheck-add-mode 'typescript-tslint 'web-mode) + #+END_SRC +**** JSX + #+BEGIN_SRC emacs-lisp :results silent + (require 'web-mode) + (add-to-list 'auto-mode-alist '("\\.jsx\\'" . web-mode)) + (add-hook 'web-mode-hook + (lambda () + (when (string-equal "jsx" (file-name-extension buffer-file-name)) + (setup-tide-mode)))) + ;; configure jsx-tide checker to run after your default jsx checker + (flycheck-add-mode 'javascript-eslint 'web-mode) + (flycheck-add-next-checker 'javascript-eslint 'jsx-tide 'append) + #+END_SRC +*** Org + #+BEGIN_SRC emacs-lisp :results silent + (org-babel-do-load-languages + 'org-babel-load-languages + '((js . t) + (shell . t) + (emacs-lisp . t))) + + (setq org-todo-keywords + '((sequence "TODO(t)" "|" "DONE(d)") + (sequence "BUG(b)" "|" "INPROGRESS(i)" "FIXED(f)") + (sequence "TEST(T)" "NOTEST(N)" "|" "COMPLETE(C)") + (sequence "|" "CANCELED(c)") + (sequence "|" "NEEDCLARIFICATION(n)") + (sequence "|" "PROVIDEUPDATE(p)") + (sequence "|" "WAITING(w)") + )) + + (setq org-agenda-files + '("~/Dropbox/Org/todo.org" + "~/Dropbox/Org/archive.org")) + (setq org-refile-targets + '((nil :maxlevel . 1) + (org-agenda-files :maxlevel . 1))) + + ;; (add-hook 'focus-in-hook + ;; (lambda () (progn + ;; (setq org-tags-column (- 5 (frame-width)))) (org-align-all-tags))) + + ;; (add-hook 'focus-out-hook + ;; (lambda () (progn + ;; (setq org-tags-column (- 5 (frame-width)))) (org-align-all-tags))) + + (defvar org-src-tab-acts-natively) + (setq org-src-tab-acts-natively t) + + (defvar org-confirm-babel-evaluate) + + (defun my-org-confirm-babel-evaluate (lang _body) + "Execute certain languages without confirming. + Takes LANG to allow and BODY to execute." + (not (or (string= lang "js") + (string= lang "restclient") + (string= lang "emacs-lisp") + (string= lang "shell")))) + (setq org-confirm-babel-evaluate #'my-org-confirm-babel-evaluate) + (add-to-list 'org-structure-template-alist + (list "e" (concat "#+BEGIN_SRC emacs-lisp :results silent\n" + "\n" + "#+END_SRC"))) + (add-to-list 'org-structure-template-alist + (list "j" (concat "#+BEGIN_SRC js :cmd \"/usr/local/bin/babel-node\" :results output code\n" + "\n" + "#+END_SRC"))) + (add-to-list 'org-structure-template-alist + (list "r" (concat "#+BEGIN_SRC restclient :results raw\n" + "\n" + "#+END_SRC"))) + + (defun my-org-config () + "Activate org and yas in 'org-mode' buffers." + (yas-minor-mode) + (lambda () + (local-set-key (kbd "M-RET") 'org-insert-todo-heading) + (global-set-key (kbd "C-c c") nil) + (local-set-key (kbd "C-c c i") 'org-clock-in) + (local-set-key (kbd "C-c c o") 'org-clock-out) + ) + ) + (add-hook 'org-mode-hook #'my-org-config) + #+END_SRC +**** Presentations - Reveal + #+BEGIN_SRC emacs-lisp :results silent + (require 'ox-reveal) + + (setq org-reveal-root "https://cdn.jsdelivr.net/npm/reveal.js" + org-reveal-klipsify-src t) + #+END_SRC +**** Mu4e + #+BEGIN_SRC emacs-lisp :results silent + ;;store org-mode links to messages + (require 'org-mu4e) + ;;store link to message if in header view, not to header query + (setq org-mu4e-link-query-in-headers-mode nil) + + (setq org-capture-templates + '(("t" "todo" entry (file+headline "~/Dropbox/Org/todo.org" "Tasks") + "* TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n"))) + #+END_SRC +**** ElFeed + #+BEGIN_SRC emacs-lisp :results silent + (elfeed-org) + (setq rmh-elfeed-org-files (list "~/Dropbox/Org/elfeed.org")) + + (defun leo/elfeed-search (arg) + "Search for ARG in feed." + (interactive) + (elfeed-search-set-filter arg)) + + (define-key elfeed-search-mode-map "a" (lambda () (interactive) (leo/elfeed-search ""))) + (define-key elfeed-search-mode-map "e" (lambda () (interactive) (leo/elfeed-search "+emacs"))) + (define-key elfeed-search-mode-map "d" (lambda () (interactive) (leo/elfeed-search "+daily"))) + (define-key elfeed-search-mode-map "x" (lambda () (interactive) (leo/elfeed-search "xkcd"))) + #+End_SRC +** UI + #+BEGIN_SRC emacs-lisp :results silent + (cond ((member "PragmataPro Mono Liga" (font-family-list)) + (set-face-attribute 'default nil :font "PragmataPro Mono Liga-13"))) + #+END_SRC +*** Org Headings + #+BEGIN_SRC emacs-lisp :results silent + (set-face-attribute 'org-level-1 nil :height 1.5) + (set-face-attribute 'org-level-2 nil :height 1.2) + (set-face-attribute 'org-level-3 nil :height 1.1) + (set-face-attribute 'org-level-4 nil :height 1.1) + (set-face-attribute 'org-scheduled-today nil :height 1.0) + (set-face-attribute 'org-agenda-date-today nil :height 1.1) + ;; (set-face-attribute 'org-table nil :foreground "#008787") + #+END_SRC +*** Rainbow Mode (highlight hex colors) + #+BEGIN_SRC emacs-lisp :results silent + ;;; rainbow-mode.el --- Colorize color names in buffers + + ;; Copyright (C) 2010-2018 Free Software Foundation, Inc + + ;; Author: Julien Danjou + ;; Keywords: faces + ;; Version: 1.0.1 + + ;; This file is part of GNU Emacs. + + ;; GNU Emacs is free software: you can redistribute it and/or modify + ;; it under the terms of the GNU General Public License as published by + ;; the Free Software Foundation, either version 3 of the License, or + ;; (at your option) any later version. + + ;; GNU Emacs is distributed in the hope that it will be useful, + ;; but WITHOUT ANY WARRANTY; without even the implied warranty of + ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ;; GNU General Public License for more details. + + ;; You should have received a copy of the GNU General Public License + ;; along with GNU Emacs. If not, see . + + ;;; Commentary: + ;; + ;; This minor mode sets background color to strings that match color + ;; names, e.g. #0000ff is displayed in white with a blue background. + ;; + + ;;; Code: + + (eval-when-compile + (require 'cl)) + + (require 'regexp-opt) + (require 'faces) + (require 'color) + + (unless (require 'xterm-color nil t) + (require 'ansi-color)) + + (defgroup rainbow nil + "Show color strings with a background color." + :tag "Rainbow" + :group 'help) + + ;;; Hexadecimal colors + + (defvar rainbow-hexadecimal-colors-font-lock-keywords + '(("[^&]\\(#\\(?:[0-9a-fA-F]\\{3\\}\\)+\\{1,4\\}\\)" + (1 (rainbow-colorize-itself 1))) + ("^\\(#\\(?:[0-9a-fA-F]\\{3\\}\\)+\\{1,4\\}\\)" + (0 (rainbow-colorize-itself))) + ("[Rr][Gg][Bb]:[0-9a-fA-F]\\{1,4\\}/[0-9a-fA-F]\\{1,4\\}/[0-9a-fA-F]\\{1,4\\}" + (0 (rainbow-colorize-itself))) + ("[Rr][Gg][Bb][Ii]:[0-9.]+/[0-9.]+/[0-9.]+" + (0 (rainbow-colorize-itself))) + ("\\(?:[Cc][Ii][Ee]\\(?:[Xx][Yy][Zz]\\|[Uu][Vv][Yy]\\|[Xx][Yy][Yy]\\|[Ll][Aa][Bb]\\|[Ll][Uu][Vv]\\)\\|[Tt][Ee][Kk][Hh][Vv][Cc]\\):[+-]?[0-9.]+\\(?:[Ee][+-]?[0-9]+\\)?/[+-]?[0-9.]+\\(?:[Ee][+-]?[0-9]+\\)?/[+-]?[0-9.]+\\(?:[Ee][+-]?[0-9]+\\)?" + (0 (rainbow-colorize-itself)))) + "Font-lock keywords to add for hexadecimal colors.") + + ;;; rgb() colors + + (defvar rainbow-html-rgb-colors-font-lock-keywords + '(("rgb(\s*\\([0-9]\\{1,3\\}\\(?:\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*)" + (0 (rainbow-colorize-rgb))) + ("rgba(\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)" + (0 (rainbow-colorize-rgb))) + ("hsl(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*)" + (0 (rainbow-colorize-hsl))) + ("hsla(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)" + (0 (rainbow-colorize-hsl)))) + "Font-lock keywords to add for RGB colors.") + + ;;; HTML colors + + (defvar rainbow-html-colors-font-lock-keywords nil + "Font-lock keywords to add for HTML colors.") + (make-variable-buffer-local 'rainbow-html-colors-font-lock-keywords) + + (defcustom rainbow-html-colors-alist + '(("AliceBlue" . "#F0F8FF") + ("AntiqueWhite" . "#FAEBD7") + ("Aqua" . "#00FFFF") + ("Aquamarine" . "#7FFFD4") + ("Azure" . "#F0FFFF") + ("Beige" . "#F5F5DC") + ("Bisque" . "#FFE4C4") + ("Black" . "#000000") + ("BlanchedAlmond" . "#FFEBCD") + ("Blue" . "#0000FF") + ("BlueViolet" . "#8A2BE2") + ("Brown" . "#A52A2A") + ("BurlyWood" . "#DEB887") + ("CadetBlue" . "#5F9EA0") + ("Chartreuse" . "#7FFF00") + ("Chocolate" . "#D2691E") + ("Coral" . "#FF7F50") + ("CornflowerBlue" . "#6495ED") + ("Cornsilk" . "#FFF8DC") + ("Crimson" . "#DC143C") + ("Cyan" . "#00FFFF") + ("DarkBlue" . "#00008B") + ("DarkCyan" . "#008B8B") + ("DarkGoldenRod" . "#B8860B") + ("DarkGray" . "#A9A9A9") + ("DarkGrey" . "#A9A9A9") + ("DarkGreen" . "#006400") + ("DarkKhaki" . "#BDB76B") + ("DarkMagenta" . "#8B008B") + ("DarkOliveGreen" . "#556B2F") + ("Darkorange" . "#FF8C00") + ("DarkOrchid" . "#9932CC") + ("DarkRed" . "#8B0000") + ("DarkSalmon" . "#E9967A") + ("DarkSeaGreen" . "#8FBC8F") + ("DarkSlateBlue" . "#483D8B") + ("DarkSlateGray" . "#2F4F4F") + ("DarkSlateGrey" . "#2F4F4F") + ("DarkTurquoise" . "#00CED1") + ("DarkViolet" . "#9400D3") + ("DeepPink" . "#FF1493") + ("DeepSkyBlue" . "#00BFFF") + ("DimGray" . "#696969") + ("DimGrey" . "#696969") + ("DodgerBlue" . "#1E90FF") + ("FireBrick" . "#B22222") + ("FloralWhite" . "#FFFAF0") + ("ForestGreen" . "#228B22") + ("Fuchsia" . "#FF00FF") + ("Gainsboro" . "#DCDCDC") + ("GhostWhite" . "#F8F8FF") + ("Gold" . "#FFD700") + ("GoldenRod" . "#DAA520") + ("Gray" . "#808080") + ("Grey" . "#808080") + ("Green" . "#008000") + ("GreenYellow" . "#ADFF2F") + ("HoneyDew" . "#F0FFF0") + ("HotPink" . "#FF69B4") + ("IndianRed" . "#CD5C5C") + ("Indigo" . "#4B0082") + ("Ivory" . "#FFFFF0") + ("Khaki" . "#F0E68C") + ("Lavender" . "#E6E6FA") + ("LavenderBlush" . "#FFF0F5") + ("LawnGreen" . "#7CFC00") + ("LemonChiffon" . "#FFFACD") + ("LightBlue" . "#ADD8E6") + ("LightCoral" . "#F08080") + ("LightCyan" . "#E0FFFF") + ("LightGoldenRodYellow" . "#FAFAD2") + ("LightGray" . "#D3D3D3") + ("LightGrey" . "#D3D3D3") + ("LightGreen" . "#90EE90") + ("LightPink" . "#FFB6C1") + ("LightSalmon" . "#FFA07A") + ("LightSeaGreen" . "#20B2AA") + ("LightSkyBlue" . "#87CEFA") + ("LightSlateGray" . "#778899") + ("LightSlateGrey" . "#778899") + ("LightSteelBlue" . "#B0C4DE") + ("LightYellow" . "#FFFFE0") + ("Lime" . "#00FF00") + ("LimeGreen" . "#32CD32") + ("Linen" . "#FAF0E6") + ("Magenta" . "#FF00FF") + ("Maroon" . "#800000") + ("MediumAquaMarine" . "#66CDAA") + ("MediumBlue" . "#0000CD") + ("MediumOrchid" . "#BA55D3") + ("MediumPurple" . "#9370D8") + ("MediumSeaGreen" . "#3CB371") + ("MediumSlateBlue" . "#7B68EE") + ("MediumSpringGreen" . "#00FA9A") + ("MediumTurquoise" . "#48D1CC") + ("MediumVioletRed" . "#C71585") + ("MidnightBlue" . "#191970") + ("MintCream" . "#F5FFFA") + ("MistyRose" . "#FFE4E1") + ("Moccasin" . "#FFE4B5") + ("NavajoWhite" . "#FFDEAD") + ("Navy" . "#000080") + ("OldLace" . "#FDF5E6") + ("Olive" . "#808000") + ("OliveDrab" . "#6B8E23") + ("Orange" . "#FFA500") + ("OrangeRed" . "#FF4500") + ("Orchid" . "#DA70D6") + ("PaleGoldenRod" . "#EEE8AA") + ("PaleGreen" . "#98FB98") + ("PaleTurquoise" . "#AFEEEE") + ("PaleVioletRed" . "#D87093") + ("PapayaWhip" . "#FFEFD5") + ("PeachPuff" . "#FFDAB9") + ("Peru" . "#CD853F") + ("Pink" . "#FFC0CB") + ("Plum" . "#DDA0DD") + ("PowderBlue" . "#B0E0E6") + ("Purple" . "#800080") + ("Red" . "#FF0000") + ("RosyBrown" . "#BC8F8F") + ("RoyalBlue" . "#4169E1") + ("SaddleBrown" . "#8B4513") + ("Salmon" . "#FA8072") + ("SandyBrown" . "#F4A460") + ("SeaGreen" . "#2E8B57") + ("SeaShell" . "#FFF5EE") + ("Sienna" . "#A0522D") + ("Silver" . "#C0C0C0") + ("SkyBlue" . "#87CEEB") + ("SlateBlue" . "#6A5ACD") + ("SlateGray" . "#708090") + ("SlateGrey" . "#708090") + ("Snow" . "#FFFAFA") + ("SpringGreen" . "#00FF7F") + ("SteelBlue" . "#4682B4") + ("Tan" . "#D2B48C") + ("Teal" . "#008080") + ("Thistle" . "#D8BFD8") + ("Tomato" . "#FF6347") + ("Turquoise" . "#40E0D0") + ("Violet" . "#EE82EE") + ("Wheat" . "#F5DEB3") + ("White" . "#FFFFFF") + ("WhiteSmoke" . "#F5F5F5") + ("Yellow" . "#FFFF00") + ("YellowGreen" . "#9ACD32")) + "Alist of HTML colors. + Each entry should have the form (COLOR-NAME . HEXADECIMAL-COLOR)." + :type 'alist + :group 'rainbow) + + (defcustom rainbow-html-colors-major-mode-list + '(html-mode css-mode php-mode nxml-mode xml-mode) + "List of major mode where HTML colors are enabled when + `rainbow-html-colors' is set to auto." + :type '(repeat (symbol :tag "Major-Mode")) + :group 'rainbow) + + (defcustom rainbow-html-colors 'auto + "When to enable HTML colors. + If set to t, the HTML colors will be enabled. If set to nil, the + HTML colors will not be enabled. If set to auto, the HTML colors + will be enabled if a major mode has been detected from the + `rainbow-html-colors-major-mode-list'." + :type '(choice (symbol :tag "enable in certain modes" auto) + (symbol :tag "enable globally" t) + (symbol :tag "disable" nil)) + :group 'rainbow) + + ;;; X colors + + (defvar rainbow-x-colors-font-lock-keywords + `((,(regexp-opt (x-defined-colors) 'words) + (0 (rainbow-colorize-itself)))) + "Font-lock keywords to add for X colors.") + + (defcustom rainbow-x-colors-major-mode-list + '(emacs-lisp-mode lisp-interaction-mode c-mode c++-mode java-mode) + "List of major mode where X colors are enabled when + `rainbow-x-colors' is set to auto." + :type '(repeat (symbol :tag "Major-Mode")) + :group 'rainbow) + + (defcustom rainbow-x-colors 'auto + "When to enable X colors. + If set to t, the X colors will be enabled. If set to nil, the + X colors will not be enabled. If set to auto, the X colors + will be enabled if a major mode has been detected from the + `rainbow-x-colors-major-mode-list'." + :type '(choice (symbol :tag "enable in certain modes" auto) + (symbol :tag "enable globally" t) + (symbol :tag "disable" nil)) + :group 'rainbow) + + ;;; LaTeX colors + + (defvar rainbow-latex-rgb-colors-font-lock-keywords + '(("{rgb}{\\([0-9.]+\\),\s*\\([0-9.]+\\),\s*\\([0-9.]+\\)}" + (0 (rainbow-colorize-rgb-float))) + ("{RGB}{\\([0-9]\\{1,3\\}\\),\s*\\([0-9]\\{1,3\\}\\),\s*\\([0-9]\\{1,3\\}\\)}" + (0 (rainbow-colorize-rgb))) + ("{HTML}{\\([0-9A-Fa-f]\\{6\\}\\)}" + (0 (rainbow-colorize-hexadecimal-without-sharp)))) + "Font-lock keywords to add for LaTeX colors.") + + (defcustom rainbow-latex-colors-major-mode-list + '(latex-mode) + "List of major mode where LaTeX colors are enabled when + `rainbow-x-colors' is set to auto." + :type '(repeat (symbol :tag "Major-Mode")) + :group 'rainbow) + + (defcustom rainbow-latex-colors 'auto + "When to enable LaTeX colors. + If set to t, the LaTeX colors will be enabled. If set to nil, the + LaTeX colors will not be enabled. If set to auto, the LaTeX colors + will be enabled if a major mode has been detected from the + `rainbow-latex-colors-major-mode-list'." + :type '(choice (symbol :tag "enable in certain modes" auto) + (symbol :tag "enable globally" t) + (symbol :tag "disable" nil)) + :group 'rainbow) + + ;;; Shell colors + + (defvar rainbow-ansi-colors-font-lock-keywords + '(("\\(\\\\[eE]\\|\\\\033\\|\\\\x1[bB]\\|\033\\)\\[\\([0-9;]*m\\)" + (0 (rainbow-colorize-ansi)))) + "Font-lock keywords to add for ANSI colors.") + + (defcustom rainbow-ansi-colors-major-mode-list + '(sh-mode c-mode c++-mode) + "List of major mode where ANSI colors are enabled when + `rainbow-ansi-colors' is set to auto." + :type '(repeat (symbol :tag "Major-Mode")) + :group 'rainbow) + + (defcustom rainbow-ansi-colors 'auto + "When to enable ANSI colors. + If set to t, the ANSI colors will be enabled. If set to nil, the + ANSI colors will not be enabled. If set to auto, the ANSI colors + will be enabled if a major mode has been detected from the + `rainbow-ansi-colors-major-mode-list'." + :type '(choice (symbol :tag "enable in certain modes" auto) + (symbol :tag "enable globally" t) + (symbol :tag "disable" nil)) + :group 'rainbow) + + ;;; R colors + + (defvar rainbow-r-colors-font-lock-keywords nil + "Font-lock keywords to add for R colors.") + (make-variable-buffer-local 'rainbow-r-colors-font-lock-keywords) + + ;; use the following code to generate the list in R + ;; output_colors <- function(colors) {for(color in colors) {col <- col2rgb(color); cat(sprintf("(\"%s\" . \"#%02X%02X%02X\")\n",color,col[1],col[2],col[3]));}} + ;; output_colors(colors()) + (defcustom rainbow-r-colors-alist + '(("white" . "#FFFFFF") + ("aliceblue" . "#F0F8FF") + ("antiquewhite" . "#FAEBD7") + ("antiquewhite1" . "#FFEFDB") + ("antiquewhite2" . "#EEDFCC") + ("antiquewhite3" . "#CDC0B0") + ("antiquewhite4" . "#8B8378") + ("aquamarine" . "#7FFFD4") + ("aquamarine1" . "#7FFFD4") + ("aquamarine2" . "#76EEC6") + ("aquamarine3" . "#66CDAA") + ("aquamarine4" . "#458B74") + ("azure" . "#F0FFFF") + ("azure1" . "#F0FFFF") + ("azure2" . "#E0EEEE") + ("azure3" . "#C1CDCD") + ("azure4" . "#838B8B") + ("beige" . "#F5F5DC") + ("bisque" . "#FFE4C4") + ("bisque1" . "#FFE4C4") + ("bisque2" . "#EED5B7") + ("bisque3" . "#CDB79E") + ("bisque4" . "#8B7D6B") + ("black" . "#000000") + ("blanchedalmond" . "#FFEBCD") + ("blue" . "#0000FF") + ("blue1" . "#0000FF") + ("blue2" . "#0000EE") + ("blue3" . "#0000CD") + ("blue4" . "#00008B") + ("blueviolet" . "#8A2BE2") + ("brown" . "#A52A2A") + ("brown1" . "#FF4040") + ("brown2" . "#EE3B3B") + ("brown3" . "#CD3333") + ("brown4" . "#8B2323") + ("burlywood" . "#DEB887") + ("burlywood1" . "#FFD39B") + ("burlywood2" . "#EEC591") + ("burlywood3" . "#CDAA7D") + ("burlywood4" . "#8B7355") + ("cadetblue" . "#5F9EA0") + ("cadetblue1" . "#98F5FF") + ("cadetblue2" . "#8EE5EE") + ("cadetblue3" . "#7AC5CD") + ("cadetblue4" . "#53868B") + ("chartreuse" . "#7FFF00") + ("chartreuse1" . "#7FFF00") + ("chartreuse2" . "#76EE00") + ("chartreuse3" . "#66CD00") + ("chartreuse4" . "#458B00") + ("chocolate" . "#D2691E") + ("chocolate1" . "#FF7F24") + ("chocolate2" . "#EE7621") + ("chocolate3" . "#CD661D") + ("chocolate4" . "#8B4513") + ("coral" . "#FF7F50") + ("coral1" . "#FF7256") + ("coral2" . "#EE6A50") + ("coral3" . "#CD5B45") + ("coral4" . "#8B3E2F") + ("cornflowerblue" . "#6495ED") + ("cornsilk" . "#FFF8DC") + ("cornsilk1" . "#FFF8DC") + ("cornsilk2" . "#EEE8CD") + ("cornsilk3" . "#CDC8B1") + ("cornsilk4" . "#8B8878") + ("cyan" . "#00FFFF") + ("cyan1" . "#00FFFF") + ("cyan2" . "#00EEEE") + ("cyan3" . "#00CDCD") + ("cyan4" . "#008B8B") + ("darkblue" . "#00008B") + ("darkcyan" . "#008B8B") + ("darkgoldenrod" . "#B8860B") + ("darkgoldenrod1" . "#FFB90F") + ("darkgoldenrod2" . "#EEAD0E") + ("darkgoldenrod3" . "#CD950C") + ("darkgoldenrod4" . "#8B6508") + ("darkgray" . "#A9A9A9") + ("darkgreen" . "#006400") + ("darkgrey" . "#A9A9A9") + ("darkkhaki" . "#BDB76B") + ("darkmagenta" . "#8B008B") + ("darkolivegreen" . "#556B2F") + ("darkolivegreen1" . "#CAFF70") + ("darkolivegreen2" . "#BCEE68") + ("darkolivegreen3" . "#A2CD5A") + ("darkolivegreen4" . "#6E8B3D") + ("darkorange" . "#FF8C00") + ("darkorange1" . "#FF7F00") + ("darkorange2" . "#EE7600") + ("darkorange3" . "#CD6600") + ("darkorange4" . "#8B4500") + ("darkorchid" . "#9932CC") + ("darkorchid1" . "#BF3EFF") + ("darkorchid2" . "#B23AEE") + ("darkorchid3" . "#9A32CD") + ("darkorchid4" . "#68228B") + ("darkred" . "#8B0000") + ("darksalmon" . "#E9967A") + ("darkseagreen" . "#8FBC8F") + ("darkseagreen1" . "#C1FFC1") + ("darkseagreen2" . "#B4EEB4") + ("darkseagreen3" . "#9BCD9B") + ("darkseagreen4" . "#698B69") + ("darkslateblue" . "#483D8B") + ("darkslategray" . "#2F4F4F") + ("darkslategray1" . "#97FFFF") + ("darkslategray2" . "#8DEEEE") + ("darkslategray3" . "#79CDCD") + ("darkslategray4" . "#528B8B") + ("darkslategrey" . "#2F4F4F") + ("darkturquoise" . "#00CED1") + ("darkviolet" . "#9400D3") + ("deeppink" . "#FF1493") + ("deeppink1" . "#FF1493") + ("deeppink2" . "#EE1289") + ("deeppink3" . "#CD1076") + ("deeppink4" . "#8B0A50") + ("deepskyblue" . "#00BFFF") + ("deepskyblue1" . "#00BFFF") + ("deepskyblue2" . "#00B2EE") + ("deepskyblue3" . "#009ACD") + ("deepskyblue4" . "#00688B") + ("dimgray" . "#696969") + ("dimgrey" . "#696969") + ("dodgerblue" . "#1E90FF") + ("dodgerblue1" . "#1E90FF") + ("dodgerblue2" . "#1C86EE") + ("dodgerblue3" . "#1874CD") + ("dodgerblue4" . "#104E8B") + ("firebrick" . "#B22222") + ("firebrick1" . "#FF3030") + ("firebrick2" . "#EE2C2C") + ("firebrick3" . "#CD2626") + ("firebrick4" . "#8B1A1A") + ("floralwhite" . "#FFFAF0") + ("forestgreen" . "#228B22") + ("gainsboro" . "#DCDCDC") + ("ghostwhite" . "#F8F8FF") + ("gold" . "#FFD700") + ("gold1" . "#FFD700") + ("gold2" . "#EEC900") + ("gold3" . "#CDAD00") + ("gold4" . "#8B7500") + ("goldenrod" . "#DAA520") + ("goldenrod1" . "#FFC125") + ("goldenrod2" . "#EEB422") + ("goldenrod3" . "#CD9B1D") + ("goldenrod4" . "#8B6914") + ("gray" . "#BEBEBE") + ("gray0" . "#000000") + ("gray1" . "#030303") + ("gray2" . "#050505") + ("gray3" . "#080808") + ("gray4" . "#0A0A0A") + ("gray5" . "#0D0D0D") + ("gray6" . "#0F0F0F") + ("gray7" . "#121212") + ("gray8" . "#141414") + ("gray9" . "#171717") + ("gray10" . "#1A1A1A") + ("gray11" . "#1C1C1C") + ("gray12" . "#1F1F1F") + ("gray13" . "#212121") + ("gray14" . "#242424") + ("gray15" . "#262626") + ("gray16" . "#292929") + ("gray17" . "#2B2B2B") + ("gray18" . "#2E2E2E") + ("gray19" . "#303030") + ("gray20" . "#333333") + ("gray21" . "#363636") + ("gray22" . "#383838") + ("gray23" . "#3B3B3B") + ("gray24" . "#3D3D3D") + ("gray25" . "#404040") + ("gray26" . "#424242") + ("gray27" . "#454545") + ("gray28" . "#474747") + ("gray29" . "#4A4A4A") + ("gray30" . "#4D4D4D") + ("gray31" . "#4F4F4F") + ("gray32" . "#525252") + ("gray33" . "#545454") + ("gray34" . "#575757") + ("gray35" . "#595959") + ("gray36" . "#5C5C5C") + ("gray37" . "#5E5E5E") + ("gray38" . "#616161") + ("gray39" . "#636363") + ("gray40" . "#666666") + ("gray41" . "#696969") + ("gray42" . "#6B6B6B") + ("gray43" . "#6E6E6E") + ("gray44" . "#707070") + ("gray45" . "#737373") + ("gray46" . "#757575") + ("gray47" . "#787878") + ("gray48" . "#7A7A7A") + ("gray49" . "#7D7D7D") + ("gray50" . "#7F7F7F") + ("gray51" . "#828282") + ("gray52" . "#858585") + ("gray53" . "#878787") + ("gray54" . "#8A8A8A") + ("gray55" . "#8C8C8C") + ("gray56" . "#8F8F8F") + ("gray57" . "#919191") + ("gray58" . "#949494") + ("gray59" . "#969696") + ("gray60" . "#999999") + ("gray61" . "#9C9C9C") + ("gray62" . "#9E9E9E") + ("gray63" . "#A1A1A1") + ("gray64" . "#A3A3A3") + ("gray65" . "#A6A6A6") + ("gray66" . "#A8A8A8") + ("gray67" . "#ABABAB") + ("gray68" . "#ADADAD") + ("gray69" . "#B0B0B0") + ("gray70" . "#B3B3B3") + ("gray71" . "#B5B5B5") + ("gray72" . "#B8B8B8") + ("gray73" . "#BABABA") + ("gray74" . "#BDBDBD") + ("gray75" . "#BFBFBF") + ("gray76" . "#C2C2C2") + ("gray77" . "#C4C4C4") + ("gray78" . "#C7C7C7") + ("gray79" . "#C9C9C9") + ("gray80" . "#CCCCCC") + ("gray81" . "#CFCFCF") + ("gray82" . "#D1D1D1") + ("gray83" . "#D4D4D4") + ("gray84" . "#D6D6D6") + ("gray85" . "#D9D9D9") + ("gray86" . "#DBDBDB") + ("gray87" . "#DEDEDE") + ("gray88" . "#E0E0E0") + ("gray89" . "#E3E3E3") + ("gray90" . "#E5E5E5") + ("gray91" . "#E8E8E8") + ("gray92" . "#EBEBEB") + ("gray93" . "#EDEDED") + ("gray94" . "#F0F0F0") + ("gray95" . "#F2F2F2") + ("gray96" . "#F5F5F5") + ("gray97" . "#F7F7F7") + ("gray98" . "#FAFAFA") + ("gray99" . "#FCFCFC") + ("gray100" . "#FFFFFF") + ("green" . "#00FF00") + ("green1" . "#00FF00") + ("green2" . "#00EE00") + ("green3" . "#00CD00") + ("green4" . "#008B00") + ("greenyellow" . "#ADFF2F") + ("grey" . "#BEBEBE") + ("grey0" . "#000000") + ("grey1" . "#030303") + ("grey2" . "#050505") + ("grey3" . "#080808") + ("grey4" . "#0A0A0A") + ("grey5" . "#0D0D0D") + ("grey6" . "#0F0F0F") + ("grey7" . "#121212") + ("grey8" . "#141414") + ("grey9" . "#171717") + ("grey10" . "#1A1A1A") + ("grey11" . "#1C1C1C") + ("grey12" . "#1F1F1F") + ("grey13" . "#212121") + ("grey14" . "#242424") + ("grey15" . "#262626") + ("grey16" . "#292929") + ("grey17" . "#2B2B2B") + ("grey18" . "#2E2E2E") + ("grey19" . "#303030") + ("grey20" . "#333333") + ("grey21" . "#363636") + ("grey22" . "#383838") + ("grey23" . "#3B3B3B") + ("grey24" . "#3D3D3D") + ("grey25" . "#404040") + ("grey26" . "#424242") + ("grey27" . "#454545") + ("grey28" . "#474747") + ("grey29" . "#4A4A4A") + ("grey30" . "#4D4D4D") + ("grey31" . "#4F4F4F") + ("grey32" . "#525252") + ("grey33" . "#545454") + ("grey34" . "#575757") + ("grey35" . "#595959") + ("grey36" . "#5C5C5C") + ("grey37" . "#5E5E5E") + ("grey38" . "#616161") + ("grey39" . "#636363") + ("grey40" . "#666666") + ("grey41" . "#696969") + ("grey42" . "#6B6B6B") + ("grey43" . "#6E6E6E") + ("grey44" . "#707070") + ("grey45" . "#737373") + ("grey46" . "#757575") + ("grey47" . "#787878") + ("grey48" . "#7A7A7A") + ("grey49" . "#7D7D7D") + ("grey50" . "#7F7F7F") + ("grey51" . "#828282") + ("grey52" . "#858585") + ("grey53" . "#878787") + ("grey54" . "#8A8A8A") + ("grey55" . "#8C8C8C") + ("grey56" . "#8F8F8F") + ("grey57" . "#919191") + ("grey58" . "#949494") + ("grey59" . "#969696") + ("grey60" . "#999999") + ("grey61" . "#9C9C9C") + ("grey62" . "#9E9E9E") + ("grey63" . "#A1A1A1") + ("grey64" . "#A3A3A3") + ("grey65" . "#A6A6A6") + ("grey66" . "#A8A8A8") + ("grey67" . "#ABABAB") + ("grey68" . "#ADADAD") + ("grey69" . "#B0B0B0") + ("grey70" . "#B3B3B3") + ("grey71" . "#B5B5B5") + ("grey72" . "#B8B8B8") + ("grey73" . "#BABABA") + ("grey74" . "#BDBDBD") + ("grey75" . "#BFBFBF") + ("grey76" . "#C2C2C2") + ("grey77" . "#C4C4C4") + ("grey78" . "#C7C7C7") + ("grey79" . "#C9C9C9") + ("grey80" . "#CCCCCC") + ("grey81" . "#CFCFCF") + ("grey82" . "#D1D1D1") + ("grey83" . "#D4D4D4") + ("grey84" . "#D6D6D6") + ("grey85" . "#D9D9D9") + ("grey86" . "#DBDBDB") + ("grey87" . "#DEDEDE") + ("grey88" . "#E0E0E0") + ("grey89" . "#E3E3E3") + ("grey90" . "#E5E5E5") + ("grey91" . "#E8E8E8") + ("grey92" . "#EBEBEB") + ("grey93" . "#EDEDED") + ("grey94" . "#F0F0F0") + ("grey95" . "#F2F2F2") + ("grey96" . "#F5F5F5") + ("grey97" . "#F7F7F7") + ("grey98" . "#FAFAFA") + ("grey99" . "#FCFCFC") + ("grey100" . "#FFFFFF") + ("honeydew" . "#F0FFF0") + ("honeydew1" . "#F0FFF0") + ("honeydew2" . "#E0EEE0") + ("honeydew3" . "#C1CDC1") + ("honeydew4" . "#838B83") + ("hotpink" . "#FF69B4") + ("hotpink1" . "#FF6EB4") + ("hotpink2" . "#EE6AA7") + ("hotpink3" . "#CD6090") + ("hotpink4" . "#8B3A62") + ("indianred" . "#CD5C5C") + ("indianred1" . "#FF6A6A") + ("indianred2" . "#EE6363") + ("indianred3" . "#CD5555") + ("indianred4" . "#8B3A3A") + ("ivory" . "#FFFFF0") + ("ivory1" . "#FFFFF0") + ("ivory2" . "#EEEEE0") + ("ivory3" . "#CDCDC1") + ("ivory4" . "#8B8B83") + ("khaki" . "#F0E68C") + ("khaki1" . "#FFF68F") + ("khaki2" . "#EEE685") + ("khaki3" . "#CDC673") + ("khaki4" . "#8B864E") + ("lavender" . "#E6E6FA") + ("lavenderblush" . "#FFF0F5") + ("lavenderblush1" . "#FFF0F5") + ("lavenderblush2" . "#EEE0E5") + ("lavenderblush3" . "#CDC1C5") + ("lavenderblush4" . "#8B8386") + ("lawngreen" . "#7CFC00") + ("lemonchiffon" . "#FFFACD") + ("lemonchiffon1" . "#FFFACD") + ("lemonchiffon2" . "#EEE9BF") + ("lemonchiffon3" . "#CDC9A5") + ("lemonchiffon4" . "#8B8970") + ("lightblue" . "#ADD8E6") + ("lightblue1" . "#BFEFFF") + ("lightblue2" . "#B2DFEE") + ("lightblue3" . "#9AC0CD") + ("lightblue4" . "#68838B") + ("lightcoral" . "#F08080") + ("lightcyan" . "#E0FFFF") + ("lightcyan1" . "#E0FFFF") + ("lightcyan2" . "#D1EEEE") + ("lightcyan3" . "#B4CDCD") + ("lightcyan4" . "#7A8B8B") + ("lightgoldenrod" . "#EEDD82") + ("lightgoldenrod1" . "#FFEC8B") + ("lightgoldenrod2" . "#EEDC82") + ("lightgoldenrod3" . "#CDBE70") + ("lightgoldenrod4" . "#8B814C") + ("lightgoldenrodyellow" . "#FAFAD2") + ("lightgray" . "#D3D3D3") + ("lightgreen" . "#90EE90") + ("lightgrey" . "#D3D3D3") + ("lightpink" . "#FFB6C1") + ("lightpink1" . "#FFAEB9") + ("lightpink2" . "#EEA2AD") + ("lightpink3" . "#CD8C95") + ("lightpink4" . "#8B5F65") + ("lightsalmon" . "#FFA07A") + ("lightsalmon1" . "#FFA07A") + ("lightsalmon2" . "#EE9572") + ("lightsalmon3" . "#CD8162") + ("lightsalmon4" . "#8B5742") + ("lightseagreen" . "#20B2AA") + ("lightskyblue" . "#87CEFA") + ("lightskyblue1" . "#B0E2FF") + ("lightskyblue2" . "#A4D3EE") + ("lightskyblue3" . "#8DB6CD") + ("lightskyblue4" . "#607B8B") + ("lightslateblue" . "#8470FF") + ("lightslategray" . "#778899") + ("lightslategrey" . "#778899") + ("lightsteelblue" . "#B0C4DE") + ("lightsteelblue1" . "#CAE1FF") + ("lightsteelblue2" . "#BCD2EE") + ("lightsteelblue3" . "#A2B5CD") + ("lightsteelblue4" . "#6E7B8B") + ("lightyellow" . "#FFFFE0") + ("lightyellow1" . "#FFFFE0") + ("lightyellow2" . "#EEEED1") + ("lightyellow3" . "#CDCDB4") + ("lightyellow4" . "#8B8B7A") + ("limegreen" . "#32CD32") + ("linen" . "#FAF0E6") + ("magenta" . "#FF00FF") + ("magenta1" . "#FF00FF") + ("magenta2" . "#EE00EE") + ("magenta3" . "#CD00CD") + ("magenta4" . "#8B008B") + ("maroon" . "#B03060") + ("maroon1" . "#FF34B3") + ("maroon2" . "#EE30A7") + ("maroon3" . "#CD2990") + ("maroon4" . "#8B1C62") + ("mediumaquamarine" . "#66CDAA") + ("mediumblue" . "#0000CD") + ("mediumorchid" . "#BA55D3") + ("mediumorchid1" . "#E066FF") + ("mediumorchid2" . "#D15FEE") + ("mediumorchid3" . "#B452CD") + ("mediumorchid4" . "#7A378B") + ("mediumpurple" . "#9370DB") + ("mediumpurple1" . "#AB82FF") + ("mediumpurple2" . "#9F79EE") + ("mediumpurple3" . "#8968CD") + ("mediumpurple4" . "#5D478B") + ("mediumseagreen" . "#3CB371") + ("mediumslateblue" . "#7B68EE") + ("mediumspringgreen" . "#00FA9A") + ("mediumturquoise" . "#48D1CC") + ("mediumvioletred" . "#C71585") + ("midnightblue" . "#191970") + ("mintcream" . "#F5FFFA") + ("mistyrose" . "#FFE4E1") + ("mistyrose1" . "#FFE4E1") + ("mistyrose2" . "#EED5D2") + ("mistyrose3" . "#CDB7B5") + ("mistyrose4" . "#8B7D7B") + ("moccasin" . "#FFE4B5") + ("navajowhite" . "#FFDEAD") + ("navajowhite1" . "#FFDEAD") + ("navajowhite2" . "#EECFA1") + ("navajowhite3" . "#CDB38B") + ("navajowhite4" . "#8B795E") + ("navy" . "#000080") + ("navyblue" . "#000080") + ("oldlace" . "#FDF5E6") + ("olivedrab" . "#6B8E23") + ("olivedrab1" . "#C0FF3E") + ("olivedrab2" . "#B3EE3A") + ("olivedrab3" . "#9ACD32") + ("olivedrab4" . "#698B22") + ("orange" . "#FFA500") + ("orange1" . "#FFA500") + ("orange2" . "#EE9A00") + ("orange3" . "#CD8500") + ("orange4" . "#8B5A00") + ("orangered" . "#FF4500") + ("orangered1" . "#FF4500") + ("orangered2" . "#EE4000") + ("orangered3" . "#CD3700") + ("orangered4" . "#8B2500") + ("orchid" . "#DA70D6") + ("orchid1" . "#FF83FA") + ("orchid2" . "#EE7AE9") + ("orchid3" . "#CD69C9") + ("orchid4" . "#8B4789") + ("palegoldenrod" . "#EEE8AA") + ("palegreen" . "#98FB98") + ("palegreen1" . "#9AFF9A") + ("palegreen2" . "#90EE90") + ("palegreen3" . "#7CCD7C") + ("palegreen4" . "#548B54") + ("paleturquoise" . "#AFEEEE") + ("paleturquoise1" . "#BBFFFF") + ("paleturquoise2" . "#AEEEEE") + ("paleturquoise3" . "#96CDCD") + ("paleturquoise4" . "#668B8B") + ("palevioletred" . "#DB7093") + ("palevioletred1" . "#FF82AB") + ("palevioletred2" . "#EE799F") + ("palevioletred3" . "#CD6889") + ("palevioletred4" . "#8B475D") + ("papayawhip" . "#FFEFD5") + ("peachpuff" . "#FFDAB9") + ("peachpuff1" . "#FFDAB9") + ("peachpuff2" . "#EECBAD") + ("peachpuff3" . "#CDAF95") + ("peachpuff4" . "#8B7765") + ("peru" . "#CD853F") + ("pink" . "#FFC0CB") + ("pink1" . "#FFB5C5") + ("pink2" . "#EEA9B8") + ("pink3" . "#CD919E") + ("pink4" . "#8B636C") + ("plum" . "#DDA0DD") + ("plum1" . "#FFBBFF") + ("plum2" . "#EEAEEE") + ("plum3" . "#CD96CD") + ("plum4" . "#8B668B") + ("powderblue" . "#B0E0E6") + ("purple" . "#A020F0") + ("purple1" . "#9B30FF") + ("purple2" . "#912CEE") + ("purple3" . "#7D26CD") + ("purple4" . "#551A8B") + ("red" . "#FF0000") + ("red1" . "#FF0000") + ("red2" . "#EE0000") + ("red3" . "#CD0000") + ("red4" . "#8B0000") + ("rosybrown" . "#BC8F8F") + ("rosybrown1" . "#FFC1C1") + ("rosybrown2" . "#EEB4B4") + ("rosybrown3" . "#CD9B9B") + ("rosybrown4" . "#8B6969") + ("royalblue" . "#4169E1") + ("royalblue1" . "#4876FF") + ("royalblue2" . "#436EEE") + ("royalblue3" . "#3A5FCD") + ("royalblue4" . "#27408B") + ("saddlebrown" . "#8B4513") + ("salmon" . "#FA8072") + ("salmon1" . "#FF8C69") + ("salmon2" . "#EE8262") + ("salmon3" . "#CD7054") + ("salmon4" . "#8B4C39") + ("sandybrown" . "#F4A460") + ("seagreen" . "#2E8B57") + ("seagreen1" . "#54FF9F") + ("seagreen2" . "#4EEE94") + ("seagreen3" . "#43CD80") + ("seagreen4" . "#2E8B57") + ("seashell" . "#FFF5EE") + ("seashell1" . "#FFF5EE") + ("seashell2" . "#EEE5DE") + ("seashell3" . "#CDC5BF") + ("seashell4" . "#8B8682") + ("sienna" . "#A0522D") + ("sienna1" . "#FF8247") + ("sienna2" . "#EE7942") + ("sienna3" . "#CD6839") + ("sienna4" . "#8B4726") + ("skyblue" . "#87CEEB") + ("skyblue1" . "#87CEFF") + ("skyblue2" . "#7EC0EE") + ("skyblue3" . "#6CA6CD") + ("skyblue4" . "#4A708B") + ("slateblue" . "#6A5ACD") + ("slateblue1" . "#836FFF") + ("slateblue2" . "#7A67EE") + ("slateblue3" . "#6959CD") + ("slateblue4" . "#473C8B") + ("slategray" . "#708090") + ("slategray1" . "#C6E2FF") + ("slategray2" . "#B9D3EE") + ("slategray3" . "#9FB6CD") + ("slategray4" . "#6C7B8B") + ("slategrey" . "#708090") + ("snow" . "#FFFAFA") + ("snow1" . "#FFFAFA") + ("snow2" . "#EEE9E9") + ("snow3" . "#CDC9C9") + ("snow4" . "#8B8989") + ("springgreen" . "#00FF7F") + ("springgreen1" . "#00FF7F") + ("springgreen2" . "#00EE76") + ("springgreen3" . "#00CD66") + ("springgreen4" . "#008B45") + ("steelblue" . "#4682B4") + ("steelblue1" . "#63B8FF") + ("steelblue2" . "#5CACEE") + ("steelblue3" . "#4F94CD") + ("steelblue4" . "#36648B") + ("tan" . "#D2B48C") + ("tan1" . "#FFA54F") + ("tan2" . "#EE9A49") + ("tan3" . "#CD853F") + ("tan4" . "#8B5A2B") + ("thistle" . "#D8BFD8") + ("thistle1" . "#FFE1FF") + ("thistle2" . "#EED2EE") + ("thistle3" . "#CDB5CD") + ("thistle4" . "#8B7B8B") + ("tomato" . "#FF6347") + ("tomato1" . "#FF6347") + ("tomato2" . "#EE5C42") + ("tomato3" . "#CD4F39") + ("tomato4" . "#8B3626") + ("turquoise" . "#40E0D0") + ("turquoise1" . "#00F5FF") + ("turquoise2" . "#00E5EE") + ("turquoise3" . "#00C5CD") + ("turquoise4" . "#00868B") + ("violet" . "#EE82EE") + ("violetred" . "#D02090") + ("violetred1" . "#FF3E96") + ("violetred2" . "#EE3A8C") + ("violetred3" . "#CD3278") + ("violetred4" . "#8B2252") + ("wheat" . "#F5DEB3") + ("wheat1" . "#FFE7BA") + ("wheat2" . "#EED8AE") + ("wheat3" . "#CDBA96") + ("wheat4" . "#8B7E66") + ("whitesmoke" . "#F5F5F5") + ("yellow" . "#FFFF00") + ("yellow1" . "#FFFF00") + ("yellow2" . "#EEEE00") + ("yellow3" . "#CDCD00") + ("yellow4" . "#8B8B00") + ("yellowgreen" . "#9ACD32")) + "Alist of R colors. + Each entry should have the form (COLOR-NAME . HEXADECIMAL-COLOR)." + :type 'alist + :group 'rainbow) + + (defcustom rainbow-r-colors-major-mode-list + '(ess-mode) + "List of major mode where R colors are enabled when + `rainbow-r-colors' is set to auto." + :type '(repeat (symbol :tag "Major-Mode")) + :group 'rainbow) + + (defcustom rainbow-r-colors 'auto + "When to enable R colors. + If set to t, the R colors will be enabled. If set to nil, the + R colors will not be enabled. If set to auto, the R colors + will be enabled if a major mode has been detected from the + `rainbow-r-colors-major-mode-list'." + :type '(choice (symbol :tag "enable in certain modes" auto) + (symbol :tag "enable globally" t) + (symbol :tag "disable" nil)) + :group 'rainbow) + + ;;; Functions + + (defun rainbow-colorize-match (color &optional match) + "Return a matched string propertized with a face whose + background is COLOR. The foreground is computed using + `rainbow-color-luminance', and is either white or black." + (let ((match (or match 0))) + (put-text-property + (match-beginning match) (match-end match) + 'face `((:foreground ,(if (> 0.5 (rainbow-x-color-luminance color)) + "white" "black")) + (:background ,color))))) + + (defun rainbow-colorize-itself (&optional match) + "Colorize a match with itself." + (rainbow-colorize-match (match-string-no-properties (or match 0)) match)) + + (defun rainbow-colorize-hexadecimal-without-sharp () + "Colorize an hexadecimal colors and prepend # to it." + (rainbow-colorize-match (concat "#" (match-string-no-properties 1)))) + + (defun rainbow-colorize-by-assoc (assoc-list) + "Colorize a match with its association from ASSOC-LIST." + (rainbow-colorize-match (cdr (assoc-string (match-string-no-properties 0) + assoc-list t)))) + + (defun rainbow-rgb-relative-to-absolute (number) + "Convert a relative NUMBER to absolute. If NUMBER is absolute, return NUMBER. + This will convert \"80 %\" to 204, \"100 %\" to 255 but \"123\" to \"123\". + If the percentage value is above 100, it's converted to 100." + (let ((string-length (- (length number) 1))) + ;; Is this a number with %? + (if (eq (elt number string-length) ?%) + (/ (* (min (string-to-number (substring number 0 string-length)) 100) 255) 100) + (string-to-number number)))) + + (defun rainbow-colorize-hsl () + "Colorize a match with itself." + (let ((h (/ (string-to-number (match-string-no-properties 1)) 360.0)) + (s (/ (string-to-number (match-string-no-properties 2)) 100.0)) + (l (/ (string-to-number (match-string-no-properties 3)) 100.0))) + (rainbow-colorize-match + (multiple-value-bind (r g b) + (color-hsl-to-rgb h s l) + (format "#%02X%02X%02X" (* r 255) (* g 255) (* b 255)))))) + + (defun rainbow-colorize-rgb () + "Colorize a match with itself." + (let ((r (rainbow-rgb-relative-to-absolute (match-string-no-properties 1))) + (g (rainbow-rgb-relative-to-absolute (match-string-no-properties 2))) + (b (rainbow-rgb-relative-to-absolute (match-string-no-properties 3)))) + (rainbow-colorize-match (format "#%02X%02X%02X" r g b)))) + + (defun rainbow-colorize-rgb-float () + "Colorize a match with itself, with relative value." + (let ((r (* (string-to-number (match-string-no-properties 1)) 255.0)) + (g (* (string-to-number (match-string-no-properties 2)) 255.0)) + (b (* (string-to-number (match-string-no-properties 3)) 255.0))) + (rainbow-colorize-match (format "#%02X%02X%02X" r g b)))) + + (defvar ansi-color-context) + (defvar xterm-color-current) + + (defun rainbow-colorize-ansi () + "Return a matched string propertized with ansi color face." + (let ((xterm-color? (featurep 'xterm-color)) + (string (match-string-no-properties 0)) + color) + (save-match-data + (let* ((replaced (concat + (replace-regexp-in-string + "^\\(\\\\[eE]\\|\\\\033\\|\\\\x1[bB]\\)" + "\033" string) "x")) + xterm-color-current + ansi-color-context + (applied (funcall (if xterm-color? + 'xterm-color-filter + 'ansi-color-apply) + replaced)) + (face-property (get-text-property + 0 + (if xterm-color? 'face 'font-lock-face) + applied))) + (unless (listp (or (car-safe face-property) face-property)) + (setq face-property (list face-property))) + (setq color (funcall (if xterm-color? 'cadr 'cdr) + (or (assq (if xterm-color? + :foreground + 'foreground-color) + face-property) + (assq (if xterm-color? + :background + 'background-color) + face-property)))))) + (when color + (rainbow-colorize-match color)))) + + (defun rainbow-color-luminance (red green blue) + "Calculate the luminance of color composed of RED, GREEN and BLUE. + Return a value between 0 and 1." + (/ (+ (* .2126 red) (* .7152 green) (* .0722 blue)) 256)) + + (defun rainbow-x-color-luminance (color) + "Calculate the luminance of a color string (e.g. \"#ffaa00\", \"blue\"). + Return a value between 0 and 1." + (let* ((values (x-color-values color)) + (r (/ (car values) 256.0)) + (g (/ (cadr values) 256.0)) + (b (/ (caddr values) 256.0))) + (rainbow-color-luminance r g b))) + + ;;; Mode + + (defun rainbow-turn-on () + "Turn on raibow-mode." + (font-lock-add-keywords nil + rainbow-hexadecimal-colors-font-lock-keywords + t) + ;; Activate X colors? + (when (or (eq rainbow-x-colors t) + (and (eq rainbow-x-colors 'auto) + (memq major-mode rainbow-x-colors-major-mode-list))) + (font-lock-add-keywords nil + rainbow-x-colors-font-lock-keywords + t)) + ;; Activate LaTeX colors? + (when (or (eq rainbow-latex-colors t) + (and (eq rainbow-latex-colors 'auto) + (memq major-mode rainbow-latex-colors-major-mode-list))) + (font-lock-add-keywords nil + rainbow-latex-rgb-colors-font-lock-keywords + t)) + ;; Activate ANSI colors? + (when (or (eq rainbow-ansi-colors t) + (and (eq rainbow-ansi-colors 'auto) + (memq major-mode rainbow-ansi-colors-major-mode-list))) + (font-lock-add-keywords nil + rainbow-ansi-colors-font-lock-keywords + t)) + ;; Activate HTML colors? + (when (or (eq rainbow-html-colors t) + (and (eq rainbow-html-colors 'auto) + (memq major-mode rainbow-html-colors-major-mode-list))) + (setq rainbow-html-colors-font-lock-keywords + `((,(regexp-opt (mapcar 'car rainbow-html-colors-alist) 'words) + (0 (rainbow-colorize-by-assoc rainbow-html-colors-alist))))) + (font-lock-add-keywords nil + `(,@rainbow-html-colors-font-lock-keywords + ,@rainbow-html-rgb-colors-font-lock-keywords) + t)) + ;; Activate R colors? + (when (or (eq rainbow-r-colors t) + (and (eq rainbow-r-colors 'auto) + (memq major-mode rainbow-r-colors-major-mode-list))) + (setq rainbow-r-colors-font-lock-keywords + `((,(regexp-opt (mapcar 'car rainbow-r-colors-alist) 'words) + (0 (rainbow-colorize-by-assoc rainbow-r-colors-alist))))) + (font-lock-add-keywords nil + rainbow-r-colors-font-lock-keywords + t))) + + (defun rainbow-turn-off () + "Turn off rainbow-mode." + (font-lock-remove-keywords + nil + `(,@rainbow-hexadecimal-colors-font-lock-keywords + ,@rainbow-x-colors-font-lock-keywords + ,@rainbow-latex-rgb-colors-font-lock-keywords + ,@rainbow-r-colors-font-lock-keywords + ,@rainbow-html-colors-font-lock-keywords + ,@rainbow-html-rgb-colors-font-lock-keywords))) + + ;;;###autoload + (define-minor-mode rainbow-mode + "Colorize strings that represent colors. + This will fontify with colors the string like \"#aabbcc\" or \"blue\"." + :lighter " Rbow" + (progn + (if rainbow-mode + (rainbow-turn-on) + (rainbow-turn-off)) + ;; Call font-lock-mode to refresh the buffer when used e.g. interactively + (font-lock-mode 1))) + + ;;;; ChangeLog: + + ;; 2018-05-21 Julien Danjou + ;; + ;; * rainbow-mode/rainbow-mode.el: do not fail if face-property is a symbol + ;; + ;; It turns out there are cases when `face-property' can be just a symbol + ;; and we need to protect our selves from that, i.e. `car' should not fail. + ;; Hence, + ;; `car-safe' is there and if it's `nil', then fall back to `face-property' + ;; as is. + ;; + ;; See https://github.com/tarsius/hl-todo/issues/17 + ;; + ;; 2018-03-26 Julien Danjou + ;; + ;; rainbow-mode: release 1.0 + ;; + ;; 2018-03-26 Jonas Bernoulli + ;; + ;; Allow outline-minor-mode to find section headings + ;; + ;; 2018-03-26 Jonas Bernoulli + ;; + ;; Set type of customizable options + ;; + ;; 2018-03-26 Jonas Bernoulli + ;; + ;; Enforce use of spaces for indentation + ;; + ;; Also untabify some code added by a contributor who, unlike you, has not + ;; globally set `indent-tabs-mode' to nil. + ;; + ;; 2017-05-29 Julien Danjou + ;; + ;; Fix `rainbow-color-luminance' docstring + ;; + ;; 2015-10-12 Julien Danjou + ;; + ;; rainbow: add font-lock at the end + ;; + ;; See https://github.com/fxbois/web-mode/issues/612 + ;; + ;; 2015-03-06 Julien Danjou + ;; + ;; rainbow: fix font-lock-mode refresh + ;; + ;; 2014-10-15 Stefan Monnier + ;; + ;; * packages/rainbow-mode/rainbow-mode.el (ansi-color-context) + ;; (xterm-color-current): Declare. + ;; + ;; 2014-09-07 Julien Danjou + ;; + ;; rainbow-mode: support float in CSS and limit to 100% + ;; + ;; 2013-08-05 Julien Danjou + ;; + ;; rainbow-mode: 0.9, allow spaces in LaTeX colors + ;; + ;; 2013-05-03 Julien Danjou + ;; + ;; rainbow-mode: add support for R, bump version to 0.8 + ;; + ;; Signed-off-by: Julien Danjou + ;; + ;; 2013-02-26 Julien Danjou + ;; + ;; rainbow-mode: version 0.7 + ;; + ;; * rainbow-mode.el: don't activate font-lock-mode + ;; + ;; 2012-12-11 Julien Danjou + ;; + ;; * rainbow-mode: update to 0.6, add support for ANSI coloring + ;; + ;; 2012-11-26 Julien Danjou + ;; + ;; rainbow-mode: fix some LaTex docstrings + ;; + ;; 2012-11-14 Julien Danjou + ;; + ;; rainbow-mode: version 0.5 + ;; + ;; * rainbow-mode.el: fix syntax error on + ;; `rainbow-hexadecimal-colors-font-lock-keywords'. + ;; + ;; 2012-11-09 Julien Danjou + ;; + ;; rainbow-mode: version 0.4 + ;; + ;; * rainbow-mode.el: Use functions from color package to colorize HSL + ;; rather + ;; than our own copy. + ;; + ;; 2012-11-09 Julien Danjou + ;; + ;; rainbow-mode 0.3 + ;; + ;; * rainbow-mode.el: avoid colorizing HTML entities + ;; + ;; 2011-09-23 Julien Danjou + ;; + ;; Update rainbow-mode to version 0.2 + ;; + ;; 2011-07-01 Chong Yidong + ;; + ;; Give every package its own directory in packages/ including single-file + ;; packages. + ;; + + + (provide 'rainbow-mode) + + ;; Local Variables: + ;; indent-tabs-mode: nil + ;; End: + ;;; rainbow-mode.el ends here + #+END_SRC *** Doom Modeline #+BEGIN_SRC emacs-lisp :results silent (require 'doom-modeline)