8e1af1454 Fix typo in release note fcc551fa3 Bump version to 0.200.9 and add release note da24f0e14 core: tweak terminal theme fix 408817a78 Fix the issue of terminal failed to load theme. bd7ef98e4 Bump version to 0.200.8 and update changelog 6269c3ce8 Update release info 9dc8d4397 Adds the `neotree-quick-look` keybind bfef6053d Update auto-completion layer readme.org: dead link 33609a815 elixir: reformat documentation and use blocks for code. dccf7224f CI test for bad white spaces in PR 959a173a9 Remove trailing whitespace from all files a1fa5769b Mention option for using natural title bar on mac. 86380a1e2 Fix void reference to go--position-bytes in go-rename 563350cfb Always return `t` from use-package pre/post hooks. 5fb001640 Fix python-enable-yapf-format-on-save 6eba8cb36 core: jump-handers, :async can now take a predicate function 0ef135718 Update spacemacs-theme 62fdf0426 dsm-line-numbers: support parent modes, fix mode restriction b4b1f0222 Add transient state for smerge mode 6ca909faf Fix 'o' on folded headings 08c1c7538 Move pyim into the .cache directory. ab390bc92 Update bitbucket evil urls to github evil urls 48cc70be3 Adding keybinding to jump to currently open file in neotree fa1947a29 TeX fold: add comment about not-autoloaded commands 24dc5a734 Add shortcuts for missing latex folding functions f7180be30 Refactor long comment 0e79e275c Add extension ".wl" for wolfram-mode a85a6d52d Update packages.el, remove trailing white space d5345523f fix error when nlinum is enabled and dotspacemacs-line-numbers is t efba1fe6b throw a real error if emacs version is too old 0a1c97c22 Refactor transparency functions 6dcae21e5 Add enable/disable transparency functions aaa6a2fb4 Fix typo in Clojure layer README d37ab406e Fix spacemacs/rename-current-buffer-file on non-file buffers. 30a0a1dc2 Add Buffer-menu-mode to global-auto-revert-ignore-modes 25c730880 Fix typo 32a32f401 Replace use-package :diminish by spacemacs|hide-lighter 3cf209e3c core: fix indentation rules for declare-prefix functions abe7ba973 emacs-lisp: don't use custom-set-variables fcc66032b csharp: comment typo 6e719b275 emacs-lisp: update README and add an interactive edebug quick start a56750070 Add conventional evilified key bindings for edebug-mode da1b1306b conventions: update debug conventions 90e63ad1d Fix evilification of edebug-mode-map 3b4501fb3 emacs-lisp: add support for debugger and edebug 6aff353f2 Remove deferred for projectile-rails 66419280b Use projectile-rails-global-mode if available d67be001c github: move load-gh-pulls-mode to funcs.el 488e2e3b6 markdown: add SPC m i t key binding to instert toc de0ab9857 Fix error global-linum-mode-check-buffers wrong type error 4681b6862 line-numbers: fix spacemacs/enable-line-numbers-p 2b98e0655 core: filter out private vars in dotspacemacs/get-variable-string-list 908d06889 line-number: fix backward compatibility eb80cd90d line number: broke enable-p condition into functions edd4c846e nlinum: activating nlinum-relative now activates nlinum 141243375 line numbers: finer configuration of line numbers activation 5aeccf76d core: Fix typo 97a2dc49d Add convention for clean build project. e6d0eb1da core: display message in mode-line while uninstalling packages dbd09b916 minor improvements in elixir README file a246ea047 elixir: add support for credo 3c072401c minor copyright year fix 7d1b63b36 auto-complete: add fuzzy package 9f18146fb Remove limitation of number of candidates for helm-themes d9c542fc0 themes-megapack: add missing solarized-theme 2b597aa7a fix typo in flymd configs 603e56de1 Update layout and workspace key binding documentation bb4ceeb7d fix go layer headers 511dba0ae add note about flymd in markdown layer c72874026 add flymd to chrome layer(a realtime markdown preview) 68693a04c minor elisp convention fix 6e959f38d unify transient states c3a7bb32f Update buffer transient state formatting c413b22dd Update window manipulation transient state formatting 684f6eced Fixed ranger layer documentation a40f124e6 add madhat2r theme to megapack ef7508d3d syntax-checking: Mention that flycheck is disabled in emacs-lisp-mode. 312f07397 Clojure refactor: replace cycle coll with convert to coll 4a2d60aa7 core: don't reset mode-line when displaying text in spacemacs home buffer 93106a455 core: add some feedback test in mode-line during startup 647520fd4 Fix typo for spell-checking readme 3c51501c3 temporarily fix value of configuration-layer--elpa-archives 11d7bb526 core: import spacemacs-theme into libs dea5a7634 Minor comment change bba788e06 core: fix startup graphical glitch 159a9376f core: import ido-vertical-mode into core/libs 2371237ad core: import quelpa and package-build into core/libs cd1230e22 update cider keybindings doc a3f7ad966 Fix number of arguments in calling cider-test- funcs c01039311 Add emacs 25.1 to travis configuration a556dbc3d core: force installation of org-contrib-plus instead of org 6d7ef95ba core: add support for local elpa repositories 14ac81494 core: add support for interpreter-mode-alist to layer lazy installation c8595e7c3 core: fix computation of package installation lazyness 514f0743d core: Improve configuration-layer/create-elpa-repository 9e3dbd063 core: fix delayed warning display in emacs 25.5 2b75d4162 core: correctly index packages installed by spacemacs core e7a9b1d60 core: add ~ character to detect local package archives 8a0f088eb core: name startup-hook function and move spacemacs-buffer//startup-hook 2735f14e7 Improve spacemacs/count-word-analysis 4d40a772d core: new functions to synchronize distant ELPA packages with local repo 0de8c3ac0 core: add function to create spacelpa archive-contents 3bba858e5 core: minor functions renaming in core-configuration-layer.el c130be60f core: move and rename spacemacs//get-package-directory 1efc77ede core: fix unit tests 38505a326 core: add parameter to configuration-layer/make-all-packages 847f3b400 doc: add mention of `layers.el` file in LAYERS.org 80ff6fc34 Speedup SPC h SPC for both helm and ivy 136348948 Speed up SPC h SPC by moving FAQ source in its own feature 8d4875f5a Remove spacemacs-base/helm-spacemacs-deprecated ab0d9490c core: factorize code in configuration-layer/make-all-packages 6919d6987 sort-lines-by-column-reverse: fix wrong call fe83d0d45 fix window-manipulation and buffer transient states for winum 2261735c4 restore emacs-style window selection bindings 1c00d01c7 update uniquify-lines, uniquify a block selection 86564bf21 add sort-lines-by-column, -reverse funcs and keys a754d057a add sort-lines arg, reverse func and key binding 2bbeee239 Fix old documentation of loading order 9af5eafab Add achievement for 10000th star 3142b23e0 Hide PROPERTIES drawers in space-doc-mode 58a71f7f8 Fix export-breaking org links in documentation 367f6a6ff Fix links in documentation which breaks org html export f53354d2f common-lisp: add SPC m h i to inspect a definition b3f864781 Layer common-lisp - set jump handler to SLIME-EDIT-DEFINITION b8e9d435b Fix variable is void: system-info in spacemacs/report-issue 38c1b54ae Fix golden ratio for new package winum 03e213010 configure xkcd inside the :init progn clause ce31e46ad ymcd: simplify eldoc integration b252d252b Bump year in copyright headers d8df28ca0 improve ledger-reconcile-toggle key binding 66f740ebc Fix python path with virtualenv on Windows in Python nose package eac9b41bb Fix issue with jump handler in omnisharp-mode where the handler is async 2a45f56d0 add xkcd buffer to list of useful buffers 45b50e24b align list of supported themes aa10f8be0 Add missing base16 themes 981d74672 Fix eldoc initialization in typescript layer. 681fc887b Add keybindings for ledger account reconciliation 224b8de2b Add info about the fallback fonts ed05cad31 Add explanation of menu usage and accessing files 00e6bbe7f Direct font installation link to the right section 66406a0e8 Add Spacemacs ABC and Gitter chat to further info fdc489572 Improved link formatting, minor text edits f106fcc62 Show correct headline for beginners tutorial in SPC h SPC 3d3b56154 Fix a link on beginner's tutorial de47040a3 use winum.el for window numbers 2e757ed7c Add binding for jump to def'n other window a59aa81b5 ivy: Add C-c C-e to edit counsel-ag search results 74c439b17 Add ycmd-eldoc to ycmd layer 18b12269e typescript: move eldoc config to init function 417a52da5 javascript and react: reformat code and move funcs to funcs.el 3bbafcbfe html: set company min. prefix length to 0 for company-web backend 359015880 html: fix addition of company backends 137e7fbeb company-web: defer company-web loading 974fa3f2a Overhaul buffer transient state cba3479bc evil-escape documentation link update 694a03a83 repalce fill-or-unfill with unfill package 407f45d83 Added auto load virtualenv support via `.venv` file 729086e2c update select-current-block, reduce code 13e2e0966 Add keybinding for spacemacs/alternate-window 03a5b3ca5 core: cleanup layers discovery 33b0289b6 replace 9 buffer-to-window entries with one 1..9 a1eba9d01 Add evil keybinding "i a" for org-attach 7eff10093 Added new base16 themes 7ad95a0cf Use raw prefix argument instead numeric prefix argument 25240285d emacs-lisp: fix eval-last-sexp and add SPC m e C e9256506a Prevent from inserting too many "end"s in Elixir 551566154 add magnars/multiple-cursors.el's mc-lists.el to gitignore 749e98ec3 Use helm ag file with interactive input 56cac4ff7 home-buffer: fix error on footer insertion when window is narrow 5753ca7d8 ivy delete file with confirmation c74f8342b Delete alternate actions is too invasive d1ad69623 defer flyspell-correct packages loading 330c724af Defer loading of flyspell-correct-helm, otherwise it just requires helm 43afaae68 adds evilified-state-evilify-map binding <gf> 11d556caf adds revert buffer binding 076bd6270 markdown: hide MMM linter in mode-line baff1ba89 markdown: correctly enable mmm-mode and add support for ini files 87be3bea2 core: move some functions to their correct source file 626119675 dumb-jump: Specify selector from completion framework used db93b6e5e add function comment, evil goto next line indent 7d1e9ff4e Mark tern command as async. Fixes #7591. e983fcbc4 ansible: temporary hack to fix modified buffer on decryption 64cf7d734 restclient: fix overriding of SPC j i 382d4833a core: scope minor-mode specific key bindigns under major-mode leader c363d08f2 ansible: add support for company-ansible and ansible-vault 63386d924 add glsl-company to shaders layer e7eba2bec encode `;` in issue report body 62ed28bfe Remove sbt-hydra rename wrapper b4c761a2c which-key: Fix transient state descriptions 3588f5880 which-key: Implement combined select window keys a61a05e4a add copy key to neotree 6d054e8a0 Add key binding to run current Rust file 176c3c51d add missing header in lua/packages.el file 125271e1d mu4e: use proper markup on keybindings 37f9d7272 Add missing parens in last commit a5eed1c3b which-key: Update usage of replacement alists 64c52c002 Add verbatim markup to paths 6d311e7fe Disable paste transient state by default 8daada06d add some notes on ivy usage a954bf7d4 Change default fringe color for centered-buffer-mode. b215bace5 fixed syntax highloght in README 12eae0711 core: add support for conventional `SPC m g G` to jump-to-definition 1daf98338 Make Semantic fast 3488c8281 Don’t toggle maximized if already maximized d2b241eb6 Documentation has outdated shortcut 5ce13391f Fix typo in beginner’s tutorial – “differend” 7a50683b3 Fix hyperlinks in restclient README de1d5edb7 Fixed dead hyperlink in magit intro df04300d9 games: add sudoku dabcf504a core: use memq instead of multiple calls to eq 05057449f Add Doom themes to required dependencies for dash 744b16331 Org: Move SPC m e to SPC m e e for org-export-dispatch 1b6b1e2c6 compilation-mode: maps `gf` to `find-file-at-point` 3fd1ffcbc Emit error if can't toggle window layout 25bd77842 Adding window layout toggle (vertical <-> horizontal) 279b9fb93 Fix minor typo e81f7769c Fix typo in Agda's packages.el 91ce13897 rust: respect help-window-select, small fixes 9df14a281 Rust: Add binding for describing symbol at point 49801dbfe Update ensime variable name 6b6779b2f Removed deprecated insert-string and replace by insert b4eacc792 Add keybinding "," for org-edit-src-exit 5c31ecde2 Add ibuffer bindings for updating and filter-group motion cc1694454 Integrate ahs with evil as well as isearch 8ff842bd8 core: Revert dotfile installation time and fix editing style bug 5034e44aa core: remove empty function dotspacemacs//install-and-replace bfa348d49 Install dotfile earlier a23871545 Beginnier tutorial: refill paragraphs to respect 80col/line 398dd1d8b Add beginners tutorial - further amendments aab82add4 restclient: add ob-restclient package 7119e474d restclient: remove gj and gk bindings c073d248a restclient: add key bindings for jump to next / previous query 984896d8c restclient: move restclient-helm to SPC j i 0ccfe3ba0 restclient: add helm support to jump to variable or request 893bcde19 restclient: add autocompletion for methods and headers b90f2260b home buffer: center buffer on fixed width 80 when not responsive dbe56dcd0 home buffer: framed notes: allow for numbered and dotted lists 062a4add4 home-buffer: adapt home buffer notes toggling to responsiveness bff0d3730 home buffer: better framed notes display <3 4f697c441 Refactor rotate-windows, add utility swap-windows 90a1a6618 Rename and add missing definition of version-control-diff-side 7213ac46a version control: let the user pick on which side to display the diff 75337f7d6 Display 'done' after a theme is loaded 97cc3167e rebind 'SPC f b' to 'counsel-bookmark' when using ivy f374fb313 fix void-variable company-backends-scheme-mode a25303772 Update README.org 6e4254b10 Add duplicate-line-or-region to layer better-defaults a45f7c0a0 Simple misspelling typos... 9221ff872 Fix link to achievements in README.md 23ebb3ae1 Fix some minor mistakes and typos in the documentation 12ff0a5f6 Warn if both helm and ivy are enabled 2bdc1a3ca Fix unbound holy-mode error d036a3233 Move SPC p C-g to SPC p G eacc2da13 Typo fix 0b9b5dc43 move helm specific layout transient state keybindings to helm layer 9d26fb2a5 close layout transient state upon entering layout buffer select when 579aab382 Add keybindings to move buffers by window number 6a9908675 fix debug string for python3 e3cb6cbaf Fix eclim documentation in Java layer 7ef3553f4 Scala readme: code block for scala-enable-eldoc 2a2e1dd00 ipython: Update matplotlibrc c108509ca Add sourcerer theme to themes-megapack 65df3a541 Added sqlite3 requirement ca65342aa Updates links to layers 39ceb83ee Move SPC t H to SPC t h s a0715a978 Add toggle for syntax highlighting (via font-lock) fb6d592b8 message instead of warn on failed auto-evilify 97ee85efb Inverse SPC t m t and SPC t m T 8c9f9d5ea Add toggle to display time in modeline 556584a5a Simplify python test runner setup 192286c90 maximize frame earlier in the startup process c1ca55d4f Cleaned up directory warning about duplicate layers. f271485bb core: register warning message only when messages are not inhibited ad41a1074 core: inverse inhibition of :toggle messages 3bc9e5ce5 home buffer: update quickhelp.txt in [?] git-subtree-dir: emacs.d git-subtree-split: 8e1af145480d53e8d32cdff2c83291889903164bmaster
| @ -0,0 +1,12 @@ | |||
| Spacemacs at your fingertips... in your browser! | |||
| Thanks to @JAremko's wonderful work, it is now possible to try out Spacemacs in | |||
| the browser. | |||
| Try it on your phone and be amazed that even without any modifier you can still | |||
| use Emacs thanks to the 'spacebar' and 'fd' available on any touch keyboard. | |||
| We are looking into useful applications of this feature, if you want to share some | |||
| ideas you can post on https://github.com/syl20bnr/spacemacs/issues/8634 :heart: | |||
| Go to http://spacemacs.org to test it now! | |||
| @ -0,0 +1,20 @@ | |||
| Spacemacs at your fingertips... in your browser! | |||
| You are not dreaming, this is not an alien technology coming from the futur. | |||
| Spacemacs has been ported to the WEB! | |||
| Better than that, our technology flawlessly compiles Emacs Lisp on the fly to | |||
| Javascript thanks to the last version of our transpiler. Yes! This very same | |||
| transpiler which was capable to transpile Emacs Lisp to Vimscript, except Java | |||
| is better than Vim so we decided to go nuts and support the supperior | |||
| Javascript. | |||
| Spacemacs can benefit from all the candies provided by a WEB browser like being | |||
| able to run on any device supporting a decent browser, try it on your phone and | |||
| be amazed that even without any modifier you can still use Emacs thanks to the | |||
| 'spacebar' and 'fd' or not... | |||
| Now Spacemacs can really be like all the cool kids. | |||
| Go to http://spacemacs.org to test it NOW! | |||
| @ -0,0 +1,360 @@ | |||
| ;;; ido-vertical-mode.el --- Makes ido-mode display vertically. | |||
| ;; Copyright (C) 2013, 2014 Steven Degutis | |||
| ;; Author: Steven Degutis | |||
| ;; Maintainer: Christopher Reichert <creichert07@gmail.com> | |||
| ;; Version: 1.0.0 | |||
| ;; Package-Version: 20160429.1037 | |||
| ;; Keywords: convenience | |||
| ;; URL: https://github.com/creichert/ido-vertical-mode.el | |||
| ;; 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 <http://www.gnu.org/licenses/>. | |||
| ;;; Commentary: | |||
| ;; Makes ido-mode display prospects vertically | |||
| ;;; Code: | |||
| (require 'ido) | |||
| ;;; The following three variables and their comments are lifted | |||
| ;;; directly from `ido.el'; they are defined here to avoid compile-log | |||
| ;;; warnings. See `ido.el' for more information. | |||
| ;; Non-nil if we should add [confirm] to prompt | |||
| (defvar ido-show-confirm-message) | |||
| ;; Remember if current directory is non-readable (so we cannot do completion). | |||
| (defvar ido-directory-nonreadable) | |||
| ;; Remember if current directory is 'huge' (so we don't want to do completion). | |||
| (defvar ido-directory-too-big) | |||
| (defcustom ido-vertical-indicator "->" | |||
| "Indicator displayed next to the candidate that will be selected." | |||
| :type 'string | |||
| :group 'ido-vertical-mode) | |||
| (defvar ido-vertical-decorations | |||
| `(,(format "\n%s " ido-vertical-indicator) ; left bracket around prospect list | |||
| "" ; right bracket around prospect list | |||
| "\n " ; separator between prospects, depends on `ido-separator` | |||
| "\n ..." ; inserted at the end of a truncated list of prospects | |||
| "[" ; left bracket around common match string | |||
| "]" ; right bracket around common match string | |||
| " [No match]" | |||
| " [Matched]" | |||
| " [Not readable]" | |||
| " [Too big]" | |||
| " [Confirm]" | |||
| ,(format "\n%s " ido-vertical-indicator) ; left bracket around the sole remaining completion | |||
| "" ; right bracket around the sole remaining completion | |||
| ) | |||
| "Changing the decorations does most of the work for ido-vertical | |||
| This sets up newlines and arrows before, between, and after the | |||
| prospects. For additional information, see `ido-decorations'.") | |||
| (defvar ido-vertical-old-decorations nil | |||
| "The original `ido-decorations' variable | |||
| We need to keep track of the original value so we can restore it | |||
| when turning `ido-vertical-mode' off") | |||
| (defvar ido-vertical-old-completions nil | |||
| "The original `ido-completions' function | |||
| We need to keep track of the original value of `ido-completions' | |||
| so we can restore it when turning `ido-vertical-mode' off") | |||
| (defgroup ido-vertical-mode nil | |||
| "Make ido behave vertically." | |||
| :group 'ido) | |||
| (defcustom ido-vertical-show-count nil | |||
| "Non nil means show the count of candidates while completing." | |||
| :type 'boolean | |||
| :group 'ido-vertical-mode) | |||
| (defvar ido-vertical-count-active nil | |||
| "Used internally to track whether we're already showing the count") | |||
| (defcustom ido-vertical-define-keys nil | |||
| "Defines which keys that `ido-vertical-mode' redefines." | |||
| :type '(choice | |||
| (const :tag "Keep default ido keys." nil) | |||
| (const :tag "C-p and C-n are up & down in match" C-n-and-C-p-only) | |||
| (const :tag "C-p/up and C-n/down are up and down in match." C-n-C-p-up-and-down) | |||
| (const :tag "C-p/up, C-n/down are up/down in match. left or right cycle history or directory." C-n-C-p-up-down-left-right)) | |||
| :group 'ido-vertical-mode) | |||
| (defcustom ido-vertical-pad-list t | |||
| "Non nil means to pad the list of candidates to ensure the minibuffer area is always tall" | |||
| :type 'boolean | |||
| :group 'ido-vertical-mode) | |||
| (defcustom ido-vertical-disable-if-short nil | |||
| "Non nil means that ido will go back to horizontal mode if the candidates all fit in the minibuffer area" | |||
| :type 'boolean | |||
| :group 'ido-vertical-mode) | |||
| (defface ido-vertical-first-match-face | |||
| '((t (:inherit ido-first-match))) | |||
| "Face used by Ido Vertical for highlighting first match." | |||
| :group 'ido-vertical-mode) | |||
| (defface ido-vertical-only-match-face | |||
| '((t (:inherit ido-only-match))) | |||
| "Face used by Ido Vertical for highlighting only match." | |||
| :group 'ido-vertical-mode) | |||
| (defface ido-vertical-match-face | |||
| '((t (:inherit font-lock-variable-name-face :bold t :underline t))) | |||
| "Face used by Ido Vertical for the matched part." | |||
| :group 'ido-vertical-mode) | |||
| (defun ido-vertical-or-horizontal-completions (name) | |||
| (if (and ido-vertical-disable-if-short | |||
| (<= (length ido-matches) ido-max-prospects)) | |||
| (let ((short-result | |||
| (let ((ido-decorations ido-vertical-old-decorations)) | |||
| (funcall ido-vertical-old-completions name)))) | |||
| (if (>= (window-body-width (minibuffer-window)) | |||
| (+ (minibuffer-prompt-width) | |||
| (length short-result))) | |||
| short-result | |||
| (ido-vertical-completions name))) | |||
| (ido-vertical-completions name))) | |||
| ;; borrowed from ido.el and modified to work better when vertical | |||
| (defun ido-vertical-completions (name) | |||
| ;; Return the string that is displayed after the user's text. | |||
| ;; Modified from `icomplete-completions'. | |||
| (let* ((comps ido-matches) | |||
| (ind (and (consp (car comps)) (> (length (cdr (car comps))) 1) | |||
| ido-merged-indicator)) | |||
| (lencomps (length comps)) | |||
| (additional-items-indicator (nth 3 ido-decorations)) | |||
| (comps-empty (null comps)) | |||
| (ncomps lencomps) | |||
| first) | |||
| ;; Keep the height of the suggestions list constant by padding | |||
| ;; when lencomps is too small. Also, if lencomps is too short, we | |||
| ;; should not indicate that there are additional prospects. | |||
| (when (< lencomps (1+ ido-max-prospects)) | |||
| (setq additional-items-indicator "\n") | |||
| (when ido-vertical-pad-list | |||
| (setq comps (append comps (make-list (- (1+ ido-max-prospects) lencomps) ""))) | |||
| (setq ncomps (length comps)))) | |||
| (if (not ido-incomplete-regexp) | |||
| (when ido-use-faces | |||
| ;; Make a copy of [ido-matches], otherwise the selected string | |||
| ;; could contain text properties which could lead to weird | |||
| ;; artifacts, e.g. buffer-file-name having text properties. | |||
| (when (eq comps ido-matches) | |||
| (setq comps (copy-sequence ido-matches))) | |||
| (dotimes (i ncomps) | |||
| (let ((comps-i (nth i comps))) | |||
| (setf comps-i | |||
| (setf (nth i comps) (substring (if (listp comps-i) | |||
| (car comps-i) | |||
| comps-i) | |||
| 0))) | |||
| (when (string-match (if ido-enable-regexp name (regexp-quote name)) comps-i) | |||
| (ignore-errors | |||
| (add-face-text-property (match-beginning 0) | |||
| (match-end 0) | |||
| 'ido-vertical-match-face | |||
| nil comps-i))))))) | |||
| (if (and ind ido-use-faces) | |||
| (put-text-property 0 1 'face 'ido-indicator ind)) | |||
| (when ido-vertical-show-count | |||
| (setcar ido-vertical-decorations (format " [%d]\n%s " lencomps ido-vertical-indicator)) | |||
| (setq ido-vertical-count-active t)) | |||
| (when (and (not ido-vertical-show-count) | |||
| ido-vertical-count-active) | |||
| (setcar ido-vertical-decorations (format "\n%s "ido-vertical-indicator)) | |||
| (setq ido-vertical-count-active nil)) | |||
| (if (and ido-use-faces comps) | |||
| (let* ((fn (ido-name (car comps))) | |||
| (ln (length fn))) | |||
| (setq first (format "%s" fn)) | |||
| (if (fboundp 'add-face-text-property) | |||
| (add-face-text-property 0 (length first) | |||
| (cond ((> lencomps 1) | |||
| 'ido-vertical-first-match-face) | |||
| (ido-incomplete-regexp | |||
| 'ido-incomplete-regexp) | |||
| (t | |||
| 'ido-vertical-only-match-face)) | |||
| nil first) | |||
| (put-text-property 0 ln 'face | |||
| (if (= lencomps 1) | |||
| (if ido-incomplete-regexp | |||
| 'ido-incomplete-regexp | |||
| 'ido-vertical-only-match-face) | |||
| 'ido-vertical-first-match-face) | |||
| first)) | |||
| (if ind (setq first (concat first ind))) | |||
| (setq comps (cons first (cdr comps))))) | |||
| ;; Previously we'd check null comps to see if the list was | |||
| ;; empty. We pad the list with empty items to keep the list at a | |||
| ;; constant height, so we have to check if the entire list is | |||
| ;; empty, instead of (null comps) | |||
| (cond (comps-empty | |||
| (cond | |||
| (ido-show-confirm-message | |||
| (or (nth 10 ido-decorations) " [Confirm]")) | |||
| (ido-directory-nonreadable | |||
| (or (nth 8 ido-decorations) " [Not readable]")) | |||
| (ido-directory-too-big | |||
| (or (nth 9 ido-decorations) " [Too big]")) | |||
| (ido-report-no-match | |||
| (nth 6 ido-decorations)) ;; [No match] | |||
| (t ""))) | |||
| (ido-incomplete-regexp | |||
| (concat " " (car comps))) | |||
| ((null (cdr comps)) ;one match | |||
| (concat (concat (nth 11 ido-decorations) ;; [ ... ] | |||
| (ido-name (car comps)) | |||
| (nth 12 ido-decorations)) | |||
| (if (not ido-use-faces) (nth 7 ido-decorations)))) ;; [Matched] | |||
| (t ;multiple matches | |||
| (let* ((items (if (> ido-max-prospects 0) (1+ ido-max-prospects) 999)) | |||
| (alternatives | |||
| (apply | |||
| #'concat | |||
| (cdr (apply | |||
| #'nconc | |||
| (mapcar | |||
| (lambda (com) | |||
| (setq com (ido-name com)) | |||
| (setq items (1- items)) | |||
| (cond | |||
| ((< items 0) ()) | |||
| ((= items 0) (list additional-items-indicator)) ; " | ..." | |||
| (t | |||
| (list (nth 2 ido-decorations) ; " | " | |||
| (let ((str (substring com 0))) | |||
| (if (and ido-use-faces | |||
| (not (string= str first)) | |||
| (ido-final-slash str)) | |||
| (put-text-property 0 (length str) 'face 'ido-subdir str)) | |||
| str))))) | |||
| comps)))))) | |||
| (concat | |||
| ;; put in common completion item -- what you get by pressing tab | |||
| (if (and (stringp ido-common-match-string) | |||
| (> (length ido-common-match-string) (length name))) | |||
| (concat (nth 4 ido-decorations) ;; [ ... ] | |||
| (substring ido-common-match-string (length name)) | |||
| (nth 5 ido-decorations))) | |||
| ;; list all alternatives | |||
| (nth 0 ido-decorations) ;; { ... } | |||
| alternatives | |||
| (nth 1 ido-decorations))))))) | |||
| (defun ido-vertical-disable-line-truncation () | |||
| "Prevent the newlines in the minibuffer from being truncated" | |||
| (set (make-local-variable 'truncate-lines) nil)) | |||
| (defun turn-on-ido-vertical () | |||
| (if (and (eq nil ido-vertical-old-decorations) | |||
| (eq nil ido-vertical-old-completions)) | |||
| (progn | |||
| (setq ido-vertical-old-decorations ido-decorations) | |||
| (setq ido-vertical-old-completions (symbol-function 'ido-completions)))) | |||
| (setq ido-decorations ido-vertical-decorations) | |||
| (fset 'ido-completions 'ido-vertical-or-horizontal-completions) | |||
| (add-hook 'ido-minibuffer-setup-hook 'ido-vertical-disable-line-truncation) | |||
| (add-hook 'ido-setup-hook 'ido-vertical-define-keys)) | |||
| (defun turn-off-ido-vertical () | |||
| (setq ido-decorations ido-vertical-old-decorations) | |||
| (fset 'ido-completions ido-vertical-old-completions) | |||
| (remove-hook 'ido-minibuffer-setup-hook 'ido-vertical-disable-line-truncation) | |||
| (remove-hook 'ido-setup-hook 'ido-vertical-define-keys)) | |||
| (defun ido-vertical-next-match () | |||
| "Call the correct next-match function for right key. | |||
| This is based on: | |||
| - Different functions for completing directories and prior history. | |||
| " | |||
| (interactive) | |||
| (cond | |||
| ((and (boundp 'item) item (eq item 'file)) | |||
| (ido-next-match-dir)) | |||
| (t | |||
| (next-history-element 1)))) | |||
| (defun ido-vertical-prev-match () | |||
| "Call the correct prev-match function for left key. | |||
| This is based on: | |||
| - Different functions for completing directories and prior history. | |||
| " | |||
| (interactive) | |||
| (cond | |||
| ((and (boundp 'item) item (eq item 'file)) | |||
| (ido-prev-match-dir)) | |||
| (t | |||
| (previous-history-element 1)))) | |||
| (defun ido-vertical-define-keys () ;; C-n/p is more intuitive in vertical layout | |||
| (when ido-vertical-define-keys | |||
| (define-key ido-completion-map (kbd "C-n") 'ido-next-match) | |||
| (define-key ido-completion-map (kbd "C-p") 'ido-prev-match) | |||
| (define-key ido-completion-map (kbd "C-c C-t") 'ido-toggle-prefix)) | |||
| (when (memq ido-vertical-define-keys '(C-n-C-p-up-and-down C-n-C-p-up-down-left-right)) | |||
| (define-key ido-completion-map (kbd "<up>") 'ido-prev-match) | |||
| (define-key ido-completion-map (kbd "<down>") 'ido-next-match)) | |||
| (when (eq ido-vertical-define-keys 'C-n-C-p-up-down-left-right) | |||
| (define-key ido-completion-map (kbd "<left>") 'ido-vertical-prev-match) | |||
| (define-key ido-completion-map (kbd "<right>") 'ido-vertical-next-match))) | |||
| ;;;###autoload | |||
| (define-minor-mode ido-vertical-mode | |||
| "Makes ido-mode display vertically." | |||
| :global t | |||
| :group 'ido-vertical-mode | |||
| (if ido-vertical-mode | |||
| (turn-on-ido-vertical) | |||
| (turn-off-ido-vertical))) | |||
| (provide 'ido-vertical-mode) | |||
| ;; Local Variables: | |||
| ;; indent-tabs-mode: nil | |||
| ;; End: | |||
| ;;; ido-vertical-mode.el ends here | |||
| @ -0,0 +1,654 @@ | |||
| ;;; quelpa.el --- Emacs Lisp packages built directly from source | |||
| ;; Copyright 2014-2015, Steckerhalter | |||
| ;; Copyright 2014-2015, Vasilij Schneidermann <v.schneidermann@gmail.com> | |||
| ;; Author: steckerhalter | |||
| ;; URL: https://github.com/quelpa/quelpa | |||
| ;; Version: 0.0.1 | |||
| ;; Package-Requires: ((package-build "0") (emacs "24.3")) | |||
| ;; Keywords: package management build source elpa | |||
| ;; This file is not part of GNU Emacs. | |||
| ;; 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 3, 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: | |||
| ;; Your personal local Emacs Lisp Package Archive (ELPA) with packages | |||
| ;; built on-the-fly directly from source. | |||
| ;; See the README for more info: | |||
| ;; https://github.com/quelpa/quelpa/blob/master/README.md | |||
| ;;; Requirements: | |||
| ;; Emacs 24.3.1 | |||
| ;;; Code: | |||
| (require 'package-build) | |||
| (require 'cl-lib) | |||
| (require 'help-fns) | |||
| (require 'url-parse) | |||
| ;; --- customs / variables --------------------------------------------------- | |||
| (defgroup quelpa nil | |||
| "Build and install packages from source code" | |||
| :group 'package) | |||
| (defcustom quelpa-upgrade-p nil | |||
| "When non-nil, `quelpa' will try to upgrade packages. | |||
| The global value can be overridden for each package by supplying | |||
| the `:upgrade' argument." | |||
| :group 'quelpa | |||
| :type 'boolean) | |||
| (defcustom quelpa-stable-p nil | |||
| "When non-nil, try to build stable packages like MELPA does." | |||
| :group 'quelpa | |||
| :type 'boolean) | |||
| (defcustom quelpa-verbose t | |||
| "When non-nil, `quelpa' prints log messages." | |||
| :group 'quelpa | |||
| :type 'boolean) | |||
| (defcustom quelpa-before-hook nil | |||
| "List of functions to be called before quelpa." | |||
| :group 'quelpa | |||
| :type 'hook) | |||
| (defcustom quelpa-after-hook nil | |||
| "List of functions to be called after quelpa." | |||
| :group 'quelpa | |||
| :type 'hook) | |||
| (defcustom quelpa-dir (expand-file-name "quelpa" user-emacs-directory) | |||
| "Where quelpa builds and stores packages." | |||
| :group 'quelpa | |||
| :type 'string) | |||
| (defcustom quelpa-melpa-dir (expand-file-name "melpa" quelpa-dir) | |||
| "Where the melpa repo cloned to." | |||
| :group 'quelpa | |||
| :type 'string) | |||
| (defcustom quelpa-build-dir (expand-file-name "build" quelpa-dir) | |||
| "Where quelpa builds packages." | |||
| :group 'quelpa | |||
| :type 'string) | |||
| (defcustom quelpa-packages-dir (expand-file-name "packages" quelpa-dir) | |||
| "Where quelpa puts built packages." | |||
| :group 'quelpa | |||
| :type 'string) | |||
| (defcustom quelpa-melpa-recipe-stores (list (expand-file-name | |||
| "recipes" | |||
| quelpa-melpa-dir)) | |||
| "Recipe stores where quelpa finds default recipes for packages. | |||
| A store can either be a string pointing to a directory with | |||
| recipe files or a list with recipes." | |||
| :group 'quelpa | |||
| :type '(repeat | |||
| (choice directory | |||
| (repeat | |||
| :tag "List of recipes" | |||
| (restricted-sexp :tag "Recipe" | |||
| :match-alternatives (listp)))))) | |||
| (defcustom quelpa-persistent-cache-file (expand-file-name "cache" quelpa-dir) | |||
| "Location of the persistent cache file." | |||
| :group 'quelpa | |||
| :type 'string) | |||
| (defcustom quelpa-persistent-cache-p t | |||
| "Non-nil when quelpa's cache is saved on and read from disk." | |||
| :group 'quelpa | |||
| :type 'boolean) | |||
| (defcustom quelpa-checkout-melpa-p t | |||
| "If non-nil the MELPA git repo is cloned when quelpa is initialized." | |||
| :group 'quelpa | |||
| :type 'boolean) | |||
| (defcustom quelpa-update-melpa-p t | |||
| "If non-nil the MELPA git repo is updated when quelpa is initialized. | |||
| If nil the update is disabled and the repo is only updated on | |||
| `quelpa-upgrade' or `quelpa-self-upgrade'." | |||
| :group 'quelpa | |||
| :type 'boolean) | |||
| (defcustom quelpa-melpa-repo-url "https://github.com/melpa/melpa.git" | |||
| "The melpa git repository url." | |||
| :group 'quelpa | |||
| :type 'string) | |||
| (defvar quelpa-initialized-p nil | |||
| "Non-nil when quelpa has been initialized.") | |||
| (defvar quelpa-cache nil | |||
| "The `quelpa' command stores processed pkgs/recipes in the cache.") | |||
| (defvar quelpa-recipe '(quelpa :repo "quelpa/quelpa" :fetcher github) | |||
| "The recipe for quelpa.") | |||
| ;; --- compatibility for legacy `package.el' in Emacs 24.3 ------------------- | |||
| (defun quelpa-setup-package-structs () | |||
| "Setup the struct `package-desc' when not available. | |||
| `package-desc-from-legacy' is provided to convert the legacy | |||
| vector desc into a valid PACKAGE-DESC." | |||
| (unless (functionp 'package-desc-p) | |||
| (cl-defstruct | |||
| (package-desc | |||
| (:constructor | |||
| ;; convert legacy package desc into PACKAGE-DESC | |||
| package-desc-from-legacy | |||
| (pkg-info kind | |||
| &aux | |||
| (name (intern (aref pkg-info 0))) | |||
| (version (version-to-list (aref pkg-info 3))) | |||
| (summary (if (string= (aref pkg-info 2) "") | |||
| "No description available." | |||
| (aref pkg-info 2))) | |||
| (reqs (aref pkg-info 1)) | |||
| (kind kind)))) | |||
| name | |||
| version | |||
| (summary "No description available.") | |||
| reqs | |||
| kind | |||
| archive | |||
| dir | |||
| extras | |||
| signed))) | |||
| ;; --- package building ------------------------------------------------------ | |||
| (defun quelpa-package-type (file) | |||
| "Determine the package type of FILE. | |||
| Return `tar' for tarball packages, `single' for single file | |||
| packages, or nil, if FILE is not a package." | |||
| (let ((ext (file-name-extension file))) | |||
| (cond | |||
| ((string= ext "tar") 'tar) | |||
| ((string= ext "el") 'single) | |||
| (:else nil)))) | |||
| (defun quelpa-get-package-desc (file) | |||
| "Extract and return the PACKAGE-DESC struct from FILE. | |||
| On error return nil." | |||
| (let* ((kind (quelpa-package-type file)) | |||
| (desc (with-demoted-errors "Error getting PACKAGE-DESC: %s" | |||
| (with-temp-buffer | |||
| (pcase kind | |||
| (`single (insert-file-contents file) | |||
| (package-buffer-info)) | |||
| (`tar (insert-file-contents-literally file) | |||
| (tar-mode) | |||
| (if (help-function-arglist 'package-tar-file-info) | |||
| ;; legacy `package-tar-file-info' requires an arg | |||
| (package-tar-file-info file) | |||
| (with-no-warnings (package-tar-file-info))))))))) | |||
| (pcase desc | |||
| ((pred package-desc-p) desc) | |||
| ((pred vectorp) (package-desc-from-legacy desc kind))))) | |||
| (defun quelpa-archive-file-name (archive-entry) | |||
| "Return the path of the file in which the package for ARCHIVE-ENTRY is stored." | |||
| (let* ((name (car archive-entry)) | |||
| (pkg-info (cdr archive-entry)) | |||
| (version (package-version-join (aref pkg-info 0))) | |||
| (flavour (aref pkg-info 3))) | |||
| (expand-file-name | |||
| (format "%s-%s.%s" name version (if (eq flavour 'single) "el" "tar")) | |||
| quelpa-packages-dir))) | |||
| (defun quelpa-version>-p (name version) | |||
| "Return non-nil if VERSION of pkg with NAME is newer than what is currently installed." | |||
| (not (or (not version) | |||
| (let ((pkg-desc (cdr (assq name package-alist)))) | |||
| (and pkg-desc | |||
| (version-list-<= | |||
| (version-to-list version) | |||
| (if (functionp 'package-desc-vers) | |||
| (package-desc-vers pkg-desc) ;old implementation | |||
| (package-desc-version (car pkg-desc)))))) | |||
| ;; Also check built-in packages. | |||
| (package-built-in-p name (version-to-list version))))) | |||
| (defun quelpa-checkout (rcp dir) | |||
| "Return the version of the new package given a RCP. | |||
| Return nil if the package is already installed and should not be upgraded." | |||
| (pcase-let ((`(,name . ,config) rcp) | |||
| (package-build-stable quelpa-stable-p)) | |||
| (unless (or (and (assq name package-alist) (not quelpa-upgrade-p)) | |||
| (and (not config) | |||
| (quelpa-message t "no recipe found for package `%s'" name))) | |||
| (let ((version (condition-case err | |||
| (package-build-checkout name config dir) | |||
| (error (quelpa-message t | |||
| "failed to checkout `%s': `%s'" | |||
| name | |||
| (error-message-string err)) | |||
| nil)))) | |||
| (when (quelpa-version>-p name version) | |||
| version))))) | |||
| (defun quelpa-build-package (rcp) | |||
| "Build a package from the given recipe RCP. | |||
| Uses the `package-build' library to get the source code and build | |||
| an elpa compatible package in `quelpa-build-dir' storing it in | |||
| `quelpa-packages-dir'. Return the path to the created file or nil | |||
| if no action is necessary (like when the package is installed | |||
| already and should not be upgraded etc)." | |||
| (let* ((name (car rcp)) | |||
| (build-dir (expand-file-name (symbol-name name) quelpa-build-dir)) | |||
| (version (quelpa-checkout rcp build-dir))) | |||
| (when version | |||
| (quelpa-archive-file-name | |||
| (package-build-package (symbol-name name) | |||
| version | |||
| (package-build--config-file-list (cdr rcp)) | |||
| build-dir | |||
| quelpa-packages-dir))))) | |||
| ;; --- package-build.el integration ------------------------------------------ | |||
| (defun quelpa-file-version (file-path type version time-stamp) | |||
| "Return version of file at FILE-PATH." | |||
| (if (eq type 'directory) | |||
| time-stamp | |||
| (cl-letf* ((package-strip-rcs-id-orig (symbol-function 'package-strip-rcs-id)) | |||
| ((symbol-function 'package-strip-rcs-id) | |||
| (lambda (str) | |||
| (or (funcall package-strip-rcs-id-orig (lm-header "package-version")) | |||
| (funcall package-strip-rcs-id-orig (lm-header "version")) | |||
| "0")))) | |||
| (concat (mapconcat | |||
| #'number-to-string | |||
| (package-desc-version (quelpa-get-package-desc file-path)) ".") | |||
| (pcase version | |||
| (`original "") | |||
| (_ (concat "pre0." time-stamp))))))) | |||
| (defun quelpa-directory-files (path) | |||
| "Return list of directory files from PATH recursively." | |||
| (let ((result '())) | |||
| (mapc | |||
| (lambda (file) | |||
| (if (file-directory-p file) | |||
| (progn | |||
| ;; When directory is not empty. | |||
| (when (cddr (directory-files file)) | |||
| (dolist (subfile (quelpa-directory-files file)) | |||
| (add-to-list 'result subfile)))) | |||
| (add-to-list 'result file))) | |||
| (mapcar | |||
| (lambda (file) (expand-file-name file path)) | |||
| ;; Without first two entries because they are always "." and "..". | |||
| (cddr (directory-files path)))) | |||
| result)) | |||
| (defun quelpa-expand-source-file-list (file-path config) | |||
| "Return list of source files from FILE-PATH corresponding to | |||
| CONFIG." | |||
| (let ((source-files | |||
| (mapcar | |||
| (lambda (file) (expand-file-name file file-path)) | |||
| (package-build--expand-source-file-list file-path config)))) | |||
| ;; Replace any directories in the source file list with the filenames of the | |||
| ;; files they contain (so that these files can subsequently be hashed). | |||
| (dolist (file source-files source-files) | |||
| (when (file-directory-p file) | |||
| (setq source-files (remove file source-files)) | |||
| (setq source-files (append source-files | |||
| (quelpa-directory-files file))))))) | |||
| (defun quelpa-slurp-file (file) | |||
| "Return the contents of FILE as a string, or nil if no such | |||
| file exists." | |||
| (when (file-exists-p file) | |||
| (with-temp-buffer | |||
| (set-buffer-multibyte nil) | |||
| (setq-local buffer-file-coding-system 'binary) | |||
| (insert-file-contents-literally file) | |||
| (buffer-substring-no-properties (point-min) (point-max))))) | |||
| (defun quelpa-check-hash (name config file-path dir &optional fetcher) | |||
| "Check if hash of FILE-PATH is different as in STAMP-FILE. | |||
| If it is different save the new hash and timestamp to STAMP-FILE | |||
| and return TIME-STAMP, otherwise return OLD-TIME-STAMP." | |||
| (unless (file-directory-p dir) | |||
| (make-directory dir)) | |||
| (let* (files | |||
| hashes | |||
| new-stamp-info | |||
| new-content-hash | |||
| (time-stamp | |||
| (replace-regexp-in-string "\\.0" "." (format-time-string "%Y%m%d.%H%M%S"))) | |||
| (stamp-file (concat (expand-file-name (symbol-name name) dir) ".stamp")) | |||
| (old-stamp-info (package-build--read-from-file stamp-file)) | |||
| (old-content-hash (cdr old-stamp-info)) | |||
| (old-time-stamp (car old-stamp-info)) | |||
| (type (if (file-directory-p file-path) 'directory 'file)) | |||
| (version (plist-get config :version))) | |||
| (if (not (file-exists-p file-path)) | |||
| (error (quelpa-message t "`%s' does not exist" file-path)) | |||
| (if (eq type 'directory) | |||
| (setq files (quelpa-expand-source-file-list file-path config) | |||
| hashes (mapcar | |||
| (lambda (file) | |||
| (secure-hash | |||
| 'sha1 (concat file (quelpa-slurp-file file)))) files) | |||
| new-content-hash (secure-hash 'sha1 (mapconcat 'identity hashes ""))) | |||
| (setq new-content-hash (secure-hash 'sha1 (quelpa-slurp-file file-path))))) | |||
| (setq new-stamp-info (cons time-stamp new-content-hash)) | |||
| (if (and old-content-hash | |||
| (string= new-content-hash old-content-hash)) | |||
| (quelpa-file-version file-path type version old-time-stamp) | |||
| (unless (eq fetcher 'url) | |||
| (delete-directory dir t) | |||
| (make-directory dir) | |||
| (if (eq type 'file) | |||
| (copy-file file-path dir t t t t) | |||
| (copy-directory file-path dir t t t))) | |||
| (package-build--dump new-stamp-info stamp-file) | |||
| (quelpa-file-version file-path type version time-stamp)))) | |||
| (defun package-build--checkout-file (name config dir) | |||
| "Build according to a PATH with config CONFIG into DIR as NAME. | |||
| Generic local file handler for package-build.el. | |||
| Handles the following cases: | |||
| local file: | |||
| Installs a single-file package from a local file. Use the :path | |||
| attribute with a PATH like \"/path/to/file.el\". | |||
| local directory: | |||
| Installs a multi-file package from a local directory. Use | |||
| the :path attribute with a PATH like \"/path/to/dir\"." | |||
| (quelpa-check-hash name config (expand-file-name (plist-get config :path)) dir)) | |||
| (defun package-build--checkout-url (name config dir) | |||
| "Build according to an URL with config CONFIG into DIR as NAME. | |||
| Generic URL handler for package-build.el. | |||
| Handles the following cases: | |||
| local file: | |||
| Installs a single-file package from a local file. Use the :url | |||
| attribute with an URL like \"file:///path/to/file.el\". | |||
| remote file: | |||
| Installs a single-file package from a remote file. Use the :url | |||
| attribute with an URL like \"http://domain.tld/path/to/file.el\"." | |||
| (let* ((url (plist-get config :url)) | |||
| (remote-file-name (file-name-nondirectory | |||
| (url-filename (url-generic-parse-url url)))) | |||
| (local-path (expand-file-name remote-file-name dir)) | |||
| (mm-attachment-file-modes (default-file-modes))) | |||
| (unless (string= (file-name-extension url) "el") | |||
| (error (quelpa-message t "<%s> does not end in .el" url))) | |||
| (unless (file-directory-p dir) | |||
| (make-directory dir)) | |||
| (url-copy-file url local-path t) | |||
| (quelpa-check-hash name config local-path dir 'url))) | |||
| ;; --- helpers --------------------------------------------------------------- | |||
| (defun quelpa-message (wait format-string &rest args) | |||
| "Log a message with FORMAT-STRING and ARGS when `quelpa-verbose' is non-nil. | |||
| If WAIT is nil don't wait after showing the message. If it is a | |||
| number, wait so many seconds. If WAIT is t wait the default time. | |||
| Return t in each case." | |||
| (when quelpa-verbose | |||
| (message "Quelpa: %s" (apply 'format format-string args)) | |||
| (when (or (not noninteractive) wait) ; no wait if emacs is noninteractive | |||
| (sit-for (or (and (numberp wait) wait) 1.5) t))) | |||
| t) | |||
| (defun quelpa-read-cache () | |||
| "Read from `quelpa-persistent-cache-file' in `quelpa-cache'." | |||
| (when (and quelpa-persistent-cache-p | |||
| (file-exists-p quelpa-persistent-cache-file)) | |||
| (with-temp-buffer | |||
| (insert-file-contents-literally quelpa-persistent-cache-file) | |||
| (setq quelpa-cache | |||
| (read (buffer-substring-no-properties (point-min) (point-max))))))) | |||
| (defun quelpa-save-cache () | |||
| "Write `quelpa-cache' to `quelpa-persistent-cache-file'." | |||
| (when quelpa-persistent-cache-p | |||
| (let (print-level print-length) | |||
| (with-temp-file quelpa-persistent-cache-file | |||
| (insert (prin1-to-string quelpa-cache)))))) | |||
| (defun quelpa-update-cache (cache-item) | |||
| ;; try removing existing recipes by name | |||
| (setq quelpa-cache (cl-remove (car cache-item) | |||
| quelpa-cache :key #'car)) | |||
| (push cache-item quelpa-cache) | |||
| (setq quelpa-cache | |||
| (cl-sort quelpa-cache #'string< | |||
| :key (lambda (item) (symbol-name (car item)))))) | |||
| (defun quelpa-parse-stable (cache-item) | |||
| ;; in case :stable doesn't originate from PLIST, shadow the | |||
| ;; default value anyways | |||
| (when (plist-member (cdr cache-item) :stable) | |||
| (setq quelpa-stable-p (plist-get (cdr cache-item) :stable))) | |||
| (when (and quelpa-stable-p (not (plist-get (cdr cache-item) :stable))) | |||
| (setf (cdr (last cache-item)) '(:stable t)))) | |||
| (defun quelpa-checkout-melpa () | |||
| "Fetch or update the melpa source code from Github. | |||
| If there is no error return non-nil. | |||
| If there is an error but melpa is already checked out return non-nil. | |||
| If there is an error and no existing checkout return nil." | |||
| (or (and (null quelpa-update-melpa-p) | |||
| (file-exists-p (expand-file-name ".git" quelpa-melpa-dir))) | |||
| (condition-case err | |||
| (package-build--checkout-git | |||
| 'package-build | |||
| `(:url ,quelpa-melpa-repo-url :files ("*")) | |||
| quelpa-melpa-dir) | |||
| (error (quelpa-message t "failed to checkout melpa git repo: `%s'" (error-message-string err)) | |||
| (file-exists-p (expand-file-name ".git" quelpa-melpa-dir)))))) | |||
| (defun quelpa-get-melpa-recipe (name) | |||
| "Read recipe with NAME for melpa git checkout. | |||
| Return the recipe if it exists, otherwise nil." | |||
| (cl-loop for store in quelpa-melpa-recipe-stores | |||
| if (stringp store) | |||
| for file = (assoc-string name (directory-files store nil "^[^\.]+")) | |||
| when file | |||
| return (with-temp-buffer | |||
| (insert-file-contents-literally | |||
| (expand-file-name file store)) | |||
| (read (buffer-string))) | |||
| else | |||
| for rcp = (assoc-string name store) | |||
| when rcp | |||
| return rcp)) | |||
| (defun quelpa-setup-p () | |||
| "Setup what we need for quelpa. | |||
| Return non-nil if quelpa has been initialized properly." | |||
| (catch 'quit | |||
| (dolist (dir (list quelpa-packages-dir quelpa-build-dir)) | |||
| (unless (file-exists-p dir) (make-directory dir t))) | |||
| (unless quelpa-initialized-p | |||
| (quelpa-read-cache) | |||
| (quelpa-setup-package-structs) | |||
| (if quelpa-checkout-melpa-p | |||
| (unless (quelpa-checkout-melpa) (throw 'quit nil))) | |||
| (setq quelpa-initialized-p t)) | |||
| t)) | |||
| (defun quelpa-shutdown () | |||
| "Do things that need to be done after running quelpa." | |||
| (quelpa-save-cache) | |||
| ;; remove the packages dir because we are done with the built pkgs | |||
| (ignore-errors (delete-directory quelpa-packages-dir t))) | |||
| (defun quelpa-arg-rcp (arg) | |||
| "Given recipe or package name, return an alist '(NAME . RCP). | |||
| If RCP cannot be found it will be set to nil" | |||
| (pcase arg | |||
| (`(,a . nil) (quelpa-get-melpa-recipe (car arg))) | |||
| (`(,a . ,_) arg) | |||
| ((pred symbolp) (quelpa-get-melpa-recipe arg)))) | |||
| (defun quelpa-parse-plist (plist) | |||
| "Parse the optional PLIST argument of `quelpa'. | |||
| Recognized keywords are: | |||
| :upgrade | |||
| If t, `quelpa' tries to do an upgrade. | |||
| :stable | |||
| If t, `quelpa' tries building the stable version of a package." | |||
| (while plist | |||
| (let ((key (car plist)) | |||
| (value (cadr plist))) | |||
| (pcase key | |||
| (:upgrade (setq quelpa-upgrade-p value)) | |||
| (:stable (setq quelpa-stable-p value)))) | |||
| (setq plist (cddr plist)))) | |||
| (defun quelpa-package-install-file (file) | |||
| "Workaround problem with `package-install-file'. | |||
| `package-install-file' uses `insert-file-contents-literally' | |||
| which causes problems when the file inserted has crlf line | |||
| endings (Windows). So here we replace that with | |||
| `insert-file-contents' for non-tar files." | |||
| (if (eq system-type 'windows-nt) | |||
| (cl-letf* ((insert-file-contents-literally-orig | |||
| (symbol-function 'insert-file-contents-literally)) | |||
| ((symbol-function 'insert-file-contents-literally) | |||
| (lambda (file) | |||
| (if (string-match "\\.tar\\'" file) | |||
| (funcall insert-file-contents-literally-orig file) | |||
| (insert-file-contents file))))) | |||
| (package-install-file file)) | |||
| (package-install-file file))) | |||
| (defun quelpa-package-install (arg) | |||
| "Build and install package from ARG (a recipe or package name). | |||
| If the package has dependencies recursively call this function to | |||
| install them." | |||
| (let* ((rcp (quelpa-arg-rcp arg)) | |||
| (file (and rcp (quelpa-build-package rcp)))) | |||
| (when file | |||
| (let* ((pkg-desc (quelpa-get-package-desc file)) | |||
| (requires (package-desc-reqs pkg-desc))) | |||
| (when requires | |||
| (mapc (lambda (req) | |||
| (unless (equal 'emacs (car req)) | |||
| (quelpa-package-install (car req)))) | |||
| requires)) | |||
| (quelpa-package-install-file file))))) | |||
| (defun quelpa-interactive-candidate () | |||
| "Query the user for a recipe and return the name." | |||
| (when (quelpa-setup-p) | |||
| (let ((recipes (directory-files | |||
| (expand-file-name "recipes" quelpa-melpa-dir) | |||
| ;; this regexp matches all files except dotfiles | |||
| nil "^[^.].+$"))) | |||
| (intern (completing-read "Choose MELPA recipe: " | |||
| recipes nil t))))) | |||
| ;; --- public interface ------------------------------------------------------ | |||
| ;;;###autoload | |||
| (defun quelpa-expand-recipe (recipe-name) | |||
| "Expand a given recipe name into full recipe. | |||
| If called interactively, let the user choose a recipe name and | |||
| insert the result into the current buffer." | |||
| (interactive (list (quelpa-interactive-candidate))) | |||
| (when (quelpa-setup-p) | |||
| (let* ((recipe (quelpa-get-melpa-recipe recipe-name))) | |||
| (when recipe | |||
| (if (called-interactively-p 'any) | |||
| (prin1 recipe (current-buffer))) | |||
| recipe)))) | |||
| ;;;###autoload | |||
| (defun quelpa-self-upgrade (&optional args) | |||
| "Upgrade quelpa itself. | |||
| ARGS are additional options for the quelpa recipe." | |||
| (interactive) | |||
| (when (quelpa-setup-p) | |||
| (quelpa (append quelpa-recipe args) :upgrade t))) | |||
| ;;;###autoload | |||
| (defun quelpa-upgrade () | |||
| "Upgrade all packages found in `quelpa-cache'. | |||
| This provides an easy way to upgrade all the packages for which | |||
| the `quelpa' command has been run in the current Emacs session." | |||
| (interactive) | |||
| (when (quelpa-setup-p) | |||
| (let ((quelpa-upgrade-p t)) | |||
| (quelpa-self-upgrade) | |||
| (setq quelpa-cache | |||
| (cl-remove-if-not #'package-installed-p quelpa-cache :key #'car)) | |||
| (mapc (lambda (item) | |||
| (when (package-installed-p (car (quelpa-arg-rcp item))) | |||
| (quelpa item))) | |||
| quelpa-cache)))) | |||
| ;;;###autoload | |||
| (defun quelpa (arg &rest plist) | |||
| "Build and install a package with quelpa. | |||
| ARG can be a package name (symbol) or a melpa recipe (list). | |||
| PLIST is a plist that may modify the build and/or fetch process. | |||
| If called interactively, `quelpa' will prompt for a MELPA package | |||
| to install. | |||
| When `quelpa' is called interactively with a prefix argument (e.g | |||
| C-u M-x quelpa) it will try to upgrade the given package even if | |||
| the global var `quelpa-upgrade-p' is set to nil." | |||
| (interactive (list (quelpa-interactive-candidate))) | |||
| (run-hooks 'quelpa-before-hook) | |||
| (when (quelpa-setup-p) ;if init fails we do nothing | |||
| (let* ((quelpa-upgrade-p (if current-prefix-arg t quelpa-upgrade-p)) ;shadow `quelpa-upgrade-p' | |||
| (quelpa-stable-p quelpa-stable-p) ;shadow `quelpa-stable-p' | |||
| (cache-item (if (symbolp arg) (list arg) arg))) | |||
| (quelpa-parse-plist plist) | |||
| (quelpa-parse-stable cache-item) | |||
| (quelpa-package-install arg) | |||
| (quelpa-update-cache cache-item))) | |||
| (quelpa-shutdown) | |||
| (run-hooks 'quelpa-after-hook)) | |||
| (provide 'quelpa) | |||
| ;;; quelpa.el ends here | |||
| @ -0,0 +1,161 @@ | |||
| # Spacemacs-theme | |||
| [](http://melpa.org/#/spacemacs-theme)  | |||
| [] (https://gitter.im/nashamri/spacemacs-theme?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | |||
|  | |||
| Spacemacs theme is an Emacs color theme that started as a theme for [spacemacs](https://github.com/syl20bnr/spacemacs). | |||
| The theme comes with dark and light variants and it should work well with 256 color terminals. | |||
| ## Screenshots | |||
|  | |||
| ## Highlights | |||
| The theme has good support for org mode. | |||
|  | |||
| ## Installation | |||
| You can install it from MELPA by: | |||
| ``` | |||
| M-x package-install RET spacemacs-theme | |||
| ``` | |||
| ## Supported modes | |||
| Some of the supported modes are: | |||
| * company | |||
| * ein | |||
| * erc | |||
| * gnus | |||
| * helm | |||
| * ido | |||
| * info | |||
| * magit | |||
| * neotree | |||
| * org | |||
| * and others :) more are coming! | |||
| ## Customizations | |||
| The theme has some options that can be tweaked via `M-x customize`: | |||
| * `spacemacs-theme-comment-bg`: | |||
| This toggles a background color for the comment lines. | |||
| * `spacemacs-theme-org-agenda-height`: | |||
| This toggles the use of varying org agenda heights. | |||
| * `spacemacs-theme-org-height`: | |||
| This toggles the use of varying org headings heights. | |||
| * `spacemacs-theme-org-highlight`: | |||
| This toggles highlighting of org headings. | |||
| * `spacemacs-theme-custom-colors`: | |||
| This allows for specifying a list of custom colors to override spacemacs theme colors. More details in the next section. | |||
| ### Override theme's colors | |||
| The theme can be customized by overriding one of the theme local variables by setting a list in the `spacemacs-theme-custom-colors` variable. | |||
| Here's a list of all the local variables and roles: | |||
| | var | role | | |||
| |---------------|---------------------------------------------------------------------------------------------------| | |||
| | act1 | One of mode-line's active colors. | | |||
| | act2 | The other active color of mode-line. | | |||
| | base | The basic color of normal text. | | |||
| | base-dim | A dimmer version of the normal text color. | | |||
| | bg1 | The background color. | | |||
| | bg2 | A darker background color. Used to highlight current line. | | |||
| | bg3 | Yet another darker shade of the background color. | | |||
| | bg4 | The darkest background color. | | |||
| | border | A border line color. Used in mode-line borders. | | |||
| | cblk | A code block color. Used in org's code blocks. | | |||
| | cblk-bg | The background color of a code block. | | |||
| | cblk-ln | A code block header line. | | |||
| | cblk-ln-bg | The background of a code block header line. | | |||
| | cursor | The cursor/point color. | | |||
| | const | A constant. | | |||
| | comment | A comment. | | |||
| | comment-bg | The background color of a comment. To disable this, `customize` `spacemacs-theme-comment-bg`. | | |||
| | comp | A complementary color. | | |||
| | err | errors. | | |||
| | func | functions. | | |||
| | head1 | Level 1 of a heading. Used in org's headings. | | |||
| | head1-bg | The background of level 2 headings. To disable this, `customize` `spacemacs-theme-org-highlight`. | | |||
| | head2 | Level 2 headings. | | |||
| | head2-bg | Level 2 headings background. | | |||
| | head3 | Level 3 headings. | | |||
| | head3-bg | Level 3 headings background. | | |||
| | head4 | Level 4 headings. | | |||
| | head4-bg | Level 4 headings background. | | |||
| | highlight | A highlighted area. | | |||
| | highlight-dim | A dimmer highlighted area. | | |||
| | keyword | A keyword or a builtin color. | | |||
| | lnum | Line numbers. | | |||
| | mat | A matched color. Used in matching parens, brackets and tags. | | |||
| | meta | A meta line. Used in org's meta line. | | |||
| | str | A string. | | |||
| | suc | To indicate success. Opposite of error. | | |||
| | ttip | Tooltip color. | | |||
| | ttip-sl | Tooltip selection color. | | |||
| | ttip-bg | Tooltip background color. | | |||
| | type | A type color. | | |||
| | var | A variable color. | | |||
| | war | A warning color. | | |||
| There is also explicit colors variables that can be customized: | |||
| * aqua | |||
| * aqua-bg | |||
| * green | |||
| * green-bg | |||
| * green-bg-s | |||
| * cyan | |||
| * red | |||
| * red-bg | |||
| * red-bg-s | |||
| * blue | |||
| * blue-bg | |||
| * violet | |||
| * yellow | |||
| * yellow-bg | |||
| The `green` and `red` colors have two background versions. The `green-bg` and `red-bg` are normal light background colors. | |||
| The `green-bg-s` and `red-bg-s` are a stronger version and are used in `ediff` and places were text is added or deleted. | |||
| Here are some screenshots of the various variables: | |||
|  | |||
|  | |||
|  | |||
| If you are using [spacemacs](https://github.com/syl20bnr/spacemacs), you can put this snippet in your `dotspacemacs/user-init` to override these colors: | |||
| ``` | |||
| (custom-set-variables '(spacemacs-theme-custom-colors | |||
| '((act1 . "#ff0000") | |||
| (act2 . "#0000ff") | |||
| (base . "#ffffff")))) | |||
| ``` | |||
| This will override `act1`, `act1` and `base` to use the specified colors. | |||
| # Like the theme and want to use it in other places? | |||
| Then check out this project [base16-builder](https://github.com/auduchinok/base16-builder). | |||
| @ -0,0 +1,786 @@ | |||
| ;;; spacemacs-common.el --- Color theme with a dark and light versions. | |||
| ;; Copyright (C) 2015-2016 Nasser Alshammari | |||
| ;; Author: Nasser Alshammari | |||
| ;; URL: <https://github.com/nashamri/spacemacs-theme> | |||
| ;; | |||
| ;; Version: 0.1 | |||
| ;; Keywords: color, theme | |||
| ;; Package-Requires: ((emacs "24")) | |||
| ;; Initially created with the help of emacs-theme-generator, <https://github.com/mswift42/theme-creator>. | |||
| ;; 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 <http://www.gnu.org/licenses/>. | |||
| ;; This file is not part of Emacs. | |||
| ;;; Commentary: | |||
| ;; This is a color theme for spacemacs <https://github.com/syl20bnr/spacemacs>. | |||
| ;; It comes with two versions, dark and light and should work well in | |||
| ;; a 256 color terminal. | |||
| ;;; Code: | |||
| (defmacro dyn-let (varlist fn setfaces setvars) | |||
| (list 'let (append varlist (funcall fn)) setfaces setvars)) | |||
| (defgroup spacemacs-theme nil | |||
| "Spacemacs-theme options." | |||
| :group 'faces) | |||
| (defcustom spacemacs-theme-comment-bg t | |||
| "Use a background for comment lines." | |||
| :type 'boolean | |||
| :group 'spacemacs-theme) | |||
| (defcustom spacemacs-theme-org-agenda-height t | |||
| "Use varying text heights for org agenda." | |||
| :type 'boolean | |||
| :group 'spacemacs-theme) | |||
| (defcustom spacemacs-theme-org-height t | |||
| "Use varying text heights for org headings." | |||
| :type 'boolean | |||
| :group 'spacemacs-theme) | |||
| (defcustom spacemacs-theme-org-highlight nil | |||
| "Highlight org headings." | |||
| :type 'boolean | |||
| :group 'spacemacs-theme) | |||
| (defcustom spacemacs-theme-custom-colors nil | |||
| "Specify a list of custom colors" | |||
| :type 'alist | |||
| :group 'spacemacs-theme) | |||
| (defun true-color-p () | |||
| (or | |||
| (display-graphic-p) | |||
| (= (tty-display-color-cells) 16777216))) | |||
| (defun custom-colors-override () | |||
| (mapcar (lambda (x) (list (car x) (cdr x))) | |||
| spacemacs-theme-custom-colors)) | |||
| (defun create-spacemacs-theme (variant theme-name) | |||
| (dyn-let ((class '((class color) (min-colors 89))) ;; ~~ Dark ~~ ~~ Light ~~ | |||
| ;; GUI TER GUI TER | |||
| ;; generic | |||
| (act1 (if (eq variant 'dark) (if (true-color-p) "#222226" "#121212") (if (true-color-p) "#e7e5eb" "#d7dfff"))) | |||
| (act2 (if (eq variant 'dark) (if (true-color-p) "#5d4d7a" "#444444") (if (true-color-p) "#d3d3e7" "#afafd7"))) | |||
| (base (if (eq variant 'dark) (if (true-color-p) "#b2b2b2" "#b2b2b2") (if (true-color-p) "#655370" "#5f5f87"))) | |||
| (base-dim (if (eq variant 'dark) (if (true-color-p) "#686868" "#585858") (if (true-color-p) "#a094a2" "#afafd7"))) | |||
| (bg1 (if (eq variant 'dark) (if (true-color-p) "#292b2e" "#262626") (if (true-color-p) "#fbf8ef" "#ffffff"))) | |||
| (bg2 (if (eq variant 'dark) (if (true-color-p) "#212026" "#1c1c1c") (if (true-color-p) "#efeae9" "#e4e4e4"))) | |||
| (bg3 (if (eq variant 'dark) (if (true-color-p) "#100a14" "#121212") (if (true-color-p) "#e3dedd" "#d0d0d0"))) | |||
| (bg4 (if (eq variant 'dark) (if (true-color-p) "#0a0814" "#080808") (if (true-color-p) "#d2ceda" "#bcbcbc"))) | |||
| (border (if (eq variant 'dark) (if (true-color-p) "#5d4d7a" "#111111") (if (true-color-p) "#b3b9be" "#b3b9be"))) | |||
| (cblk (if (eq variant 'dark) (if (true-color-p) "#cbc1d5" "#b2b2b2") (if (true-color-p) "#655370" "#5f5f87"))) | |||
| (cblk-bg (if (eq variant 'dark) (if (true-color-p) "#2f2b33" "#262626") (if (true-color-p) "#e8e3f0" "#ffffff"))) | |||
| (cblk-ln (if (eq variant 'dark) (if (true-color-p) "#827591" "#af5faf") (if (true-color-p) "#9380b2" "#af5fdf"))) | |||
| (cblk-ln-bg (if (eq variant 'dark) (if (true-color-p) "#373040" "#333333") (if (true-color-p) "#ddd8eb" "#dfdfff"))) | |||
| (cursor (if (eq variant 'dark) (if (true-color-p) "#e3dedd" "#d0d0d0") (if (true-color-p) "#100a14" "#121212"))) | |||
| (const (if (eq variant 'dark) (if (true-color-p) "#a45bad" "#d75fd7") (if (true-color-p) "#4e3163" "#8700af"))) | |||
| (comment (if (eq variant 'dark) (if (true-color-p) "#2aa1ae" "#008787") (if (true-color-p) "#2aa1ae" "#008787"))) | |||
| (comment-bg (if (eq variant 'dark) (if (true-color-p) "#292e34" "#262626") (if (true-color-p) "#ecf3ec" "#ffffff"))) | |||
| (comp (if (eq variant 'dark) (if (true-color-p) "#c56ec3" "#d75fd7") (if (true-color-p) "#6c4173" "#8700af"))) | |||
| (err (if (eq variant 'dark) (if (true-color-p) "#e0211d" "#e0211d") (if (true-color-p) "#e0211d" "#e0211d"))) | |||
| (func (if (eq variant 'dark) (if (true-color-p) "#bc6ec5" "#d75fd7") (if (true-color-p) "#6c3163" "#8700af"))) | |||
| (head1 (if (eq variant 'dark) (if (true-color-p) "#4f97d7" "#268bd2") (if (true-color-p) "#3a81c3" "#268bd2"))) | |||
| (head1-bg (if (eq variant 'dark) (if (true-color-p) "#293239" "#262626") (if (true-color-p) "#edf1ed" "#ffffff"))) | |||
| (head2 (if (eq variant 'dark) (if (true-color-p) "#2d9574" "#2aa198") (if (true-color-p) "#2d9574" "#2aa198"))) | |||
| (head2-bg (if (eq variant 'dark) (if (true-color-p) "#293235" "#262626") (if (true-color-p) "#edf2e9" "#ffffff"))) | |||
| (head3 (if (eq variant 'dark) (if (true-color-p) "#67b11d" "#67b11d") (if (true-color-p) "#67b11d" "#5faf00"))) | |||
| (head3-bg (if (eq variant 'dark) (if (true-color-p) "#293235" "#262626") (if (true-color-p) "#edf2e9" "#ffffff"))) | |||
| (head4 (if (eq variant 'dark) (if (true-color-p) "#b1951d" "#875f00") (if (true-color-p) "#b1951d" "#875f00"))) | |||
| (head4-bg (if (eq variant 'dark) (if (true-color-p) "#32322c" "#262626") (if (true-color-p) "#f6f1e1" "#ffffff"))) | |||
| (highlight (if (eq variant 'dark) (if (true-color-p) "#444155" "#444444") (if (true-color-p) "#d3d3e7" "#d7d7ff"))) | |||
| (highlight-dim (if (eq variant 'dark) (if (true-color-p) "#3b314d" "#444444") (if (true-color-p) "#e7e7fc" "#d7d7ff"))) | |||
| (keyword (if (eq variant 'dark) (if (true-color-p) "#4f97d7" "#268bd2") (if (true-color-p) "#3a81c3" "#268bd2"))) | |||
| (lnum (if (eq variant 'dark) (if (true-color-p) "#44505c" "#444444") (if (true-color-p) "#a8a8bf" "#af87af"))) | |||
| (mat (if (eq variant 'dark) (if (true-color-p) "#86dc2f" "#86dc2f") (if (true-color-p) "#ba2f59" "#af005f"))) | |||
| (meta (if (eq variant 'dark) (if (true-color-p) "#9f8766" "#af875f") (if (true-color-p) "#da8b55" "#df5f5f"))) | |||
| (str (if (eq variant 'dark) (if (true-color-p) "#2d9574" "#2aa198") (if (true-color-p) "#2d9574" "#2aa198"))) | |||
| (suc (if (eq variant 'dark) (if (true-color-p) "#86dc2f" "#86dc2f") (if (true-color-p) "#42ae2c" "#00af00"))) | |||
| (ttip (if (eq variant 'dark) (if (true-color-p) "#9a9aba" "#888888") (if (true-color-p) "#8c799f" "#5f5f87"))) | |||
| (ttip-sl (if (eq variant 'dark) (if (true-color-p) "#5e5079" "#333333") (if (true-color-p) "#c8c6dd" "#afafff"))) | |||
| (ttip-bg (if (eq variant 'dark) (if (true-color-p) "#34323e" "#444444") (if (true-color-p) "#e2e0ea" "#dfdfff"))) | |||
| (type (if (eq variant 'dark) (if (true-color-p) "#ce537a" "#df005f") (if (true-color-p) "#ba2f59" "#af005f"))) | |||
| (var (if (eq variant 'dark) (if (true-color-p) "#7590db" "#8787d7") (if (true-color-p) "#715ab1" "#af5fd7"))) | |||
| (war (if (eq variant 'dark) (if (true-color-p) "#dc752f" "#dc752f") (if (true-color-p) "#dc752f" "#dc752f"))) | |||
| ;; colors | |||
| (aqua (if (eq variant 'dark) (if (true-color-p) "#2d9574" "#2aa198") (if (true-color-p) "#2d9574" "#2aa198"))) | |||
| (aqua-bg (if (eq variant 'dark) (if (true-color-p) "#293235" "#262626") (if (true-color-p) "#edf2e9" "#ffffff"))) | |||
| (green (if (eq variant 'dark) (if (true-color-p) "#67b11d" "#67b11d") (if (true-color-p) "#67b11d" "#5faf00"))) | |||
| (green-bg (if (eq variant 'dark) (if (true-color-p) "#293235" "#262626") (if (true-color-p) "#edf2e9" "#ffffff"))) | |||
| (green-bg-s (if (eq variant 'dark) (if (true-color-p) "#29422d" "#262626") (if (true-color-p) "#dae6d0" "#ffffff"))) | |||
| (cyan (if (eq variant 'dark) (if (true-color-p) "#28def0" "#00ffff") (if (true-color-p) "#21b8c7" "#008080"))) | |||
| (red (if (eq variant 'dark) (if (true-color-p) "#f2241f" "#d70000") (if (true-color-p) "#f2241f" "#d70008"))) | |||
| (red-bg (if (eq variant 'dark) (if (true-color-p) "#3c2a2c" "#262626") (if (true-color-p) "#faede4" "#ffffff"))) | |||
| (red-bg-s (if (eq variant 'dark) (if (true-color-p) "#512e31" "#262626") (if (true-color-p) "#eed9d2" "#ffffff"))) | |||
| (blue (if (eq variant 'dark) (if (true-color-p) "#4f97d7" "#268bd2") (if (true-color-p) "#3a81c3" "#268bd2"))) | |||
| (blue-bg (if (eq variant 'dark) (if (true-color-p) "#293239" "#262626") (if (true-color-p) "#edf1ed" "#d7d7ff"))) | |||
| (magenta (if (eq variant 'dark) (if (true-color-p) "#a31db1" "#af00df") (if (true-color-p) "#a31db1" "#800080"))) | |||
| (yellow (if (eq variant 'dark) (if (true-color-p) "#b1951d" "#875f00") (if (true-color-p) "#b1951d" "#875f00"))) | |||
| (yellow-bg (if (eq variant 'dark) (if (true-color-p) "#32322c" "#262626") (if (true-color-p) "#f6f1e1" "#ffffff"))) | |||
| ) | |||
| custom-colors-override | |||
| (custom-theme-set-faces | |||
| theme-name | |||
| ;;;;; basics | |||
| `(cursor ((,class (:background ,cursor)))) | |||
| `(custom-button ((,class :background ,bg2 :foreground ,base :box (:line-width 2 :style released-button)))) | |||
| `(default ((,class (:background ,bg1 :foreground ,base)))) | |||
| `(default-italic ((,class (:italic t)))) | |||
| `(error ((,class (:foreground ,err)))) | |||
| `(eval-sexp-fu-flash ((,class (:background ,suc :foreground ,bg1)))) | |||
| `(eval-sexp-fu-flash-error ((,class (:background ,err :foreground ,bg1)))) | |||
| `(font-lock-builtin-face ((,class (:foreground ,keyword)))) | |||
| `(font-lock-comment-face ((,class (:foreground ,comment :background ,(when spacemacs-theme-comment-bg comment-bg))))) | |||
| `(font-lock-constant-face ((,class (:foreground ,const)))) | |||
| `(font-lock-doc-face ((,class (:foreground ,comment)))) | |||
| `(font-lock-function-name-face ((,class (:foreground ,func :inherit bold)))) | |||
| `(font-lock-keyword-face ((,class (:inherit bold :foreground ,keyword)))) | |||
| `(font-lock-negation-char-face ((,class (:foreground ,const)))) | |||
| `(font-lock-preprocessor-face ((,class (:foreground ,func)))) | |||
| `(font-lock-reference-face ((,class (:foreground ,const)))) | |||
| `(font-lock-string-face ((,class (:foreground ,str)))) | |||
| `(font-lock-type-face ((,class (:foreground ,type :inherit bold)))) | |||
| `(font-lock-variable-name-face ((,class (:foreground ,var)))) | |||
| `(font-lock-warning-face ((,class (:foreground ,war :background ,bg1)))) | |||
| `(fringe ((,class (:background ,bg1 :foreground ,base)))) | |||
| `(header-line ((,class :background ,bg4))) | |||
| `(highlight ((,class (:foreground ,base :background ,highlight)))) | |||
| `(hl-line ((,class (:background ,bg2)))) | |||
| `(isearch ((,class (:foreground ,bg1 :background ,mat)))) | |||
| `(lazy-highlight ((,class (:background ,green-bg-s :weight normal)))) | |||
| `(link ((,class (:foreground ,comment :underline t)))) | |||
| `(link-visited ((,class (:foreground ,comp :underline t)))) | |||
| `(match ((,class (:background ,highlight :foreground ,mat)))) | |||
| `(minibuffer-prompt ((,class (:inherit bold :foreground ,keyword)))) | |||
| `(page-break-lines ((,class (:foreground ,act2)))) | |||
| `(region ((,class (:background ,highlight)))) | |||
| `(secondary-selection ((,class (:background ,bg3)))) | |||
| `(shadow ((,class (:foreground ,base-dim)))) | |||
| `(success ((,class (:foreground ,suc)))) | |||
| `(tooltip ((,class (:background ,ttip-sl :foreground ,base :bold nil :italic nil :underline nil)))) | |||
| `(vertical-border ((,class (:foreground ,border)))) | |||
| `(warning ((,class (:foreground ,war)))) | |||
| ;;;;; ahs | |||
| `(ahs-face ((,class (:background ,highlight)))) | |||
| `(ahs-plugin-whole-buffer-face ((,class (:background ,mat :foreground ,bg1)))) | |||
| ;;;;; anzu-mode | |||
| `(anzu-mode-line ((,class (:foreground ,yellow :inherit bold)))) | |||
| ;;;;; auto-complete | |||
| `(ac-completion-face ((,class (:background ,ttip-bg :foreground ,ttip)))) | |||
| ;;;;; avy | |||
| `(avy-lead-face ((,class (:background ,blue-bg :foreground ,magenta)))) | |||
| `(avy-lead-face-0 ((,class (:background ,blue-bg :foreground ,blue)))) | |||
| `(avy-lead-face-1 ((,class (:background ,blue-bg :foreground ,magenta)))) | |||
| `(avy-lead-face-2 ((,class (:background ,blue-bg :foreground ,blue)))) | |||
| ;;;;; cider | |||
| `(cider-enlightened ((,class (:background nil :box (:color ,yellow :line-width -1 :style nil) :foreground ,yellow)))) | |||
| `(cider-enlightened-local ((,class (:foreground ,yellow)))) | |||
| `(cider-instrumented-face ((,class (:background nil :box (:color ,red :line-width -1 :style nil) :foreground ,red)))) | |||
| `(cider-result-overlay-face ((,class (:background nil :box (:color ,blue :line-width -1 :style nil) :foreground ,blue)))) | |||
| `(cider-test-error-face ((,class (:background ,war :foreground ,bg1)))) | |||
| `(cider-test-failure-face ((,class (:background ,err :foreground ,bg1)))) | |||
| `(cider-test-success-face ((,class (:background ,suc :foreground ,bg1)))) | |||
| `(cider-traced-face ((,class :box (:color ,cyan :line-width -1 :style nil)))) | |||
| ;;;;; company | |||
| `(company-echo-common ((,class (:background ,base :foreground ,bg1)))) | |||
| `(company-preview ((,class (:background ,ttip-bg :foreground ,ttip)))) | |||
| `(company-preview-common ((,class (:background ,ttip-bg :foreground ,base)))) | |||
| `(company-preview-search ((,class (:inherit match)))) | |||
| `(company-scrollbar-bg ((,class (:background ,bg2)))) | |||
| `(company-scrollbar-fg ((,class (:background ,act2)))) | |||
| `(company-template-field ((,class (:inherit region)))) | |||
| `(company-tooltip ((,class (:background ,ttip-bg :foreground ,ttip)))) | |||
| `(company-tooltip-annotation ((,class (:foreground ,keyword)))) | |||
| `(company-tooltip-common ((,class (:background ,ttip-bg :foreground ,base)))) | |||
| `(company-tooltip-common-selection ((,class (:foreground ,base)))) | |||
| `(company-tooltip-mouse ((,class (:inherit highlight)))) | |||
| `(company-tooltip-search ((,class (:inherit match)))) | |||
| `(company-tooltip-selection ((,class (:background ,ttip-sl :foreground ,base)))) | |||
| ;;;;; diff | |||
| `(diff-added ((,class :background nil :foreground ,green))) | |||
| `(diff-changed ((,class :background nil :foreground ,keyword))) | |||
| `(diff-header ((,class :background ,cblk-ln-bg :foreground ,func))) | |||
| `(diff-file-header ((,class :background ,cblk-ln-bg :foreground ,cblk))) | |||
| `(diff-indicator-added ((,class :background nil :foreground ,green))) | |||
| `(diff-indicator-changed ((,class :background nil :foreground ,keyword))) | |||
| `(diff-indicator-removed ((,class :background nil :foreground ,red))) | |||
| `(diff-refine-added ((,class :background ,green :foreground ,bg4))) | |||
| `(diff-refine-changed ((,class :background ,keyword :foreground ,bg4))) | |||
| `(diff-refine-removed ((,class :background ,red :foreground ,bg4))) | |||
| `(diff-removed ((,class :background nil :foreground ,red))) | |||
| ;;;;; diff-hl | |||
| `(diff-hl-change ((,class :background ,blue-bg :foreground ,blue))) | |||
| `(diff-hl-delete ((,class :background ,red-bg :foreground ,red))) | |||
| `(diff-hl-insert ((,class :background ,green-bg :foreground ,green))) | |||
| ;;;;; dired | |||
| `(dired-directory ((,class (:foreground ,keyword :background ,bg1 :inherit bold)))) | |||
| `(dired-flagged ((,class (:foreground ,red)))) | |||
| `(dired-header ((,class (:foreground ,comp :inherit bold)))) | |||
| `(dired-ignored ((,class (:inherit shadow)))) | |||
| `(dired-mark ((,class (:foreground ,comp :inherit bold)))) | |||
| `(dired-marked ((,class (:foreground ,magenta :inherit bold)))) | |||
| `(dired-perm-write ((,class (:foreground ,base :underline t)))) | |||
| `(dired-symlink ((,class (:foreground ,cyan :background ,bg1 :inherit bold)))) | |||
| `(dired-warning ((,class (:foreground ,war)))) | |||
| ;;;;; ediff | |||
| `(ediff-current-diff-A ((,class(:background ,red-bg-s :foreground ,red)))) | |||
| `(ediff-current-diff-Ancestor ((,class(:background ,aqua-bg :foreground ,aqua)))) | |||
| `(ediff-current-diff-B ((,class(:background ,green-bg-s :foreground ,green)))) | |||
| `(ediff-current-diff-C ((,class(:background ,blue-bg :foreground ,blue)))) | |||
| `(ediff-even-diff-A ((,class(:background ,bg3)))) | |||
| `(ediff-even-diff-Ancestor ((,class(:background ,bg3)))) | |||
| `(ediff-even-diff-B ((,class(:background ,bg3)))) | |||
| `(ediff-even-diff-C ((,class(:background ,bg3)))) | |||
| `(ediff-fine-diff-A ((,class(:background nil :inherit bold)))) | |||
| `(ediff-fine-diff-Ancestor ((,class(:background nil :inherit bold)))) | |||
| `(ediff-fine-diff-B ((,class(:background nil :inherit bold)))) | |||
| `(ediff-fine-diff-C ((,class(:background nil :inherit bold)))) | |||
| `(ediff-odd-diff-A ((,class(:background ,bg4)))) | |||
| `(ediff-odd-diff-Ancestor ((,class(:background ,bg4)))) | |||
| `(ediff-odd-diff-B ((,class(:background ,bg4)))) | |||
| `(ediff-odd-diff-C ((,class(:background ,bg4)))) | |||
| ;;;;; ein | |||
| `(ein:cell-input-area((,class (:background ,bg2)))) | |||
| `(ein:cell-input-prompt ((,class (:foreground ,suc)))) | |||
| `(ein:cell-output-prompt ((,class (:foreground ,err)))) | |||
| `(ein:notification-tab-normal ((,class (:foreground ,keyword)))) | |||
| `(ein:notification-tab-selected ((,class (:foreground ,suc :inherit bold)))) | |||
| ;;;;; eldoc | |||
| `(eldoc-highlight-function-argument ((,class (:foreground ,mat :inherit bold)))) | |||
| ;;;;; elfeed | |||
| `(elfeed-search-date-face ((,class (:foreground ,head2)))) | |||
| `(elfeed-search-feed-face ((,class (:foreground ,blue)))) | |||
| `(elfeed-search-tag-face ((,class (:foreground ,func)))) | |||
| `(elfeed-search-title-face ((,class (:foreground ,base-dim)))) | |||
| `(elfeed-search-unread-title-face ((,class (:foreground ,base)))) | |||
| ;;;;; enh-ruby | |||
| `(enh-ruby-op-face ((,class (:background ,bg1 :foreground ,base)))) | |||
| `(enh-ruby-string-delimiter-face ((,class (:foreground ,str)))) | |||
| ;;;;; erc | |||
| `(erc-input-face ((,class (:foreground ,func)))) | |||
| `(erc-my-nick-face ((,class (:foreground ,keyword)))) | |||
| `(erc-nick-default-face ((,class (:foreground ,keyword)))) | |||
| `(erc-nick-prefix-face ((,class (:foreground ,yellow)))) | |||
| `(erc-notice-face ((,class (:foreground ,str)))) | |||
| `(erc-prompt-face ((,class (:foreground ,mat :inherit bold)))) | |||
| `(erc-timestamp-face ((,class (:foreground ,keyword)))) | |||
| ;;;;; eshell | |||
| `(eshell-ls-archive ((,class (:foreground ,red :inherit bold)))) | |||
| `(eshell-ls-backup ((,class (:inherit font-lock-comment-face)))) | |||
| `(eshell-ls-clutter ((,class (:inherit font-lock-comment-face)))) | |||
| `(eshell-ls-directory ((,class (:foreground ,keyword :inherit bold)))) | |||
| `(eshell-ls-executable ((,class (:foreground ,suc :inherit bold)))) | |||
| `(eshell-ls-missing ((,class (:inherit font-lock-warning-face)))) | |||
| `(eshell-ls-product ((,class (:inherit font-lock-doc-face)))) | |||
| `(eshell-ls-special ((,class (:foreground ,yellow :inherit bold)))) | |||
| `(eshell-ls-symlink ((,class (:foreground ,cyan :inherit bold)))) | |||
| `(eshell-ls-unreadable ((,class (:foreground ,base)))) | |||
| `(eshell-prompt ((,class (:foreground ,keyword :inherit bold)))) | |||
| ;;;;; evil | |||
| `(evil-ex-substitute-matches ((,class (:background ,red-bg :foreground ,red)))) | |||
| `(evil-ex-substitute-replacement ((,class (:background ,green-bg :foreground ,green)))) | |||
| ;;;;; flycheck | |||
| `(flycheck-error | |||
| ((,(append '((supports :underline (:style line))) class) | |||
| (:underline (:style line :color ,err))) | |||
| (,class (:foreground ,base :background ,err :inherit bold :underline t)))) | |||
| `(flycheck-error-list-checker-name ((,class (:foreground ,keyword)))) | |||
| `(flycheck-fringe-error ((,class (:foreground ,err :inherit bold)))) | |||
| `(flycheck-fringe-info ((,class (:foreground ,keyword :inherit bold)))) | |||
| `(flycheck-fringe-warning ((,class (:foreground ,war :inherit bold)))) | |||
| `(flycheck-info | |||
| ((,(append '((supports :underline (:style line))) class) | |||
| (:underline (:style line :color ,keyword))) | |||
| (,class (:foreground ,base :background ,keyword :inherit bold :underline t)))) | |||
| `(flycheck-warning | |||
| ((,(append '((supports :underline (:style line))) class) | |||
| (:underline (:style line :color ,war))) | |||
| (,class (:foreground ,base :background ,war :inherit bold :underline t)))) | |||
| ;;;;; jabber | |||
| `(jabber-activity-face ((,class (:inherit bold :foreground ,red)))) | |||
| `(jabber-activity-personal-face ((,class (:inherit bold :foreground ,blue)))) | |||
| `(jabber-chat-error ((,class (:inherit bold :foreground ,red)))) | |||
| `(jabber-chat-prompt-foreign ((,class (:inherit bold :foreground ,red)))) | |||
| `(jabber-chat-prompt-local ((,class (:inherit bold :foreground ,blue)))) | |||
| `(jabber-chat-prompt-system ((,class (:inherit bold :foreground ,green)))) | |||
| `(jabber-chat-text-foreign ((,class (:foreground ,base)))) | |||
| `(jabber-chat-text-local ((,class (:foreground ,base)))) | |||
| `(jabber-rare-time-face ((,class (:foreground ,green)))) | |||
| `(jabber-roster-user-away ((,class (:foreground ,yellow)))) | |||
| `(jabber-roster-user-chatty ((,class (:inherit bold :foreground ,green)))) | |||
| `(jabber-roster-user-dnd ((,class (:foreground ,red)))) | |||
| `(jabber-roster-user-error ((,class (:foreground ,err)))) | |||
| `(jabber-roster-user-offline ((,class (:foreground ,base)))) | |||
| `(jabber-roster-user-online ((,class (:inherit bold :foreground ,green)))) | |||
| `(jabber-roster-user-xa ((,class (:foreground ,aqua)))) | |||
| ;;;;; git-gutter-fr | |||
| `(git-gutter-fr:added ((,class (:foreground ,green :inherit bold)))) | |||
| `(git-gutter-fr:deleted ((,class (:foreground ,war :inherit bold)))) | |||
| `(git-gutter-fr:modified ((,class (:foreground ,keyword :inherit bold)))) | |||
| ;;;;; git-timemachine | |||
| `(git-timemachine-minibuffer-detail-face ((,class (:foreground ,blue :inherit bold :background ,blue-bg)))) | |||
| ;;;;; gnus | |||
| `(gnus-emphasis-highlight-words ((,class (:background ,suc :foreground ,bg1)))) | |||
| `(gnus-header-content ((,class (:foreground ,keyword)))) | |||
| `(gnus-header-from ((,class (:foreground ,var)))) | |||
| `(gnus-header-name ((,class (:foreground ,comp)))) | |||
| `(gnus-header-subject ((,class (:foreground ,func :inherit bold)))) | |||
| `(gnus-summary-cancelled ((,class (:background ,war :foreground ,bg1)))) | |||
| ;;;;; guide-key | |||
| `(guide-key/highlight-command-face ((,class (:foreground ,base)))) | |||
| `(guide-key/key-face ((,class (:foreground ,keyword)))) | |||
| `(guide-key/prefix-command-face ((,class (:foreground ,keyword :inherit bold)))) | |||
| ;;;;; helm | |||
| `(helm-bookmark-directory ((,class (:inherit helm-ff-directory)))) | |||
| `(helm-bookmark-file ((,class (:foreground ,base)))) | |||
| `(helm-bookmark-gnus ((,class (:foreground ,comp)))) | |||
| `(helm-bookmark-info ((,class (:foreground ,comp)))) | |||
| `(helm-bookmark-man ((,class (:foreground ,comp)))) | |||
| `(helm-bookmark-w3m ((,class (:foreground ,comp)))) | |||
| `(helm-buffer-directory ((,class (:foreground ,base :background ,bg1)))) | |||
| `(helm-buffer-file ((,class (:foreground ,base :background ,bg1)))) | |||
| `(helm-buffer-not-saved ((,class (:foreground ,comp :background ,bg1)))) | |||
| `(helm-buffer-process ((,class (:foreground ,keyword :background ,bg1)))) | |||
| `(helm-buffer-saved-out ((,class (:foreground ,base :background ,bg1)))) | |||
| `(helm-buffer-size ((,class (:foreground ,base :background ,bg1)))) | |||
| `(helm-candidate-number ((,class (:background ,bg1 :foreground ,keyword :inherit bold)))) | |||
| `(helm-ff-directory ((,class (:foreground ,keyword :background ,bg1 :inherit bold)))) | |||
| `(helm-ff-dotted-directory ((,class (:foreground ,keyword :background ,bg1 :inherit bold)))) | |||
| `(helm-ff-dotted-symlink-directory ((,class (:foreground ,cyan :background ,bg1 :inherit bold)))) | |||
| `(helm-ff-executable ((,class (:foreground ,suc :background ,bg1 :weight normal)))) | |||
| `(helm-ff-file ((,class (:foreground ,base :background ,bg1 :weight normal)))) | |||
| `(helm-ff-invalid-symlink ((,class (:foreground ,red :background ,bg1 :inherit bold)))) | |||
| `(helm-ff-prefix ((,class (:foreground ,bg1 :background ,keyword :weight normal)))) | |||
| `(helm-ff-symlink ((,class (:foreground ,cyan :background ,bg1 :inherit bold)))) | |||
| `(helm-grep-cmd-line ((,class (:foreground ,base :background ,bg1)))) | |||
| `(helm-grep-file ((,class (:foreground ,base :background ,bg1)))) | |||
| `(helm-grep-finish ((,class (:foreground ,base :background ,bg1)))) | |||
| `(helm-grep-lineno ((,class (:foreground ,type :background ,bg1 :inherit bold)))) | |||
| `(helm-grep-match ((,class (:foreground nil :background nil :inherit helm-match)))) | |||
| `(helm-header ((,class (:foreground ,base :background ,bg1 :underline nil :box nil)))) | |||
| `(helm-header-line-left-margin ((,class (:foreground ,keyword :background ,nil)))) | |||
| `(helm-match ((,class (:background ,head1-bg :foreground ,head1)))) | |||
| `(helm-match-item ((,class (:background ,head1-bg :foreground ,head1)))) | |||
| `(helm-moccur-buffer ((,class (:foreground ,var :background ,bg1)))) | |||
| `(helm-selection ((,class (:background ,highlight)))) | |||
| `(helm-selection-line ((,class (:background ,bg2)))) | |||
| `(helm-separator ((,class (:foreground ,comp :background ,bg1)))) | |||
| `(helm-source-header ((,class (:background ,comp :foreground ,bg1 :inherit bold)))) | |||
| `(helm-time-zone-current ((,class (:foreground ,keyword :background ,bg1)))) | |||
| `(helm-time-zone-home ((,class (:foreground ,comp :background ,bg1)))) | |||
| `(helm-visible-mark ((,class (:foreground ,keyword :background ,bg3)))) | |||
| ;;;;; helm-swoop | |||
| `(helm-swoop-target-line-block-face ((,class (:foreground ,base :background ,highlight)))) | |||
| `(helm-swoop-target-line-face ((,class (:background ,highlight)))) | |||
| `(helm-swoop-target-word-face ((,class (:background ,highlight :foreground ,mat)))) | |||
| ;;;;; highlights | |||
| `(hi-green ((,class (:foreground ,green :background ,green-bg)))) | |||
| `(hi-yellow ((,class (:foreground ,yellow :background ,yellow-bg)))) | |||
| ;;;;; highlight-indentation | |||
| `(highlight-indentation-face ((,class (:background ,comment-bg)))) | |||
| ;;;;; highlight-symbol | |||
| `(highlight-symbol-face ((,class (:background ,bg2)))) | |||
| ;;;;; hydra | |||
| `(hydra-face-blue ((,class (:foreground ,blue)))) | |||
| `(hydra-face-red ((,class (:foreground ,red)))) | |||
| ;;;;; ido | |||
| `(ido-first-match ((,class (:foreground ,comp :inherit bold)))) | |||
| `(ido-only-match ((,class (:foreground ,mat :inherit bold)))) | |||
| `(ido-subdir ((,class (:foreground ,keyword)))) | |||
| `(ido-vertical-match-face ((,class (:foreground ,comp :underline nil)))) | |||
| ;;;;; info | |||
| `(info-header-xref ((,class (:foreground ,func :underline t)))) | |||
| `(info-menu ((,class (:foreground ,suc)))) | |||
| `(info-node ((,class (:foreground ,func :inherit bold)))) | |||
| `(info-quoted-name ((,class (:foreground ,keyword)))) | |||
| `(info-reference-item ((,class (:background nil :underline t :inherit bold)))) | |||
| `(info-string ((,class (:foreground ,str)))) | |||
| `(info-title-1 ((,class (:height 1.4 :inherit bold)))) | |||
| `(info-title-2 ((,class (:height 1.3 :inherit bold)))) | |||
| `(info-title-3 ((,class (:height 1.3)))) | |||
| `(info-title-4 ((,class (:height 1.2)))) | |||
| ;;;;; ivy | |||
| `(ivy-current-match ((,class (:background ,highlight :inherit bold)))) | |||
| `(ivy-minibuffer-match-face-1 ((,class (:inherit bold)))) | |||
| `(ivy-minibuffer-match-face-2 ((,class (:foreground ,head1 :underline t)))) | |||
| `(ivy-minibuffer-match-face-3 ((,class (:foreground ,head4 :underline t)))) | |||
| `(ivy-minibuffer-match-face-4 ((,class (:foreground ,head3 :underline t)))) | |||
| `(ivy-remote ((,class (:foreground ,cyan)))) | |||
| ;;;;; latex | |||
| `(font-latex-bold-face ((,class (:foreground ,comp)))) | |||
| `(font-latex-italic-face ((,class (:foreground ,keyword :italic t)))) | |||
| `(font-latex-match-reference-keywords ((,class (:foreground ,const)))) | |||
| `(font-latex-match-variable-keywords ((,class (:foreground ,var)))) | |||
| `(font-latex-sectioning-0-face ((,class (:inherit bold :foreground ,head3 :height ,(if spacemacs-theme-org-height 1.3 1.0) :background ,(when spacemacs-theme-org-highlight head3-bg))))) | |||
| `(font-latex-sectioning-1-face ((,class (:inherit bold :foreground ,head4 :height ,(if spacemacs-theme-org-height 1.3 1.0) :background ,(when spacemacs-theme-org-highlight head4-bg))))) | |||
| `(font-latex-sectioning-2-face ((,class (:inherit bold :foreground ,head1 :height ,(if spacemacs-theme-org-height 1.3 1.0) :background ,(when spacemacs-theme-org-highlight head1-bg))))) | |||
| `(font-latex-sectioning-3-face ((,class (:inherit bold :foreground ,head2 :height ,(if spacemacs-theme-org-height 1.2 1.0) :background ,(when spacemacs-theme-org-highlight head2-bg))))) | |||
| `(font-latex-sectioning-4-face ((,class (:bold nil :foreground ,head3 :height ,(if spacemacs-theme-org-height 1.1 1.0) :background ,(when spacemacs-theme-org-highlight head3-bg))))) | |||
| `(font-latex-sectioning-5-face ((,class (:bold nil :foreground ,head4 :background ,(when spacemacs-theme-org-highlight head4-bg))))) | |||
| `(font-latex-string-face ((,class (:foreground ,str)))) | |||
| `(font-latex-warning-face ((,class (:foreground ,war)))) | |||
| ;;;;; linum-mode | |||
| `(linum ((,class (:foreground ,lnum :background ,bg2)))) | |||
| ;;;;; linum-relative | |||
| `(linum-relative-current-face ((,class (:foreground ,comp)))) | |||
| ;;;;; magit | |||
| `(magit-blame-culprit ((,class :background ,yellow-bg :foreground ,yellow))) | |||
| `(magit-blame-date ((,class :background ,yellow-bg :foreground ,green))) | |||
| `(magit-blame-hash ((,class :background ,yellow-bg :foreground ,func))) | |||
| `(magit-blame-header ((,class :background ,yellow-bg :foreground ,green))) | |||
| `(magit-blame-heading ((,class :background ,yellow-bg :foreground ,green))) | |||
| `(magit-blame-name ((,class :background ,yellow-bg :foreground ,yellow))) | |||
| `(magit-blame-sha1 ((,class :background ,yellow-bg :foreground ,func))) | |||
| `(magit-blame-subject ((,class :background ,yellow-bg :foreground ,yellow))) | |||
| `(magit-blame-summary ((,class :background ,yellow-bg :foreground ,yellow))) | |||
| `(magit-blame-time ((,class :background ,yellow-bg :foreground ,green))) | |||
| `(magit-branch ((,class (:foreground ,const :inherit bold)))) | |||
| `(magit-branch-current ((,class (:background ,blue-bg :foreground ,blue :inherit bold :box t)))) | |||
| `(magit-branch-local ((,class (:background ,blue-bg :foreground ,blue :inherit bold)))) | |||
| `(magit-branch-remote ((,class (:background ,aqua-bg :foreground ,aqua :inherit bold)))) | |||
| `(magit-diff-context-highlight ((,class (:background ,bg2 :foreground ,base)))) | |||
| `(magit-diff-file-header ((,class (:background ,comment-bg :foreground ,comment)))) | |||
| `(magit-diff-file-heading ((,class (:background ,comment-bg :foreground ,comment)))) | |||
| `(magit-diff-file-heading-highlight ((,class (:background ,comment-bg :foreground ,comment)))) | |||
| `(magit-diff-hunk-header ((,class (:background ,ttip-bg :foreground ,ttip)))) | |||
| `(magit-diff-hunk-heading ((,class (:background ,ttip-bg :foreground ,ttip)))) | |||
| `(magit-diff-hunk-heading-highlight ((,class (:background ,ttip-bg :foreground ,ttip)))) | |||
| `(magit-hash ((,class (:foreground ,var)))) | |||
| `(magit-hunk-heading ((,class (:background ,bg3)))) | |||
| `(magit-hunk-heading-highlight ((,class (:background ,bg3)))) | |||
| `(magit-item-highlight ((,class :background ,bg2))) | |||
| `(magit-log-author ((,class (:foreground ,func)))) | |||
| `(magit-log-head-label-head ((,class (:background ,yellow :foreground ,bg1 :inherit bold)))) | |||
| `(magit-log-head-label-local ((,class (:background ,keyword :foreground ,bg1 :inherit bold)))) | |||
| `(magit-log-head-label-remote ((,class (:background ,suc :foreground ,bg1 :inherit bold)))) | |||
| `(magit-log-head-label-tags ((,class (:background ,magenta :foreground ,bg1 :inherit bold)))) | |||
| `(magit-log-head-label-wip ((,class (:background ,cyan :foreground ,bg1 :inherit bold)))) | |||
| `(magit-log-sha1 ((,class (:foreground ,str)))) | |||
| `(magit-process-ng ((,class (:foreground ,war :inherit bold)))) | |||
| `(magit-process-ok ((,class (:foreground ,func :inherit bold)))) | |||
| `(magit-reflog-amend ((,class (:foreground ,magenta)))) | |||
| `(magit-reflog-checkout ((,class (:foreground ,blue)))) | |||
| `(magit-reflog-cherry-pick ((,class (:foreground ,green)))) | |||
| `(magit-reflog-commit ((,class (:foreground ,green)))) | |||
| `(magit-reflog-merge ((,class (:foreground ,green)))) | |||
| `(magit-reflog-other ((,class (:foreground ,cyan)))) | |||
| `(magit-reflog-rebase ((,class (:foreground ,magenta)))) | |||
| `(magit-reflog-remote ((,class (:foreground ,cyan)))) | |||
| `(magit-reflog-reset ((,class (:foreground ,red)))) | |||
| `(magit-section-heading ((,class (:foreground ,keyword :inherit bold)))) | |||
| `(magit-section-highlight ((,class (:background ,bg2)))) | |||
| `(magit-section-title ((,class (:background ,bg1 :foreground ,keyword :inherit bold)))) | |||
| ;;;;; man | |||
| `(Man-overstrike ((,class (:foreground ,head1 :inherit bold)))) | |||
| `(Man-reverse ((,class (:foreground ,highlight)))) | |||
| `(Man-underline ((,class (:foreground ,comp :underline t)))) | |||
| ;;;;; markdown | |||
| `(markdown-header-face-1 ((,class (:inherit bold :foreground ,head1 :height ,(if spacemacs-theme-org-height 1.3 1.0) :background ,(when spacemacs-theme-org-highlight head1-bg))))) | |||
| `(markdown-header-face-2 ((,class (:inherit bold :foreground ,head2 :height ,(if spacemacs-theme-org-height 1.2 1.0) :background ,(when spacemacs-theme-org-highlight head2-bg))))) | |||
| `(markdown-header-face-3 ((,class (:bold nil :foreground ,head3 :height ,(if spacemacs-theme-org-height 1.1 1.0) :background ,(when spacemacs-theme-org-highlight head3-bg))))) | |||
| `(markdown-header-face-4 ((,class (:bold nil :foreground ,head4 :background ,(when spacemacs-theme-org-highlight head4-bg))))) | |||
| `(markdown-header-face-5 ((,class (:bold nil :foreground ,head1)))) | |||
| `(markdown-header-face-6 ((,class (:bold nil :foreground ,head2)))) | |||
| ;;;;; mode-line | |||
| `(mode-line ((,class (:foreground ,base :background ,act1 :box (:color ,border :line-width 1))))) | |||
| `(mode-line-buffer-id ((,class (:inherit bold :foreground ,func)))) | |||
| `(mode-line-inactive ((,class (:foreground ,base :background ,bg1 :box (:color ,border :line-width 1))))) | |||
| ;;;;; mu4e | |||
| `(mu4e-cited-1-face ((,class (:foreground ,base)))) | |||
| `(mu4e-cited-7-face ((,class (:foreground ,base)))) | |||
| `(mu4e-header-key-face ((,class (:foreground ,head2 :inherit bold)))) | |||
| `(mu4e-header-marks-face ((,class (:foreground ,comp)))) | |||
| `(mu4e-unread-face ((,class (:foreground ,yellow :inherit bold)))) | |||
| `(mu4e-view-url-number-face ((,class (:foreground ,comp)))) | |||
| ;;;;; notmuch | |||
| `(notmuch-search-date ((,class (:foreground ,func)))) | |||
| `(notmuch-search-flagged-face ((,class (:weight extra-bold)))) | |||
| `(notmuch-search-non-matching-authors ((,class (:foreground ,base-dim)))) | |||
| `(notmuch-search-unread-face ((,class (:background ,highlight-dim :box ,border)))) | |||
| `(notmuch-tag-face ((,class (:foreground ,keyword)))) | |||
| `(notmuch-tag-flagged ((,class (:foreground ,war)))) | |||
| ;;;;; neotree | |||
| `(neo-dir-link-face ((,class (:foreground ,keyword :inherit bold)))) | |||
| `(neo-expand-btn-face ((,class (:foreground ,base)))) | |||
| `(neo-file-link-face ((,class (:foreground ,base)))) | |||
| `(neo-root-dir-face ((,class (:foreground ,func :inherit bold)))) | |||
| ;;;;; org | |||
| `(org-agenda-clocking ((,class (:background ,highlight :foreground ,comp)))) | |||
| `(org-agenda-date ((,class (:foreground ,var :height ,(if spacemacs-theme-org-agenda-height 1.1 1.0))))) | |||
| `(org-agenda-date-today ((,class (:foreground ,keyword :inherit bold :height ,(if spacemacs-theme-org-agenda-height 1.3 1.0))))) | |||
| `(org-agenda-date-weekend ((,class (:inherit bold :foreground ,var)))) | |||
| `(org-agenda-done ((,class (:foreground ,suc :height ,(if spacemacs-theme-org-agenda-height 1.2 1.0))))) | |||
| `(org-agenda-structure ((,class (:inherit bold :foreground ,comp)))) | |||
| `(org-block ((,class (:background ,cblk-bg :foreground ,cblk)))) | |||
| `(org-block-begin-line ((,class (:background ,cblk-ln-bg :foreground ,cblk-ln)))) | |||
| `(org-block-end-line ((,class (:background ,cblk-ln-bg :foreground ,cblk-ln)))) | |||
| `(org-clock-overlay ((,class (:foreground ,comp)))) | |||
| `(org-code ((,class (:foreground ,cyan)))) | |||
| `(org-column ((,class (:background ,highlight)))) | |||
| `(org-column-title ((,class (:background ,highlight)))) | |||
| `(org-date ((,class (:underline t :foreground ,var)))) | |||
| `(org-date-selected ((,class (:background ,func :foreground ,bg1)))) | |||
| `(org-document-info-keyword ((,class (:foreground ,meta)))) | |||
| `(org-document-title ((,class (:foreground ,func :inherit bold :height ,(if spacemacs-theme-org-height 1.4 1.0) :underline t)))) | |||
| `(org-done ((,class (:foreground ,suc :inherit bold :background ,green-bg)))) | |||
| `(org-ellipsis ((,class (:foreground ,keyword)))) | |||
| `(org-footnote ((,class (:underline t :foreground ,base)))) | |||
| `(org-hide ((,class (:foreground ,base)))) | |||
| `(org-kbd ((,class (:inherit region :foreground ,base :box (:line-width 1 :style released-button))))) | |||
| `(org-level-1 ((,class (:inherit bold :foreground ,head1 :height ,(if spacemacs-theme-org-height 1.3 1.0) :background ,(when spacemacs-theme-org-highlight head1-bg))))) | |||
| `(org-level-2 ((,class (:inherit bold :foreground ,head2 :height ,(if spacemacs-theme-org-height 1.2 1.0) :background ,(when spacemacs-theme-org-highlight head2-bg))))) | |||
| `(org-level-3 ((,class (:bold nil :foreground ,head3 :height ,(if spacemacs-theme-org-height 1.1 1.0) :background ,(when spacemacs-theme-org-highlight head3-bg))))) | |||
| `(org-level-4 ((,class (:bold nil :foreground ,head4 :background ,(when spacemacs-theme-org-highlight head4-bg))))) | |||
| `(org-level-5 ((,class (:bold nil :foreground ,head1)))) | |||
| `(org-level-6 ((,class (:bold nil :foreground ,head2)))) | |||
| `(org-level-7 ((,class (:bold nil :foreground ,head3)))) | |||
| `(org-level-8 ((,class (:bold nil :foreground ,head4)))) | |||
| `(org-link ((,class (:underline t :foreground ,comment)))) | |||
| `(org-meta-line ((,class (:foreground ,meta)))) | |||
| `(org-mode-line-clock-overrun ((,class (:foreground ,err)))) | |||
| `(org-priority ((,class (:foreground ,war :inherit bold)))) | |||
| `(org-quote ((,class (:inherit org-block :slant italic)))) | |||
| `(org-scheduled ((,class (:foreground ,comp)))) | |||
| `(org-scheduled-today ((,class (:foreground ,func :height ,(if spacemacs-theme-org-agenda-height 1.2 1.0))))) | |||
| `(org-sexp-date ((,class (:foreground ,base)))) | |||
| `(org-special-keyword ((,class (:foreground ,func)))) | |||
| `(org-table ((,class (:foreground ,base :background ,head1-bg)))) | |||
| `(org-time-grid ((,class (:foreground ,str)))) | |||
| `(org-todo ((,class (:foreground ,war :inherit bold :background ,yellow-bg)))) | |||
| `(org-verbatim ((,class (:foreground ,keyword)))) | |||
| `(org-verse ((,class (:inherit org-block :slant italic)))) | |||
| `(org-warning ((,class (:foreground ,err)))) | |||
| ;;;;; perspective | |||
| `(persp-selected-face ((,class (:inherit bold :foreground ,func)))) | |||
| ;;;;; popup | |||
| `(popup-enu-selection-face ((,class (:background ,ttip-sl :foreground ,base)))) | |||
| `(popup-face ((,class (:background ,ttip-bg :foreground ,ttip)))) | |||
| `(popup-isearch-match ((,class (:inherit match)))) | |||
| `(popup-menu-face ((,class (:background ,ttip-bg :foreground ,base)))) | |||
| `(popup-menu-mouse-face ((,class (:inherit highlight)))) | |||
| `(popup-scroll-bar-background-face ((,class (:background ,bg2)))) | |||
| `(popup-scroll-bar-foreground-face ((,class (:background ,act2)))) | |||
| `(popup-tip-face ((,class (:background ,ttip-sl :foreground ,base :bold nil :italic nil :underline nil)))) | |||
| ;;;;; powerline | |||
| `(powerline-active1 ((,class (:background ,act2 :foreground ,base)))) | |||
| `(powerline-active2 ((,class (:background ,act2 :foreground ,base)))) | |||
| `(powerline-inactive1 ((,class (:background ,bg2 :foreground ,base)))) | |||
| `(powerline-inactive2 ((,class (:background ,bg2 :foreground ,base)))) | |||
| ;;;;; rainbow-delimiters | |||
| `(rainbow-delimiters-depth-1-face ((,class :foreground ,keyword))) | |||
| `(rainbow-delimiters-depth-2-face ((,class :foreground ,func))) | |||
| `(rainbow-delimiters-depth-3-face ((,class :foreground ,str))) | |||
| `(rainbow-delimiters-depth-4-face ((,class :foreground ,green))) | |||
| `(rainbow-delimiters-depth-5-face ((,class :foreground ,yellow))) | |||
| `(rainbow-delimiters-depth-6-face ((,class :foreground ,keyword))) | |||
| `(rainbow-delimiters-depth-7-face ((,class :foreground ,func))) | |||
| `(rainbow-delimiters-depth-8-face ((,class :foreground ,str))) | |||
| `(rainbow-delimiters-mismatched-face ((,class :foreground ,err :overline t))) | |||
| `(rainbow-delimiters-unmatched-face ((,class :foreground ,err :overline t))) | |||
| ;;;;; rcirc | |||
| `(rcirc-bright-nick ((,class (:background ,aqua-bg :foreground ,cyan)))) | |||
| `(rcirc-dim-nick ((,class (:foreground ,base-dim)))) | |||
| `(rcirc-keyword ((,class (:background ,green-bg-s :foreground ,green)))) | |||
| `(rcirc-timestamp ((,class (:foreground ,keyword)))) | |||
| `(rcirc-track-keyword ((,class (:background ,green :foreground ,bg1)))) | |||
| `(rcirc-url ((,class (:inherit link)))) | |||
| ;;;;; shm | |||
| `(shm-current-face ((,class (:background ,green-bg-s)))) | |||
| `(shm-quarantine-face ((,class (:background ,red-bg-s)))) | |||
| ;;;;; show-paren | |||
| `(show-paren-match ((,class (:background ,green-bg-s)))) | |||
| `(show-paren-mismatch ((,class (:background ,red-bg-s)))) | |||
| ;;;;; smartparens | |||
| `(sp-pair-overlay-face ((,class (:background ,highlight :foreground nil)))) | |||
| `(sp-show-pair-match-face ((,class (:foreground ,mat :inherit bold :underline t)))) | |||
| ;;;;; spaceline | |||
| `(spaceline-flycheck-error ((,class (:foreground ,err)))) | |||
| `(spaceline-flycheck-info ((,class (:foreground ,keyword)))) | |||
| `(spaceline-flycheck-warning((,class (:foreground ,war)))) | |||
| `(spaceline-python-venv ((,class (:foreground ,comp)))) | |||
| ;;;;; spacemacs-specific | |||
| `(spacemacs-transient-state-title-face ((,class (:background nil :foreground ,comp :box nil :inherit bold)))) | |||
| ;;;;; swiper | |||
| `(swiper-line-face ((,class (:background ,highlight :inherit bold)))) | |||
| `(swiper-match-face-1 ((,class (:inherit bold)))) | |||
| `(swiper-match-face-2 ((,class (:foreground ,head1 :underline t)))) | |||
| `(swiper-match-face-3 ((,class (:foreground ,head4 :underline t)))) | |||
| `(swiper-match-face-4 ((,class (:foreground ,head3 :underline t)))) | |||
| ;;;;; tabbar | |||
| `(tabbar-button ((,class (:inherit tabbar-default )))) | |||
| `(tabbar-button-highlight ((,class (:inherit tabbar-default)))) | |||
| `(tabbar-default ((,class (:background ,bg1 :foreground ,head1 :height 0.9)))) | |||
| `(tabbar-highlight ((,class (:underline t)))) | |||
| `(tabbar-selected ((,class (:inherit tabbar-default :foreground ,func :weight bold)))) | |||
| `(tabbar-separator ((,class (:inherit tabbar-default)))) | |||
| `(tabbar-unselected ((,class (:inherit tabbar-default :background ,bg1 :slant italic :weight light)))) | |||
| ;;;;; term | |||
| `(term ((,class (:foreground ,base :background ,bg1)))) | |||
| `(term-color-black ((,class (:foreground ,bg4)))) | |||
| `(term-color-blue ((,class (:foreground ,keyword)))) | |||
| `(term-color-cyan ((,class (:foreground ,cyan)))) | |||
| `(term-color-green ((,class (:foreground ,green)))) | |||
| `(term-color-magenta ((,class (:foreground ,magenta)))) | |||
| `(term-color-red ((,class (:foreground ,red)))) | |||
| `(term-color-white ((,class (:foreground ,base)))) | |||
| `(term-color-yellow ((,class (:foreground ,yellow)))) | |||
| ;;;;; web-mode | |||
| `(web-mode-builtin-face ((,class (:inherit ,font-lock-builtin-face)))) | |||
| `(web-mode-comment-face ((,class (:inherit ,font-lock-comment-face)))) | |||
| `(web-mode-constant-face ((,class (:inherit ,font-lock-constant-face)))) | |||
| `(web-mode-doctype-face ((,class (:inherit ,font-lock-comment-face)))) | |||
| `(web-mode-function-name-face ((,class (:inherit ,font-lock-function-name-face)))) | |||
| `(web-mode-html-attr-name-face ((,class (:foreground ,func)))) | |||
| `(web-mode-html-attr-value-face ((,class (:foreground ,keyword)))) | |||
| `(web-mode-html-tag-face ((,class (:foreground ,keyword)))) | |||
| `(web-mode-keyword-face ((,class (:foreground ,keyword)))) | |||
| `(web-mode-string-face ((,class (:foreground ,str)))) | |||
| `(web-mode-symbol-face ((,class (:foreground ,type)))) | |||
| `(web-mode-type-face ((,class (:inherit ,font-lock-type-face)))) | |||
| `(web-mode-warning-face ((,class (:inherit ,font-lock-warning-face)))) | |||
| ;;;;; which-key | |||
| `(which-key-command-description-face ((,class (:foreground ,base)))) | |||
| `(which-key-group-description-face ((,class (:foreground ,keyword)))) | |||
| `(which-key-key-face ((,class (:foreground ,func :inherit bold)))) | |||
| `(which-key-separator-face ((,class (:background nil :foreground ,str)))) | |||
| `(which-key-special-key-face ((,class (:background ,func :foreground ,bg1)))) | |||
| ;;;;; which-function-mode | |||
| `(which-func ((,class (:foreground ,func)))) | |||
| ;;;;; whitespace-mode | |||
| `(whitespace-empty ((,class (:background nil :foreground ,yellow)))) | |||
| `(whitespace-indentation ((,class (:background nil :foreground ,war)))) | |||
| `(whitespace-line ((,class (:background nil :foreground ,comp)))) | |||
| `(whitespace-newline ((,class (:background nil :foreground ,comp)))) | |||
| `(whitespace-space ((,class (:background nil :foreground ,act2)))) | |||
| `(whitespace-space-after-tab ((,class (:background nil :foreground ,yellow)))) | |||
| `(whitespace-space-before-tab ((,class (:background nil :foreground ,yellow)))) | |||
| `(whitespace-tab ((,class (:background nil)))) | |||
| `(whitespace-trailing ((,class (:background ,err :foreground ,war)))) | |||
| ;;;;; other, need more work | |||
| `(ac-completion-face ((,class (:underline t :foreground ,keyword)))) | |||
| `(ffap ((,class (:foreground ,base)))) | |||
| `(flx-highlight-face ((,class (:foreground ,comp :underline nil)))) | |||
| `(icompletep-determined ((,class :foreground ,keyword))) | |||
| `(js2-external-variable ((,class (:foreground ,comp)))) | |||
| `(js2-function-param ((,class (:foreground ,const)))) | |||
| `(js2-jsdoc-html-tag-delimiter ((,class (:foreground ,str)))) | |||
| `(js2-jsdoc-html-tag-name ((,class (:foreground ,keyword)))) | |||
| `(js2-jsdoc-value ((,class (:foreground ,str)))) | |||
| `(js2-private-function-call ((,class (:foreground ,const)))) | |||
| `(js2-private-member ((,class (:foreground ,base)))) | |||
| `(js3-error-face ((,class (:underline ,war)))) | |||
| `(js3-external-variable-face ((,class (:foreground ,var)))) | |||
| `(js3-function-param-face ((,class (:foreground ,keyword)))) | |||
| `(js3-instance-member-face ((,class (:foreground ,const)))) | |||
| `(js3-jsdoc-tag-face ((,class (:foreground ,keyword)))) | |||
| `(js3-warning-face ((,class (:underline ,keyword)))) | |||
| `(slime-repl-inputed-output-face ((,class (:foreground ,comp)))) | |||
| `(trailing-whitespace ((,class :foreground nil :background ,err))) | |||
| `(undo-tree-visualizer-current-face ((,class :foreground ,keyword))) | |||
| `(undo-tree-visualizer-default-face ((,class :foreground ,base))) | |||
| `(undo-tree-visualizer-register-face ((,class :foreground ,comp))) | |||
| `(undo-tree-visualizer-unmodified-face ((,class :foreground ,var)))) | |||
| (custom-theme-set-variables | |||
| theme-name | |||
| `(ansi-color-names-vector [,bg4 ,red ,green ,yellow ,blue ,magenta ,cyan ,base])) | |||
| )) | |||
| ;;;###autoload | |||
| (when load-file-name | |||
| (add-to-list 'custom-theme-load-path | |||
| (file-name-as-directory (file-name-directory load-file-name)))) | |||
| (provide 'spacemacs-common) | |||
| ;; Local Variables: | |||
| ;; no-byte-compile: t | |||
| ;; End: | |||
| ;;; spacemacs-common.el ends here | |||
| @ -0,0 +1,7 @@ | |||
| (require 'spacemacs-common) | |||
| (deftheme spacemacs-dark "Spacemacs theme, the dark version") | |||
| (create-spacemacs-theme 'dark 'spacemacs-dark) | |||
| (provide-theme 'spacemacs-dark) | |||
| @ -0,0 +1,7 @@ | |||
| (require 'spacemacs-common) | |||
| (deftheme spacemacs-light "Spacemacs theme, the light version") | |||
| (create-spacemacs-theme 'light 'spacemacs-light) | |||
| (provide-theme 'spacemacs-light) | |||
| @ -1,6 +1,6 @@ | |||
| ;;; packages.el --- test layer configuration file for Spacemacs. | |||
| ;; | |||
| ;; Copyright (c) 2012-2016 Sylvain Benner & Contributors | |||
| ;; Copyright (c) 2012-2017 Sylvain Benner & Contributors | |||
| ;; | |||
| ;; This file is not part of GNU Emacs. | |||
| ;; | |||
| @ -0,0 +1,330 @@ | |||
| #+TITLE: Beginners tutorial | |||
| * Beginners tutorial :TOC_4_gh:noexport: | |||
| - [[#why-spacemacs][Why Spacemacs?]] | |||
| - [[#install][Install]] | |||
| - [[#1-install-emacs][1. Install Emacs]] | |||
| - [[#2-install-git][2. Install Git]] | |||
| - [[#3-install-spacemacs][3. Install Spacemacs]] | |||
| - [[#note-for-windows-users][Note for Windows users]] | |||
| - [[#4-install-the-default-font][4. Install the default font]] | |||
| - [[#5-open-spacemacs-and-choose-default-editing-style][5. Open Spacemacs and choose default editing style]] | |||
| - [[#getting-started][Getting started]] | |||
| - [[#keybinding-notation][Keybinding notation]] | |||
| - [[#modal-text-editing---why-and-how][Modal text editing - why and how?]] | |||
| - [[#start-the-vim-tutorial][Start the Vim tutorial]] | |||
| - [[#using-the-spacebar-to-launch-commands][Using the spacebar to launch commands]] | |||
| - [[#buffers-windows-and-frames][Buffers, windows and frames]] | |||
| - [[#accessing-files][Accessing files]] | |||
| - [[#configuring-spacemacs][Configuring Spacemacs]] | |||
| - [[#adding-language-support-and-other-features-using-layers][Adding language support and other features: using layers]] | |||
| - [[#changing-the-colour-theme][Changing the colour theme]] | |||
| - [[#starting-maximized][Starting maximized]] | |||
| - [[#quitting][Quitting]] | |||
| - [[#additional-features-tips-and-troubleshooting][Additional features, tips and troubleshooting]] | |||
| - [[#org-mode][Org mode]] | |||
| - [[#version-control---the-intelligent-way][Version control - the intelligent way]] | |||
| - [[#daemon-mode-and-instant-startup-linux][Daemon mode and instant startup (Linux)]] | |||
| - [[#swap-caps-lock-and-esc-keys-on-your-keyboard][Swap caps lock and esc keys on your keyboard]] | |||
| - [[#troubleshooting-and-further-info][Troubleshooting and further info]] | |||
| * Why Spacemacs? | |||
| - Unparallelled text and structure editing for all types of writing tasks: | |||
| creative writing, blogging, note-taking, todo-lists, scientific papers... | |||
| - Powerful modes for programming in dozens of programming languages | |||
| - Deeply customizable yet beginner-friendly | |||
| * Install | |||
| Spacemacs is a beginner-friendly and powerful extension of a popular text | |||
| editor called Emacs. To install Spacemacs you need to first install base Emacs | |||
| and then download the Spacemacs extension files, which is most easily done by | |||
| using a program called Git. The steps are easy and outlined below. | |||
| ** 1. [[https://github.com/syl20bnr/spacemacs#prerequisites][Install Emacs]] | |||
| ** 2. [[https://git-scm.com/downloads][Install Git]] | |||
| ** 3. Install Spacemacs | |||
| Open a terminal or command prompt, paste the following code to it: | |||
| #+BEGIN_SRC sh | |||
| git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d | |||
| #+END_SRC | |||
| Press enter to execute the code and the program you installed in the previous | |||
| step, Git, will download the Spacemacs extension files. | |||
| *** Note for Windows users | |||
| If you use windows, you have to modify the git command by inserting the correct | |||
| path to your .emacs.d folder. The dot before the folder means that it is hidden, | |||
| so you'll have to search for hidden files to find the folder. When you have | |||
| found the folder, substitute the original path with the correct one. The proper | |||
| code would look something like this: | |||
| #+BEGIN_SRC sh | |||
| git clone https://github.com/syl20bnr/spacemacs /path/to/your/.emacs.d | |||
| #+END_SRC | |||
| ** 4. Install the default font | |||
| The default font used by Spacemacs is Source Code Pro by Adobe. It is | |||
| recommended to [[https://github.com/adobe-fonts/source-code-pro#font-installation-instructions][install]] it on your system to ensure correct visual | |||
| representation. Also a "Fallback font" for nicer-looking symbols in the modeline | |||
| (bottom bar) is recommended. These depend on the system: | |||
| - gnu/linux: Nanum | |||
| - MacOS: Arial Unicode MS | |||
| - Windows: MS Gothic or Lucida Sans Unicode | |||
| If the modeline doesn't look as great as in the pictures, make sure you have the | |||
| correct fallback font installed on your system. | |||
| ** 5. Open Spacemacs and choose default editing style | |||
| Open Spacemacs by clicking the Emacs icon in your applications menu. The first | |||
| time Spacemacs launches, it will load and install packages and prompt you for | |||
| your preferred editing style. You have two options: Vim ("Among the stars aboard | |||
| the Evil flagship") and Emacs. If you haven't used Emacs before or are unsure | |||
| about the differences of the editing styles, we recommend selecting the default, | |||
| Vim, by pressing enter. Using this configuration is introduced more thoroughly | |||
| in the next section. If you are already familiar with Emacs or do not plan to | |||
| switch into modal editing style, select Emacs with the left and right arrow | |||
| keys. There is also a third option, "Hybrid", for more advanced users willing to | |||
| use both styles. All of these choices can be easily changed later by editing the | |||
| dotspacemacs-editing-style variable in the dotfile (see [[#configuring-spacemacs][Configuring Spacemacs]]), | |||
| so if modal editing does not sweep you away, you can switch to the Emacs style | |||
| later. | |||
| Next, you will be prompted for the distribution you would like to start with. | |||
| The standard distribution is recommended, press enter to select it. | |||
| Now Spacemacs will download and install required packages. This will take some | |||
| minutes depending on your connection. After everything is installed (you will | |||
| see the text "n packages loaded in x s" appear in the list under the Spacemacs | |||
| logo), restart Spacemacs. | |||
| Now your installation process is complete, congratulations! For troubleshooting, | |||
| see the last section. | |||
| * Getting started | |||
| ** Keybinding notation | |||
| The power of Spacemacs lies in its efficient keybindings. Because it is built on | |||
| Emacs, we will use Emacs conventions for keybinding notation. The most important | |||
| modifier keys are: | |||
| ~SPC~ = ~Space~, used as the leader key in Vim editing style. | |||
| ~C-~ = ~Ctrl~ | |||
| ~M-~ (for "meta") = ~Alt~ | |||
| ~S-~ = ~Shift~ | |||
| The modifier keys can be used either in a sequence or as key chords by pressing | |||
| two keys at the same time. ~SPC 1~ is notation for a key sequence and means | |||
| pressing ~Space~ first and pressing ~1~ after it. Key chords are notated by | |||
| writing a ~-~ between the keys. Thus ~C-c~ means pressing ~Ctrl~ and the letter | |||
| ~c~ simultaneously. Key chords and sequences can also be combined: ~C-c a~ means | |||
| "First press ~Ctrl~ and ~c~ simultaneously, then press ~a~". ~C-c C-a~ means | |||
| "First press ~Ctrl~ and ~c~ simultaneously, then press ~Ctrl~ and ~a~ | |||
| simultaneously". | |||
| This document assumes you chose the "Vim" editing style and notates accordingly. | |||
| If you chose the Emacs editing style, just substitute ~SPC~ with ~M-m~ in all | |||
| the commands that begin with ~SPC~. | |||
| (Note: Other modifier keys such as ~Super~, notated with a small-case ~s-~, can | |||
| be set up but this is rarely necessary in Spacemacs). | |||
| ** Modal text editing - why and how? | |||
| Writing (or programming) is typically not a simple linear process of adding | |||
| words and lines until finished. At least as important part of the work consists | |||
| of editing the text: deleting and rewriting parts, moving sentences around or | |||
| jumping to an earlier point to fix a discrepancy. | |||
| The crudest way to, for example, delete a certain line is moving the mouse to | |||
| the line in question, clicking on the line and then deleting it by pressing | |||
| backspace repeatedly. This is slow and inefficient, both because you have to | |||
| take your hands from your keyboard and because repeatedly pressing backspace | |||
| takes time. The more time you spend pressing keys, the more time and energy is | |||
| wasted. | |||
| To speed up editing, many editors use key chords for common editing tasks: | |||
| ~Control-c~ for copying and so on. However, these types of shortcuts tend to | |||
| have two problems. First, you have to press two keys at the same time, which is | |||
| harder to coordinate and thus slower than pressing keys in a sequence. Second, | |||
| you typically have to use your weakest fingers (pinkies) extensively and bend | |||
| your wrists in unergonomic positions, which is uncomfortable for many and risks | |||
| developing carpal tunnel syndrome in the long run. | |||
| By contrast, Spacemacs uses modal editing. Modal editing means that different | |||
| modes are used for editing and writing text. While this can sound complicated at | |||
| first, in practice it can be learned quickly and once learned is unparallelled | |||
| in speed and ergonomy. Our earlier example of deleting a certain line of text (a | |||
| very common edit task) can be achieved in Spacemacs by simply navigating to the | |||
| line in question with the keys ~j~ and ~k~ (navigation keys) and pressing ~d~ | |||
| (for "delete") two times! | |||
| You might have noticed that this was achieved entirely without moving your | |||
| fingers from your home row (the row where your fingers lie in rest when | |||
| touch-typing) and without using modifier keys. | |||
| ** Start the Vim tutorial | |||
| The modal editing features of Spacemacs originate from a text editor called Vi, | |||
| and thus the modal editing tutorial is called eVIl tutor. Press ~SPC h T~ (that | |||
| is, the spacebar followed by ~h~ and ~T~) to familiarize yourself with | |||
| modal editig. | |||
| ** Using the spacebar to launch commands | |||
| Now that you are familiar with writing and editing text it is time to put the | |||
| "Space" into Spacemacs. Because the spacebar is the most accessible key on the | |||
| keyboard and is pressed by the strongest fingers (the thumbs), it is a natural | |||
| choice for launching commands. You can think of it as the start menu of | |||
| Spacemacs. | |||
| A short instant after the spacebar is pressed a menu pops up. This interactive | |||
| menu shows you what submenus and commands can be accessed by subsequent | |||
| keypresses. Browsing around this menu is a great way of finding new features in | |||
| Spacemacs, so keep on eye on the different options! ~ESC~ usually breaks the | |||
| combination you don't want to use. | |||
| ** Buffers, windows and frames | |||
| Because Emacs (the extension of which Spacemacs is) was developed in the 80's | |||
| before the advent of modern graphical user interfaces, Emacs has | |||
| a different name of what we normally call "windows": in Emacs these are | |||
| called "frames". A frame is what pops up when you launch Spacemacs from your | |||
| desktop shortcut. A frame contains windows and buffers. | |||
| Windows are the visual spaces a frame is divided into. The default | |||
| is one, but windows can be split to allow editing multiple files in one frame. | |||
| Let's try this. Press ~SPC~ to bring up the menu. You can see different letters | |||
| having different submenus associated with them, usually with a mnemonic for | |||
| easier recall. The letter w is assigned for "windows": press it. A new menu | |||
| opens with further options. Write the character / to split the currently active | |||
| window vertically into two. | |||
| Now you should see two windows of this tutorial, and the one on the left should | |||
| be active, as can be seen from the modeline in the bottom or by moving the | |||
| cursor around using the navigation keys. This isn't very useful, as we | |||
| would probably want to see a different file on the right. | |||
| First, activate the window on the right with ~SPC 2~. Now that the window on the | |||
| right is active, we can open a different buffer for a different file. We'll use | |||
| the scratch buffer, which can be used like a notepad. Be warned, unlike other | |||
| buffers it doesn't prompt you whether you want to save the changes you've made | |||
| when quitting the program! Press ~SPC b~ to open the buffers menu and then | |||
| switch to the scratch buffer by pressing s. Now you have two different buffers | |||
| in two different windows open, great! You can write something on the scratch | |||
| buffer, and when you're done, make sure that the scratch window is active and | |||
| close it by pressing ~SPC w d~. | |||
| Now the tutorial window fills the whole frame. But you only closed the window, | |||
| not the scratch buffer, so the buffer is still open beneath the surface. You can | |||
| quickly switch between the current buffer and the last with ~SPC TAB~: use this | |||
| a couple of times to switch between the tutorial and the scratch buffer. ~SPC b~ | |||
| has more options for switching between buffers, for example ~SPC b b~ opens a | |||
| searchable list of all currently open buffers and ~SPC b d~ closes the current | |||
| buffer. | |||
| ** Accessing files | |||
| Files can be accessed under the ~SPC f~ mnemonic. You can navigate to any file | |||
| with ~SPC f f~ and open it by pressing enter. Accessing recently opened files is | |||
| a very common task and is done with ~SPC f r~. An edited file is saved with | |||
| ~SPC f s~. | |||
| * Configuring Spacemacs | |||
| :PROPERTIES: | |||
| :CUSTOM_ID: configuring-spacemacs | |||
| :END: | |||
| ** Adding language support and other features: using layers | |||
| Spacemacs divides its configuration into self-contained units called | |||
| configuration layers. These layers are stacked on top of each other to achieve a | |||
| custom configuration. | |||
| By default Spacemacs uses a dotfile called ~/.spacemacs to control which layers | |||
| to load. Within this file you can also configure certain features. First, split | |||
| the window vertically to view both this tutorial and the dotfile simultaneously | |||
| (~SPC w /~). Open the dotfile by pressing ~SPC f e d~. Navigate to the line | |||
| starting with "dotspacemacs-configuration-layers". The following lines have | |||
| further instructions: uncomment org and git layers if you want to be | |||
| familiarized with them. More layers for different languages and tools can be | |||
| found on [[https://github.com/syl20bnr/spacemacs/tree/master/layers][github]] or by pressing ~SPC h SPC~. The added layers will be installed | |||
| upon restart of Spacemacs. | |||
| Mac users: add the osx layer to use the OS X keybindings! | |||
| ** Changing the colour theme | |||
| You can toggle the theme by ~SPC T n~. This cycles between currently | |||
| activated themes. You can find more by adding the themes-megapack layer and | |||
| activate them by writing their names in the dotspacemacs-themes list. | |||
| ** Starting maximized | |||
| Editing the dotspacemacs-maximized-at-startup variable from nil to t will start | |||
| Spacemacs maximized. | |||
| ** Quitting | |||
| Save the changes you've made to the dotfile with ~SPC f s~ and then quit emacs | |||
| by ~SPC q q~. You can return to this tutorial by clicking it on the home screen! | |||
| * Additional features, tips and troubleshooting | |||
| ** Org mode | |||
| Org mode is one of the best features of Spacemacs and enough reason to warrant | |||
| its use. Org mode's official description tells that it is "for keeping notes, | |||
| maintaining todo lists, planning projects, and authoring documents with a fast | |||
| and effective plain-text system", but this gives only a small inkling of its | |||
| versatility. If you do any kind of writing at all, chances are that Org mode | |||
| will make it easier and more fun. This tutorial was written in Org mode. | |||
| Install the Org layer and open this tutorial. Press ~S-TAB~ repeatedly and | |||
| observe that this cycles the visibility of the contents of different headlines. | |||
| Press t in normal mode and observe that you can add TODO tags on headlines. | |||
| Press ~M-k~ or ~M-j~ in normal mode and see how you can quickly move parts of | |||
| the document around. | |||
| This is not even scratching the surface of Org mode, so you should look into its | |||
| [[https://github.com/syl20bnr/spacemacs/blob/master/layers/%252Bemacs/org/README.org][documentation]] for more information. Googling for Org mode tutorials is also very | |||
| helpful in finding out the most useful features of it! | |||
| ** Version control - the intelligent way | |||
| Version control means keeping track of the changes and edits you have made to | |||
| your document. Often version control is done by saving different versions of the | |||
| document with different names, such as "document version 13" and so on. This is | |||
| crude in many ways: if you want to, for example, re-add something you deleted, | |||
| you have to manually open several past versions of the document to find the one | |||
| with the deleted part, and then copy-paste it to the most recent file. More | |||
| complicated edits will be harder still. Fortunately, there is a much better way. | |||
| Git is the most popular version control system for programmers, but it can be as | |||
| useful for people that are writing school or scientific papers, fiction or blog | |||
| posts as well. | |||
| Install the git layer, restart Spacemacs and open a file you want to version | |||
| control. You can check the status of your file by pressing ~SPC g s~. Select the | |||
| folder your file is in. You will be prompted whether you want to create a | |||
| repository in the folder. Select yes. You will see a list of "Untracked files": | |||
| navigate to the file you want to track and press s to "stage changes". You might | |||
| be prompted to save the file: save it if necessary. Now the new file needs to be | |||
| commited: press c and c again. Two windows pop up: one showing the changes | |||
| you've made since the last edit (in this case, the whole document) and another | |||
| prompting for a commit message. Write "Initial commit", press ESC to exit back | |||
| to normal mode and press ~, c~ confirm and quit the commit | |||
| message. To abort, press ~, a~. | |||
| Now you know how to make a commit. The commits are saved in | |||
| the (hidden) .git folder in the same folder the tracked file(s) are in. You can | |||
| make further commits the same way. | |||
| ** Daemon mode and instant startup (Linux) | |||
| Emacs can be used in daemon mode: a daemon runs in the background and launches | |||
| clients. This way new frames launch instantly without delay. [[https://www.emacswiki.org/emacs/EmacsAsDaemon][Emacswiki]] tells | |||
| more about the daemon and how to set it to launch automatically on startup. | |||
| ** Swap caps lock and esc keys on your keyboard | |||
| This is useful outside of Spacemacs as well! | |||
| ** Troubleshooting and further info | |||
| ~SPC ?~ shows you the keybindings in the current major mode, which is often | |||
| helpful. For troubleshooting, please refer to the FAQ by pressing ~SPC f e f~ or | |||
| [[https://github.com/syl20bnr/spacemacs/blob/master/doc/FAQ.org][online]]. More help is found under ~SPC h~, and with ~SPC h ~SPC~ you can access | |||
| the comprehensive Spacemacs documentation, including this tutorial and the layer | |||
| documents. | |||
| The [[https://gitter.im/syl20bnr/spacemacs][Gitter chat]] can be used to ask questions if the answer cannot be found in | |||
| the documentation. For a detailed review of Spacemacs' features one can also | |||
| watch the [[https://www.youtube.com/playlist?list=PLrJ2YN5y27KLhd3yNs2dR8_inqtEiEweE][Spacemacs ABC series]] by Eivind Fonn on Youtube. Some of the | |||
| keybindings have changed since the videos were uploaded but seeing someone in | |||
| action helps spot helpful tricks that would otherwise be missed. | |||
| @ -0,0 +1,85 @@ | |||
| ;;; helm-spacemacs-help.el --- Spacemacs layer exploration with `helm'. | |||
| ;; Author: Sylvain Benner <sylvain.benner@gmail.com> | |||
| ;; Keywords: helm, spacemacs | |||
| ;; Version: 0.1 | |||
| ;; Package-Requires: ((helm "1.5")) | |||
| ;; 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 3, 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., 51 Franklin Street, Fifth Floor, | |||
| ;; Boston, MA 02110-1301, USA. | |||
| ;;; Commentary: | |||
| ;; This package adds a convenient way to discover Spacemacs FAQs in a | |||
| ;; a helm buffer. | |||
| ;; These sources are not part of `helm-spacemacs-help' feature because | |||
| ;; of its `org' dependency which triggers lots of `require'. | |||
| ;;; Code: | |||
| (require 'helm-spacemacs-help) | |||
| (require 'helm-org) | |||
| (defvar helm-spacemacs-help--faq-filename | |||
| (concat spacemacs-docs-directory "FAQ.org") | |||
| "Location of the FAQ file.") | |||
| ;;;###autoload | |||
| (defun helm-spacemacs-help-faq () | |||
| "Helm session to search for the FAQ." | |||
| (interactive) | |||
| (helm-spacemacs-help-mode) | |||
| (helm :buffer "*helm: spacemacs*" | |||
| :sources `(,(helm-spacemacs-help//faq-source)))) | |||
| (defun helm-spacemacs-help//faq-source () | |||
| "Construct the helm source for the FAQ." | |||
| `((name . "FAQ") | |||
| (candidates . ,(helm-spacemacs-help//faq-candidates)) | |||
| (candidate-number-limit) | |||
| (action . (("Go to question" . helm-spacemacs-help//faq-goto-marker))))) | |||
| (defun helm-spacemacs-help//faq-candidate (cand) | |||
| (let ((str (substring-no-properties (car cand)))) | |||
| (when (string-match "\\`.*/\\([^/]*\\)/\\(.*\\)\\'" str) | |||
| (cons (concat (propertize | |||
| (match-string 1 str) | |||
| 'face 'font-lock-type-face) | |||
| ": " (match-string 2 str)) | |||
| (cdr cand))))) | |||
| (defun helm-spacemacs-help//faq-candidates () | |||
| (let* ((helm-org-format-outline-path nil) | |||
| (cands (helm-org-get-candidates (list helm-spacemacs-help--faq-filename))) | |||
| section result) | |||
| (dolist (c cands) | |||
| (let ((str (substring-no-properties (car c)))) | |||
| (when (string-match "\\`\\* \\(.*\\)\\'" str) | |||
| (setq section (match-string 1 str))) | |||
| (when (string-match "\\`\\*\\* \\(.*\\)\\'" str) | |||
| (push (cons (concat (propertize section 'face 'font-lock-type-face) | |||
| ": " (match-string 1 str)) | |||
| (cdr c)) | |||
| result)))) | |||
| result)) | |||
| (defun helm-spacemacs-help//faq-goto-marker (marker) | |||
| (find-file helm-spacemacs-help--faq-filename) | |||
| (goto-char marker) | |||
| (org-show-context) | |||
| (org-show-entry)) | |||
| (provide 'helm-spacemacs-faq) | |||
| ;;; helm-spacemacs-faq.el ends here | |||