diff --git a/init.el b/init.el index 05a0ab3..9fd9ed7 100644 --- a/init.el +++ b/init.el @@ -60,10 +60,12 @@ material-theme multiple-cursors org-bullets + org-link-minor-mode ox-reveal poporg projectile rainbow-delimiters + rainbow-mode rust-mode shrink-path tide @@ -130,7 +132,7 @@ (interactive) (/ (- (x-display-pixel-width) (window-px-width)) 2)) - ;; (add-to-list 'default-frame-alist (cons 'top 0)) +;; (add-to-list 'default-frame-alist (cons 'top 0)) ;; (add-to-list 'default-frame-alist (cons 'left 1000)) (put 'narrow-to-region 'disabled nil) @@ -573,6 +575,16 @@ (dired-hide-details-mode nil)) (add-hook 'dired-mode-hook 'dired-mode-setup) +(add-hook 'artist-mode-hook + (lambda () + (setq compilation-read-command nil) + (set + (make-local-variable 'compile-command) + (format "java -jar /home/locust/scripts/java/ditaa0_9.jar -E %s | awk -F': ' '{print $2}' | awk NF | tail -n1 | xargs -I{} feh {}" + (buffer-file-name))))) + +(add-to-list 'auto-mode-alist '("\\.uml\\'" . artist-mode)) + (require 'ivy-hydra) (require 'ivy) (require 'swiper) @@ -618,23 +630,25 @@ (add-to-list 'exec-path "/home/locust/.local/bin") -(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu/mu4e") +;; (add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu/mu4e") +(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e") + (require 'mu4e) -(setq mu4e-maildir "~/Mail" - mu4e-mu-binary "/usr/local/bin/mu" +(setq mu4e-maildir "/home/locust/Mail" + mu4e-mu-binary "/usr/bin/mu" mu4e-change-filenames-when-moving t ;; Rename files when moving (required by mbsync) mu4e-compose-in-new-frame t ;; New compose gets new frame mu4e-context-policy 'pick-first - mu4e-get-mail-command "mbsync -a" ;; MBSYNC is the mail cmd - mu4e-html2text-command "/usr/local/bin/w3m -T text/html" ;; HTML to text command + mu4e-get-mail-command "mbsync -a" ;; MBSYNC is the mail cmd + mu4e-html2text-command "/usr/bin/w3m -T text/html" ;; HTML to text command mu4e-headers-include-related nil ;; Stop threading in INBOX mu4e-sent-messages-behavior 'delete ;; Delete sent messages mu4e-update-interval 300 ;; 5 mins mu4e-use-fancy-chars t ;; use 'fancy' chars mu4e-user-mail-address-list '("lolson@eaglecrk.com" - "lolson@vlocity.com" "olson.levi@gmail.com") + mu4e-view-show-images t ;; attempt to show images mu4e-view-image-max-width 400 ;; max image size @@ -710,36 +724,39 @@ ;; "Eagle Creek Software Services\n" ;; "Senior Application Developer Consultant\n")) ( mu4e-sent-folder . "/eaglecrk/Sent Items" ) + ( mu4e-refile-folder . "/eaglecrk/Archive" ) ( mu4e-drafts-folder . "/eaglecrk/Drafts" ) ( mu4e-trash-folder . "/eaglecrk/Deleted Items" ) ( mu4e-maildir-shortcuts . (("/eaglecrk/Inbox" . ?i) ("/eaglecrk/Sent Items" . ?s) ("/eaglecrk/Deleted Items" . ?t) - ("/eaglecrk/Archive" . ?a))))) - ;; ,(make-mu4e-context - ;; :name "Gmail" - ;; :enter-func (lambda () (mu4e-message "Entering Gmail")) - ;; :leave-func (lambda () (mu4e-message "Leaving Gmail")) - ;; ;; this matches maildir /Arkham and its sub-directories - ;; :match-func (lambda (msg) - ;; (when msg - ;; (string= (mu4e-message-field msg :maildir) "/Gmail"))) - ;; :vars '( ( user-mail-address . "olson.levi@gmail.com" ) - ;; ( smtpmail-mail-address . "olson.levi@gmail.com" ) - ;; ( smtpmail-smtp-user . "olson.levi@gmail.com" ) - ;; ( smtpmail-smtp-server . "smtp.gmail.com" ) - ;; ( user-full-name . "Levi Olson" ) - ;; ( mu4e-compose-signature . - ;; (concat - ;; "Levi\n")) - ;; ( mu4e-sent-folder . "/Gmail/[Gmail].Sent Mail" ) - ;; ( mu4e-drafts-folder . "/Gmail/[Gmail].Drafts" ) - ;; ( mu4e-trash-folder . "/Gmail/[Gmail].Trash" ) - ;; ( mu4e-maildir-shortcuts . (("/Gmail/INBOX" . ?i) - ;; ("/Gmail/[Gmail].Sent Mail" . ?s) - ;; ("/Gmail/[Gmail].Trash" . ?t) - ;; ("/Gmail/[Gmail].All Mail" . ?a)) - ;; ))) + ("/eaglecrk/Archive" . ?a) + )))) + ,(make-mu4e-context + :name "Gmail" + :enter-func (lambda () (mu4e-message "Entering Gmail")) + :leave-func (lambda () (mu4e-message "Leaving Gmail")) + ;; this matches maildir /Arkham and its sub-directories + :match-func (lambda (msg) + (when msg + (string= (mu4e-message-field msg :maildir) "/gmail"))) + :vars '( ( user-mail-address . "olson.levi@gmail.com" ) + ( smtpmail-mail-address . "olson.levi@gmail.com" ) + ( smtpmail-smtp-user . "olson.levi@gmail.com" ) + ( smtpmail-smtp-server . "smtp.gmail.com" ) + ( user-full-name . "Levi Olson" ) + ( mu4e-compose-signature . + (concat + "Levi\n")) + ( mu4e-sent-folder . "/gmail/[Gmail]/Sent Mail" ) + ( mu4e-refile-folder . "/gmail/[Gmail]/All Mail" ) + ( mu4e-drafts-folder . "/gmail/[Gmail]/Drafts" ) + ( mu4e-trash-folder . "/gmail/[Gmail]/Trash" ) + ( mu4e-maildir-shortcuts . (("/gmail/Inbox" . ?i) + ("/gmail/[Gmail]/Sent Mail" . ?s) + ("/gmail/[Gmail]/Trash" . ?t) + ("/gmail/[Gmail]/All Mail" . ?a) + )))) )) ;; Add option to view HTML in browser @@ -1207,6 +1224,8 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." (defvar company-active-map (make-keymap) "company mode keymap.") +(defvar artist-mode-map (make-keymap) + "artist mode keymap.") (defvar custom-bindings (make-keymap) "a keymap of custom bindings.") @@ -1274,9 +1293,18 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." (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-q") + (lambda () + (interactive) + (kill-this-buffer) + (delete-window) + (message nil) + (message "Done") + )) ;; (define-key custom-bindings (kbd "M-RET") '(lambda () (interactive) (term (getenv "SHELL")))) +(define-key artist-mode-map (kbd "C-c C-c") 'compile) + (define-minor-mode custom-bindings-mode "A mode that activates custom-bindings." @@ -1447,7 +1475,7 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." (defun my-org-confirm-babel-evaluate (lang _body) "Execute certain languages without confirming. - Takes LANG to allow and BODY to execute." + Takes LANG to allow and BODY to execute." (not (or (string= lang "js") (string= lang "restclient") (string= lang "emacs-lisp") @@ -1479,9 +1507,21 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." org-log-into-drawer t org-hide-leading-stars t org-pretty-entities t + org-use-property-inheritance t + org-html-validation-link nil + org-html-text-markup-alist '((bold . "%s") + (code . "%s") + (italic . "%s") + (strike-through . "%s") + (underline . "%s") + (verbatim . "%s")) ) (require 'org-protocol) +;; Ensure the following is in ~/.config/mimeapps.list +;; +;; [Default Applications] +;; x-scheme-handler/org-protocol=userapp-emacsclient.desktop (setq org-capture-templates '(("t" "new task" entry (file+headline "~/Dropbox/Org/todo.org" "Tasks") "* TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n") @@ -1491,6 +1531,8 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." "* %a\n%?\n") ("d" "store link w/drawer" entry (file+olp org-default-notes-file "Links" "Unfiled") "* %?\n%l\n:COPIED_TEXT:\n %i\n:END:\n") + ("f" "dotfile" entry (file+headline "~/Dropbox/Org/dotfiles.org" "Other") + "* %?\n:PROPERTIES:\n:CUSTOM_ID: %(org-id-get-create)\n:END:\n") )) @@ -1529,8 +1571,397 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." (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"))) +;; Enable ligatures without prettify-symbols + +(provide 'add-pragmatapro-symbol-keywords) + +(defconst pragmatapro-fontlock-keywords-alist + (mapcar (lambda (regex-char-pair) + `(,(car regex-char-pair) + (0 (prog1 () + (compose-region (match-beginning 1) + (match-end 1) + ,(concat (list ?\C-i) + (list (decode-char 'ucs (cadr regex-char-pair))))))))) + '(("\\(\\[ERROR\\]\\)" #XE380) + ("\\(\\[DEBUG\\]\\)" #XE381) + ("\\(\\[INFO\\]\\)" #XE382) + ("\\(\\[WARN\\]\\)" #XE383) + ("\\(\\[WARNING\\]\\)" #XE384) + ("\\(\\[ERR\\]\\)" #XE385) + ("\\(\\[FATAL\\]\\)" #XE386) + ("\\(\\[TRACE\\]\\)" #XE387) + ("\\(!!\\)" #XE900) + ("\\(!=\\)" #XE901) + ("\\(!==\\)" #XE902) + ("\\(!!!\\)" #XE903) + ("\\(!≡\\)" #XE904) + ("\\(!≡≡\\)" #XE905) + ("[^<]\\(!>\\)" #XE906) + ("\\(#(\\)" #XE920) + ("\\(#_\\)" #XE921) + ("\\(#{\\)" #XE922) + ("\\(#\\?\\)" #XE923) + ("[^<]\\(#>\\)" #XE924) + ("\\(##\\)" #XE925) + ("\\(%=\\)" #XE930) + ("[^<]\\(%>\\)" #XE931) + ("\\(&%\\)" #XE940) + ("\\(&&\\)" #XE941) + ("\\(&\\*\\)" #XE942) + ("\\(&\\+\\)" #XE943) + ("\\(&-\\)" #XE944) + ("\\(&/\\)" #XE945) + ("\\(&=\\)" #XE946) + ("\\(&&&\\)" #XE947) + ("[^<]\\(&>\\)" #XE948) + ("\\(\\*\\*\\*\\)" #XE960) + ("\\(\\*=\\)" #XE961) + ("\\(\\*/\\)" #XE962) + ("[^<]\\(\\*>\\)" #XE963) + ("\\(\\+\\+\\)" #XE970) + ("\\(\\+\\+\\+\\)" #XE971) + ("[^\\+]\\(\\+=\\)" #XE972) + ("[^<]\\(\\+>\\)" #XE973) + ("\\(\\+\\+=\\)" #XE974) + ("\\(--\\)" #XE980) + ("[^-]\\(-<\\)" #XE981) + ("\\(-<<\\)" #XE982) + ("\\(-=\\)" #XE983) + ("[^|]\\(->\\)" #XE984) + ("[^|]\\(->>\\)" #XE985) + ("\\(---\\)" #XE986) + ("\\(-->\\)" #XE987) + ("\\(-\\+-\\)" #XE988) + ("\\(-\\\\/\\)" #XE989) + ("[^\\^]\\(\\.\\.\\)" #XE990) + ("\\(\\.\\.\\.\\)" #XE991) + ("\\(\\.\\.<\\)" #XE992) + ("\\(\\.>\\)" #XE993) + ("\\(\\.~\\)" #XE994) + ("\\(\\.=\\)" #XE995) + ("\\(/\\*\\)" #XE9A0) + ("\\(//\\)" #XE9A1) + ("[^<]\\(/>\\)" #XE9A2) + ("[^=]\\(/=\\)" #XE9A3) + ("\\(/==\\)" #XE9A4) + ("\\(///\\)" #XE9A5) + ("\\(/\\*\\*\\)" #XE9A6) + ("\\(::\\)" #XE9B0) + ("\\(:=\\)" #XE9B1) + ("[^≡]\\(:≡\\)" #XE9B2) + ("\\(:>\\)" #XE9B3) + ("\\(:=>\\)" #XE9B4) + ("\\(<\\*\\)" #XE9C1) + ("\\(<\\*>\\)" #XE9C2) + ("[^<]\\(<-\\)" #XE9C4) + ("[^-]\\(<<\\)" #XE9C5) + ("\\(<<<\\)" #XE9C6) + ("\\(<<=\\)" #XE9C7) + ("[^<]\\(<=\\)" #XE9C8) + ("\\(<=>\\)" #XE9C9) + ("\\(<>\\)" #XE9CA) + ("\\(<<-\\)" #XE9CC) + ("\\(<|\\)" #XE9CD) + ("\\(<|>\\)" #XE9CB) + ("\\(<=<\\)" #XE9CE) + ("[^<]\\(<~\\)" #XE9CF) + ("\\(<~~\\)" #XE9D0) + ("\\(<<~\\)" #XE9D1) + ("\\(<\\$\\)" #XE9D2) + ("\\(<\\$>\\)" #XE9C0) + ("\\(<\\+\\)" #XE9D3) + ("\\(<\\+>\\)" #XE9C3) + ("\\(<~>\\)" #XE9E0) + ("\\(<\\*\\*>\\)" #XE9E1) + ("\\(<<\\^\\)" #XE9E2) + ("\\(\\)" #XE9D4) + ("\\(<@\\)" #XE9E4) + ("\\(<#\\)" #XE9E5) + ("\\(<#>\\)" #XE9D6) + ("\\(<%\\)" #XE9E6) + ("\\(<%>\\)" #XE9D7) + ("[^<]\\(<\\^\\)" #XE9E7) + ("\\(<&\\)" #XE9E8) + ("\\(<&>\\)" #XE9D9) + ("\\(<\\?\\)" #XE9E9) + ("\\(<\\.\\)" #XE9EA) + ("\\(<\\.>\\)" #XE9DB) + ("\\(\\)" #XE9DC) + ("\\(<\\\\\\)" #XE9EC) + ("\\(<\"\\)" #XE9ED) + ("\\(<\">\\)" #XE9DE) + ("\\(<:\\)" #XE9EE) + ("\\(<:>\\)" #XE9DF) + ("\\(<->\\)" #XE9EF) + ("\\(\\)" #XEA66) + ("\\(|=>\\)" #XEA67) + ("\\(|==>\\)" #XEA68) + ("\\(~=\\)" #XEA70) + ("[^~<]\\(~>\\)" #XEA71) + ("\\(~~>\\)" #XEA72) + ("\\(~>>\\)" #XEA73) + ("[^<]\\(\">\\)" #XEA90)))) + +(defun add-pragmatapro-symbol-keywords () + (font-lock-add-keywords nil pragmatapro-fontlock-keywords-alist)) + +(add-hook 'prog-mode-hook + #'add-pragmatapro-symbol-keywords) + +;; Enable Org mode checkbox ligatures without prettify-symbols + +(provide 'add-checkbox-symbol-keywords) + +(defconst checkbox-fontlock-keywords-alist + (mapcar (lambda (regex-char-pair) + `(,(car regex-char-pair) + (0 (prog1 () + (compose-region (match-beginning 1) + (match-end 1) + ,(concat (list ?\C-i) + (list (decode-char 'ucs (cadr regex-char-pair))))))))) + '(("\\(\\[ \\]\\)" #XF096);2B1C + ("\\(\\[-\\]\\)" #XF147);29C7;F458 + ("\\(\\[X\\]\\)" #XF046);2BBD + ))) + +(defun add-checkbox-symbol-keywords () + (font-lock-add-keywords nil checkbox-fontlock-keywords-alist)) + +(add-hook 'org-mode-hook + #'add-checkbox-symbol-keywords) + +;; All ligatures (for testing) + +;; [ERROR] +;; [DEBUG] +;; [INFO] +;; [WARN] +;; [WARNING] +;; [ERR] +;; [FATAL] +;; [TRACE] +;; !! +;; != +;; !== +;; !!! +;; !≡ +;; !≡≡ +;; !> +;; #( +;; #_ +;; #{ +;; #? +;; #> +;; ## +;; %= +;; %> +;; &% +;; && +;; &* +;; &+ +;; &- +;; &/ +;; &= +;; &&& +;; &> +;; *** +;; *= +;; */ +;; *> +;; ++ +;; +++ +;; += +;; +> +;; ++= +;; -- +;; -< +;; -<< +;; -= +;; -> +;; ->> +;; --- +;; --> +;; -+- +;; -\/ +;; .. +;; ... +;; ..< +;; .> +;; .~ +;; .= +;; /* +;; // +;; /> +;; /= +;; /== +;; /// +;; /** +;; :: +;; := +;; :≡ +;; :> +;; :=> +;; <$> +;; <* +;; <*> +;; <+> +;; <- +;; << +;; <<< +;; <<= +;; <= +;; <=> +;; <> +;; <|> +;; <<- +;; <| +;; <=< +;; <~ +;; <~~ +;; <<~ +;; <$ +;; <+ +;; +;; <@> +;; <#> +;; <%> +;; <^> +;; <&> +;; +;; <.> +;; +;; <\> +;; <"> +;; <:> +;; <~> +;; <**> +;; <<^ +;; +;; +;; |=> +;; |==> +;; ~= +;; ~> +;; ~~> +;; ~>> +;; "> + +(cond ((member "PragmataPro Liga" (font-family-list)) + (set-face-attribute 'default nil :font "PragmataPro Liga-13"))) +;; (cond ((member "IBM Plex Mono Thin" (font-family-list)) +;; (set-face-attribute 'default nil :font "IBM Plex Mono Thin-13"))) +;; (cond ((member "IBM Plex Mono" (font-family-list)) +;; (set-face-attribute 'default nil :font "IBM Plex Mono-12"))) (add-hook 'org-mode-hook 'org-bullets-mode) @@ -1542,1329 +1973,6 @@ ARGS may be amongst :timeout, :icon, :urgency, :app and :category." (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 a5ddf87..7a44936 100644 Binary files a/init.elc and b/init.elc differ diff --git a/init.org b/init.org index c95fcfd..00c3a8e 100644 --- a/init.org +++ b/init.org @@ -3,3114 +3,2230 @@ #+EMAIL: olson.levi@gmail.com #+DATE: <2019-01-30 Wed> #+LANGUAGE: en +#+STARTUP: showeverything #+BABEL: :cache yes #+HTML_HEAD: #+EXPORT_FILE_NAME: index.html #+PROPERTY: header-args :tangle yes #+OPTIONS: num:10 whn:nil toc:10 H:10 -#+STARTUP: content * Summary - I've really been wanting to have a nicely formatted emacs config file and this is my attempt at it. +I've really been wanting to have a nicely formatted emacs config file and this is my attempt at it. * Required Magic ** Lexical Binding - #+BEGIN_SRC emacs-lisp :results silent - ;;; -*- lexical-binding: t -*- - ;;; DO NOT EDIT THIS FILE DIRECTLY - ;;; EDIT ~init.org~ instead - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + ;;; -*- lexical-binding: t -*- + ;;; DO NOT EDIT THIS FILE DIRECTLY + ;;; EDIT ~init.org~ instead +#+END_SRC ** The Magical Glue - The following auto compiles the emacs-lisp within the =init.org= file. - Simply run `org-babel-tangle` to make it RAIN! +The following auto compiles the emacs-lisp within the =init.org= file. +Simply run `org-babel-tangle` to make it RAIN! - #+BEGIN_SRC emacs-lisp :results silent - ;; (setq byte-compile-warnings nil) - (defun tangle-init () - "If the current buffer is 'init.org' the code-blocks are tangled, and the tangled file is compiled." - (when (equal (buffer-file-name) - (expand-file-name (concat user-emacs-directory "init.org"))) - ;; Avoid running hooks when tangling. - (let ((prog-mode-hook nil)) - (org-babel-tangle) - (byte-compile-file (concat user-emacs-directory "init.el"))))) - - (add-hook 'after-save-hook 'tangle-init) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + ;; (setq byte-compile-warnings nil) + (defun tangle-init () + "If the current buffer is 'init.org' the code-blocks are tangled, and the tangled file is compiled." + (when (equal (buffer-file-name) + (expand-file-name (concat user-emacs-directory "init.org"))) + ;; Avoid running hooks when tangling. + (let ((prog-mode-hook nil)) + (org-babel-tangle) + (byte-compile-file (concat user-emacs-directory "init.el"))))) + + (add-hook 'after-save-hook 'tangle-init) +#+END_SRC * Config ** Packages - #+BEGIN_SRC emacs-lisp :results silent - (require 'package) - (package-initialize) - - (defvar my-packages - '(all-the-icons - amx - anzu - base16-theme - bbdb - better-defaults - company - company-go - counsel - counsel-projectile - dash-at-point - dashboard - diminish - dockerfile-mode - doom-modeline - doom-themes - ein - eldoc-eval - elfeed - elfeed-org - elpy - emmet-mode - excorporate - expand-region - fic-mode - flycheck - gitignore-mode - go-mode - go-playground - gorepl-mode - iedit - indium - ivy - ivy-hydra - jabber - json-mode - ledger-mode - magit - markdown-mode - material-theme - multiple-cursors - org-bullets - ox-reveal - poporg - projectile - rainbow-delimiters - rust-mode - shrink-path - tide - typescript-mode - ;; use-package - web-mode - which-key)) - - (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)) - (package-initialize) - - (dolist (p my-packages) - (when (not (package-installed-p p)) - (package-install p))) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (require 'package) + (package-initialize) + + (defvar my-packages + '(all-the-icons + amx + anzu + base16-theme + bbdb + better-defaults + company + company-go + counsel + counsel-projectile + dash-at-point + dashboard + diminish + dockerfile-mode + doom-modeline + doom-themes + ein + eldoc-eval + elfeed + elfeed-org + elpy + emmet-mode + excorporate + expand-region + fic-mode + flycheck + gitignore-mode + go-mode + go-playground + gorepl-mode + iedit + indium + ivy + ivy-hydra + jabber + json-mode + ledger-mode + magit + markdown-mode + material-theme + multiple-cursors + org-bullets + org-link-minor-mode + ox-reveal + poporg + projectile + rainbow-delimiters + rainbow-mode + rust-mode + shrink-path + tide + typescript-mode + ;; use-package + web-mode + which-key)) + + (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)) + (package-initialize) + + (dolist (p my-packages) + (when (not (package-installed-p p)) + (package-install p))) +#+END_SRC ** Server - #+BEGIN_SRC emacs-lisp :results silent :tangle yes - (server-start) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent :tangle yes + (server-start) +#+END_SRC ** Better Defaults - #+BEGIN_SRC emacs-lisp :results silent - (require 'better-defaults) - - ;; Instead of the annoying giant warning icon, just flash the modeline. - ;; (this happens when you do something like C-g) - (setq ring-bell-function - (lambda () - (let ((orig-fg (face-foreground 'mode-line))) - (set-face-foreground 'mode-line "#F2804F") - (run-with-idle-timer 0.1 nil - (lambda (fg) (set-face-foreground 'mode-line fg)) - orig-fg)))) - - (defun set-frame-size-according-to-resolution () - "Set the Emacs window size on startup." - (interactive) - (if window-system - (progn - ;; WIDTH - (if (> (x-display-pixel-width) 1280) - ;; Large Screen (only show 120 cols) - (add-to-list 'default-frame-alist (cons 'width 240)) - ;; Small Screen (fill window) - (add-to-list 'default-frame-alist (cons 'width (/ (x-display-pixel-width) (frame-char-width))))) - - ;; HEIGHT - (if (> (x-display-pixel-height) 1080) - ;; Large Screen (only fill half screen) - (add-to-list 'default-frame-alist (cons 'height (/ (/ (x-display-pixel-height) 2) - (frame-char-height)))) - ;; Small Screen (fill window) - (add-to-list 'default-frame-alist (cons 'height (/ (x-display-pixel-height) (frame-char-height))))) - ))) - - ;; (set-frame-size-according-to-resolution) - - (defun window-px-width () - "Get the width of the Emacs window in pixels." - (interactive) - (* (* (window-total-width) 2.874) (frame-char-width))) - - (defun window-px-left-pos () - "Calculate the left position of the Emacs window." - (interactive) - (/ (- (x-display-pixel-width) (window-px-width)) 2)) - - ;; (add-to-list 'default-frame-alist (cons 'top 0)) - ;; (add-to-list 'default-frame-alist (cons 'left 1000)) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (require 'better-defaults) + + ;; Instead of the annoying giant warning icon, just flash the modeline. + ;; (this happens when you do something like C-g) + (setq ring-bell-function + (lambda () + (let ((orig-fg (face-foreground 'mode-line))) + (set-face-foreground 'mode-line "#F2804F") + (run-with-idle-timer 0.1 nil + (lambda (fg) (set-face-foreground 'mode-line fg)) + orig-fg)))) + + (defun set-frame-size-according-to-resolution () + "Set the Emacs window size on startup." + (interactive) + (if window-system + (progn + ;; WIDTH + (if (> (x-display-pixel-width) 1280) + ;; Large Screen (only show 120 cols) + (add-to-list 'default-frame-alist (cons 'width 240)) + ;; Small Screen (fill window) + (add-to-list 'default-frame-alist (cons 'width (/ (x-display-pixel-width) (frame-char-width))))) + + ;; HEIGHT + (if (> (x-display-pixel-height) 1080) + ;; Large Screen (only fill half screen) + (add-to-list 'default-frame-alist (cons 'height (/ (/ (x-display-pixel-height) 2) + (frame-char-height)))) + ;; Small Screen (fill window) + (add-to-list 'default-frame-alist (cons 'height (/ (x-display-pixel-height) (frame-char-height))))) + ))) + + ;; (set-frame-size-according-to-resolution) + + (defun window-px-width () + "Get the width of the Emacs window in pixels." + (interactive) + (* (* (window-total-width) 2.874) (frame-char-width))) + + (defun window-px-left-pos () + "Calculate the left position of the Emacs window." + (interactive) + (/ (- (x-display-pixel-width) (window-px-width)) 2)) + + ;; (add-to-list 'default-frame-alist (cons 'top 0)) + ;; (add-to-list 'default-frame-alist (cons 'left 1000)) +#+END_SRC ** Enable Disabled Commands - #+BEGIN_SRC emacs-lisp :results silent - (put 'narrow-to-region 'disabled nil) - (put 'upcase-region 'disabled nil) - (put 'downcase-region 'disabled nil) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (put 'narrow-to-region 'disabled nil) + (put 'upcase-region 'disabled nil) + (put 'downcase-region 'disabled nil) +#+END_SRC ** Splash Screen - #+BEGIN_SRC emacs-lisp :results silent - (require 'dashboard) - - (dashboard-setup-startup-hook) - - ;; Set the title - (setq dashboard-banner-logo-title "Let's begin...") - ;; Set the banner - (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 - ;; 1, 2 or 3 which displays one of the text banners - ;; "path/to/your/image.png" which displays whatever image you would prefer - - ;; Content is not centered by default. To center, set - (setq dashboard-center-content t) - - ;; To enable shortcut "jump" indicators for each section, set - (setq dashboard-show-shortcuts t) - - (setq show-week-agenda-p t) - (setq dashboard-org-agenda-categories '("work" "tasks")) - (setq dashboard-items '((recents . 10) - (bookmarks . 5) - (projects . 5) - ;; (agenda . 5) - ;; (registers . 5) - )) - - (add-to-list 'dashboard-items '(agenda) t) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (require 'dashboard) + + (dashboard-setup-startup-hook) + + ;; Set the title + (setq dashboard-banner-logo-title "Let's begin...") + ;; Set the banner + (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 + ;; 1, 2 or 3 which displays one of the text banners + ;; "path/to/your/image.png" which displays whatever image you would prefer + + ;; Content is not centered by default. To center, set + (setq dashboard-center-content t) + + ;; To enable shortcut "jump" indicators for each section, set + (setq dashboard-show-shortcuts t) + + (setq show-week-agenda-p t) + (setq dashboard-org-agenda-categories '("work" "tasks")) + (setq dashboard-items '((recents . 10) + (bookmarks . 5) + (projects . 5) + ;; (agenda . 5) + ;; (registers . 5) + )) + + (add-to-list 'dashboard-items '(agenda) t) +#+END_SRC ** Basic Customization - #+BEGIN_SRC emacs-lisp :results silent - (defvar backup-dir (expand-file-name "~/.emacs.d/backup/")) - (defvar autosave-dir (expand-file-name "~/.emacs.d/autosave/")) - - (setq initial-scratch-message nil - backup-directory-alist (list (cons ".*" backup-dir)) - auto-save-list-file-prefix autosave-dir - auto-save-file-name-transforms `((".*" ,autosave-dir t))) - - (menu-bar-mode 0) - (scroll-bar-mode 0) - (tool-bar-mode 0) - (setq auth-sources '("~/.authinfo.gpg")) - (set-default 'truncate-lines t) - (setq fill-column 80) - - ;; (add-hook 'text-mode-hook - ;; (lambda () - ;; (when (y-or-n-p "Auto Fill mode? ") - ;; (turn-on-auto-fill)))) - - (setq whitespace-style '(face empty tabs lines-tail trailing)) - (global-whitespace-mode t) - - ;; (load-theme 'doom-city-lights t) - ;; (load-theme 'doom-dracula t) - ;; (load-theme 'doom-nord t) - (load-theme 'doom-one t) - ;; (load-theme 'doom-spacegrey t) - ;; (load-theme 'base16-ocean t) - (load-theme 'base16-onedark t) - (global-linum-mode t) - (global-auto-revert-mode t) - - (defalias 'yes-or-no-p 'y-or-n-p) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (defvar backup-dir (expand-file-name "~/.emacs.d/backup/")) + (defvar autosave-dir (expand-file-name "~/.emacs.d/autosave/")) + + (setq initial-scratch-message nil + backup-directory-alist (list (cons ".*" backup-dir)) + auto-save-list-file-prefix autosave-dir + auto-save-file-name-transforms `((".*" ,autosave-dir t))) + + (menu-bar-mode 0) + (scroll-bar-mode 0) + (tool-bar-mode 0) + (setq auth-sources '("~/.authinfo.gpg")) + (set-default 'truncate-lines t) + (setq fill-column 80) + + ;; (add-hook 'text-mode-hook + ;; (lambda () + ;; (when (y-or-n-p "Auto Fill mode? ") + ;; (turn-on-auto-fill)))) + + (setq whitespace-style '(face empty tabs lines-tail trailing)) + (global-whitespace-mode t) + + ;; (load-theme 'doom-city-lights t) + ;; (load-theme 'doom-dracula t) + ;; (load-theme 'doom-nord t) + (load-theme 'doom-one t) + ;; (load-theme 'doom-spacegrey t) + ;; (load-theme 'base16-ocean t) + (load-theme 'base16-onedark t) + (global-linum-mode t) + (global-auto-revert-mode t) + + (defalias 'yes-or-no-p 'y-or-n-p) +#+END_SRC *** Diary - #+BEGIN_SRC emacs-lisp :results silent - (defvar diary-file (expand-file-name "~/.emacs.d/diary/main")) - - (add-hook 'diary-list-entries-hook 'diary-sort-entries t) - (add-hook 'diary-list-entries-hook 'diary-include-other-diary-files) - (add-hook 'diary-mark-entries-hook 'diary-mark-included-diary-files) - (add-hook 'calendar-today-visible-hook 'calendar-mark-today) - - (setq calendar-latitude 44 - calendar-longitude -97 - calendar-location-name "Hayti, SD") - #+END_SRC -** Custom Modes -*** OpenHAB Mode - #+BEGIN_SRC emacs-lisp :results silent - (require 'font-lock) - - (defvar openhab-mode-hook nil) - - (defvar openhab-mode-map - (let ((map (make-keymap))) - (define-key map "\C-j" 'newline-and-indent) - map) - "Keymap for OPENHAB major mode.") +#+BEGIN_SRC emacs-lisp :results silent + (defvar diary-file (expand-file-name "~/.emacs.d/diary/main")) - (add-to-list 'auto-mode-alist '("\\.sitemap\\'" . openhab-mode)) - (add-to-list 'auto-mode-alist '("\\.items\\'" . openhab-mode)) - (add-to-list 'auto-mode-alist '("\\.rules\\'" . openhab-mode)) - (add-to-list 'auto-mode-alist '("\\.things\\'" . openhab-mode)) + (add-hook 'diary-list-entries-hook 'diary-sort-entries t) + (add-hook 'diary-list-entries-hook 'diary-include-other-diary-files) + (add-hook 'diary-mark-entries-hook 'diary-mark-included-diary-files) + (add-hook 'calendar-today-visible-hook 'calendar-mark-today) - (defconst openhab-font-lock-keywords - `( - ("\<.*\>" . font-lock-constant-face) - (,(regexp-opt - '( - ;; KEYWORDS - "Selection" "Slider" "List" "Setpoint" "Video" "Chart" "Webview" "Colorpicker" - "Timer" "Number" "String" - "Switch" "Rollershutter" "Number" "String" "Dimmer" "Contact" "DateTime" "Color" - "Text" "Group" "Image" "Frame" - "Thing" "Bridge" - "Time" "System" - "sitemap" - - "rule" "when" "then" "end" - "if" "val" - "import" "var" "say" "postUpdate" "switch" "println" "case" "or" "sendCommand" - ) - 'words) - (1 font-lock-keyword-face)) - (,(regexp-opt - '( - "ON" "OFF" "on" "off" - "AND" "OR" "NAND" "NOR" "AVG" "SUM" "MAX" "MIN" - "true" "false" - ) - 'words) - (1 font-lock-constant-face)) - (,(regexp-opt - '( - "name" "label" "item" "period" "refresh" "icon" "mappings" "minValue" "maxValue" "step" "switchsupport" "url" "height" "refresh" "visibility" "valuecolor" - ) - 'words) - (1 font-lock-type-face)) - ("\(.*\)" . font-lock-variable-name-face) - ("[^a-zA-Z0-9_:]\\([0-9]*\\)[^a-zA-Z0-9_:]" . (1 font-lock-variable-name-face)) - ("\s@\s" . font-lock-variable-name-face) - ("\s\\([a-zA-Z0-9_:]*\\)\\(\s\\|$\\)" . (1 font-lock-type-face)) - ("=\\([a-zA-Z_]*\\)" . (1 font-lock-string-face)) - ("\\([a-zA-Z]*\\)=" . (1 font-lock-type-face)) - ) - "The regexps to highlight in openHAB mode.") - - (defvar openhab-mode-syntax-table - (let ((st (make-syntax-table))) - (modify-syntax-entry ?/ ". 12b" st) ;; C-style comments // ... - (modify-syntax-entry ?\n "> b" st) ;; \n ends comment - ;; Block comments /*...*/ - (modify-syntax-entry ?\/ ". 14" st) - (modify-syntax-entry ?* ". 23" st) - st) - "Syntax table for openhab-mode.") - - (defun openhab-mode () - "Major mode for editing OPENHAB config files." - (interactive) - (kill-all-local-variables) - (set-syntax-table openhab-mode-syntax-table) - (use-local-map openhab-mode-map) - (set (make-local-variable 'font-lock-defaults) '(openhab-font-lock-keywords nil t)) - (electric-pair-mode -1) - (flycheck-mode -1) - (setq major-mode 'openhab-mode) - (setq mode-name "OpenHAB") - (run-hooks 'openhab-mode-hook)) - - (provide 'openhab-mode) - #+END_SRC + (setq calendar-latitude 44 + calendar-longitude -97 + calendar-location-name "Hayti, SD") +#+END_SRC +** Custom Modes +*** OpenHAB Mode +#+BEGIN_SRC emacs-lisp :results silent + (require 'font-lock) + + (defvar openhab-mode-hook nil) + + (defvar openhab-mode-map + (let ((map (make-keymap))) + (define-key map "\C-j" 'newline-and-indent) + map) + "Keymap for OPENHAB major mode.") + + (add-to-list 'auto-mode-alist '("\\.sitemap\\'" . openhab-mode)) + (add-to-list 'auto-mode-alist '("\\.items\\'" . openhab-mode)) + (add-to-list 'auto-mode-alist '("\\.rules\\'" . openhab-mode)) + (add-to-list 'auto-mode-alist '("\\.things\\'" . openhab-mode)) + + (defconst openhab-font-lock-keywords + `( + ("\<.*\>" . font-lock-constant-face) + (,(regexp-opt + '( + ;; KEYWORDS + "Selection" "Slider" "List" "Setpoint" "Video" "Chart" "Webview" "Colorpicker" + "Timer" "Number" "String" + "Switch" "Rollershutter" "Number" "String" "Dimmer" "Contact" "DateTime" "Color" + "Text" "Group" "Image" "Frame" + "Thing" "Bridge" + "Time" "System" + "sitemap" + + "rule" "when" "then" "end" + "if" "val" + "import" "var" "say" "postUpdate" "switch" "println" "case" "or" "sendCommand" + ) + 'words) + (1 font-lock-keyword-face)) + (,(regexp-opt + '( + "ON" "OFF" "on" "off" + "AND" "OR" "NAND" "NOR" "AVG" "SUM" "MAX" "MIN" + "true" "false" + ) + 'words) + (1 font-lock-constant-face)) + (,(regexp-opt + '( + "name" "label" "item" "period" "refresh" "icon" "mappings" "minValue" "maxValue" "step" "switchsupport" "url" "height" "refresh" "visibility" "valuecolor" + ) + 'words) + (1 font-lock-type-face)) + ("\(.*\)" . font-lock-variable-name-face) + ("[^a-zA-Z0-9_:]\\([0-9]*\\)[^a-zA-Z0-9_:]" . (1 font-lock-variable-name-face)) + ("\s@\s" . font-lock-variable-name-face) + ("\s\\([a-zA-Z0-9_:]*\\)\\(\s\\|$\\)" . (1 font-lock-type-face)) + ("=\\([a-zA-Z_]*\\)" . (1 font-lock-string-face)) + ("\\([a-zA-Z]*\\)=" . (1 font-lock-type-face)) + ) + "The regexps to highlight in openHAB mode.") + + (defvar openhab-mode-syntax-table + (let ((st (make-syntax-table))) + (modify-syntax-entry ?/ ". 12b" st) ;; C-style comments // ... + (modify-syntax-entry ?\n "> b" st) ;; \n ends comment + ;; Block comments /*...*/ + (modify-syntax-entry ?\/ ". 14" st) + (modify-syntax-entry ?* ". 23" st) + st) + "Syntax table for openhab-mode.") + + (defun openhab-mode () + "Major mode for editing OPENHAB config files." + (interactive) + (kill-all-local-variables) + (set-syntax-table openhab-mode-syntax-table) + (use-local-map openhab-mode-map) + (set (make-local-variable 'font-lock-defaults) '(openhab-font-lock-keywords nil t)) + (electric-pair-mode -1) + (flycheck-mode -1) + (setq major-mode 'openhab-mode) + (setq mode-name "OpenHAB") + (run-hooks 'openhab-mode-hook)) + + (provide 'openhab-mode) +#+END_SRC ** Custom Packages *** Hyperspace - #+BEGIN_SRC emacs-lisp :results silent - ;;; hyperspace.el --- Get there from here -*- lexical-binding: t; -*- - - ;; Copyright (C) 2017-2019 Ian Eure - - ;; Author: Ian Eure - ;; URL: https://github.com/ieure/hyperspace-el - ;; Version: 0.8.4 - ;; Package-Requires: ((emacs "25") (s "1.12.0")) - ;; Keywords: tools, convenience - - ;; This program 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. - - ;; This program 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 this program. If not, see . - - ;;; Commentary: - - ;; Hyperspace is a way to get nearly anywhere from wherever you are, - ;; whether that's within Emacs or on the web. It's somewhere in - ;; between Quicksilver and keyword URLs, giving you a single, - ;; consistent interface to get directly where you want to go. It’s - ;; for things that you use often, but not often enough to justify a - ;; dedicated binding. - ;; - ;; When you enter Hyperspace, it prompts you where to go: - ;; - ;; HS: - ;; - ;; This prompt expects a keyword and a query. The keyword picks where - ;; you want to go, and the remainder of the input is an optional - ;; argument which can be used to further search or direct you within - ;; that space. - ;; - ;; Some concrete examples: - ;; - ;; | *If you enter* | *then Hyperspace* | - ;; |------------------+----------------------------------------------------------| - ;; | "el" | opens info node "(elisp)Top" | - ;; | "el eval-region" | searches for "eval-region" in the elisp Info index | - ;; | "bb" | shows all BBDB entries | - ;; | "bb kenneth" | shows all BBDB entries with a name matching "kenneth" | - ;; | "ddg foo" | searches DuckDuckGo for "foo" using browse-url | - ;; | "wp foo" | searches Wikipedia for "foo" using browse-url | - ;; - - ;;; Code: - - (require 'subr-x) - (require 's) - - ;; Action helpers - - (defun hyperspace-action->browse-url-pattern (pattern query) - "Browse a URL former from PATTERN and QUERY." - (browse-url (format pattern query))) - - (defun hyperspace-action->info (node &optional query) - "Open an Info buffer for NODE. - - If QUERY is present, look it up in the index." - (info node) - (when query - (Info-index query))) - - ;; Package definitions - - (defvar hyperspace-history nil - "History of Hyperspace actions.") - - (defgroup hyperspace nil - "Getting there from here" - :prefix "hyperspace-" - :group 'applications) - - (defcustom hyperspace-actions - '(("ddg" . "https://duckduckgo.com/?q=%s") - ("dis" . "https://duckduckgo.com/?q=%s&iax=images&ia=images") - ("wp" . "https://en.wikipedia.org/wiki/%s") - ("g" . "https://www.google.com/search?q=%s") - ("gi" . "https://www.google.com/search?tbm=isch&q=%s") - ("gm" . "https://www.google.com/maps/search/%s") - ("yt" . "https://www.youtube.com/results?search_query=%s") - ("clp" . "https://portland.craigslist.org/search/sss?query=%s") - ("eb" . "https://www.ebay.com/sch/i.html?_nkw=%s") - ("nf" . "https://www.netflix.com/search?q=%s") - ("sh" . (lambda (query) (interactive) (shell-command query))) - ("imdb" . "https://www.imdb.com/find?q=peter+jackson&s=all") - ("bb" . bbdb-search-name) - ("el" . (apply-partially #'hyperspace-action->info "(elisp)Top")) - ("av" . apropos-variable) - ("ac" . apropos-command) - ("af" . (lambda (query) (apropos-command query t)))) - - "Where Hyperspace should send you. - - Hyperspace actions are a cons of (KEYWORD . DISPATCHER). When - Hyperspace is invoked, the keyword is extracted from the user - input and looked up in this alist. The remainder of the - string is passed to the dispatcher as its QUERY argument. - - DISPATCHER can be a function which performs the action. - - DISPATCHER can also be an expression which returns a function - to perform the action. - - Finally, DISPATCHER can be a string with a URL pattern containing - '%s'. The '%s' will be replaced with the query, and the URL browsed." - - :group 'hyperspace - :type '(alist :key-type (string :tag "Keyword") - :value-type (choice - (function :tag "Function") - (string :tag "URL Pattern") - (sexp :tag "Expression")))) - - (defcustom hyperspace-default-action - (caar hyperspace-actions) - "A place to go if you don't specify one." - :group 'hyperspace - :type `(radio - ,@(mapcar (lambda (action) (list 'const (car action))) hyperspace-actions))) - - (defcustom hyperspace-max-region-size 256 - "Maximum size of a region to consider for a Hyperspace query. - - If the region is active when Hyperspace is invoked, it's used - as the default query, unless it's more than this number of - characters." - :group 'hyperspace - :type 'integer) - - - - (defun hyperspace--cleanup (text) - "Clean TEXT so it can be used for a Hyperspace query." - (save-match-data - (string-trim - (replace-regexp-in-string (rx (1+ (or blank "\n"))) " " text)))) - - (defun hyperspace--initial-text () - "Return the initial text. - - This is whatever's in the active region, but cleaned up." - (when (use-region-p) - (let* ((start (region-beginning)) - (end (region-end)) - (size (- end start))) - (when (<= size hyperspace-max-region-size) - (hyperspace--cleanup - (buffer-substring-no-properties start end)))))) - - (defun hyperspace--initial (initial-text) - "Turn INITIAL-TEXT into INITIAL-CONTENTS for reading." - (when initial-text (cons (concat " " initial-text) 1))) - - (defun hyperspace--process-input (text) - "Process TEXT into an actionable keyword and query." - (let ((kw-text (s-split-up-to "\\s-+" text 1))) - (if (assoc (car kw-text) hyperspace-actions) - kw-text - (list hyperspace-default-action text)))) - - (defun hyperspace--query () - "Ask the user for the Hyperspace action and query. - - Returns (KEYWORD . QUERY). - - If the region isn't active, the user is prompted for the - action and query. - - If the region is active, its text is used as the initial value - for the query, and the user enters the action. - - If a prefix argument is specified and the region is active, - `HYPERSPACE-DEFAULT-ACTION' is chosen without prompting." - - (let ((initial (hyperspace--initial-text))) - (if (and initial current-prefix-arg) - (list hyperspace-default-action initial) - (hyperspace--process-input - (read-from-minibuffer "HS: " (hyperspace--initial initial) nil nil - 'hyperspace-history))))) - - (defun hyperspace--evalable-p (form) - "Can FORM be evaluated?" - (and (listp form) - (or (functionp (car form)) - (subrp (car form))))) - - (defun hyperspace--dispatch (action &optional query) - "Execute ACTION, with optional QUERY argument." - (pcase action - ((pred functionp) (funcall action query)) - ((pred hyperspace--evalable-p) (funcall (eval action) query)) - ((pred stringp) (hyperspace-action->browse-url-pattern action query)) - (_ (error "Unknown action")))) - - ;;;###autoload - (defun hyperspace (keyword &optional query) - "Execute action for keyword KEYWORD, with optional QUERY." - (interactive (hyperspace--query)) - (let ((action (cdr (assoc keyword hyperspace-actions)))) - (hyperspace--dispatch (or action hyperspace-default-action) query))) - - ;;;###autoload - (defun hyperspace-enter (&optional query) - "Enter Hyperspace, sending QUERY to the default action. - - If the region is active, use that as the query for - ‘hyperspace-default-action’. Otherwise, prompt the user." - (interactive (list (hyperspace--initial-text))) - (hyperspace - hyperspace-default-action - (or query - (read-from-minibuffer - (format "HS: %s " hyperspace-default-action) nil nil - 'hyperspace-history)))) - - ;; Minor mode - - (defvar hyperspace-minor-mode-map - (let ((kmap (make-sparse-keymap))) - (define-key kmap (kbd "H-SPC") #'hyperspace) - (define-key kmap (kbd "") #'hyperspace-enter) - kmap)) - - ;;;###autoload - (define-minor-mode hyperspace-minor-mode - "Global (universal) minor mode to jump from here to there." - nil nil hyperspace-minor-mode-map - :group 'hyperspace - :global t) - - (provide 'hyperspace) - - ;;; hyperspace.el ends here - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + ;;; hyperspace.el --- Get there from here -*- lexical-binding: t; -*- + + ;; Copyright (C) 2017-2019 Ian Eure + + ;; Author: Ian Eure + ;; URL: https://github.com/ieure/hyperspace-el + ;; Version: 0.8.4 + ;; Package-Requires: ((emacs "25") (s "1.12.0")) + ;; Keywords: tools, convenience + + ;; This program 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. + + ;; This program 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 this program. If not, see . + + ;;; Commentary: + + ;; Hyperspace is a way to get nearly anywhere from wherever you are, + ;; whether that's within Emacs or on the web. It's somewhere in + ;; between Quicksilver and keyword URLs, giving you a single, + ;; consistent interface to get directly where you want to go. It’s + ;; for things that you use often, but not often enough to justify a + ;; dedicated binding. + ;; + ;; When you enter Hyperspace, it prompts you where to go: + ;; + ;; HS: + ;; + ;; This prompt expects a keyword and a query. The keyword picks where + ;; you want to go, and the remainder of the input is an optional + ;; argument which can be used to further search or direct you within + ;; that space. + ;; + ;; Some concrete examples: + ;; + ;; | *If you enter* | *then Hyperspace* | + ;; |------------------+----------------------------------------------------------| + ;; | "el" | opens info node "(elisp)Top" | + ;; | "el eval-region" | searches for "eval-region" in the elisp Info index | + ;; | "bb" | shows all BBDB entries | + ;; | "bb kenneth" | shows all BBDB entries with a name matching "kenneth" | + ;; | "ddg foo" | searches DuckDuckGo for "foo" using browse-url | + ;; | "wp foo" | searches Wikipedia for "foo" using browse-url | + ;; + + ;;; Code: + + (require 'subr-x) + (require 's) + + ;; Action helpers + + (defun hyperspace-action->browse-url-pattern (pattern query) + "Browse a URL former from PATTERN and QUERY." + (browse-url (format pattern query))) + + (defun hyperspace-action->info (node &optional query) + "Open an Info buffer for NODE. + + If QUERY is present, look it up in the index." + (info node) + (when query + (Info-index query))) + + ;; Package definitions + + (defvar hyperspace-history nil + "History of Hyperspace actions.") + + (defgroup hyperspace nil + "Getting there from here" + :prefix "hyperspace-" + :group 'applications) + + (defcustom hyperspace-actions + '(("ddg" . "https://duckduckgo.com/?q=%s") + ("dis" . "https://duckduckgo.com/?q=%s&iax=images&ia=images") + ("wp" . "https://en.wikipedia.org/wiki/%s") + ("g" . "https://www.google.com/search?q=%s") + ("gi" . "https://www.google.com/search?tbm=isch&q=%s") + ("gm" . "https://www.google.com/maps/search/%s") + ("yt" . "https://www.youtube.com/results?search_query=%s") + ("clp" . "https://portland.craigslist.org/search/sss?query=%s") + ("eb" . "https://www.ebay.com/sch/i.html?_nkw=%s") + ("nf" . "https://www.netflix.com/search?q=%s") + ("sh" . (lambda (query) (interactive) (shell-command query))) + ("imdb" . "https://www.imdb.com/find?q=peter+jackson&s=all") + ("bb" . bbdb-search-name) + ("el" . (apply-partially #'hyperspace-action->info "(elisp)Top")) + ("av" . apropos-variable) + ("ac" . apropos-command) + ("af" . (lambda (query) (apropos-command query t)))) + + "Where Hyperspace should send you. + + Hyperspace actions are a cons of (KEYWORD . DISPATCHER). When + Hyperspace is invoked, the keyword is extracted from the user + input and looked up in this alist. The remainder of the + string is passed to the dispatcher as its QUERY argument. + + DISPATCHER can be a function which performs the action. + + DISPATCHER can also be an expression which returns a function + to perform the action. + + Finally, DISPATCHER can be a string with a URL pattern containing + '%s'. The '%s' will be replaced with the query, and the URL browsed." + + :group 'hyperspace + :type '(alist :key-type (string :tag "Keyword") + :value-type (choice + (function :tag "Function") + (string :tag "URL Pattern") + (sexp :tag "Expression")))) + + (defcustom hyperspace-default-action + (caar hyperspace-actions) + "A place to go if you don't specify one." + :group 'hyperspace + :type `(radio + ,@(mapcar (lambda (action) (list 'const (car action))) hyperspace-actions))) + + (defcustom hyperspace-max-region-size 256 + "Maximum size of a region to consider for a Hyperspace query. + + If the region is active when Hyperspace is invoked, it's used + as the default query, unless it's more than this number of + characters." + :group 'hyperspace + :type 'integer) + + + + (defun hyperspace--cleanup (text) + "Clean TEXT so it can be used for a Hyperspace query." + (save-match-data + (string-trim + (replace-regexp-in-string (rx (1+ (or blank "\n"))) " " text)))) + + (defun hyperspace--initial-text () + "Return the initial text. + + This is whatever's in the active region, but cleaned up." + (when (use-region-p) + (let* ((start (region-beginning)) + (end (region-end)) + (size (- end start))) + (when (<= size hyperspace-max-region-size) + (hyperspace--cleanup + (buffer-substring-no-properties start end)))))) + + (defun hyperspace--initial (initial-text) + "Turn INITIAL-TEXT into INITIAL-CONTENTS for reading." + (when initial-text (cons (concat " " initial-text) 1))) + + (defun hyperspace--process-input (text) + "Process TEXT into an actionable keyword and query." + (let ((kw-text (s-split-up-to "\\s-+" text 1))) + (if (assoc (car kw-text) hyperspace-actions) + kw-text + (list hyperspace-default-action text)))) + + (defun hyperspace--query () + "Ask the user for the Hyperspace action and query. + + Returns (KEYWORD . QUERY). + + If the region isn't active, the user is prompted for the + action and query. + + If the region is active, its text is used as the initial value + for the query, and the user enters the action. + + If a prefix argument is specified and the region is active, + `HYPERSPACE-DEFAULT-ACTION' is chosen without prompting." + + (let ((initial (hyperspace--initial-text))) + (if (and initial current-prefix-arg) + (list hyperspace-default-action initial) + (hyperspace--process-input + (read-from-minibuffer "HS: " (hyperspace--initial initial) nil nil + 'hyperspace-history))))) + + (defun hyperspace--evalable-p (form) + "Can FORM be evaluated?" + (and (listp form) + (or (functionp (car form)) + (subrp (car form))))) + + (defun hyperspace--dispatch (action &optional query) + "Execute ACTION, with optional QUERY argument." + (pcase action + ((pred functionp) (funcall action query)) + ((pred hyperspace--evalable-p) (funcall (eval action) query)) + ((pred stringp) (hyperspace-action->browse-url-pattern action query)) + (_ (error "Unknown action")))) + + ;;;###autoload + (defun hyperspace (keyword &optional query) + "Execute action for keyword KEYWORD, with optional QUERY." + (interactive (hyperspace--query)) + (let ((action (cdr (assoc keyword hyperspace-actions)))) + (hyperspace--dispatch (or action hyperspace-default-action) query))) + + ;;;###autoload + (defun hyperspace-enter (&optional query) + "Enter Hyperspace, sending QUERY to the default action. + + If the region is active, use that as the query for + ‘hyperspace-default-action’. Otherwise, prompt the user." + (interactive (list (hyperspace--initial-text))) + (hyperspace + hyperspace-default-action + (or query + (read-from-minibuffer + (format "HS: %s " hyperspace-default-action) nil nil + 'hyperspace-history)))) + + ;; Minor mode + + (defvar hyperspace-minor-mode-map + (let ((kmap (make-sparse-keymap))) + (define-key kmap (kbd "H-SPC") #'hyperspace) + (define-key kmap (kbd "") #'hyperspace-enter) + kmap)) + + ;;;###autoload + (define-minor-mode hyperspace-minor-mode + "Global (universal) minor mode to jump from here to there." + nil nil hyperspace-minor-mode-map + :group 'hyperspace + :global t) + + (provide 'hyperspace) + + ;;; hyperspace.el ends here +#+END_SRC ** Tools *** General - #+BEGIN_SRC emacs-lisp :results silent - (require 'which-key) - (which-key-setup-minibuffer) - (which-key-mode) +#+BEGIN_SRC emacs-lisp :results silent + (require 'which-key) + (which-key-setup-minibuffer) + (which-key-mode) - (require 'fic-mode) - (add-hook 'js-mode-hook 'fic-mode) - #+END_SRC + (require 'fic-mode) + (add-hook 'js-mode-hook 'fic-mode) +#+END_SRC *** Company - #+BEGIN_SRC emacs-lisp :results silent - (require 'company) - (add-hook 'after-init-hook 'global-company-mode) +#+BEGIN_SRC emacs-lisp :results silent + (require 'company) + (add-hook 'after-init-hook 'global-company-mode) - (setq company-dabbrev-downcase nil) - (setq company-idle-delay 0.1) - #+END_SRC + (setq company-dabbrev-downcase nil) + (setq company-idle-delay 0.1) +#+END_SRC *** Diminish - #+BEGIN_SRC emacs-lisp :results silent - (require 'diminish) - (diminish 'auto-revert-mode) - (eval-after-load "company" '(diminish 'company-mode)) - (eval-after-load "counsel" '(diminish 'counsel-mode)) - (eval-after-load "elpy" '(diminish 'elpy-mode)) - (eval-after-load "go-mode" '(diminish 'go-mode)) - (eval-after-load "go-playground" '(diminish 'go-playground-mode)) - (eval-after-load "gorepl-mode" '(diminish 'gorepl-mode)) - (eval-after-load "flycheck" '(diminish 'flycheck-mode)) - (eval-after-load "ivy" '(diminish 'ivy-mode)) - (eval-after-load "projectile" '(diminish 'projectile-mode)) - (eval-after-load "which-key" '(diminish 'which-key-mode)) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (require 'diminish) + (diminish 'auto-revert-mode) + (eval-after-load "company" '(diminish 'company-mode)) + (eval-after-load "counsel" '(diminish 'counsel-mode)) + (eval-after-load "elpy" '(diminish 'elpy-mode)) + (eval-after-load "go-mode" '(diminish 'go-mode)) + (eval-after-load "go-playground" '(diminish 'go-playground-mode)) + (eval-after-load "gorepl-mode" '(diminish 'gorepl-mode)) + (eval-after-load "flycheck" '(diminish 'flycheck-mode)) + (eval-after-load "ivy" '(diminish 'ivy-mode)) + (eval-after-load "projectile" '(diminish 'projectile-mode)) + (eval-after-load "which-key" '(diminish 'which-key-mode)) +#+END_SRC *** Dired - #+BEGIN_SRC emacs-lisp :results silent - (defun dired-mode-setup () - "Will run as hook for `dired-mode'." - (dired-hide-details-mode nil)) - (add-hook 'dired-mode-hook 'dired-mode-setup) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (defun dired-mode-setup () + "Will run as hook for `dired-mode'." + (dired-hide-details-mode nil)) + (add-hook 'dired-mode-hook 'dired-mode-setup) +#+END_SRC +*** Drawing (uml) +#+BEGIN_SRC emacs-lisp :results silent + (add-hook 'artist-mode-hook + (lambda () + (setq compilation-read-command nil) + (set + (make-local-variable 'compile-command) + (format "java -jar /home/locust/scripts/java/ditaa0_9.jar -E %s | awk -F': ' '{print $2}' | awk NF | tail -n1 | xargs -I{} feh {}" + (buffer-file-name))))) + + (add-to-list 'auto-mode-alist '("\\.uml\\'" . artist-mode)) +#+END_SRC *** 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 +#+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) - (require 'swiper) - - (ivy-mode 1) - (counsel-mode) - (setq ivy-use-virtual-buffers t - enable-recursive-minibuffers t - ivy-height 25 - ivy-initial-inputs-alist nil - ivy-extra-directories nil) - - (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 "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) - (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history) - - (defun ivy-open-current-typed-path () - (interactive) - (when ivy--directory - (let* ((dir ivy--directory) - (text-typed ivy-text) - (path (concat dir text-typed))) - (delete-minibuffer-contents) - (ivy--done path)))) - - (define-key ivy-minibuffer-map (kbd "") 'ivy-alt-done) - (define-key ivy-minibuffer-map (kbd "C-f") 'ivy-open-current-typed-path) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (require 'ivy-hydra) + (require 'ivy) + (require 'swiper) + + (ivy-mode 1) + (counsel-mode) + (setq ivy-use-virtual-buffers t + enable-recursive-minibuffers t + ivy-height 25 + ivy-initial-inputs-alist nil + ivy-extra-directories nil) + + (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 "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) + (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history) + + (defun ivy-open-current-typed-path () + (interactive) + (when ivy--directory + (let* ((dir ivy--directory) + (text-typed ivy-text) + (path (concat dir text-typed))) + (delete-minibuffer-contents) + (ivy--done path)))) + + (define-key ivy-minibuffer-map (kbd "") 'ivy-alt-done) + (define-key ivy-minibuffer-map (kbd "C-f") 'ivy-open-current-typed-path) +#+END_SRC *** Ledger #+BEGIN_SRC emacs-lisp :results silent -(autoload 'ledger-mode "ledger-mode" "A major mode for Ledger" t) -(add-to-list 'load-path - (expand-file-name "/path/to/ledger/source/lisp/")) -(add-to-list 'auto-mode-alist '("\\.ledger$" . ledger-mode)) + (autoload 'ledger-mode "ledger-mode" "A major mode for Ledger" t) + (add-to-list 'load-path + (expand-file-name "/path/to/ledger/source/lisp/")) + (add-to-list 'auto-mode-alist '("\\.ledger$" . ledger-mode)) #+END_SRC *** Magit - #+BEGIN_SRC emacs-lisp :results silent - (require 'magit) - (global-set-key (kbd "C-x g") 'magit-status) - (global-set-key (kbd "C-c g") 'magit-status) - (setq magit-completing-read-function 'ivy-completing-read) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (require 'magit) + (global-set-key (kbd "C-x g") 'magit-status) + (global-set-key (kbd "C-c g") 'magit-status) + (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 +#+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") - (require 'mu4e) - - (setq mu4e-maildir "~/Mail" - mu4e-mu-binary "/usr/local/bin/mu" - mu4e-change-filenames-when-moving t ;; Rename files when moving (required by mbsync) - mu4e-compose-in-new-frame t ;; New compose gets new frame - mu4e-context-policy 'pick-first - mu4e-get-mail-command "mbsync -a" ;; MBSYNC is the mail cmd - mu4e-html2text-command "/usr/local/bin/w3m -T text/html" ;; HTML to text command - mu4e-headers-include-related nil ;; Stop threading in INBOX - mu4e-sent-messages-behavior 'delete ;; Delete sent messages - mu4e-update-interval 300 ;; 5 mins - mu4e-use-fancy-chars t ;; use 'fancy' chars - mu4e-user-mail-address-list '("lolson@eaglecrk.com" - "lolson@vlocity.com" - "olson.levi@gmail.com") - mu4e-view-show-images t ;; attempt to show images - mu4e-view-image-max-width 400 ;; max image size - - message-citation-line-format "On %a %d %b %Y at %R, %f wrote:\n" ;; customize the reply-quote-string - message-citation-line-function 'message-insert-formatted-citation-line ;; choose to use the formatted string - message-kill-buffer-on-exit t ;; don't keep messages around - - send-mail-function 'smtpmail-send-it ;; Default email send function - smtpmail-default-smtp-server "smtp.gmail.com" - 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.")) - ;; ) - - (setq mu4e-contexts - `( - ;; ,(make-mu4e-context - ;; :name "Vlocity" - ;; :enter-func (lambda () (mu4e-message "Entering Vlocity")) - ;; :leave-func (lambda () (mu4e-message "Leaving Vlocity")) - ;; ;; we match based on the contact-fields of the message - ;; :match-func (lambda (msg) - ;; (when msg - ;; (string= (mu4e-message-field msg :maildir) "/Vlocity"))) - ;; :vars '( ( user-mail-address . "lolson@vlocity.com" ) - ;; ( smtpmail-mail-address . "lolson@vlocity.com" ) - ;; ( smtpmail-smtp-user . "lolson@vlocity.com" ) - ;; ( smtpmail-smtp-server . "smtp.gmail.com" ) - ;; ( user-full-name . "Levi Olson" ) - ;; ( mu4e-compose-signature . - ;; (concat - ;; "Levi Olson\n" - ;; "Senior UI Developer")) - ;; ( mu4e-sent-folder . "/Vlocity/[Gmail].Sent Mail" ) - ;; ( mu4e-drafts-folder . "/Vlocity/[Gmail].Drafts" ) - ;; ( mu4e-trash-folder . "/Vlocity/[Gmail].Trash" ) - ;; ( mu4e-maildir-shortcuts . (("/Vlocity/INBOX" . ?i) - ;; ("/Vlocity/[Gmail].Sent Mail" . ?s) - ;; ("/Vlocity/[Gmail].Trash" . ?t) - ;; ("/Vlocity/[Gmail].All Mail" . ?a))))) - ,(make-mu4e-context - :name "EagleCreek" - :enter-func (lambda () (mu4e-message "Entering EagleCreek")) - :leave-func (lambda () (mu4e-message "Leaving EagleCreek")) - ;; we match based on the contact-fields of the message - :match-func (lambda (msg) - (when msg - (string= (mu4e-message-field msg :maildir) "/eaglecrk"))) - :vars '( ( user-mail-address . "lolson@eaglecrk.com" ) - ( smtpmail-mail-address . "lolson@eaglecrk.com" ) - ( smtpmail-smtp-user . "lolson@eaglecrk.com" ) - ( smtpmail-smtp-server . "smtp.office365.com" ) - ( user-full-name . "Levi Olson" ) - ;; ( mu4e-compose-signature . - ;; (concat - ;; "Levi Olson\n" - ;; "Eagle Creek Software Services\n" - ;; "Senior Application Developer Consultant\n")) - ( mu4e-sent-folder . "/eaglecrk/Sent Items" ) - ( mu4e-drafts-folder . "/eaglecrk/Drafts" ) - ( mu4e-trash-folder . "/eaglecrk/Deleted Items" ) - ( mu4e-maildir-shortcuts . (("/eaglecrk/Inbox" . ?i) - ("/eaglecrk/Sent Items" . ?s) - ("/eaglecrk/Deleted Items" . ?t) - ("/eaglecrk/Archive" . ?a))))) - ;; ,(make-mu4e-context - ;; :name "Gmail" - ;; :enter-func (lambda () (mu4e-message "Entering Gmail")) - ;; :leave-func (lambda () (mu4e-message "Leaving Gmail")) - ;; ;; this matches maildir /Arkham and its sub-directories - ;; :match-func (lambda (msg) - ;; (when msg - ;; (string= (mu4e-message-field msg :maildir) "/Gmail"))) - ;; :vars '( ( user-mail-address . "olson.levi@gmail.com" ) - ;; ( smtpmail-mail-address . "olson.levi@gmail.com" ) - ;; ( smtpmail-smtp-user . "olson.levi@gmail.com" ) - ;; ( smtpmail-smtp-server . "smtp.gmail.com" ) - ;; ( user-full-name . "Levi Olson" ) - ;; ( mu4e-compose-signature . - ;; (concat - ;; "Levi\n")) - ;; ( mu4e-sent-folder . "/Gmail/[Gmail].Sent Mail" ) - ;; ( mu4e-drafts-folder . "/Gmail/[Gmail].Drafts" ) - ;; ( mu4e-trash-folder . "/Gmail/[Gmail].Trash" ) - ;; ( mu4e-maildir-shortcuts . (("/Gmail/INBOX" . ?i) - ;; ("/Gmail/[Gmail].Sent Mail" . ?s) - ;; ("/Gmail/[Gmail].Trash" . ?t) - ;; ("/Gmail/[Gmail].All Mail" . ?a)) - ;; ))) - )) - - ;; Add option to view HTML in browser - (add-to-list 'mu4e-headers-actions - '("in browser" . mu4e-action-view-in-browser) t) - (add-to-list 'mu4e-view-actions - '("in browser" . mu4e-action-view-in-browser) t) - - - - - (defun my-message-current-line-cited-p () - "Indicate whether the line at point is a cited line." - (save-match-data - (string-match (concat "^" message-cite-prefix-regexp) - (buffer-substring (line-beginning-position) (line-end-position))))) - - (defun my-message-says-attachment-p () - "Return t if the message suggests there can be an attachment." - (save-excursion - (goto-char (point-min)) - (save-match-data - (let (search-result) - (while - (and (setq search-result (re-search-forward "\\(attach\\|pdf\\|file\\)" nil t)) - (my-message-current-line-cited-p))) - search-result)))) - - (defun my-message-has-attachment-p () - "Return t if the message has an attachment." - (save-excursion - (goto-char (point-min)) - (save-match-data - (re-search-forward "<#part" nil t)))) - - (defun my-message-pre-send-check-attachment () - (when (and (my-message-says-attachment-p) - (not (my-message-has-attachment-p))) - (unless - (y-or-n-p "No attachment. Send anyway?") - (error "It seems that an attachment is needed, but none was found. Aborting sending.")))) - - (add-hook 'message-send-hook 'my-message-pre-send-check-attachment) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + ;; (add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu/mu4e") + (add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e") + + (require 'mu4e) + + (setq mu4e-maildir "/home/locust/Mail" + mu4e-mu-binary "/usr/bin/mu" + mu4e-change-filenames-when-moving t ;; Rename files when moving (required by mbsync) + mu4e-compose-in-new-frame t ;; New compose gets new frame + mu4e-context-policy 'pick-first + mu4e-get-mail-command "mbsync -a" ;; MBSYNC is the mail cmd + mu4e-html2text-command "/usr/bin/w3m -T text/html" ;; HTML to text command + mu4e-headers-include-related nil ;; Stop threading in INBOX + mu4e-sent-messages-behavior 'delete ;; Delete sent messages + mu4e-update-interval 300 ;; 5 mins + mu4e-use-fancy-chars t ;; use 'fancy' chars + mu4e-user-mail-address-list '("lolson@eaglecrk.com" + "olson.levi@gmail.com") + + mu4e-view-show-images t ;; attempt to show images + mu4e-view-image-max-width 400 ;; max image size + + message-citation-line-format "On %a %d %b %Y at %R, %f wrote:\n" ;; customize the reply-quote-string + message-citation-line-function 'message-insert-formatted-citation-line ;; choose to use the formatted string + message-kill-buffer-on-exit t ;; don't keep messages around + + send-mail-function 'smtpmail-send-it ;; Default email send function + smtpmail-default-smtp-server "smtp.gmail.com" + 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.")) + ;; ) + + (setq mu4e-contexts + `( + ;; ,(make-mu4e-context + ;; :name "Vlocity" + ;; :enter-func (lambda () (mu4e-message "Entering Vlocity")) + ;; :leave-func (lambda () (mu4e-message "Leaving Vlocity")) + ;; ;; we match based on the contact-fields of the message + ;; :match-func (lambda (msg) + ;; (when msg + ;; (string= (mu4e-message-field msg :maildir) "/Vlocity"))) + ;; :vars '( ( user-mail-address . "lolson@vlocity.com" ) + ;; ( smtpmail-mail-address . "lolson@vlocity.com" ) + ;; ( smtpmail-smtp-user . "lolson@vlocity.com" ) + ;; ( smtpmail-smtp-server . "smtp.gmail.com" ) + ;; ( user-full-name . "Levi Olson" ) + ;; ( mu4e-compose-signature . + ;; (concat + ;; "Levi Olson\n" + ;; "Senior UI Developer")) + ;; ( mu4e-sent-folder . "/Vlocity/[Gmail].Sent Mail" ) + ;; ( mu4e-drafts-folder . "/Vlocity/[Gmail].Drafts" ) + ;; ( mu4e-trash-folder . "/Vlocity/[Gmail].Trash" ) + ;; ( mu4e-maildir-shortcuts . (("/Vlocity/INBOX" . ?i) + ;; ("/Vlocity/[Gmail].Sent Mail" . ?s) + ;; ("/Vlocity/[Gmail].Trash" . ?t) + ;; ("/Vlocity/[Gmail].All Mail" . ?a))))) + ,(make-mu4e-context + :name "EagleCreek" + :enter-func (lambda () (mu4e-message "Entering EagleCreek")) + :leave-func (lambda () (mu4e-message "Leaving EagleCreek")) + ;; we match based on the contact-fields of the message + :match-func (lambda (msg) + (when msg + (string= (mu4e-message-field msg :maildir) "/eaglecrk"))) + :vars '( ( user-mail-address . "lolson@eaglecrk.com" ) + ( smtpmail-mail-address . "lolson@eaglecrk.com" ) + ( smtpmail-smtp-user . "lolson@eaglecrk.com" ) + ( smtpmail-smtp-server . "smtp.office365.com" ) + ( user-full-name . "Levi Olson" ) + ;; ( mu4e-compose-signature . + ;; (concat + ;; "Levi Olson\n" + ;; "Eagle Creek Software Services\n" + ;; "Senior Application Developer Consultant\n")) + ( mu4e-sent-folder . "/eaglecrk/Sent Items" ) + ( mu4e-refile-folder . "/eaglecrk/Archive" ) + ( mu4e-drafts-folder . "/eaglecrk/Drafts" ) + ( mu4e-trash-folder . "/eaglecrk/Deleted Items" ) + ( mu4e-maildir-shortcuts . (("/eaglecrk/Inbox" . ?i) + ("/eaglecrk/Sent Items" . ?s) + ("/eaglecrk/Deleted Items" . ?t) + ("/eaglecrk/Archive" . ?a) + )))) + ,(make-mu4e-context + :name "Gmail" + :enter-func (lambda () (mu4e-message "Entering Gmail")) + :leave-func (lambda () (mu4e-message "Leaving Gmail")) + ;; this matches maildir /Arkham and its sub-directories + :match-func (lambda (msg) + (when msg + (string= (mu4e-message-field msg :maildir) "/gmail"))) + :vars '( ( user-mail-address . "olson.levi@gmail.com" ) + ( smtpmail-mail-address . "olson.levi@gmail.com" ) + ( smtpmail-smtp-user . "olson.levi@gmail.com" ) + ( smtpmail-smtp-server . "smtp.gmail.com" ) + ( user-full-name . "Levi Olson" ) + ( mu4e-compose-signature . + (concat + "Levi\n")) + ( mu4e-sent-folder . "/gmail/[Gmail]/Sent Mail" ) + ( mu4e-refile-folder . "/gmail/[Gmail]/All Mail" ) + ( mu4e-drafts-folder . "/gmail/[Gmail]/Drafts" ) + ( mu4e-trash-folder . "/gmail/[Gmail]/Trash" ) + ( mu4e-maildir-shortcuts . (("/gmail/Inbox" . ?i) + ("/gmail/[Gmail]/Sent Mail" . ?s) + ("/gmail/[Gmail]/Trash" . ?t) + ("/gmail/[Gmail]/All Mail" . ?a) + )))) + )) + + ;; Add option to view HTML in browser + (add-to-list 'mu4e-headers-actions + '("in browser" . mu4e-action-view-in-browser) t) + (add-to-list 'mu4e-view-actions + '("in browser" . mu4e-action-view-in-browser) t) + + + + + (defun my-message-current-line-cited-p () + "Indicate whether the line at point is a cited line." + (save-match-data + (string-match (concat "^" message-cite-prefix-regexp) + (buffer-substring (line-beginning-position) (line-end-position))))) + + (defun my-message-says-attachment-p () + "Return t if the message suggests there can be an attachment." + (save-excursion + (goto-char (point-min)) + (save-match-data + (let (search-result) + (while + (and (setq search-result (re-search-forward "\\(attach\\|pdf\\|file\\)" nil t)) + (my-message-current-line-cited-p))) + search-result)))) + + (defun my-message-has-attachment-p () + "Return t if the message has an attachment." + (save-excursion + (goto-char (point-min)) + (save-match-data + (re-search-forward "<#part" nil t)))) + + (defun my-message-pre-send-check-attachment () + (when (and (my-message-says-attachment-p) + (not (my-message-has-attachment-p))) + (unless + (y-or-n-p "No attachment. Send anyway?") + (error "It seems that an attachment is needed, but none was found. Aborting sending.")))) + + (add-hook 'message-send-hook 'my-message-pre-send-check-attachment) +#+END_SRC *** Projectile - #+BEGIN_SRC emacs-lisp :results silent - (require 'projectile) - (require 'counsel-projectile) - - (projectile-mode) - (setq projectile-mode-line '(:eval (format " %s" (projectile-project-name))) - projectile-remember-window-configs t - projectile-completion-system 'ivy) - (counsel-projectile-mode) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (require 'projectile) + (require 'counsel-projectile) + + (projectile-mode) + (setq projectile-mode-line '(:eval (format " %s" (projectile-project-name))) + projectile-remember-window-configs t + 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 +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 - - ;; Copyright (C) 2008 Mark A. Hershberger - - ;; Original Author: Mark A. Hershberger - ;; Modified by Andrey Kotlarski - ;; Modified by Andrew Gwozdziewycz - ;; Modified by Aidan Gauland October 2011 - ;; Modified by Olivier Sirven November 2013 - ;; Keywords: extensions, convenience, lisp - - ;; This file 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 2, or (at your option) - ;; any later version. - - ;; This file 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; see the file COPYING. If not, write to - ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - ;; Boston, MA 02111-1307, USA. - - ;;; Commentary: - - ;; This provides a single function, `notify', that will produce a notify - ;; pop-up via D-Bus, libnotify, simple message or growl. - ;; To use, just put (autoload 'notify "notify" "Notify TITLE, BODY.") - ;; in your init file. You may override default chosen notification - ;; method by assigning `notify-method' to one of 'notify-via-dbus - ;; 'notify-via-libnotify or 'notify-via-message - ;;; Code: - - (defvar notify-defaults (list :app "Emacs" :icon "emacs" :timeout 5000 - :urgency "low" - :category "emacs.message") - "Notification settings' defaults. - May be overridden with key-value additional arguments to `notify'.") - (defvar notify-delay '(0 5 0) - "Minimum time allowed between notifications in time format.") - (defvar notify-last-notification '(0 0 0) "Time of last notification.") - (defvar notify-method 'notify-via-growl "Notification method among - 'notify-via-dbus, 'notify-via-libnotify, 'notify-via-message or - 'notify-via-growl") - - ;; determine notification method unless already set - ;; prefer growl > D-Bus > libnotify > message - (cond - ((null notify-method) - (setq notify-method - (cond - ((executable-find "growlnotify") 'notify-via-growl) - ((and (require 'dbus nil t) - (dbus-ping :session "org.freedesktop.Notifications")) - (defvar notify-id 0 "Current D-Bus notification id.") - 'notify-via-dbus) - ((executable-find "notify-send") 'notify-via-libnotify) - (t 'notify-via-message)))) - ((eq notify-method 'notify-via-dbus) ;housekeeping for pre-chosen DBus - (if (and (require 'dbus nil t) +#+BEGIN_SRC emacs-lisp :results silent + ;;; notify.el --- notification front-end + + ;; Copyright (C) 2008 Mark A. Hershberger + + ;; Original Author: Mark A. Hershberger + ;; Modified by Andrey Kotlarski + ;; Modified by Andrew Gwozdziewycz + ;; Modified by Aidan Gauland October 2011 + ;; Modified by Olivier Sirven November 2013 + ;; Keywords: extensions, convenience, lisp + + ;; This file 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 2, or (at your option) + ;; any later version. + + ;; This file 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; see the file COPYING. If not, write to + ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + ;; Boston, MA 02111-1307, USA. + + ;;; Commentary: + + ;; This provides a single function, `notify', that will produce a notify + ;; pop-up via D-Bus, libnotify, simple message or growl. + ;; To use, just put (autoload 'notify "notify" "Notify TITLE, BODY.") + ;; in your init file. You may override default chosen notification + ;; method by assigning `notify-method' to one of 'notify-via-dbus + ;; 'notify-via-libnotify or 'notify-via-message + ;;; Code: + + (defvar notify-defaults (list :app "Emacs" :icon "emacs" :timeout 5000 + :urgency "low" + :category "emacs.message") + "Notification settings' defaults. + May be overridden with key-value additional arguments to `notify'.") + (defvar notify-delay '(0 5 0) + "Minimum time allowed between notifications in time format.") + (defvar notify-last-notification '(0 0 0) "Time of last notification.") + (defvar notify-method 'notify-via-growl "Notification method among + 'notify-via-dbus, 'notify-via-libnotify, 'notify-via-message or + 'notify-via-growl") + + ;; determine notification method unless already set + ;; prefer growl > D-Bus > libnotify > message + (cond + ((null notify-method) + (setq notify-method + (cond + ((executable-find "growlnotify") 'notify-via-growl) + ((and (require 'dbus nil t) (dbus-ping :session "org.freedesktop.Notifications")) (defvar notify-id 0 "Current D-Bus notification id.") - (setq notify-method (if (executable-find "notify-send") - 'notify-via-libnotify - 'notify-via-message)))) - ((and (eq notify-method 'notify-via-libnotify) - (not (executable-find "notify-send"))) ;housekeeping for pre-chosen libnotify - (setq notify-method - (if (and (require 'dbus nil t) - (dbus-ping :session "org.freedesktop.Notifications")) - (progn - (defvar notify-id 0 "Current D-Bus notification id.") - 'notify-via-dbus) - 'notify-via-message))) - ((and (eq notify-method 'notify-via-growl) - (not (executable-find "growlnotify"))) - (setq notify-method 'notify-via-message))) - - (defun notify-via-dbus (title body) - "Send notification with TITLE, BODY `D-Bus'." - (dbus-call-method :session "org.freedesktop.Notifications" - "/org/freedesktop/Notifications" - "org.freedesktop.Notifications" "Notify" - (get 'notify-defaults :app) - (setq notify-id (+ notify-id 1)) - (get 'notify-defaults :icon) title body '(:array) - '(:array :signature "{sv}") ':int32 - (get 'notify-defaults :timeout))) - - (defun notify-via-libnotify (title body) - "Notify with TITLE, BODY via `libnotify'." - (call-process "notify-send" nil 0 nil - title body "-t" - (number-to-string (get 'notify-defaults :timeout)) - "-i" (get 'notify-defaults :icon) - "-u" (get 'notify-defaults :urgency) - "-c" (get 'notify-defaults :category))) - - (defun notify-via-message (title body) - "Notify TITLE, BODY with a simple message." - (message "%s: %s" title body)) - - (defun notify-via-growl (title body) - "Notify TITLE, BODY with a growl" - (call-process "growlnotify" nil 0 nil - "-a" (get 'notify-defaults :app) - "-n" (get 'notify-defaults :category) - "-t" (notify-via-growl-stringify title) - "-m" (notify-via-growl-stringify body))) - - (defun notify-via-growl-stringify (thing) - (cond ((null thing) "") - ((stringp thing) thing) - (t (format "%s" thing)))) - - (defun keywords-to-properties (symbol args &optional defaults) - "Add to SYMBOL's property list key-values from ARGS and DEFAULTS." - (when (consp defaults) - (keywords-to-properties symbol defaults)) - (while args - (put symbol (car args) (cadr args)) - (setq args (cddr args)))) - - - ;;;###autoload - (defun notify (title body &rest args) - "Notify TITLE, BODY via `notify-method'. - ARGS may be amongst :timeout, :icon, :urgency, :app and :category." - (when (time-less-p notify-delay - (time-since notify-last-notification)) - (or (eq notify-method 'notify-via-message) - (keywords-to-properties 'notify-defaults args - notify-defaults)) - (setq notify-last-notification (current-time)) - (funcall notify-method title body))) - - (provide 'notify) - - ;;; notify.el ends here - #+END_SRC + 'notify-via-dbus) + ((executable-find "notify-send") 'notify-via-libnotify) + (t 'notify-via-message)))) + ((eq notify-method 'notify-via-dbus) ;housekeeping for pre-chosen DBus + (if (and (require 'dbus nil t) + (dbus-ping :session "org.freedesktop.Notifications")) + (defvar notify-id 0 "Current D-Bus notification id.") + (setq notify-method (if (executable-find "notify-send") + 'notify-via-libnotify + 'notify-via-message)))) + ((and (eq notify-method 'notify-via-libnotify) + (not (executable-find "notify-send"))) ;housekeeping for pre-chosen libnotify + (setq notify-method + (if (and (require 'dbus nil t) + (dbus-ping :session "org.freedesktop.Notifications")) + (progn + (defvar notify-id 0 "Current D-Bus notification id.") + 'notify-via-dbus) + 'notify-via-message))) + ((and (eq notify-method 'notify-via-growl) + (not (executable-find "growlnotify"))) + (setq notify-method 'notify-via-message))) + + (defun notify-via-dbus (title body) + "Send notification with TITLE, BODY `D-Bus'." + (dbus-call-method :session "org.freedesktop.Notifications" + "/org/freedesktop/Notifications" + "org.freedesktop.Notifications" "Notify" + (get 'notify-defaults :app) + (setq notify-id (+ notify-id 1)) + (get 'notify-defaults :icon) title body '(:array) + '(:array :signature "{sv}") ':int32 + (get 'notify-defaults :timeout))) + + (defun notify-via-libnotify (title body) + "Notify with TITLE, BODY via `libnotify'." + (call-process "notify-send" nil 0 nil + title body "-t" + (number-to-string (get 'notify-defaults :timeout)) + "-i" (get 'notify-defaults :icon) + "-u" (get 'notify-defaults :urgency) + "-c" (get 'notify-defaults :category))) + + (defun notify-via-message (title body) + "Notify TITLE, BODY with a simple message." + (message "%s: %s" title body)) + + (defun notify-via-growl (title body) + "Notify TITLE, BODY with a growl" + (call-process "growlnotify" nil 0 nil + "-a" (get 'notify-defaults :app) + "-n" (get 'notify-defaults :category) + "-t" (notify-via-growl-stringify title) + "-m" (notify-via-growl-stringify body))) + + (defun notify-via-growl-stringify (thing) + (cond ((null thing) "") + ((stringp thing) thing) + (t (format "%s" thing)))) + + (defun keywords-to-properties (symbol args &optional defaults) + "Add to SYMBOL's property list key-values from ARGS and DEFAULTS." + (when (consp defaults) + (keywords-to-properties symbol defaults)) + (while args + (put symbol (car args) (cadr args)) + (setq args (cddr args)))) + + + ;;;###autoload + (defun notify (title body &rest args) + "Notify TITLE, BODY via `notify-method'. + ARGS may be amongst :timeout, :icon, :urgency, :app and :category." + (when (time-less-p notify-delay + (time-since notify-last-notification)) + (or (eq notify-method 'notify-via-message) + (keywords-to-properties 'notify-defaults args + notify-defaults)) + (setq notify-last-notification (current-time)) + (funcall notify-method title body))) + + (provide 'notify) + + ;;; notify.el ends here +#+END_SRC *** Jabber - #+BEGIN_SRC emacs-lisp :results silent - (require 'jabber) - - (setq jabber-history-enabled t - jabber-use-global-history nil - jabber-backlog-number 40 - jabber-backlog-days 30 - jabber-alert-presence-message-function (lambda (_who _oldstatus _newstatus _statustext) nil) - ) - - (setq jabber-account-list '( - ("olson.levi@gmail.com" - (:network-server . "talk.google.com") - (:connection-type . ssl)) - ;; ("lolson@vlocity.com" - ;; (:network-server . "talk.google.com") - ;; (:connection-type . ssl)) - )) - - (defvar my-chat-prompt "[%t] %n>\n" "Customized chat prompt") - (when (featurep 'jabber) - (setq - jabber-chat-foreign-prompt-format my-chat-prompt - jabber-chat-local-prompt-format my-chat-prompt - jabber-groupchat-prompt-format my-chat-prompt - jabber-muc-private-foreign-prompt-format "[%t] %g/%n>\n" - ) - ) - - (defun notify-jabber-notify (from buf text _proposed-alert) - "(jabber.el hook) Notify of new Jabber chat messages via notify.el" - (when (or jabber-message-alert-same-buffer - (not (memq (selected-window) (get-buffer-window-list buf)))) - (if (jabber-muc-sender-p from) - (notify (format "(PM) %s" - (jabber-jid-displayname (jabber-jid-user from))) - (format "%s: %s" (jabber-jid-resource from) text))) - (notify (format "%s" (jabber-jid-displayname from)) - text))) - - ;; (add-hook 'jabber-alert-message-hooks 'notify-jabber-notify) - - - ;; (require 'autosmiley) - ;; (add-hook 'jabber-chat-mode-hook 'autosmiley-mode) +#+BEGIN_SRC emacs-lisp :results silent + (require 'jabber) + (setq jabber-history-enabled t + jabber-use-global-history nil + jabber-backlog-number 40 + jabber-backlog-days 30 + jabber-alert-presence-message-function (lambda (_who _oldstatus _newstatus _statustext) nil) + ) - (defun jabber () - (interactive) - (jabber-connect-all) - (switch-to-buffer "*-jabber-roster-*")) - #+END_SRC + (setq jabber-account-list '( + ("olson.levi@gmail.com" + (:network-server . "talk.google.com") + (:connection-type . ssl)) + ;; ("lolson@vlocity.com" + ;; (:network-server . "talk.google.com") + ;; (:connection-type . ssl)) + )) + + (defvar my-chat-prompt "[%t] %n>\n" "Customized chat prompt") + (when (featurep 'jabber) + (setq + jabber-chat-foreign-prompt-format my-chat-prompt + jabber-chat-local-prompt-format my-chat-prompt + jabber-groupchat-prompt-format my-chat-prompt + jabber-muc-private-foreign-prompt-format "[%t] %g/%n>\n" + ) + ) + + (defun notify-jabber-notify (from buf text _proposed-alert) + "(jabber.el hook) Notify of new Jabber chat messages via notify.el" + (when (or jabber-message-alert-same-buffer + (not (memq (selected-window) (get-buffer-window-list buf)))) + (if (jabber-muc-sender-p from) + (notify (format "(PM) %s" + (jabber-jid-displayname (jabber-jid-user from))) + (format "%s: %s" (jabber-jid-resource from) text))) + (notify (format "%s" (jabber-jid-displayname from)) + text))) + + ;; (add-hook 'jabber-alert-message-hooks 'notify-jabber-notify) + + + ;; (require 'autosmiley) + ;; (add-hook 'jabber-chat-mode-hook 'autosmiley-mode) + + + (defun jabber () + (interactive) + (jabber-connect-all) + (switch-to-buffer "*-jabber-roster-*")) +#+END_SRC *** Terminal-Notifier - #+BEGIN_SRC emacs-lisp :results silent :tangle no - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ;; Terminal notifier - ;; requires 'brew install terminal-notifier' - ;; stolen from erc-notifier - - (defvar terminal-notifier-command (executable-find "terminal-notifier") "The path to terminal-notifier.") - - ; (terminal-notifier-notify "Emacs notification" "Something amusing happened") - - (defun terminal-notifier-notify (title message) - "Show a message with - terminal-notifier-command - ." - (start-process "terminal-notifier" - "terminal-notifier" - terminal-notifier-command - "-title" title - "-message" message - "-activate" "org.gnu.Emacs")) - - (defun timed-notification (time msg) - (interactive "sNotification when (e.g: 2 minutes, 60 seconds, 3 days): \nsMessage: ") - (run-at-time time nil (lambda (msg) (terminal-notifier-notify "Emacs" msg)) msg)) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent :tangle no + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Terminal notifier + ;; requires 'brew install terminal-notifier' + ;; stolen from erc-notifier + + (defvar terminal-notifier-command (executable-find "terminal-notifier") "The path to terminal-notifier.") + + ; (terminal-notifier-notify "Emacs notification" "Something amusing happened") + + (defun terminal-notifier-notify (title message) + "Show a message with + terminal-notifier-command + ." + (start-process "terminal-notifier" + "terminal-notifier" + terminal-notifier-command + "-title" title + "-message" message + "-activate" "org.gnu.Emacs")) + + (defun timed-notification (time msg) + (interactive "sNotification when (e.g: 2 minutes, 60 seconds, 3 days): \nsMessage: ") + (run-at-time time nil (lambda (msg) (terminal-notifier-notify "Emacs" msg)) msg)) +#+END_SRC *** Hyperspace - #+BEGIN_SRC emacs-lisp :results silent - (defun hyperspace-action->mu4e (&optional query) - "Search mu4e with QUERY. - - If QUERY is unspecified, use the first bookmark in variable - ‘mu4e-bookmarks’ and update mail and index." - - (mu4e-headers-search (or query (caar mu4e-bookmarks))) - (unless query - (mu4e-update-mail-and-index nil))) - (add-to-list 'hyperspace-actions '("m4" . hyperspace-action->mu4e)) - - (defun hyperspace-action->elfeed (&optional query) - "Load elfeed, optionally searching for QUERY." - (elfeed) - (if query - (elfeed-search-set-filter query) - (elfeed-search-fetch nil))) - (add-to-list 'hyperspace-actions '("lf" . hyperspace-action->elfeed)) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (defun hyperspace-action->mu4e (&optional query) + "Search mu4e with QUERY. + + If QUERY is unspecified, use the first bookmark in variable + ‘mu4e-bookmarks’ and update mail and index." + + (mu4e-headers-search (or query (caar mu4e-bookmarks))) + (unless query + (mu4e-update-mail-and-index nil))) + (add-to-list 'hyperspace-actions '("m4" . hyperspace-action->mu4e)) + + (defun hyperspace-action->elfeed (&optional query) + "Load elfeed, optionally searching for QUERY." + (elfeed) + (if query + (elfeed-search-set-filter query) + (elfeed-search-fetch nil))) + (add-to-list 'hyperspace-actions '("lf" . hyperspace-action->elfeed)) +#+END_SRC ** Functions - #+BEGIN_SRC emacs-lisp :results silent - (defun find-user-init-file () - "Edit the `~/.emacs.d/init.org' file." - (interactive) - (find-file "~/.emacs.d/init.org")) - - (defun find-todo-file () - "Edit the `~/todo.org' file." - (interactive) - (find-file "~/Dropbox/Org/todo.org")) - - (defun load-user-init-file () - "LO: Reload the `~/.emacs.d/init.elc' file." - (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)) - (bounds (find-tag-default-bounds)) - (beg (car bounds)) (end (cdr bounds)) - (str (isearch-symbol-regexp (find-tag-default))) - (search (if backwardp 'search-backward-regexp - 'search-forward-regexp))) - (goto-char (if backwardp beg end)) - (funcall search str nil t) - (cond ((<= beg (point) end) (goto-char point)) - (backwardp (forward-char (- point beg))) - (t (backward-char (- end point)))))) - - (defun jump-to-previous-like-this () - "Jumps to the previous occurrence of the symbol at point." - (interactive) - (jump-to-symbol-internal t)) - - (defun jump-to-next-like-this () - "Jumps to the next occurrence of the symbol at point." - (interactive) - (jump-to-symbol-internal)) - - (defun match-paren (arg) - "Go to the matching paren if on a paren; otherwise insert ARG (a literal % sign)." - (interactive "p") - (cond ((looking-at "\\s(") (forward-list 1)) - ((looking-back "\\s(" 2) (backward-char 1) (forward-list 1)) - ((looking-at "\\s)") (forward-char 1) (backward-list 1)) - ((looking-back "\\s)" 2) (backward-list 1)) - (t (self-insert-command (or arg 1))))) - - (defun kill-this-buffer-unless-scratch () - "Works like `kill-this-buffer' unless the current buffer is the *scratch* buffer. In which case the buffer content is deleted and the buffer is buried." - (interactive) - (if (not (string= (buffer-name) "*scratch*")) - (kill-this-buffer) - (delete-region (point-min) (point-max)) - (switch-to-buffer (other-buffer)) - (bury-buffer "*scratch*"))) - - (defun delete-backward-sentence () - "LO: Delete to the beginning of the sentence/line." - (interactive) - (delete-region (point) (progn (backward-sentence) (point)))) - - (defun delete-backward-to-boundary (arg) - "LO: Delete backward to the previous word boundary. With ARG, do this many times." - (interactive "p") - (let ((a (point)) - (b (progn - (backward-word arg) - (forward-word) - (point)))) - (if (< a b) - (delete-region a (progn (backward-word arg) (point))) - (if (= a b) - (delete-region a (progn (backward-word arg) (point))) - (delete-region a b))))) - - (defun comment-or-uncomment-region-or-line () - "Comments or uncomments the region or the current line if there's no active region." - (interactive) - (let (beg end) - (if (region-active-p) - (setq beg (region-beginning) end (region-end)) - (setq beg (line-beginning-position) end (line-end-position))) - (comment-or-uncomment-region beg end))) - - (defun fold-toggle (column) - "Code folding by COLUMN." - (interactive "P") - (set-selective-display - (or column - (unless selective-display - (1+ (current-column)))))) - - (defun new-line-below () - "LO: Create a new line below current line." - (interactive) - (move-end-of-line 1) - (newline-and-indent)) - - (defun new-line-above () - "LO: Create a new line above current line." - (interactive) - (move-beginning-of-line 1) - (newline) - (forward-line -1)) - - (defun duplicate-thing (comment) - "LO: Duplicates the current line, or the region if active. If an argument (COMMENT) is given, the duplicated region will be commented out." - (interactive "P") - (save-excursion - (let ((start (if (region-active-p) (region-beginning) (point-at-bol))) - (end (if (region-active-p) (region-end) (point-at-eol)))) - (goto-char end) - (unless (region-active-p) - (newline)) - (insert (buffer-substring start end)) - (when comment (comment-region start end))))) - - (defun tidy () - "LO: Ident, untabify and unwhitespacify current buffer, or region if active." - (interactive) - (let ((beg (if (region-active-p) (region-beginning) (point-min))) - (end (if (region-active-p) (region-end) (point-max)))) - (let ((inhibit-message t)) - (indent-region beg end)) - (whitespace-cleanup) - (untabify beg (if (< end (point-max)) end (point-max))) - (if (region-active-p) (message "Indenting Region...Done") (message "Indenting File...Done")))) - - (defun phil-columns () - "LO: Good 'ol Phil-Columns." - (interactive) - (message "Good 'ol fill-columns") - (with-output-to-temp-buffer "*PHIL-COLUMN*" - (shell-command "mpv --no-video 'https://www.youtube.com/watch?v=YkADj0TPrJA&t=3m16s' > /dev/null 2>&1 & sleep 8; pkill mpv")) - (other-window 1) - (delete-window)) - - (declare-function first "Goto FIRST shell.") - (declare-function goto-non-shell-buffer "Goto something other than a shell buffer.") - (declare-function switch-shell "Switch shell.") - - (let ((last-shell "")) - (defun toggle-shell () - (interactive) - (cond ((string-match-p "^\\*shell<[1-9][0-9]*>\\*$" (buffer-name)) - (goto-non-shell-buffer)) - ((get-buffer last-shell) (switch-to-buffer last-shell)) - (t (shell (setq last-shell "*shell<1>*"))))) - - (defun switch-shell (n) - (let ((buffer-name (format "*shell<%d>*" n))) - (setq last-shell buffer-name) - (cond ((get-buffer buffer-name) - (switch-to-buffer buffer-name)) - (t (shell buffer-name) - (rename-buffer buffer-name))))) - - (defun goto-non-shell-buffer () - (let* ((r "^\\*shell<[1-9][0-9]*>\\*$") - (shell-buffer-p (lambda (b) (string-match-p r (buffer-name b)))) - (non-shells (cl-remove-if shell-buffer-p (buffer-list)))) - (when non-shells - (switch-to-buffer (first non-shells)))))) - - - (defadvice shell (after kill-with-no-query nil activate) - "." - (set-process-query-on-exit-flag (get-buffer-process ad-return-value) nil)) - - (declare-function comint-truncate-buffer ".") - (defun clear-comint () - "Run `comint-truncate-buffer' with the `comint-buffer-maximum-size' set to zero." - (interactive) - (let ((comint-buffer-maximum-size 0)) - (comint-truncate-buffer))) - - (defun c-setup () - "Compile." - (local-set-key (kbd "C-c C-c") 'compile)) - #+END_SRC +#+BEGIN_SRC emacs-lisp :results silent + (defun find-user-init-file () + "Edit the `~/.emacs.d/init.org' file." + (interactive) + (find-file "~/.emacs.d/init.org")) + + (defun find-todo-file () + "Edit the `~/todo.org' file." + (interactive) + (find-file "~/Dropbox/Org/todo.org")) + + (defun load-user-init-file () + "LO: Reload the `~/.emacs.d/init.elc' file." + (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)) + (bounds (find-tag-default-bounds)) + (beg (car bounds)) (end (cdr bounds)) + (str (isearch-symbol-regexp (find-tag-default))) + (search (if backwardp 'search-backward-regexp + 'search-forward-regexp))) + (goto-char (if backwardp beg end)) + (funcall search str nil t) + (cond ((<= beg (point) end) (goto-char point)) + (backwardp (forward-char (- point beg))) + (t (backward-char (- end point)))))) + + (defun jump-to-previous-like-this () + "Jumps to the previous occurrence of the symbol at point." + (interactive) + (jump-to-symbol-internal t)) + + (defun jump-to-next-like-this () + "Jumps to the next occurrence of the symbol at point." + (interactive) + (jump-to-symbol-internal)) + + (defun match-paren (arg) + "Go to the matching paren if on a paren; otherwise insert ARG (a literal % sign)." + (interactive "p") + (cond ((looking-at "\\s(") (forward-list 1)) + ((looking-back "\\s(" 2) (backward-char 1) (forward-list 1)) + ((looking-at "\\s)") (forward-char 1) (backward-list 1)) + ((looking-back "\\s)" 2) (backward-list 1)) + (t (self-insert-command (or arg 1))))) + + (defun kill-this-buffer-unless-scratch () + "Works like `kill-this-buffer' unless the current buffer is the *scratch* buffer. In which case the buffer content is deleted and the buffer is buried." + (interactive) + (if (not (string= (buffer-name) "*scratch*")) + (kill-this-buffer) + (delete-region (point-min) (point-max)) + (switch-to-buffer (other-buffer)) + (bury-buffer "*scratch*"))) + + (defun delete-backward-sentence () + "LO: Delete to the beginning of the sentence/line." + (interactive) + (delete-region (point) (progn (backward-sentence) (point)))) + + (defun delete-backward-to-boundary (arg) + "LO: Delete backward to the previous word boundary. With ARG, do this many times." + (interactive "p") + (let ((a (point)) + (b (progn + (backward-word arg) + (forward-word) + (point)))) + (if (< a b) + (delete-region a (progn (backward-word arg) (point))) + (if (= a b) + (delete-region a (progn (backward-word arg) (point))) + (delete-region a b))))) + + (defun comment-or-uncomment-region-or-line () + "Comments or uncomments the region or the current line if there's no active region." + (interactive) + (let (beg end) + (if (region-active-p) + (setq beg (region-beginning) end (region-end)) + (setq beg (line-beginning-position) end (line-end-position))) + (comment-or-uncomment-region beg end))) + + (defun fold-toggle (column) + "Code folding by COLUMN." + (interactive "P") + (set-selective-display + (or column + (unless selective-display + (1+ (current-column)))))) + + (defun new-line-below () + "LO: Create a new line below current line." + (interactive) + (move-end-of-line 1) + (newline-and-indent)) + + (defun new-line-above () + "LO: Create a new line above current line." + (interactive) + (move-beginning-of-line 1) + (newline) + (forward-line -1)) + + (defun duplicate-thing (comment) + "LO: Duplicates the current line, or the region if active. If an argument (COMMENT) is given, the duplicated region will be commented out." + (interactive "P") + (save-excursion + (let ((start (if (region-active-p) (region-beginning) (point-at-bol))) + (end (if (region-active-p) (region-end) (point-at-eol)))) + (goto-char end) + (unless (region-active-p) + (newline)) + (insert (buffer-substring start end)) + (when comment (comment-region start end))))) + + (defun tidy () + "LO: Ident, untabify and unwhitespacify current buffer, or region if active." + (interactive) + (let ((beg (if (region-active-p) (region-beginning) (point-min))) + (end (if (region-active-p) (region-end) (point-max)))) + (let ((inhibit-message t)) + (indent-region beg end)) + (whitespace-cleanup) + (untabify beg (if (< end (point-max)) end (point-max))) + (if (region-active-p) (message "Indenting Region...Done") (message "Indenting File...Done")))) + + (defun phil-columns () + "LO: Good 'ol Phil-Columns." + (interactive) + (message "Good 'ol fill-columns") + (with-output-to-temp-buffer "*PHIL-COLUMN*" + (shell-command "mpv --no-video 'https://www.youtube.com/watch?v=YkADj0TPrJA&t=3m16s' > /dev/null 2>&1 & sleep 8; pkill mpv")) + (other-window 1) + (delete-window)) + + (declare-function first "Goto FIRST shell.") + (declare-function goto-non-shell-buffer "Goto something other than a shell buffer.") + (declare-function switch-shell "Switch shell.") + + (let ((last-shell "")) + (defun toggle-shell () + (interactive) + (cond ((string-match-p "^\\*shell<[1-9][0-9]*>\\*$" (buffer-name)) + (goto-non-shell-buffer)) + ((get-buffer last-shell) (switch-to-buffer last-shell)) + (t (shell (setq last-shell "*shell<1>*"))))) + + (defun switch-shell (n) + (let ((buffer-name (format "*shell<%d>*" n))) + (setq last-shell buffer-name) + (cond ((get-buffer buffer-name) + (switch-to-buffer buffer-name)) + (t (shell buffer-name) + (rename-buffer buffer-name))))) + + (defun goto-non-shell-buffer () + (let* ((r "^\\*shell<[1-9][0-9]*>\\*$") + (shell-buffer-p (lambda (b) (string-match-p r (buffer-name b)))) + (non-shells (cl-remove-if shell-buffer-p (buffer-list)))) + (when non-shells + (switch-to-buffer (first non-shells)))))) + + + (defadvice shell (after kill-with-no-query nil activate) + "." + (set-process-query-on-exit-flag (get-buffer-process ad-return-value) nil)) + + (declare-function comint-truncate-buffer ".") + (defun clear-comint () + "Run `comint-truncate-buffer' with the `comint-buffer-maximum-size' set to zero." + (interactive) + (let ((comint-buffer-maximum-size 0)) + (comint-truncate-buffer))) + + (defun c-setup () + "Compile." + (local-set-key (kbd "C-c C-c") 'compile)) +#+END_SRC ** Bindings - #+begin_src emacs-lisp :results silent - (require 'company) - (add-hook 'comint-mode-hook (lambda () (local-set-key (kbd "c-l") 'clear-comint))) - (add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode) - (add-hook 'lisp-interaction-mode-hook 'turn-on-eldoc-mode) - (add-hook 'c-mode-common-hook 'c-setup) - (add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)) - - (defvar company-active-map (make-keymap) - "company mode keymap.") - (defvar custom-bindings (make-keymap) - "a keymap of custom bindings.") - - (define-key custom-bindings (kbd "M-p") 'jump-to-previous-like-this) - (define-key custom-bindings (kbd "M-r") 'fill-paragraph) - (define-key custom-bindings (kbd "M-n") 'jump-to-next-like-this) - (define-key custom-bindings (kbd "M-") 'switch-to-next-buffer) - (define-key custom-bindings (kbd "M-")'delete-backward-to-boundary) - (define-key custom-bindings (kbd "C-")'delete-backward-to-boundary) - (define-key custom-bindings (kbd "C-}") 'mc/mark-next-like-this) - (define-key custom-bindings (kbd "C-)") 'mc/unmark-next-like-this) - (define-key custom-bindings (kbd "C-{") 'mc/mark-previous-like-this) - (define-key custom-bindings (kbd "C-(") 'mc/unmark-previous-like-this) - (define-key custom-bindings (kbd "C-'") 'mc-hide-unmatched-lines-mode) - (define-key custom-bindings (kbd "C-c 1") 'mc/insert-numbers) - (define-key custom-bindings (kbd "C-c s") 'mc/sort-regions) - (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") '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) - (define-key custom-bindings (kbd "C-x C-l f") 'elfeed) - (define-key custom-bindings (kbd "C-x C-l a") 'org-agenda) - (define-key custom-bindings (kbd "C-,") 'org-cycle-agenda-files) - (define-key custom-bindings (kbd "C-x C-l c") 'calendar) - (define-key custom-bindings (kbd "M-SPC") #'hyperspace) - ;; (dolist (n (number-sequence 1 9)) - ;; (global-set-key (kbd (concat "M-" (int-to-string n))) - ;; (lambda () (interactive) (switch-shell n)))) - - (define-key company-active-map (kbd "C-d") 'company-show-doc-buffer) - (define-key company-active-map (kbd "C-n") 'company-select-next) - (define-key company-active-map (kbd "C-p") 'company-select-previous) - (define-key company-active-map (kbd "") 'company-complete) - - (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) - (define-key custom-bindings (kbd "C-#") 'er/contract-region) - (define-key custom-bindings (kbd "C-S-c C-S-c") 'mc/edit-lines) - (define-key custom-bindings (kbd "C-c b") 'ivy-switch-buffer) - (define-key custom-bindings (kbd "C-c l") 'org-store-link) - (define-key custom-bindings (kbd "C-c t") 'org-set-tags) - (define-key custom-bindings (kbd "M-u") 'upcase-dwim) - (define-key custom-bindings (kbd "M-c") 'capitalize-dwim) - (define-key custom-bindings (kbd "M-l") 'downcase-dwim) - (define-key custom-bindings (kbd "M-o") 'other-window) - (define-key custom-bindings (kbd "C-c s") 'ispell-word) - (define-key custom-bindings (kbd "C-c C-d") 'org-capture) - (define-key custom-bindings (kbd "C-c ") 'windmove-up) - (define-key custom-bindings (kbd "C-c ") 'windmove-down) - (define-key custom-bindings (kbd "C-c ") 'windmove-left) - (define-key custom-bindings (kbd "C-c ") 'windmove-right) - (define-key custom-bindings (kbd "C-c a") (lambda () (interactive) (org-agenda nil "n"))) - (define-key custom-bindings (kbd "C-c e") 'find-user-init-file) - (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-;") '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-minor-mode custom-bindings-mode - "A mode that activates custom-bindings." - t nil custom-bindings) - #+END_SRC +#+begin_src emacs-lisp :results silent + (require 'company) + (add-hook 'comint-mode-hook (lambda () (local-set-key (kbd "c-l") 'clear-comint))) + (add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode) + (add-hook 'lisp-interaction-mode-hook 'turn-on-eldoc-mode) + (add-hook 'c-mode-common-hook 'c-setup) + (add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)) + + (defvar company-active-map (make-keymap) + "company mode keymap.") + (defvar artist-mode-map (make-keymap) + "artist mode keymap.") + (defvar custom-bindings (make-keymap) + "a keymap of custom bindings.") + + (define-key custom-bindings (kbd "M-p") 'jump-to-previous-like-this) + (define-key custom-bindings (kbd "M-r") 'fill-paragraph) + (define-key custom-bindings (kbd "M-n") 'jump-to-next-like-this) + (define-key custom-bindings (kbd "M-") 'switch-to-next-buffer) + (define-key custom-bindings (kbd "M-")'delete-backward-to-boundary) + (define-key custom-bindings (kbd "C-")'delete-backward-to-boundary) + (define-key custom-bindings (kbd "C-}") 'mc/mark-next-like-this) + (define-key custom-bindings (kbd "C-)") 'mc/unmark-next-like-this) + (define-key custom-bindings (kbd "C-{") 'mc/mark-previous-like-this) + (define-key custom-bindings (kbd "C-(") 'mc/unmark-previous-like-this) + (define-key custom-bindings (kbd "C-'") 'mc-hide-unmatched-lines-mode) + (define-key custom-bindings (kbd "C-c 1") 'mc/insert-numbers) + (define-key custom-bindings (kbd "C-c s") 'mc/sort-regions) + (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") '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) + (define-key custom-bindings (kbd "C-x C-l f") 'elfeed) + (define-key custom-bindings (kbd "C-x C-l a") 'org-agenda) + (define-key custom-bindings (kbd "C-,") 'org-cycle-agenda-files) + (define-key custom-bindings (kbd "C-x C-l c") 'calendar) + (define-key custom-bindings (kbd "M-SPC") #'hyperspace) + ;; (dolist (n (number-sequence 1 9)) + ;; (global-set-key (kbd (concat "M-" (int-to-string n))) + ;; (lambda () (interactive) (switch-shell n)))) + + (define-key company-active-map (kbd "C-d") 'company-show-doc-buffer) + (define-key company-active-map (kbd "C-n") 'company-select-next) + (define-key company-active-map (kbd "C-p") 'company-select-previous) + (define-key company-active-map (kbd "") 'company-complete) + + (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) + (define-key custom-bindings (kbd "C-#") 'er/contract-region) + (define-key custom-bindings (kbd "C-S-c C-S-c") 'mc/edit-lines) + (define-key custom-bindings (kbd "C-c b") 'ivy-switch-buffer) + (define-key custom-bindings (kbd "C-c l") 'org-store-link) + (define-key custom-bindings (kbd "C-c t") 'org-set-tags) + (define-key custom-bindings (kbd "M-u") 'upcase-dwim) + (define-key custom-bindings (kbd "M-c") 'capitalize-dwim) + (define-key custom-bindings (kbd "M-l") 'downcase-dwim) + (define-key custom-bindings (kbd "M-o") 'other-window) + (define-key custom-bindings (kbd "C-c s") 'ispell-word) + (define-key custom-bindings (kbd "C-c C-d") 'org-capture) + (define-key custom-bindings (kbd "C-c ") 'windmove-up) + (define-key custom-bindings (kbd "C-c ") 'windmove-down) + (define-key custom-bindings (kbd "C-c ") 'windmove-left) + (define-key custom-bindings (kbd "C-c ") 'windmove-right) + (define-key custom-bindings (kbd "C-c a") (lambda () (interactive) (org-agenda nil "n"))) + (define-key custom-bindings (kbd "C-c e") 'find-user-init-file) + (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-;") '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") + (lambda () + (interactive) + (kill-this-buffer) + (delete-window) + (message nil) + (message "Done") + )) + ;; (define-key custom-bindings (kbd "M-RET") '(lambda () (interactive) (term (getenv "SHELL")))) + + (define-key artist-mode-map (kbd "C-c C-c") 'compile) + + + (define-minor-mode custom-bindings-mode + "A mode that activates custom-bindings." + t nil custom-bindings) +#+END_SRC ** Development Specific *** General - #+BEGIN_SRC emacs-lisp :results silent - (require 'rainbow-delimiters) - (global-flycheck-mode) +#+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) + (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) + (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) + (electric-pair-mode 1) + (show-paren-mode 1) - (require 'dockerfile-mode) - (add-to-list 'auto-mode-alist '("Dockerfile*\\'" . dockerfile-mode)) + (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 'gitignore-mode) + (add-to-list 'auto-mode-alist '("gitignore\\'" . gitignore-mode)) - ;; Workaround to get Projectile to work again - (setq projectile-git-submodule-command nil) + ;; 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 '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 + (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 +#+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 +#+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 +#+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 +#+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 +#+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 +#+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" - "~/Dropbox/Org/diary/eaglecrk.org")) - (setq org-refile-targets - '((nil :maxlevel . 3) - (org-agenda-files :maxlevel . 3))) - - ;; (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 "elisp") - (string= lang "sh") - (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"))) - (setq org-directory "~/Dropbox/Org" - org-default-notes-file (concat org-directory "/todo.org") - org-startup-folded t - org-startup-indented t - org-startup-align-all-tables t - org-startup-with-inline-images t - org-startup-with-latex-preview t - org-log-done t - org-log-done-with-time t - org-log-into-drawer t - org-hide-leading-stars t - org-pretty-entities t - ) - - (require 'org-protocol) - (setq org-capture-templates - '(("t" "new task" entry (file+headline "~/Dropbox/Org/todo.org" "Tasks") - "* TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n") - ("n" "new note" entry (file+headline org-default-notes-file "Notes") - "* %?\n%i\n") - ("l" "store link" entry (file+olp org-default-notes-file "Links" "Unfiled") - "* %a\n%?\n") - ("d" "store link w/drawer" entry (file+olp org-default-notes-file "Links" "Unfiled") - "* %?\n%l\n:COPIED_TEXT:\n %i\n:END:\n") - )) - - - (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) - ) +#+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" + "~/Dropbox/Org/diary/eaglecrk.org")) + (setq org-refile-targets + '((nil :maxlevel . 3) + (org-agenda-files :maxlevel . 3))) + + ;; (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 "elisp") + (string= lang "sh") + (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"))) + (setq org-directory "~/Dropbox/Org" + org-default-notes-file (concat org-directory "/todo.org") + org-startup-folded t + org-startup-indented t + org-startup-align-all-tables t + org-startup-with-inline-images t + org-startup-with-latex-preview t + org-log-done t + org-log-done-with-time t + org-log-into-drawer t + org-hide-leading-stars t + org-pretty-entities t + org-use-property-inheritance t + org-html-validation-link nil + org-html-text-markup-alist '((bold . "%s") + (code . "%s") + (italic . "%s") + (strike-through . "%s") + (underline . "%s") + (verbatim . "%s")) ) - (add-hook 'org-mode-hook #'my-org-config) - #+END_SRC + + (require 'org-protocol) + ;; Ensure the following is in ~/.config/mimeapps.list + ;; + ;; [Default Applications] + ;; x-scheme-handler/org-protocol=userapp-emacsclient.desktop + (setq org-capture-templates + '(("t" "new task" entry (file+headline "~/Dropbox/Org/todo.org" "Tasks") + "* TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n") + ("n" "new note" entry (file+headline org-default-notes-file "Notes") + "* %?\n%i\n") + ("l" "store link" entry (file+olp org-default-notes-file "Links" "Unfiled") + "* %a\n%?\n") + ("d" "store link w/drawer" entry (file+olp org-default-notes-file "Links" "Unfiled") + "* %?\n%l\n:COPIED_TEXT:\n %i\n:END:\n") + ("f" "dotfile" entry (file+headline "~/Dropbox/Org/dotfiles.org" "Other") + "* %?\n:PROPERTIES:\n:CUSTOM_ID: %(org-id-get-create)\n:END:\n") + )) + + + (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) +#+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 + (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) - #+END_SRC +#+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) +#+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 +#+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 +*** Ligatures +#+BEGIN_SRC emacs-lisp :results silent + ;; Enable ligatures without prettify-symbols + + (provide 'add-pragmatapro-symbol-keywords) + + (defconst pragmatapro-fontlock-keywords-alist + (mapcar (lambda (regex-char-pair) + `(,(car regex-char-pair) + (0 (prog1 () + (compose-region (match-beginning 1) + (match-end 1) + ,(concat (list ?\C-i) + (list (decode-char 'ucs (cadr regex-char-pair))))))))) + '(("\\(\\[ERROR\\]\\)" #XE380) + ("\\(\\[DEBUG\\]\\)" #XE381) + ("\\(\\[INFO\\]\\)" #XE382) + ("\\(\\[WARN\\]\\)" #XE383) + ("\\(\\[WARNING\\]\\)" #XE384) + ("\\(\\[ERR\\]\\)" #XE385) + ("\\(\\[FATAL\\]\\)" #XE386) + ("\\(\\[TRACE\\]\\)" #XE387) + ("\\(!!\\)" #XE900) + ("\\(!=\\)" #XE901) + ("\\(!==\\)" #XE902) + ("\\(!!!\\)" #XE903) + ("\\(!≡\\)" #XE904) + ("\\(!≡≡\\)" #XE905) + ("[^<]\\(!>\\)" #XE906) + ("\\(#(\\)" #XE920) + ("\\(#_\\)" #XE921) + ("\\(#{\\)" #XE922) + ("\\(#\\?\\)" #XE923) + ("[^<]\\(#>\\)" #XE924) + ("\\(##\\)" #XE925) + ("\\(%=\\)" #XE930) + ("[^<]\\(%>\\)" #XE931) + ("\\(&%\\)" #XE940) + ("\\(&&\\)" #XE941) + ("\\(&\\*\\)" #XE942) + ("\\(&\\+\\)" #XE943) + ("\\(&-\\)" #XE944) + ("\\(&/\\)" #XE945) + ("\\(&=\\)" #XE946) + ("\\(&&&\\)" #XE947) + ("[^<]\\(&>\\)" #XE948) + ("\\(\\*\\*\\*\\)" #XE960) + ("\\(\\*=\\)" #XE961) + ("\\(\\*/\\)" #XE962) + ("[^<]\\(\\*>\\)" #XE963) + ("\\(\\+\\+\\)" #XE970) + ("\\(\\+\\+\\+\\)" #XE971) + ("[^\\+]\\(\\+=\\)" #XE972) + ("[^<]\\(\\+>\\)" #XE973) + ("\\(\\+\\+=\\)" #XE974) + ("\\(--\\)" #XE980) + ("[^-]\\(-<\\)" #XE981) + ("\\(-<<\\)" #XE982) + ("\\(-=\\)" #XE983) + ("[^|]\\(->\\)" #XE984) + ("[^|]\\(->>\\)" #XE985) + ("\\(---\\)" #XE986) + ("\\(-->\\)" #XE987) + ("\\(-\\+-\\)" #XE988) + ("\\(-\\\\/\\)" #XE989) + ("[^\\^]\\(\\.\\.\\)" #XE990) + ("\\(\\.\\.\\.\\)" #XE991) + ("\\(\\.\\.<\\)" #XE992) + ("\\(\\.>\\)" #XE993) + ("\\(\\.~\\)" #XE994) + ("\\(\\.=\\)" #XE995) + ("\\(/\\*\\)" #XE9A0) + ("\\(//\\)" #XE9A1) + ("[^<]\\(/>\\)" #XE9A2) + ("[^=]\\(/=\\)" #XE9A3) + ("\\(/==\\)" #XE9A4) + ("\\(///\\)" #XE9A5) + ("\\(/\\*\\*\\)" #XE9A6) + ("\\(::\\)" #XE9B0) + ("\\(:=\\)" #XE9B1) + ("[^≡]\\(:≡\\)" #XE9B2) + ("\\(:>\\)" #XE9B3) + ("\\(:=>\\)" #XE9B4) + ("\\(<\\*\\)" #XE9C1) + ("\\(<\\*>\\)" #XE9C2) + ("[^<]\\(<-\\)" #XE9C4) + ("[^-]\\(<<\\)" #XE9C5) + ("\\(<<<\\)" #XE9C6) + ("\\(<<=\\)" #XE9C7) + ("[^<]\\(<=\\)" #XE9C8) + ("\\(<=>\\)" #XE9C9) + ("\\(<>\\)" #XE9CA) + ("\\(<<-\\)" #XE9CC) + ("\\(<|\\)" #XE9CD) + ("\\(<|>\\)" #XE9CB) + ("\\(<=<\\)" #XE9CE) + ("[^<]\\(<~\\)" #XE9CF) + ("\\(<~~\\)" #XE9D0) + ("\\(<<~\\)" #XE9D1) + ("\\(<\\$\\)" #XE9D2) + ("\\(<\\$>\\)" #XE9C0) + ("\\(<\\+\\)" #XE9D3) + ("\\(<\\+>\\)" #XE9C3) + ("\\(<~>\\)" #XE9E0) + ("\\(<\\*\\*>\\)" #XE9E1) + ("\\(<<\\^\\)" #XE9E2) + ("\\(\\)" #XE9D4) + ("\\(<@\\)" #XE9E4) + ("\\(<#\\)" #XE9E5) + ("\\(<#>\\)" #XE9D6) + ("\\(<%\\)" #XE9E6) + ("\\(<%>\\)" #XE9D7) + ("[^<]\\(<\\^\\)" #XE9E7) + ("\\(<&\\)" #XE9E8) + ("\\(<&>\\)" #XE9D9) + ("\\(<\\?\\)" #XE9E9) + ("\\(<\\.\\)" #XE9EA) + ("\\(<\\.>\\)" #XE9DB) + ("\\(\\)" #XE9DC) + ("\\(<\\\\\\)" #XE9EC) + ("\\(<\"\\)" #XE9ED) + ("\\(<\">\\)" #XE9DE) + ("\\(<:\\)" #XE9EE) + ("\\(<:>\\)" #XE9DF) + ("\\(<->\\)" #XE9EF) + ("\\(\\)" #XEA66) + ("\\(|=>\\)" #XEA67) + ("\\(|==>\\)" #XEA68) + ("\\(~=\\)" #XEA70) + ("[^~<]\\(~>\\)" #XEA71) + ("\\(~~>\\)" #XEA72) + ("\\(~>>\\)" #XEA73) + ("[^<]\\(\">\\)" #XEA90)))) + + (defun add-pragmatapro-symbol-keywords () + (font-lock-add-keywords nil pragmatapro-fontlock-keywords-alist)) + + (add-hook 'prog-mode-hook + #'add-pragmatapro-symbol-keywords) +#+END_SRC +Org Mode Specific Checkboxes +#+BEGIN_SRC emacs-lisp :results silent + ;; Enable Org mode checkbox ligatures without prettify-symbols + + (provide 'add-checkbox-symbol-keywords) + + (defconst checkbox-fontlock-keywords-alist + (mapcar (lambda (regex-char-pair) + `(,(car regex-char-pair) + (0 (prog1 () + (compose-region (match-beginning 1) + (match-end 1) + ,(concat (list ?\C-i) + (list (decode-char 'ucs (cadr regex-char-pair))))))))) + '(("\\(\\[ \\]\\)" #XF096);2B1C + ("\\(\\[-\\]\\)" #XF147);29C7;F458 + ("\\(\\[X\\]\\)" #XF046);2BBD + ))) + + (defun add-checkbox-symbol-keywords () + (font-lock-add-keywords nil checkbox-fontlock-keywords-alist)) + + (add-hook 'org-mode-hook + #'add-checkbox-symbol-keywords) +#+END_SRC + +Ligature Testing +#+BEGIN_SRC emacs-lisp :results silent + ;; All ligatures (for testing) + + ;; [ERROR] + ;; [DEBUG] + ;; [INFO] + ;; [WARN] + ;; [WARNING] + ;; [ERR] + ;; [FATAL] + ;; [TRACE] + ;; !! + ;; != + ;; !== + ;; !!! + ;; !≡ + ;; !≡≡ + ;; !> + ;; #( + ;; #_ + ;; #{ + ;; #? + ;; #> + ;; ## + ;; %= + ;; %> + ;; &% + ;; && + ;; &* + ;; &+ + ;; &- + ;; &/ + ;; &= + ;; &&& + ;; &> + ;; *** + ;; *= + ;; */ + ;; *> + ;; ++ + ;; +++ + ;; += + ;; +> + ;; ++= + ;; -- + ;; -< + ;; -<< + ;; -= + ;; -> + ;; ->> + ;; --- + ;; --> + ;; -+- + ;; -\/ + ;; .. + ;; ... + ;; ..< + ;; .> + ;; .~ + ;; .= + ;; /* + ;; // + ;; /> + ;; /= + ;; /== + ;; /// + ;; /** + ;; :: + ;; := + ;; :≡ + ;; :> + ;; :=> + ;; <$> + ;; <* + ;; <*> + ;; <+> + ;; <- + ;; << + ;; <<< + ;; <<= + ;; <= + ;; <=> + ;; <> + ;; <|> + ;; <<- + ;; <| + ;; <=< + ;; <~ + ;; <~~ + ;; <<~ + ;; <$ + ;; <+ + ;; + ;; <@> + ;; <#> + ;; <%> + ;; <^> + ;; <&> + ;; + ;; <.> + ;; + ;; <\> + ;; <"> + ;; <:> + ;; <~> + ;; <**> + ;; <<^ + ;; + ;; + ;; |=> + ;; |==> + ;; ~= + ;; ~> + ;; ~~> + ;; ~>> + ;; "> +#+END_SRC +*** Font +#+BEGIN_SRC emacs-lisp :results silent + (cond ((member "PragmataPro Liga" (font-family-list)) + (set-face-attribute 'default nil :font "PragmataPro Liga-13"))) + ;; (cond ((member "IBM Plex Mono Thin" (font-family-list)) + ;; (set-face-attribute 'default nil :font "IBM Plex Mono Thin-13"))) + ;; (cond ((member "IBM Plex Mono" (font-family-list)) + ;; (set-face-attribute 'default nil :font "IBM Plex Mono-12"))) +#+END_SRC *** Org Headings - #+BEGIN_SRC emacs-lisp :results silent - (add-hook 'org-mode-hook 'org-bullets-mode) - - (set-face-attribute 'org-level-1 nil :height 1.3) - (set-face-attribute 'org-level-2 nil :height 1.1) - (set-face-attribute 'org-level-3 nil :height 1.05) - (set-face-attribute 'org-level-4 nil :height 1.05) - (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 +#+BEGIN_SRC emacs-lisp :results silent + (add-hook 'org-mode-hook 'org-bullets-mode) + + (set-face-attribute 'org-level-1 nil :height 1.3) + (set-face-attribute 'org-level-2 nil :height 1.1) + (set-face-attribute 'org-level-3 nil :height 1.05) + (set-face-attribute 'org-level-4 nil :height 1.05) + (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 *** Doom Modeline - #+BEGIN_SRC emacs-lisp :results silent - (require 'doom-modeline) - (doom-modeline-mode 1) +#+BEGIN_SRC emacs-lisp :results silent + (require 'doom-modeline) + (doom-modeline-mode 1) - ;; How tall the mode-line should be (only respected in GUI Emacs). - (setq doom-modeline-height 30) + ;; How tall the mode-line should be (only respected in GUI Emacs). + (setq doom-modeline-height 30) - ;; How wide the mode-line bar should be (only respected in GUI Emacs). - (setq doom-modeline-bar-width 4) + ;; How wide the mode-line bar should be (only respected in GUI Emacs). + (setq doom-modeline-bar-width 4) - ;; Determines the style used by `doom-modeline-buffer-file-name'. - ;; - ;; Given ~/Projects/FOSS/emacs/lisp/comint.el - ;; truncate-upto-project => ~/P/F/emacs/lisp/comint.el - ;; truncate-from-project => ~/Projects/FOSS/emacs/l/comint.el - ;; truncate-with-project => emacs/l/comint.el - ;; truncate-except-project => ~/P/F/emacs/l/comint.el - ;; truncate-upto-root => ~/P/F/e/lisp/comint.el - ;; truncate-all => ~/P/F/e/l/comint.el - ;; relative-from-project => emacs/lisp/comint.el - ;; relative-to-project => lisp/comint.el - ;; file-name => comint.el - ;; buffer-name => comint.el<2> (uniquify buffer name) - ;; - ;; If you are expereicing the laggy issue, especially while editing remote files - ;; with tramp, please try `file-name' style. - ;; Please refer to https://github.com/bbatsov/projectile/issues/657. - (setq doom-modeline-buffer-file-name-style 'truncate-upto-project) + ;; Determines the style used by `doom-modeline-buffer-file-name'. + ;; + ;; Given ~/Projects/FOSS/emacs/lisp/comint.el + ;; truncate-upto-project => ~/P/F/emacs/lisp/comint.el + ;; truncate-from-project => ~/Projects/FOSS/emacs/l/comint.el + ;; truncate-with-project => emacs/l/comint.el + ;; truncate-except-project => ~/P/F/emacs/l/comint.el + ;; truncate-upto-root => ~/P/F/e/lisp/comint.el + ;; truncate-all => ~/P/F/e/l/comint.el + ;; relative-from-project => emacs/lisp/comint.el + ;; relative-to-project => lisp/comint.el + ;; file-name => comint.el + ;; buffer-name => comint.el<2> (uniquify buffer name) + ;; + ;; If you are expereicing the laggy issue, especially while editing remote files + ;; with tramp, please try `file-name' style. + ;; Please refer to https://github.com/bbatsov/projectile/issues/657. + (setq doom-modeline-buffer-file-name-style 'truncate-upto-project) - ;; What executable of Python will be used (if nil nothing will be showed). - (setq doom-modeline-python-executable "python") + ;; What executable of Python will be used (if nil nothing will be showed). + (setq doom-modeline-python-executable "python") - ;; Whether show `all-the-icons' or not (if nil nothing will be showed). - (setq doom-modeline-icon t) + ;; Whether show `all-the-icons' or not (if nil nothing will be showed). + (setq doom-modeline-icon t) - ;; Whether show the icon for major mode. It respects `doom-modeline-icon'. - (setq doom-modeline-major-mode-icon t) + ;; Whether show the icon for major mode. It respects `doom-modeline-icon'. + (setq doom-modeline-major-mode-icon t) - ;; Display color icons for `major-mode'. It respects `all-the-icons-color-icons'. - (setq doom-modeline-major-mode-color-icon nil) + ;; Display color icons for `major-mode'. It respects `all-the-icons-color-icons'. + (setq doom-modeline-major-mode-color-icon nil) - ;; Whether display minor modes or not. Non-nil to display in mode-line. - (setq doom-modeline-minor-modes nil) + ;; Whether display minor modes or not. Non-nil to display in mode-line. + (setq doom-modeline-minor-modes nil) - ;; If non-nil, a word count will be added to the selection-info modeline segment. - (setq doom-modeline-enable-word-count nil) + ;; If non-nil, a word count will be added to the selection-info modeline segment. + (setq doom-modeline-enable-word-count nil) - ;; If non-nil, only display one number for checker information if applicable. - (setq doom-modeline-checker-simple-format t) + ;; If non-nil, only display one number for checker information if applicable. + (setq doom-modeline-checker-simple-format t) - ;; Whether display perspective name or not. Non-nil to display in mode-line. - (setq doom-modeline-persp-name t) + ;; Whether display perspective name or not. Non-nil to display in mode-line. + (setq doom-modeline-persp-name t) - ;; Whether display `lsp' state or not. Non-nil to display in mode-line. - (setq doom-modeline-lsp t) + ;; Whether display `lsp' state or not. Non-nil to display in mode-line. + (setq doom-modeline-lsp t) - ;; Whether display github notifications or not. Requires `ghub` package. - (setq doom-modeline-github nil) + ;; Whether display github notifications or not. Requires `ghub` package. + (setq doom-modeline-github nil) - ;; The interval of checking github. - (setq doom-modeline-github-interval (* 30 60)) + ;; The interval of checking github. + (setq doom-modeline-github-interval (* 30 60)) - ;; Whether display environment version or not. - (setq doom-modeline-env-version t) + ;; Whether display environment version or not. + (setq doom-modeline-env-version t) - ;; Whether display mu4e notifications or not. Requires `mu4e-alert' package. - (setq doom-modeline-mu4e t) - #+END_SRC + ;; Whether display mu4e notifications or not. Requires `mu4e-alert' package. + (setq doom-modeline-mu4e t) +#+END_SRC