From 168bd9cce801934ad5708cf1e7a93db183df9add Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Mon, 28 Nov 2016 10:29:51 -0500 Subject: [PATCH] Squashed 'emacs.d/' content from commit 664ba6a git-subtree-dir: emacs.d git-subtree-split: 664ba6ab2c4ea0aa00aa8483e587efb34829abbe --- .github/ISSUE_TEMPLATE | 4 + .github/PULL_REQUEST_TEMPLATE | 7 + .gitignore | 53 + .projectile | 10 + .travis-build.sh | 51 + .travis.yml | 25 + CHANGELOG.org | 3759 +++++++++++++++++ COMMUNITY.org | 111 + CONTRIBUTING.org | 256 ++ README.md | 455 ++ assets/spacemacs-badge.svg | 166 + assets/spacemacs.svg | 405 ++ core/aprilfool/zemacs.el | 119 + core/banners/000-banner.txt | 8 + core/banners/001-banner.txt | 9 + core/banners/002-banner.txt | 9 + core/banners/003-banner.txt | 17 + core/banners/004-banner.txt | 17 + core/banners/998-banner.txt | 27 + core/banners/999-banner.txt | 26 + core/banners/img/heart.png | Bin 0 -> 552 bytes core/banners/img/spacemacs-badge.png | Bin 0 -> 3300 bytes core/banners/img/spacemacs.png | Bin 0 -> 46642 bytes core/banners/img/zemacs.png | Bin 0 -> 71109 bytes core/core-auto-completion.el | 83 + core/core-command-line.el | 62 + core/core-configuration-layer.el | 2017 +++++++++ core/core-debug.el | 143 + core/core-display-init.el | 46 + core/core-documentation.el | 250 ++ core/core-dotspacemacs.el | 728 ++++ core/core-emacs-backports.el | 14 + core/core-fonts-support.el | 114 + core/core-funcs.el | 385 ++ core/core-jump.el | 66 + core/core-keybindings.el | 177 + core/core-load-paths.el | 77 + core/core-micro-state.el | 272 ++ core/core-release-management.el | 343 ++ core/core-spacemacs-buffer.el | 1024 +++++ core/core-spacemacs.el | 341 ++ core/core-themes-support.el | 230 + core/core-toggle.el | 113 + core/core-transient-state.el | 193 + core/core-use-package-ext.el | 50 + core/info/quickhelp.txt | 28 + core/info/release-notes/0.101.txt | 10 + core/info/release-notes/0.102.txt | 34 + core/info/release-notes/0.103.txt | 36 + core/info/release-notes/0.104.txt | 44 + core/info/release-notes/0.105.txt | 32 + core/info/release-notes/0.200.txt | 16 + core/info/release-notes/af-1.01.txt | 38 + core/libs/ht.el | 280 ++ core/libs/mocker.el | 368 ++ core/libs/page-break-lines.el | 165 + core/templates/.spacemacs.template | 305 ++ core/templates/README.org.template | 30 + core/templates/REPORTING.template | 21 + core/templates/packages.el.template | 62 + core/tools/spacefmt/spacefmt | 77 + core/tools/spacefmt/spacefmt.el | 169 + core/tools/spacefmt/tests/config.el | 7 + core/tools/spacefmt/tests/packages.el | 9 + core/tools/spacefmt/tests/test.org | 28 + core/tools/spacefmt/toc-org.el | 409 ++ doc/CONVENTIONS.org | 376 ++ doc/DOCUMENTATION.org | 3258 ++++++++++++++ doc/FAQ.org | 582 +++ doc/LAYERS.org | 623 +++ doc/QUICK_START.org | 177 + doc/VIMUSERS.org | 484 +++ doc/img/crappy-powerline-separators.png | Bin 0 -> 7954 bytes doc/img/dot-error.png | Bin 0 -> 6844 bytes doc/img/dot-info.png | Bin 0 -> 6843 bytes doc/img/dot-warning.png | Bin 0 -> 6844 bytes doc/img/flycheck-error.png | Bin 0 -> 18549 bytes doc/img/flycheck-info.png | Bin 0 -> 18668 bytes doc/img/flycheck-mode-line.png | Bin 0 -> 18803 bytes doc/img/flycheck-warning.png | Bin 0 -> 18755 bytes doc/img/powerline-alternate.png | Bin 0 -> 14669 bytes doc/img/powerline-anzu.png | Bin 0 -> 14691 bytes doc/img/powerline-arrow-fade.png | Bin 0 -> 14638 bytes doc/img/powerline-arrow.png | Bin 0 -> 14396 bytes doc/img/powerline-bar.png | Bin 0 -> 13994 bytes doc/img/powerline-box.png | Bin 0 -> 14250 bytes doc/img/powerline-brace.png | Bin 0 -> 14324 bytes doc/img/powerline-butt.png | Bin 0 -> 14112 bytes doc/img/powerline-chamfer.png | Bin 0 -> 14058 bytes doc/img/powerline-contour.png | Bin 0 -> 14282 bytes doc/img/powerline-curve.png | Bin 0 -> 14311 bytes doc/img/powerline-fix-windows.png | Bin 0 -> 192682 bytes doc/img/powerline-nil.png | Bin 0 -> 13924 bytes doc/img/powerline-rounded.png | Bin 0 -> 14165 bytes doc/img/powerline-roundstub.png | Bin 0 -> 14147 bytes doc/img/powerline-slant.png | Bin 0 -> 14119 bytes doc/img/powerline-update.png | Bin 0 -> 17431 bytes doc/img/powerline-wave.png | Bin 0 -> 14321 bytes doc/img/powerline-zigzag.png | Bin 0 -> 14381 bytes doc/img/spacemacs-ahs-transient-state.png | Bin 0 -> 24569 bytes doc/img/spacemacs-lisp-transient-state.png | Bin 0 -> 36662 bytes doc/img/spacemacs-python.png | Bin 0 -> 174427 bytes doc/img/spacemacs-scale-transient-state.png | Bin 0 -> 34199 bytes doc/img/spacemacs-startup.png | Bin 0 -> 54037 bytes doc/img/spacemacs-urxvt.png | Bin 0 -> 307961 bytes doc/img/title.png | Bin 0 -> 43391 bytes doc/img/title2.png | Bin 0 -> 100162 bytes doc/img/update-green.png | Bin 0 -> 7081 bytes doc/img/update-orange.png | Bin 0 -> 7080 bytes doc/img/update-red.png | Bin 0 -> 7090 bytes doc/img/which-key.png | Bin 0 -> 24235 bytes init.el | 35 + layers/+chat/erc/README.org | 103 + layers/+chat/erc/config.el | 24 + layers/+chat/erc/funcs.el | 27 + layers/+chat/erc/local/erc-sasl/erc-sasl.el | 95 + layers/+chat/erc/local/erc-tex/erc-tex.el | 176 + layers/+chat/erc/local/erc-yank/README.md | 19 + layers/+chat/erc/local/erc-yank/erc-yank.el | 106 + layers/+chat/erc/packages.el | 247 ++ layers/+chat/jabber/README.org | 78 + layers/+chat/jabber/funcs.el | 20 + layers/+chat/jabber/img/attribution.md | 5 + layers/+chat/jabber/img/jabber-logo.gif | Bin 0 -> 6030 bytes layers/+chat/jabber/packages.el | 39 + layers/+chat/rcirc/README.org | 193 + layers/+chat/rcirc/config.el | 26 + layers/+chat/rcirc/funcs.el | 83 + layers/+chat/rcirc/img/irc.png | Bin 0 -> 14450 bytes layers/+chat/rcirc/local/helm-rcirc/README.md | 4 + .../rcirc/local/helm-rcirc/helm-rcirc.el | 39 + .../local/rcirc-late-fix/rcirc-late-fix.el | 90 + .../local/rcirc-reconnect/rcirc-reconnect.el | 113 + layers/+chat/rcirc/packages.el | 171 + layers/+chat/slack/README.org | 69 + layers/+chat/slack/img/slack.png | Bin 0 -> 58238 bytes layers/+chat/slack/packages.el | 88 + layers/+checkers/spell-checking/README.org | 99 + layers/+checkers/spell-checking/config.el | 19 + layers/+checkers/spell-checking/funcs.el | 24 + layers/+checkers/spell-checking/packages.el | 92 + layers/+checkers/syntax-checking/README.org | 68 + layers/+checkers/syntax-checking/config.el | 24 + layers/+checkers/syntax-checking/funcs.el | 18 + .../syntax-checking/img/flycheck.png | Bin 0 -> 3989 bytes layers/+checkers/syntax-checking/packages.el | 127 + layers/+completion/auto-completion/README.org | 256 ++ layers/+completion/auto-completion/config.el | 53 + layers/+completion/auto-completion/funcs.el | 271 ++ .../snippets/emacs-lisp-mode/.yas-parents | 1 + .../snippets/emacs-lisp-mode/.yas-setup.el | 6 + .../snippets/emacs-lisp-mode/micro-state | 12 + .../snippets/emacs-lisp-mode/new-package | 15 + .../+completion/auto-completion/packages.el | 253 ++ layers/+completion/helm/funcs.el | 215 + .../helm-spacemacs-help.el | 415 ++ layers/+completion/helm/packages.el | 595 +++ layers/+completion/ivy/config.el | 45 + layers/+completion/ivy/funcs.el | 395 ++ layers/+completion/ivy/layers.el | 15 + .../ivy-spacemacs-help/ivy-spacemacs-help.el | 397 ++ layers/+completion/ivy/packages.el | 246 ++ .../+distributions/spacemacs-base/config.el | 211 + layers/+distributions/spacemacs-base/funcs.el | 910 ++++ .../spacemacs-base/keybindings.el | 633 +++ .../centered-buffer-mode.el | 269 ++ .../evil-evilified-state.el | 339 ++ .../local/holy-mode/holy-mode.el | 104 + .../local/hybrid-mode/hybrid-mode.el | 165 + .../+distributions/spacemacs-base/packages.el | 531 +++ .../spacemacs-bootstrap/config.el | 46 + .../spacemacs-bootstrap/funcs.el | 138 + .../spacemacs-bootstrap/packages.el | 340 ++ layers/+distributions/spacemacs/layers.el | 28 + layers/+emacs/better-defaults/README.org | 75 + layers/+emacs/better-defaults/config.el | 20 + layers/+emacs/better-defaults/funcs.el | 32 + layers/+emacs/better-defaults/img/emacs.png | Bin 0 -> 13462 bytes layers/+emacs/better-defaults/keybindings.el | 13 + layers/+emacs/better-defaults/packages.el | 27 + layers/+emacs/ibuffer/README.org | 44 + layers/+emacs/ibuffer/config.el | 15 + layers/+emacs/ibuffer/funcs.el | 46 + layers/+emacs/ibuffer/packages.el | 48 + layers/+emacs/org/README.org | 493 +++ layers/+emacs/org/config.el | 29 + layers/+emacs/org/funcs.el | 37 + layers/+emacs/org/img/org.png | Bin 0 -> 29971 bytes layers/+emacs/org/local/evil-org/evil-org.el | 182 + layers/+emacs/org/local/org-async-init.el | 10 + layers/+emacs/org/local/ox-gfm/ox-gfm.el | 191 + layers/+emacs/org/packages.el | 542 +++ layers/+emacs/semantic/README.org | 45 + layers/+emacs/semantic/config.el | 17 + layers/+emacs/semantic/packages.el | 49 + layers/+emacs/smex/README.org | 25 + layers/+emacs/smex/funcs.el | 22 + layers/+emacs/smex/img/smex.png | Bin 0 -> 5161 bytes layers/+emacs/smex/packages.el | 28 + layers/+emacs/typography/README.org | 61 + layers/+emacs/typography/config.el | 13 + layers/+emacs/typography/packages.el | 54 + layers/+email/gnus/README.org | 119 + layers/+email/gnus/img/gnus.gif | Bin 0 -> 6121 bytes layers/+email/gnus/packages.el | 83 + layers/+email/mu4e/README.org | 210 + layers/+email/mu4e/config.el | 25 + layers/+email/mu4e/funcs.el | 53 + layers/+email/mu4e/packages.el | 81 + layers/+frameworks/django/README.org | 83 + layers/+frameworks/django/img/django.png | Bin 0 -> 39548 bytes layers/+frameworks/django/layers.el | 14 + layers/+frameworks/django/packages.el | 55 + layers/+frameworks/react/README.org | 136 + layers/+frameworks/react/config.el | 16 + layers/+frameworks/react/img/react.png | Bin 0 -> 13425 bytes layers/+frameworks/react/layers.el | 12 + layers/+frameworks/react/packages.el | 96 + layers/+frameworks/ruby-on-rails/README.org | 83 + layers/+frameworks/ruby-on-rails/img/ror.png | Bin 0 -> 7568 bytes layers/+frameworks/ruby-on-rails/layers.el | 14 + layers/+frameworks/ruby-on-rails/packages.el | 89 + layers/+fun/emoji/README.org | 38 + layers/+fun/emoji/img/emojis.png | Bin 0 -> 22124 bytes layers/+fun/emoji/packages.el | 42 + layers/+fun/games/README.org | 96 + layers/+fun/games/config.el | 22 + layers/+fun/games/funcs.el | 44 + layers/+fun/games/img/games.png | Bin 0 -> 18610 bytes .../+fun/games/local/helm-games/helm-games.el | 82 + layers/+fun/games/packages.el | 89 + layers/+fun/selectric/README.org | 28 + layers/+fun/selectric/img/typewriter.jpg | Bin 0 -> 22897 bytes layers/+fun/selectric/packages.el | 20 + layers/+fun/xkcd/README.org | 44 + layers/+fun/xkcd/img/xkcd.png | Bin 0 -> 19799 bytes layers/+fun/xkcd/packages.el | 28 + layers/+intl/chinese/README.org | 137 + layers/+intl/chinese/config.el | 38 + layers/+intl/chinese/img/China.png | Bin 0 -> 1529 bytes layers/+intl/chinese/img/Chinese.png | Bin 0 -> 4877 bytes layers/+intl/chinese/packages.el | 109 + layers/+intl/keyboard-layout/README.org | 189 + layers/+intl/keyboard-layout/config.el | 75 + layers/+intl/keyboard-layout/funcs.el | 206 + .../+intl/keyboard-layout/img/bepo-keymap.png | Bin 0 -> 12334 bytes .../+intl/keyboard-layout/img/bepo-logo.png | Bin 0 -> 37552 bytes .../keyboard-layout/img/dvorak-keymap.png | Bin 0 -> 5334 bytes .../keyboard-layout/img/keyboard-layout.png | Bin 0 -> 6334 bytes layers/+intl/keyboard-layout/packages.el | 485 +++ layers/+lang/agda/README.org | 80 + layers/+lang/agda/config.el | 19 + layers/+lang/agda/packages.el | 90 + layers/+lang/asciidoc/README.org | 45 + layers/+lang/asciidoc/packages.el | 46 + layers/+lang/asm/README.org | 76 + layers/+lang/asm/config.el | 16 + layers/+lang/asm/funcs.el | 40 + layers/+lang/asm/img/asm.png | Bin 0 -> 59247 bytes layers/+lang/asm/packages.el | 71 + layers/+lang/autohotkey/README.org | 43 + layers/+lang/autohotkey/img/ahk.png | Bin 0 -> 15564 bytes layers/+lang/autohotkey/packages.el | 26 + layers/+lang/bibtex/README.org | 80 + layers/+lang/bibtex/img/logo.png | Bin 0 -> 10831 bytes layers/+lang/bibtex/packages.el | 87 + layers/+lang/c-c++/README.org | 106 + layers/+lang/c-c++/config.el | 24 + layers/+lang/c-c++/funcs.el | 52 + layers/+lang/c-c++/img/ccpp.jpg | Bin 0 -> 38418 bytes layers/+lang/c-c++/img/cmake.png | Bin 0 -> 14933 bytes layers/+lang/c-c++/packages.el | 147 + layers/+lang/clojure/README.org | 315 ++ layers/+lang/clojure/config.el | 28 + layers/+lang/clojure/funcs.el | 172 + layers/+lang/clojure/img/cider.png | Bin 0 -> 23278 bytes layers/+lang/clojure/img/clojure.png | Bin 0 -> 35786 bytes layers/+lang/clojure/packages.el | 296 ++ layers/+lang/common-lisp/README.org | 109 + layers/+lang/common-lisp/config.el | 13 + layers/+lang/common-lisp/funcs.el | 25 + layers/+lang/common-lisp/img/slime.png | Bin 0 -> 17538 bytes layers/+lang/common-lisp/packages.el | 119 + layers/+lang/csharp/README.org | 146 + layers/+lang/csharp/config.el | 16 + layers/+lang/csharp/img/csharp.png | Bin 0 -> 37705 bytes layers/+lang/csharp/img/dotnet.png | Bin 0 -> 28769 bytes layers/+lang/csharp/packages.el | 105 + layers/+lang/csv/README.org | 41 + layers/+lang/csv/img/csv.png | Bin 0 -> 67077 bytes layers/+lang/csv/packages.el | 34 + layers/+lang/d/README.org | 32 + layers/+lang/d/config.el | 16 + layers/+lang/d/img/dlogo.png | Bin 0 -> 8154 bytes layers/+lang/d/packages.el | 57 + layers/+lang/elixir/README.org | 187 + layers/+lang/elixir/alchemist-refcard.pdf | Bin 0 -> 21290 bytes layers/+lang/elixir/alchemist-refcard.tex | 126 + layers/+lang/elixir/config.el | 23 + layers/+lang/elixir/funcs.el | 21 + layers/+lang/elixir/img/alchemist.png | Bin 0 -> 8057 bytes layers/+lang/elixir/img/elixir.png | Bin 0 -> 9282 bytes layers/+lang/elixir/packages.el | 178 + layers/+lang/elm/README.org | 208 + layers/+lang/elm/config.el | 12 + layers/+lang/elm/funcs.el | 34 + layers/+lang/elm/img/elm.png | Bin 0 -> 37678 bytes layers/+lang/elm/packages.el | 108 + layers/+lang/emacs-lisp/README.org | 73 + layers/+lang/emacs-lisp/config.el | 18 + layers/+lang/emacs-lisp/funcs.el | 31 + layers/+lang/emacs-lisp/img/emacs.png | Bin 0 -> 13462 bytes layers/+lang/emacs-lisp/packages.el | 202 + layers/+lang/erlang/README.org | 17 + layers/+lang/erlang/config.el | 14 + layers/+lang/erlang/img/erlang.png | Bin 0 -> 5019 bytes layers/+lang/erlang/packages.el | 52 + layers/+lang/ess/README.org | 69 + layers/+lang/ess/config.el | 15 + layers/+lang/ess/img/r.jpg | Bin 0 -> 4173 bytes layers/+lang/ess/packages.el | 137 + layers/+lang/extra-langs/README.org | 18 + layers/+lang/extra-langs/packages.el | 43 + layers/+lang/faust/README.org | 27 + layers/+lang/faust/config.el | 16 + layers/+lang/faust/funcs.el | 45 + layers/+lang/faust/img/faust.png | Bin 0 -> 11060 bytes layers/+lang/faust/packages.el | 34 + layers/+lang/fsharp/README.org | 44 + layers/+lang/fsharp/config.el | 12 + layers/+lang/fsharp/img/fsharp.png | Bin 0 -> 11160 bytes layers/+lang/fsharp/packages.el | 77 + layers/+lang/go/README.org | 150 + layers/+lang/go/config.el | 25 + layers/+lang/go/funcs.el | 32 + layers/+lang/go/img/go.png | Bin 0 -> 44505 bytes layers/+lang/go/local/go-rename/go-rename.el | 89 + layers/+lang/go/packages.el | 147 + layers/+lang/graphviz/README.org | 34 + layers/+lang/graphviz/img/graphviz.png | Bin 0 -> 81173 bytes layers/+lang/graphviz/packages.el | 60 + layers/+lang/haskell/README.org | 522 +++ layers/+lang/haskell/config.el | 28 + layers/+lang/haskell/funcs.el | 101 + layers/+lang/haskell/img/haskell.png | Bin 0 -> 5824 bytes layers/+lang/haskell/packages.el | 288 ++ layers/+lang/html/README.org | 81 + layers/+lang/html/config.el | 20 + layers/+lang/html/funcs.el | 16 + layers/+lang/html/img/html.png | Bin 0 -> 2223 bytes layers/+lang/html/packages.el | 257 ++ layers/+lang/idris/README.org | 108 + layers/+lang/idris/config.el | 13 + layers/+lang/idris/img/idris.png | Bin 0 -> 5045 bytes layers/+lang/idris/packages.el | 127 + layers/+lang/ipython-notebook/README.org | 157 + layers/+lang/ipython-notebook/img/dark.png | Bin 0 -> 320545 bytes layers/+lang/ipython-notebook/img/light.png | Bin 0 -> 356902 bytes layers/+lang/ipython-notebook/matplotlibrc | 27 + layers/+lang/ipython-notebook/packages.el | 160 + layers/+lang/java/README.org | 174 + layers/+lang/java/config.el | 13 + layers/+lang/java/funcs.el | 43 + layers/+lang/java/img/java.png | Bin 0 -> 20686 bytes layers/+lang/java/packages.el | 163 + layers/+lang/javascript/README.org | 212 + layers/+lang/javascript/config.el | 19 + layers/+lang/javascript/funcs.el | 31 + layers/+lang/javascript/img/coffee.png | Bin 0 -> 12713 bytes layers/+lang/javascript/img/javascript.png | Bin 0 -> 1899 bytes layers/+lang/javascript/packages.el | 284 ++ layers/+lang/latex/README.org | 165 + layers/+lang/latex/config.el | 33 + layers/+lang/latex/funcs.el | 61 + layers/+lang/latex/img/latex.png | Bin 0 -> 24312 bytes layers/+lang/latex/packages.el | 196 + layers/+lang/lua/README.org | 36 + layers/+lang/lua/config.el | 14 + layers/+lang/lua/img/lua.gif | Bin 0 -> 9806 bytes layers/+lang/lua/packages.el | 36 + layers/+lang/markdown/README.org | 174 + layers/+lang/markdown/config.el | 17 + layers/+lang/markdown/img/markdown.png | Bin 0 -> 14081 bytes layers/+lang/markdown/packages.el | 236 ++ layers/+lang/nim/README.org | 37 + layers/+lang/nim/config.el | 17 + layers/+lang/nim/img/logo.png | Bin 0 -> 20440 bytes layers/+lang/nim/packages.el | 35 + layers/+lang/ocaml/README.org | 95 + layers/+lang/ocaml/config.el | 14 + layers/+lang/ocaml/funcs.el | 34 + layers/+lang/ocaml/img/ocaml.png | Bin 0 -> 19485 bytes layers/+lang/ocaml/packages.el | 158 + layers/+lang/octave/README.org | 42 + layers/+lang/octave/config.el | 14 + layers/+lang/octave/img/octave.png | Bin 0 -> 9901 bytes layers/+lang/octave/packages.el | 40 + layers/+lang/php/README.org | 31 + layers/+lang/php/config.el | 16 + layers/+lang/php/img/php.png | Bin 0 -> 14648 bytes layers/+lang/php/packages.el | 65 + layers/+lang/plantuml/README.org | 51 + layers/+lang/plantuml/img/dia.png | Bin 0 -> 16790 bytes layers/+lang/plantuml/img/logo.png | Bin 0 -> 3169 bytes layers/+lang/plantuml/packages.el | 32 + layers/+lang/purescript/README.org | 81 + layers/+lang/purescript/config.el | 20 + .../+lang/purescript/img/purescript-logo.png | Bin 0 -> 7647 bytes layers/+lang/purescript/packages.el | 81 + layers/+lang/python/README.org | 312 ++ layers/+lang/python/config.el | 39 + layers/+lang/python/funcs.el | 179 + layers/+lang/python/img/python.png | Bin 0 -> 28282 bytes layers/+lang/python/local/nose/README.md | 81 + layers/+lang/python/local/nose/nose.el | 186 + layers/+lang/python/local/pylookup/.gitignore | 5 + layers/+lang/python/local/pylookup/README.md | 88 + layers/+lang/python/local/pylookup/makefile | 19 + .../+lang/python/local/pylookup/pylookup.el | 331 ++ .../+lang/python/local/pylookup/pylookup.py | 329 ++ layers/+lang/python/packages.el | 448 ++ layers/+lang/racket/README.org | 74 + layers/+lang/racket/config.el | 14 + layers/+lang/racket/img/racket.png | Bin 0 -> 30018 bytes layers/+lang/racket/packages.el | 119 + layers/+lang/ruby/README.org | 186 + layers/+lang/ruby/config.el | 28 + layers/+lang/ruby/funcs.el | 61 + layers/+lang/ruby/img/ruby.png | Bin 0 -> 54875 bytes layers/+lang/ruby/packages.el | 280 ++ layers/+lang/rust/README.org | 64 + layers/+lang/rust/config.el | 16 + layers/+lang/rust/img/rust.png | Bin 0 -> 7147 bytes layers/+lang/rust/packages.el | 97 + layers/+lang/scala/README.org | 266 ++ layers/+lang/scala/config.el | 26 + layers/+lang/scala/funcs.el | 119 + layers/+lang/scala/img/ensime.png | Bin 0 -> 13038 bytes layers/+lang/scala/img/scala.png | Bin 0 -> 41908 bytes layers/+lang/scala/packages.el | 281 ++ layers/+lang/scheme/README.org | 100 + layers/+lang/scheme/config.el | 12 + layers/+lang/scheme/packages.el | 83 + layers/+lang/shaders/README.org | 22 + layers/+lang/shaders/img/shaders.png | Bin 0 -> 26117 bytes layers/+lang/shaders/packages.el | 17 + layers/+lang/shell-scripts/README.org | 41 + layers/+lang/shell-scripts/config.el | 16 + layers/+lang/shell-scripts/funcs.el | 20 + layers/+lang/shell-scripts/img/fish.png | Bin 0 -> 26877 bytes layers/+lang/shell-scripts/packages.el | 81 + layers/+lang/sml/README.org | 41 + layers/+lang/sml/img/sml.png | Bin 0 -> 9033 bytes layers/+lang/sml/packages.el | 70 + layers/+lang/sql/README.org | 60 + layers/+lang/sql/img/sql.png | Bin 0 -> 31726 bytes layers/+lang/sql/packages.el | 119 + layers/+lang/swift/README.org | 62 + layers/+lang/swift/img/swift.png | Bin 0 -> 52675 bytes layers/+lang/swift/packages.el | 61 + layers/+lang/typescript/README.org | 107 + layers/+lang/typescript/config.el | 23 + layers/+lang/typescript/funcs.el | 66 + layers/+lang/typescript/img/TypeScript.png | Bin 0 -> 3617 bytes layers/+lang/typescript/packages.el | 87 + layers/+lang/vimscript/README.org | 15 + layers/+lang/vimscript/config.el | 14 + layers/+lang/vimscript/packages.el | 48 + layers/+lang/windows-scripts/README.org | 39 + layers/+lang/windows-scripts/config.el | 14 + layers/+lang/windows-scripts/img/ps.png | Bin 0 -> 88597 bytes layers/+lang/windows-scripts/local/dos/dos.el | 255 ++ layers/+lang/windows-scripts/packages.el | 75 + layers/+lang/yaml/README.org | 18 + layers/+lang/yaml/config.el | 14 + layers/+lang/yaml/packages.el | 28 + layers/+misc/nlinum/packages.el | 43 + layers/+os/nixos/README.org | 34 + layers/+os/nixos/config.el | 1 + layers/+os/nixos/img/nixos.jpg | Bin 0 -> 38291 bytes layers/+os/nixos/packages.el | 31 + layers/+os/osx/README.org | 102 + layers/+os/osx/config.el | 23 + layers/+os/osx/funcs.el | 18 + layers/+os/osx/img/apple.png | Bin 0 -> 27104 bytes layers/+os/osx/img/osx.png | Bin 0 -> 17126 bytes layers/+os/osx/keybindings.el | 46 + layers/+os/osx/packages.el | 118 + layers/+pair-programming/floobits/README.org | 32 + .../floobits/img/floobits.png | Bin 0 -> 19294 bytes layers/+pair-programming/floobits/packages.el | 42 + layers/+source-control/git/README.org | 268 ++ layers/+source-control/git/config.el | 18 + layers/+source-control/git/funcs.el | 72 + layers/+source-control/git/img/git.png | Bin 0 -> 10828 bytes layers/+source-control/git/packages.el | 406 ++ layers/+source-control/github/README.org | 105 + layers/+source-control/github/img/github.png | Bin 0 -> 16856 bytes layers/+source-control/github/packages.el | 87 + layers/+source-control/perforce/README.org | 75 + layers/+source-control/perforce/img/p4.png | Bin 0 -> 30850 bytes layers/+source-control/perforce/packages.el | 109 + .../version-control/README.org | 88 + .../+source-control/version-control/config.el | 75 + .../+source-control/version-control/funcs.el | 125 + .../version-control/keybindings.el | 42 + .../version-control/packages.el | 168 + .../+spacemacs/spacemacs-completion/config.el | 30 + .../+spacemacs/spacemacs-completion/funcs.el | 213 + .../spacemacs-completion/packages.el | 361 ++ .../spacemacs-editing-visual/packages.el | 409 ++ layers/+spacemacs/spacemacs-editing/funcs.el | 71 + .../spacemacs-whitespace-cleanup.el | 91 + .../+spacemacs/spacemacs-editing/packages.el | 359 ++ layers/+spacemacs/spacemacs-evil/funcs.el | 76 + .../local/evil-unimpaired/evil-unimpaired.el | 111 + layers/+spacemacs/spacemacs-evil/packages.el | 291 ++ .../+spacemacs/spacemacs-language/packages.el | 48 + layers/+spacemacs/spacemacs-layouts/config.el | 35 + layers/+spacemacs/spacemacs-layouts/funcs.el | 591 +++ .../+spacemacs/spacemacs-layouts/packages.el | 230 + layers/+spacemacs/spacemacs-misc/packages.el | 35 + .../local/space-doc/space-doc.el | 456 ++ layers/+spacemacs/spacemacs-org/packages.el | 80 + .../+spacemacs/spacemacs-ui-visual/config.el | 22 + .../+spacemacs/spacemacs-ui-visual/funcs.el | 187 + .../local/zoom-frm/frame-cmds.el | 1961 +++++++++ .../local/zoom-frm/frame-fns.el | 313 ++ .../local/zoom-frm/zoom-frm.el | 439 ++ .../spacemacs-ui-visual/packages.el | 386 ++ .../centered-cursor/centered-cursor-mode.el | 421 ++ layers/+spacemacs/spacemacs-ui/packages.el | 308 ++ layers/+tags/cscope/README.org | 71 + layers/+tags/cscope/img/cscope.jpg | Bin 0 -> 22601 bytes layers/+tags/cscope/packages.el | 60 + layers/+tags/gtags/README.org | 252 ++ layers/+tags/gtags/config.el | 20 + layers/+tags/gtags/funcs.el | 65 + layers/+tags/gtags/packages.el | 56 + layers/+themes/colors/README.org | 110 + layers/+themes/colors/config.el | 32 + layers/+themes/colors/funcs.el | 119 + layers/+themes/colors/img/rainbow-mode.png | Bin 0 -> 36149 bytes layers/+themes/colors/img/rainbow_dash.png | Bin 0 -> 77617 bytes .../colors/img/theme-tweaks-python.png | Bin 0 -> 271079 bytes .../+themes/colors/local/nyan-mode/README.org | 74 + .../local/nyan-mode/img/nyan-frame-1.xpm | 170 + .../local/nyan-mode/img/nyan-frame-2.xpm | 157 + .../local/nyan-mode/img/nyan-frame-3.xpm | 159 + .../local/nyan-mode/img/nyan-frame-4.xpm | 157 + .../local/nyan-mode/img/nyan-frame-5.xpm | 157 + .../local/nyan-mode/img/nyan-frame-6.xpm | 165 + .../colors/local/nyan-mode/img/nyan-start.xpm | 157 + .../colors/local/nyan-mode/img/nyan.xpm | 157 + .../colors/local/nyan-mode/img/outerspace.xpm | 142 + .../local/nyan-mode/img/rainbow-start.xpm | 43 + .../colors/local/nyan-mode/img/rainbow.xpm | 42 + .../colors/local/nyan-mode/mus/nyanlooped.mp3 | Bin 0 -> 433006 bytes .../colors/local/nyan-mode/nyan-mode.el | 262 ++ layers/+themes/colors/packages.el | 125 + layers/+themes/themes-megapack/README.org | 16 + layers/+themes/themes-megapack/packages.el | 115 + layers/+themes/theming/README.org | 87 + layers/+themes/theming/config.el | 60 + layers/+themes/theming/funcs.el | 46 + layers/+themes/theming/packages.el | 19 + layers/+tools/ansible/README.org | 22 + layers/+tools/ansible/config.el | 15 + layers/+tools/ansible/funcs.el | 19 + layers/+tools/ansible/img/ansible.png | Bin 0 -> 1530 bytes layers/+tools/ansible/layers.el | 12 + layers/+tools/ansible/packages.el | 44 + layers/+tools/cfengine/README.org | 59 + layers/+tools/cfengine/config.el | 12 + layers/+tools/cfengine/img/agent.png | Bin 0 -> 10031 bytes layers/+tools/cfengine/packages.el | 34 + layers/+tools/chrome/README.org | 58 + layers/+tools/chrome/img/chrome.png | Bin 0 -> 28122 bytes layers/+tools/chrome/packages.el | 28 + layers/+tools/command-log/README.org | 22 + layers/+tools/command-log/packages.el | 33 + layers/+tools/dash/README.org | 70 + layers/+tools/dash/config.el | 13 + layers/+tools/dash/funcs.el | 16 + layers/+tools/dash/img/dash.png | Bin 0 -> 38598 bytes layers/+tools/dash/img/zeal.png | Bin 0 -> 6306 bytes layers/+tools/dash/packages.el | 60 + layers/+tools/deft/README.org | 50 + layers/+tools/deft/packages.el | 39 + layers/+tools/docker/README.org | 48 + layers/+tools/docker/img/docker.png | Bin 0 -> 38980 bytes layers/+tools/docker/packages.el | 53 + layers/+tools/fasd/README.org | 39 + layers/+tools/fasd/packages.el | 29 + layers/+tools/finance/README.org | 55 + layers/+tools/finance/config.el | 14 + layers/+tools/finance/img/ledger.png | Bin 0 -> 238186 bytes layers/+tools/finance/packages.el | 53 + layers/+tools/geolocation/README.org | 119 + layers/+tools/geolocation/config.el | 20 + layers/+tools/geolocation/extensions.el | 19 + .../extensions/theme-changer/theme-changer.el | 33 + .../geolocation/img/emacs-location-helper.jpg | Bin 0 -> 88814 bytes .../+tools/geolocation/img/emacs-sunshine.jpg | Bin 0 -> 30267 bytes layers/+tools/geolocation/packages.el | 117 + layers/+tools/imenu-list/README.org | 40 + .../imenu-list/img/imenu-list-example.png | Bin 0 -> 141063 bytes layers/+tools/imenu-list/packages.el | 36 + layers/+tools/nginx/README.org | 16 + layers/+tools/nginx/img/nginx.png | Bin 0 -> 33876 bytes layers/+tools/nginx/packages.el | 15 + layers/+tools/pandoc/README.org | 39 + layers/+tools/pandoc/funcs.el | 16 + layers/+tools/pandoc/packages.el | 33 + layers/+tools/pdf-tools/README.org | 207 + layers/+tools/pdf-tools/img/pdf.png | Bin 0 -> 27357 bytes layers/+tools/pdf-tools/packages.el | 166 + layers/+tools/prodigy/README.org | 55 + layers/+tools/prodigy/img/prodigy.png | Bin 0 -> 390722 bytes layers/+tools/prodigy/packages.el | 30 + layers/+tools/puppet/README.org | 34 + layers/+tools/puppet/config.el | 14 + layers/+tools/puppet/img/puppet.png | Bin 0 -> 28570 bytes layers/+tools/puppet/layers.el | 12 + layers/+tools/puppet/packages.el | 41 + layers/+tools/ranger/README.org | 140 + layers/+tools/ranger/packages.el | 44 + layers/+tools/rebox/README.org | 342 ++ layers/+tools/rebox/config.el | 13 + layers/+tools/rebox/funcs.el | 22 + layers/+tools/rebox/packages.el | 77 + layers/+tools/restclient/README.org | 42 + layers/+tools/restclient/config.el | 13 + layers/+tools/restclient/funcs.el | 15 + layers/+tools/restclient/packages.el | 42 + layers/+tools/salt/README.org | 22 + layers/+tools/salt/img/saltstack.png | Bin 0 -> 28579 bytes layers/+tools/salt/packages.el | 27 + layers/+tools/shell/README.org | 213 + layers/+tools/shell/config.el | 51 + layers/+tools/shell/funcs.el | 167 + layers/+tools/shell/img/shell.png | Bin 0 -> 22826 bytes layers/+tools/shell/packages.el | 260 ++ layers/+tools/speed-reading/README.org | 26 + layers/+tools/speed-reading/packages.el | 43 + layers/+tools/systemd/README.org | 24 + layers/+tools/systemd/packages.el | 25 + layers/+tools/terraform/README.org | 16 + layers/+tools/terraform/img/terraform.png | Bin 0 -> 47647 bytes layers/+tools/terraform/packages.el | 16 + layers/+tools/tmux/README.org | 9 + layers/+tools/tmux/local/tmux/tmux.el | 83 + layers/+tools/tmux/packages.el | 26 + layers/+tools/vagrant/README.org | 54 + layers/+tools/vagrant/Vagrantfile | 14 + layers/+tools/vagrant/img/vagrant.png | Bin 0 -> 4714 bytes layers/+tools/vagrant/packages.el | 42 + layers/+tools/ycmd/README.org | 94 + layers/+tools/ycmd/global_conf.py | 283 ++ layers/+tools/ycmd/packages.el | 31 + layers/+vim/evil-cleverparens/README.org | 24 + layers/+vim/evil-cleverparens/packages.el | 24 + layers/+vim/evil-commentary/README.org | 32 + layers/+vim/evil-commentary/packages.el | 23 + layers/+vim/evil-snipe/README.org | 99 + layers/+vim/evil-snipe/config.el | 15 + layers/+vim/evil-snipe/img/Cat_With_Rifle.jpg | Bin 0 -> 24100 bytes layers/+vim/evil-snipe/packages.el | 37 + layers/+vim/vim-empty-lines/README.org | 22 + .../vim-empty-lines-mode.el | 287 ++ layers/+vim/vim-empty-lines/packages.el | 34 + layers/+vim/vim-powerline/README.org | 13 + .../local/vim-powerline/vim-colors.el | 188 + .../vim-powerline/vim-powerline-theme.el | 176 + layers/+vim/vim-powerline/packages.el | 43 + layers/+vim/vinegar/README.org | 52 + layers/+vim/vinegar/config.el | 15 + layers/+vim/vinegar/funcs.el | 139 + layers/+vim/vinegar/keybindings.el | 3 + layers/+vim/vinegar/packages.el | 68 + layers/+web-services/elfeed/README.org | 132 + layers/+web-services/elfeed/config.el | 15 + layers/+web-services/elfeed/img/elfeed.png | Bin 0 -> 33618 bytes layers/+web-services/elfeed/packages.el | 68 + layers/+web-services/evernote/README.org | 57 + .../+web-services/evernote/img/evernote.png | Bin 0 -> 23182 bytes .../+web-services/evernote/img/geeknote.png | Bin 0 -> 9671 bytes layers/+web-services/evernote/packages.el | 34 + layers/+web-services/search-engine/README.org | 68 + layers/+web-services/search-engine/funcs.el | 44 + .../search-engine/img/searchengine.jpg | Bin 0 -> 85858 bytes .../+web-services/search-engine/packages.el | 82 + layers/+web-services/spotify/README.org | 27 + layers/+web-services/spotify/img/spotify.png | Bin 0 -> 20258 bytes layers/+web-services/spotify/packages.el | 34 + layers/+web-services/twitter/README.org | 80 + layers/+web-services/twitter/img/twitter.png | Bin 0 -> 19616 bytes layers/+web-services/twitter/packages.el | 114 + layers/+web-services/wakatime/README.org | 74 + .../+web-services/wakatime/img/wakatime.png | Bin 0 -> 6757 bytes layers/+web-services/wakatime/packages.el | 13 + layers/LAYERS.org | 205 + layers/auto-layer.el | 123 + news/news01.org | 515 +++ private/README.md | 21 + private/local/README.md | 6 + private/snippets/README.md | 6 + spacemacs.mk | 41 + tests/core/Makefile | 24 + tests/core/core-configuration-layer-ftest.el | 36 + tests/core/core-configuration-layer-utest.el | 2194 ++++++++++ tests/core/core-funcs-utest.el | 80 + tests/core/core-release-management-ftest.el | 31 + tests/core/core-spacemacs-buffer-ftest.el | 121 + tests/core/core-spacemacs-ftest.el | 22 + tests/core/data/framed-text.txt | 1 + .../+distribution/spacemacs-base/Makefile | 20 + .../spacemacs-base/dotspacemacs.el | 7 + .../evil-evilified-state-ftest.el | 410 ++ .../evil-evilified-state-utest.el | 117 + tests/layers/+distribution/spacemacs/Makefile | 18 + .../+distribution/spacemacs/dotspacemacs.el | 7 + 722 files changed, 72218 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE create mode 100644 .github/PULL_REQUEST_TEMPLATE create mode 100644 .gitignore create mode 100644 .projectile create mode 100755 .travis-build.sh create mode 100644 .travis.yml create mode 100644 CHANGELOG.org create mode 100644 COMMUNITY.org create mode 100644 CONTRIBUTING.org create mode 100644 README.md create mode 100644 assets/spacemacs-badge.svg create mode 100644 assets/spacemacs.svg create mode 100644 core/aprilfool/zemacs.el create mode 100644 core/banners/000-banner.txt create mode 100644 core/banners/001-banner.txt create mode 100644 core/banners/002-banner.txt create mode 100644 core/banners/003-banner.txt create mode 100644 core/banners/004-banner.txt create mode 100644 core/banners/998-banner.txt create mode 100644 core/banners/999-banner.txt create mode 100644 core/banners/img/heart.png create mode 100644 core/banners/img/spacemacs-badge.png create mode 100644 core/banners/img/spacemacs.png create mode 100644 core/banners/img/zemacs.png create mode 100644 core/core-auto-completion.el create mode 100644 core/core-command-line.el create mode 100644 core/core-configuration-layer.el create mode 100644 core/core-debug.el create mode 100644 core/core-display-init.el create mode 100644 core/core-documentation.el create mode 100644 core/core-dotspacemacs.el create mode 100644 core/core-emacs-backports.el create mode 100644 core/core-fonts-support.el create mode 100644 core/core-funcs.el create mode 100644 core/core-jump.el create mode 100644 core/core-keybindings.el create mode 100644 core/core-load-paths.el create mode 100644 core/core-micro-state.el create mode 100644 core/core-release-management.el create mode 100644 core/core-spacemacs-buffer.el create mode 100644 core/core-spacemacs.el create mode 100644 core/core-themes-support.el create mode 100644 core/core-toggle.el create mode 100644 core/core-transient-state.el create mode 100644 core/core-use-package-ext.el create mode 100644 core/info/quickhelp.txt create mode 100644 core/info/release-notes/0.101.txt create mode 100644 core/info/release-notes/0.102.txt create mode 100644 core/info/release-notes/0.103.txt create mode 100644 core/info/release-notes/0.104.txt create mode 100644 core/info/release-notes/0.105.txt create mode 100644 core/info/release-notes/0.200.txt create mode 100644 core/info/release-notes/af-1.01.txt create mode 100644 core/libs/ht.el create mode 100644 core/libs/mocker.el create mode 100644 core/libs/page-break-lines.el create mode 100644 core/templates/.spacemacs.template create mode 100644 core/templates/README.org.template create mode 100644 core/templates/REPORTING.template create mode 100644 core/templates/packages.el.template create mode 100755 core/tools/spacefmt/spacefmt create mode 100644 core/tools/spacefmt/spacefmt.el create mode 100644 core/tools/spacefmt/tests/config.el create mode 100644 core/tools/spacefmt/tests/packages.el create mode 100644 core/tools/spacefmt/tests/test.org create mode 100644 core/tools/spacefmt/toc-org.el create mode 100644 doc/CONVENTIONS.org create mode 100644 doc/DOCUMENTATION.org create mode 100644 doc/FAQ.org create mode 100644 doc/LAYERS.org create mode 100644 doc/QUICK_START.org create mode 100644 doc/VIMUSERS.org create mode 100644 doc/img/crappy-powerline-separators.png create mode 100644 doc/img/dot-error.png create mode 100644 doc/img/dot-info.png create mode 100644 doc/img/dot-warning.png create mode 100644 doc/img/flycheck-error.png create mode 100644 doc/img/flycheck-info.png create mode 100644 doc/img/flycheck-mode-line.png create mode 100644 doc/img/flycheck-warning.png create mode 100644 doc/img/powerline-alternate.png create mode 100644 doc/img/powerline-anzu.png create mode 100644 doc/img/powerline-arrow-fade.png create mode 100644 doc/img/powerline-arrow.png create mode 100644 doc/img/powerline-bar.png create mode 100644 doc/img/powerline-box.png create mode 100644 doc/img/powerline-brace.png create mode 100644 doc/img/powerline-butt.png create mode 100644 doc/img/powerline-chamfer.png create mode 100644 doc/img/powerline-contour.png create mode 100644 doc/img/powerline-curve.png create mode 100644 doc/img/powerline-fix-windows.png create mode 100644 doc/img/powerline-nil.png create mode 100644 doc/img/powerline-rounded.png create mode 100644 doc/img/powerline-roundstub.png create mode 100644 doc/img/powerline-slant.png create mode 100644 doc/img/powerline-update.png create mode 100644 doc/img/powerline-wave.png create mode 100644 doc/img/powerline-zigzag.png create mode 100644 doc/img/spacemacs-ahs-transient-state.png create mode 100644 doc/img/spacemacs-lisp-transient-state.png create mode 100644 doc/img/spacemacs-python.png create mode 100644 doc/img/spacemacs-scale-transient-state.png create mode 100644 doc/img/spacemacs-startup.png create mode 100644 doc/img/spacemacs-urxvt.png create mode 100644 doc/img/title.png create mode 100644 doc/img/title2.png create mode 100644 doc/img/update-green.png create mode 100644 doc/img/update-orange.png create mode 100644 doc/img/update-red.png create mode 100644 doc/img/which-key.png create mode 100644 init.el create mode 100644 layers/+chat/erc/README.org create mode 100644 layers/+chat/erc/config.el create mode 100644 layers/+chat/erc/funcs.el create mode 100644 layers/+chat/erc/local/erc-sasl/erc-sasl.el create mode 100644 layers/+chat/erc/local/erc-tex/erc-tex.el create mode 100644 layers/+chat/erc/local/erc-yank/README.md create mode 100644 layers/+chat/erc/local/erc-yank/erc-yank.el create mode 100644 layers/+chat/erc/packages.el create mode 100644 layers/+chat/jabber/README.org create mode 100644 layers/+chat/jabber/funcs.el create mode 100644 layers/+chat/jabber/img/attribution.md create mode 100644 layers/+chat/jabber/img/jabber-logo.gif create mode 100644 layers/+chat/jabber/packages.el create mode 100644 layers/+chat/rcirc/README.org create mode 100644 layers/+chat/rcirc/config.el create mode 100644 layers/+chat/rcirc/funcs.el create mode 100644 layers/+chat/rcirc/img/irc.png create mode 100644 layers/+chat/rcirc/local/helm-rcirc/README.md create mode 100644 layers/+chat/rcirc/local/helm-rcirc/helm-rcirc.el create mode 100644 layers/+chat/rcirc/local/rcirc-late-fix/rcirc-late-fix.el create mode 100644 layers/+chat/rcirc/local/rcirc-reconnect/rcirc-reconnect.el create mode 100644 layers/+chat/rcirc/packages.el create mode 100644 layers/+chat/slack/README.org create mode 100644 layers/+chat/slack/img/slack.png create mode 100644 layers/+chat/slack/packages.el create mode 100644 layers/+checkers/spell-checking/README.org create mode 100644 layers/+checkers/spell-checking/config.el create mode 100644 layers/+checkers/spell-checking/funcs.el create mode 100644 layers/+checkers/spell-checking/packages.el create mode 100644 layers/+checkers/syntax-checking/README.org create mode 100644 layers/+checkers/syntax-checking/config.el create mode 100644 layers/+checkers/syntax-checking/funcs.el create mode 100644 layers/+checkers/syntax-checking/img/flycheck.png create mode 100644 layers/+checkers/syntax-checking/packages.el create mode 100644 layers/+completion/auto-completion/README.org create mode 100644 layers/+completion/auto-completion/config.el create mode 100644 layers/+completion/auto-completion/funcs.el create mode 100644 layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/.yas-parents create mode 100644 layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/.yas-setup.el create mode 100644 layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/micro-state create mode 100644 layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/new-package create mode 100644 layers/+completion/auto-completion/packages.el create mode 100644 layers/+completion/helm/funcs.el create mode 100644 layers/+completion/helm/local/helm-spacemacs-help/helm-spacemacs-help.el create mode 100644 layers/+completion/helm/packages.el create mode 100644 layers/+completion/ivy/config.el create mode 100644 layers/+completion/ivy/funcs.el create mode 100644 layers/+completion/ivy/layers.el create mode 100644 layers/+completion/ivy/local/ivy-spacemacs-help/ivy-spacemacs-help.el create mode 100644 layers/+completion/ivy/packages.el create mode 100644 layers/+distributions/spacemacs-base/config.el create mode 100644 layers/+distributions/spacemacs-base/funcs.el create mode 100644 layers/+distributions/spacemacs-base/keybindings.el create mode 100644 layers/+distributions/spacemacs-base/local/centered-buffer-mode/centered-buffer-mode.el create mode 100644 layers/+distributions/spacemacs-base/local/evil-evilified-state/evil-evilified-state.el create mode 100644 layers/+distributions/spacemacs-base/local/holy-mode/holy-mode.el create mode 100644 layers/+distributions/spacemacs-base/local/hybrid-mode/hybrid-mode.el create mode 100644 layers/+distributions/spacemacs-base/packages.el create mode 100644 layers/+distributions/spacemacs-bootstrap/config.el create mode 100644 layers/+distributions/spacemacs-bootstrap/funcs.el create mode 100644 layers/+distributions/spacemacs-bootstrap/packages.el create mode 100644 layers/+distributions/spacemacs/layers.el create mode 100644 layers/+emacs/better-defaults/README.org create mode 100644 layers/+emacs/better-defaults/config.el create mode 100644 layers/+emacs/better-defaults/funcs.el create mode 100644 layers/+emacs/better-defaults/img/emacs.png create mode 100644 layers/+emacs/better-defaults/keybindings.el create mode 100644 layers/+emacs/better-defaults/packages.el create mode 100644 layers/+emacs/ibuffer/README.org create mode 100644 layers/+emacs/ibuffer/config.el create mode 100644 layers/+emacs/ibuffer/funcs.el create mode 100644 layers/+emacs/ibuffer/packages.el create mode 100644 layers/+emacs/org/README.org create mode 100644 layers/+emacs/org/config.el create mode 100644 layers/+emacs/org/funcs.el create mode 100644 layers/+emacs/org/img/org.png create mode 100644 layers/+emacs/org/local/evil-org/evil-org.el create mode 100644 layers/+emacs/org/local/org-async-init.el create mode 100644 layers/+emacs/org/local/ox-gfm/ox-gfm.el create mode 100644 layers/+emacs/org/packages.el create mode 100644 layers/+emacs/semantic/README.org create mode 100644 layers/+emacs/semantic/config.el create mode 100644 layers/+emacs/semantic/packages.el create mode 100644 layers/+emacs/smex/README.org create mode 100644 layers/+emacs/smex/funcs.el create mode 100644 layers/+emacs/smex/img/smex.png create mode 100644 layers/+emacs/smex/packages.el create mode 100644 layers/+emacs/typography/README.org create mode 100644 layers/+emacs/typography/config.el create mode 100644 layers/+emacs/typography/packages.el create mode 100644 layers/+email/gnus/README.org create mode 100644 layers/+email/gnus/img/gnus.gif create mode 100644 layers/+email/gnus/packages.el create mode 100644 layers/+email/mu4e/README.org create mode 100644 layers/+email/mu4e/config.el create mode 100644 layers/+email/mu4e/funcs.el create mode 100644 layers/+email/mu4e/packages.el create mode 100644 layers/+frameworks/django/README.org create mode 100644 layers/+frameworks/django/img/django.png create mode 100644 layers/+frameworks/django/layers.el create mode 100644 layers/+frameworks/django/packages.el create mode 100644 layers/+frameworks/react/README.org create mode 100644 layers/+frameworks/react/config.el create mode 100644 layers/+frameworks/react/img/react.png create mode 100644 layers/+frameworks/react/layers.el create mode 100644 layers/+frameworks/react/packages.el create mode 100644 layers/+frameworks/ruby-on-rails/README.org create mode 100644 layers/+frameworks/ruby-on-rails/img/ror.png create mode 100644 layers/+frameworks/ruby-on-rails/layers.el create mode 100644 layers/+frameworks/ruby-on-rails/packages.el create mode 100644 layers/+fun/emoji/README.org create mode 100644 layers/+fun/emoji/img/emojis.png create mode 100644 layers/+fun/emoji/packages.el create mode 100644 layers/+fun/games/README.org create mode 100644 layers/+fun/games/config.el create mode 100644 layers/+fun/games/funcs.el create mode 100644 layers/+fun/games/img/games.png create mode 100644 layers/+fun/games/local/helm-games/helm-games.el create mode 100644 layers/+fun/games/packages.el create mode 100644 layers/+fun/selectric/README.org create mode 100644 layers/+fun/selectric/img/typewriter.jpg create mode 100644 layers/+fun/selectric/packages.el create mode 100644 layers/+fun/xkcd/README.org create mode 100644 layers/+fun/xkcd/img/xkcd.png create mode 100644 layers/+fun/xkcd/packages.el create mode 100644 layers/+intl/chinese/README.org create mode 100644 layers/+intl/chinese/config.el create mode 100644 layers/+intl/chinese/img/China.png create mode 100644 layers/+intl/chinese/img/Chinese.png create mode 100644 layers/+intl/chinese/packages.el create mode 100644 layers/+intl/keyboard-layout/README.org create mode 100644 layers/+intl/keyboard-layout/config.el create mode 100644 layers/+intl/keyboard-layout/funcs.el create mode 100644 layers/+intl/keyboard-layout/img/bepo-keymap.png create mode 100644 layers/+intl/keyboard-layout/img/bepo-logo.png create mode 100644 layers/+intl/keyboard-layout/img/dvorak-keymap.png create mode 100644 layers/+intl/keyboard-layout/img/keyboard-layout.png create mode 100644 layers/+intl/keyboard-layout/packages.el create mode 100644 layers/+lang/agda/README.org create mode 100644 layers/+lang/agda/config.el create mode 100644 layers/+lang/agda/packages.el create mode 100644 layers/+lang/asciidoc/README.org create mode 100644 layers/+lang/asciidoc/packages.el create mode 100644 layers/+lang/asm/README.org create mode 100644 layers/+lang/asm/config.el create mode 100644 layers/+lang/asm/funcs.el create mode 100644 layers/+lang/asm/img/asm.png create mode 100644 layers/+lang/asm/packages.el create mode 100644 layers/+lang/autohotkey/README.org create mode 100644 layers/+lang/autohotkey/img/ahk.png create mode 100644 layers/+lang/autohotkey/packages.el create mode 100644 layers/+lang/bibtex/README.org create mode 100644 layers/+lang/bibtex/img/logo.png create mode 100644 layers/+lang/bibtex/packages.el create mode 100644 layers/+lang/c-c++/README.org create mode 100644 layers/+lang/c-c++/config.el create mode 100644 layers/+lang/c-c++/funcs.el create mode 100644 layers/+lang/c-c++/img/ccpp.jpg create mode 100644 layers/+lang/c-c++/img/cmake.png create mode 100644 layers/+lang/c-c++/packages.el create mode 100644 layers/+lang/clojure/README.org create mode 100644 layers/+lang/clojure/config.el create mode 100644 layers/+lang/clojure/funcs.el create mode 100644 layers/+lang/clojure/img/cider.png create mode 100644 layers/+lang/clojure/img/clojure.png create mode 100644 layers/+lang/clojure/packages.el create mode 100644 layers/+lang/common-lisp/README.org create mode 100644 layers/+lang/common-lisp/config.el create mode 100644 layers/+lang/common-lisp/funcs.el create mode 100644 layers/+lang/common-lisp/img/slime.png create mode 100644 layers/+lang/common-lisp/packages.el create mode 100644 layers/+lang/csharp/README.org create mode 100644 layers/+lang/csharp/config.el create mode 100644 layers/+lang/csharp/img/csharp.png create mode 100644 layers/+lang/csharp/img/dotnet.png create mode 100644 layers/+lang/csharp/packages.el create mode 100644 layers/+lang/csv/README.org create mode 100644 layers/+lang/csv/img/csv.png create mode 100644 layers/+lang/csv/packages.el create mode 100644 layers/+lang/d/README.org create mode 100644 layers/+lang/d/config.el create mode 100644 layers/+lang/d/img/dlogo.png create mode 100644 layers/+lang/d/packages.el create mode 100644 layers/+lang/elixir/README.org create mode 100644 layers/+lang/elixir/alchemist-refcard.pdf create mode 100644 layers/+lang/elixir/alchemist-refcard.tex create mode 100644 layers/+lang/elixir/config.el create mode 100644 layers/+lang/elixir/funcs.el create mode 100644 layers/+lang/elixir/img/alchemist.png create mode 100644 layers/+lang/elixir/img/elixir.png create mode 100644 layers/+lang/elixir/packages.el create mode 100644 layers/+lang/elm/README.org create mode 100644 layers/+lang/elm/config.el create mode 100644 layers/+lang/elm/funcs.el create mode 100644 layers/+lang/elm/img/elm.png create mode 100644 layers/+lang/elm/packages.el create mode 100644 layers/+lang/emacs-lisp/README.org create mode 100644 layers/+lang/emacs-lisp/config.el create mode 100644 layers/+lang/emacs-lisp/funcs.el create mode 100644 layers/+lang/emacs-lisp/img/emacs.png create mode 100644 layers/+lang/emacs-lisp/packages.el create mode 100644 layers/+lang/erlang/README.org create mode 100644 layers/+lang/erlang/config.el create mode 100644 layers/+lang/erlang/img/erlang.png create mode 100644 layers/+lang/erlang/packages.el create mode 100644 layers/+lang/ess/README.org create mode 100644 layers/+lang/ess/config.el create mode 100644 layers/+lang/ess/img/r.jpg create mode 100644 layers/+lang/ess/packages.el create mode 100644 layers/+lang/extra-langs/README.org create mode 100644 layers/+lang/extra-langs/packages.el create mode 100644 layers/+lang/faust/README.org create mode 100644 layers/+lang/faust/config.el create mode 100644 layers/+lang/faust/funcs.el create mode 100644 layers/+lang/faust/img/faust.png create mode 100644 layers/+lang/faust/packages.el create mode 100644 layers/+lang/fsharp/README.org create mode 100644 layers/+lang/fsharp/config.el create mode 100644 layers/+lang/fsharp/img/fsharp.png create mode 100644 layers/+lang/fsharp/packages.el create mode 100644 layers/+lang/go/README.org create mode 100644 layers/+lang/go/config.el create mode 100644 layers/+lang/go/funcs.el create mode 100644 layers/+lang/go/img/go.png create mode 100644 layers/+lang/go/local/go-rename/go-rename.el create mode 100644 layers/+lang/go/packages.el create mode 100644 layers/+lang/graphviz/README.org create mode 100644 layers/+lang/graphviz/img/graphviz.png create mode 100644 layers/+lang/graphviz/packages.el create mode 100644 layers/+lang/haskell/README.org create mode 100644 layers/+lang/haskell/config.el create mode 100644 layers/+lang/haskell/funcs.el create mode 100644 layers/+lang/haskell/img/haskell.png create mode 100644 layers/+lang/haskell/packages.el create mode 100644 layers/+lang/html/README.org create mode 100644 layers/+lang/html/config.el create mode 100644 layers/+lang/html/funcs.el create mode 100644 layers/+lang/html/img/html.png create mode 100644 layers/+lang/html/packages.el create mode 100644 layers/+lang/idris/README.org create mode 100644 layers/+lang/idris/config.el create mode 100644 layers/+lang/idris/img/idris.png create mode 100644 layers/+lang/idris/packages.el create mode 100644 layers/+lang/ipython-notebook/README.org create mode 100644 layers/+lang/ipython-notebook/img/dark.png create mode 100644 layers/+lang/ipython-notebook/img/light.png create mode 100644 layers/+lang/ipython-notebook/matplotlibrc create mode 100644 layers/+lang/ipython-notebook/packages.el create mode 100644 layers/+lang/java/README.org create mode 100644 layers/+lang/java/config.el create mode 100644 layers/+lang/java/funcs.el create mode 100644 layers/+lang/java/img/java.png create mode 100644 layers/+lang/java/packages.el create mode 100644 layers/+lang/javascript/README.org create mode 100644 layers/+lang/javascript/config.el create mode 100644 layers/+lang/javascript/funcs.el create mode 100644 layers/+lang/javascript/img/coffee.png create mode 100644 layers/+lang/javascript/img/javascript.png create mode 100644 layers/+lang/javascript/packages.el create mode 100644 layers/+lang/latex/README.org create mode 100644 layers/+lang/latex/config.el create mode 100644 layers/+lang/latex/funcs.el create mode 100644 layers/+lang/latex/img/latex.png create mode 100644 layers/+lang/latex/packages.el create mode 100644 layers/+lang/lua/README.org create mode 100644 layers/+lang/lua/config.el create mode 100644 layers/+lang/lua/img/lua.gif create mode 100644 layers/+lang/lua/packages.el create mode 100644 layers/+lang/markdown/README.org create mode 100644 layers/+lang/markdown/config.el create mode 100644 layers/+lang/markdown/img/markdown.png create mode 100644 layers/+lang/markdown/packages.el create mode 100644 layers/+lang/nim/README.org create mode 100644 layers/+lang/nim/config.el create mode 100644 layers/+lang/nim/img/logo.png create mode 100644 layers/+lang/nim/packages.el create mode 100644 layers/+lang/ocaml/README.org create mode 100644 layers/+lang/ocaml/config.el create mode 100644 layers/+lang/ocaml/funcs.el create mode 100644 layers/+lang/ocaml/img/ocaml.png create mode 100644 layers/+lang/ocaml/packages.el create mode 100644 layers/+lang/octave/README.org create mode 100644 layers/+lang/octave/config.el create mode 100644 layers/+lang/octave/img/octave.png create mode 100644 layers/+lang/octave/packages.el create mode 100644 layers/+lang/php/README.org create mode 100644 layers/+lang/php/config.el create mode 100644 layers/+lang/php/img/php.png create mode 100644 layers/+lang/php/packages.el create mode 100644 layers/+lang/plantuml/README.org create mode 100644 layers/+lang/plantuml/img/dia.png create mode 100644 layers/+lang/plantuml/img/logo.png create mode 100644 layers/+lang/plantuml/packages.el create mode 100644 layers/+lang/purescript/README.org create mode 100644 layers/+lang/purescript/config.el create mode 100644 layers/+lang/purescript/img/purescript-logo.png create mode 100644 layers/+lang/purescript/packages.el create mode 100644 layers/+lang/python/README.org create mode 100644 layers/+lang/python/config.el create mode 100644 layers/+lang/python/funcs.el create mode 100644 layers/+lang/python/img/python.png create mode 100644 layers/+lang/python/local/nose/README.md create mode 100644 layers/+lang/python/local/nose/nose.el create mode 100644 layers/+lang/python/local/pylookup/.gitignore create mode 100644 layers/+lang/python/local/pylookup/README.md create mode 100644 layers/+lang/python/local/pylookup/makefile create mode 100644 layers/+lang/python/local/pylookup/pylookup.el create mode 100755 layers/+lang/python/local/pylookup/pylookup.py create mode 100644 layers/+lang/python/packages.el create mode 100644 layers/+lang/racket/README.org create mode 100644 layers/+lang/racket/config.el create mode 100644 layers/+lang/racket/img/racket.png create mode 100644 layers/+lang/racket/packages.el create mode 100644 layers/+lang/ruby/README.org create mode 100644 layers/+lang/ruby/config.el create mode 100644 layers/+lang/ruby/funcs.el create mode 100644 layers/+lang/ruby/img/ruby.png create mode 100644 layers/+lang/ruby/packages.el create mode 100644 layers/+lang/rust/README.org create mode 100644 layers/+lang/rust/config.el create mode 100644 layers/+lang/rust/img/rust.png create mode 100644 layers/+lang/rust/packages.el create mode 100644 layers/+lang/scala/README.org create mode 100644 layers/+lang/scala/config.el create mode 100644 layers/+lang/scala/funcs.el create mode 100644 layers/+lang/scala/img/ensime.png create mode 100644 layers/+lang/scala/img/scala.png create mode 100644 layers/+lang/scala/packages.el create mode 100644 layers/+lang/scheme/README.org create mode 100644 layers/+lang/scheme/config.el create mode 100644 layers/+lang/scheme/packages.el create mode 100644 layers/+lang/shaders/README.org create mode 100644 layers/+lang/shaders/img/shaders.png create mode 100644 layers/+lang/shaders/packages.el create mode 100644 layers/+lang/shell-scripts/README.org create mode 100644 layers/+lang/shell-scripts/config.el create mode 100644 layers/+lang/shell-scripts/funcs.el create mode 100644 layers/+lang/shell-scripts/img/fish.png create mode 100644 layers/+lang/shell-scripts/packages.el create mode 100644 layers/+lang/sml/README.org create mode 100644 layers/+lang/sml/img/sml.png create mode 100644 layers/+lang/sml/packages.el create mode 100644 layers/+lang/sql/README.org create mode 100644 layers/+lang/sql/img/sql.png create mode 100644 layers/+lang/sql/packages.el create mode 100644 layers/+lang/swift/README.org create mode 100644 layers/+lang/swift/img/swift.png create mode 100644 layers/+lang/swift/packages.el create mode 100644 layers/+lang/typescript/README.org create mode 100644 layers/+lang/typescript/config.el create mode 100644 layers/+lang/typescript/funcs.el create mode 100644 layers/+lang/typescript/img/TypeScript.png create mode 100644 layers/+lang/typescript/packages.el create mode 100644 layers/+lang/vimscript/README.org create mode 100644 layers/+lang/vimscript/config.el create mode 100644 layers/+lang/vimscript/packages.el create mode 100644 layers/+lang/windows-scripts/README.org create mode 100644 layers/+lang/windows-scripts/config.el create mode 100644 layers/+lang/windows-scripts/img/ps.png create mode 100644 layers/+lang/windows-scripts/local/dos/dos.el create mode 100644 layers/+lang/windows-scripts/packages.el create mode 100644 layers/+lang/yaml/README.org create mode 100644 layers/+lang/yaml/config.el create mode 100644 layers/+lang/yaml/packages.el create mode 100644 layers/+misc/nlinum/packages.el create mode 100644 layers/+os/nixos/README.org create mode 100644 layers/+os/nixos/config.el create mode 100644 layers/+os/nixos/img/nixos.jpg create mode 100644 layers/+os/nixos/packages.el create mode 100644 layers/+os/osx/README.org create mode 100644 layers/+os/osx/config.el create mode 100644 layers/+os/osx/funcs.el create mode 100644 layers/+os/osx/img/apple.png create mode 100644 layers/+os/osx/img/osx.png create mode 100644 layers/+os/osx/keybindings.el create mode 100644 layers/+os/osx/packages.el create mode 100644 layers/+pair-programming/floobits/README.org create mode 100644 layers/+pair-programming/floobits/img/floobits.png create mode 100644 layers/+pair-programming/floobits/packages.el create mode 100644 layers/+source-control/git/README.org create mode 100644 layers/+source-control/git/config.el create mode 100644 layers/+source-control/git/funcs.el create mode 100644 layers/+source-control/git/img/git.png create mode 100644 layers/+source-control/git/packages.el create mode 100644 layers/+source-control/github/README.org create mode 100644 layers/+source-control/github/img/github.png create mode 100644 layers/+source-control/github/packages.el create mode 100644 layers/+source-control/perforce/README.org create mode 100644 layers/+source-control/perforce/img/p4.png create mode 100644 layers/+source-control/perforce/packages.el create mode 100644 layers/+source-control/version-control/README.org create mode 100644 layers/+source-control/version-control/config.el create mode 100644 layers/+source-control/version-control/funcs.el create mode 100644 layers/+source-control/version-control/keybindings.el create mode 100644 layers/+source-control/version-control/packages.el create mode 100644 layers/+spacemacs/spacemacs-completion/config.el create mode 100644 layers/+spacemacs/spacemacs-completion/funcs.el create mode 100644 layers/+spacemacs/spacemacs-completion/packages.el create mode 100644 layers/+spacemacs/spacemacs-editing-visual/packages.el create mode 100644 layers/+spacemacs/spacemacs-editing/funcs.el create mode 100644 layers/+spacemacs/spacemacs-editing/local/spacemacs-whitespace-cleanup/spacemacs-whitespace-cleanup.el create mode 100644 layers/+spacemacs/spacemacs-editing/packages.el create mode 100644 layers/+spacemacs/spacemacs-evil/funcs.el create mode 100644 layers/+spacemacs/spacemacs-evil/local/evil-unimpaired/evil-unimpaired.el create mode 100644 layers/+spacemacs/spacemacs-evil/packages.el create mode 100644 layers/+spacemacs/spacemacs-language/packages.el create mode 100644 layers/+spacemacs/spacemacs-layouts/config.el create mode 100644 layers/+spacemacs/spacemacs-layouts/funcs.el create mode 100644 layers/+spacemacs/spacemacs-layouts/packages.el create mode 100644 layers/+spacemacs/spacemacs-misc/packages.el create mode 100644 layers/+spacemacs/spacemacs-org/local/space-doc/space-doc.el create mode 100644 layers/+spacemacs/spacemacs-org/packages.el create mode 100644 layers/+spacemacs/spacemacs-ui-visual/config.el create mode 100644 layers/+spacemacs/spacemacs-ui-visual/funcs.el create mode 100644 layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/frame-cmds.el create mode 100644 layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/frame-fns.el create mode 100644 layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/zoom-frm.el create mode 100644 layers/+spacemacs/spacemacs-ui-visual/packages.el create mode 100644 layers/+spacemacs/spacemacs-ui/local/centered-cursor/centered-cursor-mode.el create mode 100644 layers/+spacemacs/spacemacs-ui/packages.el create mode 100644 layers/+tags/cscope/README.org create mode 100644 layers/+tags/cscope/img/cscope.jpg create mode 100644 layers/+tags/cscope/packages.el create mode 100644 layers/+tags/gtags/README.org create mode 100644 layers/+tags/gtags/config.el create mode 100644 layers/+tags/gtags/funcs.el create mode 100644 layers/+tags/gtags/packages.el create mode 100644 layers/+themes/colors/README.org create mode 100644 layers/+themes/colors/config.el create mode 100644 layers/+themes/colors/funcs.el create mode 100644 layers/+themes/colors/img/rainbow-mode.png create mode 100644 layers/+themes/colors/img/rainbow_dash.png create mode 100644 layers/+themes/colors/img/theme-tweaks-python.png create mode 100644 layers/+themes/colors/local/nyan-mode/README.org create mode 100644 layers/+themes/colors/local/nyan-mode/img/nyan-frame-1.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/img/nyan-frame-2.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/img/nyan-frame-3.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/img/nyan-frame-4.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/img/nyan-frame-5.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/img/nyan-frame-6.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/img/nyan-start.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/img/nyan.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/img/outerspace.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/img/rainbow-start.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/img/rainbow.xpm create mode 100644 layers/+themes/colors/local/nyan-mode/mus/nyanlooped.mp3 create mode 100644 layers/+themes/colors/local/nyan-mode/nyan-mode.el create mode 100644 layers/+themes/colors/packages.el create mode 100644 layers/+themes/themes-megapack/README.org create mode 100644 layers/+themes/themes-megapack/packages.el create mode 100644 layers/+themes/theming/README.org create mode 100644 layers/+themes/theming/config.el create mode 100644 layers/+themes/theming/funcs.el create mode 100644 layers/+themes/theming/packages.el create mode 100644 layers/+tools/ansible/README.org create mode 100644 layers/+tools/ansible/config.el create mode 100644 layers/+tools/ansible/funcs.el create mode 100644 layers/+tools/ansible/img/ansible.png create mode 100644 layers/+tools/ansible/layers.el create mode 100644 layers/+tools/ansible/packages.el create mode 100644 layers/+tools/cfengine/README.org create mode 100644 layers/+tools/cfengine/config.el create mode 100644 layers/+tools/cfengine/img/agent.png create mode 100644 layers/+tools/cfengine/packages.el create mode 100644 layers/+tools/chrome/README.org create mode 100644 layers/+tools/chrome/img/chrome.png create mode 100644 layers/+tools/chrome/packages.el create mode 100644 layers/+tools/command-log/README.org create mode 100644 layers/+tools/command-log/packages.el create mode 100644 layers/+tools/dash/README.org create mode 100644 layers/+tools/dash/config.el create mode 100644 layers/+tools/dash/funcs.el create mode 100644 layers/+tools/dash/img/dash.png create mode 100644 layers/+tools/dash/img/zeal.png create mode 100644 layers/+tools/dash/packages.el create mode 100644 layers/+tools/deft/README.org create mode 100644 layers/+tools/deft/packages.el create mode 100644 layers/+tools/docker/README.org create mode 100644 layers/+tools/docker/img/docker.png create mode 100644 layers/+tools/docker/packages.el create mode 100644 layers/+tools/fasd/README.org create mode 100644 layers/+tools/fasd/packages.el create mode 100644 layers/+tools/finance/README.org create mode 100644 layers/+tools/finance/config.el create mode 100644 layers/+tools/finance/img/ledger.png create mode 100644 layers/+tools/finance/packages.el create mode 100644 layers/+tools/geolocation/README.org create mode 100644 layers/+tools/geolocation/config.el create mode 100644 layers/+tools/geolocation/extensions.el create mode 100644 layers/+tools/geolocation/extensions/theme-changer/theme-changer.el create mode 100644 layers/+tools/geolocation/img/emacs-location-helper.jpg create mode 100644 layers/+tools/geolocation/img/emacs-sunshine.jpg create mode 100644 layers/+tools/geolocation/packages.el create mode 100644 layers/+tools/imenu-list/README.org create mode 100644 layers/+tools/imenu-list/img/imenu-list-example.png create mode 100644 layers/+tools/imenu-list/packages.el create mode 100644 layers/+tools/nginx/README.org create mode 100644 layers/+tools/nginx/img/nginx.png create mode 100644 layers/+tools/nginx/packages.el create mode 100644 layers/+tools/pandoc/README.org create mode 100644 layers/+tools/pandoc/funcs.el create mode 100644 layers/+tools/pandoc/packages.el create mode 100644 layers/+tools/pdf-tools/README.org create mode 100644 layers/+tools/pdf-tools/img/pdf.png create mode 100644 layers/+tools/pdf-tools/packages.el create mode 100644 layers/+tools/prodigy/README.org create mode 100644 layers/+tools/prodigy/img/prodigy.png create mode 100644 layers/+tools/prodigy/packages.el create mode 100644 layers/+tools/puppet/README.org create mode 100644 layers/+tools/puppet/config.el create mode 100644 layers/+tools/puppet/img/puppet.png create mode 100644 layers/+tools/puppet/layers.el create mode 100644 layers/+tools/puppet/packages.el create mode 100644 layers/+tools/ranger/README.org create mode 100644 layers/+tools/ranger/packages.el create mode 100644 layers/+tools/rebox/README.org create mode 100644 layers/+tools/rebox/config.el create mode 100644 layers/+tools/rebox/funcs.el create mode 100644 layers/+tools/rebox/packages.el create mode 100644 layers/+tools/restclient/README.org create mode 100644 layers/+tools/restclient/config.el create mode 100644 layers/+tools/restclient/funcs.el create mode 100644 layers/+tools/restclient/packages.el create mode 100644 layers/+tools/salt/README.org create mode 100644 layers/+tools/salt/img/saltstack.png create mode 100644 layers/+tools/salt/packages.el create mode 100644 layers/+tools/shell/README.org create mode 100644 layers/+tools/shell/config.el create mode 100644 layers/+tools/shell/funcs.el create mode 100644 layers/+tools/shell/img/shell.png create mode 100644 layers/+tools/shell/packages.el create mode 100644 layers/+tools/speed-reading/README.org create mode 100644 layers/+tools/speed-reading/packages.el create mode 100644 layers/+tools/systemd/README.org create mode 100644 layers/+tools/systemd/packages.el create mode 100644 layers/+tools/terraform/README.org create mode 100644 layers/+tools/terraform/img/terraform.png create mode 100644 layers/+tools/terraform/packages.el create mode 100644 layers/+tools/tmux/README.org create mode 100644 layers/+tools/tmux/local/tmux/tmux.el create mode 100644 layers/+tools/tmux/packages.el create mode 100644 layers/+tools/vagrant/README.org create mode 100644 layers/+tools/vagrant/Vagrantfile create mode 100644 layers/+tools/vagrant/img/vagrant.png create mode 100644 layers/+tools/vagrant/packages.el create mode 100644 layers/+tools/ycmd/README.org create mode 100644 layers/+tools/ycmd/global_conf.py create mode 100644 layers/+tools/ycmd/packages.el create mode 100644 layers/+vim/evil-cleverparens/README.org create mode 100644 layers/+vim/evil-cleverparens/packages.el create mode 100644 layers/+vim/evil-commentary/README.org create mode 100644 layers/+vim/evil-commentary/packages.el create mode 100644 layers/+vim/evil-snipe/README.org create mode 100644 layers/+vim/evil-snipe/config.el create mode 100644 layers/+vim/evil-snipe/img/Cat_With_Rifle.jpg create mode 100644 layers/+vim/evil-snipe/packages.el create mode 100644 layers/+vim/vim-empty-lines/README.org create mode 100644 layers/+vim/vim-empty-lines/local/vim-empty-lines-mode/vim-empty-lines-mode.el create mode 100644 layers/+vim/vim-empty-lines/packages.el create mode 100644 layers/+vim/vim-powerline/README.org create mode 100644 layers/+vim/vim-powerline/local/vim-powerline/vim-colors.el create mode 100644 layers/+vim/vim-powerline/local/vim-powerline/vim-powerline-theme.el create mode 100644 layers/+vim/vim-powerline/packages.el create mode 100644 layers/+vim/vinegar/README.org create mode 100644 layers/+vim/vinegar/config.el create mode 100644 layers/+vim/vinegar/funcs.el create mode 100644 layers/+vim/vinegar/keybindings.el create mode 100644 layers/+vim/vinegar/packages.el create mode 100644 layers/+web-services/elfeed/README.org create mode 100644 layers/+web-services/elfeed/config.el create mode 100644 layers/+web-services/elfeed/img/elfeed.png create mode 100644 layers/+web-services/elfeed/packages.el create mode 100644 layers/+web-services/evernote/README.org create mode 100644 layers/+web-services/evernote/img/evernote.png create mode 100644 layers/+web-services/evernote/img/geeknote.png create mode 100644 layers/+web-services/evernote/packages.el create mode 100644 layers/+web-services/search-engine/README.org create mode 100644 layers/+web-services/search-engine/funcs.el create mode 100644 layers/+web-services/search-engine/img/searchengine.jpg create mode 100644 layers/+web-services/search-engine/packages.el create mode 100644 layers/+web-services/spotify/README.org create mode 100644 layers/+web-services/spotify/img/spotify.png create mode 100644 layers/+web-services/spotify/packages.el create mode 100644 layers/+web-services/twitter/README.org create mode 100644 layers/+web-services/twitter/img/twitter.png create mode 100644 layers/+web-services/twitter/packages.el create mode 100644 layers/+web-services/wakatime/README.org create mode 100644 layers/+web-services/wakatime/img/wakatime.png create mode 100644 layers/+web-services/wakatime/packages.el create mode 100644 layers/LAYERS.org create mode 100644 layers/auto-layer.el create mode 100644 news/news01.org create mode 100644 private/README.md create mode 100644 private/local/README.md create mode 100644 private/snippets/README.md create mode 100644 spacemacs.mk create mode 100644 tests/core/Makefile create mode 100644 tests/core/core-configuration-layer-ftest.el create mode 100644 tests/core/core-configuration-layer-utest.el create mode 100644 tests/core/core-funcs-utest.el create mode 100644 tests/core/core-release-management-ftest.el create mode 100644 tests/core/core-spacemacs-buffer-ftest.el create mode 100644 tests/core/core-spacemacs-ftest.el create mode 100644 tests/core/data/framed-text.txt create mode 100644 tests/layers/+distribution/spacemacs-base/Makefile create mode 100644 tests/layers/+distribution/spacemacs-base/dotspacemacs.el create mode 100644 tests/layers/+distribution/spacemacs-base/evil-evilified-state-ftest.el create mode 100644 tests/layers/+distribution/spacemacs-base/evil-evilified-state-utest.el create mode 100644 tests/layers/+distribution/spacemacs/Makefile create mode 100644 tests/layers/+distribution/spacemacs/dotspacemacs.el diff --git a/.github/ISSUE_TEMPLATE b/.github/ISSUE_TEMPLATE new file mode 100644 index 0000000..fdb7479 --- /dev/null +++ b/.github/ISSUE_TEMPLATE @@ -0,0 +1,4 @@ +If you are posting about a *bug* please close this issue and open a new one +using [SPC h I] or [M-m h I] (I = capital i) from within Spacemacs. If the +bug makes Spacemacs unusable, you can find the bug report template [here](https://github.com/syl20bnr/spacemacs/blob/develop/core/templates/REPORTING.template) +You can delete this message to start typing. diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE new file mode 100644 index 0000000..96c72a7 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE @@ -0,0 +1,7 @@ +Thank you for contributing to Spacemacs! + +Before you submit this pull request, please ensure it is against the develop branch and not master. + +This message should be replaced with a description of your change. + +Thank you <3 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..22e8323 --- /dev/null +++ b/.gitignore @@ -0,0 +1,53 @@ +auto-save-list/ +elpa/ +export/ +ac-comphist.dat +eproject.lst +.smex-items +\#* +.places +.cache +/eww-bookmarks +eshell/history +.emacs.desktop +.emacs.desktop.lock +eshell/alias +eshell/lastdir +/url/cookies +my-org/ +org-files/ +semanticdb/ +edts/ +.recentf +.recentf~ +projectile.cache +projectile-bookmarks.eld +tramp +elnode/ +var/ +crown/ +*.stackdump +bookmarks +/.my-keybindings.el.swp +.DS_Store +tmp/ +/history +.python-environments/ +server/ +/network-security.data +*.elc +*.pyc +/*.zip +*.db +python-*-docs-html +/.cask/ +/session.* +/srecode-map.el +/recentf + +# Private directory +private/ +!private/README.md +!private/snippets/README.md +!private/local/README.md +/games/ diff --git a/.projectile b/.projectile new file mode 100644 index 0000000..1974e79 --- /dev/null +++ b/.projectile @@ -0,0 +1,10 @@ +-/semanticdb +-/url +-/edts +-/elpa +-/.cache +-ac-comphist.dat +-.emacs.desktop +-.emacs.desktop.lock +-.smex-items +-*.elc \ No newline at end of file diff --git a/.travis-build.sh b/.travis-build.sh new file mode 100755 index 0000000..0b8be23 --- /dev/null +++ b/.travis-build.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +## run_build.sh --- Travis CI File for Spacemacs +## +## Copyright (c) 2012-2014 Sylvain Benner +## Copyright (c) 2014-2015 Sylvain Benner & Contributors +## +## Author: Sylvain Benner +## URL: https://github.com/syl20bnr/spacemacs +## +## This file is not part of GNU Emacs. +## +## License: GPLv3 + +tests=("core") + +if [ $USER != "travis" ]; then + echo "This script is not designed to run locally." + echo "Instead, navigate to the appropriate test folder and run make there instead." + exit 1 +fi + +if [ $TRAVIS_SECURE_ENV_VARS = false ] && + [ $TRAVIS_PULL_REQUEST != false ] && + [ $TRAVIS_BRANCH = "master" ]; then + + printf '=%.0s' {1..70} + printf "\n し(*・∀・)/ Thanks for the contribution! \(・∀・*)ノ\n" + printf '=%.0s' {1..70} + printf "\n( ^◡^)っ Please submit your pull request against the develop branch.\n" + echo "You can read the contribution guidelines at:" + echo "https://github.com/syl20bnr/spacemacs/blob/develop/CONTRIBUTING.org" + exit 1 +fi + +echo "Pwd $(pwd)" +rm -rf ~/.emacs.d +ln -sf `pwd` ~/.emacs.d + +for test in "${tests[@]}"; do + rm -rf ~/.emacs.d/elpa + rm -rf ~/.emacs.d/.cache + rm -f ~/.spacemacs + + testdir=~/.emacs.d/tests/$test + echo "Running '$test' in '$testdir' folder" + if [ -f $testdir/dotspacemacs.el ]; then + cp $testdir/dotspacemacs.el ~/.spacemacs + fi + cd $testdir && echo "Now in $(pwd)" + make test || exit 2 +done diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..6a8b254 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,25 @@ +language: generic +sudo: false + +branches: + only: + - master + - develop + +before_install: + - curl -fsSkL https://gist.github.com/rejeep/ebcd57c3af83b049833b/raw > x.sh && source ./x.sh + - evm install $EVM_EMACS --use --skip + +env: + - EVM_EMACS=emacs-24.4-travis + - EVM_EMACS=emacs-24.5-travis + - EVM_EMACS=emacs-git-snapshot-travis + +matrix: + fast_finish: true + allow_failures: + env: + - EVM_EMACS=emacs-git-snapshot-travis + +script: + - ./.travis-build.sh diff --git a/CHANGELOG.org b/CHANGELOG.org new file mode 100644 index 0000000..86c6465 --- /dev/null +++ b/CHANGELOG.org @@ -0,0 +1,3759 @@ +* Release 0.200.x +** 0.200.5 (2016/11/03) +*** Fixes +- Removed themes missing from MELPA (=colorsarenice-theme= and =stekene-theme=) +** 0.200.4 (2016/10/26) +*** Fixes +- Update go-guru package reflecting MELPA changes +** 0.200.3 (2016/10/18) +*** Fixes +- Fix broken macOS paths for homebrew service (thanks to mgiles) +*** Improvements +- Add =system-configuration-features= to system description (~SPC h d s~) + for Emacs 25 and later (thanks to JAremko) +- Add support for =doom= themes (thanks to TheBB) +- Revert back default value for =dotspacemacs-startup-lists= (was previously + changed to be nil) +- Warn if layers changed outside =dotspacemacs/layers= function + (thanks to TheBB) +- Show a list of Spacemacs warnings in home buffer (thanks to TheBB) +- Prevent =:toggle= expression from being evaluated for excluded packages + (thanks to TheBB) +- Various documentation improvements (thanks to arronmabrey, carbohydratesn, + d12frosted, d1egoaz, deb0ch, duianto, eagleflo, JAremko, jredville, lunik1, + mineo, nixmaniack, philtothetop, roryokane, swaroopch, TheBB, Tritlo, tudho, + xificurC) +*** Layer changes +**** Spacemacs distribution +- Add =golden-ratio= toggle key in window transient-state only when + =golden-ratio= package is used (thanks to bmag) +- Enable line numbers for =conf-mode= (by deriving =conf-mode= from + =text-mode=) (thanks to valentjedi) +- New key binding ~SPC c h~ to hide/show comments in a file using the package + =hide-comnt= +- Add ~q~ key binding to quit the =evil-number= transient-state (thanks to duianto) +- Activating =linum-relative= now correctly activates =linum= (thanks to deb0ch) +**** C/C++ +- Match entire path after -I when reading cc-file (function + =company-mode/load-clang-complete-file=) (thanks to jlewallen) +**** Common-lisp +- Enable fuzzy matching for auto-completion (thanks to tuhdo) +**** D +- Add support for auto-completion via =DCD= (thanks to tuhdo) +- Add new key bindings for code navigation: + - ~SPC m g g~ to go to definition + - ~SPC m g b~ to jump back (after go to definition with above command) + - ~SPC m g r~ to find references to all symbol at point + (thanks to tuhdo) +**** IPython-notebook +- Fix deprecated =axes.color_cycle= in =matplotlibrc= (thanks to Retorz) +**** Ivy +- Fix spacemacs layout transient-state to correctly exit when selecting a layout + (thanks to gilbertw1) +- Make =ivy= restrict buffers to current spacemacs layout (thanks to bmag) +**** Elixir +- Add support for =org-babel= (thanks to usharf) +- Enable =flycheck= on idle since recent changes to =flycheck-mix= make it safe + (thanks to aaronjensen) +**** ERC +- Fix connecting to default servers with TLS more than once with ERC + (thanks to Hoot215) +**** Git +- Use =fill-column-indicator= only when the package is effectively used + (thanks to bmag) +- Use =magit= 2.8 built-in fullscreen display function (update your + packages) (thanks to houli) +**** Go +- Replace deprecated =go-oracle= by =go-guru= (thanks to edrex) +- Remove check for =GOPATH= when initializing =go-guru= (thanks to goofansu) +- Fix usage of =go-rename= on symlinked projects (thanks to grncdr) +**** Helm +- Add key binding ~M-RET~ (meta-return) to open the file =packages.el= + of a layer in =helm-spacemacs-help= under ~SPC h SPC~ (thansk to CestDiego) +**** Html +- Fix hooks for CSS-mode since it now derives from =prog-mode= in Emacs 25 + (thanks to TheBB) +**** Javascript +- Add missing command prefix names (thanks to shanavas786) +**** Ocaml +- Add =cmti= extension to list of ignored completion extensions + (thanks to rgrinberg) +**** Org +- Fix location of =org-async-init.el= (thanks to fintelkai) +- Add support for =:q= and =:wq= ex commands for abort and finalize in + =org-capture= and =org-src-edit= (thanks to mwillsey) +- Add support for =Twitter Bootstrap= for export to html. + To enable the support for =bootstrap= set the new layer variable + =org-enable-bootstrap-support= to =t= (thanks to kalhauge) +**** Nim +- Add support =nimsuggest= for better completion using Nim's IDE tool + (thanks to tuhdo) +- Add support for =eldoc= via =nimsuggest= (thanks to tuhdo) +- New key bindings for code navigation: + - ~SPC m g g~ to jump to definition + - ~SPC m g b~ to jump back + (thanks to tuhdo) +**** Plantuml +- Replace deprecated =puml-mode= by =plantuml-mode= (thanks to skuro) +**** Python +- Fix start of REPL for Emacs 25.1 (thanks to bmag) +- Make =python-tab-width= configurable (thanks to TheBB) +- Add support for =wdb= debugger when inserting breakpoints using ~SPC m d b~ + (thanks to koterpillar) +- Use =semantic= for =imenu= only when =semantic-mode= is enabled + (thanks to bmag) +- Improve =spacemacs/python-execute-file= on ~SPC m c c~ to pre-fill + "python " as the compile command when using the universal prefix + argument ~SPC u SPC m c c~ (thanks to bmag) +**** Ruby +- Add support for =minitest= test runner (thanks to pawandubey) +**** Ruby on rails +- Declare prefix command for =ruby-mode= and =enh-ruby-mode= (thanks to selmanj) +**** Scala +- Remove =ensime= obsolete commands =ensime-db-start= and + =ensime-db-list-locals= (thanks to atreeyang) +**** Shell-scripts +- New key binding ~SPC i !~ to insert shebang line in script files using + package =insert-shebang= +**** Syntax checking +- Add support for new =flycheck= feature =flycheck-explain-error= on ~SPC e e~ + (thanks to fmdkdd) +**** Typescript +- Add support for auto-completion (thanks to TheBB) +**** Yaml +- Add support for syntax checking (thanks to rski) +**** Ycmd +- Improve search of nearest file in compilation database (thanks to deb0ch) +** 0.200.2 (2016/10/14) +*** Fixes +- Fix compatibility with the =xterm-color= package (thanks to bixuanzju) +** 0.200.1 (2016/10/09) +*** Fixes +- Restore missing support for custom Evil ex command key via the new + =dotspacemacs-ex-command-key= variable (thanks to Dietr1ch) +- core: Fix lazy installation of layers +- core: Fix Quelpa recipes construction (thanks to ynilu) +- core: Fix unwanted exclusion of packages when setting + =dotspacemacs-install-packages= to =all= +- core: Fix =spacemacs/ert-run-tests-buffer= to run only the tests in current + buffer (thanks to bmag) +*** Dotfile changes +- New variable =dotspacemacs-ex-command-key= to define the key to press + to enter an Evil ex command, default is ~:~ (thanks to Dietr1ch) +- Change default value of =dotspacemacs-startup-lists= to =nil= +*** Layer changes +**** Agda +- Enable auto-completion (thanks to bixuanzju) +**** Clojure +- Add support for =org-babel= (thanks to drewokane) +**** Git +- Adjust linum gutter to accomodate text-size changes (thanks to nspaeth) +**** Html +- Replace =jade-mode= by =pug-mode= (Jade is now Pug) (thanks to robbyoconnor) +**** Markdown +- Enable =orgtbl-mode=, this makes working with tables much nicer + (thanks to robbyoconnor) +**** React +- Enable =emmet-mode= (thanks to kaipr) +**** Shell +- Fix shell regular expression to add shell buffers to useful buffers + (thanks to TheBB) +**** Ycmd +- Improve performance on large projects by removing buffer parsing on newline + insertion (thanks to deb0ch) +*** Improvements +- Add support for transparency in multiple frames (thanks to TGThorax) +- Add ~J~ and ~K~ key bindings on the home buffer to navigate between widgets + (thanks to tobimensch) +- Various documentation improvements (thanks to andschwa, bmag, duianto, jazzpi, + Tritlo, vigilancer) +** 0.200.0 (2016/10/02) +*** IMPORTANT: Breaking changes +- The support for Emacs 24.3 has been dropped, Spacemacs needs at least Emacs + 24.4 to work correctly. +- =extensions= are deprecated as announced in previous release, if you still + have =extensions= directories you must rename them to =local= and move + the contents of the =extensions.el= files to the =packages.el= files adding + the keyword =:location local= to them in the package list. Refer to other + layers for examples (for instance the =python= layer) +- =-excluded-packages= variables are now deprecated as announced in + previous release, you must now use the keyword =:excluded t= of the package + list, see the =vim-empty-lines= layer for example. +- Key binding ~SPC :~ acting as =M-x= as been replaced by ~SPC SPC~. + If you want to revert to the old ~SPC :~ key binding set the new + variable =dotspacemacs-emacs-command-key= to ":". +- Key binding ~SPC f e h~ is now ~SPC h SPC~ +- Key bindings to delete things are now more consistent and use the ~d~ key. + We moved ~SPC w c~ and ~SPC w C~ to ~SPC w d~ and ~SPC w D~. +- Refactor ~SPC w~ and ~SPC b~ regarding deletion to clean redundant actions + and bring more consistency between the two prefixes (see + =Distribution layer changes= section in change log for more information) +- ~SPC j~ prefix has been modified to include =jump= commands: + - =avy= commands are now behind the prefix ~SPC j~ for =jump=: + - ~SPC j j~ to jump to a character in the buffer (works as an evil motion) + - ~SPC j l~ to jump to a line with avy (works as an evil motion) + - ~SPC j w~ to jump to a word in the current buffer (works as an evil motion) + - the following key bindings have been moved: + - ~SPC j j~ to split a line has been moved to ~SPC j n~ + - ~SPC j h~ and ~SPC j l~ have been moved to ~SPC j 0~ and ~SPC j $~ + respectively. + - ~SPC J~ to split a string or sexp has been moved to ~SPC j s~ +- All helm related key bindings under ~SPC h~ that are not about help have + been moved to different key bindings: + - ~SPC h b~ for =helm-filtered-bookmarks~is now ~SPC f b~ + - ~SPC h l~ for =helm-resume= is now ~SPC r l~ + - ~SPC h L~ for =helm-locate-library= is now ~SPC f e l~ +- Git key bindings under ~SPC g~ have been reorganised to free up some keys + and capitalize on =Magit= dispatch menu to keep things consistent (see + =git= section in change log for more information) +- Spacemacs layouts scope has been changed, now ~SPC b b~ lists the buffers of + the current layout, use ~SPC B b~ to list all the opened buffers. +- =org-indent= is now turned off by default +- Micro states are now called transient states, the macro + =spacemacs|define-micro-state= is deprecated, it is replaced by the new + =hydra= powered macro =spacemacs|define-transient-state=. +- Spacemacs layouts and workspaces transient states now exit when a layout or + workspace is selected, use ~C-0~ ... ~C-9~ to switch to a layout and keep + the transient state open. +- Remove support for the value =all= for =dotspacemacs-configuration-layers= + variable. To install all the packages supported by Spacemacs there is a new + variable =dotspacemacs-install-packages=. +- Remove layer variable =colors-enable-rainbow-identifiers= in =colors= layer, + You have to replace it by =colors-colorize-identifiers 'all=. +- The =bépo= layer has been replaced by the new layer =keyboard-layout=, see the + =README.org= of the layer for more info. +*** Hot new features +- Refactor of the layer system which should reduce startup time by 20~25%. +- New option to lazy install layers based on =auto-mode-alist= (similar to + =Prelude= lazy install of packages but for layers) via the variable + =dotspacemacs-enable-lazy-installation=. +- Add support for Ivy via the new layer =ivy=, when used it replaces =helm= + (thanks to justbur, d12frosted, goofansu, lszekeres, nixmaniack, ralesi, + TheBB, zilongshanren) +- Add support for different keyboard layouts via the new layer + =keyboard-layout=, currently supported layouts are =bépo= and =dvorak= + (thanks to StreakyCobra) +- New transient states powered by =Hydra=, they replace the deprecated + micro states (thanks to justbur) +- New =jump to definition= abstraction to handle multiple jump backends like + tags, dumb-jump etc... (thanks to TheBB) +- Global access to all available REPLs with ~SPC a '~ and `SPC m '~ (thanks to + AlejandroCatalina and TheBB) +- New debugging tools: + - press ~SPC q d~ to restart Emacs in debug mode with command line parameter + =--debug-init= + - press ~SPC q D~ to restart Emacs without Spacemacs but with a list of + selected packages to load. + (thanks to StreakyCobra) +- New way to install all the supported packages by Spacemacs via the variable + =dotspacemacs-install-packages= +- Improved =emacs= and =hybrid= editing styles to fix configuration + inconsistencies +- the =spacemacs= layer has been split into multiple layers to allow better + modularity (these layers are in =+spacemacs= sub-directory): + - spacemacs-completion + - spacemacs-editing + - spacemacs-editing-visual + - spacemacs-evil + - spacemacs-language + - spacemacs-layouts + - spacemacs-misc + - spacemacs-org + - spacemacs-ui + - spacemacs-ui-visual + (thanks to justbur) +*** New Layers +- asm in =+lang= (thanks to thudo) +- bibtex in =+lang= (thanks to JP-Ellis) +- csv in =+lang= (thanks to jb55) +- cfengine in =+tools= (thanks to nickanderson) +- helm in =completion= (moved from spacemacs-base) (thanks to justbur) +- imenu-list in =+tools= (thanks to bmag) +- ivy in =completion= (thanks to justbur) +- keyboard-layout (replaces the bépo layer) (thanks to StreakyCobra) +- nlinum in =+misc= (thanks to CodeFalling) +- pdf-tools in =+tools= (thanks to Andre0991) +- plantuml in =+lang= (thanks to robbyoconnor) +- rebox in =+tools= (thanks to choppsv1) +- shaders in =+lang= (thanks to Ell) +- slack in =+chat= (thanks to kostajh) +- systemd in =+tools= (thanks to StreakyCobra) +*** Dotfile changes +**** Changes for variable values and keywords +- Add new keyword =:packages= for the list of layers in variable + =dotspacemacs-configuration-layer=, =:packages= allow to select or exclude + packages from a layer. +- Add new keyword =:enabled-for= for the list of layers in variable + =dotspacemacs-configuration-layer=, this keyword controls the effect of a + layer on the other layers. For instance one can enable the =auto-completion= + only for the =python= layer with the value + =(auto-completion :enabled-for python)= + Note that this keyword is the opposite of the existing keyword + =:disabled-for=. (thanks to TheBB) +- The value of =dotspacemacs-editing-style= can now be a list containing the + keyword =:variables= (similar to =dotspacemacs-configuration-layers=) to + define additional variables to modify the behavior of the editing style. This + new keyword is useful for =hybrid= style which supports these variables: + - =hybrid-mode-enable-evilified-state=, if non nil then buffer are evilified, + - =hybrid-mode-enable-hjkl-bindings=, if non nil navigation on ~hjkl~ keys is + enabled (for instance in =helm= buffers), + - =hybrid-mode-default-state=, the default state when opening a new buffer, + by default it is =normal=. +- The value of =dotspacemacs-default-font= can now be a list (thanks to TheBB) +- New supported values for =dotspacemacs-startup-lists=: + - agenda + - todos + (thanks to tonyday567) +- Change default value of =dotspacemacs-startup-lists= to =nil= +- Change default value of =dotspacemacs-check-for-update= to =nil= +- Remove support for value =all= in variable =dotspacemacs-configuration-layers= +- Remove variable =dotspacemacs-startup-recent-list-size= which has been replaced + by adding support for cons cells in variable =dotspacemacs-startup-list= + (thanks to ralesi) +**** New variables +- New variable =dotspacemacs-enable-lazy-installation= to install a layer only + when a file with a supported type is opened. Possible values are =all=, + =unused= and =nil=: + - =unused= will lazy install only unused layers + - =all= will lazy install any layer that support lazy installation even the + used layers + - =nil= disable the lazy installation feature + Default value is =unused= +- New variable =dotspacemacs-frozen-packages=. It is a list of packages, these + packages cannot be updated or rollbacked. +- New variable =dotspacemacs-install-packages= which replaces the variable + =dotspacemacs-delete-orphan-packages=. This new variable defines the behavior + of Spacemacs for installed packages. + Possible values are =used-only=, =used-but-keep-unused= and =all=. + - =used-only= installs only explicitly used packages and uninstall any + unused packages as well as their unused dependencies. + - =used-but-keep-unused= installs only the used packages but won't uninstall + them if they become unused. + - =all= installs *all* packages supported by Spacemacs and never uninstall + them. + Default value is =used-only=. +- New variable =dotspacemacs-emacs-command-key= which replaces the variable + =dotspacemacs-command-key=. This variable represents the key to press after + the leader key to execute =M-x=. Default value is ~SPC~. +- New variable =dotspacemacs-folding-method= to allow choosing between + different code folding methods. Currently supported are =evil= and =origami=. + Default value is =evil=. (thanks to ralesi) +- New variable =dotspacemacs-ex-substitute-global=, if non-nil then + the behavior of the =g= flag in =:substitute= ex-command is inverted. + Default value is nil (thanks to fbergroth) +- New variable =dotspacemacs-smart-closing-parenthesis=. If non-nil pressing + the closing parenthesis ~)~ key in insert mode passes over any automatically + added closing parenthesis, bracket, quote, etc... + This can be temporary disabled by pressing ~C-q~ before ~)~. Default is nil. + (thanks to StreakyCobra) +- New variable =dotspacemacs-retain-visual-mode-on-shift=, If non nil ~>~ is + remapped to ~>gv~ and ~<~ is remapped to ~~ magit-submodule-popup + - ~SPC g A~ magit-cherry-pick-popup + - ~SPC g c~ magit-commit-popup + - ~SPC g C~ magit-checkout + - ~SPC g d~ magit-diff-popup + - ~SPC g D~ spacemacs/magit-diff-head + - ~SPC g e~ magit-ediff-compare + - ~SPC g E~ magit-ediff-show-working-tree + - ~SPC g f~ magit-fetch-popup + - ~SPC g F~ magit-pull-popup + - ~SPC g i~ magit-init + - ~SPC g l~ magit-log-popup + - ~SPC g L~ magit-log-buffer-file + - ~SPC g r~ magit-rebase-popup + - ~SPC g P~ magit-push-popup + - ~SPC g U~ magit-unstage-file + - ~SPC g x~ magit-reset-popup + - the above key bindings have been replaced by only one key binding ~SPC g m~ + displaying the =Magit= dispatch popup ++ =git-link= key bindings have been moved from ~SPC g h~ to ~SPC g l~ since + it provides support for other Git hosting services (not only GitHub) + - ~SPC g l c~ on a commit hash, browse to the current file at this commit + - ~SPC g l C~ on a commit hash, create link to the file at this commit + and copy it + - ~SPC g l l~ on a region, browse to file at current lines position + - ~SPC g l L~ on a region, create a link to the file highlighting the + selected lines ++ New key binding ~SPC g f h~ to get the commit history of the current file +**** GitHub +- Add support for =git-link= in =git-timemachine=, this allow to copy + the SHA-1 or selected lines links for the current commit (thanks to dcluna) +- Move clone commands under ~SPC g h c~: + - ~SPC g h c /~ search for a repository to clone it + - ~SPC g h c c~ clone and optionally fork repository + - ~SPC g h c r~ add a remote that is an existing fork of selected remote + - ~SPC g h c f~ fork remote in current user namespace + - ~SPC g h c u~ add upstream as remote +**** Go +- New layer variable =go-tab-width= (thanks to microamp) +- New key binding ~SPC m g c~ to open a clone of the current buffer with a + coverage info (thanks to JAremko) +- Add support for =gometalinter= via new layer variable + =go-use-gometalinter= (thanks to JAremko) +- Improve indentation (thanks to bogdanteleaga) +- Show function signatures (thanks to carlosgaldino) +**** Graphviz +- Add support for =org-babel= (thanks to choppsv1) +**** Gtags +- Refactoring of the layer to support more languages (thanks to choppsv1 and + TheBB) +- New layer variable =gtags-enable-by-default= to control whether =gtags-mode= + should be enabled by default or not (thanks to TheBB) +- New key binding ~SPC m g D~ to navigate to definition in another window + (thanks to NJBS) +- Remove =helm-gtags= lighter from mode line (thanks to NJBS) +**** Haskell +- New layer variable =haskell-completion-backend= to select the desired + completion backend (thanks to d12frosted) +- Add package =intero= (based on cydparser layer) (thanks to d12frosted) +- Add package =helm-hoogle= under ~SPC m h f~ (thanks to jb55) +- Add package =hlint-refactor= (thanks to cydparser) +- Add package =company-ghci= (thanks to dysinger) +- Add all =haskell-mode= key bindings to =literate-haskell-mode= + (thanks to jb55) +- Add support for =intero-apply-suggestions= (thanks to Tehnix) +- Swap key bindings ~SPC m F~ and ~SPC m f~ (thanks to ljli) +- Evilify =haskell-debug-mode= (thanks to d12frosted) +- Fix ~SPC m h i~ and ~SPC m h t~ key bindinds (thanks to d12frosted) +- Disable =haskell-tags-on-save= by default (thanks to bgamari) +- Remove =structured-haskell-mode= because of poor integration (thanks to + d12frosted) +- Remove =ghci-ng= support (thanks to d12frosted) +**** Helm +- Rename action =Add layer= to =Install layer= in =helm-spacemacs-help= + (thanks to CestDiego) +- Fix =helm-source-header= face not updating when changing themes + (thanks to ghoot) +- Enable fuzzy matching in all Helm sources (thanks to bling) +**** Html +- Add prefix command names (thanks to shanavas786) +- Use built-in =web-mode= pairing (disable =smartparens=) (thanks to TheBB) +- Enable =emmet-mode= in sass and scss modes (thanks to utkarshkukreti) +- Make =pug= files use =jade-mode= since Jade is now called Pug + (thanks to robbyoconnor) +- Fix =emmet= expansion if =yasnippet= isn’t turned on (thanks to TheBB) +**** Idris +- New key binding ~SPC m l~ for extracting lemma (thanks to bixuanzju) +- New key binding ~SPC m c~ for =idris-case-dwim= (thanks to bixuanzju) +- New key binding ~SPC m s q~ to quit the Idris process (thanks to bixuanzju) +- Register Idris REPL for ~SPC a '~ (thanks to bixuanzju) +- Add basic auto-completion (thanks to bixuanzju) +- Add support for =golden-ration= for *idris-holes* and *idris-info* + (thanks to houli) +- Add prefix command names (thanks to bixuanzju) +- Enhance =auto-completion= support for Idris layer, now =auto-completion= + will ask Idris process for completions (thanks to bixuanzju) +- Enable =auto-completion= in REPL (thanks to bixuanzju) +- Disable =golden-ratio= in holes buffer (thanks to houli) +**** IPython-notebook +- Move transient state key binding to ~SPC m .~ +- Evilify notebooklist buffer +- Fix loading of keymap (thanks to TheBB) +**** Jabber +- Add support for evilified key bindings (thanks to mssun) +- Don't overwrite mini-buffer when active (thanks to toshism) +**** Java +- Add support for =eclimd= with new key bindings: + - ~SPC m d s~ to start daemon + - ~SPC m d k~ to stop daemon + (thanks to elken) +**** JavaScript +- Add REPL via =skewer-mode= and =livid-mode= (thanks to dcluna) +- Fix offset detection in js2-mode (thans to TheBB) +- Diminish =tern= and =skewer= modes (thanks to cpaulik) +**** LaTeX +- Add prefix command names (thanks to NJBS) +- New key bindings for fill and uncomment: + - ~SPC m %~ to comment or uncomment a paragraph + - ~SPC m ;~ to comment or uncomment a region + - ~SPC m f e~ to fill LaTeX environment + - ~SPC m f p~ to fill LaTeX paragraph + - ~SPC m f r~ to fill LaTeX region + - ~SPC m f s~ to fill LaTeX section + (thanks to kccai) +- New key binding ~SPC m a~ for =TeX-command-run-all= (thanks to kccai) +**** Markdown +- New layer variable =markdown-live-preview-engine=, Possibe values are =eww= + (built-in browser) or =vmd= (installed with =npm=) +- Add package =vmd-mode= (thanks to bixuanzju) +- New key binding ~SPC m c P~ to live preview in Emacs' built-in browser + (thanks to lunaryorn) +**** mu4e +- Add package =mu4e-maildirs-extension= (thanks to choppsv1) +- Add package =mu4-alert= (thanks to zakkak) +- New key bindings: + - ~J~ to go to next unread thread marking other mail read on the way + - ~C-j~ to go to next header + - ~C-k~ to go to previoys header + (thanks to myrjola) +- Enable =org-mu4e= (thanks to choppsv1) +- Use =helm--completing-read-default= (thanks to jeizsm) +- Improve set account by "to" field (thanks to sorpaas) +**** OCaml +- New key binding ~SPC m = ~ to indent buffer with =ocp-indent= (thanks to NJBS) +- New key binding ~SPC m g o~ to list occurrences for identifier under point + (thanks to NJBS) +- Add support for =ocamllex= , =ocamlyacc= files (thanks to YasuharuIida) +- Remove key binding =merlin-refresh=, this function is obsolete since merlin + 2.0 (thanks to bixuanzju) +- Remove unused =flycheck= config, merlin is capable of doing it + (thanks to bixuanzju) +- Fix override of =exec-path= by =utop= configuration (thanks to bixuanzju) +**** Org +- Add package =org-reveal= (thanks to knl) +- Add local package =space-doc-mode= to improve org files readability + (thanks to JAremko) +- Add support for =org-babel= +- Replace =org-repo-todo= by =org-projectile= (thanks to TheBB) +- New layer variable =org-projectile-file= to set the filename where you want + to store project-specific TODOs. +- New key bindings for =org-agenda=: + - ~RET~ for =org-agenda-goto= + - ~M-RET~ for =org-agenda-show-and-scroll-up= + - ~SPC m a~ for =org-agenda= + - ~SPC m d~ for =org-agenda-deadline= + - ~SPC m s~ for =org-agenda-schedule= + - ~SPC m f~ for =org-agenda-set-effort= + - ~SPC m P~ for =org-agenda-set-property= + - ~SPC m :~ for =org-agenda-set-tags= + - ~SPC m I~ for =org-agenda-clock-in= + - ~SPC m O~ for =org-agenda-clock-out= + - ~SPC m q~ for =org-agenda-clock-cancel= + - ~SPC m q~ for =org-agenda-refile= +- New key bindings for =org-calendar=: + - ~M-l~ One day forward + - ~M-h~ One day backward + - ~M-j~ One week forward + - ~M-k~ One week backward + - ~M-L~ One month forward + - ~M-H~ One month backward + - ~M-J~ One year forward + - ~M-K~ One year backward +- New key binding ~SPC m h s~ for =org-insert-subheading= (thanks to jgertm) +- =org-indent= is now turned off by default because of the numerous glitches + (thanks to TheBB) +- Add code blocks support for =evil-surround= using ~:~ and ~#~ + (thanks to TheBB) +- Set =org-imenu-depth= to 8 (thanks to justbur) +- set =org-image-actual-width= to nil which allows to resize images in an org + buffer. +- Follow the confirm and abort conventions (thanks to myrjola) +**** OSX +- Add package =osx-dictionary= (thanks to nixmaniack) +- New layer variable =osx-use-dictionary-app= to use OS X dictionary app + instead of wordnet. Default value is =t=. (thanks to nixmaniack) +- Support pasting text with ~s-v~ in terminals (thanks to lyallcooper) +**** NixOS +- Add =nix-mode= to variable =spacemacs-indent-sensitive-modes= to disable + automatic indentation on pasting text (thanks to Profpatsch) +**** Pdf-tools +- New key bindings ~0~ and ~$~ to full left and right scroll + (thanks to Andre0991) +- New key binding ~zr~ to reset zoom factor (thanks to Andre0991) +**** Puppet +- Use =ruby-mode= for Puppetfile support (thanks to nwolfe) +**** Purescript +- Add package =flycheck-purescript= (thanks to diogob) +- New key binding ~SPC m g g~ (thanks to kRITZCREEK) +- Incorporate new functionality from =psc-ide=: + - New layer variable =purescript-add-import-on-completion= to add imports on + completion. Default value is =t=. + - New layer variable =purescript-enable-rebuild-on-save= to get a popup buffer + showing you your current warnings/errors one at a time. This is primarily + meant as an alternative to using flycheck. Default value is =nil=. + - New =psc-ide= key bindings: + - ~SPC m m b~ to rebuilds the current file and displays any warnings or + errors + - ~SPC m m i a~ to add an import for the identifier at the current cursor + position + - ~SPC m m i s~ to inserts a suggestion for the warning/error at the current + cursor position + - ~SPC m m t~ to add a new clause for the function signature at point + - ~SPC m m c s~ to casesplits on the identifier at the current cursor + position + - ~SPC m m q~ to quit the current psc-ide-server + - ~SPC m m L~ to load a specific module + (thanks to kRITZCREEK) +- Fix org layout if there is no agenda files and display an error message + (thanks to TheBB) +**** Python +- Add package =live-py-mode= (thanks to cpaulik) +- Add package =py-isort= to sort the imports (thanks to swaroopch) +- Add support for =org-babel= +- Replace package =py-yapf= with =yapfify=. =Yapfify= uses project settings + applicable to the file that yapf is called on. Also it shows an error if + =yapf= fails (thanks to JorisE) +- New layer variable =python-sort-imports-on-save=, if non-nil, automatically + sort imports on save. Default value is =nil= (thanks to swaroopch) +- New key binding ~SPC m r I~ to sort imports with =isort= python package + (thanks to TheBB) +- New key bindings to manage virtual environments: + - ~SPC m V a~ to activate a virtual environment in any directory + - ~SPC m V d~ to deactivate the active virtual environment + - ~SPC m V w~ to work on virtual environment in ~WORKON_HOME~ + (thanks to cpaulik) +- New key binding ~SPC m g b~ for =anaconda-mode-go-back= (thanks to jluttine) +- Add support for a lisp REPL in =hy= buffers (thanks to dannyfreeman) +- Add support for =pyenv= in =hy= buffers (thanks to dannyfreeman) +- Add support for =smartparens= in =hy= buffers (thanks to dannyfreeman) +- Fix =pylookup= key binding ~SPC m h H~ (thanks to darkfeline) +- Fix IPython 5 integration and make it work with =pyenv= (thanks to cpaulik) +- Make =pylookup= use std =completing-read= function (thanks to darkfeline) +- Make =pylookup.py= compatible with Python 2 and 3 (thanks to hemcsec) +- Enable lazy loading of =py-yapf=. +- Only disable =semantic-idle-summary= if =anaconda-mode= is used + (thanks to cpaulik) +- Set =comment-inline-offset= to 2 for =python-mode= Since python's PEP8 + recommends two spaces for inline spaces (thanks to xiaohanyu) +- Set breakpoints correctly when =pyenv= is used (thanks to cpaulik) +**** React +- Add support for =smartparens= (thanks to axyz) +- Add "^import React" to =magic-mode-alist= (thanks to axyz) +- Add =javascript-standard= as a =flycheck= checker (thanks to shahinism) +- Use node_modules version of eslint or global if not available (thanks axyz) +**** Restclient +- Add package =ob-http=. +- New key binding ~SPC m y~ to copy the query around point as a =curl= command + (thanks to d1egoaz) +**** Ruby +- Add package =rake= with key bindings: + - ~SPC m k k~ to runs rake + - ~SPC m k r~ to re-runs the last rake task + - ~SPC m k R~ to regenerates the rake cache + - ~SPC m k f~ to finds definition of a rake task + (thanks to asok) +- New =rspec= key binding ~SPC m t ~~ for + =rspec-toggle-spec-and-target-find-example= (thanks to asok) +- New =rspec= key binding ~SPC m t TAB~ for =rspec-toggle-spec-and-target= + (thanks to asok) +- New =rspec= key binding ~SPC m t d~ to run rspec in a specified directory + (thanks to dcluna) +- New key binding ~SPC b o~ to run bundle open (thanks to asok) +- Add =popwin= configuration to =*rake-compilation*= (thanks to nixmaniack) +- Add support for =Appraisals= files (thanks to jcf) +- Fix =chruby= configuration to find out the ruby version to use (thanks to asok) +- Enter automatically =inf-ruby-mode= when an =rspec= compilation hits a + breakpoint (thanks to dcluna) +**** Ruby on Rails +- Add =which-key= prefixes (thanks to ralesi) +**** Rust +- Remove layer variable =rust-enable-racer=, now =racer= is always used + (thanks to fbergroth) +- Remove package =company-racer= since =racer= works with default + =company= backends (thanks to fbergroth) +- Remove obsolete package =rustfmt= which has been integrated into =rust-mode= + (thanks to fbergroth) +- Remove =racer= lighter in the mode line (thanks to NJBS) +- New layer variable =rust-enable-rustfmt-on-save= (thanks to isphinx) +- New package =rustfmt= with new key binding ~SPC m =~ to format the buffer + (thanks to isphinx) +- New key binding ~SPC m c f~ to format all project files with =rustfmt= + (thanks to dmit) +- Add support for =Cargo.lock= and =.cargo/config= files for =toml-mode= + (thanks to Stebalien) +**** Scala +- Add support for =org-babel= (thanks to tonylotts) +- New layer variable =scala-use-unicode-arrows= to replace ASCII arrows + with unicode ones (thanks to moonranger) +- Enable lazy loading of =sbt-mode=. +- Disable Ensime autostart (thanks to d1egoaz) +- Use scala-mode instead of scala-mode-2 which is deprecated + (thanks to j-martin) +- Fix dot completion bug (thanks to gilbertw1) +**** Search-engine +- Denote all search functions as autoloadable (thanks to TheBB) +**** Shell +- New =eshell-z= package (thanks to CestDiego) +- New layer variable =shell-default-full-span=, if non-nil, the shell buffers + span full width of a window (thanks to dubnde) +- New key binding ~SPC p '~ for =projectile-shell-pop= (thanks to StreakyCobra) +- ~C-d~ is now bound to =eshell-delchar-or-maybe-eof= which checks if there is + a char after the point. If so, it performs the normal delete-char, + otherwise if quit eshell (thanks to microamp) +- Add support for the universal prefix argument to open a shell/term buffer in + the current window instead of a new window (i.e. ~SPC u SPC '~) +- Add support for =org-babel= +- Fix first =eshell= with no color (thanks to TheBB) +- Fix =projectile-multi-term-in-root= (~SPC p $ t~) (thanks to TheBB) +- Enable auto-jump to end of buffer in hybrid style (thanks to TheBB) +- Disable =global-hl-line-mode= in =shell-like= buffers (thanks to TheBB) +**** Shell-scripts +- Add package =company-shell= (thanks to joehillen) +- Enable =flycheck= in =sh-mode= (thanks to fbergroth) +- New key binding ~SPC m \~ for =sh-backslash-region= to add a backslash at + end of lines (thanks to fbergroth) +**** SML +- Improve indentation by binding ~RET~ to =reindent-then-newline-and-indent= + (thanks to cpaulik) +**** Spell-checking +- Use package =flyspell-correct= instead of =helm-flyspell= + (thanks to d12frosted) +- Add package =flyspell-popup= (thanks to usharf) +**** Spotify +- Enable lazy loading +**** Syntax-checking +- New key binding ~SPC e L~ to open the errors buffer and switch to it. +- Improve =flycheck= loading process (thanks to TheBB) +- Enable lazy loading of =flycheck=. +- Don't switch to =error-list= window if already on it (thanks to bmag) +- Fix bug where errors are not filtered correctly when setting + =flycheck-navigation-minimum-level= (thanks to maxigit) +**** Themes-megapack +- Add theme =Darkokai= (thanks to ekmecic) +**** Tmux +- Fix =golden-ratio= (thanks to TheBB) +**** Typescript +- Rewrite of the layer, see its =README.org= for more info (thanks to JAremko) +- New key binding ~SPC m s p~ to send region or buffer to the web playground + (thanks to JAremko) +- Add typescript format and make tide formatter the default (thanks to JAremko) +- Add support for =evil-shift-width= (thanks to TheBB) +- Allow =tsfmt= to use the local project's configuration (thanks to overminder) +- Swap ~C-j~ and ~C-k~ in tide reference mode (thanks to zilongshanren) +**** Version-control +- Fix git gutter toggle (thanks to ralesi) +- Fix errors with graphical elements in daemon mode (thanks to TheBB) +**** Vim-unimpaired +- Keep the point at the same location when calling + =evil-unimpaired/insert-space-above= and =evil-unimpaired/insert-space-below= + (thanks to jschaf) +- New key bindings ~] q~ and ~[ q~ for =spacemacs/next-error= and + =spacemacs/previous-error= (thanks to bling) +**** Windows-scripts +- Add support for =.cmd= and =.psm1= files (thanks to ralesi) +**** Yaml +- Fix auto-completion (thanks to perfectayush) +*** Core Changes +- Refactor layer system to allow a 20~25% performance boost on startup. +- Move bootstrap packages from =core-spacemacs.el= to a new layer called + =spacemacs-bootstrap=. +- Checking for new version on startup behavior has been tweaked to lower the + frequency on the checks and reduce the number of operations made: + - reduce number of required git commands per check from 3 to 1 + - remove recurrent version check every 6 hours, i.e. the check happens only + at startup + - rate limit the checks to once per day + - change default value of variable =dotspacemacs-check-for-update= to =nil= + - make function =spacemacs/check-for-new-version= interactive so checking + for a new version can be done on demand. +- New macro =spacemacs|define-jump-handlers= to define jump backends for a given + mode (thanks to TheBB) +- Implement an API for =local-vars-hook= which allows to read some directory + local variables before executing an hooked function (thanks to d12frosted) +- Make function =spacemacs/get-last-version= interactive +- New file in layers called =layers.el=, this file is responsible to declare + layer dependencies. +- New variable =spacemacs-start-directory=. With this new variable, user can + easily load spacemacs anywhere (thanks to exaos) +- New variable =spacemacs-default-company-backends= which allow the user to + fine tune the default company backends inherited by all the modes + (thanks to izahn) +- New command line parameters =--no-layer= and =--distribution= + - =--no-layer= deactivates all the layers except the distribution layer + - =--distribution= allows to change temporarily the distribution +- New funtion =spacemacs/report-issue= to create GitHub issues from within + Emacs based on a template (thanks to dwang20151005) +- New functions =configuration-layer/remove-layer= and + =configuration-layer/remove-layers=. +- New function =spacemacs/describe-package= giving useful information on a + package in the Spacemacs layers context (key binding ~SPC h d P~) +- New keyword =:toggle= for package lists =-packages=. Its value can be a + symbol or a list. A package is considered to be used if the toggle evaluates + to non nil. By default =:toggle= is =t=. +- New keyword =:min-version= for package lists =-packages=. Providing a + min-version allows to fetch the elpa version of a built-in package. +- New value =bootstrap= for package =:step= keyword, it is used for bootstrap + packages. +- New value =site= for package =:location= keyword, a site package is a package + installed on the host by a third party (ie. =mu4e= which is installed by =mu=) +- New documentation formatting tool =doc-fmt= (thanks to JAremko) +- New keywords for =spacemacs|add-toggle= macro: + - =:prefix= a symbol that is bound to the raw prefix argument + (as in =(interactive "P")= forms). + - =:on-message= an expression overriding the default 'on' toggle + message (useful to document a toggle's argument) + - =:mode= a minor mode, when provided, =:on=, =:off= and =:status= are + automatically defined to support the minor mode. + (thanks to dcluna and TheBB) +- Print toggles messages only when the toggle functions are used interactively + (thanks to bmag) +- Add =Quelpa= support for local packages which means that local packages can be + installed like any other ELPA package (thanks to d12frosted) +- Add footer in home buffer +- Add support for functions for =:status= in =spacemacs|add-toggle= + (thanks to TheBB) +- Add support for themes =omtose-darker= and =omtose-softer= (thanks to Cifer-Y) +- Update base16 themes to match new list (thanks to belak) +- Add emojis to issue template (thanks to CestDiego) +- Remove variable =user-dropbox-directory= +- Center spacemacs banner in window at startup (thanks to ralesi and deb0ch) +- Center ascii banners in window at startup (thanks to deb0ch) +- Display warning buffer at the bottom of the screen when installing packages. +- Display more information about the number of loaded packages in the home + buffer: + - =e= elpa + - =r= recipe + - =l= local + - =b= built-in +- Display a numerical progression in mode-line representing the number of + packages to configure. +- Display a warning message when a non-excluded package has no pre-init, init + or post-init function in a layer. +- Merge version strings into one string displayed in the left-hand side: + =spacemacs-version@emacs-version (distribution)= +- Improve =spacemacs|diminish= function (thanks to TheBB) +- Use =$SPACEMACDIR/init.el= instead of =~/.spacemacs= when both exist + (thanks to bmag) +- Fix font definition for first frame in daemon mode (thanks to StreakyCobra) +- Fix message format in =init.el= (thanks to YasuharuIida) +- Fix random banner display when closing and reopening the home buffer + (thanks to TheBB) +- Fix home buffer random banner choice (thanks to deb0ch) +- Fix =.gitignore= file to enable submodule update (thanks to jgmize) +- Optimize function =spacemacs//get-package-directory= (thanks to ivanbrennan) +- Improving performance by avoiding to visit dump files in function + =spacemacs/dump-vars-to-file= (thanks to bmag) +*** Other fixes and improvements +- Fix all documentation links on GitHub (thanks to JAremko) +- Improve Spacemacs themes readability of highlight-persist and smartparens + overlays when there is an active region (thanks to nashamri) +- Typos and documentation improvements (thanks to adrsta, Andre099, 1andreas-h, + axyz, balajisivaraman, benansell, bmag, brettcannon, cpaulik, ChuntaoLu, + d12frosted, d1egoaz, darkfeline, dathinaios, deb0ch, Dominionized, duianto, + eapolinario, eareese, jfchevrette, gilch, hasufell, hghwng, ivanbrennan, + jgertm, jkrmr, johankj, Johnstone-Tech, jonboiser, jpfairbanks, jschnurr, + kalouantonis, Karunamon, krobelus, li-xinyang, loxaxs, lzhoucs, madand, + Marlin-Na, mathcass, maxigit, microamp, nashamri, NJBS, ohspite, + pablooliveira, padi, paulyoung, rbanffy, robbyoconnor, robert-m-johnson, + roryokane, royxue, sbdchd, sebastianpoeplau, shanavas786, sooheon, splaspood, + StreakyCobra, svanburen, taheris, tchajed, TheBB, tj64, tko, tonylotts, + trenpixster, voidlily, WillianPaiva, WuTheFWasThat, xiaohanyu, xfq, zifeo, + zjyjer) +- Other contributions (thanks to hujianxin, nixmaniack) +*** Core team members +**** Current +- Sylvain Benner (syl20bnr) +- Boris (d12frosted) +- Eivind Fonn (TheBB) +**** Old +- Fabien Dubosson (StreakyCobra) +- Justin Burkett (justbur) +* Release 0.105.x +** 0.105.22 (2016/08/19) +*** Fixes +- Rename the =emacs-eclim= package to =eclim= (thanks to CestDiego) +** 0.105.21 (2016/06/08) +*** Fixes +- Fix hybrid state when escaping to normal state +- Fix installation instructions on OS X (thanks to d12frosted) +- Fix broken =vinegar= key bindings +- Fix =tmux= layer (thanks to aaronjensen) +- Fix =scala= layer + - Use =scala-mode= instead of =scala-mode2= (thanks to j-martin) + - Fix =sbt= command to generate =ensime= configuration (thanks to d1egoaz) +** 0.105.20 (2016/05/10) +*** Fixes +- Update Spaceline configuration for new version +** 0.105.19 (2016/04/20) +*** Fixes +- Fix =dired-x= autoload (thanks to darkfeline) +- Fix ~SPC f y~ in =dired= buffers (thanks to dcluna) +- Fix ~C-i~ key binding for =evil-jump-forward=. +- Fix ~SPC q r~ to restart Emacs and restore Spacemacs layouts. +- Fix go to next/previous error when a compilation buffer is opened + (thanks to dennishamester) +- Fix error when opening =spacemacs-helm= with unknown org documentation + files (thanks to kuangdash) +- Fix wrong states when exiting =evil-lisp-state= and =evil-iedit-state= + while using the =emacs= editing style. +- Fix ASCII banners first line being overwritten by the version numbers +- Use MELPA version of =persp-mode=, the package may need to be deleted + manually from the =elpa= directory and a restart of Emacs may be + required. +- Discover layers before running dotfile tests when reloading the + configuration, prevents false negatives (thanks to TheBB) +- Remove duplicated configuration for =eldoc= (thanks to zilongshanren) +*** Layer changes +**** Clojure +- Fix usage of deprecated =cider-turn-on-eldoc-mode=, using =eldoc-mode= + instead (thanks to tekacs and sooheon) +**** Elm +- Fix text copy/paste +- Fix auto-completion +**** Javascript +- Improve detection of =tern= binary, if =tern= is not found a message + is displayed in the =*Messages*= buffer (thanks to nixmaniack) +**** Go +- Fix execution of tests with function names containing underscores + (thanks to jaffee) +**** Python +- Use MELPA version of =py-yapf= package (thanks to cpaulik) +- Fix =makefile= of =pylookup= (thanks to hemcsec) +- Disable =semantic-idle-summary= which obfuscates =anaconda= information + in the minibuffer (thanks to cpaulik) +**** Scala +- Fix =ensime-typecheck-current-file=, rename it to + =ensime-typecheck-current-buffer= +- Fix =scala-enable-eldoc-mode=, rename it to =scala-enable-eldoc= + (thanks to channingwalton) +**** Shell +- Fix error when attempting to delete the last shell window + (thanks to joelmccracken) +**** Tmux +- Fix loading of package (thanks to aaronjensen) +**** Vinegar +- Correct =dired= configuration (thanks to StreakyCobra) +*** Improvements +- Various documentation improvements (thanks to d12frosted, gilch, ksrb, + nixmaniack, StreakyCobra, TheBB, The-Compiler, xiaohanyu) +** 0.105.18 (2016/04/10) +- Revert hotfix for =Yasnippet=, the bug has been fixed upstream and is now + available in MELPA (thanks to TheBB) +- Remove obsolete package =evil-jumper= which is now part of =evil= + (thanks to justbur) +** 0.105.17 (2016/04/09) +- Hotfix for Yasnippet, using stable version until resolution of + https://github.com/capitaomorte/yasnippet/issues/673 +** 0.105.16 (2016/04/01) +- Add FAQ entry about HTTPS issues (thanks to TheBB) +- Add startup list to Zemacs home buffer. +** 0.105.15 (2016/04/01) +*** Improvements +- Emacs to THE MAX! Release of Zemacs! +*** Layer changes +**** Javascript +- New layer variable =javascript-disable-tern-port-files=, when non nil + tern port files are not created. Default value is nil. (thanks to mijoharas) +**** Swift +- Fix all =swift= major-mode key bindings (thanks to xinranmsn) +** 0.105.14 (2016/03/09) +*** Fixes +- Fix bad window index for =neotree= buffer (thanks to bmag) +- Fix error when using ~SPC p l~ right after Emacs started (thanks to bixuanzju) +*** Layer changes +**** Go +- Fix bug when there is no test suite when running tests + (thanks to bogdanteleaga) +**** React +- Fix broken =helm-imenu= (thanks to huaoguo) +*** Improvements +- Various documentation improvements (thanks to triklsbg) + +** 0.105.13 (2016/03/06) +*** Fixes +- Fix smooth-scroll toggling at startup (thanks to TheBB) +- Fix auto-completion toggle ~SPC t a~ (thanks to TheBB) +*** Layer changes +**** Clojure +- Fix function name =cider-pop-back= (thanks to mlachmih) +**** Scala +- Fix various function names: + - =ensime-refactor-diff-organize-imports= + - =ensime-refactor-diff-extract-method= + - =ensime-refactor-diff-rename= + - =ensime-refactor-diff-extract-local= + (thanks to TheBB) +*** Improvements +- Reformat =README.md= title section. +- Add a GitHub pull request template (thanks to robbyoconnor) +** 0.105.12 (2016/03/02) +*** Fixes +- Fix activation of package dependencies +- Fix =smooth-scrolling= error due to recent changes in package repository +*** Layer changes +**** Distribution +- New key binding ~SPC t v~ to toggle smooth scrolling. +**** C-C++ +- Add notes on related layers (thanks to magthe) +- Remove srefactor from static package list (thanks to magthe) +- Set paths for C headers from clang (thanks to magthe) +**** Evil-snipe +- Disable =evil-snipe= in =ranger= (thanks to TheBB) +**** Haskell +- Fix bad indentation when pasting text (thanks to robbyoconnor) +**** Markdown +- Add support for =rust= code blocks (thanks to panicbit) +**** Org +- Fix custom Spacemacs layout when =org-agenda-files= isn't a list. + The org-agenda-files variable can be the name of a directory or a file. + (thanks to jmiven) +**** Osx +- Fix =osx-use-options-as-meta= for Emacs 25 (thanks to d12frosted) +**** React +- make =evil-matchit= jump between html/jsx tags (thanks to tko) +**** Racket +- Add command prefix names for =racket-mode= key bindings + (thanks to rodrigosetti) +**** Scala +- Rename =ensime-refactor-inline-local= to =ensime-refactor-diff-inline-local= + (thanks to chessman) +**** Shell +- Fix reverse key bindings for comint-previous/next (thanks to olejorgenb)) +- Scope the aliases under =eshell= so they are not defined globally + (thanks to bling) +**** Themes megapack +- Add =railscasts-theme= (thanks to olsonjeffery) +*** Improvements +- Improve =toggle-maximize-centered-buffer= (thanks to justbur) +- Add =display-graphic-p= to ~SPC h d s~ (thanks to TheBB) +- Various documentation improvements (thanks to d12frosted, davbo, marcopaga, + microamp, nixmaniack, NJBS, SShrike, TheBB, Tinche, triklsbg, xfq) +** 0.105.11 (2016/02/18) +Improve loading robustness: +- When an ELPA repository is down Spacemacs will now be able to finish loading +- Spacemacs will use the default theme (i.e. no theme) if there is any error + during the download of the starting theme. +** 0.105.10 (2016/02/18) +*** Fixes +- Fix re-toggle of fullscreen when pressing ~SPC f e R~ (thanks to MadAnd) +- Fix display of recent bookmarks without filename (thanks to lislon) +- Fix =toggle-maximize-buffer= (thanks to justbur) +- Remove files from rollback slot list (thanks to microamp) +- Don't catch errors while loading if =--debug-init= is provided. +- Don't change scratch major mode if buffer exists (thanks to TheBB) +- Restore windows layout when quitting =ediff= (thanks to fbergroth) +- Ensure that =pcache-directory= ends in a slash (thanks to rpglover64) +- Ensure new Spacemacs layouts only shows home buffer (thanks to bmag) +*** Improvements +- Add a bug report template for GitHub issues on ~SPC h I~ + (thanks to StreakyCobra) +- Add files used by =eww= to =.gitignore= (thanks to ahyatt) +- Various enhancements for themes handling (thanks to TheBB) +- Allow =default= theme (no theme) to be defined in =dotspacemacs-themes= + (thanks to izahn) +- Add support for missing =base16= themes (thanks to curtmack) +- Update recent files list when a file is renamed (thanks to lislon) +- Improve frame-fullscreen and maximize-frame toggles (thanks to MadAnd) +- Diminish relative line numbers lighter in mode-line (thanks to peterhoeg) +- Various documentation improvements (thanks to balajisivaraman, crododile, + darkfeline, ernestas, franciscoj, j4, kRITZCREEK, nixmaniack, numkem, + robbyoconnor, TheBB, tonylotts) +*** Layer changes +**** Auto-completion +- Better choice of =company= front-ends (thanks to fbergroth) +**** C-C++ +- Get =clang= args even if =flycheck= isn't installed (thanks to TheBB) +**** Clojure +- Fix renamed =cider-test-run-tests= function (thanks to AlejandroCatalina) +- Substitute =align-cljlet= with =clojure-align=. =align-cljlet= was deprecated + in favour of the vertical alignment in the clojure-mode package (thanks to + vise890) +**** Elm +- Fix =flycheck= not working on sub-directories (thanks to AlejandroCatalina) +**** ERC +- Fix initialisation of =erc-terminal-notifier= (thanks to Andre0991) +**** Gnus +- Remove =gnus-fetch-old-headers= customization which was causing slowdown + while consulting some newsgroups (thanks to StreakyCobra) +**** Haskell +- Fix broken =hoogle-lookup-from-local= (thanks to jb55) +**** Html +- Remove =.jsx= from =web-mode= auto mode alist (thanks to lunaryorn) +**** Org +- Remove ~H~ and ~L~ key bindings from =evil-org= (thanks to choppsv1) +**** Python +- Add missing =py-yapf= configuration (thanks to TheBB) +- Enable =anaconda-eldoc-mode= (thanks to TheBB) +- Only load =pyenv= if it is installed (thanks to cpaulik) +**** Racket +- Disable =company-quickhelp-mode= only when it is already enabled + (thanks to syohex) +**** React +- Disable auto-quote of attributes (thanks to TheBB) +- Fix react magic mode, it will now recognize =/** @jsx React.DOM */= in the + first line of a file (thanks to EMayej) +**** Ruby +- Use =popwin= for =rspec= compilations (thanks to joshcass) +- Do not force =rspec-mode= on ruby files (thanks to morhekil) +**** Rust +- Fix indentation setting for =evil-shift-width= (thanks to Stebalien) +**** Shell +- Set the correct shell-pop size variable (thanks to TheBB) +**** Themes-megapack +- Add =dracula= theme (thanks to MarkRedeman) +- Add =omtose-phellack= theme (thanks to duien) +- Add =majapahit= theme (thanks to kostajh) +**** Tmux +- Fix key bindings ~C-h~, ~C-j~, ~C-k~ and ~C-l~ (thanks to justbur) +**** Vagrant +- New key binding ~SPC V R~ to reload to restart VMs (thanks to kostajh) +**** Version control +- Fix bugs due to wrong mode for =diff-hl= margin (thanks to abaw) +- Fix =git-gutter= linum setup (thanks to person808) +**** Wakatime +- Fix wakatime-dashboard url (thanks to hallfox) +** 0.105.9 (2016/01/17) +*** Improvements +- Fix error on Microsoft Windows 10 OS regarding missing =printf= command + (don't call =exec-path-from-shell= function on Microsoft Windows) + (thanks to syohex) +- New key bindings ~C-e~ and ~C-y~ in evilified buffers to scroll lines + (thanks to CestDiego) +- Remove key binding hack for =evil-jumper= since the issue has been fixed + upstream (thanks to justbur) +- Remove unused =init-dired+= function (thanks to AlejandroCatalina) +- Various documentation improvements (thanks to balajisivaraman, jcppython, + jmiven, jorisE) +*** New conventions +- =use-package= code guidelines +- Key bindings documentation only need to mention ~SPC~ prefix +*** Layer changes +**** Markdown +- Add syntax highlighting for =R= code blocks (thanks to rustyplanet) +**** Org +- Fix early creation of empty =org= directory (thanks to tboby) +- Add default key binding ~C-c c~ for =org-capture= + (thanks to AlejandroCatalina) +**** Spacemacs +- Add =bracketed-paste= package to improve pasted text in terminals + (thanks to AlejandroCatalina) +** 0.105.8 (2016/01/12) +*** Fixes +- Fix the red mode-line when error occurs during loading +- Fix and improve layer templates and layer creation (thanks to chrisbarrett) +- Fix and simplify copyrights in file headers +- Fix =.gitignore= pattern for =private= directory (thanks to jballanc) +*** Improvements +- New key binding ~SPC h d l~ to describe the last key pressed, useful + when reporting a bug (thanks to StreakyCobra) +- Sort alphabetically the list of package to be update on the home buffer +- Improve =describe-system-info= function with completion engine info + (ivy completion engine will be available in 0.106) (thanks to StreakyCobra) +- Add link to =BountySource= page to =README.md= (thanks to houli) +- Move =request= storage folder to =.cache= directory +*** Layer changes +**** Markdown +- Add support for javascript code blocks syntax highlighting + (thanks to AlejandroCatalina) +** 0.105.7 (2016/01/11) +*** Fixes +- Fix missing ~q~ key binding in the home buffer introduced in =0.105.5= + (thanks to justbur) +**** ERC and RCIRC layers +- Properly add all opened buffers to custom layouts + (thanks to AlejandroCatalina) +**** Go layer +- Prevent from clobbering environment variables if already set (thanks to whilp) +**** Haskell +- Remove reference to undefined function =haskell-cabal-hook= + (thanks to chrisbarrett) +**** Python layer +- Fix errors when reading =.python-version= files (thanks to fbergroth) +*** Dotfile changes +- New variable =dotspacemacs-scratch-mode= to configure the default major-mode + for the scratch buffer, default value is =text-mode= (thanks to TheBB) +*** Improvements +- Display a list of packages to update when pressing the =[Update packages]= + in the home buffer +- Add highlight of TODOs in text mode files (thanks to StreakyCobra) +- Various documentation improvements (thanks to StreakyCobra, TheBB) +** 0.105.6 (2016/01/09) +*** Fixes +- Fix shadowed ~TAB~ (~C-i~) key in terminal (thanks to StreakyCobra) +** 0.105.5 (2016/01/08) +*** Fixes +**** Core +- Fix unavailable major mode leader keys in =evilified= buffers + (thanks to justbur) +- Fix ~b~ key binding on home buffer (thanks to justbur) +*** Layer changes +**** Spacemacs +- Bind =evil-jumper/forward= to == to make it work when + =dotspacemacs-distinguish-gui-tab= is non nil (thanks to TheBB) +**** Auto-completion +- Add =~/.spacemacs.d/snippets= directory to the snippet sources of + yasnippet. +- Don't enter =evil-insert-state= after =aya-expand= when =holy-mode= if active + (thanks to abaw) +** 0.105.4 (2016/01/07) +*** Fixes +**** Core +- Fix home buffer obfuscating opened file when Emacs starts (thanks to justbur) +**** Ruby layer +- Fix =rbenv= loading (thanks to TheBB) +**** Spacemacs layouts +- Fix jumping to last layout when the last layout is the default layout + (thanks to TheBB) +**** Yasnippet +- Fix and improve =yasnippet= loading (thanks to TheBB) +** 0.105.3 (2016/01/06) +*** Fixes +**** Emacs lisp layer +- Fix wrong hook for adding evil text objects (thanks to justbur) +**** Ledger +- Fix missing major mode key bindings (thanks to travisbhartwell) +**** Ocaml +- Fix smartparens configuration (thanks to edwintorok) +*** Layer changes +**** Spacemacs +- Improve robustness of =spacemacs/toggle-transparency= function + (thanks to justbur) +*** Other improvements +- Fix layer install section in all layers READMEs to be more explicit + and remove a source of confusion for new comers (thanks to mattbaker) +- Typos and documentation improvements (thanks to d12frosted) +** 0.105.2 (2016/01/05) +- Fix empty mode-line when a new Spacemacs version is available + (thanks to TheBB) +** 0.105.1 (2016/01/05) +*** Fixes +- Fix and improve support for GUI clients using a server started with + =emacs --daemon=: + - Fix font + - Fix graphical Spaceline separator + - Fix theme colors (most of them) + - Fix Spacemacs logo in home buffer + - Add support for graphical Nyan Cat +**** Spacemacs layer +- Fix broken =evil-escape-mode= when toggling =holy-mode= (emacs style) +**** Bépo layer +- Fix support for Magit (thanks to StreakyCobra) +**** Magit layer +- Fix ~TAB~ key bindings to expand/collapse sections (thanks to justbur) +**** Scala layer +- Fix a typo in function name =scala-auto-insert-asterisk-in-comments= + (thanks to lunaryorn) +*** Layer changes +**** Spacemacs +- New key binding ~SPC h n~ to browse the Emacs news (thanks to lunaryorn) +**** Themes megapack +- Add =monokai= theme (thanks to jonboiser) +*** Other improvements +- Typos and documentation improvements (thanks to mjs2600, person808, + robbyoconnor, StreakyCobra, TheBB and xfq) +** 0.105.0 (2016/01/04) +*** IMPORTANT - Breaking changes +- ~SPC l~ for =avy-goto-line= is now under ~SPC y~. ~SPC l~ is for + spacemacs layouts. +- ~SPC a p~ is now for =list-processes= and ~SPC a P~ for =proced=, + =paradox= is now on ~SPC a k~. +- ~SPC s l~ is now used to bring back last search buffer and ~SPC s j~ + is for jumping into a file using =imenu=. +- In home buffer, jumping to bookmark list is now on ~b~. +- Projectile: caching is now disabled by default, while it should not + break anything if you have some functions relying on caching being + enabled be sure to activate it explicitly in your dotfile with + =(setq projectile-enable-caching t)=. +- Git: new key bindings scheme using =evil-magit= package. If you want + to continue to use the old evilified bindings add =evil-magit= package + to the =dotspacemacs-excluded-packages= variable of your dotfile. +- Ruby: the default major mode is now the Emacs built-in =ruby-mode=. + If you want to continue to use =enh-ruby-mode= set the layer variable + =ruby-enable-enh-ruby-mode= to =t=. +*** Hot new features +- Spacemacs layouts under ~SPC l~ with =eyebrowse= integration + (thanks to CestDiego, bmag and TheBB) +- Revamped Magit key bindings thanks to =evil-magit= which provides + a faithful port of Magit UX using Vim key bindings (thanks to justbur) +- Brand new website on =spacemacs.org= with =readthedocs= documentation pages + (thanks to bobbyangelov, nashamri and TheBB) +- New command line parameters for =emacs=: + - =--timed-requires=, =--profile= and =--adv-timers [n]= to profile and + benchmark Emacs initialization (thanks to justbur) + - =--insecure= to disable https when fetching ELPA packages. + - =--debug-init= (built-in Emacs parameter) now enable Spacemacs verbose + messages when Emacs is loading. +*** Other important notes +- All =extensions= directories have been renamed to =local=. =extensions= + directories will be deprecated in 0.106.0. +- The =evil-leader= functions =evil-leader/set-key= and + =evil-leader/set-key-for-mode= are now obsolete and will be deprecated + in a future version. +*** New conventions +- Commit and abort commands conventions: + - ~SPC m ​,​~ and ~SPC m c~ to Valid/Confirm + - ~SPC m a~ and ~SPC m k~ to Abort/Discard + (thanks to StreakyCobra) +- Update evilified state rebinding conventions: + ~SPC~ to ~​'​~, ~/~ to ~\~ and ~:~ to ~|~ +*** New Layers +- bepo in =keyboard-layouts= (thanks to StreakyCobra) +- command-log in =tools= (thanks to bmag) +- elfeed in =tools= (thanks to d12frosted) +- evil-cleverparans (thanks to justbur) +- geolocation (thanks to Gogs) +- mu4e in =email= (thanks to darkfeline) +- octave in =lang= (thanks to izahn) +- selectric in =fun= (thanks to algernon) +- spacemacs-layouts (thanks to CestDiego) +- speed-reading (thanks to AdrieanKhisbe) +- swift in =lang= (thanks +- theming (thanks to TheBB) +- typography (thanks to lunaryorn) +- vimscript in =lang= (thanks to ralesi) +*** Dotfile changes +- New variable =dotspacemacs-elpa-https= if non nil use HTTPS otherwise + use HTTP. Default is t. +- New variable =dotspacemacs-elpa-timeout=, default is 5 seconds +- New variable =dotspacemacs-check-for-update= to toggle check for Spacemacs + updates at startup, default is =t= (thanks to tenthousandfailures) +- New variable =dotspacemacs-default-layout-name= to set the name of the + default Spacemacs layout. +- New variable =dotspacemacs-display-default-layout= to toggle display + of the name of the default layout in the mode-line, default is =nil=. +- New variable =dotspacemacs-auto-resume-layouts= to resume automatically + the last layout when Emacs starts. +- New variable =dotspacemacs-max-rollback-slots= to set the maximum number + of rollback slots to keep in the cache. +- New variable =dotspacemacs-line-numbers= to enable line numbers + globally, possible values are =relative=, =t= or =nil=. + Default is =nil= (thanks to StreakyCobra) +- New variable =dotspacemacs-distinguish-gui-tab=, if non nil then ~TAB~ + and ~C-i~ are distinct using GUI Emacs, default is =nil= (thanks to justbur) +- New variable =dotspacemacs-startup-recent-list-size= to configure the + number of recent files to display in the home buffer (thanks to bmag) +- New variable =dotspacemacs-whitespace-cleanup= to enable automatic + cleanup of whitespace on save. Possible values are =all=, =trailing=, + =changed= or =nil=. Default is =changed= (thanks to nixmaniack) +- Remove =dotspacemacs-verbose-loading=, it is now enabled automatically + with the command line parameter =--debug-init= +*** Distribution layer changes +- New key binding ~SPC *~ to search for current selection or symbol under point + in the current project. ~SPC /~ is similar but does not auto-fill the search + pattern. This new behavior mimics ~*~ and ~/~ keys of Vim + (thanks to StreakyCobra) +- New key binding ~SPC h d F~ to describe a face, by default the face under + point is selected (thanks to TheBB) +- New key binding ~SPC h k~ to display the top level of key bindings + (thanks to justbur) +- New key binding ~SPC h d K~ to describe a keymap (thanks to justbur) +- New key binding ~SPC h SPC~ for =helm-spacemacs= (~SPC f e h~ is still + available) (thanks to StreakyCobra) +- New key binding ~SPC f E~ to edit a file with =sudo= (thanks to cpaulik) +- New key binding ~SPC q r~ to restart Emacs (thanks to nixmaniack) +- New key binding ~SPC c q~ to close compilation window (thanks to joehillen) +- New key binding ~SPC c k~ to kill current compilation (thanks to jb55) +- New key binding ~SPC x o~ to open URLs with =avy= (thanks to StreakyCobra) +- New key binding ~backtab~ to go up a directory in =helm= (thanks to justbur) +- New key binding ~SPC b s~ to switch to =*sratch*= buffer (thanks to StreakyCobra) +- New key bindings in =help-mode= buffers to navigate links: + - ~g b~ or ~[~ to go back (same as clicking on =[back]= button) + - ~g f~ or ~]~ to go forward (same as clicking on =[forward]= button) + - ~g h~ to go to help for symbol under point + (thanks to AdrieanKhisbe) +- New key bindings under ~SPC i l~ to insert lorem ipsum text to a buffer + (thanks to lunaryorn) +- New key bindings for local and directory variables: + - ~SPC f v d~ to add a directory variable, + - ~SPC f v f~ to add a local variable to the current file, + - and ~SPC f v p~ to add a local variable to the first line of the current file + (thanks to lunaryorn) +- New key bindings ~C-q~ in helm buffers to jump to a candidate using =avy= + (thanks to ralesi) +- Bind ~g~ and ~G~ in helm micro-state (thanks to dsdshcym) +- ~TAB~ now correctly jump between links in help buffers with motion state + (thanks to justbur) +- ~SPC t n~ now toggle line numbers locally instead of globally + (thanks to StreakyCobra) +- ~SPC a p~ is now for =list-processes= (thanks to calebmeyer) +- ~SPC f J~ now open junk file using =helm= (thanks to nixmaniack) +- Move toggle for =vi-tilde-fringe= to ~SPC T ~~ +- Move =paradox= to ~SPC a k~ (thanks to calebmeyer) +- Move =proced= to ~SPC a P~ (thanks to calebmeyer) +- Add =space-line= package which replaces the =powerline= package + (thanks to TheBB) +- Add =help-fns+= package (thanks to justbur) +- Add =helm-flx= package (thanks to TheBB) +- Add =hl-todo= package (thanks to StreakyCobra) +- Add =lorem-ipsum= package (thanks to StreakyCobra) +- Add automatic setup of =evil-shift-width= based on the current mode settings + (thanks to TheBB) +- Add Evil text objects =slash= (/), =underscore= (_), =hyphen= (-), + =tilde= (~) and =equal= (=) (thanks to TheBB) +- Add custom helm mode-line (thanks to TheBB) +- Add custom info+ mode-line (thanks to TheBB) +- Add =bug-reference-prog-mode= to =prog-mode-hook= (thanks to lunaryorn) +- Add the ability to search with =ag=, =pt= etc... when pressing ~C-s~ in + =helm-projectile-switch-project= (~SPC p p~) (thanks to TheBB) +- Add case insensitive alphabetical sort of =which-key= buffers +- Add ~gg~ and ~G~ support in =neotree= buffers (thanks to synic) +- Set =compilation-scroll-output= to =first-error= (thanks to joehillen) +- Fix =helm= micro-state bug with numerical prefix arguments (thanks to TheBB) +- Fix =helm= freezes when using mouse to click and drag in the results list + (thanks to TheBB) +- Fix =helm-do-grep-preselect-candidate= void variable error (thanks to TheBB) +- Fix =linum-relative-mode= toggle being called twice the first time it is used + (thanks to justbur) +- Fix ~SPC j k~ unwanted auto-comment (thanks to driftcrow) +- Fix =spacemacs/write-file= being repeatable with ~.~ (thanks to StreakyCobra) +- Fix =debug-on-error= toggle (thanks to lunaryorn) +- Fix =recentf-exclude= to be customizable (thanks to duerrp) +- Fix =spacemacs/kill-other-buffers= (thanks to TheBB) +- Fix reversed mode-line toggle (thanks to TheBB) +- Fix =ahs-edit-mode= function which requires an argument (thanks to hanmoi-choi) +- Fix =spacemacs/sudo-edit= to make it work on remote ssh buffers with + multi-hops (thanks to dcluna) +- Fix transparency toggle (thanks to justbur) +- Fix toggle for =truncate-lines= (thanks to driftcrow) +- Fix visible cursor in =helm= buffers +- Enable built-in Emacs lock files by setting =create-lockfiles= to =t= + (thanks to xfq) +- Greatly simplify =holy-mode= by disabling =evil-mode= (thanks to justbur) +- Standardise zoom key bindings: ~+~ and ~=~ zoom in, ~-~ zoom out and ~0~ + reset the zoom level (thanks to StreakyCobra) +- Evilify package menu (thanks to nixmaniack) +- Evilify Neotree buffer (thanks to bmag) +- Set =dired-dwim-target= to =t= to make =dired= to guess a default target + directory (thanks to StreakyCobra) +- Set =helm-org-format-outline-path= to =t= by default (thanks to TheBB) +- Increase number of stored recent files to 1000 (thanks to duerrp) +- Allow evil operators to show commands in =which-key= (thanks to justbur) +- Allow =last-search-buffer= to resume last search even if no saved search + (thanks to nixmaniack) +- Improve =count-words-analysis= output (thanks to StreakyCobra) +- Switch between columns layout now correctly toggle golden-ratio + (thanks to geksilla) +- Do not kill the Emacs server when killing frame (thanks to drewkett) +- Do not change =custom-file= value if already set (thanks to lunaryorn) +- Use =evil-indent-plus= package to replace =evil-indent-textobject= + (thanks to TheBB) +- Use built-in evil variable =evil-want-Y-yank-to-eol= to set Y behavior + (thanks to person808) +- Use built-in =evil-set-initial-state= function to set the default evil + states (thanks to justbur) +- Use =tab-width= instead of obsolete =default-tab-width= (thanks to lunaryorn) +- Remove obsolete =evil-jumper-file= (thanks to TheBB) +- Remove key binding for deprecated =rxt-fontify-regexp-at-point= + (thanks to mineo) +- Remove custom =write-file= function and use built-in =save-buffer= function + instead (thanks to cpaulik) +- Disable projectile caching by default (thanks to cpaulik) +- Disable version control integration of =Neotree= by setting + =neo-vc-integration= to =nil= (thanks to synic) +- Make google translate language code case-insensitive (thanks to lislon) +**** Helm-spacemacs +- Add =add to dotfile= action on a layer (thanks to CestDiego) +- Add action to open =.org= files for editing (thanks to TheBB) +- Add FAQ source (thanks to StreakyCobra) +- Beautify sources (thanks to TheBB) +**** Evilified map +- Fix shadowed keys in minibuffer +- Fix bug where key bindings could be unexpectedly redefined + (thanks to darkfeline) +*** Layer changes +**** Auto-completion +- Add =helm-company= package available on ~C-/~ while company popup is active + (thanks to TheBB) +- Fix =yas-snippet-dirs= setup (thanks to TheBB) +- Fix =yasnippet= expand to select first snippet automatically + (thanks to TheBB) +- Make =auto-yasnippet= points to private directory by default + (thanks to taiansu) +**** Better defaults +- Fix =spacemacs/backward-kill-word-or-region= with rectangular selection + (thanks to bmag) +**** C/C++ +- Fix flycheck clang args loading (thanks to zhengyangfeng00) +**** Chinese +- Add =fcitx= support (thanks to zilongshanren) +- Add pinyin support for =avy-goto-char= (thanks to CodeFalling) +**** Clojure +- New key binding ~SPC m s I~ for =cider-jack-in-clojurescript= + (thanks to benalbrecht) +- New refactoring key bindings: ~SPC mred~ for =cljr-extract-def=, + ~SPC mrfu~ for =cljr-find-usages= and ~SPC mrsc~ for =cljr-show-changelog= + (thanks to mbertheau) +- Use =cljr--all-helpers= for automatic setup of refactoring key bindings + (thanks to grammati) +**** Dash +- Enable =zeal= on =Microsoft Windows= (thanks to dotneter-) +**** Elixir +- New key binding ~SPC m s c~ to compile the current buffer in the IEx process + (thanks to timbuchwaldt) +- New key binding ~SPC m s m~ to reload the module in the current buffer in + your IEx process (thanks to timbuchwaldt) +- New key binding ~SPC m t r~ to rerun the last test (thanks to djm) +- Bind ~q~ to =quit-window=in various elixir modes (thanks to utkarshkukreti) +- Enable =company-mode= in =alchemist-iex-mode= (thanks to utkarshkukreti) +- Fix =ruby-end= hook removal (thanks to TheBB) +**** Elm +- Fix incorrect command for =elm-repl-load= (thanks to holguinj) +- Fix key bindings for REPL commands updated upstream (thanks to tcallan) +**** Emacs lisp +- Add =auto-compile= package (thanks to justbur) +- New key bindings for compilation: + ~SPC m c c~ to byte compile the current file, + ~SPC m c l~ to popup compile-log buffer + (thanks to justbur) +- Add ~q~ to exit =macrostep= (thanks to ralesi) +**** Erc +- Fix notification icon (thanks to aminb) +- Fix erroneous micro-state key binding (thanks to StreakyCobra) +**** Ess +- Simplify the configuration of ESS minor modes (thanks to izahn) +- ~SPC m s i~ now automatically start the correct REPL for the current + buffer (thanks to izahn) +- Fix company activation (thanks to michelk) +**** Evil-snipe +- Update =evil-snipe= mode names (thanks to person808) +**** Eyebrowse +- Add ~h~ and ~l~ bindings to eyebrowse micro-state (thanks to TheBB) +- Fix workspace numbers, the first workspace now starts at 1 instead of 0 + (thanks to d12frosted) +- Fix call to =eyebrowse-rename= (thanks to TheBB) +**** Games +- Add =Pacmacs= game (thanks to CestDiego) +**** Git +- New key binding scheme using =evil-magit= package (thanks to justbur) +- New key binding ~SPC g i~ for =magit-init= (thanks to CestDiego) +- New key binding ~SPC g c~ for =magit-checkout= (thanks to PierreR) +- New key bindings ~SPC m ​,​~ and ~SPC m c~ to Valid/Confirm =with-editor= + buffers (thanks to justbur) +- New key bindings ~SPC m a~ and ~SPC m k~ to Abort/Discard =with-editor= + buffers (thanks to justbur) +- Add =gr= and =gR= bindings to refresh in evilified Magit buffers +- Add support for links to Magit buffer in =org= buffers + (thanks to mskorzhinskiy) +- Enable gravatars +- Redefine key bindings to user Magit popups whenever it is possible + (thanks to ralesi) +- Store =magit= gravatars in cache directory (thanks to CestDiego) +- =git-timemachine= and =git-blame= micro-states are now idempotent when + invoked. So these micro-states can be invoked again without side effects. +- Move =magit-gh-pulls= bindings from ~#g~ to ~#~ +- =magit-git-flow= prefix binding is now ~%~ instead of ~#f~ + (thanks to nixmaniack) +- Fix =git-magit-status-fullscreen= (thanks to bmag) +- Fix various bugs with evilification of maps +- Add =gr= and =gR= bindings to refresh in evilified Magit buffers +- Deactivate =evil-snipe= mode which messes with =magit= buffer (thanks to + cpaulik) +**** Github +- New key binding ~SPC g c~ to clone and optionally fork repository + (thanks to cpaulik) +**** Go +- New key binding ~SPC m x x~ to run =go run= for the current main package + (thanks to sectorzero) +- New key bindings for testing: + - ~SPC m t P~ to run =go test= for the current package and all packages under it | + - ~SPC m t t~ to run =go test= for the function you're currently in + and ~SPC m t s~ to run =go test= for the suite you're currently in + (thanks to bogdanteleaga) +- Import =GO15VENDOREXPERIMENT= from environment variables + (thanks to sectorzero) +**** Haskell +- New key binding ~SPC m h H~ to do a local (not using internet) Hoogle lookup + (thanks to jb55) +- New key binding ~SPC m g i~ to jump to imports (thanks to bennofs) +- New key bindings for =ghc-mod=: + - ~SPC m m t~ to insert template + - ~SPC m m u~ to insert template with holes + - ~SPC m m a~ to select one of possible cases + - ~SPC m m f~ to replace a hole + - ~SPC m m e~ to expand template haskell + - ~SPC m m n~ to go to next type hole + - ~SPC m m p~ to go to previous type hole + - ~SPC m m >~ to make indent deeper + - ~SPC m m <~ to make indent shallower + (thanks to Tritlo) +- Add REPL key bindings to =cabal-mode= (thanks to d12frosted) +- Add text alignment rules (thanks to PierreR) +- Fix ~SPC m s S~ key binding for switching back from REPL + (thanks to d12frosted) +- Fix typo in variable =haskell-interactive-popup-errors= (thanks to usharf) +- Fix ~SPC m h t~ and ~SPC m h i~ bindings (thanks to d12frosted) +- Fix ~SPC m s s~ according to conventions, i.e. does not switch to REPL + buffer (thanks to d12frosted) +- Fix missing key bindings when =ghc-mod= is disabled (thanks to d12frosted) +- Fix =ghci-ng= for stack projects (thanks to bjarkevad) +- Force =haskell-mode= loading in cabal files (thanks to d12frosted) +- Remove indentation guides to comply with latest haskell-mode + (thanks to PierreR) +- Remove =haskell-indentation-mode= hook (thanks to d12frosted) +**** Html +- Add =company-css= backend in =web-mode= (thanks to TheBB) +- Enable Emmet tab expansion in hybrid mode (thanks to geo7) +- Expand to className when using Emmet, for =instance div.react-class= + expands to =
= (thanks to CestDegio) +- Mark =css-indent-offset= as safe local variable (thanks to lunaryorn) +- Fix =smartparens= loading (thanks to TheBB) +- Fix erroneous micro-state key binding (thanks to StreakyCobra) +**** Idris +- Use popwin and motion state for special buffers (thanks to holguinj) +**** Javascript +- Add evil-matchit support for js files (thanks to robbyoconnor) +**** LaTeX +- New layer variable =latex-enable-folding= to enable text folding, default + value is =nil= (thanks to justbur) +- New key bindings ~SPC m ​,​~ and ~SPC m k~ for ~C-c C-c~ and ~C-c C-k~ + respectively (thanks to justbur) +- New key bindings: + - ~SPC m .~ to mark LaTeX environment + - ~SPC m *~ to mark LaTeX section + - ~SPC m k~ to kill TeX job + - ~SPC m l~ to recenter output buffer + - ~SPC m m~ to insert LaTeX macro + - ~SPC m s~ to insert LaTeX section + - ~SPC m v~ to view output + (thanks to justbur) +- New folding key bindings (available if =latex-enable-folding= is non nil): + - ~SPC m z b~ to fold TeX buffer + - ~SPC m z e~ to fold TeX environment + - ~SPC m z m~ to fold TeX macro + - ~SPC m z =~ to fold TeX math + - ~SPC m z r~ to fold TeX region + (thanks to justbur) +- New =TeX-font= key bindings: + - ~SPC m x c~ to make font monospaced (for code) + - ~SPC m x e~ to make font emphasised + - ~SPC m x i~ to make font italic + - ~SPC m x o~ to make font oblique + - ~SPC m x r~ to remove font properties + - ~SPC m x f a~ to use calligraphic font + - ~SPC m x f c~ to use small-caps font + - ~SPC m x f f~ to use sans serif font + - ~SPC m x f n~ to use normal font + - ~SPC m x f r~ to use serif font + - ~SPC m x f u~ to use upright font + (thanks to TheBB) +- New key binding ~SPC m -~ to open output buffer (thanks to benquebec) +- Configure =latexmk= as the default build command (thanks to izahn) +- Disable =typo= (thanks to TheBB) +- Fix enabling of minor modes =TeX-source-correlate-mode= and =TeX-PDF-mode= + (thanks to justbur) +**** Markdown +- New key binding ~SPC m x C~ to insert github flavored code block + (thanks to lunaryorn) +- Include missing =gh-md= package (thanks to tko) +**** Nim +- Use MELPA version of =flycheck-nim= package (thanks to Gonzih) +- Remove package =company-nim= which is now part of =nim-mode= + (thanks to robbyoconnor) +**** Ocaml +- Fix error when initializing =opam= (thanks to TheBB) +- Make OCaml generated files invisible to completion (thanks to StreakyCobra) +**** Org +- New key bindings: + - ~SPC m ~ for =org-ctrl-c-ctrl-c= + - ~SPC m *~ for =org-ctrl-c-star= + - ~SPC m RET~ for =org-ctrl-c-ret= + - ~SPC m -~ for =org-ctrl-c-minus= + - ~SPC m ^~ for =org-sort= + - ~SPC m /~ for =org-sparse-tree= + (thanks to TheBB) +- New key binding ~SPC m P~ for =org-set-property= (thanks to swaroopch) +- New key binding ~SPC m !~ for =org-time-stamp-inactive= + (thanks to channingwalton) +- New key binding ~SPC m D~ to insert drawer (thanks to cpaulik) +- Add drawer =evil-surround= pair (thanks to TheBB) +- Use ~SPC a o~ as prefix for org related applications like =org-agenda= + or =org-capture=. The ~a~ is for =application=, and ~o~ for =org= + (thanks to StreakyCobra) +- Use ~RET~ in normal state for follow links (thanks to justbur) +- Enable =flyspell= by default (thanks to robbyoconnor) +- Move =evil-org= to a local package (thanks to TheBB) +- Move =.org-id-locations= to cache directory (thanks to fandag) +**** Osx +- Fix search for =GNU ls= (thanks to lunaryorn) +- Use =osx-trash= package to handle deleted items (thanks to lunaryorn) +- Make =mdfind= the default backend for =helm-locate= (thanks to Andre0991) +- Set font =Apple Color Emoji= for emojis (thanks to myrjola) +**** Puppet +- Remove deprecated =puppetfile-mode= package (thanks to joehillen) +**** Purescript +- Add =psc-ide= support (thanks to kRITZCREEK) +**** Python +- New layer variable =python-auto-set-local-pyenv-version= to automatically + set =pyenv= version from a =.python-version= file. Possible values are + =on-visit=, =on-project-switch= or =nil=, default is =on-visit= + (thanks to fbergroth) +- Various fixes to =pylookup= to make it work again (thanks to TheBB) +- Allow user to customize fill column with the variable =python-fill-column= + (thanks to swaroopch) +- Fix =pylookup= makefile for python version 2.7.10 (thanks to hyh) +**** React +- Fix =flycheck= setup, do not disable =jshint= globally, + but only for =react= mode (thanks to lunaryorn) +- Enable =js-mode= snippet (thanks to rhalukongor) +- Open =index.android.js= and =index.ios.js= with react mode (thanks to erwan) +**** Ruby +- Enable built-in =ruby-mode= by default instead of =enh-ruby-mode= + (thanks to lunaryorn) +- New layer variable =ruby-enable-enh-ruby-mode= to enable =enh-ruby-mode= + by default instead of =ruby-mode=. +- New layer variable =ruby-test-runner= to choose between =ruby-test= or + =rspec= +- Add support for =rspec= (thanks to alexgirdler and dcluna) +- Add support for =chruby= (thanks to bjeanes and Immortalin) +- Add =rubocop= package (thanks to dcluna) +- New =rubocop= key bindings: + - ~SPC m r r f~ to run RuboCop on the currently visited file + - ~SPC m r a D~ to autocorrect current directory + - ~SPC m r r F~ to run auto-correct on the currently visited file + - ~SPC m r a P~ to autocorrect current project + - ~SPC m r r d~ to prompt from a directory on which to run RuboCop + - ~SPC m r r D~ to prompt for a directory on which to run auto-correct + - ~SPC m r r p~ to run RuboCop on the entire project + - ~SPC m r r P~ to run auto-correct on the project +**** Ruby on rails +- Move ~SPC m r r :~ to ~SPC m r :~ +**** Rust +- New key binding ~SPC m c C~ to remove build artefacts with Cargo + (thanks to SShrike) +- New key binding ~SPC m g g~ to jump to definition (thanks to isphinx) +- Use =exec-path-from-shell-copy-env= to set =RUST_SRC_PATH= for Racer + (thanks to mahinshaw) +**** Scala +- New layer variable =scala-enable-eldoc= to explicitly turn on =el-doc=, + default value is =nil= (thanks to d1egoaz) +- New layer variable =scala-auto-insert-asterisk-in-comments= to automatically + insert asterisk in multi-line comments (thanks to lunaryorn) +- New key binding ~SPC m b b~ for =sbt-command= (thanks to lunaryorn) +- Enable Ensime’s =expand-region= integration (thanks to lunaryorn) +- Only disable =flycheck= Scala syntax checker in Ensime (thanks to lunaryorn) +- Fix test key bindings (thanks lunaryorn) +- Fix automatic trigger of completion when hitting ~.~ (thanks to d1egoaz)) +**** Scheme +- New key binding ~SPC m s s~ for scheme implementation selection + (thanks to troydm) +- New key bindings to evaluate code: + - ~SPC m e b~ to evaluate the whole buffer + - ~SPC m e e~ to evaluate last sexp + - ~SPC m e f~ to evaluate current function + - ~SPC m e l~ to evaluate line + - ~SPC m e r~ to evaluate region + (thanks to CestDiego) +**** Shell +- Add =xterm-color= package (thanks to CestDiego) +- New key bindings ~C-j~ and ~C-k~ to browse history in normal state + (thanks to mijoharas and TheBB) +- New key binding ~C-l~ in =eshell= to clear buffer (thanks to CestDiego) +- New key binding ~C-c C-z~ to stop jobs (thanks to darkfeline) +- Add support to open =zsh= common files with =sh-mode= (=.zsh=, =zlogin=, + =zlogout=, =zpreztorc=, =zprofile=, =zshenv=, =zshrc=) (thanks to jcf) +- Use login shell as term shell (thanks to lunaryorn) +- Automatically scroll the buffer on new output by setting variable + =comint-move-point-for-output= to =t=. +- Deactivate scroll margin for shell buffers (thanks to darkfeline) +- Protect prompt in =comint-mode= (thanks to CestDiego) +- Set =eshell-hist-ignoredups= to =t= (thanks to CestDiego) +- Typing =clear= in an =eshell= buffer will clear the buffer + (thanks to CestDiego) +- Fix SIGQUIT bug (thanks to darkfeline) +**** Spell-checking +- New layer variable =spell-checking-enable-by-default= to enable/disable + =flyspell= by default globally (thanks to TheBB) +- Move =auto-dictionary= from spacemacs layer to =spell-checking= + and activate it (thanks to StreakyCobra) +- Disable line numbers in shell buffers (thanks to CestDiego) +- Fix =flyspell-prog-mode= activation (thanks to lunaryorn) +**** Syntax-checking +- New layer variable =syntax-checking-enable-by-default= to enable/disable + =flycheck= by default globally (thanks to TheBB) +- Evilify =flycheck= error list (thanks to TheBB and bmag) +- Enable new global minor mode =flycheck-pos-tip-mode= (thanks to StreakyCobra) +- New key bindings ~SPC e s~ and ~SPC e S~ to select =flycheck= checker + executable (thanks to nashamri) +- Fix escaping in buffer name regexp (thanks to lunaryorn) +- Remove flycheck fringe's bullet underlines (thanks to StreakyCobra) +**** Themes-megapack +- Add =jbeans= theme (thanks to synic) +- Add =farmhouse= theme (thanks to CodeFalling) +- Add =badwolf= theme (thanks to fabianhjr) +**** Vagrant +- Fix obsolete =vagrant-tramp-enable= variable (thanks to joehillen) +**** Version-control +- New key bindings ~SPC T d~ and ~SPC T C-d~ to toggle diff margin in the fringe + (thanks to ralesi) +- New micro-state on ~SPC g .~ to stage, unstage, commit, show diff, + show hunks, etc... (thanks to ralesi) +- Add support for multiple gutter backends: =diff-hl=, =git-gutter= and + =git-gutter+= (thanks to ralesi) +**** Vinegar +- Fix evilified dired (thanks to TheBB) +**** Yaml +- Enable company +*** Website +- Initial version (thanks to bobbyangelov, nashamri and TheBB) +*** Core changes +- New command line parameters =--timed-requires= and =--profile= to debug + and benchmark Emacs initialization (thanks to justbur) +- New command line parameter =--insecure= to disable https +- Add path variable =spacemacs-assets-directory= (thanks to aminb) +- Add a check to make sure that the Spacemacs git repository is not dirty before + switching the Spacemacs versions (thanks to justbur) +- Add an error message when the minimal Emacs version is not met + (thanks Immortalin) +- Add =spacemacs/recompile-elpa= interactive function (thanks to justbur) +- Add =user-emacs-directory= in =async-start= (thanks to brabalan) +- Set =ad-redefinition-action= to =accept= +- Enable distinction between ~C-i~ and ~TAB~ (thanks to justbur) +- Move =evilified-state= library to local package of =spacemacs= layer +- Replace =evil-leader= package by =bind-map= package (thanks to justbur) +- Remove special handling of =spacemacs-theme= and =solarized-theme= + (thanks to TheBB) +- Remove bootstrap packages =dash= and =f= +- Improved travis Build relying on container and EVM (thanks AdrieanKhisbe) +- Improve installation speed of themes and bootstrap packages +- Keep focus while navigating =*help*= buffers (thanks to sooheon) +- Catch errors in executed dotfile functions and signal them to the user + (thanks to justbur) +- Show errors in =*Messages*= buffer when loading .spacemacs instead of + ignoring them (thanks to dcluna) +- Fix overwrite of clipboard at startup (thanks to StreakyCobra) +- Fix error when setting =dotspacemacs-major-mode-leader-key= to nil + (thanks to justbur) +- Fix some loading warnings (thanks to syohex) +- Fix theme cycling after ~SPC T h~ is used (thanks to nixmaniack) +- Fix various usage of obsolete functions (thanks to justbur) +- Fix various free variable references (thanks to justbur) +- Hide mode-line at startup +- Generate necessary HTML for the Spacemacs docs (used for the website) + (thanks to travisbhartwell) +**** Home buffer +- ~b~ now jumps to the bookmark list (thanks to kccai) +- Set Spacemacs home buffer as initial buffer for Emacs clients + (thanks to TheBB) +- Inject Emacs version along with Spacemacs version in home buffer + (thanks to ralesi) +- Add a =Spacemacs Update= button to the spacemacs buffer, and relabel the + package update button to read =Update Packages= (thanks to justbur) +- Show quick help menu when no =.spacemacs= file is found (thanks to person808) +- Do not start spacemacs buffer in motion state when editing style is =emacs= + (thanks to justbur) +- Factor out =spacemacs-buffer= creation (thanks to justbur) +- Move =spacemacs-mode= to =core-spacemacs-buffer.el= (thanks to justbur) +- Simplify =spacemacs-buffer/goto-link-line= (thanks to justbur) +**** Configuration layer +- Limit the number of rollback slots (thanks to elemakil) +- Add a timeout when fetching ELPA archives +- Allow explicit path for package location (thanks to TheBB) +- Fix =configuration-layer/package-usedp= for excluded packages +- Fix automatic deletion of bootstrap packages (thanks to TheBB) +- Fix creation of =README.org= file in =configuration-layer/create-layer= + (thanks to StreakyCobra) +- Add package keyword =:protected= +- Set configuration layer error flag when calling user dotfile functions +**** Micro-state +- =:exit= keyword now accepts a list +- Execute =:on-enter= before =:doc= in micro-state +*** Other fixes and improvements +- =README.md= introduction rewrite (thanks to purcell) +- New badge =Built with Spacemacs= (thanks to nashamri) +- Merge files =HOWTOs.org= in =FAQ.org= (thanks to StreakyCobra) +- Merge the =CONTRIBUTING.md= and =doc/CONTRIBUTE.org= files into a new + =CONTRIBUTING.org= file (thanks to StreakyCobra) +- Delete unneeded =.gitmodules= file (thanks to robbyoconnor) +- Add =cl-= prefix to =cl-lib= functions (thanks to coldnew, robbyoconnor) +- Replace =eval-after-load= with =with-eval-after-load= (thanks to person808) +- New Spacemacs screenshot in =README.md= (thanks to nashamri) +- New text banners of the Spacemacs logo (thanks to sshbio) +- Add prefix command names (thanks to grammati, jenanwise, davoclavo, tekerson, + d12frosted, CestDiego, lunaryorn, nixmaniack, AlexCharlton) +- Typos and documentation improvements (thanks to AdrieanKhisbe, bardec, + bebound, benquebec, bmag, bogdanteleaga, CarlQLange, CestDiego, CodeFalling, + com4, cpaulik, d12frosted, d1egoaz, dotneter-, dptd, dsdshcym, dvcrn, + eagleflo, ernestas, FlashYoshi, Immortalin, jrk, justbur, masukomi, + MaxWofford, mbertheau, mineo, mijoharas, mkollaro, nashamri, pbzdyl, + person808, robbyoconnor, scloudyy, shishkin, swaroopch, TheBB, Treri, + vijaykiran, xfq, xtian, ZachLiss) +*** Core team members +- Sylvain Benner (syl20bnr) +- Eivind Fonn (TheBB) +- Fabien Dubosson (StreakyCobra) +- Justin Burkett (justbur) +* Release 0.104.x +** 0.104.8 (2015/12/16) +*** Hotfix +- Revert removal of fancy battery mode-line indicator. +** 0.104.7 (2015/12/15) +*** Distribution layer changes +**** Spacemacs +- Remove fancy battery custom mode-line (moved to spaceline) (thanks to TheBB) +*** Layers changes +**** Eyebrowse +- Eyebrowse doesn't have a lighter anymore (thanks to myrjola) +**** Haskell +- Replace obsolete function =haskell-process-load-or-reload= (thanks to + joehillen) +- Fix renamed command =hindent-reformat-decl= (thanks to lunaryorn) +**** Syntax-checking +- Add support for =flycheck-pos-tip-mode= (thanks to StreakyCobra, TheBB and + lunaryorn) +** 0.104.6 (2015/11/27) +*** Hotfix +- Fix void variable error =smartparens-strict-mode= (thanks to TheBB) +** 0.104.5 (2015/11/22) +*** Distribution layer changes +**** Spacemacs +- Use version 7.1 of =evil-lisp-state=, the version 8 is supported + in version 105 of Spacemacs only. +** 0.104.4 (2015/11/04) +*** Layer changes +**** Scala +- Fix Ensime test commands to reflect the changes in the recent versions + of the package (thanks to lunaryorn) +**** Vagrant +- Replace obsolete function =vagrant-tramp-enable= by the function + =vagrant-tramp-add-method= (thanks to joehillen) +*** Core +- Prevent bootstrap packages from being automatically uninstalled + (thanks to TheBB) +** 0.104.3 (2015/11/01) +*** Layer changes +**** Evil-snipe +- Update =evil-snipe= minor mode name to match latest release of + the package (thanks to person808) +**** Haskell +- Remove indentation guides to comply with latest =haskell-mode= + (thanks to PierreR) +** 0.104.2 (2015/09/29) +*** Hotfixes +- Fix error =void-variable warning-minimum-level= on Emacs 24.3 + (thanks to syohex) +*** Layer changes +**** Markdown +- Fix ~SPC m c r~ binding (thanks to tko) +*** Core +- Silence =ad-handle-definition= about advised functions getting redefined +- Improve evilification rules, now ~:~ is rebound to ~|~, ~/~ is rebound to ~\~ + and ~SPC~ is rebound to ~​'​~ +*** Other fixes and improvements +- Add FAQ entry on the difference between available distributions (thanks to + robbyoconnor) +- Delete obsolete =.gitmodules= file (thanks to robbyoconnor) +- Improve convention documentation for evilified buffers +- Typos and documentation improvements (thanks to CarlQLange) +** 0.104.1 (2015/09/28) +*** Dotfile changes +- New variable =dotspacemacs-remap-Y-to-y$=, when non nil ~Y~ is remapped to + ~y$~. Default value is =t=. +*** Distribution layer changes +**** Spacemacs +- Add ~SPC t h a~ to toggle automatic highlighting of symbol under point. +*** Layer changes +**** React +- Force -jsx= content type (thanks to dvcrn) +*** Other fixes and improvements +- Typos and documentation improvements (thanks to k4rtik, robbyoconnor, tko, xfq) +** 0.104.0 (2015/09/28) +*** IMPORTANT - Breaking changes +- =org-plus-contrib= is now installed from org ELPA repository, you may + encounter strange behaviours from Org. In this case delete the =org= directory + in the =elpa= directory and restart Emacs. +- =Helm= key bindings have been slightly adjusted: + - in =helm-find-files= (~SPC f f~): now ~C-h~ move up a directory and ~C-l~ + enter the selected directory. =describe-key= command is available on ~C-S-h~ + - in other =helm= buffers ~C-h~ is used to go to the next source and ~C-l~ + is the same as ~RET~. =describe-key= command is also available on ~C-S-h~. +- ~Y~ has been remapped to ~y$~ +- The =bookmark= saved file has been moved to the =.cache= directory, if + you have a bookmark file =~/.emacs.d/bookmarks= then you'll have to move it + to =~/.emacs.d/.cache/bookmarks= +- =Ruby on Rails= framework has now its own layer called =ruby-on-rails=, + be sure to add this layer to your dotfile if you use RoR. +- =Django= framework has now its own layer called =django=, + be sure to add this layer to your dotfile if you use it. +- =guide-key= has been replaced by =which-key=, you may encounter issues + if you have some =guide-key= custom configuration, remove any =guide-key= + configuration and check the options offered by =which-key=. +*** Other important notes +- All layers have been moved to =layers= directory +- Category folder prefix has been changed to =+= (was =!=) +- =spacemacs= layer has been moved to the =layers= directory in the + category =+distribution= +- All =extensions= directories have been renamed to =local=. =extensions= + directories will be deprecated in 0.105.0. +- =tromey= ELPA repository has been removed (thanks to robbyoconnor) +*** Hot new features +- Enhanced layer package lists which merge old extension lists and package + lists. Keywords can be associated with packages. The supported keywords + are =:location=, =:step= and =:excluded=. + =extensions.el= files and =-excluded-packages= variables are now + optional and will be deprecated in the next version 0.105.0. +- New =distribution= concept: you can now choose between two distributions: + =spacemacs= or =spacemacs-base=. =spacemacs-base= contains only + a minimal set of packages whereas =spacemacs= is the full Spacemacs + experience. Set the distribution with =dotspacemacs-distribution= variable. +- Add support for =Quelpa= which allows to use =Melpa= recipes to install + packages directly from source (i.e. one can now install a package directly + from a Github repository). +- New editing style: =hybrid=. This style is similar to Vim style except that + all Emacs key bindings are available in hybrid (insert) state instead of Vim + key bindings. Also in this state, the buffers are evilified like in Vim style. +- The default theme of Spacemacs is now =spacemacs-dark=. The Spacemacs themes + (=spacemacs-dark= and =spacemacs-light=) become the official themes of + Spacemacs (thanks to nashamri) +- Recovery mode when there is an error in the user dotfile. Now even when your + dotfile cannot be loaded, Spacemacs will be operational with a minimal set + of packages available (thanks to cmccloud) +- Add support for dotdirectory =~/.spacemacs.d= which behaves like the Emacs + dotdirectory (i.e. =~/.spacemacs.d/init.el= is evaluated instead of + =~/.spacemacs= if the former exists and the latter does not) (thanks to + justbur) +- Guide-key is replaced by =which-key= which provides an enhanced and better + live key bindings browsing experience. (thanks to justbur) +- New API to manage the =powerline= mode-line. It is now possible to easily + define segments and arrange them (thanks to TheBB) +- New web gallery to browse themes in =themes-megapack=, URL: [[http://themegallery.robdor.com][theme gallery + ]] (thanks to robmerrell) +- New test framework supporting layer specific tests (thanks to TheBB) +- New interactive function =dotspacemacs/test-dotfile= testing the integrity + of the =.spacemacs= file. This function will detect any unknown layers and + bad dotspacemacs variable values (thanks to justbur) +*** New conventions +- Add spacing conventions for org files (thanks to person808) +- Move ~SPC m T x~ conventions for executing tests in debug to ~SPC m t X~ +- Add conventions for toggles which are under ~SPC t~, ~SPC T~ and ~SPC C-t~. + For major mode specific toggles only ~SPC m T~ is available. +- Add ~SPC m g b~ to go back to previous location after a ~SPC m g g~. +- Reserve ~SPC m o~ for users (thanks to TheBB) +*** New Layers +- asciidoc (thanks to hijarian) +- chinese (thanks to andyque) +- cscope (thanks to bmag) +- common-lisp (old slime layer renamed) (thanks to kingcons) +- django (split from python layer) +- elm (thanks to usharf) +- idris (thanks to zmthy) +- jabber (thanks to toshism) +- java (thanks to kleewho) +- nim (thanks to Gonzih) +- nixos (thanks to CestDiego) +- ranger (thanks to ralesi) +- sml (thanks to Devagamster) +- spell-checking (split from syntax-checking) (thanks to justbur) +- terraform (thanks to BrianHicks) +- react (thanks to axyz) +- ruby-on-rails (split from ruby layer) +- scheme (thanks to kingcons) +- vinegar (thanks to ralesi) +- unimpaired (thanks to ralesi) +- wakatime (thanks to CestDiego) +- yaml (split from ruby) +*** Dotfile changes +- New variable =dospacemacs-distribution= allowing to choose the default + packages installed by Spacemacs. +- New function =dotspacemacs/user-init=. Now =dotspacemacs/init= function + is reserved for dotspacemacs variable exclusively. +- New value =any= for =dotspacemacs-highlight-delimiters=, when set to + =any=, all the delimiters are highlighted via =rainbow-mode=. +- New variable =dotspacemacs-helm-resize=. If non nil then =helm= windows + will be automatically resized depending on the number of candidates (thanks + to ralesi) +- New variable =dotspacemacs-helm-no-header=. If non nil then the helm header + is hidden when there is only one source in the helm buffer (thanks to ralesi) +- New variable =dotspacemacs-helm-position= which can be =bottom=, =top=, + =left= or =right= (thanks to ralesi) +- Add new =:disabled-for= keyword for =dotspacemacs-configuration-layer= which + allow to deactivate a layer for a set of layers. For instance + =(auto-completion :disabled-for org git)= will disable auto completion for + both org and git layers. +- Rename function =dotspacemacs/config= to =dotspacemacs/user-config=. The + old function =dotspacemacs/config= will be deprecated in 0.105.0. +*** Distribution layer changes +**** Spacemacs-base +- New navigation key bindings for =helm-find-files= (~SPC f f~), now + ~C-h~ move up a directory and ~C-l~ enter the selected directory. + =describe-key= command is available on ~C-S-h~. +- In =helm= buffers ~C-h~ is used to go to the next source and ~C-l~ + is the same as ~RET~. =describe-key= command is available on ~C-S-h~. +- Add =copy file= key binding on ~SPC f c~ (thanks to cpaulik) +- Add transparency micro-state (thanks to person808) +- Add ~SPC i u~ key binding to insert unicode symbols with helm (thanks to + robbyoconnor) +- Add ~SPC x l s~ and ~SPC x l u~ to sort and uniquify lines in a buffer + (thanks to oppenlander) +- In buffer not visiting a file ~SPC f s~ now asks for a filename (thanks to + cpaulik) +- Add ~SPC f l~ to visit a file literally which means that the file will be + opened in =fundamental mode= (thanks to sooheon) +- Add support for automatic recompilation of =.el= files on save (thanks to + ralesi) +- Add ~SPC f C d~ and ~SPC f C u~ to quickly convert Unix encoding to DOS + encoding and vice versa (thanks to ralesi) +- New key bindings to toggle editing styles: ~SPC t E e~ to toggle =emacs= + style and ~SPC t E h~ to toggle =hybrid= style +- Add support for arrow keys in windows micro-state (thanks to mbertheau) +- Fix paste micro-state undo +- Fix ~SPC i K~ (insert empty line above point) which now works + as expected when used from the first line of a buffer (thanks to + travisbhartwell) +- Fix windows micro-state by using the minibuffer (thanks to person808) +- Fix broken alignment functions on ~SPC x a~ (thanks to justbur) +- Don't jump if only one match in =helm-imenu= (thanks to tuhdo) +- Remove =wS= from prefix list in =config.el= (thanks to justbur) +- Properly close frame when running a client from terminal (thanks to drewkett) +- Add chocolate color for the =replace= state (thanks to TheBB) +- Make ~Y~ equivalent to ~y$~ (thanks to person808) +- Sync =visual-line-mode= and =evil-visual-xxx= functions. Now ~SPC t L~ + correctly enables =visual-mode-line= _and_ change Evil to visual + navigation accordingly. Use ~SPC t l~ to disable truncated lines while + keeping default Evil behavior. +- Reduce autosave interval for evil-jumper (thanks to ralesi) +- Improve evil configuration for cursors and colors (thanks to justbur) +- Fix called function name for ~SPC h b~ binding. Helm removed + =helm-pp-bookmarks= in the latest update and replaced it with + =helm-filtered-bookmarks= (thanks to sgepigon) +- Add ~SPC f L~ for =helm-locate= (thanks to ralesi) +- Add text object ~g~ for entire buffer (thanks to ralesi) +- helm-spacemacs: load layers only once. +- helm-spacemacs: show description of toggle functions (thanks to person808) +**** Spacemacs +- New API for the powerline (thanks to TheBB) +- Add package =define-word= on ~SPC x w d~ (thanks to swaroopch) +- Set =projectile-indexing-method= to =alien=. This settings will use available + tooling to speed up the build of the cache, should greatly improve the + performance on Windows (provided you have the required tools) +- Fix =projectile-generic-command= on Windows using =find= (thanks to TheBB) +- Fix =neotree= bug with window number 0 (thanks to jaypei) +- Fix search direction consistency for =auto-highlight-symbol= micro-state + (thanks to herbertjones) +- Add VCS integration to =neotree= +- Focus current file when opening Neotree in project's root with ~SPC p t~ + (thanks to StreakyCobra) +- Set =sp-show-pair-delay= to 0.2 instead of 0. Should fix some slowness in +- Set =highlight-parentheses= delay to 0.2 +- Enable =highlight-parentheses= when =dotspacemacs-highlight-delimiters= is + set to =all= (thanks to tuhdo) +- Hide lighter for =highlight-parentheses= +- Better diminished lighters for =highlight-indentation-mode= (thanks to + robbyoconnor) +- Prevent iedit from adding global key binding (thanks to justbur) +- Temporarily exclude the package =hl-anything= waiting for an overlay bug + to be fixed +- Correctly enable =powerline= only if it is used (thanks to sooheon) +- Make =golden-ratio= work after avy-word-jump (thanks to synic) +- Exclude =helm= windows from =golden-ratio= (thanks to ralesi) +- Don't automatically select *compilation* buffer (thanks to jasminpatry) +- Define explicit functions to inverse comments for =evil-nerd-commenter= + (thanks to endrebak) +- Use TheBB fork of =evil-indent-textobject= which has working text objects + based on the indentations (thanks to TheBB) +- Exclude package =evil-terminal-cursor-changer= since it is buggy in some + terminals (thanks to TheBB) +*** Layer changes +**** Agda +- Move ~SPC m o~ to ~SPC m h~ since ~SPC m o~ is now reserved for users + (thanks to TheBB) +**** Auto-completion +- Add new layer variable =auto-completion-private-snippets-directory= which + allows to specify a custom private snippet directory (thanks to justbur) +- Improve yasnippet loading robustness (thanks to myrjola) +- Fix showing snippets in company popup (thanks to person808) +**** Better-defaults +- Add =backward-kill-word-or-region= on ~C-w~ (thanks to justbur) +**** C/C++ +- Fix key bindings for cscope (thanks to bmag) +- Add =disaster= package to disassemble c/c++ code on key binding ~SPC m D~ + (thanks to jb55) +- Fix error with =company-mode/more-than-prefix-guesser= (thanks to TheBB) +**** Chinese +- Remove "symbol" from list of changed charsets, this prevents minor mode + lighters from being displayed in the Chinese font (thanks to louy2) +**** Clojure +- Add cider error buffer to popwin (thanks to cmccloud) +- Add cider-doc buffer to popwin (thanks to cmccloud) +- Add key bindings for =ein:traceback-mode= (thanks to toshism) +- Add ~SPC m s x~ key binding for =cider-refresh= (thanks to sooheon) +- Stop using deprecated =cider-jump-to-var= and use =cider-find-var= + instead (thanks to lukbock) +- Add ~SPC m T i~ to toggle indentation style in =clojure-mode= + (thanks to lukbock) +- Add ~SPC m T p~ key binding to toggle pretty printing in the REPL + (thanks to luxbock) +- Add new key bindings to evilified buffer =cider-inspector-mode= + (thanks to luxbock) +- Add ~C-j~ and ~C-k~ for browsing history in the REPL (thanks to luxbock) +- Add more =clj-refactor= key bindings (thanks to luxbock) +- Add more key bindings to =cider-stacktrace-mode= (thanks to luxbock) +- Add interactive function =spacemacs/cider-toggle-repl-font-locking= to + toggle font-locking in the REPL (thanks to luxbock) +- Activate clojure-mode for *.boot files (thanks to usharf) +- Enable =fancify-symbols= for =clojurescript-mode=, =clojurec-mode= and + =clojurex-mode= (thanks to Xcix) +- Setup indentation rules for common clojure vars (thanks to jcf) +- Evilify =cider-test-report-mode= buffers (thanks to luxbock) +- Enable =clj-refactor= key bindings in the REPL (thanks to luxbock) +- Enable clojure key bindings in the REPL (thanks to luxbock) +- Fix bug in =spacemacs//cider-eval-in-repl-no-focus=: + - Move to point-max before inserting text + - Only indent the newly inserted form instead of the whole buffer. + (thanks to luxbock) +- Fix key bindings conflict in =cider-debug-mode= (thanks to luxbock) +- Rename old function =clfr-rename-file-or-dir= to new function + =cljr-rename-file= (thanks to luxbock) +- Remove ~SPC m d b~ =cider-debug-defun-at-point= in REPL (It doesn't do + anything other than messing up the buffer) (thanks to luxbock) +- Gives faster access to display the last error buffer with ~SPC m d e~ + (thanks to luxbock) +**** CSharp +- Set =omnisharp-auto-complete-want-documentation= to =nil= to work-around + a bug in standard Omnisharp server built in Release configuration. +- Add prefix command documentation (thanks to d12frosted) +**** Dash +- Add support for =zeal= on Linux and Windows (thanks to CestDiego) +**** Deft +- Replace deprecated =deft-extension= by new =deft-extensions= + (thanks to mclearc) +**** Elixir +- Remove flycheck due to a security issue in the Elixir compiler + (thanks to gilbertkennen) +- Add support for popwin for =mix= buffers (thanks to rhalukongor) +- Re-enable =magit-gitflow= since it is now compatible with Magit 2.1 + (thanks to gilbertkennen) +**** Emacs lisp +- Make =flycheck= aware of =loadpath= (thanks to CestDiego) +- Define =emacs-lisp-mode= key bindings for =lisp-interaction-mode= + (thanks to justbur) +- Fix ~SPC m e c~ to evaluate current form (thanks to justbur) +- Add ~SPC m e s~ to evaluate symbol under point (thanks to justbur) +**** ERC +- Add =ERC-SASL= for SASL authentication (thanks to CestDiego) +- Fix check for =dbus= availability on OS X (thanks to cmccloud) +**** ESS +- Change default value of =ess-enable-smart-equals= to nil (thanks to + izahn) +- Fix =company= back-end declaration (thanks to jcpetkovich) +**** Evil-commentary +- Add ~SPC ;~ for comment operator +**** Extra-lang +- Add =Stan= modeling language (thanks to alexanderrich) +**** Eyebrowse +- Add ~s~ for =switch-to-window-config= (thanks to rphillips) +- Add ~gt~ and ~gT~ key bindings to switch between workspaces + (thanks to joehillen) +**** Fsharp +- Allow fsharp-mode to determine build path (thanks to bsermons) +**** Git +- Make sure that git-commit is initialized so that Emacs can be used as + $GITEDITOR (thanks to thrnio) +- Remove some deprecated code (thanks to tko) +- Add documentation about =magit-push-always-verify= variable (thanks to + sooheon) +- Add ~escape~ key binding to =gitmessenger= (thanks to mijoharas) +- Add ~#f~ key binding in =magit-status= for =magit-gitflow-popup= (thanks to + gilbertkennen) +- Use =MELPA= version of =magit-gh-pulls= and fix its configuration (thanks to + cmccloud) +- Evilify =magit-hunk-section-map= (thanks to ralesi) +- Evilify =magit-stash-mode= (thanks to nixmaniack) +**** Github +- Properly evilify =gist-lists= buffer (thanks to cmccloud) +**** Gnus +- Move ~SPC m o~ to ~SPC m M~ since ~SPC m o~ is now reserved for users + (thanks to TheBB) +- Movw ~SPC m H~ to ~SPC m m~ (thanks to robbyoconnor) +**** Go +- Use exec-path-from-shell-copy-env to set =GOPATH= (thanks to jenanwise) +- Fix multiple paths support in =GOPATH= on Windows (thanks to galaxian) +- Move all oracle key bindings under ~SPC m o~ to ~SPC m r~ since ~SPC m o~ + is now reserved for users (thanks to TheBB) +- Adapt key bindings to conventions, ~SPC m b~ is now ~SPC m e~ and ~SPC m d~ + is now ~SPC m h~ (thanks to bogdanteleaga) +- Move ~SPC m r~ to ~SPC m r n~ which conflicted with oracle key bindings + (thanks to bogdanteleaga) +**** Gtags +- Fix eldoc configuration (thanks to thudo) +**** Haskell +- Make =ghc-mod= optional (thanks to michelk) +- Disable line highlighting when shm is enabled (thanks to d12frosted) +**** Html +- Add for CSS files ~SPC m z c~ and ~SPC m z o~ to contract and expand CSS + blocks (thanks to ralesi) +- Add ~SPC m g h~ (helm-css-scss) to =css-mode= (thanks to TheBB) +- Add support for =jade= files (thanks to robbyoconnor) +- Add flycheck for =slim= and =haml= modes (thanks to robbyoconnor) +- Add rainbow delimiters for =haml=, =jade= and =slim= modes + (thanks to robbyoconnor) +- Add =.eex= extension to =web-mode= (thanks to gilbertkennen) +- Add =.ejs= files to =web-mode= (thanks to robbyoconnor) +- Add =.twig= files to =web-mode= (thanks to axyz) +- Add =.asp= files to =web-mode= (thanks to TheBB) +- Add ~gj~ and ~gk~ key bindings to go to siblings elements in web micro-state + (thanks to TheBB) +- Enable =smartparens= in CSS like modes (thanks to TheBB) +- Fix extra space in declared pair <%= %> (thanks to dsdshcym) +- Fix ~r~ key bindings in web micro-state (thanks to CestDiego) +- Fix smartparens configuration (thanks to TheBB) +**** Ipython-notebook +- Move ~SPC m o~ and ~SPC m O~ to ~SPC m i~ and ~SPC m I~ since + ~SPC m o~ is now reserved for users (thanks to TheBB) +**** Java +- Diminish =eclim= minor mode lighter (thanks to Devagamster) +**** Javascript +- Add =json-snatcher= on ~SPC m h p~ (thanks to CestDiego) +**** Markdown +- Fix backticks and single quotes insertion (thanks to x-ji) +- Fix =smartparens= configuration (thanks to fintelkai) +- Move ~SPC m o~ to ~SPC m f~ since ~SPC m o~ is now reserved for users + (thanks to TheBB) +**** Org ++ Install =org-plus-contrib= from org ELPA repository ++ Add table related key bindings on =SPC m t= (thanks to JP-Ellis) ++ Add defer loading for =toc-org=. ++ Add =gnuplot= package to plot data from tables (thanks to JP-Ellis) ++ Add =org-mime= (moved from =gnus= layers) ++ Add new key bindings to move whole subtrees up/down/right/left with ~SPC m S~ + prefix (thanks to katshinka) ++ Add new key bindings to move between complex TODO sets with ~SPC m C-S~ + prefix (thanks to katshinka) ++ Add more cycling options for time-stamps, headlines, items, properties with + ~SPC m L~, ~SPC m K~, etc... (thanks to katshinka) ++ Add key bindings ~SPC m .~ to insert time-stamps (thanks to katshinka) ++ Set =toc-org-max-depth= to 10. ++ Move ~SPC m o~ to ~SPC m l~ since ~SPC m o~ is now reserved for users + (thanks to TheBB) ++ Ensure that =org-directory= exists on load (thanks to ralesi) ++ Fix ~SPC m l~ by calling =org-open-at-point= instead of =evil-org-open-links= + (thanks to TheBB) ++ Fix org-repo-todo loading (thanks to TheBB) +**** Osx +- Re-factor and expand support for trash can (thanks to usharf) +- Add support for =launchctld= (thanks to usharf) +- Add new key binding to toggle fullscreen which should fix the usage + of left command key for this command (thanks to sooheon) +- Change obsolete =new-frame= function to =make-frame= (thanks to fintelkai) +**** Pandoc +- Add =ox-pandoc= package (thanks to jcf) +**** Php +- =php-extras= is not correctly installed +- Enable flycheck (thanks to rakyi) +**** Puppet +- Enable =flycheck= support (thanks to tko) +**** Python +- Apply new conventions for test key bindings +- Fix =anaconda-mode= key bindings for latest version of =anaconda-mode= + package (thanks cpaulik) +- Fix =py-yapf= for =yapf= >= 0.3.0 (=yapf= now returns 2 if source code was + changed) (thanks to a-sk) +- Use =quit-window= to close documentation popup (thanks to cpaulik) +- Enable =evil-matchit= (thanks to robbyoconnor) +- Move anaconda server cache files to =.cache= directory (thanks to person808) +**** Racket +- Enable insert state after ~SPC m s B~ accordingly to the conventions + (thanks to jmiven) +**** Ranger +- Fix =ranger-up-directory= key binding on ~-~ (thanks to ralesi) +**** Ruby +- Use =enh-ruby-mode= on interpreter-detected ruby files. This makes + ruby files that start with shebang ruby directives use =enh-ruby-mode= + (thanks to jenanwise) +- Add some =ruby-tools= key bindings (thanks to chrismcg) +- Enable =evil-matchit= (thanks to robbyoconnor) +**** Ruby-on-rails +- Activate =projectile-rails= mode for any type of files in a rails + project (thanks to liuxiang) +**** Rust +- Add =racer= package (thanks to cdlm) +**** Salt +- Add =salt-mode= package (thanks to beardedprojamz) +**** Scala +- Add binding for =ensime-pop-find-definition-stack= on ~SPC m g p~ + (thanks to alexanderkjeldaas) +- Remove key binding ~SPC m ?~ (thanks to Profpatsch) +**** Scheme +- Add support for Geiser (thanks to kingcons) +**** Search-engine +- Add Bing (thanks to Devagamster) +- Add Spacemacs Pull Requests +**** Shell +- Add =eldoc= support in eshell (thanks to ppold) +- Add a better prompt via =eshell-prompt-extras= for eshell (thanks to ppold) +- Add visual commands to eshell (thanks to ppold) +- Add support for =smart eshell= in eshell via the layer variable + =shell-enable-smart-eshell= (thanks to ppold) +- Add auto-completion support for eshell (thanks to trishume) +- Automatically jump to prompt in insert state in eshell buffers (thanks to + trishume) +- Add support for leader in =multi-term= (thanks to martinmr) +- Deactivate eshell automatic auto-completion popup for remote path since it + can be slow, the popup must be called manually in remote paths + (thanks to myrjola) +- Fix =magit-status= alias for =eshell= (thanks to myrjola) +- Protect the =eshell= prompt from deletion with evil commands. A new + layer variable =shell-protect-eshell-prompt= allows to opt-out this behavior + (thanks to myrjola). +**** Syntax-checking +- Add ~SPC e l~ to toggle error list buffer (thanks to bmag) +- Add ~SPC e v~ to verify the flycheck setup (thanks to bmag) +- Add ~SPC e h~ to describe the flycheck checkers (thanks to bmag) +**** Vinegar +- Show symlink paths (thanks to ralesi) +**** Wakatime +- Add ~SPC a W~ to open the Wakatime dashboard in the browser + (thanks to CestDiego) +*** Core changes +- Add =with-eval-after-load= backport (thanks to justbur) +- Add new key bindings to evilified buffers: ~g~, ~GG~, ~C-b~, ~C-f~, ~C-d~ + and ~C-u~ (thanks to sooheon) +- Add ~C-z~ in =evilified-state= to switch to =emacs-state= for the next + command (thanks to justbur) +- Add =:eval-after-load= keyword to =spacemacs|evilify-map= macro +- Remove ~y~ from evilified state keymap, use a visual selection instead. +- Fix visual state key bindings in evilified buffers +- Prevent auto-evilification of buffers from overwriting ~C-g~ +- Rewrite on =evilify-map= macro which is now simpler and more robust +- Add on and off functions to toggles (thanks to TheBB) +- Add new function =spacemacs/describe-system-info= which put useful + information in the clipboard, ready to be pasted in an IRC channel for + instance (thanks to swaroopch) +- Add new functions =configuration-layer/declare-layer= and + =configuration-layer/declare-layers= which can be used in =config.el= files + of a layer to add required layers. +- Add macro =dotspacemacs|symbol-value= with new special variable value + =display-graphic-p=. This variable will evaluate =(display-graphic-p)= + when called with =dotspacemacs|symbol-value=. Use this special value + to be able to have unicode symbol in GUI client but not in terminal + clients. +- Add missing =spacemacs/= function prefix (thanks to person808) +- Add choice of distribution on install (thanks to justbur) +- Add distribution name in home buffer +- Add distribution to =spacemacs/describe-system= (thanks to TheBB) +- Rewrite evil-leader keys handling to make ~M-m~ work correctly + (thanks to justbur) +- Replace =after-init-hook= with better hook =emacs-startup-hook= + (thanks to vkz) +- Fix some crashes when a package cannot be updated and warn about such + packages when updating (thanks to bmag) +- Fix ~SPC u~ not repeating universal-argument (thanks to luxbock) +- Fix Spacemacs Home Buffer to jump to bookmarks (thanks to travisbhartwell) +- Fix =ace-link= in spacemacs buffer (thanks to avoine) +- Fix an issue with Emacs 25 in =init.el= (not yet officially supported) + (thanks to justbur) +- Fix ~return~ binding in terminal in home buffer(thanks to d12frosted) +- Fix custom banner path (thanks to d12frosted) +- Fix inconsistent detection of orphaned packages to delete +- Set =gc-cons-threshold= to 100MB and define it in =init.el= +- Use =package-alist= to resolve orphans +- Better indentation for =spacemacs|add-toggle= macro (thanks to TheBB) +- Remove some dead code for =use-package= (thanks to TheBB) +- Remove =tooltip-use-echo-area= usage which is obsolete since Emacs 24.1 + (thanks to xfq) +- Remove duplicate call to =dotspacemacs/init= (thanks to sooheon) +- Display home buffer links even when no banner are displayed + (thanks to sooheon) +- Better centering of text in the home buffer +*** Other fixes and improvements +- Add contribution guidelines =CONTRIBUTE.md= (thanks to robbyoconnor) +- New documentation on layers (thanks to TheBB) +- Suppress byte compiler warnings on startup (thanks to justbur) +- Reactivate prefix command names since they are working correctly with + =which-key= (were also working with =guide-key=) (thanks to martinmr) +- Delete deprecated =!user= contrib directory. +- Removed lasts git submodules, Spacemacs is now submodule free! +- Typos and documentation improvements (thanks to agzam, alexanderkjeldaas, + andyque, benwooth, BrianHicks, catern, cgrinds, d12frosted, Devagamster, + gleber, Immortalin, jgertm, JinweiClarkChao, jmiven, JorisE, JoshTGreenwood, + justbur, luxbock, mbertheau, mortonfox, nwolfe, oneeman, person808, rakyi, + sotte, robbyoconnor, robmerrell, screamish, sooheon, srid, swaroopch, syohex, + travisbhartwell, x-ji, xfq, zmthy) +* Release 0.103.x +** 0.103.6 (2015/08/30) +*** Core +- Fix error with ~SPC h b~ (bookmarks) (thanks to sgepigon) +** 0.103.5 (2015/08/09) +*** Layer changes +**** Osx +- Fix initialization of =reveal-in-osx-finder= (thanks to fintelkai) +*** Core +- Temporarily switch to HTTP instead of HTTPS to communicate with + elpa.gnu.org (thanks to robbyoconnor) +** 0.103.4 (2015/08/07) +*** Layer changes +**** Clojure +- Fix key bindings for new Clojure major modes: =clojurec-mode=, + =clojurescript-mode= and =clojurex-mode= (thanks to benalbrecht) +** 0.103.3 (2015/08/04) +*** Layer changes +**** Osx +- Rename =reveal-in-finder= to its new name =reveal-in-osx-finder= + (thanks to syohex) +** 0.103.2 (2015/07/04) +*** Layer changes +**** Git +- Fix =magit-repository-directories= variable name (thanks to travisbhartwell) +- Fix =magit-blame= key binding (thanks to jenanwise) +- Use =magit-log-all= instead of =magit-log= on ~SPC g l~ (thanks to tuhdo) +*** Other fixes and improvements +- Typos and documentation improvements (thanks to cscorley, dstcruz, h3dkandi, + kccai, MadAnd, person808, Profpatsch, stnly, stormpat, xfq, zachlatta) +** 0.103.1 (2015/07/02) +*** Layer changes +**** Git +- Fix ~F~ in Vim style in =Magit= status buffer, now ~F~ is correctly + bound to =pull= popup menu +- Fix intermittent erroneous ~k~ key binding in =Magit= status buffer. +*** Core +- Fix mandatory dependency on =evil-escape= +- Fix evilification of =evil-escape= starter key +** 0.103.0 (2015/07/01) +*** IMPORTANT: Breaking changes +- Spacemacs is now compatible only with =Magit 2.1= and later, be + sure to update your packages. +- =auctex= layer has been renamed =latex=, be sure to update your + dotfile if you use this layer. +- =erlang/elixir= layer has been split into two layers =erlang= and + =elixir=, be sure to update your dotfile if you use these layers. +- =git= layer has been split into two layers: =git= and =github= so + the layer variable =git-enabled-github-support= is deprecated, you + have to add the layer =github= in your dotfile. +- =git-gutter= has been replaced by =diff-hl=. This package is in + the new layer =version-control=, be sure to add this new layer to + your dotfile. +- Projectile key bindings changes: + ~SPC p e~ is now ~SPC p r~ (recent files) + ~SPC p R~ is now ~SPC p G~ (regenerate tags) + ~SPC p r~ is now ~SPC p R~ (replace) +*** Hot new features +- Add support for Magit 2.1! +- Helm now uses its header to display the input pattern. +- Use Flycheck default configuration to check the current buffer in + "real time" (yes this is a hot new features :-)) +- New interactive function =spacemacs/switch-to-version=, it will ask + for a version number and warn if the current branch is not =master=. + Users on =develop= branch cannot use this function (it has no effect). +- Clicking on the up arrow in the mode-line will now update Spacemacs. + A prompt asks for confirmation before updating. +- New "tool assisted" search and replace interface supporting =ag=, =pt=, + and =ack= with a new key binding scheme. Check the documentation for + =searching with an external tool=. +*** New Layers +- elixir (split from =erlang-elixir=) +- erlang (split from =erlang-elixir=) +- github (split from =git=) +- ipython-notebook (ein) (thanks to CestDiego) +- latex (renamed from =auctex=) +- version-control +*** Dotfile changes +- New variable =dotspacemacs-auto-save-file-location= which enable or + disable auto-saving of modified files. Possible values are =original= to + auto-save the file in-place, =cache= to auto-save the file to another + file stored in the cache directory and =nil= to disable auto-saving. + Default value is =cache=. +*** Layer changes +**** Spacemacs +- Add text alignment key bindings on ~SPC x a~ prefix (thanks to justbur and + TheBB) +- Remove the kill ring from =savehist-additional-variables= to avoid an issue + with abnormal high size of =savehist= file (thanks to tuhdo) +- Add documentation files to =helm-spacemacs= (thanks to person808) +- Add support for =.org= files in =helm-spacemacs= (thanks to tuhdo) +- Add explicit titles for documentation files in =helm-spacemacs= + (thanks to tuhdo) +- Remove the dependency on =f= library in =helm-spacemacs= + (thanks to person808) +- Revert ~C-o~ in =holy-mode= since it shadows too many packages key bindings + (thanks to tuhdo) +- Evilify =helm-ag= and =helm-grep= buffers (obtained by pressing ~f3~ in + the helm buffer while searching) (thanks to cpaulik) +- Search with =ag=, =pt= and =ack= are done with the same interface based on + =helm-ag= +- Add search integration in =expand-region= and =auto-highlight-symbol= + (thanks to justbur) +- Update search with =grep= to match the new search interface + (thanks to justbur) +- Quote input when default text is used in search (thanks to justbur) +- =smart-search-project= on ~SPC /~ now fallback to searching files in current + directory when there is no project (thanks to justbur) +- Replace =dired-goto-file= with =helm-find-files= in Dired (thanks to tuhdo) +- Add support for .org files to ~SPC s l~ key binding, it allows to quickly + jump to file headers using Helm (thanks to tuhdo) +- Re-enable =auto-save= mode (thanks to tuhdo) +- Set =:defer 1= in =helm= initialization (which means that helm will be + auto-loaded automatically after 1 second of idle time) +- Fix =helm-resume= opening window in half of split screen (thanks to sooheon) +- Use =helm= header to display the input pattern (thanks to tuhdo) +- Fix =open-in-external-app= when the buffer is not visiting a file + (thanks to travisbhartwell) +- Prevent paste micro-state to be triggered by ~C-r~ in =insert state= +- Projectile key bindings changes: + ~SPC p e~ is now ~SPC p r~ (recent files) + ~SPC p R~ is now ~SPC p G~ (regenerate tags) + ~SPC p r~ is now ~SPC p R~ (replace) +- Remove =comint-delchar-or-maybe-eof= on ~C-d~, it fixes ~C-d~ scroll down + behavior in =normal state=, user has to press the stock binding ~C-c C-d~ + to send an =EOF= (thanks to kini) +**** Auto-completion +- Yasnippet: Default =helm-yas-display-key-on-candidate= to =t= (thanks to + BrianHicks) +- Yasnippet: Disable =smartparens= while expanding to fix a bug with + =hippie-expand= (thanks to tuhdo) +- New layer variable =auto-completion-enable-snippets-in-popup= to add + snippets directly to auto-completion popup (thanks to person808) +**** Autohotkey +- Fix =.ahk= file extension declaration (thanks to ralesi) +**** C/C++ +- Add package =gdb-mi= (gdb-many-windows) which enables an IDE like debugger + frontend for Emacs (thanks to tuhdo) +**** Clojure +- Add ~SPC e w~ to eval last sexp and replace it with the result (thanks to + DayoOliyide) +- Evilify Cider inspector (thanks to ppold) +**** Elixir +- List all Elixir key bindings in README +- Update configuration to support new =alchemist= 1.0 feature (thanks to tonini) +- Enable auto-completion support +**** Emacs Lisp +- Add new Spacemacs snippets =micro-state= and =new-package= (thanks to + CestDiego) +- Add (f)ielm-indent-line for =ielm= mode (thanks to BlinkD) +**** Emoji +- Remove the extension and use the MELPA package +**** ERC +- Use =erc-yank= on ~p~ in normal state if =gist= package is available + (thanks to CestDiego) +**** Evil-snipe +- Update configuration to support last upstream changes (thanks to hlissner and + MadAnd) +**** Extra-langs +- Enable =QML= mode for =.qml= files (thanks to bennofs) +**** Eyebrowse +- Add support for workspace labels (thanks to rphillips) +**** Finance +- Evilify =ledger-report-mode= (thanks to darkfeline) +**** Git +- Replace =git-gutter= by =diff-hl= (thanks to tuhdo) +- Remove =gc= prefix command as unused from guide-key (thanks to tko) +- Add =magit-diff= key binding on ~SPC g d~ (thanks to kevinushey) +- Evilify =magit-diff= buffer +- Implement fullscreen for =Magit= without advices (thanks to tarsius) +- Fix whitespace toggles for =Magit= (thanks to tarsius) +- Remove deprecated =magit-last-seen-setup-instructions= (thanks to tarsius) +- Move whitespace toggle in =Magit= to ~C-S-w~ +- Add ~SPC g L~ to display the log for the current file (thanks to tko) +**** Go +- Add ~SPC m g a~ to switch between tests and implementation (thanks to + jenanwise) +**** Gtags +- Enable =helm-gtags= for =compilation-mode= and =shell-mode= (thanks to tuhdo) +**** Haskell +- Add =company-cabal= support for auto-completion in =.cabal= files (thanks + to bjarkevad) +- Fix error with =electric-indent-local-mode= in some versions of Emacs + (thanks to jeremyjh) +**** iPython-notebook (ein) +- Add key bindings on major-specific leader (thanks to cpaulik) +- Add ~C-RET~ and ~S-RET~ key bindings to behave like the =ein= web interface + (thanks to cpaulik) +- Bind ~SPC f s~ to save the notebook (thanks to cpaulik) +**** LaTeX +- Add support for =RefTeX= (thanks to JP-Ellis) +- Add support for =LatexMk=, to enable it set the layer variable + =latex-build-command= to ="LatexMk"= (thanks to JP-Ellis) +- Use =auto-fill-mode=, with an environment-aware auto-fill function, you + can enable =auto-fill= support by setting the layer variable + =latex-enable-auto-fill= to =t=. You can also inhibit it in some environments + with the variable =latex-nofill-env= (thanks to JP-Ellis) +- Remove =build-view= in favour of just =build= as it seemed to be + broken and introduce ~SPC m v~ to view (thanks to JP-Ellis) +- General settings should now be easier to override in =dotspacemacs/config= +- Fix errors due to layer renaming (thanks to JP-Ellis and autosquid) +**** Markdown +- Add font-locking for code blocks (thanks to kennethlove) +- Add support for a bunch of languages for code blocks (thanks to dexafree) +**** Ocaml +- Don't auto-close backticks (thanks to edwintorok) +**** Org +- Fontify code blocks (thanks to tuhdo) +- Add =toc-org= package (thanks to CestDiego) +- Tweak org-pomodoro mode-line integration (Add missing leading space) +- Move =org-clock-save.el= to cache folder (thanks to BlinkD) +- Add key binding ~SPC m :~ for =org-set-tags= (thanks to cpaulik) +**** Osx +- New variable =osx-use-option-as-meta= allowing to enable or disable the + mapping of =option= key to =meta= key. This is especially useful for some + European keyboard layouts like Finish or Swedish (thanks to tko) +- Add ~⌘ +~ and ~⌘ -~ key bindings to scale text (thanks to JoshTGreenwood + and zimbatm) +- Only update =dired-use-ls-dired= if =gls= was found on path (thanks to + usharf) +- Add reveal in finder on ~C-⌘ f~ (thanks to usharf) +- Add key bindings ~⌘ a~ (select all) ~⌘ W~ (close frame) and ~⌘ n~ (new frame) + (thanks to mveytsman) +- Fix ~⌘ v~ paste behavior (thanks sooheon) +**** Powershell +- Add ~SPC a s p~ to start a =powershell= buffer (thanks to ralesi) +- Add ~SPC m r r~ for =powershell-regexp-to-regex= (thanks to ralesi) +- Add =$(= text object (thanks to ralesi) +**** Puppet +- Add Puppetfile support (thanks to nwolfe) +**** Python +- New supported test runner: =pytest= (thanks to cpaulik) +- New layer variable =python-test-runner= to choose between =nose= and + =pytest= +- Set =indent-tabs-mode= to =t= in REPLs, should fix indent errors (thanks to + tuhdo) +- Fix a loading bug due to a typo in =latex= layer (thanks to cpaulik) +**** Racket +- Fix not working =electric-pair-skip= (thanks x-ji) +**** Ruby +- Fix some annoyance with deep indentations (thanks to trishume) +**** Rust +- Add support for =flycheck= (thanks to swaroopch) +- Add support for auto-completion via =racer= (thanks to JP-Ellis) +- Use =compile= instead of the shell for =cargo=. This allow Emacs to parse the + output, including all the errors (thanks to JP-Ellis) +**** Scala +- Set classpath directory of =ensime= to =.cache/ensime= (thanks to cyrillk) +**** Slime +- Add a bunch of key bindings (thanks to spigo900) +**** Syntax-checking +- Now use the =flycheck= default configuration to trigger checks. Checks + are now performed live (thanks to tuhdo and thrnio) +**** Theme +- Add spacemacs-theme! (WIP) (thanks to nashamri) +- Add tao theme (thanks to elais) +*** Core +- New interactive function =spacemacs/switch-to-version= +- Clicking on the up arrow will now update Spacemacs +- Add a link to Vimmers guide in quick help of startup buffer (thanks to + person808) +- Enable =use-package-verbose= when =dotspacemacs-verbose-loading= + is set to =t= +- Better name for placeholders in layer templates (thanks to kini) +- Beautify change log (thanks to tuhdo) +- Layers are now auto-discovered recursively which allow arbitrary + directory hierarchy. Directory names starting with =!= are categories. + (thanks to TheBB) +- Fix regression when =dotspacemacs-startup-banner= is set to =nil= + (thanks to ptb) +- Fix home buffer keys in terminal (thanks to tuhdo) +- Fix bookmark list in home buffer (thanks to fandag) +- Add support for =material-light= theme (thanks to cpaulik) +- Use SSL to contact elpa repositories when possible (thanks to zimbatm) +- Emacs 25 required the line =(package-initialize)= in the =init.el= + file (thanks to justbur) +- Add the possibility to call =configuration-layer/update-packages= in + batch mode (thanks to travisbhartwell) +*** Other fixes and improvements +- Conversion of all layer README.md files to .org (thanks to CestDiego + and cpaulik) +- Conversion of documentation files to .org (thanks to person808) +- Add a guide for Vimmers in =doc= directory (thanks to person808) +- Typos and documentation improvements (thanks to cloudbring, duerrp, dxnn, + dvberkel, fotoetienne, JoshTGreenwood, kccai, OliverM, MadAnd, person808, + robbyoconnor, royseto, swaroopch, travisbhartwell, tuhdo, xfq) +* Release 0.102.x +** 0.102.2 (2015/06/03) +*** Layer changes +**** Org +- Fix bug with =ox-gfm= by moving it to extensions +*** Core +- Fix detection of new versions by correctly fetch latest changes +** 0.102.1 (2015/06/01) +*** Layer changes +**** Org +- Fix lazy-loading of =ox-gfm= package. +*** Core +- Catch layer variables syntax errors +** 0.102.0 (2015/05/31) +*** IMPORTANT: Breaking changes +- All Emacs Lisp related configuration has been moved to its own layer + called =emacs-lisp=, be sure to add this layer to your dotfile. +- All shell related configuration has been move to its own layer called + =shell=, be sure to add this layer to your dotfile if you use a shell + inside Emacs. +- Key binding to reload the dotfile is now ~SPC f e R~ instead of + =C-c C-c= or ~SPC m c c~. Note that ~SPC f e R~ can be triggered + anywhere (it is not restricted to the dotfile anymore). +- Key binding to switch buffer is now ~SPC b b~ instead of ~SPC b s~. +- ~SPC f f~ now uses =helm-find-files= instead of =ido=, use the new + dotfile variable =dotspacemacs-use-ido= to get the old behavior back. +- Helm ~TAB~ and ~C-z~ key bindings have been *swapped*. +- By default *single space* sentence delimiter is defined. +- Layer variable values set with =:variables= keyword need to be quoted + like in a regular =setq= expression. +*** New Layers +- Agda (thanks to ocharles) +- Chrome (thanks to beardedprojamz) +- D (thanks to trishume) +- Deft (thanks to trishume) +- Emacs-lisp +- Emoji +- Eyebrowse +- Games (thanks to nashamri) +- Gnus (thanks to cpaulik) +- Gtags (thanks to tuhdo) +- iBuffer (thanks to alex-glv) +- Pandoc (thanks to cpaulik) +- Prodigy (thanks to CestDiego) +- Purescript (thanks to kofno) +- Rust (thanks to mkaito) +- Salt (thanks to beardedprojamz) +- Search Engine (thanks to CestDiego) +- Semantic (thanks to tuhdo) +- Shell +- Spotify (thanks to BrianHicks) +- Sql (thanks to BrianHicks) +- TypeScript +- Vim-powerline +*** Dotfile changes +- New variable =dotspacemacs-search-tools= which is a list of search tool + executable names. Spacemacs uses the first installed tool of the list + with search related key bindings (~SPC /~, ~SPC s ...~). + Supported tools are =ag=, =pt=, =ack= and =grep=. +- New variable =dotspacemacs-highlight-delimiters= which selects a scope + to highlight delimiters. Possible value is =all=, =current= or =nil=. + Default is =all=. (thanks to tuhdo) +- New variable =dotspacemacs-additional-packages=. Adding packages to + this list will install them without needing them to be wrapped in a + layer. Ideal for quickly add a package. The package configuration + can be put in =dotspacemas/config=. +- New variable =dotspacemacs-use-ido=. If non nil then =ido= replaces =helm= + for some commands. For now only =find-files= (SPC f f) is replaced. +- New key binding ~SPC f e D~ to open an =ediff= buffer between the user + dotfile and the current template. +- Disable paste micro-state by default, i.e. set the variable + =dotspacemacs-enable-paste-micro-state= to =nil= in the dotfile template. +*** New conventions +- Add conventions for markup languages like =markdown= or =org= + (thanks to cpaulik) +*** Layer changes +**** Spacemacs +- Auto-indent when pasting use the universal argument to not auto-indent + (thanks to tuhdo) +- Fix =global-mode-string= for mode-line (thanks to 3marcusw) +- Display =guide-key= buffer at the bottom instead of the right so we get + more space. Also fix some issues with other popup interaction. +- Use single space sentence delimiter (thanks to roryk) +- Restore maximized frame state with =zoom-frm= (thanks to ralesi) +- Improve =golden-ratio= excluded buffers coverage (thanks to tuhdo) +- Add missing =evil-window-*= commands to =golden-ratio= managed commands + (thanks to riclima) +- Add CamelCase motion toggle to =subword-mode= (thanks to mkcode) +- Add =open-junk-file= package which allows to quickly create a junk file + in =.cache= directory. Bound to ~SPC f J~ (thanks to tuhdo) +- Add ~SPC T s~ to toggle semantic-stickyfunc (thanks to cpaulik) +- Add ~SPC b Y~ and ~SPC b P~ to copy/paste whole buffer (thanks to swaroopch) +- Add ~SPC h d b~ to =describe-bindings= (thanks to mkcode) +- Add toggle to hide/show the mode line on ~SPC t m t~ (thanks to jupl) +- Add =move-text= micro-state +- Add =highlight-parentheses= package which can activated by setting + =dotspacemacs-highlight-delimiters= to =current= (thanks to tuhdo) +- Add =clean-aindent-mode= package to cleanly delete virtual indentation + (thanks to tuhdo) +- Move =yasnippet= and =hippie-exp= to =auto-completion= layer. +- Move =multi-term= and shell packages to new =shell= layer +- Move =flyspell= and =helm-flyspell= to =syntax-checking= layer +- Move ~SPC b r~ to ~SPC f R~ (rename file) +- Move some toggles key bindings which are now: + - ~SPC t s~ for syntax checking + - ~SPC t S~ for spelling checking + - ~SPC t f~ for fill column + - ~SPC t F~ for auto-fill + - ~SPC t c~ for camelcase +- Move =sp-local-pair= to =:config= of =smartparens= so user can override + them (thanks to person808) +- Remove ~SPC b 0~ and ~SPC b $~ redundant key bindings (thanks to tuhdo) +- Remove all themes from the layer (since now themes are not + automatically uninstalled). +- Don't use the minibuffer for =scroll= micro-state +- Don't close compilation buffer after success (thanks to TheBB) +- Make =trailing-whitespace= face more subtle (thanks to tuhdo) +- Beautify whitespace highlighting (thanks to tuhdo) +- Make inactive window face of mode-line compatible with more themes + (thanks to tuhdo) +- Fix the =recentf-exclude= variable, now cache folder is correctly excluded + (thanks to rcherrueau) +- Fix global toggle for whitespace. +- Fix for new line insertions with ~SPC i~ (thanks to nashamri) +- Fix =spray= cursor issue when quitting. +- Tweak =fci-mode= face color, should be better in most themes + (thanks to tuhdo) +- Improve =smooth-scroll= configuration (thanks to sooheon) +- Refactor =spacemacs/init-evil-lisp-state= to use =use-package= + (thanks to mveytsman) +***** Helm +- Switch commands for ~Tab~ and ~C-z~ in Helm (thanks to darkfeline) +- Remove Helm header line to make it clearer (thanks to tuhdo) +- Manually manage =popwin= to improve popup window interactions (thanks to + tuhdo) +- Enable fuzzy matching in Helm (thanks to ralesi) +- Turn on colors in =helm-swoop= (thanks to danielwuz) +- Render README.md file of layers with =Open README= action of + =helm-spacemacs=, use the universal argument ~C-u~ to open + the file without rendering it (thanks to tuhdo) +- Add dotfile variables helm source to =helm-spacemacs= +- Add support for extensions in =helm-spacemacs= +- Use =helm-pp-bookmarks= instead of =helm-bookmarks= (thanks to darkfeline) +- Move ~C-SPC~ on ~M-SPC~ and ~S-M-SPC~ for =helm= and =ido= micro-states. +- Make =helm-find-files= =backspace= key behave like =ido= (thanks to tuhdo) +- Fix aggressive manipulation of =face-remapping-alist= in =helm= and =ido= +- Automatically create directories if needed when renaming a file (thanks to + env0der) +- Replace =helm-projectile-vc= (which does not exist) by =projectile-vc= + (thanks to swaroopch) +- Fix =toggle-maximize-buffer= (thanks to tuhdo) +***** Evil +- Use non-visual lines for j/k navigation (thanks to mlsteele) +- Enable =evil-execute-in-normal-state= in =holy-mode= +- Better default face for =evil-search-highlight-persist-highlight-face= + (thanks to tuhdo) +- Add visual state mapping for =<= and =>= to =gv= respectively + (allow to indent a region several times). +- Add =spacemacs/smart-goto-definition= which attempts to call + ~SPC m g g~ and falls back to =evil-goto-definition= if that fails + (thanks to luxbock) +- Replace ~C-o~ with ~M-o~ in =dired= buffer since ~C-o~ is replaced with + =evil-execute-in-normal-state= (thanks to tuhdo) +- Make =evil-smart-*= functions respect the leader key (thanks to person808) +- Advice =evil-jump-to-var= with =evil-set-jump= (thanks to luxbock) +- Temporary hack to speed up =ace-jump-line= (~SPC l~) as an evil motion. +**** Auctex +- Add =RefTeX= package (thanks to rpglover64) +- Add =flycheck= support +- =build-view= always recompile TeX (thanks to kvelicka) +**** Auto-completion +- New variables: + - =auto-completion-return-key-behavior= set the action to perform when the + ~RET~ key is pressed, the possible values are =complete= and =nil=. + - =auto-completion-tab-key-behavior= set the action to perform when the + ~TAB~ key is pressed, the possible values are =complete=, =cycle= and =nil= + - =auto-completion-complete-with-key-sequence= is a string of two characters + denoting a key sequence that will perform a =complete= action if the + sequence has been entered quickly enough. If its value is =nil= then the + feature is disabled. + - Default values are ~RET~ -> =complete=, ~TAB~ -> =cycle= and sequence is + =nil= +- Rename =auto-completion-enable-company-help-tooltip= to + =auto-completion-enable-help-tooltip= +- Add support for =company-statistics=, to activate it set the layer variable + =auto-completion-enable-sort-by-usage= to =t= (thanks to person808) +- Add =auto-yasnippet= package on ~SPC i S~ (thanks to tuhdo) +- Disable =company-tooltip-flip= (thanks to tuhdo) +- Allow a snippet to wrap around a selected region when expanded, + press ~C-x C-x~ to go to the original mark and run =yas-expand= + to wrap the selected region in expanded snippet. (thanks to tuhdo) +- Allow =hippie-expand= to expand snippets (thanks to tuhdo) +- Remove =company-yasnippet= backends use ~SPC i s~ and ~C-p~ +- Fix =company= and =fci-mode= incompatibility (thanks to tuhdo) +- Fix wrong creation location for new snippets with =yas-new-snippet= (thanks + to CestDiego) +- ~SPC t a~ now correctly toggle =company= by default. +- Remove unneeded =yasnippet-snippets= submodule (thanks mkcode) +- Better lazy-loading of =yasnippet= (thanks to tuhdo) +**** Autohotkey +- Use MELPA package (thanks to ralesi) +**** C/C++ +- New layer variable =c-c++-enable-clang-support= +- New layer variable =c-c++-default-mode-for-headers= (thanks to ceales) +- Remove unnecessary =auto-mode-alist= (thanks ceales) +- Add =clang-format= support (thanks to gnzlbg) +**** Chrome +- Add better integration with edit-server package (thanks to CestDiego) +- Added Gmail messages support with =ham= mode (thanks to CestDiego) +**** Clojure +- Add binding to connect to REPL in Cider on ~SPC m s c~ (thanks to jcsims) +- Add ~SPC m t a~ to reload test namespace before running all tests (thanks to + voxdolo) +- Add ~SPC m t r~ to reload test namespace and re-run failed tests (thanks to + voxdolo) +- Add ~SPC m t t~ to reload test namespace and run focused test (thanks to + voxdolo) +**** Colors +- Add =rainbow identifiers= color profiles for =gotham= and + =material= themes. +- Add colorization of keywords and function names for + =rainbow identifiers=. +- New variable =colors-theme-identifiers-sat&light= to set default + lightness and saturation for a given theme. +**** Emacs-lisp +- Move ~SPC m f~ bindings for code formatting to ~SPC m =~ +- Add =macrostep= package with a micro-state on ~SPC m d m~ + (thanks to person808) +**** Erc +- Add ERC channels to mode-line (thanks to swaroopch) +- Add ~SPC a i i~ key binding to switch to active ERC channels (thanks + to swaroopch) +- Highlight nicks using =erc-hl-nicks= (thanks to CestDiego) +- Image inline support using =erc-image= (thanks to CestDiego) +- Logging to ~/.emacs.d/.cache/erc-logs (thanks to CestDiego) +- =ViewLogMode= for viewing logs (thanks to CestDiego) +- YouTube videos Thumbnails inline using =erc-yt= (thanks to CestDiego) +- Social Graph for ERC messages using =erc-social-graph= (thanks to CestDiego) +**** ESS +- Fix lazy-loading of packages (thanks to jcpetkovich) +- Update to take care of the merge of =company-ess= in =ess= + (thanks to jcpetkovich) +**** Extra-langs +- Add =matlab= package (thanks to TheBB) +**** Git +- Make =git-gutter= key bindings work with or without the fringe (thanks + to person808) +- Fix =git-gutter= and =linum-mode= integration (thanks to person808) +- Fix =s= key binding to stage item in visual state. +- Replace =with-eval-after-load= by =eval-after-load= (compatible with 24.3) + (thanks to person808) +- Disable =evil-snipe= in =magit-status-mode= (thanks to person808) +- Enable =fci-mode= (fill column) in =git-commit-mode= (thanks to tuhdo) +- Add =helm-gitignore= package on ~SPC g I~ (thanks to jupl) +**** Gtags +- Add =helm-gtags-dwim-other-window= on ~SPC m g G~ (thanks to mijoharas) +**** Haskell +- ensure =haskell-indentation= is loaded before calling members (thanks + to chrisbarrett) +- fix misspelled references to keymaps (thanks to chrisbarrett) +- fix function names =identation= instead of =indentation= (thanks + to chrisbarrett) +- Fix =haskell-indentation= =eval-after-load= (thanks to chrisbarrett) +- Fix =ghci-ng= key bindings being overridden (thanks to bjarkevad) +- Use new package =haskell-snippets= +- Use =ghci-ng= for function =haskell-process-do-type-on-prev-line= (thanks to + bjarkevad) +**** Html +- Improve =web= micro-state key bindings (thanks to CestDiego) +- =emmet= key bindings fixes (thanks to louy2 and mkcode) +- Use only =smartparens= in =web-mode= (thanks to louy2 and mkcode) +- Add =eco= to =web-mode= =auto-mode-alist= (thanks to louy2 and mkcode) +- Fix buggy =T= key with =emmet= +- Add =company-web= package (thanks to CestDiego) +- Add a bunch of new pairs to =sp-local-pair= (thanks to CestDiego) +- Turn on =rainbow-delimiters= for =LESS= and =SCSS= (thanks to jupl) +**** Javascript +- Add =js-doc= package (thanks to geksilla) +- Add =web-beautify= package on ~SPC m =~ (thanks to elliotec) +- Apply key bindings conventions to some =tern= key bindings. +**** Lua +- Add support for auto-completion (thanks to mijoharas) +**** Markdown +- Add a bunch of new key bindings to improve consistency of key bindings + for markup languages, see [[https://github.com/syl20bnr/spacemacs/commit/7b6678efd6cece5bbb3419579590b843943f9e13][commit]] (thanks to cpaulik) +- Add markdown render buffer command on ~SPC m c r~ (thanks to CarlQLange) +- Add ~SPC m i k~ to insert =...= pairs (thanks to CestDiego) +**** Ocaml +- Add REPL using =utop= (thanks to edwintorok) +- Auto-indentation using =ocp-indent= (thanks to edwintorok) +- Add support for =company= auto-completion (thanks to edwintorok) +- Add support for =flycheck= syntax checking (thanks to edwintorok) +- New =merlin= key bindings (thanks to edwintorok) +**** Org +- Add a bunch of new key bindings to improve consistency of key bindings + for markup languages, see [[https://github.com/syl20bnr/spacemacs/commit/7b6678efd6cece5bbb3419579590b843943f9e13][commit]] (thanks to cpaulik) +- Use =org-startup-indented= instead of a hook so users can easily +remove =org-indent-mode= (thanks to darkfeline) +- Add support for =org-pomodoro-clock= to mode-line (thanks to swaroopch) +- Add =org-present= package (thanks to swaroopch) +- Add ~SPC m j~ for =helm-org-in-buffer-headings= (thanks to swaroopch) +- Add ~SPC m n~ for =org-narrow-to-subtree= (thanks to mattly) +- Add ~SPC m N~ for =widen= (thanks to mattly) +- Add ~SPC m i k~ to insert =...= pairs (thanks to CestDiego) +- Add =htmlize= package to enable syntax highlight in export HTML + (thanks to tetsusoh) +- Fix error with =org-async= (thanks to justbur) +**** Osx +- Make ~Command-s~ work with other modes (thanks to linktohack) +- Make =dired= use =coreutils gls= if installed (thanks to usharf) +**** Perforce +- Add a bunch of key bindings see [[https://github.com/syl20bnr/spacemacs/commit/6793eda4a90ee3a6c19c433b8676d5d9d8c3de76][commit]] (thanks to snandan) +**** Puppet +- Add =auto-completion= support (thanks to PierreR) +**** Python +- Add YAPF extension for buffer formatting (thanks to kennethlove) +- =nose.el= is now compatible with =virtualenv= (thanks to danielwuz) +- Add a function to remove unused imports =python-remove-unused-imports= + on ~SPC m c i~ (thanks to danielwuz) +- Add =pip-requirement= package (thanks to CestDiego) +- Enable =company= in Python REPL for code completion (thanks to tuhdo) +- Fix wrong extra parenthesis when inserting a breakpoint + (thanks to CestDiego) +- Don't enable Vim key bindings in REPL if =holy-mode= is active (thanks to + tuhdo) +- Fix Python and Semantic integration when no =python= executable can be + found on the system (thanks to tuhdo) +**** Rcirc +- Add =rcirc-track-minor-mode= to the =rcirc-mode-hooks= (thanks to + luxbock) +**** Ruby +- Fix =ruby-test-mode= initialization +- Fix auto-completion (thanks to trishume) +- Fix Rails mappings showing up in non rails projects (thanks to horrorvacui) +- Add =:A= ex-command which switches between implementation and test + (thanks to naliwajek) +- Remove overloading of function =erm-darken-color= +**** Rust +- Add key bindings for cargo build, run, test (thanks to swaroopch) +**** Scala +- Add ~SPC m d A~ to attach to remote debugger (thanks to siegelzero) +**** Semantic +- Create directory for =semanticdb= if it doesn't exist (thanks to CestDiego) +**** Shell +- Use =shell-pop= to toggle shell/eshell and terminals (thanks to tuhdo) +- Add binding for EOF (^D) in =term= (thanks to darkfeline) +- Bind =term-send-tab= only in insert state (thanks to darkfeline) +- =up= and =down= in shell to cycle through previous commands (thanks to + ralesi) +- Fix for =paste= command in =multi-term=. +- Add ~SPC p $ t~ to run =multi-term= at project root +**** Slime +- Disable =smartparens= in SLIME REPL (thanks to tuhdo) +**** Smex +- Fix =smex= prompt whitespace (thanks to TheBB) +**** Syntax-checking +- New variable =syntax-checking-flycheck-pos-tip= to enable or disable + documentation popup (thanks to beardedprojamz) +**** Themes +- Add =apropospriate-theme= to megapack +- Add =jazz-theme= to megapack (thanks to matDobek) +- Fix theme-to-package rules for =base16= (thanks to mkaito) +**** Tmux +- Add support for motion state (thanks to rphillips) +**** Vim-empty-lines +- Update with last patches (thanks to person808) +- Exclude terminal modes (thanks to tonylotts) +**** Ycmd +- Move C/C++ related configuration to =c-c++= layer. +*** Core +- Add support for =use-package= injected hooks (not yet documented) +- It is now possible to create a layer directly in a known configuration + layer path. A helm buffer will ask for a known path or a new path + (thanks to justbur) +- The =:variables= keyword now behaves like regular =setq=. +- Add org elpa repository +- Use =archive= instead of =package-alist= to detect orphans + (fix false orphan positives when the dependencies of a package change) +- Improve support for images in Spacemacs banner, it is now possible to use + any image format supported by Emacs (thanks to jupl) +- Prefix all category folders in =contrib= with =!= (thanks to trishume) +- Smarter buffer switching which tries to avoid special buffers, you can + customize =spacemacs-useless-buffers-regexp= to define other buffers to + avoid (thanks to person808) +- Warn about duplicated layers +- Improvements to home buffer: Quick Help, Content toggles, + link faces, better key bindings (thanks to tuhdo) +- =dotspacemacs/location= now respect =dotspacemacs-filepath= value + (thanks to coldnew) +- Avoid conflict with hydra's =lv.el= (thanks to edwintorok) +- Update layer templates to use =setq= instead of =defvar= (thanks to + person808) +*** Other fixes +- Replace =defvar= with =setq= for variable definition =-packages=, + =-pre-extensions= and =-pre-extensions=. +- Themes in =dotspacemacs-themes= are not considered orphans anymore +- Fix "Unable to check for new version." if =.emacs.d= is a symlink + (thanks to louy2) +- Fix non unicode number spacing in mode-line +- Typos (thanks to Andrea, atamis, CarlQLange, charl, ctjhoa, Devagamster, + dguilak, edwintorok, fhzerorubigd, jackwilsonv, jupl, kini, latkins, MadAnd, + mlsteel, mosic, person808, skwuent, srid, swaroopch and zimbatm) +* Release 0.101.x +** Hot new features +*** Choose your own editing style +Thanks to the new =holy-mode= Spacemacs can now be used by Vim users +or Emacs users by setting the =dotspacemacs-editing-style= variable to +='vim= or ='emacs= in the dotfile. In =Emacs= style the leader is +available on =M-m=. It is possible to dynamically switch between the +two style with ~SPC P tab~. +*** Mandatory init function and new Pre and Post init functions +A package is now considered to be used only if there is a corresponding +=/init-= function explicitly defined. +There is now two new functions to initialize a given package: +- =/pre-init-= which is called before the init function +- =/post-init-= which is called after the init function +Even if a =pre= or =post= function exist for a given package, an =init= +function is still required to consider the package to be used. +*** Auto-completion +Spacemacs now officially support auto-completion. The old layer +=company-mode= has been removed and =auto-complete= has been removed +from the spacemacs layer. +They are now part of a new layer called =auto-completion=. +You'll have to this add layer to your dotfile to enable auto-completion. +*** Syntax checking +Flycheck has been removed from the Spacemacs layer and moved to a new +layer called =syntax-checking=. +You'll have to add this layer to your dotfile to enable the fly syntax +checking. +*** Org +Org packages have been removed from Spacemacs layer and moved to a new +=org= layer. +You'll have to add this layer to your dotfile to enable the Org +configuration of Spacemacs. +*** New shortcuts in startup buffer +Recent files, project and bookmarks can be displayed on the startup +buffer. Check for the new dotfile variable =dotspacemacs-startup-lists=. +(thanks to CarlQLange) +*** New lighter in the mode line +Lighter letters have been updated, now the letter corresponds to the +key binding to toggle the associated mode. For instance auto-completion +is on ⓐ and thus can be toggled with ~SPC t a~. +*** Better package update +The package update should now prevent even more errors when upgrading +a batch of packages. +** Initial Release (2015/04/13) +*** New layers +- evil-commentary: Alternative to =evil-nerd-commenter= + (thanks to person808) +- better-defaults: layer providing better defaults for Emacs commands, + rather empty for now. (thanks to tuhdo) +- ERC: an IRC client (thanks to swaroopch) +- Racket: a lisp dialect (thanks to trishume) +- xkcd: browse for XKCD in Emacs (thanks to CestDiego) +- shell-scripts: layer containing shell specific modes like =fish-mode= +- editorconfig: add support for EditorConfig (thanks to jupl) +*** New dotfile variables: +- =dotspacemacs-editing-style= can be either =vim= or =emacs=. +- =dotspacemacs-verbose-loading= if non nil the loading prints logs in + the =*Messages*= buffer. Default value is =nil=. +- =dotspacemacs-startup-lists= is a list of symbols to display recent + items in the startup buffer, possible values are: =recents=, + =bookmarks= and =projects= (thanks to CarlQLange) +*** Auto-complete +- Move to =auto-completion= layer +*** C/C++ +- Add key bindings ~SPC m g a~ and ~SPC m g A~ for open alternate file + (thanks to mijoharas) +*** Clojure +- Add ~SPC m e f~ eval function at point +- Add =cider-eval-sexp-fu= +- Fix for =cider-send-function-to-repl= (thanks to nashamri) +- Replace =auto-complete= by =company= for auto-completion +- Move ~SPC d~ commands on ~SPC h~ to meet Spacemacs conventions (thanks to + cpaulik) +- Open =cider-doc= without asking for symbol, close it with =q= (thanks to + cpaulik) +*** Company +- Move to =auto-completion= layer +- Refactoring of =company= configuration, it is now lazy-loaded and the + =company-backends= list is now a buffer local variable. =company= is + not enabled globally anymore. +- Set =company-delay= to 0.2 instead of 0 +- Ignore =company-quickhelp= for Emacs version < 24.4 +- Add support for =company= in various languages (thanks to trishume) +*** Emacs Lisp +- Add =eval-sexp-fu= (thanks to tuhdo) +- Enable eldoc in eval-expression and IELM (thanks to tuhdo) +- New key bindings ~SPC m e b~, ~SPC m e c~ and ~SPC m e r~ to evaluate + the buffer, the current form starting by =set= or =def= and the region + respectively (thanks to ralesi) +*** Ess +- Fix loading of =ess-R-object-popup= and =ess-R-data-view= + (thanks to jcpetkovich) +*** Extra-Lang layer +- Add =Nim= language (thanks to trishume) +*** Flycheck +- Move to =syntax-checking= layer +- Add =flycheck-pos-tip= (thanks to tuhdo) +- Enable flycheck for =lua= files (thanks rphillips) +*** Git +- Add =gitconfig-mode= and =git-commit-mode= (thanks to ralesi) +- Add =gitattributes-mode= and =gitignore-mode= (thanks to r4ts0n) +- Add key bindings in rebase mode +- Add =git-link= package (thanks to CestDiego) +- Enable Magit authentication on Windows (thanks to tuhdo) +- Loads =magit-gh-pulls= only after requesting it (thanks to cpaulik) +*** Go +- Add =run-package-tests= command on ~SPC m t p~ (thanks to robmerrell) +- Fix path to =go-oracle= (thanks to Pursuit92) +*** Haskell +- Move ~SPC m t~ and ~SPC m i~ under ~SPC m h~ +- Remove =hi2= (it is now integrated in =haskell-mode=) +- Disable =eletric-indent-mode= +- Fix =flycheck-haskell= autoload (thanks to jcpetkovich) +- Fix =flycheck= loading +- Move ~SPC m t~ to ~SPC m h t~ according to Spacemacs conventions (thanks + to jeremyjh) +- Add C-- =cmm-mode= (thanks to bgamari) +*** Helm +- Add =helm-colors= key binding on ~SPC C l~ (thanks to tuhdo) +- Make =helm-ff-doted-directory= consistent (thanks to tuhdo) +- Disable popwin-mode when a Helm session is active (thanks to tuhdo) +- Fix lazy-loading of helm for describe commands +- Add support for =pt= the platinum searcher (thanks to ralesi) +- Add support for =helm-ag-edit= +- Add function =spacemacs/helm-projectile-search-dwim= which select the + first available external search tool (pt, ag, ack or grep) (thanks to + ralesi) +- Enable =helm-descbinds= globally (thanks to tuhdo) +- Add key bindings for useful Helm commands: =helm-info-at-point=, + =helm-man-woman=, =helm-locate-library= and =helm-minibuffer-history= + (thanks to tuhdo) +- Add key bindings for searching the web using =helm-suggest= (thanks to + cpaulik) +*** Holy-mode +- New package providing Emacs edition style to Spacemacs +*** IRC +- rcirc: Create rcirc logging directory during init + (thanks to jcpetkovich) +- New ERC layer (thanks to swaroopch) +- Add ERC keybindings (thans to cpaulik) +- Move startup key bindings to prefix ~SPC a i~ +*** Markdown +- Associate =.mkd= with =markdown-mode= (thanks to bgamari) +*** Org +- Move to =org= layer +- Bind evil-leader in org-agenda-map (thanks to luxbock) +- Add =org-pomodoro= on ~SPC m p~ (thanks to swaroopch) +- Add key bindings for =org-clock-cancel= on ~SPC m q~, + and =org-set-effort= on ~SPC m f~ (thanks to swaroopch) +- Fix diminish of =org-indent= +*** Perspective +- Rebind =spacemacs/persp-switch-project= to ~SPC p p~ + (thanks to CestDiego) +*** Projectile +- Move projectile switch project from ~SPC p S~ to ~SPC p p~ +*** Python +- Add helm-pydoc on ~SPC m h d~ (thanks to danielwuz) +- Fix =pylookup= configuration +*** Racket +- Add key bindings for REPL interaction +*** Ruby +- Lazy-load =projectile-rails= +- Remove mode-line lighter for =robe= +*** Scala +- Do not enable ensime in non-file buffers (thanks to chrisbarrett) +*** SLIME +- Use slime for indentation (thanks to tuhdo) +- Add extension for SBCL (thanks to tuhdo) +- Allow to create a common lisp scratch buffer with slime-scratch + (thanks to tuhdo) +- Enable fuzzy completion with score (thanks to tuhdo) +- Don't enable SLIME in Emacs Lisp (thanks to tuhdo) +*** Smartparens +- Enable smartparens in eval-expression (thanks to tuhdo) +*** Themes +- Fix =themes-megapack= layer where themes could not be browsed in Helm. +- Add =material= theme (thanks to cpaulik) +- Add =darktooth= theme (thanks to person808) +- Add =gotham= theme (thanks to person808) +*** ycmd +- Set global config only if not already set (thanks naseer) +*** Web +- Add =sass-mode= (thanks to ryanartecona) +- Ensure that less gets loaded (thanks to mijoharas) +*** Various Improvements and Changes +- New =evil= state called =evilified= which is used in _evilified_ + buffers. +- Remove the following packages from Spacemacs layer: =dired+=, + =fancy-narrow=, =string-edit=, =visual-regexp-steroids= and =wdired= +- Rename =*-declarep= functions to =*-usedp= functions +- Display block selection info in the mode line + (thanks to emmanueltouzery) +- Bind =K= in normal state to ~SPC m h h~ if it exists + (thanks to person808) +- Add key binding for balancing windows on ~SPC w =~ (thanks to kini) +- Add key binding to indent region on ~SPC j =~ (thanks to tuhdo) +- Add key binding ~SPC w SPC~ for =ace-window= (thanks to ralesi) +- Add key binding ~SPC b h~ to open the startup buffer (thanks to ralesi) +- Add key binding ~SPC t ~~ to toggle Vim tildes +- Add adaptive wrap which appropriately indents wrapped lines (thanks to + person808) +- Add mouse support to line number column (thanks to ralesi) + - single click selects line + - double click selects text block + - drag across lines selects all lines dragged across +- Add =highlight-numbers= (thanks to tuhdo) +- Add =highlight-indentation= on ~SPC t h i~ and ~SPC t h c~ (thanks to + cpaulik) +- Add ace-link package to spacemacs layer (thanks to danielwuz) +- Add =indent-guide= on ~SPC t i~ (thanks to ralesi) +- Add link to cpaulik tutorial to use the Spacemacs icons in Ubuntu Unity +- Add C-w and brackets [] to guide-key-sequence (thanks to ralesi) +- Add =info+= to improve Info reading experience (thanks to tuhdo) +- Add default layers to dotfile template: =auto-completion=, + =better-defaults=, =git=, =markdown=, =org= and =syntax-checking= + (thanks to CarlQLange) +- Move some toggles on ~SPC T~: fringe, menu bar, tool bar, + frame maximize, frame fullscreen, frame transparency +- Restore rectangle-mark-mode key binding (thanks to tuhdo) +- Make quit the isearch-mode like vim (thanks to dsdshcym) +- Enable goto-address-prog-mode which makes URL in code comments clickable + (thanks to tuhdo) +- Disable aggressive indent for ediff buffers (thanks chrisbarrett) +- Prevent cursor from moving into minibuffer prompt (thanks to tuhdo) +- Remove tildes in Spacemacs buffer and read-only buffers like Info and + help (thanks to tuhdo) +- Ask user editing style when creating .spacemacs file (thanks to tuhdo) +- Fix for persistent-server if server never got started (thanks to ralesi) +- Fix nyan cat starting rainbow on a light background +- Fix some double loading of some packages +- Fix double loading of =extensions.el= files +- Fix question for preferred coding systems on Microsoft Windows +- Properly enable saveplace (thanks to tuhdo) +- Don't bind ~C-d~ in =ido-completion-map= to =ido-delete-file-at-head= + (thanks to segv) +- Don't refer to ~/.emacs.d/ directly at various places + (thanks to jcpetkovich) +- Don't want paste-micro-state to pop up when pasting in ex command + prompt (thanks to ralesi) +- Don't cycle when press TAB in eshell (thanks to tuhdo) +- Don't insert extra quote in dotspacemacs-mode (thanks to tuhdo) +- Adapt some micro-states to the micro-state macro (thanks to ralesi) +- Improve smooth scrolling configuration (reduce some point jump) + (thanks to tuhdo) +- Improve =doge= banner grammar (thanks to mathpunk) +- New =HOTOWs.md= file in =/doc= +- Add =Buy A Drink= badge to README.md +- Typo and documentation updates (thanks to danielwuz, swaroopch, + CestDiego, IvanMalison, agevelt, nwolfe) +** Hot Fixes +*** Startup Buffer +- Don't display the release notes in the startup buffer when Emacs is restarted + after a fresh install +- Startup buffer: fix widget activation in =holy-mode= (thanks to tuhdo) +- Startup buffer: Don't fontify the startup buffer when =rainbow-identifiers= +*** Auto-completion +- Fix error when toggling auto-completion in some buffers +*** Haskell +- Add new =haskell-snippets= package (fixes error with required =haskell-yas=) +- Fix missing quote in =haskell-indentation= +*** Org +- Org layer: exclude ox-gfm since it seems problematic for some users. + package is used +*** Ruby +- Fix auto-completion activation. +*** Themes +- Fix conflict between official Spacemacs solarized theme and + =color-theme-solarized= declared in =themes-megapack= layer. +- Add rules for all base16 themes (thanks to mkaito) +*** Various Fixes +- revert back =ag= as the default search tool instead of =pt=, =pt= can + conflict with =pt= command line tool from TCL parser tools. +* Previous Releases +- See Github release page diff --git a/COMMUNITY.org b/COMMUNITY.org new file mode 100644 index 0000000..9e1f000 --- /dev/null +++ b/COMMUNITY.org @@ -0,0 +1,111 @@ +#+TITLE: Spacemacs Community + +* Spacemacs Community :TOC_4_gh:noexport: + - [[#philosophy][Philosophy]] + - [[#for-contributors][For Contributors]] + - [[#for-users][For Users]] + - [[#moderation][Moderation]] + - [[#guidelines][Guidelines]] + - [[#people][People]] + - [[#issues][Issues]] + - [[#pull-requests-and-commmits][Pull requests and Commmits]] + - [[#messages][Messages]] + - [[#interpretation][Interpretation]] + - [[#collaborators-privacy][Collaborators privacy]] + - [[#maintainer][Maintainer]] + - [[#log][Log]] + +* Philosophy +** For Contributors +- This community is a community of hackers based on meritocracy and + volunteering. Hackers strive for excellence to make the world a better place, + so does the Spacemacs community. +- Be good in what you bring to the project be it code, documentation, typo + fixes, art, humor, ideas, project management, web design, assurance quality, + mentorship, you name it! We like to award achievements to people making a + difference in a wide variety of domains and occasions, [[file:./doc/DOCUMENTATION.org#specials][see it for yourself]]. + Why not you? Make it happen, make history! +- Think you are not good enough? Find support and mentors by chatting on Gitter + with fellow Spacemacs users or just open an issue on GitHub, you will find + help to fulfil your desire of contribution. We welcome anyone with good + intentions. +- In a nutshell: Be good, positive and/or with good intentions and focused on + the project. +** For Users +- Any question related to the project is welcomed and encouraged, the worst + thing that can happen is that we redirect you to the documentation. +- The majority of the interactions with the community happens on GitHub via + issues and on Gitter via the official Spacemacs channel. There is also an + active official twitter account =spacemacs=. +- Any opinion on the project is valorized given it is constructive. + +* Moderation +We want the community to be judged based on its moderation actions instead of +telling people how to behave. The golden rules of the community are to have good +intentions and stay focused on the project, for anything else that requires +moderation any future user or contributor can refer to this section to know +about our past moderation actions. So readers won't find any example or +definition of what collaborators judge offending or outrageous, instead they +will find at the end of this section a log of all major moderation actions taken +by the collaborators since the beginning of the project which started officially +in August 2014. It should allow you to decide whether or not you want to be part +of this community. If you are not convinced then be assured that the only evil +part in Spacemacs is the evil mode :-) +** Guidelines +These guidelines apply to all collaborators of the project, namely @syl20bnr, +@TheBB, @d12frosted and @bmag. +*** People +- Collaborators cannot ban any GitHub user from the repository but they can ban + users from the official Gitter channel. +- A user can be banned if and only if all the collaborators agree to do so. +- The reasons of the ban are mentioned in the moderation actions log (see + below). +*** Issues +- Issues can be locked if their contents are judged _inappropriate_, _offending_ + or if they deviate _dangerously_ from the project. +*** Pull requests and Commmits +- Collaborators can push to the repository without making a PR. +- PR can be rejected. Rejected PR always go with a reason explicitly written + when closing the PR. +- Commits can be reverted if they compromise the stability of the project. The + reason is contained in the commit comments. +- Pull request are also issues, thus issue guidelines also apply to pull + requests. +*** Messages +- Only the form of a message can be edited, not its meaning, except if this + meaning is _outrageous_. +- Moderators can add information to a message to improve its accuracy without + altering its meaning, +- Any edition of a message is logged in the =edits log= located at the end of + the edited message with the following format: + #+BEGIN_EXAMPLE + EDIT: [@moderator] action (reason: xxx) + #+END_EXAMPLE +- The reason is added only when needed (for instance we won't add a reason for + formatting edits) +** Interpretation +Words used in these guidelines like _good_, _inappropriate_, _offending_, +_dangerously_ and _outrageous_ are used without any explanation, their meanings +and interpretations are left solely to the discretion of the collaborators who +are educated persons working in the interest of the community. +** Collaborators privacy +Life and actions of collaborators outside of the project (i.e. outside of the +Spacemacs GitHub repository, official Spacemacs Gitter channels and Twitter +official Spacemacs account timeline) are completely detached from their +activities and roles in the project. They are free to express any opinion on the +project or any other subjects and those opinions cannot be used to compromise +their roles in the project as long as they follow the moderation guidelines with +good intentions. +** Maintainer +- The maintainer @syl20bnr as a BDFL is free to demote a collaborator in extreme + situations. +- When there is no consensus on a subject, the BDFL can decide to impose his + view on the subject. +** Log +For transparency and future reference any major moderation actions are recorded +here. As of Sunday, April 10th 2016, 7200 issues have been opened and 2 major +moderation actions have been taken: +| Date | Moderator | Action | Issue | Reason | +|------------+-----------+--------+-------+-----------------------------------------------------------------| +| 2016/01/27 | syl20bnr | lock | #3484 | comments judged to be offending towards the Spacemacs community | +| 2016/01/27 | syl20bnr | unlock | #3484 | let's make it happen, i.e. this document | diff --git a/CONTRIBUTING.org b/CONTRIBUTING.org new file mode 100644 index 0000000..b6ee605 --- /dev/null +++ b/CONTRIBUTING.org @@ -0,0 +1,256 @@ +#+TITLE: Contribution guidelines +#+HTML_HEAD_EXTRA: + +Spacemacs is a volunteer effort. We encourage you to pitch in. The community +makes Spacemacs what it is. We have a few guidelines, which we ask all +contributors to follow. + +You can only consider reading the sections relevant to what you are going to do: +- [[#asking-for-help][Asking for help]] if you are about to open an issue to ask a question. +- [[#reporting-issues][Reporting issues]] if you are about to open a new issue. +- [[#contributing-code][Contributing code]] if you are about to send a Pull-Request. + +Thanks! :heart: :heart: :heart: + +* Content :TOC@2:noexport: + - [[#asking-for-help][Asking for help]] + - [[#reporting-issues][Reporting issues]] + - [[#contributing-code][Contributing code]] + - [[#general-contribution-guidelines][General contribution guidelines]] + - [[#contributing-a-layer][Contributing a layer]] + - [[#contributing-a-keybinding][Contributing a keybinding]] + - [[#contributing-a-banner][Contributing a banner]] + - [[#additional-information][Additional information]] + - [[#testing][Testing]] + - [[#credits][Credits]] + +* Asking for help +If you want to ask an usage question, be sure to look first into some places as +it may hold the answer: + +- [[doc/FAQ.org][The FAQ]]. Some of the most frequently asked questions are answered there. +- [[doc/DOCUMENTATION.org][The documentation]]. It's the general documentation of Spacemacs. +- You may also read the =README.org= of the [[layers/][relevant layer(s)]]. + +If your question is not answered there, then please come into our [[https://gitter.im/syl20bnr/spacemacs][gitter chat]] to +discuss it with us :relaxed:. We will direct you to a solution, or ask you to +open an issue if it is needed. + +* Reporting issues +Issues have to be reported on our [[https://github.com/syl20bnr/spacemacs/issues][issues tracker]]. Please: + +- Check that the issue has not already been reported. + - This can be achieved by searching keywords on the [[https://github.com/syl20bnr/spacemacs/issues][issues tracker]]. +- Check that the issue has not been fixed in the =develop= version of Spacemacs. + - This can be achieved by running Spacemacs on the =develop= branch and trying + to reproduce the bug here. You can also check at the [[https://github.com/syl20bnr/spacemacs/tree/develop][source code]] to see if + it has been changed/corrected. +- Try to use a clear title, and describe your problem with complete sentences. + See also [[https://github.com/syl20bnr/spacemacs/wiki/Debugging#how-to-make-a-great-bug-report][How to make a great bug report]] in the wiki. +- Include the following information in your issue: + - The output of =SPC h d s= (=M-m h d s= in Emacs style), which gives the + versions information about your installation. + - If relevant, include the mode in which the problem arise (e.g. javascript + files, =org-mode=, etc…). + - If possible, try to include details on how to reproduce it, like a step by + step guide. + +* Contributing code +Code contributions are welcome. Please read the following sections carefully. In +any case, feel free to join us on the [[https://gitter.im/syl20bnr/spacemacs][gitter chat]] to ask questions about +contributing! + +** General contribution guidelines + +*** License +The license is =GPLv3= for all parts specific to Spacemacs, this includes: +- The initialization and core files +- All the layer files. + +For files not belonging to Spacemacs like local packages and libraries, refer +to the header file. Those files should not have an empty header, we may not +accept code without a proper header file. + +*** Conventions +Spacemacs is based on conventions, mainly for naming functions, keybindings +definition and writing documentation. Please read the [[file:doc/CONVENTIONS.org][CONVENTIONS.org]] file +before your first contribution to get to know them. + +*** Pull-Request +Submit your contribution against the =develop= branch. You should not use +your =master= branch to modify Spacemacs, this branch is considered to be +read-only. + +You may want to [[https://github.com/syl20bnr/spacemacs/wiki/Beginner%27s-Guide-to-Contributing-a-Pull-Request-to-Spacemacs][read our beginner’s guide for Pull Requests]]. + +/PR = Pull-Request/ + +**** Ideally for /simple/ PRs (most of them): +- Branch from =develop= +- One topic per PR +- One commit per PR +- If you have several commits on different topics, close the PR and + create one PR per topic +- If you still have several commits, squash them into only one commit +- Rebase your PR branch on top of upstream =develop= before submitting + the PR + +Those PRs are usually /cherry-picked/. + +**** For complex PRs (big refactoring, etc): +- Squash only the commits with uninteresting changes like typos, syntax fixes, + etc... and keep the important and /isolated/ steps in different commits. + +Those PRs are /merged/ and explicitly /not fast-forwarded/. + +*** Commit messages +Write commit messages according to adapted [[http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html][Tim Pope's guidelines]]: + +- Use present tense and write in the imperative: “Fix bug”, not “fixed bug” or + “fixes bug”. +- Start with a capitalized, short (72 characters or less) summary, followed by a + blank line. +- If necessary, add one or more paragraphs with details, wrapped at 72 + characters. +- Separate paragraphs by blank lines. + +This is a model commit message: + +#+begin_EXAMPLE +Capitalized, short (72 chars or less) summary + +More detailed explanatory text, if necessary. Wrap it to about 72 +characters or so. In some contexts, the first line is treated as the +subject of an email and the rest of the text as the body. The blank +line separating the summary from the body is critical (unless you omit +the body entirely); tools like rebase can get confused if you run the +two together. + +Write your commit message in the imperative: "Fix bug" and not "Fixed bug" +or "Fixes bug." This convention matches up with commit messages generated +by commands like git merge and git revert. + +Further paragraphs come after blank lines. + +- Bullet points are okay, too + + - Typically a hyphen or asterisk is used for the bullet, followed by a + single space, with blank lines in between, but conventions vary here + + - Use a hanging indent +#+end_EXAMPLE + +[[https://github.com/magit/magit/][Git Commit]] and [[https://github.com/magit/magit/][Magit]] provide Emacs mode for Git commit messages, which helps you +to comply to these guidelines. + +** Contributing a layer +Please read the [[file:doc/LAYERS.org][layers documentation]] first. + +It is recommended to use the =configuration-layer/create-layer= command in order +to create a layer, as it will take care of using the files templates and will +also create the file headers correctly. + +Contributed configuration layers are stored in the =layers/= folder. The +=layers/= folder also contains categories prefixed with =+= to put your layers +in. For example a layer for a language would go in the =layers/+lang/= folder. + +Layer with no associated configuration will be rejected. For instance a layer +with just a package and a hook can be easily replaced by the usage of the +variable =dotspacemacs-additional-packages=. + +*** File header +The file header for =elisp= files should look like the following template: + +#+BEGIN_EXAMPLE + ;;; FILENAME --- NAME Layer packages File for Spacemacs + ;; + ;; Copyright (c) 2012-2016 Sylvain Benner & Contributors + ;; + ;; Author: YOUR_NAME + ;; URL: https://github.com/syl20bnr/spacemacs + ;; + ;; This file is not part of GNU Emacs. + ;; + ;;; License: GPLv3 +#+END_EXAMPLE + +You should replace =FILENAME= by the name of the file (e.g. =packages.el=) +and =NAME= by the name of the layer you are creating, don't forget to replace +=YOUR_NAME= and =YOUR_EMAIL= also. Some files already have a template inside +=core/templates/=, so look in there first. +Note that if you use =configuration-layer/create-layer=, spacemacs will prepare +files and headers for you, and for free :smile: ! + +*** Author of a new layer +In the files header, change the default author name (=Sylvain Benner=) to your +name. + +*** Contributor to an existing layer +If you are contributing to an already existing layer, you should not modify any +header file. + +** Contributing a keybinding +Keybindings are an important part of spacemacs. + +First if you want to have some personal keybindings, you can freely bind them +inside the ~SPC o~ and ~SPC m o~ prefixes which are reserved for the user. This +can be done from the =dotspacemacs/user-config= function of your =.spacemacs= +file and don't require any contribution to Spacemacs. + +If you think it worth contributing a new key bindings then be sure to read +the [[doc/CONVENTIONS.org][CONVENTIONS.org]] file to find the best key bindings, then create a +Pull-Request with your changes. + +*ALWAYS* document your new keybindings or keybindings changes inside the +relevant documentation file. It should be the layer's =README.org= file for +layer's keybindings, or =DOCUMENTATION.org= for general Spacemacs key +bindings. + +** Contributing a banner +The startup banner is by default the Spacemacs logo but there are also ASCII +banners available in the directory =core/banners/=. + +If you have some ASCII skills you can submit your artwork! + +You are free to choose a reasonable height size but the width size should be +around 75 characters. + +* Additional information +** Testing +Tests live in the =tests/= folder, with a folder structure corresponding to the +rest of the repository. + +To run tests locally, navigate to the relevant subfolder and run =make=. + +Spacemacs uses Travis CI to perform more comprehensive testing, where each +testable layer is enabled in turn. + +To add tests for a layer, do the following: + +1. Create a subfolder of =tests/= corresponding to the layer you want to test. +2. Write a file called =dotspacemacs.el= in that folder. It should be a minimal + dotfile that enables the layer in question (and other layers it may depend + on). +3. Write a number of files with tests. Please try to separate unit and + functional tests. Look at existing tests for clues. +4. Write a =Makefile= in that folder. It should define three variables. + - =LOAD_FILES= :: a list of additional files to load before testing (relative + to the root Spacemacs folder). This should typically be =init.el=. + - =UNIT_TEST_FILES= :: a list of unit test files in the current folder. + - =FUNC_TEST_FILES= :: a list of functional test files in the current folder. + See existing tests for examples. + #+begin_src makefile + TEST_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) + + LOAD_FILES = ... + UNIT_TEST_FILES = ... + FUNC_TEST_FILES = ... + + include ../../spacemacs.mk + #+end_src +5. Add the new test to list of tests in =travis/run_build.sh=. + +* Credits + +This =CONTRIBUTING.org= file is partially based on the [[https://github.com/rails/rails/blob/master/CONTRIBUTING.md][Rails Contribution +guidelines]] and [[https://github.com/flycheck/flycheck/blob/master/CONTRIBUTING.md][Flycheck Contribution guidelines]]. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8555d27 --- /dev/null +++ b/README.md @@ -0,0 +1,455 @@ + +Made with SpacemacsTwitter
+*** +

Spacemacs

+

+philosophy +| +for whom? +| +screenshots +| +documentation +| +contribute +| +achievements +| +FAQ +

+*** +

+Gitter +Build Status +PR being merged +Donate +Donate +Recommend it +

+*** + +**Quick Install:** + + git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d + + +**Table of Contents** + +- [Introduction](#introduction) +- [Features](#features) +- [Documentation](#documentation) +- [Getting Help](#getting-help) +- [Prerequisites](#prerequisites) + - [Emacs](#emacs) + - [Linux distros](#linux-distros) + - [macOS](#macos) + - [Windows](#windows) +- [Install](#install) + - [Default installation](#default-installation) + - [Alternate installations](#alternate-installations) + - [Modify HOME environment variable](#modify-home-environment-variable) + - [Modify spacemacs-start-directory variable](#modify-spacemacs-start-directory-variable) + - [Spacemacs logo](#spacemacs-logo) +- [Update](#update) + - [Automatic update (on master branch)](#automatic-update-on-master-branch) + - [Manual update (on master branch)](#manual-update-on-master-branch) + - [On develop branch](#on-develop-branch) + - [Revert to a specific version](#revert-to-a-specific-version) +- [Quotes](#quotes) +- [Contributions](#contributions) +- [Communities](#communities) +- [License](#license) +- [Supporting Spacemacs](#supporting-spacemacs) + + + +# Introduction + +Spacemacs is a new way to experience Emacs -- a sophisticated and +polished set-up focused on ergonomics, mnemonics and consistency. + +Just clone it, launch it, then press the space bar to explore the +interactive list of carefully-chosen key bindings. You can also press +the home buffer's `[?]` button for some great first key bindings to +try. + +Spacemacs can be used naturally by both Emacs and Vim users -- you can +even mix the two editing styles. Switching easily between input styles +makes Spacemacs a great tool for pair-programming. + +Spacemacs is currently in beta, and contributions are very welcome. + +![spacemacs_python](doc/img/spacemacs-python.png) + +# Features + +- **Great documentation:** access documentation in Emacs with +SPC h SPC. +- **Beautiful GUI:** you'll love the distraction free UI and its functional +mode-line. +- **Excellent ergonomics:** all the key bindings are accessible by pressing +the space bar or alt-m. +- **Mnemonic key bindings:** commands have mnemonic prefixes like +SPC b for all the buffer commands or SPC p for the +project commands. +- **Batteries included:** discover hundreds of ready-to-use packages nicely +organised in configuration layers following a set of +[conventions][CONVENTIONS.org]. + +# Documentation + +Comprehensive documentation is available for each layer by pressing +SPC h SPC. + +You can also check the [general documentation][DOCUMENTATION.org], +[quick start guide][QUICK_START.org] and the [FAQ][FAQ.org]. + +# Getting Help + +If you need help, ask your question in the [Gitter Chat][] and a member of the +community will help you out. + +If you prefer IRC, connect to the [Gitter Chat IRC server][] and join the +`#syl20bnr/spacemacs` channel. + +# Prerequisites + +## Emacs + +Spacemacs requires Emacs 24.4 or above. The development version of Emacs (at the +time of writing, this is 25.2) is not *officially* supported, but should +nevertheless be expected to work. + +Some modes require third-party tools that you'll have to install via your +favorite package manager. + +### Linux distros + +Install Emacs from the package manager of your Linux distribution. + +You should install the "emacs" package, not the "xemacs" package. +XEmacs is an old fork of Emacs. The X in its name is unrelated to X11. +Both Emacs and XEmacs have graphical support. + +**Note:** Ubuntu LTS 12.04 and 14.04 repositories have only Emacs 24.3 +available. You have to [build from source][build_source] Emacs 24.4 or greater, +as Spacemacs won't work with 24.3. The same may be true for other distributions +as well. + +### macOS + +The recommended way of installing Emacs on macOS is using [homebrew][]: + +```sh +$ brew tap d12frosted/emacs-plus +$ brew install emacs-plus +$ brew linkapps emacs-plus +``` + +*Note:* these homebrew commands will install GNU Emacs, and link it to your +`/Applications` directory. You still need to run the `git clone` mentioned at +the start of this file. That will populate your `~/.emacs.d` directory, which is +what transforms a regular GNU Emacs into Spacemacs. + +*Note:* the proposed `emacs-plus` tap is identical to the `emacs` formulae, it +just builds GNU Emacs with support of several features by default along with +providing Spacemacs icon. +See [emacs-plus](https://github.com/d12frosted/homebrew-emacs-plus) for more +information. + +*Note:* after you have completed the [install process](#install) below, it is +also recommended to add the [osx layer][] to your [dotfile][]. Install +instructions are available in the [osx layer][] documentation. + +*Note:* if the powerline separators on the spaceline are a different (less +saturated) color than the rest of the line, you can add following snippet to +`dotspacemacs/user-config` in your `.spacemacs` file. + +```elisp +(setq ns-use-srgb-colorspace nil) +``` + +Keep in mind that this is not ideal solution as it affects all colours in Emacs. +Another option is to use different powerline separator. For example, `alternate` +and `bar` diminishes the difference. And using `utf-8` separator makes it go +away completely without the need to change colour space. In order to change +powerline separator put following snippet in `dotspacemacs/user-config`. + +```eslip +(setq powerline-default-separator 'utf-8) +``` + +For more information about powerline separators, please refer to appropriate +section in [Documentation][DOCUMENTATION.org]. + +### Windows + +You can download good quality builds from the [emacs-w64 project][emacs-for-windows]. +It is recommended to install the most recent [stable build][emacs-for-windows-stable]. + +Be sure to declare a environment variable named `HOME` pointing to your user +directory `C:\Users\`. Then you can clone Spacemacs in this directory. + +Sometimes you'll get the following error when you first start Emacs: + +``` +The directory ~/.emacs.d/server is unsafe +``` + +To fix it change the owner of the directory `~/.emacs.d/server`: + - from Properties select the Tab “Security”, + - select the button “Advanced”, + - select the Tab “Owner” + - change the owner to your account name + +Source: [Stack Overflow][so-server-unsafe] + +For efficient searches we recommend to install `pt` ([the platinum searcher][]). +`pt` version 1.7.7 or higher is required. + +# Install + +## Default installation + +1. If you have an existing Emacs configuration, back it up first: + + ```sh + cd ~ + mv .emacs.d .emacs.d.bak + mv .emacs .emacs.bak + ``` + + Don't forget to backup and *remove* `~/.emacs` file otherwise Spacemacs + **WILL NOT** load since that file prevents Emacs from loading the proper + initialization file. + +2. Clone the repository: + + ```sh + git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d + ``` + + `master` is the stable branch and it is _immutable_, **DO NOT** make any + modification to it or you will break the update mechanism. If you want to + fork Spacemacs safely use the `develop` branch where you handle the update + manually. + +3. (Optional) Install the [Source Code Pro][] font. + + If you are running in terminal you'll also need to change font settings of + your terminal. + +4. Launch Emacs. Spacemacs will automatically install the packages it requires. + If you get an error regarding package downloads then you may try to disable + the HTTPS protocol by starting Emacs with + + ```sh + emacs --insecure + ``` + + Or you can set the `dotspacemacs-elpa-https` to `nil` in your dotfile to + remove the need to start Emacs with `--insecure` argument. You may wish to + clear out your `.emacs.d/elpa` directory before doing this, so that any + corrupted packages you may have downloaded will be re-installed. + +5. Restart Emacs to complete the installation. + +If the mode-line turns red then be sure to consult the [FAQ][FAQ.org]. + +## Alternate installations + +It may be useful to clone Spacemacs outside Emacs dotdirectory `~/.emacs.d` so +you can try Spacemacs without replacing completely our own configuration. +There is currently two possibilities to support alternative location for +Spacemacs configuration. + +### Modify HOME environment variable + +This solution is ideal to quickly try Spacemacs without compromising your +existing configuration. + +```sh +mkdir ~/spacemacs +git clone https://github.com/syl20bnr/spacemacs.git ~/spacemacs/.emacs.d +HOME=~/spacemacs emacs +``` + +Note: If you're on Fish shell, you will need to modify the last command to: `env +HOME=$HOME/spacemacs emacs` + +### Modify spacemacs-start-directory variable + +This solution is better suited to "embed" Spacemacs into your own configuration. +Say you cloned Spacemacs in `~/.emacs.d/spacemacs/` then drop these lines in +`~/.emacs.d/init.el`: + +```elisp +(setq spacemacs-start-directory "~/.emacs.d/spacemacs/") +(load-file (concat spacemacs-start-directory "init.el")) +``` + +## Spacemacs logo + +For Ubuntu users, follow this guide to +[change the logo in Unity][cpaulik-unity-icon]. + +For Mac users, you need to [download the .icns version of the logo][icon-repository], +then [change the logo on Dock][icon-mac-instructions]. + +# Update + +Spacemacs has a built-in notification of a new version when you are on the +`master` branch. If you are on the `develop` branch then you'll have to +update Spacemacs manually by updating your repository. + +## Automatic update (on master branch) + +When a new version is available a little arrow appears in the mode-line. + +Its color depends on the number of versions available since your last update. +Green means that your current version is recent, orange and red mean that your +current version is older. + +![powerline_update](doc/img/powerline-update.png) + +Click on the arrow to update Spacemacs to the last version. + +## Manual update (on master branch) + +(Remove the angle brackets when typing the lines below into your shell.) + +```sh +git fetch +git reset --hard +``` + +## On develop branch + +1. Update Emacs packages by clicking (press `RET`) on the `[Update Packages]` link of +the starting page. + +2. Close Emacs and update the git repository: + + ```sh + git pull --rebase + ``` + +3. Restart Emacs to complete the upgrade. + +## Revert to a specific version + +To revert to a specific version you just have to checkout the corresponding +branch, for instance to revert to the last `0.103`: + + ```sh + git checkout origin/release-0.103 + ``` + +**After you update, either manually, or automatically, you are advised to update + your packages by clicking the `[Update Packages]` button on the Spacemacs Home + Buffer.** + +# Quotes + +[Quote][quote01] by [ashnur](https://github.com/ashnur): + + «I feel that spacemacs is an aircraft carrier and I am playing table tennis on the deck as a freerider.» + +[Quote][quote02] by [deuill](https://github.com/deuill): + + «I LOVE SPACEMACS AND MAGIT + + That is all» + +# Contributions + +Spacemacs is a community-driven project, it needs _you_ to keep it up to +date and propose great and useful configuration for all the things! + +Before contributing be sure to consult the +[contribution guidelines][CONTRIBUTING.org] and [conventions][CONVENTIONS.org]. + +Here is a throughput graph of the repository for the last few weeks: + +[![Throughput Graph](https://graphs.waffle.io/syl20bnr/spacemacs/throughput.svg)](https://waffle.io/syl20bnr/spacemacs/metrics) + +# Communities + +- [Gitter Chat] +- [Stack Exchange] +- [Reddit] + +# License + +The license is GPLv3 for all parts specific to Spacemacs, this includes: +- the initialization and core files +- all the layer files +- the documentation + +For the packages shipped in this repository you can refer to the files header. + +[Spacemacs logo][] by [Nasser Alshammari][] released under a [Creative Commons Attribution-ShareAlike 4.0 International License.](http://creativecommons.org/licenses/by-sa/4.0/) + +# Supporting Spacemacs + +The best way to support Spacemacs is to contribute to it either by reporting +bugs, helping the community on the [Gitter Chat][] or sending pull requests. + +You can show your love for the project by getting cool Spacemacs t-shirts, mugs +and more in the [Spacemacs Shop][]. + +If you want to show your support financially you can contribute to [Bountysource][] or buy a drink for the +maintainer by clicking on the [Paypal badge](#top). + +If you used spacemacs in a project and you want to show that fact, you can use +the spacemacs badge: [![Built with Spacemacs](https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg)](http://spacemacs.org) + +- For Markdown: + + ``` + [![Built with Spacemacs](https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg)](http://spacemacs.org) + ``` + +- For HTML: + + ``` + + ``` + +- For Org-mode: + + ``` + [[http://spacemacs.org][file:https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg]] + ``` + +Thank you! + +[Twitter]: http://i.imgur.com/tXSoThF.png +[CONTRIBUTING.org]: CONTRIBUTING.org +[CONVENTIONS.org]: http://spacemacs.org/doc/CONVENTIONS +[DOCUMENTATION.org]: http://spacemacs.org/doc/DOCUMENTATION +[QUICK_START.org]: http://spacemacs.org/doc/QUICK_START +[FAQ.org]: http://spacemacs.org/doc/FAQ +[VIMUSERS.org]: http://spacemacs.org/doc/VIMUSERS +[dotfile]: http://spacemacs.org/doc/DOCUMENTATION#orgheadline45 +[osx layer]: http://spacemacs.org/layers/+os/osx/README.html +[Gitter Chat]: https://gitter.im/syl20bnr/spacemacs +[Gitter Chat IRC server]: https://irc.gitter.im/ +[homebrew]: http://brew.sh +[emacs-for-windows]: http://emacsbinw64.sourceforge.net/ +[emacs-for-windows-stable]: https://sourceforge.net/projects/emacsbinw64/files/release/ +[the platinum searcher]: https://github.com/monochromegane/the_platinum_searcher +[so-server-unsafe]: http://stackoverflow.com/questions/885793/emacs-error-when-calling-server-start +[Spacemacs logo]: https://github.com/nashamri/spacemacs-logo +[Nasser Alshammari]: https://github.com/nashamri +[cpaulik-unity-icon]: http://splendidabacus.com/posts/2015/03/spacemacs-unity-icon/ +[icon-mac-instructions]: http://www.idownloadblog.com/2014/07/16/how-to-change-app-icon-mac/ +[icon-repository]: https://github.com/nashamri/spacemacs-logo +[Stack Exchange]: http://emacs.stackexchange.com/questions/tagged/spacemacs +[Reddit]: https://www.reddit.com/r/spacemacs +[quote01]: https://gitter.im/syl20bnr/spacemacs?at=568e627a0cdaaa62045a7df6 +[quote02]: https://gitter.im/syl20bnr/spacemacs?at=5768456c6577f032450cfedb +[build_source]: https://www.gnu.org/software/emacs/manual/html_node/efaq/Installing-Emacs.html +[Bountysource]: https://salt.bountysource.com/teams/spacemacs +[Source Code Pro]: https://github.com/adobe-fonts/source-code-pro +[Spacemacs Shop]: https://shop.spreadshirt.com/spacemacs-shop diff --git a/assets/spacemacs-badge.svg b/assets/spacemacs-badge.svg new file mode 100644 index 0000000..055e527 --- /dev/null +++ b/assets/spacemacs-badge.svg @@ -0,0 +1,166 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + built with + built with + Spacemacs + Spacemacs + + + + + + + + diff --git a/assets/spacemacs.svg b/assets/spacemacs.svg new file mode 100644 index 0000000..fa8a768 --- /dev/null +++ b/assets/spacemacs.svg @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/aprilfool/zemacs.el b/core/aprilfool/zemacs.el new file mode 100644 index 0000000..55bc519 --- /dev/null +++ b/core/aprilfool/zemacs.el @@ -0,0 +1,119 @@ +;;; zemacs.el --- Spacemacs 2016 April Fools File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-buffer-name "*zemacs*") +(setq spacemacs-buffer-logo-title "[Z E M A C S]") +(setq spacemacs-buffer-version-info "af-1.01") + +(define-minor-mode zemacs-buffer-mode + "Zemacs major mode for startup screen." + :lighter "ToTheMAX" + (if zemacs-buffer-mode + (progn + (spacemacs/set-leader-keys-for-major-mode 'spacemacs-buffer-mode + (kbd "aprilfool") 'next-next-NEXT-millennium) + (zemacs//insert-links)) + ;; restore the true one + (ad-disable-advice 'configuration-layer/initialize + 'before 'zemacs/initialize) + (ad-activate 'configuration-layer/initialize) + (ad-disable-advice 'spacemacs-buffer//inject-version + 'around 'zemacs/inject-version) + (ad-activate 'spacemacs-buffer//inject-version) + (ad-disable-advice 'spacemacs-buffer/insert-banner-and-buttons + 'after 'zemacs/insert-banner-and-buttons) + (ad-activate 'spacemacs-buffer/insert-banner-and-buttons) + (load-file (concat spacemacs-start-directory "core/core-spacemacs-buffer.el")) + (setq dotspacemacs-startup-banner 'official) + (kill-buffer) + (insert " +───█──█─█▀▀█─█▀▀█─█▀▀█─█──█─── +───█▀▀█─█▄▄█─█▀▀▀─█▀▀▀─▀▀▀█─── +───█──█─█──█─█────█────█▄▄█─── +────────────────────────────── +───█▀▀█─█▀▀█─█▀▀█─▀▀█▀▀─█───── +───█▄▄█─█▀▀▀─█▀▀▄───█───█───── +───█──█─█────█──█─▄▄█▄▄─█▄▄─── +────────────────────────────── +──█▀▀▀─▄▀▀▀▄─▄▀▀▀▄─█────▄▀▀▀── +──█▀▀▀─█───█─█───█─█────▀▀▀▄── +──█────▀▄▄▄▀─▀▄▄▄▀─█▄▄▄─▄▄▄▀── +────────────────────────────── +──────────▄▄███████▄▄───────── +───────▄███████████████▄────── +────▄██████▀────────▀█████▄─── +──▄█████▀──────────────▀████▄─ +▄████▀────▄██▄────▄██▄───▀████ +██▀───────████────████─────▀██ +██────────████────████──────██ +██────────▀██▀────▀██▀──────██ +██──────────────────────────██ +██──█▄──────────────────▄█──██ +██──█▀██▄──────────────▄██──██ +██──█──▀██▄──────────▄▄█─█──██ +██──█────▀████████████▀──█──██ +██──█─────█────█────█────█──██ +██──█─────█────█────█────█──██ +██──██▄───█────█────█──▄██──██ +██──██████████████████████──██ +██──█─────█────█────█────█──██ +██──█─────█────█────█────█──██ +██──██────█────█────█───█▀──██ +██───▀██████████████████▀───██ +██▄───────────────────────▄███ +█████▄──────────────────▄█████ +─▀███████▄───────────▄██████▀─ +────▀█████████████████████▀─── ") + (spacemacs-buffer/goto-buffer) + (spacemacs-buffer//remove-existing-widget-if-exist))) + +(defun next-next-NEXT-millennium () + "Time to rock on!" + (interactive) + (zemacs-buffer-mode -1)) + +(defvar zemacs--links '(("this one" "http://neovim.io") + ("link" "http://cdn.meme.am/instances/500x/67641307.jpg") + ("Atom" "http://atom.io/") + ("implementation tricks" "http://emacshorrors.com/"))) + +(defun zemacs//insert-links () + "Replace bracketed texts by their link counterparts." + (with-current-buffer spacemacs-buffer-name + (save-excursion + (dolist (l zemacs--links) + (re-search-backward (format "\\(\\[%s\\]\\)" (car l)) nil t) + (make-text-button + (match-beginning 1) + (match-end 1) + 'type 'help-url + 'help-args (cdr l)))))) + +(defadvice configuration-layer/initialize (before zemacs/initialize activate) + (setq dotspacemacs-startup-banner "~/.emacs.d/core/banners/img/zemacs.png")) + +(defadvice spacemacs-buffer//inject-version + (around zemacs/inject-version activate) + (let ((emacs-version "99.9999999") + (dotspacemacs-distribution "zemacs") + (spacemacs-version "af-1.01")) + ad-do-it)) + +(defadvice spacemacs-buffer/insert-banner-and-buttons + (after zemacs/insert-banner-and-buttons activate) + ;; always display the release note + (spacemacs-buffer//insert-release-note-widget + (concat spacemacs-release-notes-directory + spacemacs-buffer-version-info ".txt"))) + +(add-hook 'emacs-startup-hook 'zemacs-buffer-mode t) + +(provide 'zemacs) diff --git a/core/banners/000-banner.txt b/core/banners/000-banner.txt new file mode 100644 index 0000000..ac629f1 --- /dev/null +++ b/core/banners/000-banner.txt @@ -0,0 +1,8 @@ + +Welcome to +███████╗██████╗**█████╗**██████╗███████╗███╗***███╗*█████╗**██████╗███████╗ B +██╔════╝██╔══██╗██╔══██╗██╔════╝██╔════╝████╗*████║██╔══██╗██╔════╝██╔════╝ E +███████╗██████╔╝███████║██║*****█████╗**██╔████╔██║███████║██║*****███████╗ T +╚════██║██╔═══╝*██╔══██║██║*****██╔══╝**██║╚██╔╝██║██╔══██║██║*****╚════██║ A +███████║██║*****██║**██║╚██████╗███████╗██║*╚═╝*██║██║**██║╚██████╗███████║ +╚══════╝╚═╝*****╚═╝**╚═╝*╚═════╝╚══════╝╚═╝*****╚═╝╚═╝**╚═╝*╚═════╝╚══════╝ diff --git a/core/banners/001-banner.txt b/core/banners/001-banner.txt new file mode 100644 index 0000000..4a7db95 --- /dev/null +++ b/core/banners/001-banner.txt @@ -0,0 +1,9 @@ + +┏━━━┓ +┃┏━┓┃ Welcome to +┃┗━━┓╋╋╋╋┏━━┓╋╋╋╋┏━━┓╋╋╋╋┏━━┓╋╋╋╋┏━━┓╋╋╋╋┏┓┏┓╋╋╋╋┏━━┓╋╋╋╋┏━━┓╋╋╋╋┏━━┓ b +┗━━┓┃┏━━┓┃┏┓┃┏━━┓┃┏┓┃┏━━┓┃┏━┛┏━━┓┃┃━┫┏━━┓┃┗┛┃┏━━┓┃┏┓┃┏━━┓┃┏━┛┏━━┓┃━━┫ e +┃┗━┛┃┗━━┛┃┗┛┃┗━━┛┃┏┓┃┗━━┛┃┗━┓┗━━┛┃┃━┫┗━━┛┃┃┃┃┗━━┛┃┏┓┃┗━━┛┃┗━┓┗━━┛┣━━┃ t +┗━━━┛╋╋╋╋┃┏━┛╋╋╋╋┗┛┗┛╋╋╋╋┗━━┛╋╋╋╋┗━━┛╋╋╋╋┗┻┻┛╋╋╋╋┗┛┗┛╋╋╋╋┗━━┛╋╋╋╋┗━━┛ a +╋╋╋╋╋╋╋╋╋┃┃[The best editor is neither Emacs nor Vim, it's Emacs+Vim] +╋╋╋╋╋╋╋╋╋┗┛ diff --git a/core/banners/002-banner.txt b/core/banners/002-banner.txt new file mode 100644 index 0000000..0b79203 --- /dev/null +++ b/core/banners/002-banner.txt @@ -0,0 +1,9 @@ + +╭─┏━━━┓───────────────────────────────────────────────────────────────────╮ +│ ┃┏━┓┃ Welcome to │ +│ ┃┗━━┓ ┏━━┓ ┏━━┓ ┏━━┓ ┏━━┓ ┏┓┏┓ ┏━━┓ ┏━━┓ ┏━━┓ b │ +│ ┗━━┓┃┏━━┓┃┏┓┃┏━━┓┃┏┓┃┏━━┓┃┏━┛┏━━┓┃┃━┫┏━━┓┃┗┛┃┏━━┓┃┏┓┃┏━━┓┃┏━┛┏━━┓┃━━┫ e │ +│ ┃┗━┛┃┗━━┛┃┗┛┃┗━━┛┃┏┓┃┗━━┛┃┗━┓┗━━┛┃┃━┫┗━━┛┃┃┃┃┗━━┛┃┏┓┃┗━━┛┃┗━┓┗━━┛┣━━┃ t │ +│ ┗━━━┛ ┃┏━┛ ┗┛┗┛ ┗━━┛ ┗━━┛ ┗┻┻┛ ┗┛┗┛ ┗━━┛ ┗━━┛ a │ +│ ┃┃[The best editor is neither Emacs nor Vim, it's Emacs+Vim] │ +╰──────────┗┛─────────────────────────────────────────────────────────────╯ diff --git a/core/banners/003-banner.txt b/core/banners/003-banner.txt new file mode 100644 index 0000000..2ed2dfe --- /dev/null +++ b/core/banners/003-banner.txt @@ -0,0 +1,17 @@ + +⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⣠⣾⣿⣿⣿⣷⣶⣤⣀⡤⣤⡒⢖⠖⢖⢒⠢⠤⢄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠠⣿⠛⠉⠁⢉⣹⢿⣿⣿⣿⣷⣼⢸⢸⢨⠢⡡⢑⡠⠀⠑⠢⢄⠀⠀⠀⠀⠀⠀ +⠨⡃⠀⢀⡴⡣⣗⢵⣣⢟⣟⣿⣿⣿⣎⡎⡎⡜⡐⢽⣾⡄⠀⠈⠑⢄⠀⠀⠀⠀ +⠀⢇⣠⢯⡪⣯⣺⢽⢾⣽⡽⣾⣺⣝⢿⣿⣼⢨⠢⡑⢿⣷⠀⠀⠀⠀⠳⡀⠀⠀ +⠀⡸⡪⡪⣿⣾⣺⡽⣿⣳⢯⡿⣵⢷⣝⢼⢻⣯⣎⠢⢹⣿⣇⠀⠀⠀⠀⠱⡀⠀ +⢰⡫⢪⢪⡘⠿⣿⣿⣿⣾⣯⣿⢽⡳⣕⢇⢗⢜⢻⣧⡡⣿⣿⡄⠀⠀⠀⠀⢣⠀ Welcome to +⣞⢨⢊⢎⢆⠀⠀⠉⢿⣿⣿⣿⣿⣿⣷⣯⣮⣮⣦⣽⣿⣿⣿⣇⠀⠀⠀⠀⠈⡆ +⡧⢑⠔⡡⢣⠂⠀⠀⠀⢓⢝⢟⡻⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⡇ [ S p a c e m a c s ] +⡏⠄⠡⢊⢂⢅⠀⠀⠀⠀⠇⡇⠎⢎⠢⡩⠛⠻⢿⣿⣿⣿⣿⣿⡆⠀⠀⠀⢀⠇ +⢸⡀⡁⢁⠂⡂⠀⠀⠀⠀⠈⠔⡑⠡⢊⠐⡈⠌⢀⠀⠙⠻⢿⣿⣷⠀⠀⠀⡸⠀ +⠀⢣⠀⠀⠠⠈⠀⠀⠀⠀⠀⠀⠂⠌⠐⠠⠀⠀⠀⠀⠀⠀⠀⠈⠙⠀⠀⢠⠃⠀ +⠀⠀⢣⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠃⠀⠀ +⠀⠀⠀⠑⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⠀⠀⠀ +⠀⠀⠀⠀⠀⠙⠤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠁⠀⠀⠀⠀⠀ + ⠀⠀⠀⠀⠀⠀⠀⠙⠒⠤⠤⣀⣀⣀⣀⣀⡠⠤⠔⠒⠉⠀⠀⠀⠀⠀⠀⠀⠀ diff --git a/core/banners/004-banner.txt b/core/banners/004-banner.txt new file mode 100644 index 0000000..68845e1 --- /dev/null +++ b/core/banners/004-banner.txt @@ -0,0 +1,17 @@ + +⠀⠀⠀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⢀⠎⠁⠀⠀⠈⠉⠒⠦⢀⡀⡄⡤⡤⡤⡤⡤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⡎⡠⠒⠉⠉⢑⢲⢀⠀⠀⠈⠪⢣⢫⡺⣹⡹⣝⠾⣻⣶⣤⡀⠀⠀⠀⠀⠀⠀ +⠀⢿⡅⠀⠠⡰⡊⡎⡪⢊⠢⡠⢀⠀⠘⠜⣜⢎⡯⣳⠀⠳⣻⣿⣷⡄⠀⠀⠀⠀ +⠀⢹⣇⡠⠫⡪⡊⡢⢊⠨⠨⡂⢕⢐⠄⡀⠈⢺⢸⣝⡆⠀⢻⣷⣿⣿⣦⡀⠀⠀ +⠀⠈⣟⢪⢇⠀⠑⠌⠢⠡⡃⠢⡑⡐⢅⢇⢆⠀⠑⢕⣯⡀⠀⢿⣿⣿⣿⣷⡀⠀ +⠀⣐⢵⢣⢻⣦⣀⠀⠀⠁⠈⠌⠢⡊⡜⡔⡕⡭⢆⠈⠺⡄⠀⠸⣿⣿⣿⣿⣧⠀ Welcome to +⠀⣵⡫⡮⡣⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠈⠘⠘⠙⠑⠀⠀⠀⠀⢿⣿⣿⣿⣿⡀ +⠀⣗⡯⣞⢵⢽⣿⣿⣿⣟⡕⡕⡤⡠⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⡆ [ S p a c e m a c s ] +⠀⣯⢿⣺⣝⢮⣿⣿⣿⣿⣿⡪⡮⣳⢝⡽⣲⢤⣄⡀⠀⠀⠀⠀⠈⣿⣿⣿⣿⠂ +⠀⢸⣿⡽⣾⣳⣻⣿⣿⣿⣿⣾⡽⣺⢵⡯⣯⣿⣳⡿⣷⣦⣄⠀⠀⢿⣿⣿⡟⠀ +⠀⠀⢺⣿⣯⣿⣽⣿⣿⣿⣿⣿⣿⣽⣯⣟⣿⣾⣿⣿⣿⣿⣿⣿⣶⣼⣿⡿⠁⠀ +⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⠀⠀ +⠀⠀⠀⠀⠘⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⠻⠻⠿⠿⠿⠛⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀ diff --git a/core/banners/998-banner.txt b/core/banners/998-banner.txt new file mode 100644 index 0000000..82978c4 --- /dev/null +++ b/core/banners/998-banner.txt @@ -0,0 +1,27 @@ + + ▄▄▄▄ ▄ + ▌▄ █▄ ▄▀▄▀▄ + ▌███ ▌ ▄▄▄▄▄▄ ▐ ███ ▌ + ▄▄▀ ░░ ▐░░▐░░░▐ ▀▄ ░░░ ▌▄ + ▄▀ ░░░░ ▐░░ ▌░▌░░ ▐ ░░░░░ ▀▄ + ▐ ░░░░░ ▐░░░▐▌░░░▐ ░░░░░░░░ ▌ + ▐ ░░░ ▄▀▀▄ ░░░░░░░ ▄▀▀▄ ░░░░░░ ▌ + ▐ ░░ ▀▄▄▀ ░░░░░ ▀▄▄▀ ░░░░ ▌ + --▐---------___▄▀▀▄__----------- ▌ + _▐_________--—▀▄▄▀--__________ ▌ + ▀▌ ░░░░░ ▄▄▌▐▄▄ ░░░░░░░░ ▐▀ + ▀▌ ░░ ▐▀▀ ▀▀▌ ░░░░ ▐▀ + ▀▌░ ░▐▀▀ + ▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▀▀ + ▐ ▌ + ▄▄▌ ▐▄▄ + ▄▄▀ ░░░ ▀▄▄ + ▄▄▌ ░░░░░░░░ ▐▄▄ + ▌ ░░░░░░░░░░░░░ ▐ + + ▄ ▄ | ███╗ ███╗ ██████╗ ███╗ ███╗ █████╗ ██████╗███████╗ + ▄ ░░▄▄▀▀▄▄░░ ▄ | ████╗ ████║██╔═══██╗████╗ ████║██╔══██╗██╔════╝██╔════╝ + ░░ ▄▀ ░░░░ ▀▄ ░░ | ██╔████╔██║██║ ██║██╔████╔██║███████║██║ ███████╗ + ▐░░░░░░░░░░▌ | ██║╚██╔╝██║██║ ██║██║╚██╔╝██║██╔══██║██║ ╚════██║ + ▀▄▄▄▄▄▄▄▄▀ | ██║ ╚═╝ ██║╚██████╔╝██║ ╚═╝ ██║██║ ██║╚██████╗███████║ + | ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚══════╝ diff --git a/core/banners/999-banner.txt b/core/banners/999-banner.txt new file mode 100644 index 0000000..8568c06 --- /dev/null +++ b/core/banners/999-banner.txt @@ -0,0 +1,26 @@ + + ░░░░░░░░░▄░░░░░░░░░░░░░░▄░░░░ + ░░░░░░░░▌▒█░░░░░░░░░░░▄▀▒▌░░░ + Such powerful ░░░░░░░░▌▒▒█░░░░░░░░▄▀▒▒▒▐░░░ + ░░░░░░░▐▄▀▒▒▀▀▀▀▄▄▄▀▒▒▒▒▒▐░░░ + ░░░░░▄▄▀▒░▒▒▒▒▒▒▒▒▒█▒▒▄█▒▐░░░ Vim and Emacs + ░░░▄▀▒▒▒░░░▒▒▒░░░▒▒▒▀██▀▒▌░░░ So love + ░░▐▒▒▒▄▄▒▒▒▒░░░▒▒▒▒▒▒▒▀▄▒▒▌░░ Much forbidden + ░░▌░░▌█▀▒▒▒▒▒▄▀█▄▒▒▒▒▒▒▒█▒▐░░ +Very modes ░▐░░░▒▒▒▒▒▒▒▒▌██▀▒▒░░░▒▒▒▀▄▌░ + ░▌░▒▄██▄▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒▌░ + ▀▒▀▐▄█▄█▌▄░▀▒▒░░░░░░░░░░▒▒▒▐░ + ▐▒▒▐▀▐▀▒░▄▄▒▄▒▒▒▒▒▒░▒░▒░▒▒▒▒▌ + ▐▒▒▒▀▀▄▄▒▒▒▄▒▒▒▒▒▒▒▒░▒░▒░▒▒▐░ + ░▌▒▒▒▒▒▒▀▀▀▒▒▒▒▒▒░▒░▒░▒░▒▒▒▌░ + ░▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▒▄▒▒▐░░ + ░░▀▄▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▄▒▒▒▒▌░░ + ░░░░▀▄▒▒▒▒▒▒▒▒▒▒▄▄▄▀▒▒▒▒▄▀░░░ Wow. + ░░░░░░▀▄▄▄▄▄▄▀▀▀▒▒▒▒▒▄▄▀░░░░░ + ░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▀▀░░░░░░░░ + ██████╗ ██████╗ ██████╗ ███████╗███╗ ███╗ █████╗ ██████╗███████╗ + ██╔══██╗██╔═══██╗██╔════╝ ██╔════╝████╗ ████║██╔══██╗██╔════╝██╔════╝ + ██║ ██║██║ ██║██║ ███╗█████╗ ██╔████╔██║███████║██║ ███████╗ + ██║ ██║██║ ██║██║ ██║██╔══╝ ██║╚██╔╝██║██╔══██║██║ ╚════██║ + ██████╔╝╚██████╔╝╚██████╔╝███████╗██║ ╚═╝ ██║██║ ██║╚██████╗███████║ + ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚══════╝ diff --git a/core/banners/img/heart.png b/core/banners/img/heart.png new file mode 100644 index 0000000000000000000000000000000000000000..64282f9c4491efa9f7f62d4b8a093105e674efbe GIT binary patch literal 552 zcmV+@0@wYCP)?_y;(6;4J40jsUzUzndS*WK~2XjD5ZKVCe(E z;nO#_!fbdqOZ=!^+zw)yeZX&g6|4di`$K`gXO`Nw}7ud$}-wH75q@ z^&j8PzBCI~nUpTgUCIA!oexmFIL_vhwErxQtm@dyefs>>#hGw?^Tzf3*lEe4y4Y+t zP{bF(BuUR%>n|YCXf&NFwsGDy6E^`^v_L)ZgUf?qsvsa@M{eqRp0NmcHqd_0F&qx+ zMnsN-AOgfOg^FNAFbb*)fD3{MMUKrxyh^9rY6pH8DvSUDWlBV06!>A->9*P!S22b4 z+owikL#DGn;6SE5a7M%z5maTPuzu&%0IU_4_XeYMD~>V%78uWH<0!*mly2RBxV#5o z^syR%LUCm~N%}k4Ope*SWaAu3(%&f*SGEBzvQ(>8Z+4i2a;l`ix@ qGc!Sdmv(EL2fMY+zj^=hZ{Qc_F}`p%(qzv70000))_P)m3ZhY|n)3}Hz`K~!ko?OJJYTi12|&V3IH0T3I(o!}xaA_-BTMVS&M*_16s zHWSKP+_X-tSh7>M)2MZ&%CS4s){aMUopjW89II_S9cSu9$=LBE8YfYb%F9@EYFnfz zi=tMN5*KaU0D>Sv5O@#w^an$k)IyV~{G+Ds%$>n|xbHjnocEo3&OP_h>eZ{&{QUgq znE4?9d6)-ndC}H>NJ_))_8B(n2II9p@Uv=eZtinZ%BSa(`pgnwahnI9t(EftJe>|^ zm6;!zcj_|(;7=W=8U$>16Nm&w$KpIbrrqYwoNbM*Dl=!!H^n70NX|^Mis~GyT$wF| zAb12@o{6vB$N3xqYRNS zlMn<3!;-AhU3G=jUFhTw-tLqMP2Q%^ESgeLQSr=tQ##w_kATT~?fq5v6^e!a3`%yI z$+skrq$cp|Hyg09Jf9R*;Nv50oRVTEcbb(PE)#XP5Aj@_)aEclizhJO99u9mX46-# zT18v8Zk_dbzu!;0cI^_(44=!w{(tB?;vliEpUEreJ64$JBDfFe&SGL!P^;;^% z*PpsuS-aUMgi5#-^Zx(PXB{qMu^3{p*sQ&ZK&5^Ub)FuaQ8*D{*}eJV#ee*<914VyWHa(#{LLSW@+H}H{G*9uC9*i>+6NdWI}s;JA6JL)z#IBW5xtB%=c@$67HO9!G9L1}$Fh756h|b-~7IO<=^)6p?8j={X{=U!U>!|cbWZF z#iS<^FeYI}d845*G`xM3AKP`0vVO}QqWbP)a#+)OxIe}$;wY`mq#wU>fOkLjGUpUI zC?n57W{UxN3!U_xXMVun{@a(iXpu)aQY>(KEGQ^<(=$8v%71-+A1|%V6N)NevZz>g zZ-IE}J3o=%`|eL~rv3*2 zcDtPcz~OLABUy8EGnbZ@Qf_W8wYIjhs;Xo*n^9g~PREWNgtqomWU2HTO zxvi~@Q&LjqoHOVN4PXWl!RfYP|7-7Z?Yc$c>E|918#dOF97~oL+DBwOqOw9Ndd?33 zAP5pjB(#|gEEK$V;H3PAoqOex!zYlMW1&BPdYw{Gl0#A^aOOlOs|h=M(@Xioh8E

)`hN1TwLy@ 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 e3SrqoU;htD#I1eAf}uYE0000 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Company ------------------------------------------------------------------- + +(defvar spacemacs-default-company-backends + '((company-dabbrev-code company-gtags company-etags company-keywords) + company-files company-dabbrev) + "The list of default company backends used by spacemacs. +This variable is used to configure mode-specific company backends in spacemacs. +Backends in this list will always be active in these modes, as well as any +backends added by individual spacemacs layers.") + +(defmacro spacemacs|defvar-company-backends (mode) + "Define a MODE specific company backend variable with default backends. +The variable name format is company-backends-MODE." + `(defvar ,(intern (format "company-backends-%S" mode)) + ',spacemacs-default-company-backends + ,(format "Company backend list for %S" mode))) + +(defmacro spacemacs|add-company-hook (mode) + "Enable company for the given MODE. +MODE must match the symbol passed in `spacemacs|defvar-company-backends'. +The initialization function is hooked to `MODE-hook'." + (let ((mode-hook (intern (format "%S-hook" mode))) + (func (intern (format "spacemacs//init-company-%S" mode))) + (backend-list (intern (format "company-backends-%S" mode)))) + `(when (configuration-layer/package-usedp 'company) + (defun ,func () + ,(format "Initialize company for %S" mode) + (when auto-completion-enable-snippets-in-popup + (setq ,backend-list (mapcar 'spacemacs//show-snippets-in-company + ,backend-list))) + (set (make-variable-buffer-local 'auto-completion-front-end) + 'company) + (set (make-variable-buffer-local 'company-backends) + ,backend-list)) + (add-hook ',mode-hook ',func t) + (add-hook ',mode-hook 'company-mode t)))) + +(defmacro spacemacs|disable-company (mode) + "Disable company for the given MODE. +MODE parameter must match the parameter used in the call to +`spacemacs|add-company-hook'." + (let ((mode-hook (intern (format "%S-hook" mode))) + (func (intern (format "spacemacs//init-company-%S" mode)))) + `(progn + (remove-hook ',mode-hook ',func) + (remove-hook ',mode-hook 'company-mode)))) + +(defun spacemacs//show-snippets-in-company (backend) + (if (or (not auto-completion-enable-snippets-in-popup) + (and (listp backend) (member 'company-yasnippet backend))) + backend + (append (if (consp backend) backend (list backend)) + '(:with company-yasnippet)))) + +;; Auto-complete ------------------------------------------------------------- + +(defmacro spacemacs|enable-auto-complete (mode) + "Enable auto-complete for the given MODE. +The initialization function is hooked to `MODE-hook'." + (let ((mode-hook (intern (format "%S-hook" mode))) + (func (intern (format "spacemacs//init-auto-complete-%S" mode)))) + `(when (configuration-layer/package-usedp 'auto-complete) + (defun ,func () + ,(format "Initialize auto-complete for %S" mode) + (set (make-variable-buffer-local 'auto-completion-front-end) + 'auto-complete) + (set (make-variable-buffer-local 'company-backends) + ,(intern (format "company-backends-%S" mode)))) + (add-hook ',mode-hook ',func) + (add-hook ',mode-hook 'auto-complete-mode)))) + +(provide 'core-auto-completion) diff --git a/core/core-command-line.el b/core/core-command-line.el new file mode 100644 index 0000000..e6f6a17 --- /dev/null +++ b/core/core-command-line.el @@ -0,0 +1,62 @@ +;;; core-command-line.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar spacemacs-force-resume-layouts nil + "If non-nil force the current emacs instance to resume layouts + at start time despite the value of `dotspacemacs-auto-resume-layouts'.") + +(defvar spacemacs-insecure nil + "If non-nil force Spacemacs to operate without secured protocols.") + +(defun spacemacs//parse-command-line (args) + "Handle Spacemacs specific command line arguments. +The reason why we don't use the Emacs hooks for processing user defined +arguments is that we want to process these arguments as soon as possible." + (let ((i 0) new-args) + (while (< i (length args)) + (let ((arg (nth i args)) + (next-arg-digit + (when (< (1+ i) (length args)) + (string-to-number (nth (1+ i) args))))) + (when (or (null next-arg-digit) (= 0 next-arg-digit)) + (setq next-arg-digit nil)) + (pcase arg + ("--profile" + (setq spacemacs-debug-with-profile t) + (setq spacemacs-debugp t)) + ("--timed-requires" + (setq spacemacs-debug-with-timed-requires t) + (when next-arg-digit + (setq spacemacs-debug-timer-threshold next-arg-digit + i (1+ i))) + (setq spacemacs-debugp t)) + ("--adv-timers" + (setq spacemacs-debug-with-adv-timers t) + (when next-arg-digit + (setq spacemacs-debug-timer-threshold next-arg-digit + i (1+ 1))) + (setq spacemacs-debugp t)) + ("--insecure" + (setq spacemacs-insecure t)) + ("--no-layer" + (setq configuration-layer-exclude-all-layers t)) + ("--distribution" + (setq configuration-layer-force-distribution (intern (nth (1+ i) args)) + i (1+ i))) + ("--resume-layouts" + (setq spacemacs-force-resume-layouts t)) + (_ (push arg new-args)))) + (setq i (1+ i))) + (nreverse new-args))) + +(setq command-line-args (spacemacs//parse-command-line command-line-args)) + +(provide 'core-command-line) diff --git a/core/core-configuration-layer.el b/core/core-configuration-layer.el new file mode 100644 index 0000000..c68d6e7 --- /dev/null +++ b/core/core-configuration-layer.el @@ -0,0 +1,2017 @@ +;;; core-configuration-layer.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(require 'cl-lib) +(require 'eieio) +(require 'subr-x) +(require 'package) +(require 'warnings) +(require 'help-mode) +(require 'ht) +(require 'core-dotspacemacs) +(require 'core-funcs) +(require 'core-spacemacs-buffer) + +(defvar configuration-layer--refresh-package-timeout dotspacemacs-elpa-timeout + "Timeout in seconds to reach a package archive page.") + +(defconst configuration-layer-template-directory + (expand-file-name (concat spacemacs-core-directory "templates/")) + "Configuration layer templates directory.") + +(defconst configuration-layer-directory + (expand-file-name (concat spacemacs-start-directory "layers/")) + "Spacemacs contribution layers base directory.") + +(defconst configuration-layer-private-directory + (expand-file-name (concat spacemacs-start-directory "private/")) + "Spacemacs private layers base directory.") + +(defconst configuration-layer-private-layer-directory + (let ((dotspacemacs-layer-dir + (when dotspacemacs-directory + (expand-file-name + (concat dotspacemacs-directory "layers/"))))) + (if (and dotspacemacs-directory + (file-exists-p dotspacemacs-layer-dir)) + dotspacemacs-layer-dir + configuration-layer-private-directory)) + "Spacemacs default directory for private layers.") + +(defun configuration-layer/elpa-directory (root) + "Evaluate the correct package subdirectory of ROOT. This is +done according to the value of `dotspacemacs-elpa-subdirectory'. +If it is nil, then ROOT is returned. Otherwise a subdirectory of +ROOT is returned." + (if (not dotspacemacs-elpa-subdirectory) + root + (let ((subdir (if (eq 'emacs-version dotspacemacs-elpa-subdirectory) + (format "%d%s%d" + emacs-major-version + version-separator + emacs-minor-version) + (eval dotspacemacs-elpa-subdirectory)))) + (file-name-as-directory (expand-file-name subdir root))))) + +(defvar configuration-layer-rollback-directory + (concat spacemacs-cache-directory ".rollback/") + "Spacemacs rollback directory.") + +(defconst configuration-layer-rollback-info "rollback-info" + "Spacemacs rollback information file.") + +(defclass cfgl-layer () + ((name :initarg :name + :type symbol + :documentation "Name of the layer.") + (dir :initarg :dir + :initform nil + :type (satisfies (lambda (x) (or (null x) (stringp x)))) + :documentation "Absolute path to the layer directory.") + (packages :initarg :packages + :initform nil + :type list + :documentation "List of package symbols declared in this layer.") + (selected-packages :initarg :selected-packages + :initform 'all + :type (satisfies (lambda (x) (or (and (symbolp x) (eq 'all x)) + (listp x)))) + :documentation "List of selected package symbols.") + (variables :initarg :variables + :initform nil + :type list + :documentation "A list of variable-value pairs.") + (lazy-install :initarg :lazy-install + :initform nil + :type boolean + :documentation + "If non-nil then the layer needs to be installed") + (disabled :initarg :disabled-for + :initform nil + :type list + :documentation "A list of layers where this layer is disabled.") + (enabled :initarg :enabled-for + :initform 'unspecified + :type (satisfies (lambda (x) (or (listp x) (eq 'unspecified x)))) + :documentation (concat "A list of layers where this layer is enabled. " + "(Takes precedence over `:disabled-for'.)"))) + "A configuration layer.") + +(defmethod cfgl-layer-owned-packages ((layer cfgl-layer)) + "Return the list of owned packages by LAYER. +LAYER has to be installed for this method to work properly." + (delq nil (mapcar + (lambda (x) + (let ((pkg (configuration-layer/get-package x))) + (when (and pkg (eq (oref layer :name) + (car (oref pkg :owners)))) + pkg))) + (oref layer :packages)))) + +(defmethod cfgl-layer-owned-packages ((layer nil)) + "Accept nil as argument and return nil." + nil) + +(defmethod cfgl-layer-get-packages ((layer cfgl-layer)) + "Return the list of packages for LAYER." + (if (eq 'all (oref layer :selected-packages)) + (oref layer :packages) + (delq nil (mapcar + (lambda (x) + (let ((pkg-name (if (listp x) (car x) x))) + (when (memq pkg-name (oref layer :selected-packages)) x))) + (oref layer :packages))))) + +(defclass cfgl-package () + ((name :initarg :name + :type symbol + :documentation "Name of the package.") + (min-version :initarg :min-version + :initform nil + :type list + :documentation "Minimum version to install as a version list.") + (owners :initarg :owners + :initform nil + :type list + :documentation "The layer defining the init function.") + (pre-layers :initarg :pre-layers + :initform '() + :type list + :documentation "List of layers with a pre-init function.") + (post-layers :initarg :post-layers + :initform '() + :type list + :documentation "List of layers with a post-init function.") + (location :initarg :location + :initform elpa + :type (satisfies (lambda (x) + (or (stringp x) + (memq x '(built-in local site elpa)) + (and (listp x) (eq 'recipe (car x)))))) + :documentation "Location of the package.") + (toggle :initarg :toggle + :initform t + :type (satisfies (lambda (x) (or (symbolp x) (listp x)))) + :documentation + "Package is enabled/installed if toggle evaluates to non-nil.") + (step :initarg :step + :initform nil + :type (satisfies (lambda (x) (member x '(nil bootstrap pre)))) + :documentation "Initialization step.") + (lazy-install :initarg :lazy-install + :initform nil + :type boolean + :documentation + "If non-nil then the package needs to be installed") + (protected :initarg :protected + :initform nil + :type boolean + :documentation + "If non-nil then this package cannot be excluded.") + (excluded :initarg :excluded + :initform nil + :type boolean + :documentation + "If non-nil this package is excluded from all layers."))) + +(defmethod cfgl-package-enabledp ((pkg cfgl-package) &optional inhibit-messages) + "Evaluate the `toggle' slot of passed PKG." + (let ((message-log-max (unless inhibit-messages message-log-max)) + (toggle (oref pkg :toggle))) + (eval toggle))) + +(defmethod cfgl-package-get-safe-owner ((pkg cfgl-package)) + "Safe method to return the name of the layer which owns PKG." + ;; The owner of a package is the first *used* layer in `:owners' slot. + ;; Note: for packages in `configuration-layer--used-packages' the owner is + ;; always the car of the `:owners' slot. + (let ((layers (oref pkg :owners))) + (while (and (consp layers) + (not (configuration-layer/layer-usedp (car layers)))) + (pop layers)) + (when (configuration-layer/layer-usedp (car layers)) + (car layers)))) + +(defmethod cfgl-package-set-property ((pkg cfgl-package) slot value) + "Set SLOT to the given VALUE for the package PKG. +If `configuration-layer--package-properties-read-onlyp' is non-nil then VALUE +is not set for the given SLOT." + (unless configuration-layer--package-properties-read-onlyp + (eval `(oset pkg ,slot value)))) + +(defvar configuration-layer--elpa-archives + '(("melpa" . "melpa.org/packages/") + ("org" . "orgmode.org/elpa/") + ("gnu" . "elpa.gnu.org/packages/")) + "List of ELPA archives required by Spacemacs.") + +(defvar configuration-layer-exclude-all-layers nil + "If non nil then only the distribution layer is loaded.") + +(defvar configuration-layer-force-distribution nil + "If set, bypass the user's choice `dotspacemacs-distribution'.") + +(defvar configuration-layer--package-archives-refreshed nil + "Non nil if package archives have already been refreshed.") + +(defvar configuration-layer--load-packages-files nil + "If non-nil force loading `packages.el' files when creating layer objects.") + +(defvar configuration-layer--used-layers '() + "A non-sorted list of used layer names.") + +(defvar configuration-layer--indexed-layers (make-hash-table :size 1024) + "Hash map to index `cfgl-layer' objects by their names.") + +(defvar configuration-layer--used-packages '() + "An alphabetically sorted list of used package names.") + +(defvar configuration-layer--indexed-packages (make-hash-table :size 2048) + "Hash map to index `cfgl-package' objects by their names.") + +(defvar configuration-layer--used-distant-packages '() + "A list of all distant packages that are effectively used.") + +(defvar configuration-layer--check-new-version-error-packages nil + "A list of all packages that were skipped during last update attempt.") + +(defvar configuration-layer--protected-packages nil + "A list of packages that will be protected from removal as orphans.") + +(defvar configuration-layer--lazy-mode-alist nil + "Association list where the key is a mode and the value a regexp.") + +(defvar configuration-layer--inhibit-warnings nil + "If non-nil then warning message emitted by the layer system are ignored.") + +(defvar configuration-layer--package-properties-read-onlyp nil + "If non-nil then package properties are read only and cannot be overriden by +`configuration-layer/make-package'.") + +(defvar configuration-layer--declared-layers-usedp nil + "If non-nil then declared layers are considered to be used.") + +(defvar configuration-layer-error-count nil + "Non nil indicates the number of errors occurred during the +installation of initialization.") + +(defvar configuration-layer-categories '() + "List of strings corresponding to category names. A category is a +directory with a name starting with `+'.") + +(defvar update-packages-alist '() + "Used to collect information about rollback packages in the +cache folder.") + +(defun configuration-layer/initialize () + "Initialize `package.el'." + (setq configuration-layer--refresh-package-timeout dotspacemacs-elpa-timeout) + (unless package--initialized + (setq configuration-layer-rollback-directory + (configuration-layer/elpa-directory configuration-layer-rollback-directory)) + (setq package-user-dir + (configuration-layer/elpa-directory package-user-dir)) + (setq package-archives (configuration-layer//resolve-package-archives + configuration-layer--elpa-archives)) + ;; optimization, no need to activate all the packages so early + (setq package-enable-at-startup nil) + (package-initialize 'noactivate))) + +(defun configuration-layer//install-quelpa () + "Install `quelpa'." + (setq quelpa-verbose init-file-debug + quelpa-dir (concat spacemacs-cache-directory "quelpa/") + quelpa-build-dir (expand-file-name "build" quelpa-dir) + quelpa-persistent-cache-file (expand-file-name "cache" quelpa-dir) + quelpa-update-melpa-p nil) + (configuration-layer/load-or-install-protected-package 'package-build) + (configuration-layer/load-or-install-protected-package 'quelpa)) + +(defun configuration-layer//resolve-package-archives (archives) + "Resolve HTTP handlers for each archive in ARCHIVES and return a list +of all reachable ones. +If the address of an archive already contains the protocol then this address is +left untouched. +The returned list has a `package-archives' compliant format." + (mapcar + (lambda (x) + (cons (car x) + (if (or (string-match-p "http" (cdr x)) + (string-prefix-p "/" (cdr x))) + (cdr x) + (concat + (if (and dotspacemacs-elpa-https + (not spacemacs-insecure) + ;; for now org ELPA repository does + ;; not support HTTPS + ;; TODO when org ELPA repo support + ;; HTTPS remove the check + ;; `(not (equal "org" (car x)))' + (not (equal "org" (car x)))) + "https://" + "http://") + (cdr x))))) + archives)) + +(defun configuration-layer/retrieve-package-archives (&optional quiet force) + "Retrieve all archives declared in current `package-archives'. + +This function first performs a simple GET request with a timeout in order to +fix very long refresh time when an archive is not reachable. + +Note that this simple GET is a heuristic to determine the availability +likelihood of an archive, so it can gives false positive if the archive +page is served but the archive is not. + +If QUIET is non nil then the function does not print message in the Spacemacs +home buffer. + +If FORCE is non nil then refresh the archives even if they have been already +refreshed during the current session." + (unless (and configuration-layer--package-archives-refreshed + (not force)) + (setq configuration-layer--package-archives-refreshed t) + (let ((count (length package-archives)) + (i 1)) + (dolist (archive package-archives) + (unless quiet + (spacemacs-buffer/replace-last-line + (format "--> refreshing package archive: %s... [%s/%s]" + (car archive) i count) t)) + (spacemacs//redisplay) + (setq i (1+ i)) + (unless (eq 'error + (with-timeout + (dotspacemacs-elpa-timeout + (progn + (display-warning + 'spacemacs + (format + "\nError connection time out for %s repository!" + (car archive)) :warning) + 'error)) + (condition-case err + (url-retrieve-synchronously (cdr archive)) + ('error + (display-warning 'spacemacs + (format + "\nError while contacting %s repository!" + (car archive)) :warning) + 'error)))) + (let ((package-archives (list archive))) + (package-refresh-contents)))) + (package-read-all-archive-contents) + (unless quiet (spacemacs-buffer/append "\n"))))) + +(defun configuration-layer/sync (&optional no-install) + "Synchronize declared layers in dotfile with spacemacs. +If NO-INSTALL is non nil then install steps are skipped." + (dotspacemacs|call-func dotspacemacs/layers "Calling dotfile layers...") + (setq dotspacemacs--configuration-layers-saved + dotspacemacs-configuration-layers) + (when (spacemacs-buffer//choose-banner) + (spacemacs-buffer//inject-version)) + ;; declare used layers then packages as soon as possible to resolve + ;; usage and ownership + (configuration-layer/discover-layers) + (configuration-layer//declare-used-layers dotspacemacs-configuration-layers) + (configuration-layer//declare-used-packages configuration-layer--used-layers) + ;; then load the functions and finally configure the layers + (configuration-layer//load-layers-files configuration-layer--used-layers + '("funcs.el")) + (configuration-layer//configure-layers configuration-layer--used-layers) + ;; pre-filter some packages to save some time later in the loading process + (setq configuration-layer--used-distant-packages + (configuration-layer//get-distant-packages + configuration-layer--used-packages t)) + ;; load layers lazy settings + (configuration-layer/load-auto-layer-file) + ;; install and/or uninstall packages + (unless no-install + (let ((packages + (append + ;; install used packages + (configuration-layer/filter-objects + configuration-layer--used-distant-packages + (lambda (x) + (let ((pkg (configuration-layer/get-package x))) + (not (oref pkg :lazy-install))))) + ;; also install all other packages if requested + (when (eq 'all dotspacemacs-install-packages) + (let (all-other-packages) + (dolist (layer (configuration-layer/get-layers-list)) + (let ((configuration-layer--declared-layers-usedp nil) + (configuration-layer--load-packages-files t)) + (configuration-layer/declare-layer layer) + (let* ((obj (configuration-layer/get-layer layer)) + (pkgs (when obj (oref obj :packages)))) + (configuration-layer/make-packages-from-layers + (list layer)) + (dolist (pkg pkgs) + (let ((pkg-name (if (listp pkg) (car pkg) pkg))) + (add-to-list 'all-other-packages pkg-name)))))) + (configuration-layer//get-distant-packages + all-other-packages nil)))))) + (configuration-layer//install-packages packages) + (when (and (or (eq 'used dotspacemacs-install-packages) + (eq 'used-only dotspacemacs-install-packages)) + (not configuration-layer-force-distribution) + (not configuration-layer-exclude-all-layers)) + (configuration-layer/delete-orphan-packages packages)))) + ;; configure used packages + (configuration-layer//configure-packages configuration-layer--used-packages) + (configuration-layer//load-layers-files configuration-layer--used-layers + '("keybindings.el"))) + +(defun configuration-layer/load-auto-layer-file () + "Load `auto-layer.el' file" + (let ((file (concat configuration-layer-directory "auto-layer.el"))) + (when (file-exists-p file) + (spacemacs-buffer/message "Loading auto-layer file...") + (load-file file)))) + +(defun configuration-layer/create-layer () + "Ask the user for a configuration layer name and the layer +directory to use. Create a layer with this name in the selected +layer directory." + (interactive) + (let* ((current-layer-paths (mapcar (lambda (dir) (expand-file-name dir)) + (cl-pushnew + configuration-layer-private-layer-directory + dotspacemacs-configuration-layer-path))) + (other-choice "Another directory...") + (helm-lp-source + `((name . "Configuration Layer Paths") + (candidates . ,(append current-layer-paths + (list other-choice))) + (action . (lambda (c) c)))) + (layer-path-sel (if (configuration-layer/layer-usedp 'ivy) + (ivy-read "Configuration layer path: " + (append current-layer-paths + (list other-choice))) + (helm :sources helm-lp-source + :prompt "Configuration layer path: "))) + (layer-path (cond + ((string-equal layer-path-sel other-choice) + (read-directory-name (concat "Other configuration " + "layer path: ") "~/" )) + ((member layer-path-sel current-layer-paths) + layer-path-sel) + (t + (error "Please select an option from the list")))) + (name (read-from-minibuffer "Configuration layer name: " )) + (layer-dir (concat layer-path "/" name))) + (cond + ((string-equal "" name) + (message "Cannot create a configuration layer without a name.")) + ((file-exists-p layer-dir) + (message (concat "Cannot create configuration layer \"%s\", " + "this layer already exists.") name)) + (t + (make-directory layer-dir t) + (configuration-layer//copy-template name "packages.el" layer-dir) + (when (y-or-n-p "Create readme?") + (configuration-layer//copy-template name "README.org" layer-dir)) + (message "Configuration layer \"%s\" successfully created." name))))) + +(defun configuration-layer//select-packages (layer-specs packages) + "Return the selected packages of LAYER-SPECS from given PACKAGES list." + (let* ((value (when (listp layer-specs) + (spacemacs/mplist-get layer-specs :packages))) + (selected-packages (if (and (not (null (car value))) + (listp (car value))) + (car value) + value))) + (cond + ;; select packages + ((and selected-packages + (not (memq (car selected-packages) '(all not)))) + selected-packages) + ;; unselect packages + ((and selected-packages + (eq 'not (car selected-packages))) + (delq nil (mapcar (lambda (x) + (let ((pkg-name (if (listp x) (car x) x))) + (unless (memq pkg-name selected-packages) + pkg-name))) + packages))) + ;; no package selections or all package selected + (t 'all)))) + +(defun configuration-layer/make-layer (layer-specs &optional obj usedp dir) + "Return a `cfgl-layer' object based on LAYER-SPECS. +If LOAD-PKGS is non-nil then load the `packages.el' file of the layer. +DIR is the directory where the layer is, if it is nil then search in the +indexed layers for the path." + (let* ((layer-name (if (listp layer-specs) (car layer-specs) layer-specs)) + (obj (if obj obj (cfgl-layer (symbol-name layer-name) + :name layer-name))) + (dir (or dir (oref obj :dir)))) + (if (or (null dir) + (and dir (not (file-exists-p dir)))) + (configuration-layer//warning + "Cannot make layer %S without a valid directory!" + layer-name) + (let* ((dir (file-name-as-directory dir)) + (disabled (when (listp layer-specs) + (spacemacs/mplist-get layer-specs :disabled-for))) + (enabled (if (and (listp layer-specs) + (memq :enabled-for layer-specs)) + (spacemacs/mplist-get layer-specs :enabled-for) + 'unspecified)) + (variables (when (listp layer-specs) + (spacemacs/mplist-get layer-specs :variables))) + (packages-file (concat dir "packages.el")) + (packages + (if (and (or usedp configuration-layer--load-packages-files) + (file-exists-p packages-file)) + (progn + (load packages-file) + (symbol-value (intern (format "%S-packages" layer-name)))) + (oref obj :packages))) + (selected-packages (if packages + (configuration-layer//select-packages + layer-specs packages) + ;; default value + 'all))) + (oset obj :dir dir) + (when usedp + (oset obj :disabled-for disabled) + (oset obj :enabled-for enabled) + (oset obj :variables variables)) + (when packages + (oset obj :packages packages) + (oset obj :selected-packages selected-packages)) + obj)))) + +(defun configuration-layer/make-package (pkg layer-name &optional obj) + "Return a `cfgl-package' object based on PKG. +If OBJ is non nil then copy PKG properties into OBJ, otherwise create +a new object. +Properties that can be copied are `:location', `:step' and `:excluded'. +If TOGGLEP is nil then `:toggle' parameter is ignored." + (let* ((pkg-name (if (listp pkg) (car pkg) pkg)) + (pkg-name-str (symbol-name pkg-name)) + (layer (unless (eq 'dotfile layer-name) + (configuration-layer/get-layer layer-name))) + (min-version (when (listp pkg) (plist-get (cdr pkg) :min-version))) + (step (when (listp pkg) (plist-get (cdr pkg) :step))) + (toggle (when (listp pkg) (plist-get (cdr pkg) :toggle))) + (excluded (when (listp pkg) (plist-get (cdr pkg) :excluded))) + (location (when (listp pkg) (plist-get (cdr pkg) :location))) + (protected (when (listp pkg) (plist-get (cdr pkg) :protected))) + (init-func (intern (format "%S/init-%S" + layer-name pkg-name))) + (pre-init-func (intern (format "%S/pre-init-%S" + layer-name pkg-name))) + (post-init-func (intern (format "%S/post-init-%S" + layer-name pkg-name))) + (copyp (not (null obj))) + (obj (if obj obj (cfgl-package pkg-name-str :name pkg-name))) + (ownerp (or (and (eq 'dotfile layer-name) + (null (oref obj :owners))) + (fboundp init-func)))) + (when min-version + (cfgl-package-set-property obj :min-version (version-to-list min-version))) + (when step (cfgl-package-set-property obj :step step)) + (when toggle (cfgl-package-set-property obj :toggle toggle)) + (cfgl-package-set-property obj :excluded + (and (configuration-layer/layer-usedp layer-name) + (or excluded (oref obj :excluded)))) + (when location + (if (and (listp location) + (eq (car location) 'recipe) + (eq (plist-get (cdr location) :fetcher) 'local)) + (cond + (layer (let ((path (expand-file-name + (format "%s%s/%s.el" + (configuration-layer/get-layer-local-dir + layer-name) + pkg-name-str pkg-name-str)))) + (cfgl-package-set-property + obj :location `(recipe :fetcher file :path ,path)))) + ((eq 'dotfile layer-name) + ;; TODO what is the local path for a packages owned by the dotfile? + nil)) + (cfgl-package-set-property obj :location location))) + ;; cannot override protected packages + (unless copyp + ;; a bootstrap package is protected + (cfgl-package-set-property + obj :protected (or protected (eq 'bootstrap step))) + (when protected + (push pkg-name configuration-layer--protected-packages))) + (when ownerp + ;; warn about mutliple owners + (when (and (oref obj :owners) + (not (memq layer-name (oref obj :owners)))) + (configuration-layer//warning + (format (concat "More than one init function found for " + "package %S. Previous owner was %S, " + "replacing it with layer %S.") + pkg-name (car (oref obj :owners)) layer-name))) + ;; last owner wins over the previous one + (object-add-to-list obj :owners layer-name)) + ;; check consistency betwween package and defined init functions + (unless (or ownerp + (eq 'dotfile layer-name) + (fboundp pre-init-func) + (fboundp post-init-func) + (oref obj :excluded)) + (configuration-layer//warning + (format (concat "package %s not initialized in layer %s, " + "you may consider removing this package from " + "the package list or use the :toggle keyword " + "instead of a `when' form.") + pkg-name layer-name))) + ;; check if toggle can be applied + (when (and (not ownerp) + (and (not (eq 'unspecified toggle)) + toggle)) + (configuration-layer//warning + (format (concat "Ignoring :toggle for package %s because " + "layer %S does not own it.") + pkg-name layer-name))) + (when (fboundp pre-init-func) + (object-add-to-list obj :pre-layers layer-name)) + (when (fboundp post-init-func) + (object-add-to-list obj :post-layers layer-name)) + obj)) + +(define-button-type 'help-dotfile-variable + :supertype 'help-xref + 'help-function + (lambda (variable) + (with-current-buffer (find-file-noselect dotspacemacs-filepath) + (pop-to-buffer (current-buffer)) + (goto-char (point-min)) + ;; try to exclude comments + (if (re-search-forward (format "^[a-z\s\\(\\-]*%s" variable) + nil 'noerror) + (beginning-of-line) + (message "Unable to find location in file")))) + 'help-echo + (purecopy (concat "mouse-2, RET: " + "visit the Spacemacs dotfile where variable is defined."))) + +(defun configuration-layer/describe-package (pkg-symbol + &optional layer-list pkg-list) + "Describe a package in the context of the configuration layer system." + (interactive + (list (intern + (completing-read "Package: " configuration-layer--used-packages)))) + (let* ((pkg (configuration-layer/get-package pkg-symbol)) + (owners (oref pkg :owners)) + (owner (car owners))) + (with-help-window (help-buffer) + ;; declaration location + (princ pkg-symbol) + (princ " is a package declared and configured ") + (cond + ((eq 'dotfile owner) + (princ "by the variable `dotspacemacs-additional-packages' ") + (with-current-buffer standard-output + (save-excursion + (re-search-backward "`\\([^`']+\\)'" nil t) + (help-xref-button 1 'help-variable + 'dotspacemacs-additional-packages + dotspacemacs-filepath))) + (princ "in your `dotfile'.\n") + (with-current-buffer standard-output + (save-excursion + (re-search-backward "`\\([^`']+\\)'" nil t) + (help-xref-button + 1 'help-dotfile-variable 'dotspacemacs-additional-packages)))) + ((not (null owner)) + (let* ((layer (configuration-layer/get-layer owner)) + (path (concat (oref layer dir) "packages.el"))) + (princ "by the layer `") + (princ owner) + (princ "'.\n") + (with-current-buffer standard-output + (save-excursion + (re-search-backward "`\\([^`']+\\)'" nil t) + (help-xref-button + 1 'help-function-def + (intern (format "%S/init-%S" owner pkg-symbol)) path))))) + (t + (princ "in an unknown place in the lisp parenthesis universe.\n"))) + ;; exclusion/protection + (if (oref pkg :protected) + (princ "\nThis package is protected and cannot be excluded.\n") + (when (oref pkg :excluded) + (princ "\nThis package is excluded and cannot be installed.\n"))) + ;; toggle + (unless (or (oref pkg :excluded) (eq t (oref pkg :toggle))) + (princ "\nA toggle is defined for this package, it is currently ") + (princ (if (cfgl-package-enabledp pkg t) "on" "off")) + (princ " because the following expression evaluates to ") + (princ (if (cfgl-package-enabledp pkg t) "t:\n" "nil:\n")) + (princ (oref pkg :toggle)) + (princ "\n")) + (unless (oref pkg :excluded) + ;; usage and installation + (if (not (configuration-layer/package-usedp pkg-symbol)) + (princ "\nYou are not using this package.\n") + (princ "\nYou are using this package") + (if (or (memq (oref pkg :location) '(built-in local site)) + (stringp (oref pkg :location))) + (princ ".\n") + (if (not (package-installed-p pkg-symbol)) + (princ " but it is not yet installed.\n") + (princ ", it is currently installed ") + (if (featurep pkg-symbol) + (princ "and loaded.\n") + (princ "but it has not been loaded yet.\n"))))) + (when (configuration-layer/package-lazy-installp pkg-symbol) + (princ + "\nThis package can be lazily installed using `auto-mode-alist'.\n") + (with-current-buffer standard-output + (save-excursion + (re-search-backward "`\\([^`']+\\)'" nil t) + (help-xref-button 1 'help-variable 'auto-mode-alist))) + (when (assq pkg-symbol configuration-layer--lazy-mode-alist) + (princ (concat "Actually it will be installed when one of the " + "following files is opened: \n")) + (princ (cdr (assq pkg-symbol + configuration-layer--lazy-mode-alist))) + (princ "\n"))) + ;; source location + (let ((location (oref pkg :location))) + (cond + ((eq 'built-in location) + (princ "\nThis is a built-in package distributed with Emacs.\n")) + ((eq 'local location) + (let* ((layer (configuration-layer/get-layer owner)) + (path (format "%slocal/%S" (oref layer dir) pkg-symbol))) + (princ (concat "\nThis is a local package whose source files " + "can be found in layer `")) + (princ owner) + (princ "'.\n") + (with-current-buffer standard-output + (save-excursion + (re-search-backward "`\\([^`']+\\)'" nil t) + (help-xref-button 1 'help-package-def path))))) + ((eq 'site location) + ;; TODO find a way to find the location on disk and detect if it is + ;; really installed + (princ "\nWhen used it must be installed by a third party.\n")) + ((eq 'elpa location) + ;; TODO find a way to find the ELPA repository + (princ "\nWhen used it is downloaded from an ELPA repository.\n")) + ((and (listp location) (eq 'recipe (car location))) + (princ (concat "\nWhen used it is downloaded using `quelpa' " + "with the following recipe:\n")) + (with-current-buffer standard-output + (save-excursion + (re-search-backward "`\\([^`']+\\)'" nil t) + (help-xref-button + 1 'help-url "https://github.com/quelpa/quelpa"))) + (princ location) + (princ "\n")))) + ;; pre/post init functions + (when (or (oref pkg pre-layers) (oref pkg post-layers)) + (princ (concat "\nAdditional configuration for this package " + "can be found in the following ")) + (if (null layer-list) + (princ "used layers:\n") + (princ "layers:\n")) + (when (oref pkg pre-layers) + (princ "(pre-init) ") + (dolist (layer-sym (sort (oref pkg pre-layers) 'string<)) + (let* ((layer (configuration-layer/get-layer layer-sym)) + (path (concat (oref layer dir) "packages.el"))) + (princ (concat "`" (symbol-name layer-sym) "'")) + (with-current-buffer standard-output + (save-excursion + (re-search-backward "`\\([^`']+\\)'" nil t) + (help-xref-button + 1 'help-function-def + (intern (format "%S/pre-init-%S" layer-sym pkg-symbol)) + path)))) + (princ " ")) + (princ "\n")) + (when (oref pkg post-layers) + (princ "(post-init) ") + (dolist (layer-sym (sort (oref pkg post-layers) 'string<)) + (let* ((layer (configuration-layer/get-layer layer-sym)) + (path (concat (oref layer dir) "packages.el"))) + (princ (concat "`" (symbol-name layer-sym) "'")) + (with-current-buffer standard-output + (save-excursion + (re-search-backward "`\\([^`']+\\)'" nil t) + (help-xref-button + 1 'help-function-def + (intern (format "%S/post-init-%S" layer-sym pkg-symbol)) + path)))) + (princ " ")) + (princ "\n")))) + (princ (concat "\nClick [here] to display an Emacs description " + "for this package.\n")) + (with-current-buffer standard-output + (save-excursion + (re-search-backward "\\(\\[.+\\]\\)" nil t) + (help-xref-button 1 'help-package pkg-symbol)))))) + +(defun configuration-layer//warning (msg &rest args) + "Display MSG as a warning message in buffer `*Messages*'. +If `configuration-layer--inhibit-warnings' is non nil then this function is a +no-op." + (unless configuration-layer--inhibit-warnings + (apply 'spacemacs-buffer/warning msg args))) + +(defun configuration-layer//add-layer (layer &optional usedp) + "Add a LAYER object to the system. +USEDP non-nil means that PKG is a used layer." + (let ((layer-name (oref layer :name))) + (puthash layer-name layer configuration-layer--indexed-layers) + (when usedp + (add-to-list 'configuration-layer--used-layers layer-name)))) + +(defun configuration-layer/remove-layers (layer-names) + "Remove layers with LAYER-NAMES from used layers." + (mapc 'configuration-layer/remove-layer layer-names)) + +(defun configuration-layer/remove-layer (layer-name) + "Remove an used layer with name LAYER-NAME." + (setq configuration-layer--used-layers + (delq layer-name configuration-layer--used-layers))) + +(defun configuration-layer/get-layer (layer-name) + "Return a layer object with name LAYER-NAME. +Return nil if layer object is not found." + (when (ht-contains? configuration-layer--indexed-layers layer-name) + (ht-get configuration-layer--indexed-layers layer-name))) + +(defun configuration-layer/get-layers-list () + "Return a list of all discovered layer symbols." + (ht-keys configuration-layer--indexed-layers)) + +(defun configuration-layer/get-layer-local-dir (layer) + "Return the value of SLOT for the given LAYER." + (let ((obj (ht-get configuration-layer--indexed-layers layer))) + (when obj (concat (oref obj :dir) "local/")))) + +(defun configuration-layer/get-layer-path (layer) + "Return the path for LAYER symbol." + (let ((obj (ht-get configuration-layer--indexed-layers layer))) + (when obj (oref obj :dir)))) + +(defun configuration-layer//add-package (pkg &optional usedp) + "Add a PKG object to the system. +USEDP non-nil means that PKG is a used package." + (let ((pkg-name (oref pkg :name))) + (puthash pkg-name pkg configuration-layer--indexed-packages) + (when usedp + (add-to-list 'configuration-layer--used-packages pkg-name)))) + +(defun configuration-layer/get-packages-list () + "Return a list of all package symbols." + (ht-keys configuration-layer--indexed-packages)) + +(defun configuration-layer/get-package (pkg-name) + "Return a package object with name PKG-NAME. +Return nil if package object is not found." + (when (ht-contains? configuration-layer--indexed-packages pkg-name) + (ht-get configuration-layer--indexed-packages pkg-name))) + +(defun configuration-layer//sort-packages (packages) + "Return a sorted list of PACKAGES objects." + (sort packages (lambda (x y) (string< (symbol-name x) (symbol-name y))))) + +(defun configuration-layer/make-all-packages (&optional usedp) + "Create objects for _all_ packages. +USEDP if non-nil indicates that made packages are used packages." + (configuration-layer/make-packages-from-layers + (configuration-layer/get-layers-list) usedp)) + +(defun configuration-layer/make-packages-from-layers + (layer-names &optional usedp) + "Read the package lists of layers with name LAYER-NAMES and create packages. +USEDP if non-nil indicates that made packages are used packages. +DOTFILE if non-nil will process the dotfile `dotspacemacs-additional-packages' +variable as well." + (dolist (layer-name layer-names) + (let ((layer (configuration-layer/get-layer layer-name))) + (dolist (pkg (cfgl-layer-get-packages layer)) + (let* ((pkg-name (if (listp pkg) (car pkg) pkg)) + (obj (configuration-layer/get-package pkg-name))) + (setq obj (configuration-layer/make-package pkg layer-name obj)) + (configuration-layer//add-package + obj (and (cfgl-package-get-safe-owner obj) usedp))))))) + +(defun configuration-layer/make-packages-from-dotfile (&optional usedp) + "Read the additonal packages declared in the dotfile and create packages. +USEDP if non-nil indicates that made packages are used packages." + (dolist (pkg dotspacemacs-additional-packages) + (let* ((pkg-name (if (listp pkg) (car pkg) pkg)) + (obj (configuration-layer/get-package pkg-name))) + (if obj + (setq obj (configuration-layer/make-package pkg 'dotfile obj)) + (setq obj (configuration-layer/make-package pkg 'dotfile))) + (configuration-layer//add-package obj usedp))) + (dolist (xpkg dotspacemacs-excluded-packages) + (let ((obj (configuration-layer/get-package xpkg))) + (unless obj + (setq obj (configuration-layer/make-package xpkg 'dotfile))) + (configuration-layer//add-package obj usedp) + (cfgl-package-set-property obj :excluded t)))) + +(defun configuration-layer/lazy-install (layer-name &rest props) + "Configure auto-installation of layer with name LAYER-NAME." + (declare (indent 1)) + (when (configuration-layer//lazy-install-p layer-name) + (let ((extensions (spacemacs/mplist-get props :extensions))) + (when (configuration-layer/layer-usedp layer-name) + (let* ((layer (configuration-layer/get-layer layer-name)) + (packages (when layer (cfgl-layer-owned-packages layer))) + (package-names (mapcar (lambda (x) (oref x :name)) packages))) + ;; set lazy install flag for a layer if and only if its owned + ;; distant packages are all not already installed + (let ((lazy (cl-reduce + (lambda (x y) (and x y)) + (mapcar + (lambda (p) + (let ((pkg (configuration-layer/get-package p))) + (or (not (eq layer-name (car (oref pkg :owners)))) + (null (package-installed-p + (oref pkg :name)))))) + (configuration-layer//get-distant-packages + package-names t)) + :initial-value t))) + (oset layer :lazy-install lazy) + (dolist (pkg packages) + (cfgl-package-set-property pkg :lazy-install lazy))))) + (dolist (x extensions) + (let ((ext (car x)) + (mode (cadr x))) + (add-to-list 'configuration-layer--lazy-mode-alist (cons mode ext)) + (add-to-list + 'auto-mode-alist + `(,ext . (lambda () + (configuration-layer//auto-mode + ',layer-name ',mode))))))))) + +(defun configuration-layer//auto-mode (layer-name mode) + "Auto mode support of lazily installed layers." + (let ((layer (configuration-layer/get-layer layer-name))) + (when (or (oref layer :lazy-install) + (not (configuration-layer/layer-usedp layer-name))) + (configuration-layer//lazy-install-packages layer-name mode))) + (when (fboundp mode) (funcall mode))) + +(defun configuration-layer/filter-objects (objects ffunc) + "Return a filtered OBJECTS list where each element satisfies FFUNC." + (reverse (cl-reduce (lambda (acc x) (if (funcall ffunc x) (push x acc) acc)) + objects + :initial-value nil))) + +(defun configuration-layer//get-distant-packages (packages usedp) + "Return the distant packages (ie to be intalled). +If USEDP is non nil then returns only the used packages; if it is nil then +return both used and unused packages." + (configuration-layer/filter-objects + packages + (lambda (x) + (let ((pkg (configuration-layer/get-package x))) + (and (not (memq (oref pkg :location) '(built-in site local))) + (not (stringp (oref pkg :location))) + (or (null usedp) + (and (not (null (oref pkg :owners))) + (not (oref pkg :excluded)) + (cfgl-package-enabledp pkg)))))))) + +(defun configuration-layer//get-private-layer-dir (name) + "Return an absolute path to the private configuration layer string NAME." + (file-name-as-directory + (concat configuration-layer-private-layer-directory name))) + +(defun configuration-layer//copy-template (name template &optional layer-dir) + "Copy and replace special values of TEMPLATE to layer string NAME. +If LAYER_DIR is nil, the private directory is used." + (cl-flet ((substitute (old new) (let ((case-fold-search nil)) + (save-excursion + (goto-char (point-min)) + (while (search-forward old nil t) + (replace-match new t)))))) + (let ((src (concat configuration-layer-template-directory + (format "%s.template" template))) + (dest (if layer-dir + (concat layer-dir "/" (format "%s" template)) + (concat (configuration-layer//get-private-layer-dir name) + (format "%s" template))))) + (copy-file src dest) + (find-file dest) + (substitute "%LAYER_NAME%" name) + (cond + (user-full-name + (substitute "%USER_FULL_NAME%" user-full-name) + (substitute "%USER_MAIL_ADDRESS%" user-mail-address)) + (t + (substitute "%USER_FULL_NAME%" "Sylvain Benner & Contributors") + (substitute "%USER_MAIL_ADDRESS%" "sylvain.benner@gmail.com"))) + (save-buffer)))) + +(defun configuration-layer//directory-type (path) + "Return the type of directory pointed by PATH. +Possible return values: + layer - the directory is a layer + category - the directory is a category + nil - the directory is a regular directory." + (when (file-directory-p path) + (if (string-match + "^+" (file-name-nondirectory + (directory-file-name + (concat configuration-layer-directory path)))) + 'category + (let ((files (directory-files path))) + ;; most frequent files encoutered in a layer are tested first + (when (or (member "packages.el" files) + (member "layers.el" files) + (member "config.el" files) + (member "keybindings.el" files) + (member "funcs.el" files)) + 'layer))))) + +(defun configuration-layer//get-category-from-path (dirpath) + "Return a category symbol from the given DIRPATH. +The directory name must start with `+'. +Returns nil if the directory is not a category." + (when (file-directory-p dirpath) + (let ((dirname (file-name-nondirectory + (directory-file-name + (concat configuration-layer-directory + dirpath))))) + (when (string-match "^+" dirname) + (intern (substring dirname 1)))))) + +(defun configuration-layer/discover-layers () + "Initialize `configuration-layer--indexed-layers' with layer directories." + ;; load private layers at the end on purpose we asume that the user layers + ;; must have the final word on configuration choices. Let + ;; `dotspacemacs-directory' override the private directory if it exists. + (setq configuration-layer--indexed-layers (make-hash-table :size 1024)) + (let ((search-paths (append (list configuration-layer-directory) + dotspacemacs-configuration-layer-path + (list configuration-layer-private-layer-directory) + (when dotspacemacs-directory + (list dotspacemacs-directory)))) + (discovered '())) + ;; depth-first search of subdirectories + (while search-paths + (let ((current-path (car search-paths))) + (setq search-paths (cdr search-paths)) + (dolist (sub (directory-files current-path t nil 'nosort)) + ;; ignore ".", ".." and non-directories + (unless (or (string-equal ".." (substring sub -2)) + (string-equal "." (substring sub -1)) + (not (file-directory-p sub))) + (let ((type (configuration-layer//directory-type sub))) + (cond + ((eq 'category type) + (let ((category (configuration-layer//get-category-from-path + sub))) + (spacemacs-buffer/message "-> Discovered category: %S" + category) + (push category configuration-layer-categories) + (setq search-paths (cons sub search-paths)))) + ((eq 'layer type) + (let* ((layer-name-str (file-name-nondirectory sub)) + (layer-name (intern layer-name-str)) + (indexed-layer (configuration-layer/get-layer + layer-name))) + (if indexed-layer + ;; the same layer may have been discovered twice, + ;; in which case we don't need a warning + (unless (string-equal (oref indexed-layer :dir) sub) + (configuration-layer//warning + (concat + "Duplicated layer %s detected in directory \"%s\", " + "replacing old directory \"%s\" with new directory.") + layer-name-str sub (oref indexed-layer :dir)) + (oset indexed-layer :dir sub)) + (spacemacs-buffer/message + "-> Discovered configuration layer: %s" layer-name-str) + (configuration-layer//add-layer + (configuration-layer/make-layer layer-name nil nil sub))))) + (t + ;; layer not found, add it to search path + (setq search-paths (cons sub search-paths))))))))))) + +(defun configuration-layer/declare-layers (layers-specs) + "Declare layers with LAYERS-SPECS." + (mapc 'configuration-layer/declare-layer layers-specs)) + +(defun configuration-layer/declare-layer (layer-specs) + "Declare a single layer with spec LAYER-SPECS. +Set the variable `configuration-layer--declared-layers-usedp' to control +wether the declared layer is an used one or not." + (let* ((layer-name (if (listp layer-specs) (car layer-specs) layer-specs)) + (layer (configuration-layer/get-layer layer-name)) + (usedp configuration-layer--declared-layers-usedp)) + (if layer + (let ((obj (configuration-layer/make-layer + layer-specs + (configuration-layer/get-layer layer-name) + usedp))) + (configuration-layer//add-layer obj usedp) + (configuration-layer//set-layer-variables obj) + (when (or usedp configuration-layer--load-packages-files) + (configuration-layer//load-layer-files layer-name '("layers.el")))) + (configuration-layer//warning "Unknown layer %s declared in dotfile." + layer-name)))) + +(defun configuration-layer//declare-used-layers (layers-specs) + "Declare used layers from LAYERS-SPECS list." + (setq configuration-layer--used-layers nil) + (let ((configuration-layer--declared-layers-usedp t)) + (unless configuration-layer-exclude-all-layers + (dolist (layer-specs layers-specs) + (let* ((layer-name (if (listp layer-specs) + (car layer-specs) + layer-specs)) + (layer (configuration-layer/get-layer layer-name))) + (if layer + (let ((layer-path (oref layer :dir))) + (unless (string-match-p "+distributions" layer-path) + (configuration-layer/declare-layer layer-specs))) + (configuration-layer//warning + "Unknown layer %s declared in dotfile." layer-name)))) + (setq configuration-layer--used-layers + (reverse configuration-layer--used-layers))) + ;; distribution and bootstrap layers are always first + (let ((distribution (if configuration-layer-force-distribution + configuration-layer-force-distribution + dotspacemacs-distribution))) + (unless (eq 'spacemacs-bootstrap distribution) + (configuration-layer/declare-layer distribution))) + (configuration-layer/declare-layer 'spacemacs-bootstrap))) + +(defun configuration-layer//set-layers-variables (layers) + "Set the configuration variables for the passed LAYERS." + (mapc 'configuration-layer//set-layer-variables layers)) + +(defun configuration-layer//set-layer-variables (layer) + "Set the configuration variables for the passed LAYER." + (let ((variables (oref layer :variables))) + (while variables + (let ((var (pop variables))) + (if (consp variables) + (condition-case-unless-debug err + (set-default var (eval (pop variables))) + ('error + (configuration-layer//increment-error-count) + (spacemacs-buffer/append + (format (concat "\nAn error occurred while setting layer " + "variable %s " + "(error: %s). Be sure to quote the value " + "if needed.\n") var err)))) + (configuration-layer//warning "Missing value for variable %s !" + var)))))) + +(defun configuration-layer/layer-usedp (layer-name) + "Return non-nil if LAYER-NAME is the name of a used layer." + (let ((obj (configuration-layer/get-layer layer-name))) + (when obj (memq layer-name configuration-layer--used-layers)))) + +(defun configuration-layer/package-usedp (name) + "Return non-nil if NAME is the name of a used package." + (let ((obj (configuration-layer/get-package name))) + (and obj (cfgl-package-get-safe-owner obj) + (not (oref obj :excluded))))) + +(defun configuration-layer/package-lazy-installp (name) + "Return non-nil if NAME is the name of a package to be lazily installed." + (let ((obj (configuration-layer/get-package name))) + (when obj (oref obj :lazy-install)))) + +(defun configuration-layer//configure-layers (layer-names) + "Configure layers with LAYER-NAMES." + (let ((warning-minimum-level :error)) + (dolist (layer-name layer-names) + (configuration-layer//load-layer-files layer-name '("config.el"))))) + +(defun configuration-layer//declare-used-packages (layers) + "Declare used packages contained in LAYERS." + (setq configuration-layer--used-packages nil) + (let* ((warning-minimum-level :error)) + (configuration-layer/make-packages-from-layers layers t) + (configuration-layer/make-packages-from-dotfile t) + (setq configuration-layer--used-packages + (configuration-layer//sort-packages + configuration-layer--used-packages)))) + +(defun configuration-layer//load-layers-files (layer-names files) + "Load the files of list FILES for all passed LAYER-NAMES." + (dolist (layer-name layer-names) + (configuration-layer//load-layer-files layer-name files))) + +(defun configuration-layer//load-layer-files (layer-name files) + "Load the files of list FILES for the layer with the given LAYER-NAME." + (let ((obj (configuration-layer/get-layer layer-name))) + (when obj + (dolist (file files) + (let ((file (concat (oref obj :dir) file))) + (if (file-exists-p file) (load file))))))) + +(defun configuration-layer/configured-packages-stats (packages) + "Return a statistics alist regarding the number of configured PACKAGES." + `((total ,(length packages)) + (elpa ,(length (configuration-layer/filter-objects + packages + (lambda (x) + (let ((pkg (configuration-layer/get-package x))) + (eq 'elpa (oref pkg :location))))))) + (recipe ,(length (configuration-layer/filter-objects + packages + (lambda (x) + (let* ((pkg (configuration-layer/get-package x)) + (location (oref pkg :location))) + (and (listp location) + (eq 'recipe (car location)))))))) + (local ,(length (configuration-layer/filter-objects + packages + (lambda (x) + (let ((pkg (configuration-layer/get-package x))) + (memq (oref pkg :location) '(local site))))))) + (built-in ,(length (configuration-layer/filter-objects + packages + (lambda (x) + (let ((pkg (configuration-layer/get-package x))) + (eq 'built-in (oref pkg :location))))))))) + +(defun configuration-layer//install-package (pkg) + "Unconditionally install the package PKG." + (let* ((layer (when pkg (car (oref pkg :owners)))) + (location (when pkg (oref pkg :location))) + (min-version (when pkg (oref pkg :min-version)))) + (spacemacs-buffer/replace-last-line + (format "--> installing %s: %s%s... [%s/%s]" + (if layer "package" "dependency") + pkg-name (if layer (format "@%S" layer) "") + installed-count not-inst-count) t) + (spacemacs//redisplay) + (unless (package-installed-p pkg-name min-version) + (condition-case-unless-debug err + (cond + ((or (null pkg) (eq 'elpa location)) + (configuration-layer//install-from-elpa pkg-name) + (when pkg (cfgl-package-set-property pkg :lazy-install nil))) + ((and (listp location) (eq 'recipe (car location))) + (configuration-layer//install-from-recipe pkg) + (cfgl-package-set-property pkg :lazy-install nil)) + (t (configuration-layer//warning "Cannot install package %S." + pkg-name))) + ('error + (configuration-layer//increment-error-count) + (spacemacs-buffer/append + (format (concat "\nAn error occurred while installing %s " + "(error: %s)\n") pkg-name err)) + (spacemacs//redisplay)))))) + +(defun configuration-layer//lazy-install-p (layer-name) + "Return non nil if the layer with LAYER-NAME should be lazy installed." + (or (eq 'all dotspacemacs-enable-lazy-installation) + (and (memq dotspacemacs-enable-lazy-installation '(unused t)) + (not (configuration-layer/layer-usedp layer-name))))) + +(defun configuration-layer//lazy-install-packages (layer-name mode) + "Install layer with LAYER-NAME to support MODE." + (when (or (not dotspacemacs-ask-for-lazy-installation) + (yes-or-no-p (format + (concat "Support for %s requires installation of " + "layer %s, do you want to install it?") + mode layer-name))) + (when (dotspacemacs/add-layer layer-name) + (configuration-layer/sync 'no-install)) + (let* ((layer (configuration-layer/get-layer layer-name)) + (inst-pkgs + (delq nil + (mapcar + (lambda (x) + (let* ((pkg-name (if (listp x) (car x) x)) + (pkg (configuration-layer/get-package pkg-name))) + (cfgl-package-set-property pkg :lazy-install nil) + (when (memq pkg-name + configuration-layer--used-distant-packages) + pkg-name))) + (oref layer :packages))))) + (let ((last-buffer (current-buffer)) + (sorted-pkg (configuration-layer//sort-packages inst-pkgs))) + (spacemacs-buffer/goto-buffer) + (goto-char (point-max)) + (configuration-layer//install-packages sorted-pkg) + (configuration-layer//configure-packages sorted-pkg) + (configuration-layer//load-layer-files layer '("keybindings.el")) + (oset layer :lazy-install nil) + (switch-to-buffer last-buffer))))) + +(defun configuration-layer//install-packages (packages) + "Install PACKAGES which are not lazy installed." + (interactive) + ;; Force the display of warning buffers at the bottom + (let ((display-buffer-alist + '(("\\(\\*Compile-Log\\*\\)\\|\\(\\*Warnings\\*\\)" + (display-buffer-in-side-window) + (inhibit-same-window . t) + (side . bottom) + (window-height . 0.2))))) + ;; ensure we have quelpa available first + (configuration-layer//install-quelpa) + (let* ((upkg-names (configuration-layer//get-uninstalled-packages packages)) + (not-inst-count (length upkg-names)) + installed-count) + ;; installation + (when upkg-names + (spacemacs-buffer/append + (format "Found %s new package(s) to install...\n" + not-inst-count)) + (configuration-layer/retrieve-package-archives) + (setq installed-count 0) + (spacemacs//redisplay) + (dolist (pkg-name upkg-names) + (setq installed-count (1+ installed-count)) + (configuration-layer//install-package + (configuration-layer/get-package pkg-name))) + (spacemacs-buffer/append "\n"))))) + +(defun configuration-layer//install-from-elpa (pkg-name) + "Install PKG from ELPA." + (if (not (assq pkg-name package-archive-contents)) + (spacemacs-buffer/append + (format (concat "\nPackage %s is unavailable. " + "Is the package name misspelled?\n") + pkg-name)) + (let ((pkg-desc (assq pkg-name package-archive-contents))) + (dolist + (dep (configuration-layer//get-package-deps-from-archive + pkg-name)) + (if (package-installed-p (car dep) (cadr dep)) + (configuration-layer//activate-package (car dep)) + (configuration-layer//install-from-elpa (car dep)))) + (if pkg-desc + (package-install (cadr pkg-desc)) + (package-install pkg-name))))) + +(defun configuration-layer//install-from-recipe (pkg) + "Install PKG from a recipe." + (let* ((pkg-name (oref pkg :name)) + (layer (car (oref pkg :owners))) + (recipe (cons pkg-name (cdr (oref pkg :location))))) + (if recipe + (quelpa recipe) + (configuration-layer//warning + (concat "Cannot find any recipe for package %S! Be sure " + "to add a recipe for it in alist %S.") + pkg-name recipes-var)))) + +(defun configuration-layer//filter-packages-with-deps + (pkg-names filter &optional use-archive) + "Return a filtered PKG-NAMES list where each elements satisfies FILTER." + (when pkg-names + (let (result) + (dolist (pkg-name pkg-names) + ;; recursively check dependencies + (let* ((deps + (if use-archive + (configuration-layer//get-package-deps-from-archive + pkg-name) + (configuration-layer//get-package-deps-from-alist pkg-name))) + (install-deps + (when deps (configuration-layer//filter-packages-with-deps + (mapcar 'car deps) filter)))) + (when install-deps + (setq result (append install-deps result)))) + (when (funcall filter pkg-name) + (add-to-list 'result pkg-name t))) + (delete-dups result)))) + +(defun configuration-layer//get-uninstalled-packages (pkg-names) + "Return a filtered list of PKG-NAMES to install." + (configuration-layer//filter-packages-with-deps + pkg-names (lambda (x) + (let* ((pkg (configuration-layer/get-package x)) + (min-version (when pkg (oref pkg :min-version)))) + (not (package-installed-p x min-version)))))) + +(defun configuration-layer//package-has-recipe-p (pkg-name) + "Return non nil if PKG-NAME is the name of a package declared with a recipe." + (when (configuration-layer/get-package pkg-name) + (let* ((pkg (configuration-layer/get-package pkg-name)) + (location (oref pkg :location))) + (and (listp location) (eq 'recipe (car location)))))) + +(defun configuration-layer//get-package-recipe (pkg-name) + "Return the recipe for PGK-NAME if it has one." + (let ((pkg (configuration-layer/get-package pkg-name))) + (when pkg + (let ((location (oref pkg :location))) + (when (and (listp location) (eq 'recipe (car location))) + (cons pkg-name (cdr location))))))) + +(defun configuration-layer//new-version-available-p (pkg-name) + "Return non nil if there is a new version available for PKG-NAME." + (let ((recipe (configuration-layer//get-package-recipe pkg-name)) + (cur-version (configuration-layer//get-package-version-string pkg-name)) + (quelpa-upgrade-p t) + new-version) + (when cur-version + (setq new-version + (if recipe + (or (quelpa-checkout recipe (expand-file-name (symbol-name pkg-name) quelpa-build-dir)) cur-version) + (configuration-layer//get-latest-package-version-string + pkg-name))) + ;; (message "%s: %s > %s ?" pkg-name cur-version new-version) + (if new-version + (version< cur-version new-version) + (cl-pushnew pkg-name + configuration-layer--check-new-version-error-packages + :test #'eq) + nil)))) + +(defun configuration-layer//get-packages-to-update (pkg-names) + "Return a filtered list of PKG-NAMES to update." + (configuration-layer//filter-packages-with-deps + pkg-names 'configuration-layer//new-version-available-p 'use-archive)) + +(defun configuration-layer//configure-packages (packages) + "Configure all passed PACKAGES honoring the steps order." + (setq spacemacs-loading-dots-chunk-threshold + (/ (length configuration-layer--used-packages) + spacemacs-loading-dots-chunk-count)) + (spacemacs-buffer/message "+ Configuring bootstrap packages...") + (configuration-layer//configure-packages-2 + (configuration-layer/filter-objects + packages (lambda (x) + (let ((pkg (configuration-layer/get-package x))) + (eq 'bootstrap (oref pkg :step)))))) + (spacemacs-buffer/message "+ Configuring pre packages...") + (configuration-layer//configure-packages-2 + (configuration-layer/filter-objects + packages (lambda (x) + (let ((pkg (configuration-layer/get-package x))) + (eq 'pre (oref pkg :step)))))) + (spacemacs-buffer/message "+ Configuring packages...") + (configuration-layer//configure-packages-2 + (configuration-layer/filter-objects + packages (lambda (x) + (let ((pkg (configuration-layer/get-package x))) + (null (oref pkg :step))))))) + +(defun configuration-layer//configure-packages-2 (packages) + "Configure all passed PACKAGES." + (dolist (pkg-name packages) + (spacemacs-buffer/loading-animation) + (let ((pkg (configuration-layer/get-package pkg-name))) + (cond + ((oref pkg :lazy-install) + (spacemacs-buffer/message + (format "%S ignored since it can be lazily installed." pkg-name))) + ((and (oref pkg :excluded) + (not (oref pkg :protected))) + (spacemacs-buffer/message + (format "%S ignored since it has been excluded." pkg-name))) + ((null (oref pkg :owners)) + (spacemacs-buffer/message + (format "%S ignored since it has no owner layer." pkg-name))) + ((not (cfgl-package-enabledp pkg t)) + (spacemacs-buffer/message (format "%S is toggled off." pkg-name))) + (t + ;; load-path + (let ((location (oref pkg :location))) + (cond + ((stringp location) + (if (file-directory-p location) + (push (file-name-as-directory location) load-path) + (configuration-layer//warning + "Location path for package %S does not exists (value: %s)." + pkg location))) + ((and (eq 'local location) + (eq 'dotfile (car (oref pkg :owners)))) + (push (file-name-as-directory + (concat configuration-layer-private-directory "local/" + (symbol-name (oref pkg :name)))) + load-path)) + ((eq 'local location) + (let* ((owner (configuration-layer/get-layer + (car (oref pkg :owners)))) + (dir (when owner (oref owner :dir)))) + (push (format "%slocal/%S/" dir pkg-name) load-path))))) + ;; configuration + (unless (memq (oref pkg :location) '(local site built-in)) + (configuration-layer//activate-package pkg-name)) + (cond + ((eq 'dotfile (car (oref pkg :owners))) + (spacemacs-buffer/message + (format "%S is configured in the dotfile." pkg-name))) + (t + (configuration-layer//configure-package pkg)))))))) + +(defun configuration-layer//package-enabled-p (pkg layer) + "Returns true if PKG should be configured for LAYER. +LAYER must not be the owner of PKG." + (let* ((owner (configuration-layer/get-layer (car (oref pkg :owners)))) + (disabled (oref owner :disabled-for)) + (enabled (oref owner :enabled-for))) + (if (not (eq 'unspecified enabled)) + (memq layer enabled) + (not (memq layer disabled))))) + +(defun configuration-layer//configure-package (pkg) + "Configure PKG object." + (let* ((pkg-name (oref pkg :name)) + (owner (car (oref pkg :owners)))) + (spacemacs-buffer/message (format "Configuring %S..." pkg-name)) + ;; pre-init + (mapc + (lambda (layer) + (when (configuration-layer/layer-usedp layer) + (if (not (configuration-layer//package-enabled-p pkg layer)) + (spacemacs-buffer/message + (format " -> ignored pre-init (%S)..." layer)) + (spacemacs-buffer/message + (format " -> pre-init (%S)..." layer)) + (condition-case-unless-debug err + (funcall (intern (format "%S/pre-init-%S" layer pkg-name))) + ('error + (configuration-layer//increment-error-count) + (spacemacs-buffer/append + (format + (concat "\nAn error occurred while pre-configuring %S " + "in layer %S (error: %s)\n") + pkg-name layer err))))))) + (oref pkg :pre-layers)) + ;; init + (spacemacs-buffer/message (format " -> init (%S)..." owner)) + (funcall (intern (format "%S/init-%S" owner pkg-name))) + ;; post-init + (mapc + (lambda (layer) + (when (configuration-layer/layer-usedp layer) + (if (not (configuration-layer//package-enabled-p pkg layer)) + (spacemacs-buffer/message + (format " -> ignored post-init (%S)..." layer)) + (spacemacs-buffer/message + (format " -> post-init (%S)..." layer)) + (condition-case-unless-debug err + (funcall (intern (format "%S/post-init-%S" layer pkg-name))) + ('error + (configuration-layer//increment-error-count) + (spacemacs-buffer/append + (format + (concat "\nAn error occurred while post-configuring %S " + "in layer %S (error: %s)\n") + pkg-name layer err))))))) + (oref pkg :post-layers)))) + +(defun configuration-layer//cleanup-rollback-directory () + "Clean up the rollback directory." + (let* ((dirattrs (delq nil + (mapcar (lambda (d) + (unless (eq t d) d)) + (directory-files-and-attributes + configuration-layer-rollback-directory + nil "\\`\\(\\.\\{0,2\\}[^.\n].*\\)\\'" t)))) + (dirs (sort dirattrs + (lambda (d e) + (time-less-p (nth 6 d) (nth 6 e)))))) + (dotimes (c (- (length dirs) dotspacemacs-max-rollback-slots)) + (delete-directory (concat configuration-layer-rollback-directory + "/" (car (pop dirs))) + t t)))) + +(defun configuration-layer/update-packages (&optional always-update) + "Update packages. + +If called with a prefix argument ALWAYS-UPDATE, assume yes to update." + (interactive "P") + (spacemacs-buffer/insert-page-break) + (spacemacs-buffer/append "\nUpdating package archives, please wait...\n") + (configuration-layer/retrieve-package-archives nil 'force) + (setq configuration-layer--check-new-version-error-packages nil) + (let* ((update-packages + (configuration-layer//get-packages-to-update + configuration-layer--used-distant-packages)) + (skipped-count (length + configuration-layer--check-new-version-error-packages)) + (date (format-time-string "%y-%m-%d_%H.%M.%S")) + (rollback-dir (expand-file-name + (concat configuration-layer-rollback-directory + (file-name-as-directory date)))) + (upgrade-count (length update-packages)) + (upgraded-count 0) + (update-packages-alist)) + (when configuration-layer--check-new-version-error-packages + (spacemacs-buffer/append + (format (concat "--> Warning: cannot update %s package(s), possibly due" + " to a temporary network problem: %s\n") + skipped-count + (mapconcat #'symbol-name + configuration-layer--check-new-version-error-packages + " ")))) + ;; (message "packages to udpate: %s" update-packages) + (when (> upgrade-count 0) + (spacemacs-buffer/append + (format (concat "--> Found %s package(s) to update" + (if (> skipped-count 0) + (format " (skipped %s):\n" skipped-count) + ":\n")) + upgrade-count) t) + (mapc (lambda (x) + (spacemacs-buffer/append + (format (if (memq (intern x) dotspacemacs-frozen-packages) + "%s (won't be updated because package is frozen)\n" + "%s\n") x) t)) + (sort (mapcar 'symbol-name update-packages) 'string<)) + (if (and (not always-update) + (not (yes-or-no-p + (format "Do you want to update %s package(s) ? " + upgrade-count)))) + (spacemacs-buffer/append "Packages update has been cancelled.\n" t) + ;; backup the package directory and construct an alist + ;; variable to be cached for easy update and rollback + (spacemacs-buffer/append + "--> performing backup of package(s) to update...\n" t) + (spacemacs//redisplay) + (dolist (pkg update-packages) + (unless (memq pkg dotspacemacs-frozen-packages) + (let* ((src-dir (configuration-layer//get-package-directory pkg)) + (dest-dir (expand-file-name + (concat rollback-dir + (file-name-as-directory + (file-name-nondirectory src-dir)))))) + (copy-directory src-dir dest-dir 'keeptime 'create 'copy-content) + (push (cons pkg (file-name-nondirectory src-dir)) + update-packages-alist)))) + (spacemacs/dump-vars-to-file + '(update-packages-alist) + (expand-file-name (concat rollback-dir + configuration-layer-rollback-info))) + (dolist (pkg update-packages) + (unless (memq pkg dotspacemacs-frozen-packages) + (setq upgraded-count (1+ upgraded-count)) + (spacemacs-buffer/replace-last-line + (format "--> preparing update of package %s... [%s/%s]" + pkg upgraded-count upgrade-count) t) + (spacemacs//redisplay) + (configuration-layer//package-delete pkg))) + (spacemacs-buffer/append + (format "\n--> %s package(s) to be updated.\n" upgraded-count)) + (spacemacs-buffer/append + (concat "\nEmacs has to be restarted to actually install the " + "new version of the packages (SPC q r).\n")) + (configuration-layer//cleanup-rollback-directory) + (spacemacs//redisplay))) + (when (eq upgrade-count 0) + (spacemacs-buffer/append "--> All packages are up to date.\n") + (spacemacs//redisplay)))) + +(defun configuration-layer//ido-candidate-rollback-slot () + "Return a list of candidates to select a rollback slot." + (let ((rolldir configuration-layer-rollback-directory)) + (when (file-exists-p rolldir) + (reverse + (delq nil (mapcar + (lambda (x) + (when (and (file-directory-p (concat rolldir x)) + (not (or (string= "." x) (string= ".." x)))) + (let ((p (length (directory-files (file-name-as-directory + (concat rolldir x)))))) + ;; -3 for . .. and rollback-info + (format "%s (%s packages)" x (- p 3))))) + (directory-files rolldir))))))) + +(defun configuration-layer/rollback (slot) + "Rollback all the packages in the given SLOT. +If called interactively and SLOT is nil then an ido buffers appears +to select one." + (interactive + (list + (if (boundp 'slot) slot + (let ((candidates (configuration-layer//ido-candidate-rollback-slot))) + (when candidates + (ido-completing-read "Rollback slots (most recent are first): " + candidates)))))) + (spacemacs-buffer/insert-page-break) + (if (not slot) + (message "No rollback slot available.") + (string-match "^\\(.+?\\)\s.*$" slot) + (let* ((slot-dir (match-string 1 slot)) + (rollback-dir (file-name-as-directory + (concat configuration-layer-rollback-directory + (file-name-as-directory slot-dir)))) + (info-file (expand-file-name + (concat rollback-dir + configuration-layer-rollback-info)))) + (spacemacs-buffer/append + (format "\nRollbacking ELPA packages from slot %s...\n" slot-dir)) + (load-file info-file) + (let ((rollback-count (length update-packages-alist)) + (rollbacked-count 0)) + (spacemacs-buffer/append + (format "Found %s package(s) to rollback...\n" rollback-count)) + (spacemacs//redisplay) + (dolist (apkg update-packages-alist) + (let* ((pkg (car apkg)) + (pkg-dir-name (cdr apkg)) + (installed-ver + (configuration-layer//get-package-version-string pkg)) + (elpa-dir (file-name-as-directory package-user-dir)) + (src-dir (expand-file-name + (concat rollback-dir (file-name-as-directory + pkg-dir-name)))) + (dest-dir (expand-file-name + (concat elpa-dir (file-name-as-directory + pkg-dir-name))))) + (unless (memq pkg dotspacemacs-frozen-packages) + (setq rollbacked-count (1+ rollbacked-count)) + (if (string-equal (format "%S-%s" pkg installed-ver) pkg-dir-name) + (spacemacs-buffer/replace-last-line + (format "--> package %s already rolled back! [%s/%s]" + pkg rollbacked-count rollback-count) t) + ;; rollback the package + (spacemacs-buffer/replace-last-line + (format "--> rolling back package %s... [%s/%s]" + pkg rollbacked-count rollback-count) t) + (configuration-layer//package-delete pkg) + (copy-directory src-dir dest-dir + 'keeptime 'create 'copy-content))) + (spacemacs//redisplay))) + (spacemacs-buffer/append + (format "\n--> %s packages rolled back.\n" rollbacked-count)) + (spacemacs-buffer/append + "\nEmacs has to be restarted for the changes to take effect.\n"))))) + +(defun configuration-layer//activate-package (pkg) + "Activate PKG." + (unless (memq pkg package-activated-list) + (package-activate pkg))) + +(defun configuration-layer//get-packages-dependencies () + "Returns dependencies hash map for all packages in `package-alist'." + (let ((result (make-hash-table :size 512))) + (dolist (pkg package-alist) + (let* ((pkg-sym (car pkg)) + (deps (configuration-layer//get-package-deps-from-alist pkg-sym))) + (dolist (dep deps) + (let* ((dep-sym (car dep)) + (value (ht-get result dep-sym))) + (puthash dep-sym + (if value (add-to-list 'value pkg-sym) (list pkg-sym)) + result))))) + result)) + +(defun configuration-layer//get-implicit-packages (packages) + "Returns packages in `packages-alist' which are not found in PACKAGES." + (let (imp-pkgs) + (dolist (pkg package-alist) + (let ((pkg-sym (car pkg))) + (unless (memq pkg-sym packages) + (add-to-list 'imp-pkgs pkg-sym)))) + imp-pkgs)) + +(defun configuration-layer//get-orphan-packages + (dist-pkgs implicit-pkgs dependencies) + "Return orphan packages." + (let (result) + (dolist (imp-pkg implicit-pkgs) + (when (configuration-layer//is-package-orphan + imp-pkg dist-pkgs dependencies) + (add-to-list 'result imp-pkg))) + result)) + +(defun configuration-layer//is-package-orphan (pkg-name dist-pkgs dependencies) + "Returns not nil if PKG-NAME is the name of an orphan package." + (unless (or (memq pkg-name dist-pkgs) + (memq pkg-name configuration-layer--protected-packages)) + (if (ht-contains? dependencies pkg-name) + (let ((parents (ht-get dependencies pkg-name))) + (cl-reduce (lambda (x y) (and x y)) + (mapcar (lambda (p) (configuration-layer//is-package-orphan + p dist-pkgs dependencies)) + parents) + :initial-value t)) + (not (memq pkg-name dist-pkgs))))) + +(defun configuration-layer//get-package-directory (pkg-name) + "Return the directory path for package with name PKG-NAME." + (let ((pkg-desc (assq pkg-name package-alist))) + (package-desc-dir (cadr pkg-desc)))) + +(defun configuration-layer//get-package-deps-from-alist (pkg-name) + "Return the dependencies alist for package with name PKG-NAME." + (let ((pkg-desc (assq pkg-name package-alist))) + (when pkg-desc (package-desc-reqs (cadr pkg-desc))))) + +(defun configuration-layer//get-package-deps-from-archive (pkg-name) + "Return the dependencies alist for a PKG-NAME from the archive data." + (let* ((pkg-arch (assq pkg-name package-archive-contents)) + (reqs (when pkg-arch (package-desc-reqs (cadr pkg-arch))))) + ;; recursively get the requirements of reqs + (dolist (req reqs) + (let* ((pkg-name2 (car req)) + (reqs2 (configuration-layer//get-package-deps-from-archive + pkg-name2))) + (when reqs2 (setq reqs (append reqs2 reqs))))) + reqs)) + +(defun configuration-layer//get-package-version-string (pkg-name) + "Return the version string for package with name PKG-NAME." + (let ((pkg-desc (assq pkg-name package-alist))) + (when pkg-desc + (package-version-join (package-desc-version (cadr pkg-desc)))))) + +(defun configuration-layer//get-package-version (pkg-name) + "Return the version list for package with name PKG-NAME." + (let ((version-string (configuration-layer//get-package-version-string + pkg-name))) + (unless (string-empty-p version-string) + (version-to-list version-string)))) + +(defun configuration-layer//get-latest-package-version-string (pkg-name) + "Return the version string for package with name PKG-NAME." + (let ((pkg-arch (assq pkg-name package-archive-contents))) + (when pkg-arch + (package-version-join (package-desc-version (cadr pkg-arch)))))) + +(defun configuration-layer//get-latest-package-version (pkg-name) + "Return the versio list for package with name PKG-NAME." + (let ((version-string + (configuration-layer//get-latest-package-version-string pkg-name))) + (unless (string-empty-p version-string) + (version-to-list version-string)))) + +(defun configuration-layer//package-delete (pkg-name) + "Delete package with name PKG-NAME." + (cond + ((version<= "25.0.50" emacs-version) + (let ((p (cadr (assq pkg-name package-alist)))) + ;; add force flag to ignore dependency checks in Emacs25 + (when p (package-delete p t t)))) + (t (let ((p (cadr (assq pkg-name package-alist)))) + (when p (package-delete p)))))) + +(defun configuration-layer/delete-orphan-packages (packages) + "Delete PACKAGES if they are orphan." + (interactive) + (let* ((dependencies (configuration-layer//get-packages-dependencies)) + (implicit-packages (configuration-layer//get-implicit-packages + packages)) + (orphans (configuration-layer//get-orphan-packages + packages + implicit-packages + dependencies)) + (orphans-count (length orphans)) + deleted-count) + ;; (message "dependencies: %s" dependencies) + ;; (message "implicit: %s" implicit-packages) + ;; (message "orphans: %s" orphans) + (if orphans + (progn + (spacemacs-buffer/append + (format "Found %s orphan package(s) to delete...\n" + orphans-count)) + (setq deleted-count 0) + (dolist (orphan orphans) + (setq deleted-count (1+ deleted-count)) + (spacemacs-buffer/replace-last-line + (format "--> deleting %s... [%s/%s]" + orphan + deleted-count + orphans-count) t) + (configuration-layer//package-delete orphan) + (spacemacs//redisplay)) + (spacemacs-buffer/append "\n")) + (spacemacs-buffer/message "No orphan package to delete.")))) + +(defun configuration-layer//gather-auto-mode-extensions (mode) + "Return a regular expression matching all the extensions associate to MODE." + (let (gather-extensions) + (dolist (x auto-mode-alist) + (let ((ext (car x)) + (auto-mode (cdr x))) + (when (and (stringp ext) + (symbolp auto-mode) + (eq auto-mode mode)) + (push (car x) gather-extensions)))) + (when gather-extensions + (concat "\\(" + (string-join gather-extensions "\\|") + "\\)")))) + +(defun configuration-layer//lazy-install-extensions-for-layer (layer-name) + "Return an alist of owned modes and extensions for the passed layer." + (let* ((layer (configuration-layer/get-layer layer-name)) + (packages (cfgl-layer-owned-packages layer)) + result) + (dolist (pkg packages) + (let ((pkg-sym (oref pkg :name))) + (dolist (mode (list pkg-sym (intern (format "%S-mode" pkg-sym)))) + (let ((ext (configuration-layer//gather-auto-mode-extensions mode))) + (when ext (push (cons mode ext) result)))))) + result)) + +(defun configuration-layer//insert-lazy-install-form (layer-name mode ext) + "Insert a configuration form for lazy installation of MODE." + (let ((str (concat "(configuration-layer/lazy-install '" + (symbol-name layer-name) + " :extensions '(" + (let ((print-quoted t)) (prin1-to-string ext)) + " " + (symbol-name mode) + "))\n"))) + (insert str))) + +(defun configuration-layer/insert-lazy-install-configuration () + "Prompt for a layer and insert the forms to configure lazy installation." + (interactive) + (let ((layer-name + (intern (completing-read + "Choose a used layer" + (sort configuration-layer--used-layers + (lambda (x y) + (string< (oref (cdr x) :name) + (oref (cdr y) :name)))))))) + (let ((mode-exts (configuration-layer//lazy-install-extensions-for-layer + layer-name))) + (dolist (x mode-exts) + (configuration-layer//insert-lazy-install-form + layer-name (car x) (cdr x)))))) + +(defvar configuration-layer--spacemacs-startup-time nil + "Spacemacs full startup duration.") + +(defun configuration-layer/display-summary (start-time) + "Display a summary of loading time." + (unless configuration-layer--spacemacs-startup-time + (setq configuration-layer--spacemacs-startup-time + (float-time (time-subtract (current-time) emacs-start-time)))) + (let ((stats (configuration-layer/configured-packages-stats + configuration-layer--used-packages))) + (spacemacs-buffer/insert-page-break) + (spacemacs-buffer/append + (format "\n%s packages loaded in %.3fs (e:%s r:%s l:%s b:%s)" + (cadr (assq 'total stats)) + configuration-layer--spacemacs-startup-time + (cadr (assq 'elpa stats)) + (cadr (assq 'recipe stats)) + (cadr (assq 'local stats)) + (cadr (assq 'built-in stats)))) + (with-current-buffer (get-buffer-create spacemacs-buffer-name) + (let ((buffer-read-only nil)) + (spacemacs-buffer//center-line) + (insert "\n"))))) + +(defun configuration-layer/load-or-install-protected-package + (pkg &optional log file-to-load) + "Load PKG package, and protect it against being deleted as an orphan. +See `configuration-layer/load-or-install-package' for more information." + (push pkg configuration-layer--protected-packages) + (configuration-layer/load-or-install-package pkg log file-to-load)) + +(defun configuration-layer/load-or-install-package + (pkg &optional log file-to-load) + "Load PKG package. PKG will be installed if it is not already installed. +Whenever the initial require fails the absolute path to the package +directory is returned. +If LOG is non-nil a message is displayed in spacemacs-buffer-mode buffer. +FILE-TO-LOAD is an explicit file to load after the installation." + (let ((warning-minimum-level :error)) + (unless (require pkg nil 'noerror) + ;; not installed, we try to initialize package.el only if required to + ;; precious seconds during boot time + (require 'cl) + (let ((pkg-elpa-dir (spacemacs//get-package-directory pkg))) + (if pkg-elpa-dir + (add-to-list 'load-path pkg-elpa-dir) + ;; install the package + (when log + (spacemacs-buffer/append + (format "(Bootstrap) Installing %s...\n" pkg)) + (spacemacs//redisplay)) + (configuration-layer/retrieve-package-archives 'quiet) + (package-install pkg) + (setq pkg-elpa-dir (spacemacs//get-package-directory pkg))) + (require pkg nil 'noerror) + (when file-to-load + (load-file (concat pkg-elpa-dir file-to-load))) + pkg-elpa-dir)))) + +(defun configuration-layer//increment-error-count () + "Increment the error counter." + (if configuration-layer-error-count + (setq configuration-layer-error-count + (1+ configuration-layer-error-count)) + (setq configuration-layer-error-count 1))) + +(provide 'core-configuration-layer) + +;;; core-configuration-layer.el ends here diff --git a/core/core-debug.el b/core/core-debug.el new file mode 100644 index 0000000..b2af85c --- /dev/null +++ b/core/core-debug.el @@ -0,0 +1,143 @@ +;;; core-debug.el --- Spacemacs Core File -*- lexical-binding: t; -*- +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(require 'profiler) + +(defvar spacemacs-debug-timer-threshold 0.15 + "Generate message if file takes longer than this number of +seconds to load") + +(defvar spacemacs-debugp nil) +(defvar spacemacs-debug-with-profile nil) +(defvar spacemacs-debug-with-timed-requires nil) +(defvar spacemacs-debug-with-adv-timers nil) + +(defun spacemacs//load-timer (origfunc &rest args) + "Used to time invocation of `require' or `load'." + (let ((start (current-time)) + (required (car args)) + delta) + (prog1 + (apply origfunc args) + (setq delta (float-time (time-since start))) + (when (> delta spacemacs-debug-timer-threshold) + (with-current-buffer "*load-times*" + (goto-char (point-max)) + (insert (format "[%.3f] (%.3f) Load or require\n Feature: %s\n In file: %s\n\n" + (float-time (time-since emacs-start-time)) + delta required load-file-name))))))) + +(defmacro spacemacs||make-function-timer (func) + "Used to time call to FUNC." + `(lambda (origfunc &rest args) + (let ((start (current-time)) + delta) + (prog1 + (apply origfunc args) + (setq delta (float-time (time-since start))) + (when (> delta spacemacs-debug-timer-threshold) + (with-current-buffer "*load-times*" + (goto-char (point-max)) + (insert (format "[%.3f] (%.3f) Function call\n Function: %s\n Args: %s\n\n" + (float-time (time-since emacs-start-time)) + delta ',func args)))))))) + +(defmacro spacemacs||make-function-profiler (func) + `(lambda (origfunc &rest args) + (if (profiler-running-p) + (profiler-report) + (profiler-start 'cpu)) + (prog1 + (apply origfunc args) + (with-current-buffer "*load-times*" + (goto-char (point-max)) + (insert (format "[%.3f] Done profiling function: %s\n\n" + (float-time (time-since emacs-start-time)) ',func))) + (profiler-report)))) + +(defun spacemacs/init-debug () + "Set the debug hooks." + (when spacemacs-debug-with-profile + (profiler-start 'cpu+mem) + (add-hook 'after-init-hook + (lambda () + (run-with-idle-timer 2 nil (lambda () + (profiler-report) + (profiler-stop)))))) + + (when spacemacs-debug-with-timed-requires + (with-current-buffer (get-buffer-create "*load-times*") + (insert (format "Threshold set at %.3f seconds\n\n" + spacemacs-debug-timer-threshold))) + + (defadvice package-initialize (around spacemacs//timed-initialize activate) + (let ((start (current-time)) res delta) + (setq res ad-do-it + delta (float-time (time-since start))) + (when (> delta spacemacs-debug-timer-threshold) + (with-current-buffer "*load-times*" + (goto-char (point-max)) + (insert (format "package-initialize took %.3f sec\n" delta)))) + res)) + + (defadvice require (around spacemacs//timed-require activate) + (let ((start (current-time)) res delta) + (setq res ad-do-it + delta (float-time (time-since start))) + (when (> delta spacemacs-debug-timer-threshold) + (with-current-buffer "*load-times*" + (goto-char (point-max)) + (insert (format "File %s: Required %s: %.3f sec\n" + load-file-name (ad-get-arg 0) delta)))) + res)) + + (defadvice load (around spacemacs//timed-load activate) + (let ((start (current-time)) res delta) + (setq res ad-do-it + delta (float-time (time-since start))) + (when (> delta spacemacs-debug-timer-threshold) + (with-current-buffer "*load-times*" + (goto-char (point-max)) + (insert (format "File %s: Loaded %s: %.3f sec\n" + load-file-name (ad-get-arg 0) delta)))) + res))) + + (when spacemacs-debug-with-adv-timers + (with-current-buffer (get-buffer-create "*load-times*") + (insert (format "Measured times greater than %.3f sec:\n\n" + spacemacs-debug-timer-threshold))) + + (add-hook 'after-init-hook + (lambda () + (with-current-buffer "*load-times*" + (goto-char (point-max)) + (insert (format "[%.3f] Spacemacs finished initializing\n\n" + (float-time (time-since emacs-start-time)) ))))) + + (advice-add 'load :around #'spacemacs//load-timer) + (advice-add 'require :around #'spacemacs//load-timer) + (advice-add 'package-initialize + :around + (spacemacs||make-function-timer package-intialize)) + (advice-add 'configuration-layer/sync + :around + (spacemacs||make-function-timer configuration-layer/sync)) + ;; (advice-add 'configuration-layer/sync + ;; :around + ;; (spacemacs||make-function-profiler configuration-layer/sync)) + (advice-add 'configuration-layer//configure-package + :around + (spacemacs||make-function-timer configuration-layer//configure-package))) + + ;; Keep debug-on-error on for stuff that is lazily loaded + (add-hook 'after-init-hook (lambda () (setq debug-on-error t)))) + +(provide 'core-debug) diff --git a/core/core-display-init.el b/core/core-display-init.el new file mode 100644 index 0000000..8249b0f --- /dev/null +++ b/core/core-display-init.el @@ -0,0 +1,46 @@ +;;; core-display-init.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar spacemacs--after-display-system-init-list '() + "List of functions to be run after the display system is initialized.") + +(defadvice server-create-window-system-frame + (after spacemacs-init-display activate) + "After Emacs server creates a frame, run functions queued in +`SPACEMACS--AFTER-DISPLAY-SYSTEM-INIT-LIST' to do any setup that needs to have +the display system initialized." + (progn + (dolist (fn (reverse spacemacs--after-display-system-init-list)) + (funcall fn)) + (ad-disable-advice 'server-create-window-system-frame + 'after + 'spacemacs-init-display) + (ad-activate 'server-create-window-system-frame))) + +(defmacro spacemacs|do-after-display-system-init (&rest body) + "If the display-system is initialized, run `BODY', otherwise, +add it to a queue of actions to perform after the first graphical frame is +created." + `(let ((init (cond ((boundp 'ns-initialized) ns-initialized) + ;; w32-initialized gets set too early, so + ;; if we're on Windows, check the list of fonts + ;; instead (this is nil until the graphics system + ;; is initialized) + ((boundp 'w32-initialized) (font-family-list)) + ((boundp 'x-initialized) x-initialized) + ;; fallback to normal loading behavior only if in a GUI + (t (display-graphic-p))))) + (if init + (progn + ,@body) + (push (lambda () ,@body) spacemacs--after-display-system-init-list)))) + +(provide 'core-display-init) diff --git a/core/core-documentation.el b/core/core-documentation.el new file mode 100644 index 0000000..35b00e8 --- /dev/null +++ b/core/core-documentation.el @@ -0,0 +1,250 @@ +;;; core-spacemacs.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(require 'org) +(require 'ox-publish) +(require 's) +(require 'dash) +(require 'f) +(require 'toc-org) +(require 'org-id) + +(defvar spacemacs--category-names + '(("config-files" . "Configuration files") + ("email" . "E-mail") + ("intl" . "International support") + ("lang" . "Programming and markup languages") + ("os" . "Operating systems") + ("spacemacs" . "Spacemacs distribution layers")) + "Special names for categories. Used to generate the layers list.") + +(defun spacemacs//generate-layers-from-path (path level) + "Add all layers found in PATH to the current buffer, at org level LEVEL." + (let* ((all-subs (directory-files path t nil nil)) + (layers (-filter (lambda (p) + (eq 'layer (configuration-layer//directory-type p))) + all-subs)) + (categories (-filter (lambda (p) + (eq 'category (configuration-layer//directory-type p))) + all-subs))) + (message "%S" layers) + (dolist (l layers) + (let ((layer-name (file-name-nondirectory l)) + (target-path (concat (file-relative-name + l (concat spacemacs-start-directory "layers")) + "/README.org"))) + (insert (format "- [[file:%s][%s]]\n" target-path layer-name)))) + (dolist (c categories) + (let* ((category-name (substring (file-name-nondirectory c) 1)) + (pretty-name (or (cdr (assoc category-name spacemacs--category-names)) + (s-capitalize (replace-regexp-in-string + "-" " " category-name))))) + (message "%S" category-name) + (unless (string= "distribution" category-name) + (insert (format "\n%s %s\n" level pretty-name)) + (spacemacs//generate-layers-from-path c (concat level "*")) + ))))) + +(defun spacemacs//generate-layers-file () + "Generate the layers list file." + (interactive) + (with-temp-buffer + (org-mode) + (insert "#+TITLE: Configuration layers\n") + (insert "#+HTML_HEAD_EXTRA: \n\n") + (insert "* Table of Contents\n") + (org-set-tags-to '("TOC_4_org" "noexport")) + ;; there is no layer at the root level for now + ;; uncomment this line if any new layer is added at the root level + ;; (insert "* General layers\n") + (spacemacs//generate-layers-from-path configuration-layer-directory "*") + (write-file (concat spacemacs-start-directory "layers/LAYERS.org")))) + +(defun spacemacs//format-toc (&rest r) + (if (not (null (car r))) + (let* ((toc (car r)) + (heading-pos (s-index-of "ContentsClose%s" beginning-of-heading rest-of-toc)) + toc)) + (car r))) + +(defun spacemacs//format-content (&rest r) + (let* ((content (car r)) + (div-string "

") + (toc-string "") + (has-toc (s-index-of "Table of Contents" content)) + (beginning-of-content-div-pos (+ (length div-string) (s-index-of div-string content))) + (beginning-of-content (substring content 0 beginning-of-content-div-pos)) + (rest-of-content (substring content beginning-of-content-div-pos))) + (if (not (null has-toc)) + (format "%s\n%s%s" beginning-of-content toc-string rest-of-content) + content))) + +(defun spacemacs//toc-org-unhrefify-toc () + "Make TOC classical org-mode TOC." + (let ((toc-org-hrefify-default "org")) + (toc-org-insert-toc))) + +(defun spacemacs//org-heading-annotate-custom-id () + "Annotate headings with the indexes that GitHub uses for linking. +`org-html-publish-to-html' will use them instead of the default #orgheadline{N}. +This way the GitHub links and the http://spacemacs.org/ links will be compatible." + (progn (goto-char (point-min)) + (goto-char (point-min)) + (while (re-search-forward "^[\\*]+\s\\(.*\\).*$" nil t) + (let ((heading (match-string 1))) + (progn (move-end-of-line nil) + (open-line 1) + (next-line 1) + (insert (format (concat " :PROPERTIES:\n" + " :CUSTOM_ID: %s\n" + " :END:\n") + (substring (toc-org-hrefify-gh + (replace-regexp-in-string + toc-org-tags-regexp + "" + heading)) + ;; Remove # prefix added by `toc-org-hrefify-gh'. + 1)))))))) + +(defun spacemacs//reroot-links () + "Find the links that start with https://github.com/syl20bnr/spacemacs/blob/ +and end with .org{#an-optional-heading-link} (i.e the links between the local org files). +Change their root to http://spacemacs.org/ so the links will point at files located on the site. +For the file to file links to work properly the exported org files should be processed with +the `spacemacs//org-heading-annotate-custom-id' function." + (let ((git-url-root-regexp + (concat "\\[\\[[\\s]*\\(https\\:\\/\\/github\\.com\\/syl20bnr" + "\\/spacemacs\\/blob\\/[^/]+\\/\\)[^]]+\\(\\.org\\).*$")) + (site-url "http://spacemacs.org/") + (site-doc-postf ".html")) + (progn (goto-char (point-min)) + (while (re-search-forward git-url-root-regexp nil t) + (progn (replace-match site-url nil t nil 1) + (replace-match site-doc-postf nil t nil 2)))))) + +(defun spacemacs//add-org-meta-readtheorg-css (filename) + (let* ((head-css-extra-readtheorg-head (concat + "#+HTML_HEAD_EXTRA:" + "\n")) + (progn (goto-char (point-min)) + (delete-matching-lines "\\+HTML_HEAD_EXTRA\\:.*\\/css\\/readtheorg\\.css") + (goto-char (point-min)) + (if (search-forward "#+TITLE:" nil t nil) + (beginning-of-line 2) + (error (format "Can't find #+TITLE: in %s" + (buffer-file-name)))) + (insert (concat head-css-extra-readtheorg-head + (f-relative spacemacs-start-directory + (file-name-directory filename)) + head-css-extra-readtheorg-tail))))) + +(defun spacemacs//pub-doc-html-advice (origfunc &rest args) + "Wrapper for `org-html-publish-to-html' use it to insert +preprocessors for the exported .org files." + (save-current-buffer + (save-excursion + (let* ((filename (car (nthcdr 1 args))) + (visitingp (find-buffer-visiting filename))) + ;; Temporary "unvisit" the visited org files. + (when visitingp (with-current-buffer visitingp (setq buffer-file-name nil))) + (with-temp-buffer + (save-match-data + (insert-file-contents filename t) + ;; ===========Add preprocessors here=============== + (spacemacs//add-org-meta-readtheorg-css filename) + (spacemacs//toc-org-unhrefify-toc) + (spacemacs//reroot-links) + (spacemacs//org-heading-annotate-custom-id) + (apply origfunc args) + (not-modified))) + ;; Restore `buffer-file-name' for the buffers that previously visited the org files. + (when visitingp (with-current-buffer visitingp (setq buffer-file-name filename))))))) + +(defun spacemacs/publish-doc () + "Publish the documentation to doc/export/." + (interactive) + (advice-add 'org-html-toc :filter-return #'spacemacs//format-toc) + (advice-add 'org-html-template :filter-return #'spacemacs//format-content) + (advice-add 'org-html-publish-to-html :around #'spacemacs//pub-doc-html-advice) + (let* ((header + " + + + + ") + (publish-target (concat spacemacs-start-directory "export/")) + (org-html-htmlize-output-type 'css) + (org-publish-project-alist + `(("spacemacs" + :components ("spacemacs-news" + "spacemacs-doc" + "spacemacs-doc-static" + "layers-doc" + "layers-doc-static")) + ("spacemacs-news" + :base-directory ,spacemacs-news-directory + :base-extension "org" + :publishing-directory ,(concat publish-target "news/") + :publishing-function org-html-publish-to-html + :headline-levels 4 + :html-head ,header) + ("spacemacs-doc" + :base-directory ,spacemacs-docs-directory + :base-extension "org" + :publishing-directory ,(concat publish-target "doc/") + :publishing-function org-html-publish-to-html + :headline-levels 4 + :html-head ,header) + ("layers-doc" + :base-directory ,(concat spacemacs-start-directory "layers/") + :base-extension "org" + :recursive t + :publishing-directory ,(concat publish-target "layers/") + :publishing-function org-html-publish-to-html + :preparation-function spacemacs//generate-layers-file + :exclude "local" + :html-head ,header) + ("spacemacs-doc-static" + :base-directory ,spacemacs-docs-directory + :base-extension "png" + :recursive t + :publishing-directory ,(concat publish-target "doc/") + :publishing-function org-publish-attachment) + ("layers-doc-static" + :base-directory ,(concat spacemacs-start-directory "layers/") + :base-extension "jpg\\|png\\|gif" + :recursive t + :publishing-directory ,(concat publish-target "layers/") + :publishing-function org-publish-attachment)))) + (org-publish-project "spacemacs")) + (advice-remove 'org-html-toc #'spacemacs//format-toc) + (advice-remove 'org-html-template #'spacemacs//format-content) + (advice-remove 'org-html-publish-to-html #'spacemacs//pub-doc-html-advice)) + +(provide 'core-documentation) diff --git a/core/core-dotspacemacs.el b/core/core-dotspacemacs.el new file mode 100644 index 0000000..cf454cb --- /dev/null +++ b/core/core-dotspacemacs.el @@ -0,0 +1,728 @@ +;;; core-dotspacemacs.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 +(defconst dotspacemacs-template-directory + (expand-file-name (concat spacemacs-core-directory "templates/")) + "Templates directory.") + +(defconst dotspacemacs-test-results-buffer "*dotfile-test-results*" + "Name of the buffer to display dotfile test results.") + +(let* ((env (getenv "SPACEMACSDIR")) + (env-dir (when env (expand-file-name (concat env "/")))) + (env-init (and env-dir (expand-file-name "init.el" env-dir))) + (no-env-dir-default (expand-file-name + (concat user-home-directory + ".spacemacs.d/"))) + (default-init (expand-file-name ".spacemacs" user-home-directory))) + (defconst dotspacemacs-directory + (cond + ((and env (file-exists-p env-dir)) + env-dir) + ((file-exists-p no-env-dir-default) + no-env-dir-default) + (t + nil)) + "Optional spacemacs directory, which defaults to +~/.spacemacs.d. This setting can be overridden using the +SPACEMACSDIR environment variable. If neither of these +directories exist, this variable will be nil.") + + (defvar dotspacemacs-filepath + (let ((spacemacs-dir-init (when dotspacemacs-directory + (concat dotspacemacs-directory + "init.el")))) + (cond + (env-init) + ((file-exists-p default-init) default-init) + ((and dotspacemacs-directory (file-exists-p spacemacs-dir-init)) spacemacs-dir-init) + (t default-init))) + "Filepath to the installed dotfile. If SPACEMACSDIR is given +then SPACEMACSDIR/init.el is used. Otherwise, if ~/.spacemacs +exists, then this is used. If ~/.spacemacs does not exist, then +check for init.el in dotspacemacs-directory and use this if it +exists. Otherwise, fallback to ~/.spacemacs")) + +(defvar dotspacemacs-distribution 'spacemacs + "Base distribution to use. This is a layer contained in the directory +`+distributions'. For now available distributions are `spacemacs-base' +or `spacemacs'.") + +(defvar dotspacemacs-elpa-https t + "If non nil ELPA repositories are contacted via HTTPS whenever it's +possible. Set it to nil if you have no way to use HTTPS in your +environment, otherwise it is strongly recommended to let it set to t.") + +(defvar dotspacemacs-elpa-timeout 5 + "Maximum allowed time in seconds to contact an ELPA repository.") + +(defvar dotspacemacs-elpa-subdirectory nil + "If non-nil, a form that evaluates to a package directory. For +example, to use different package directories for different Emacs +versions, set this to `emacs-version'.") + +(defvar dotspacemacs-configuration-layer-path '() + "List of additional paths where to look for configuration layers. +Paths must have a trailing slash (ie. `~/.mycontribs/')") + +(defvar dotspacemacs-install-packages 'used-only + "Defines the behaviour of Spacemacs when installing packages. +Possible values are `used-only', `used-but-keep-unused' and `all'. `used-only' +installs only explicitly used packages and uninstall any unused packages as well +as their unused dependencies. `used-but-keep-unused' installs only the used +packages but won't uninstall them if they become unused. `all' installs *all* +packages supported by Spacemacs and never uninstall them.") + +(defvar dotspacemacs-enable-lazy-installation 'unused + "Lazy installation of layers (i.e. layers are installed only when a file +with a supported type is opened). Possible values are `all', `unused' and `nil'. +`unused' will lazy install only unused layers (i.e. layers not listed in +variable `dotspacemacs-configuration-layers'), `all' will lazy install any layer +that support lazy installation even the layers listed in +`dotspacemacs-configuration-layers'. `nil' disable the lazy installation feature +and you have to explicitly list a layer in the variable +`dotspacemacs-configuration-layers' to install it.") + +(defvar dotspacemacs-ask-for-lazy-installation t + "If non-nil then Spacemacs will ask for confirmation before installing +a layer lazily.") + +(defvar dotspacemacs-additional-packages '() + "List of additional packages that will be installed wihout being +wrapped in a layer. If you need some configuration for these +packages then consider to create a layer, you can also put the +configuration in `dotspacemacs/user-config'.") + +(defvar dotspacemacs-editing-style 'vim + "One of `vim', `emacs' or `hybrid'. +`hybrid' is like `vim' except that `insert state' is replaced by the +`hybrid state' with `emacs' key bindings. The value can also be a list + with `:variables' keyword (similar to layers). Check the editing styles + section of the documentation for details on available variables.") + +(defvar dotspacemacs-startup-banner 'official + "Specify the startup banner. Default value is `official', it displays +the official spacemacs logo. An integer value is the index of text +banner, `random' chooses a random text banner in `core/banners' +directory. A string value must be a path to a .PNG file. +If the value is nil then no banner is displayed.") + +(defvar dotspacemacs-scratch-mode 'text-mode + "Default major mode of the scratch buffer.") + +(defvar dotspacemacs-check-for-update nil + "If non nil then spacemacs will check for updates at startup +when the current branch is not `develop'. Note that checking for +new versions works via git commands, thus it calls GitHub services +whenever you start Emacs.") + +(defvar dotspacemacs-configuration-layers '(emacs-lisp) + "List of configuration layers to load.") + +(defvar dotspacemacs--configuration-layers-saved nil + "Saved value of `dotspacemacs-configuration-layers' after sync.") + +(defvar dotspacemacs-themes '(spacemacs-dark + spacemacs-light) + "List of themes, the first of the list is loaded when spacemacs starts. +Press `SPC T n' to cycle to the next theme in the list (works great +with 2 themes variants, one dark and one light") + +(defvar dotspacemacs-colorize-cursor-according-to-state t + "If non nil the cursor color matches the state color in GUI Emacs.") + +(defvar dotspacemacs-leader-key "SPC" + "The leader key.") + +(defvar dotspacemacs-emacs-leader-key "M-m" + "The leader key accessible in `emacs state' and `insert state'") + +(defvar dotspacemacs-major-mode-leader-key "," + "Major mode leader key is a shortcut key which is the equivalent of +pressing ` m`. Set it to `nil` to disable it.") + +(defvar dotspacemacs-major-mode-emacs-leader-key "C-M-m" + "Major mode leader key accessible in `emacs state' and `insert state'") + +(defvar dotspacemacs-ex-command-key ":" + "The key used for Vim Ex commands.") + +(defvar dotspacemacs-command-key "SPC" + "The key used for Emacs commands (M-x) (after pressing on the leader key).") +(defvaralias 'dotspacemacs-emacs-command-key 'dotspacemacs-command-key + "New official name for `dotspacemacs-command-key'") + +(defvar dotspacemacs-distinguish-gui-tab nil + "If non nil, distinguish C-i and tab in the GUI version of +emacs.") + +;; (defvar dotspacemacs-distinguish-gui-ret nil +;; "If non nil, distinguish C-m and return in the GUI version of +;; emacs.") + +(defvar dotspacemacs-default-font '("Source Code Pro" + :size 13 + :weight normal + :width normal + :powerline-scale 1.1) + "Default font, or prioritized list of fonts. `powerline-scale' +allows to quickly tweak the mode-line size to make separators +look not too crappy. + +Has no effect when running Emacs in terminal.") + +(defvar dotspacemacs-remap-Y-to-y$ nil + "If non nil `Y' is remapped to `y$' in Evil states.") + +(defvar dotspacemacs-retain-visual-state-on-shift t + "If non-nil, the shift mappings `<' and `>' retain visual state +if used there.") + +(defvar dotspacemacs-visual-line-move-text nil + "If non-nil, J and K move lines up and down when in visual mode.") + +(defvar dotspacemacs-ex-substitute-global nil + "If non nil, inverse the meaning of `g' in `:substitute' Evil ex-command.") + +(defvar dotspacemacs-folding-method 'evil + "Code folding method. Possible values are `evil' and `origami'.") + +(defvar dotspacemacs-default-layout-name "Default" + " Name of the default layout.") + +(defvar dotspacemacs-display-default-layout nil + "If non nil the default layout name is displayed in the mode-line.") + +(defvar dotspacemacs-auto-resume-layouts nil + "If non nil then the last auto saved layouts are resume automatically upon +start.") + +(defvar dotspacemacs-max-rollback-slots 5 + "Maximum number of rollback slots to keep in the cache.") + +(defvar dotspacemacs-helm-resize nil + "If non nil, `helm' will try to minimize the space it uses.") + +(defvar dotspacemacs-helm-no-header nil + "if non nil, the helm header is hidden when there is only one source.") + +(defvar dotspacemacs-helm-position 'bottom + "Position in which to show the `helm' mini-buffer.") + +(defvar dotspacemacs-helm-use-fuzzy 'always + "Controls fuzzy matching in helm. If set to `always', force fuzzy matching + in all non-asynchronous sources. If set to `source', preserve individual + source settings. Else, disable fuzzy matching in all sources.") + +(defvar dotspacemacs-large-file-size 1 + "Size (in MB) above which spacemacs will prompt to open the large file +literally to avoid performance issues. Opening a file literally means that +no major mode or minor modes are active.") + +(defvar dotspacemacs-auto-save-file-location 'cache + "Location where to auto-save files. Possible values are `original' to +auto-save the file in-place, `cache' to auto-save the file to another +file stored in the cache directory and `nil' to disable auto-saving. +Default value is `cache'.") + +(defvar dotspacemacs-enable-paste-transient-state t + "If non nil the paste transient-state is enabled. While enabled pressing `p` +several times cycle between the kill ring content.'") +(defvaralias + 'dotspacemacs-enable-paste-micro-state + 'dotspacemacs-enable-paste-transient-state + "Old name of `dotspacemacs-enable-paste-transient-state'.") + +(defvar dotspacemacs-which-key-delay 0.4 + "Delay in seconds starting from the last keystroke after which +the which-key buffer will be shown if you have not completed a +key sequence. Setting this variable is equivalent to setting +`which-key-idle-delay'.") + +(defvar dotspacemacs-which-key-position 'bottom + "Location of the which-key popup buffer. Possible choices are bottom, +right, and right-then-bottom. The last one will display on the +right if possible and fallback to bottom if not.") + +(defvar dotspacemacs-loading-progress-bar t + "If non nil a progress bar is displayed when spacemacs is loading. This +may increase the boot time on some systems and emacs builds, set it to nil +to boost the loading time.") + +(defvar dotspacemacs-fullscreen-at-startup nil + "If non nil the frame is fullscreen when Emacs starts up (Emacs 24.4+ only).") + +(defvar dotspacemacs-fullscreen-use-non-native nil + "If non nil `spacemacs/toggle-fullscreen' will not use native fullscreen. Use +to disable fullscreen animations in OSX.") + +(defvar dotspacemacs-maximized-at-startup nil + "If non nil the frame is maximized when Emacs starts up (Emacs 24.4+ only). +Takes effect only if `dotspacemacs-fullscreen-at-startup' is nil.") + +(defvar dotspacemacs-active-transparency 90 + "A value from the range (0..100), in increasing opacity, which describes the +transparency level of a frame when it's active or selected. Transparency +can be toggled through `toggle-transparency'.") + +(defvar dotspacemacs-inactive-transparency 90 + "A value from the range (0..100), in increasing opacity, which describes the +transparency level of a frame when it's inactive or deselected. Transparency +can be toggled through `toggle-transparency'.") + +(defvar dotspacemacs-show-transient-state-title t + "If non nil show the titles of transient states.") + +(defvar dotspacemacs-show-transient-state-color-guide t + "If non nil show the color guide hint for transient state keys.") + +(defvar dotspacemacs-mode-line-unicode-symbols t + "If non nil unicode symbols are displayed in the mode-line (eg. for lighters)") + +(defvar dotspacemacs-smooth-scrolling t + "If non nil smooth scrolling (native-scrolling) is enabled. +Smooth scrolling overrides the default behavior of Emacs which +recenters point when it reaches the top or bottom of the +screen.") + +(defvar dotspacemacs-line-numbers nil + "If non nil line numbers are turned on in all `prog-mode' and `text-mode' +derivatives. If set to `relative', also turns on relative line numbers.") + +(defvar dotspacemacs-persistent-server nil + "If non nil advises quit functions to keep server open when quitting.") + +(defvar dotspacemacs-smartparens-strict-mode nil + "If non-nil smartparens-strict-mode will be enabled in programming modes.") + +(defvar dotspacemacs-smart-closing-parenthesis nil + "If non-nil pressing the closing parenthesis `)' key in insert mode passes + over any automatically added closing parenthesis, bracket, quote, etc… + This can be temporary disabled by pressing `C-q' before `)'. (default nil)") + +(defvar dotspacemacs-highlight-delimiters 'all + "Select a scope to highlight delimiters. Possible values are `any', +`current', `all' or `nil'. Default is `all' (highlight any scope and + emphasis the current one.") + +(defvar dotspacemacs-whitespace-cleanup nil + "delete whitespace while saving buffer. possible values are `all' +to aggressively delete empty lines and long sequences of whitespace, `trailing' +to delete only the whitespace at end of lines, `changed' to delete only +whitespace for changed lines or `nil' to disable cleanup.") + +(defvar dotspacemacs-search-tools '("ag" "pt" "ack" "grep") + "List of search tool executable names. Spacemacs uses the first installed +tool of the list. Supported tools are `ag', `pt', `ack' and `grep'.") + +(defvar dotspacemacs-default-package-repository 'melpa-stable + "The default package repository used if no explicit repository has been +specified with an installed package. +NOT USED FOR NOW :-)") + +(defvar dotspacemacs-startup-lists '((recents . 5) + (projects . 7)) + "Association list of items to show in the startup buffer of the form +`(list-type . list-size)`. If nil it is disabled. +Possible values for list-type are: +`recents' `bookmarks' `projects' `agenda' `todos'. +List sizes may be nil, in which case +`spacemacs--buffer-startup-lists-length' takes effect. +") + +(defvar dotspacemacs-startup-buffer-responsive t + "True if the home buffer should respond to resize events.") + +(defvar dotspacemacs-excluded-packages '() + "A list of packages that will not be install and loaded.") + +(defvar dotspacemacs-frozen-packages '() + "A list of packages that cannot be updated.") + +;; only for backward compatibility +(defalias 'dotspacemacs-mode 'emacs-lisp-mode) + +(defmacro dotspacemacs|call-func (func &optional msg) + "Call the function from the dotfile only if it is bound. +If MSG is not nil then display a message in `*Messages'. Errors +are caught and signalled to user in spacemacs buffer." + `(progn + (when ,msg (spacemacs-buffer/message ,msg)) + (when (fboundp ',func) + (condition-case-unless-debug err + (,func) + (error + (configuration-layer//increment-error-count) + (spacemacs-buffer/append (format "Error in %s: %s\n" + ',(symbol-name func) + (error-message-string err)) + t)))))) + +(defun dotspacemacs//check-layers-changed () + "Check if the value of `dotspacemacs-configuration-layers' +changed, and issue a warning if it did." + (unless (eq dotspacemacs-configuration-layers + dotspacemacs--configuration-layers-saved) + (spacemacs-buffer/warning + "`dotspacemacs-configuration-layers' was changed outside of `dotspacemacs/layers'."))) +(add-hook 'spacemacs-post-user-config-hook + 'dotspacemacs//check-layers-changed) + +(defun dotspacemacs//read-editing-style-config (config) + "Read editing style CONFIG: apply variables and return the editing style. +CONFIG can be the symbol of an editing style or a list where the car is +the symbol of an editing style and the cdr is a list of keyword arguments like +`:variables'." + (cond + ((symbolp config) config) + ((listp config) + (let ((variables (spacemacs/mplist-get config :variables))) + (while variables + (let ((var (pop variables))) + (if (consp variables) + (condition-case-unless-debug err + (set-default var (eval (pop variables))) + ('error + (spacemacs-buffer/append + (format (concat "\nAn error occurred while reading the " + "editing style variable %s " + "(error: %s). Be sure to quote the value " + "if needed.\n") var err)))) + (spacemacs-buffer/warning "Missing value for variable %s !" + var))))) + (car config)))) + +(defun dotspacemacs/add-layer (layer-name) + "Add LAYER_NAME to dotfile and reload the it. +Returns non nil if the layer has been effectively inserted." + (unless (configuration-layer/layer-usedp layer-name) + (with-current-buffer (find-file-noselect (dotspacemacs/location)) + (beginning-of-buffer) + (let ((insert-point (re-search-forward + "dotspacemacs-configuration-layers *\n?.*\\((\\)"))) + (insert (format "\n%S" layer-name)) + (indent-region insert-point (+ insert-point + (length (symbol-name layer-name)))) + (save-buffer))) + (load-file (dotspacemacs/location)) + t)) + +(defun dotspacemacs/sync-configuration-layers (&optional arg) + "Synchronize declared layers in dotfile with spacemacs. + +Called with `C-u' skips `dotspacemacs/user-config'. +Called with `C-u C-u' skips `dotspacemacs/user-config' _and_ preleminary tests." + (interactive "P") + (when (file-exists-p dotspacemacs-filepath) + (with-current-buffer (find-file-noselect dotspacemacs-filepath) + (let ((dotspacemacs-loading-progress-bar nil)) + (setq spacemacs-loading-string "") + (save-buffer) + (let ((tests-ok (or (equal arg '(16)) (dotspacemacs/test-dotfile t)))) + (if tests-ok + (progn + (load-file buffer-file-name) + (dotspacemacs|call-func dotspacemacs/init + "Calling dotfile init...") + (dotspacemacs|call-func dotspacemacs/user-init + "Calling dotfile user init...") + (setq dotspacemacs-editing-style + (dotspacemacs//read-editing-style-config + dotspacemacs-editing-style)) + (configuration-layer/sync) + (if (member arg '((4) (16))) + (message (concat "Done (`dotspacemacs/user-config' " + "function has been skipped).")) + (dotspacemacs|call-func dotspacemacs/user-config + "Calling dotfile user config...") + (run-hooks 'spacemacs-post-user-config-hook) + (message "Done."))) + (switch-to-buffer-other-window dotspacemacs-test-results-buffer) + (spacemacs-buffer/warning "Some tests failed, check `%s' buffer" + dotspacemacs-test-results-buffer)))))) + (when (configuration-layer/package-usedp 'spaceline) + (spacemacs//set-powerline-for-startup-buffers))) + +(defun dotspacemacs/get-variable-string-list () + "Return a list of all the dotspacemacs variables as strings." + (all-completions "" obarray + (lambda (x) + (and (boundp x) + (not (keywordp x)) + (string-prefix-p "dotspacemacs" + (symbol-name x)))))) + +(defun dotspacemacs/get-variable-list () + "Return a list of all dotspacemacs variable symbols." + (mapcar 'intern (dotspacemacs/get-variable-string-list))) + +(defmacro dotspacemacs|symbol-value (symbol) + "Return the value of SYMBOL corresponding to a dotspacemacs variable. +If SYMBOL value is `display-graphic-p' then return the result of + `(display-graphic-p)', otherwise return the value of the symbol." + `(if (eq 'display-graphic-p ,symbol) (display-graphic-p) ,symbol)) + +(defun dotspacemacs/location () + "Return the absolute path to the spacemacs dotfile." + dotspacemacs-filepath) + +(defun dotspacemacs/copy-template () + "Copy `.spacemacs.template' in home directory. Ask for confirmation +before copying the file if the destination already exists." + (interactive) + (let* ((copy? (if (file-exists-p dotspacemacs-filepath) + (y-or-n-p + (format "%s already exists. Do you want to overwrite it ? " + dotspacemacs-filepath)) t))) + (when copy? + (copy-file (concat dotspacemacs-template-directory + ".spacemacs.template") dotspacemacs-filepath t) + (message "%s has been installed." dotspacemacs-filepath)))) + +(defun dotspacemacs//ido-completing-read (prompt candidates) + "Call `ido-completing-read' with a CANDIDATES alist where the key is +a display strng and the value is the actual value to return." + (let ((ido-max-window-height (1+ (length candidates)))) + (cadr (assoc (ido-completing-read prompt (mapcar 'car candidates)) + candidates)))) + +(defun dotspacemacs/install (arg) + "Install the dotfile, return non nil if the doftile has been installed. + +If ARG is non nil then Ask questions to the user before installing the dotfile." + (interactive "P") + ;; preferences is an alist where the key is the text to replace by + ;; the value in the dotfile + (let ((preferences + (when arg + ;; editing style + `(("dotspacemacs-editing-style 'vim" + ,(format + "dotspacemacs-editing-style '%S" + (dotspacemacs//ido-completing-read + "What is your preferred editing style? " + '(("Among the stars aboard the Evil flagship (vim)" + vim) + ("On the planet Emacs in the Holy control tower (emacs)" + emacs))))) + ("dotspacemacs-distribution 'spacemacs" + ,(format + "dotspacemacs-distribution '%S" + (dotspacemacs//ido-completing-read + "What distribution of spacemacs would you like to start with? " + `(("The standard distribution, recommended (spacemacs)" + spacemacs) + (,(concat "A minimalist distribution that you can build on " + "(spacemacs-base)") + spacemacs-base))))) + ("helm" + ,(dotspacemacs//ido-completing-read + "What type of completion framework do you want? " + '(("A heavy one but full-featured (helm)" + "helm") + ("A lighter one but still very powerful (ivy)" + "ivy") + ;; For now, None works only if the user selected + ;; the spacemacs-base distribution + ("None (not recommended)" "")))))))) + (with-current-buffer (find-file-noselect + (concat dotspacemacs-template-directory + ".spacemacs.template")) + (dolist (p preferences) + (goto-char (point-min)) + (re-search-forward (car p)) + (replace-match (cadr p))) + (let ((install + (if (file-exists-p dotspacemacs-filepath) + (y-or-n-p + (format "%s already exists. Do you want to overwrite it ? " + dotspacemacs-filepath)) t))) + (when install + (write-file dotspacemacs-filepath) + (message "%s has been installed." dotspacemacs-filepath) + t)))) + (load-file dotspacemacs-filepath)) + +(defun dotspacemacs//install-and-replace (&optional values) + "Install the dotfile and replace its content according to VALUES. + +VALUES is an alist where the key is the text to replace and value is the new +value." + ) + +(defun dotspacemacs/load-file () + "Load ~/.spacemacs if it exists." + (let ((dotspacemacs (dotspacemacs/location))) + (if (file-exists-p dotspacemacs) + (unless (with-demoted-errors "Error loading .spacemacs: %S" (load dotspacemacs)) + (dotspacemacs/safe-load))))) + +(defun dotspacemacs/safe-load () + "Error recovery from malformed .spacemacs. +Loads default .spacemacs template and suspends pruning of orphan packages. +Informs users of error and prompts for default editing style for use during +error recovery." + (load (concat dotspacemacs-template-directory + ".spacemacs.template")) + (defadvice dotspacemacs/layers + (after error-recover-preserve-packages activate) + (progn + (setq-default dotspacemacs-install-packages 'used-but-keep-unused) + (ad-disable-advice 'dotspacemacs/layers 'after + 'error-recover-preserve-packages) + (ad-activate 'dotspacemacs/layers))) + (defadvice dotspacemacs/init + (after error-recover-prompt-for-style activate) + (progn + (setq-default dotspacemacs-editing-style + (intern + (ido-completing-read + (format + (concat + "Spacemacs encountered an error while " + "loading your `%s' file.\n" + "Pick your editing style for recovery " + "(use left and right arrows): ") + dotspacemacs-filepath) + '(("vim" vim) + ("emacs" emacs) + ("hybrid" hybrid)) + nil t nil nil 'vim))) + (ad-disable-advice 'dotspacemacs/init 'after + 'error-recover-prompt-for-style) + (ad-activate 'dotspacemacs/init)))) + +(defun dotspacemacs//test-dotspacemacs/layers () + "Tests for `dotspacemacs/layers'" + (insert + (format (concat "\n* Testing settings in dotspacemacs/layers " + "[[file:%s::dotspacemacs/layers][Show in File]]\n") + dotspacemacs-filepath)) + ;; protect global values of these variables + (let (dotspacemacs-configuration-layer-path dotspacemacs-configuration-layers + dotspacemacs-additional-packages dotspacemacs-excluded-packages + dotspacemacs-install-packages + (passed-tests 0) (total-tests 0)) + (load dotspacemacs-filepath) + (dotspacemacs/layers) + (spacemacs//test-list + 'stringp 'dotspacemacs-configuration-layer-path + "is a string" "path") + (spacemacs//test-list + 'file-directory-p 'dotspacemacs-configuration-layer-path + "exists in filesystem" "path") + (setq dotspacemacs-configuration-layers + (mapcar (lambda (l) (if (listp l) (car l) l)) + dotspacemacs-configuration-layers)) + (spacemacs//test-list + 'configuration-layer/get-layer-path + 'dotspacemacs-configuration-layers "can be found" "layer") + (insert (format + (concat "** RESULTS: " + "[[file:%s::dotspacemacs/layers][dotspacemacs/layers]] " + "passed %s out of %s tests\n") + dotspacemacs-filepath passed-tests total-tests)) + (equal passed-tests total-tests))) + +(defmacro dotspacemacs||let-init-test (&rest body) + "Macro to protect dotspacemacs variables" + `(let ((fpath dotspacemacs-filepath) + ,@(dotspacemacs/get-variable-list) + (passed-tests 0) (total-tests 0)) + (setq dotspacemacs-filepath fpath) + (load dotspacemacs-filepath) + ,@body)) + +(defun dotspacemacs//test-dotspacemacs/init () + "Tests for `dotspacemacs/init'" + (insert + (format (concat "\n* Testing settings in dotspacemacs/init " + "[[file:%s::dotspacemacs/init][Show in File]]\n") + dotspacemacs-filepath)) + (dotspacemacs||let-init-test + (dotspacemacs/init) + (spacemacs//test-var + (lambda (x) (or (member x '(vim emacs hybrid)) + (and (listp x) + (spacemacs/mplist-get x :variables)))) + 'dotspacemacs-editing-style + "is \'vim, \'emacs or \'hybrid or and list with `:variable' keyword") + (spacemacs//test-var + (lambda (x) (member x '(original cache nil))) + 'dotspacemacs-auto-save-file-location (concat "is one of \'original, " + "\'cache or nil")) + (spacemacs//test-var + (lambda (x) (member x '(all any current nil))) + 'dotspacemacs-highlight-delimiters "is one of \'all, \'any, \'current or nil") + (spacemacs//test-list + (lambda (x) + (let ((el (or (car-safe x) x)) + (list-size (cdr-safe x))) + (member el '(recents bookmarks projects todos agenda)))) + 'dotspacemacs-startup-lists (concat "includes \'recents, " + "\'bookmarks, \'todos, " + "\'agenda or \'projects")) + (spacemacs//test-list + (lambda (x) + (let ((el (or (car-safe x) x)) + (list-size (cdr-safe x))) + (or (null list-size)(numberp list-size)))) + 'dotspacemacs-startup-lists (concat "list size is a number")) + (spacemacs//test-var 'stringp 'dotspacemacs-leader-key "is a string") + (spacemacs//test-var 'stringp 'dotspacemacs-emacs-leader-key "is a string") + (spacemacs//test-var + (lambda (x) (or (null x) (stringp x))) + 'dotspacemacs-major-mode-leader-key "is a string or nil") + (spacemacs//test-var + (lambda (x) (or (null x) (stringp x))) + 'dotspacemacs-major-mode-emacs-leader-key "is a string or nil") + (spacemacs//test-var 'stringp 'dotspacemacs-emacs-command-key "is a string") + (insert (format + (concat "** RESULTS: " + "[[file:%s::dotspacemacs/init][dotspacemacs/init]] " + "passed %s out of %s tests\n") + dotspacemacs-filepath passed-tests total-tests)) + (equal passed-tests total-tests))) + +(defun dotspacemacs/test-dotfile (&optional hide-buffer) + "Test settings in dotfile for correctness. + Return non-nil if all the tests passed." + (interactive) + (configuration-layer/discover-layers) + (let ((min-version "0.0")) + ;; dotspacemacs-version not implemented yet + ;; (if (version< dotspacemacs-version min-version) + (if nil + (error (format (concat "error: dotspacemacs/test-dotfile requires " + "dotspacemacs-version %s") min-version)) + (with-current-buffer (get-buffer-create dotspacemacs-test-results-buffer) + (unless hide-buffer + (switch-to-buffer-other-window dotspacemacs-test-results-buffer)) + (org-mode) + (org-indent-mode) + (view-mode) + (when (bound-and-true-p flyspell-mode) + (flyspell-mode -1)) + (let (buffer-read-only) + (erase-buffer) + (insert (format "* Running tests on [[file:%s][%s]] (v%s)\n" + dotspacemacs-filepath dotspacemacs-filepath "0.0")) + ;; dotspacemacs-version not implemented yet + ;; (insert (format "* Running tests on %s (v%s)\n" dotspacemacs-filepath dotspacemacs-version)) + (prog1 + ;; execute all tests no matter what + (cl-reduce (lambda (x y) + (and (funcall y) x)) + '(dotspacemacs//test-dotspacemacs/layers + dotspacemacs//test-dotspacemacs/init) + :initial-value t) + (goto-char (point-min)))))))) + +(provide 'core-dotspacemacs) diff --git a/core/core-emacs-backports.el b/core/core-emacs-backports.el new file mode 100644 index 0000000..5c177ee --- /dev/null +++ b/core/core-emacs-backports.el @@ -0,0 +1,14 @@ +;;; core-emacs-backports.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; nothing for now + +(provide 'core-emacs-backports) diff --git a/core/core-fonts-support.el b/core/core-fonts-support.el new file mode 100644 index 0000000..ffeedb4 --- /dev/null +++ b/core/core-fonts-support.el @@ -0,0 +1,114 @@ +;;; core-fonts-support.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 +(require 'core-funcs) +(require 'core-spacemacs-buffer) + +(defvar spacemacs--diminished-minor-modes nil + "List of diminished modes to unicode or ascii values.") + +(defun spacemacs/set-default-font (plists) + "Set the font given the passed PLISTS. + +PLISTS has either the form (\"fontname\" :prop1 val1 :prop2 val2 ...) +or is a list of such. The first font that can be found will be used. + +The return value is nil if no font was found, truthy otherwise." + (unless (listp (car plists)) + (setq plists (list plists))) + (catch 'break + (dolist (plist plists) + (when (find-font (font-spec :name (car plist))) + (let* ((font (car plist)) + (props (cdr plist)) + (scale (plist-get props :powerline-scale)) + (font-props (spacemacs/mplist-remove + (spacemacs/mplist-remove props :powerline-scale) + :powerline-offset)) + (fontspec (apply 'font-spec :name font font-props))) + (spacemacs-buffer/message "Setting font \"%s\"..." font) + (set-frame-font fontspec nil t) + (push `(font . ,(frame-parameter nil 'font)) default-frame-alist) + (setq-default powerline-scale scale) + (setq-default powerline-height (spacemacs/compute-powerline-height)) + ;; fallback font for unicode characters used in spacemacs + (pcase system-type + (`gnu/linux + (setq fallback-font-name "NanumGothic") + (setq fallback-font-name2 "NanumGothic")) + (`darwin + (setq fallback-font-name "Arial Unicode MS") + (setq fallback-font-name2 "Arial Unicode MS")) + (`windows-nt + (setq fallback-font-name "MS Gothic") + (setq fallback-font-name2 "Lucida Sans Unicode")) + (`cygwin + (setq fallback-font-name "MS Gothic") + (setq fallback-font-name2 "Lucida Sans Unicode")) + (other + (setq fallback-font-name nil) + (setq fallback-font-name2 nil))) + (when (and fallback-font-name fallback-font-name2) + ;; remove any size or height properties in order to be able to + ;; scale the fallback fonts with the default one (for zoom-in/out + ;; for instance) + (let* ((fallback-props (spacemacs/mplist-remove + (spacemacs/mplist-remove font-props :size) + :height)) + (fallback-spec (apply 'font-spec + :name fallback-font-name + fallback-props)) + (fallback-spec2 (apply 'font-spec + :name fallback-font-name2 + fallback-props))) + ;; window numbers + (set-fontset-font "fontset-default" + '(#x2776 . #x2793) fallback-spec nil 'prepend) + ;; mode-line circled letters + (set-fontset-font "fontset-default" + '(#x24b6 . #x24fe) fallback-spec nil 'prepend) + ;; mode-line additional characters + (set-fontset-font "fontset-default" + '(#x2295 . #x22a1) fallback-spec nil 'prepend) + ;; new version lighter + (set-fontset-font "fontset-default" + '(#x2190 . #x2200) fallback-spec2 nil 'prepend)))) + (throw 'break t))) + nil)) + +(defun spacemacs/compute-powerline-height () + "Return an adjusted powerline height." + (let ((scale (if (and (boundp 'powerline-scale) powerline-scale) + powerline-scale 1))) + (truncate (* scale (frame-char-height))))) + +(defun spacemacs/set-font (&rest args) + "Deprecated function, display a warning message." + (spacemacs-buffer/warning (concat "spacemacs/set-font is deprecated. " + "Use the variable `dotspacemacs-default-font' " + "instead (see Font section in " + "~/.emacs.d/doc/DOCUMENTATION.org for more " + "info)."))) + +(defmacro spacemacs|diminish (mode &optional unicode ascii) + "Diminish MODE name in mode line to UNICODE or ASCII depending on the value +`dotspacemacs-mode-line-unicode-symbols'. +If ASCII is not provided then UNICODE is used instead. If neither are provided, +the mode will not show in the mode line." + `(let ((cell (assq ',mode spacemacs--diminished-minor-modes))) + (if cell + (setcdr cell '(,unicode ,ascii)) + (push '(,mode ,unicode ,ascii) spacemacs--diminished-minor-modes)))) + +(defmacro spacemacs|hide-lighter (mode) + "Diminish MODE name in mode line to LIGHTER." + `(eval-after-load 'diminish '(diminish ',mode))) + +(provide 'core-fonts-support) diff --git a/core/core-funcs.el b/core/core-funcs.el new file mode 100644 index 0000000..9f7334f --- /dev/null +++ b/core/core-funcs.el @@ -0,0 +1,385 @@ +;;; core-funcs.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar configuration-layer--protected-packages) +(defvar dotspacemacs-filepath) +(defvar spacemacs-repl-list '() + "List of all registered REPLs.") + +(defun spacemacs/system-is-mac () + (eq system-type 'darwin)) +(defun spacemacs/system-is-linux () + (eq system-type 'gnu/linux)) +(defun spacemacs/system-is-mswindows () + (eq system-type 'windows-nt)) + +(defun spacemacs/window-system-is-mac () + ;; ns is returned instead of mac on Emacs 25+ + (memq (window-system) '(mac ns))) + +(defun spacemacs/run-prog-mode-hooks () + "Runs `prog-mode-hook'. Useful for modes that don't derive from +`prog-mode' but should." + (run-hooks 'prog-mode-hook)) + +(defun spacemacs/run-text-mode-hooks () + "Runs `text-mode-hook'. Useful for modes that don't derive from +`text-mode' but should." + (run-hooks 'text-mode-hook)) + +(defun spacemacs//get-package-directory (pkg) + "Return the directory of PKG. Return nil if not found." + (let ((elpa-dir (file-name-as-directory package-user-dir))) + (when (file-exists-p elpa-dir) + (let* ((pkg-match (concat "\\`" (symbol-name pkg) "-[0-9]+")) + (dir (car (directory-files elpa-dir 'full pkg-match)))) + (when dir (file-name-as-directory dir)))))) + +(defun spacemacs/mplist-get (plist prop) + "Get the values associated to PROP in PLIST, a modified plist. + +A modified plist is one where keys are keywords and values are +all non-keywords elements that follow it. + +If there are multiple properties with the same keyword, only the first property +and its values is returned. + +Currently this function infloops when the list is circular." + (let ((tail plist) + result) + (while (and (consp tail) (not (eq prop (car tail)))) + (pop tail)) + ;; pop the found keyword + (pop tail) + (while (and (consp tail) (not (keywordp (car tail)))) + (push (pop tail) result)) + (nreverse result))) + +(defun spacemacs/mplist-remove (plist prop) + "Return a copy of a modified PLIST without PROP and its values. + +If there are multiple properties with the same keyword, only the first property +and its values are removed." + (let ((tail plist) + result) + (while (and (consp tail) (not (eq prop (car tail)))) + (push (pop tail) result)) + (when (eq prop (car tail)) + (pop tail) + (while (and (consp tail) (not (keywordp (car tail)))) + (pop tail))) + (while (consp tail) + (push (pop tail) result)) + (nreverse result))) + +;; Originally based on http://stackoverflow.com/questions/2321904/elisp-how-to-save-data-in-a-file +(defun spacemacs/dump-vars-to-file (varlist filename) + "simplistic dumping of variables in VARLIST to a file FILENAME" + (with-temp-file filename + (spacemacs/dump varlist (current-buffer)) + (make-directory (file-name-directory filename) t))) + +;; From http://stackoverflow.com/questions/2321904/elisp-how-to-save-data-in-a-file +(defun spacemacs/dump (varlist buffer) + "insert into buffer the setq statement to recreate the variables in VARLIST" + (cl-loop for var in varlist do + (print (list 'setq var (list 'quote (symbol-value var))) + buffer))) + +(defvar spacemacs--init-redisplay-count 0 + "The number of calls to `redisplay'") +(defun spacemacs//redisplay () + "`redisplay' wrapper." + (setq spacemacs--init-redisplay-count (1+ spacemacs--init-redisplay-count)) + (redisplay)) + +(defun spacemacs//create-key-binding-form (props func) + "Helper which returns a from to bind FUNC to a key according to PROPS. + +Supported properties: + +`:evil-leader STRING' + One or several key sequence strings to be set with `spacemacs/set-leader-keys . + +`:evil-leader-for-mode CONS CELL' + One or several cons cells (MODE . KEY) where MODE is a major-mode symbol + and KEY is a key sequence string to be set with + `spacemacs/set-leader-keys-for-major-mode'. + +`:global-key STRING' + One or several key sequence strings to be set with `global-set-key'. + +`:define-key CONS CELL' + One or several cons cells (MAP . KEY) where MAP is a mode map and KEY is a + key sequence string to be set with `define-key'. " + (let ((evil-leader (spacemacs/mplist-get props :evil-leader)) + (evil-leader-for-mode (spacemacs/mplist-get props :evil-leader-for-mode)) + (global-key (spacemacs/mplist-get props :global-key)) + (def-key (spacemacs/mplist-get props :define-key))) + (append + (when evil-leader + `((dolist (key ',evil-leader) + (spacemacs/set-leader-keys key ',func)))) + (when evil-leader-for-mode + `((dolist (val ',evil-leader-for-mode) + (spacemacs/set-leader-keys-for-major-mode + (car val) (cdr val) ',func)))) + (when global-key + `((dolist (key ',global-key) + (global-set-key (kbd key) ',func)))) + (when def-key + `((dolist (val ',def-key) + (define-key (eval (car val)) (kbd (cdr val)) ',func))))))) + +(defun spacemacs/prettify-org-buffer () + "Apply visual enchantments to the current buffer. +The buffer's major mode should be `org-mode'." + (interactive) + (unless (derived-mode-p 'org-mode) + (user-error "org-mode should be enabled in the current buffer.")) + + ;; Make ~SPC ,~ work, reference: + ;; http://stackoverflow.com/questions/24169333/how-can-i-emphasize-or-verbatim-quote-a-comma-in-org-mode + (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n") + (org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components) + (setq-local org-emphasis-alist '(("*" bold) + ("/" italic) + ("_" underline) + ("=" org-verbatim verbatim) + ("~" org-kbd) + ("+" + (:strike-through t)))) + (when (require 'space-doc nil t) + (space-doc-mode))) + +(defun spacemacs/view-org-file (file &optional anchor-text expand-scope) + "Open org file and apply visual enchantments. +FILE is the org file to be opened. +If ANCHOR-TEXT is `nil' then run `re-search-forward' with ^ (beginning-of-line). +If ANCHOR-TEXT is a GitHub style anchor then find a corresponding header. +If ANCHOR-TEXT isn't a GitHub style anchor then run `re-search-forward' with +ANCHOR-TEXT. +If EXPAND-SCOPE is `subtree' then run `outline-show-subtree' at the matched line. +If EXPAND-SCOPE is `all' then run `outline-show-all' at the matched line." + (interactive) + (find-file file) + (spacemacs/prettify-org-buffer) + (goto-char (point-min)) + (when anchor-text + ;; If `anchor-text' is GitHub style link. + (if (string-prefix-p "#" anchor-text) + ;; If the toc-org package is loaded. + (if (configuration-layer/package-usedp 'toc-org) + ;; For each heading. Search the heading that corresponds + ;; to `anchor-text'. + (while (and (re-search-forward "^[\\*]+\s\\(.*\\).*$" nil t) + (not (string= (toc-org-hrefify-gh (match-string 1)) + anchor-text)))) + ;; This is not a problem because without the space-doc package + ;; those links will be opened in the browser. + (message (format (concat "Can't follow the GitHub style anchor: '%s' " + "without the org layer.") anchor-text))) + (re-search-forward anchor-text))) + (beginning-of-line) + (cond + ((eq expand-scope 'subtree) + (outline-show-subtree)) + ((eq expand-scope 'all) + (outline-show-all)) + (t nil))) + +(defun spacemacs//test-var (pred var test-desc) + "Test PRED against VAR and print test result, incrementing +passed-tests and total-tests." + (let ((var-name (symbol-name var)) + (var-val (symbol-value var))) + (when (boundp 'total-tests) (setq total-tests (1+ total-tests))) + (insert (format "** TEST: [[file:%s::%s][%s]] %s\n" + dotspacemacs-filepath var-name var-name test-desc)) + (if (funcall pred var-val) + (progn + (when (boundp 'passed-tests) (setq passed-tests (1+ passed-tests))) + (insert (format "*** PASS: %s\n" var-val))) + (insert (propertize (format "*** FAIL: %s\n" var-val) + 'font-lock-face 'font-lock-warning-face))))) + +(defun spacemacs//test-list (pred varlist test-desc &optional element-desc) + "Test PRED against each element of VARLIST and print test +result, incrementing passed-tests and total-tests." + (let ((varlist-name (symbol-name varlist)) + (varlist-val (symbol-value varlist))) + (if element-desc + (insert (format "** TEST: Each %s in [[file:%s::%s][%s]] %s\n" + element-desc dotspacemacs-filepath varlist-name + varlist-name test-desc)) + (insert (format "** TEST: Each element of [[file:%s::%s][%s]] %s\n" + dotspacemacs-filepath varlist-name varlist-name + test-desc))) + (dolist (var varlist-val) + (when (boundp 'total-tests) (setq total-tests (1+ total-tests))) + (if (funcall pred var) + (progn + (when (boundp 'passed-tests) (setq passed-tests (1+ passed-tests))) + (insert (format "*** PASS: %s\n" var))) + (insert (propertize (format "*** FAIL: %s\n" var) 'font-lock-face 'font-lock-warning-face)))))) + +;; hide mode line +;; from http://bzg.fr/emacs-hide-mode-line.html +(defvar-local hidden-mode-line-mode nil) +(defvar-local hide-mode-line nil) +(define-minor-mode hidden-mode-line-mode + "Minor mode to hide the mode-line in the current buffer." + :init-value nil + :global t + :variable hidden-mode-line-mode + :group 'editing-basics + (if hidden-mode-line-mode + (setq hide-mode-line mode-line-format + mode-line-format nil) + (setq mode-line-format hide-mode-line + hide-mode-line nil)) + (force-mode-line-update) + ;; Apparently force-mode-line-update is not always enough to + ;; redisplay the mode-line + (redraw-display) + (when (and (called-interactively-p 'interactive) + hidden-mode-line-mode) + (run-with-idle-timer + 0 nil 'message + (concat "Hidden Mode Line Mode enabled. " + "Use M-x hidden-mode-line-mode to make the mode-line appear.")))) + +(defun spacemacs/recompile-elpa () + "Recompile packages in elpa directory. Useful if you switch +Emacs versions." + (interactive) + (byte-recompile-directory package-user-dir nil t)) + +(defun spacemacs/register-repl (feature repl-func &optional tag) + "Register REPL-FUNC to the global list of REPLs SPACEMACS-REPL-LIST. +FEATURE will be loaded before running the REPL, in case it is not already +loaded. If TAG is non-nil, it will be used as the string to show in the helm +buffer." + (push `(,(or tag (symbol-name repl-func)) + . (,feature . ,repl-func)) + spacemacs-repl-list)) + +;; http://stackoverflow.com/questions/11847547/emacs-regexp-count-occurrences +(defun spacemacs/how-many-str (regexp str) + (loop with start = 0 + for count from 0 + while (string-match regexp str start) + do (setq start (match-end 0)) + finally return count)) + +;; from https://github.com/cofi/dotfiles/blob/master/emacs.d/config/cofi-util.el#L38 +(defun spacemacs/add-to-hooks (fun hooks) + "Add function to hooks" + (dolist (hook hooks) + (add-hook hook fun))) + +(defun spacemacs/add-all-to-hook (hook &rest funs) + "Add functions to hook." + (spacemacs/add-to-hook hook funs)) + +(defun spacemacs/add-to-hook (hook funs) + "Add list of functions to hook." + (dolist (fun funs) + (add-hook hook fun))) + +(defun spacemacs/echo (msg &rest args) + "Display MSG in echo-area without logging it in *Messages* buffer." + (interactive) + (let ((message-log-max nil)) + (apply 'message msg args))) + +(defun spacemacs/alternate-buffer (&optional window) + "Switch back and forth between current and last buffer in the +current window." + (interactive) + (let ((current-buffer (window-buffer window)) + (buffer-predicate + (frame-parameter (window-frame window) 'buffer-predicate))) + ;; switch to first buffer previously shown in this window that matches + ;; frame-parameter `buffer-predicate' + (switch-to-buffer + (or (cl-find-if (lambda (buffer) + (and (not (eq buffer current-buffer)) + (or (null buffer-predicate) + (funcall buffer-predicate buffer)))) + (mapcar #'car (window-prev-buffers window))) + ;; `other-buffer' honors `buffer-predicate' so no need to filter + (other-buffer current-buffer t))))) + +(defun spacemacs/comint-clear-buffer () + (interactive) + (let ((comint-buffer-maximum-size 0)) + (comint-truncate-buffer))) + + +;; Generalized next-error system ("gne") + +(defun spacemacs/error-delegate () + "Decide which error API to delegate to. + +Delegates to flycheck if it is enabled and the next-error buffer +is not visible. Otherwise delegates to regular Emacs next-error." + (if (and (bound-and-true-p flycheck-mode) + (let ((buf (ignore-errors (next-error-find-buffer)))) + (not (and buf (get-buffer-window buf))))) + 'flycheck + 'emacs)) + +(defun spacemacs/next-error (&optional n reset) + "Dispatch to flycheck or standard emacs error." + (interactive "P") + (let ((sys (spacemacs/error-delegate))) + (cond + ((eq 'flycheck sys) (call-interactively 'flycheck-next-error)) + ((eq 'emacs sys) (call-interactively 'next-error))))) + +(defun spacemacs/previous-error (&optional n reset) + "Dispatch to flycheck or standard emacs error." + (interactive "P") + (let ((sys (spacemacs/error-delegate))) + (cond + ((eq 'flycheck sys) (call-interactively 'flycheck-previous-error)) + ((eq 'emacs sys) (call-interactively 'previous-error))))) + +(defvar-local spacemacs--gne-min-line nil + "The first line in the buffer that is a valid result.") +(defvar-local spacemacs--gne-max-line nil + "The last line in the buffer that is a valid result.") +(defvar-local spacemacs--gne-cur-line 0 + "The current line in the buffer. (It is problematic to use +point for this.)") +(defvar-local spacemacs--gne-line-func nil + "The function to call to visit the result on a line.") + +(defun spacemacs/gne-next (num reset) + "A generalized next-error function. This function can be used +as `next-error-function' in any buffer that conforms to the +Spacemacs generalized next-error API. + +The variables `spacemacs--gne-min-line', +`spacemacs--gne-max-line', and `spacemacs--line-func' must be +set." + (when reset (setq spacemacs--gne-cur-line + spacemacs--gne-min-line)) + (setq spacemacs--gne-cur-line + (min spacemacs--gne-max-line + (max spacemacs--gne-min-line + (+ num spacemacs--gne-cur-line)))) + (goto-line spacemacs--gne-cur-line) + (funcall spacemacs--gne-line-func + (buffer-substring (point-at-bol) (point-at-eol)))) + +(provide 'core-funcs) diff --git a/core/core-jump.el b/core/core-jump.el new file mode 100644 index 0000000..48676d2 --- /dev/null +++ b/core/core-jump.el @@ -0,0 +1,66 @@ +;;; core-jump.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar spacemacs-default-jump-handlers '() + "List of jump handlers available in every mode.") + +(defvar-local spacemacs-jump-handlers '() + "List of jump handlers local to this buffer.") + +(defmacro spacemacs|define-jump-handlers (mode &rest handlers) + "Defines jump handlers for the given MODE. +This defines a variable `spacemacs-jump-handlers-MODE' to which +handlers can be added, and a function added to MODE-hook which +sets `spacemacs-jump-handlers' in buffers of that mode." + (let ((mode-hook (intern (format "%S-hook" mode))) + (func (intern (format "spacemacs//init-jump-handlers-%S" mode))) + (handlers-list (intern (format "spacemacs-jump-handlers-%S" mode)))) + `(progn + (defvar ,handlers-list ',handlers + ,(format (concat "List of mode-specific jump handlers for %S. " + "These take priority over those in " + "`spacemacs-default-jump-handlers'.") + mode)) + (defun ,func () + (setq spacemacs-jump-handlers + (append ,handlers-list + spacemacs-default-jump-handlers))) + (add-hook ',mode-hook ',func) + (with-eval-after-load 'bind-map + (spacemacs/set-leader-keys-for-major-mode ',mode + "gg" 'spacemacs/jump-to-definition))))) + +(defun spacemacs/jump-to-definition () + (interactive) + (catch 'done + (let ((old-buffer (current-buffer)) + (old-point (point))) + (dolist (-handler spacemacs-jump-handlers) + (let ((handler (if (listp -handler) (car -handler) -handler)) + (async (when (listp -handler) + (plist-get (cdr -handler) :async)))) + (ignore-errors + (call-interactively handler)) + (when (or async + (not (eq old-point (point))) + (not (equal old-buffer (current-buffer)))) + (throw 'done t))))) + (message "No jump handler was able to find this symbol."))) + +;; Set the `:jump' property manually instead of just using `evil-define-motion' +;; in an `eval-after-load' macro invocation because doing that prevents +;; `describe-function' from correctly finding the source. +;; +;; See discussion on https://github.com/syl20bnr/spacemacs/pull/6771 +(with-eval-after-load 'evil + (evil-set-command-property 'spacemacs/jump-to-definition :jump t)) + +(provide 'core-jump) diff --git a/core/core-keybindings.el b/core/core-keybindings.el new file mode 100644 index 0000000..fc3cf6d --- /dev/null +++ b/core/core-keybindings.el @@ -0,0 +1,177 @@ +;;; core-keybindings.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(require 'core-funcs) + +(defvar spacemacs/prefix-titles nil + "alist for mapping command prefixes to long names.") + +(defvar spacemacs-default-map (make-sparse-keymap) + "Base keymap for all spacemacs leader key commands.") + +(defun spacemacs/translate-C-i (_) + "If `dotspacemacs-distinguish-gui-tab' is non nil, the raw key +sequence does not include or , and we are in the +gui, translate to [C-i]. Otherwise, [9] (TAB)." + (interactive) + (if (and (not (cl-position 'tab (this-single-command-raw-keys))) + (not (cl-position 'kp-tab (this-single-command-raw-keys))) + dotspacemacs-distinguish-gui-tab + (display-graphic-p)) + [C-i] [?\C-i])) +(define-key key-translation-map [?\C-i] 'spacemacs/translate-C-i) + +;; (defun spacemacs/translate-C-m (_) +;; "If `dotspacemacs-distinguish-gui-ret' is non nil, the raw key +;; sequence does not include , and we are in the gui, translate +;; to [C-m]. Otherwise, [9] (TAB)." +;; (interactive) +;; (if (and +;; (not (cl-position 'return (this-single-command-raw-keys))) +;; (not (cl-position 'kp-enter (this-single-command-raw-keys))) +;; dotspacemacs-distinguish-gui-ret +;; (display-graphic-p)) +;; [C-m] [?\C-m])) +;; (define-key key-translation-map [?\C-m] 'spacemacs/translate-C-m) + +(defun spacemacs/declare-prefix (prefix name &optional long-name) + "Declare a prefix PREFIX. PREFIX is a string describing a key +sequence. NAME is a string used as the prefix command. +LONG-NAME if given is stored in `spacemacs/prefix-titles'." + (let* ((command name) + (full-prefix (concat dotspacemacs-leader-key " " prefix)) + (full-prefix-emacs (concat dotspacemacs-emacs-leader-key " " prefix)) + (full-prefix-lst (listify-key-sequence (kbd full-prefix))) + (full-prefix-emacs-lst (listify-key-sequence + (kbd full-prefix-emacs)))) + ;; define the prefix command only if it does not already exist + (unless long-name (setq long-name name)) + (which-key-declare-prefixes + full-prefix-emacs (cons name long-name) + full-prefix (cons name long-name)))) + +(defun spacemacs/declare-prefix-for-mode (mode prefix name &optional long-name) + "Declare a prefix PREFIX. MODE is the mode in which this prefix command should +be added. PREFIX is a string describing a key sequence. NAME is a symbol name +used as the prefix command." + (let ((command (intern (concat (symbol-name mode) name))) + (full-prefix (concat dotspacemacs-leader-key " " prefix)) + (full-prefix-emacs (concat dotspacemacs-emacs-leader-key " " prefix)) + (is-major-mode-prefix (string-prefix-p "m" prefix)) + (major-mode-prefix (concat dotspacemacs-major-mode-leader-key + " " (substring prefix 1))) + (major-mode-prefix-emacs + (concat dotspacemacs-major-mode-emacs-leader-key + " " (substring prefix 1)))) + (unless long-name (setq long-name name)) + (let ((prefix-name (cons name long-name))) + (which-key-declare-prefixes-for-mode mode + full-prefix-emacs prefix-name + full-prefix prefix-name) + (when (and is-major-mode-prefix dotspacemacs-major-mode-leader-key) + (which-key-declare-prefixes-for-mode mode major-mode-prefix prefix-name)) + (when (and is-major-mode-prefix dotspacemacs-major-mode-emacs-leader-key) + (which-key-declare-prefixes-for-mode + mode major-mode-prefix-emacs prefix-name))))) + +(defun spacemacs/set-leader-keys (key def &rest bindings) + "Add KEY and DEF as key bindings under +`dotspacemacs-leader-key' and `dotspacemacs-emacs-leader-key'. +KEY should be a string suitable for passing to `kbd', and it +should not include the leaders. DEF is most likely a quoted +command. See `define-key' for more information about the possible +choices for DEF. This function simply uses `define-key' to add +the bindings. + +For convenience, this function will accept additional KEY DEF +pairs. For example, + +\(spacemacs/set-leader-keys + \"a\" 'command1 + \"C-c\" 'command2 + \"bb\" 'command3\)" + (while key + (define-key spacemacs-default-map (kbd key) def) + (setq key (pop bindings) def (pop bindings)))) +(put 'spacemacs/set-leader-keys 'lisp-indent-function 'defun) + +(defalias 'evil-leader/set-key 'spacemacs/set-leader-keys) + +(defun spacemacs//acceptable-leader-p (key) + "Return t if key is a string and non-empty." + (and (stringp key) (not (string= key "")))) + +(defun spacemacs//init-leader-mode-map (mode map &optional minor) + "Check for MAP-prefix. If it doesn't exist yet, use `bind-map' +to create it and bind it to `dotspacemacs-major-mode-leader-key' +and `dotspacemacs-major-mode-emacs-leader-key'. If MODE is a +minor-mode, the third argument should be non nil." + (let* ((prefix (intern (format "%s-prefix" map))) + (leader1 (when (spacemacs//acceptable-leader-p + dotspacemacs-major-mode-leader-key) + dotspacemacs-major-mode-leader-key)) + (leader2 (when (spacemacs//acceptable-leader-p + dotspacemacs-leader-key) + (concat dotspacemacs-leader-key + (unless minor " m")))) + (emacs-leader1 (when (spacemacs//acceptable-leader-p + dotspacemacs-major-mode-emacs-leader-key) + dotspacemacs-major-mode-emacs-leader-key)) + (emacs-leader2 (when (spacemacs//acceptable-leader-p + dotspacemacs-emacs-leader-key) + (concat dotspacemacs-emacs-leader-key + (unless minor " m")))) + (leaders (delq nil (list leader1 leader2))) + (emacs-leaders (delq nil (list emacs-leader1 emacs-leader2)))) + (or (boundp prefix) + (progn + (eval + `(bind-map ,map + :prefix-cmd ,prefix + ,(if minor :minor-modes :major-modes) (,mode) + :keys ,emacs-leaders + :evil-keys ,leaders + :evil-states (normal motion visual evilified))) + (boundp prefix))))) + +(defun spacemacs/set-leader-keys-for-major-mode (mode key def &rest bindings) + "Add KEY and DEF as key bindings under +`dotspacemacs-major-mode-leader-key' and +`dotspacemacs-major-mode-emacs-leader-key' for the major-mode +MODE. MODE should be a quoted symbol corresponding to a valid +major mode. The rest of the arguments are treated exactly like +they are in `spacemacs/set-leader-keys'." + (let* ((map (intern (format "spacemacs-%s-map" mode)))) + (when (spacemacs//init-leader-mode-map mode map) + (while key + (define-key (symbol-value map) (kbd key) def) + (setq key (pop bindings) def (pop bindings)))))) +(put 'spacemacs/set-leader-keys-for-major-mode 'lisp-indent-function 'defun) + +(defalias + 'evil-leader/set-key-for-mode + 'spacemacs/set-leader-keys-for-major-mode) + +(defun spacemacs/set-leader-keys-for-minor-mode (mode key def &rest bindings) + "Add KEY and DEF as key bindings under +`dotspacemacs-major-mode-leader-key' and +`dotspacemacs-major-mode-emacs-leader-key' for the minor-mode +MODE. MODE should be a quoted symbol corresponding to a valid +minor mode. The rest of the arguments are treated exactly like +they are in `spacemacs/set-leader-keys'." + (let* ((map (intern (format "spacemacs-%s-map" mode)))) + (when (spacemacs//init-leader-mode-map mode map t) + (while key + (define-key (symbol-value map) (kbd key) def) + (setq key (pop bindings) def (pop bindings)))))) +(put 'spacemacs/set-leader-keys-for-minor-mode 'lisp-indent-function 'defun) + +(provide 'core-keybindings) diff --git a/core/core-load-paths.el b/core/core-load-paths.el new file mode 100644 index 0000000..0c752b3 --- /dev/null +++ b/core/core-load-paths.el @@ -0,0 +1,77 @@ +;;; core-load-paths.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 +(defun add-to-load-path (dir) (add-to-list 'load-path dir)) + +(defun add-to-load-path-if-exists (dir) + "If DIR exists in the file system, add it to `load-path'." + (when (file-exists-p dir) + (add-to-load-path dir))) + +;; paths +(defvar spacemacs-start-directory + user-emacs-directory + "Spacemacs start directory.") +(defconst spacemacs-core-directory + (expand-file-name (concat spacemacs-start-directory "core/")) + "Spacemacs core directory.") +(defconst spacemacs-info-directory + (expand-file-name (concat spacemacs-core-directory "info/")) + "Spacemacs info files directory") +(defconst spacemacs-release-notes-directory + (expand-file-name (concat spacemacs-info-directory "release-notes/")) + "Spacemacs release notes directory") +(defconst spacemacs-banner-directory + (expand-file-name (concat spacemacs-core-directory "banners/")) + "Spacemacs banners directory.") +(defconst spacemacs-banner-official-png + (expand-file-name (concat spacemacs-banner-directory "img/spacemacs.png")) + "Spacemacs official banner image.") +(defconst spacemacs-badge-official-png + (expand-file-name (concat spacemacs-banner-directory + "img/spacemacs-badge.png")) + "Spacemacs official badge image.") +(defconst spacemacs-purple-heart-png + (expand-file-name (concat spacemacs-banner-directory "img/heart.png")) + "Purple heart emoji.") +(defconst spacemacs-cache-directory + (expand-file-name (concat user-emacs-directory ".cache/")) + "Spacemacs storage area for persistent files") +(defconst spacemacs-auto-save-directory + (expand-file-name (concat spacemacs-cache-directory "auto-save/")) + "Spacemacs auto-save directory") +(defconst spacemacs-docs-directory + (expand-file-name (concat spacemacs-start-directory "doc/")) + "Spacemacs documentation directory.") +(defconst spacemacs-news-directory + (expand-file-name (concat spacemacs-start-directory "news/")) + "Spacemacs News directory.") +(defconst spacemacs-assets-directory + (expand-file-name (concat spacemacs-start-directory "assets/")) + "Spacemacs assets directory.") +(defconst spacemacs-test-directory + (expand-file-name (concat spacemacs-start-directory "tests/")) + "Spacemacs tests directory.") + +(defconst user-home-directory + (expand-file-name "~/") + "User home directory (~/).") +(defconst pcache-directory + (concat spacemacs-cache-directory "pcache/")) +(unless (file-exists-p spacemacs-cache-directory) + (make-directory spacemacs-cache-directory)) + +;; load paths +(mapc 'add-to-load-path + `( + ,spacemacs-core-directory + ,(concat spacemacs-core-directory "libs/") + ,(concat spacemacs-core-directory "aprilfool/") + )) diff --git a/core/core-micro-state.el b/core/core-micro-state.el new file mode 100644 index 0000000..98c34b8 --- /dev/null +++ b/core/core-micro-state.el @@ -0,0 +1,272 @@ +;;; -*- lexical-binding: t -*- +;;; core-micro-state.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs/defface-micro-state-faces () + "Define faces for micro-states." + (let* ((hname 'spacemacs-micro-state-header-face) + (bname 'spacemacs-micro-state-binding-face) + (box '(:line-width -1 :color (plist-get (face-attribute + 'mode-line :box) :color))) + (err (face-attribute 'error :foreground))) + (eval `(defface ,hname '((t ())) + "Face for micro-state header in echo area. +The header is the name of the micro-state." + :group 'spacemacs)) + (set-face-attribute hname nil + :background "DarkGoldenrod2" + :foreground "black" + :bold t + :box box) + (eval `(defface ,bname '((t ())) + "Face for micro-state key binding in echo area. +Characters enclosed in `[]' will have this face applied to them." + :group 'spacemacs)) + (set-face-attribute bname nil + :foreground err + :bold t))) +(spacemacs/defface-micro-state-faces) +(add-hook 'spacemacs-post-theme-change-hook + 'spacemacs/defface-micro-state-faces) + +(defun spacemacs//micro-state-set-minibuffer-height (str) + "Set the max mini windows size given a string STR." + (let ((line-count (1+ (spacemacs/how-many-str "\n" str)))) + (when (and (> line-count max-mini-window-height) + (> line-count 10)) + (setq max-mini-window-height line-count)))) + +(defmacro spacemacs|define-micro-state (name &rest props) + "Define a micro-state called NAME. + +NAME is a symbol. + +Available PROPS: + +`:on-enter SEXP' + Evaluate SEXP when the micro-state is switched on. + +`:on-exit SEXP' + Evaluate SEXP when leaving the micro-state. + +`:doc STRING or SEXP' + A STRING or a SEXP that evaluates to a string. + +`:use-minibuffer BOOLEAN' + If non nil then the minibuffer is used to display the documenation + strings. Default is nil. + +`:disable-evil-leader BOOLEAN' + If non nil then the evil leader has no effect when the micro state + is active. Default to nil. + +`:persistent BOOLEAN' + If BOOLEAN is non nil then the micro-state never exits. A binding + with an explicitly set `exit t' property is required. Default is nil. + +`:execute-binding-on-enter BOOLEAN' + If BOOLEAN is non nil then execute the micro-state command bound to + to the pressed key that started the micro-state. + +`:bindings EXPRESSIONS' + One or several EXPRESSIONS with the form + (STRING1 SYMBOL1 :doc STRING + :pre SEXP + :post SEXP + :exit SYMBOL) + where: + - STRING1 is a key to be bound to the function or key map SYMBOL1. + - :doc STRING or SEXP is a STRING or an SEXP that evalutes + to a string + - :pre is an SEXP evaluated before the bound action + - :post is an SEXP evaluated after the bound action + - :exit SYMBOL or SEXP, if non nil then pressing this key will + leave the micro-state (default is nil). + Important note: due to inner working of transient-maps in Emacs + the `:exit' keyword is evaluate *before* the actual execution + of the bound command. + +All properties supported by `spacemacs//create-key-binding-form' can be +used." + (declare (indent 1)) + (let* ((func (spacemacs//micro-state-func-name name)) + (doc (spacemacs/mplist-get props :doc)) + (persistent (plist-get props :persistent)) + (disable-leader (plist-get props :disable-evil-leader)) + (msg-func (if (plist-get props :use-minibuffer) + 'message + 'lv-message)) + (exec-binding (plist-get props :execute-binding-on-enter)) + (on-enter (spacemacs/mplist-get props :on-enter)) + (on-exit (spacemacs/mplist-get props :on-exit)) + (bindings (spacemacs/mplist-get props :bindings)) + (wrappers (spacemacs//micro-state-create-wrappers + name doc msg-func disable-leader bindings)) + (keymap-body (spacemacs//micro-state-fill-map-sexps wrappers)) + (bindkeys (spacemacs//create-key-binding-form props func))) + `(progn (defun ,func () + ,(format "%S micro-state." name) + (interactive) + ,@on-enter + ,(when exec-binding + (spacemacs//micro-state-auto-execute bindings)) + (let ((doc ,@doc)) + (when doc + (spacemacs//micro-state-set-minibuffer-height doc) + (apply ',msg-func (list (spacemacs//micro-state-propertize-doc + (format "%S: %s" ',name doc)))))) + (,(if (version< emacs-version "24.4") + 'set-temporary-overlay-map + 'set-transient-map) + (let ((map (make-sparse-keymap))) + ,@keymap-body map) ',(spacemacs//micro-state-create-exit-func + name wrappers persistent on-exit))) + ,@bindkeys))) + +(defun spacemacs//micro-state-func-name (name) + "Return the name of the micro-state function." + (intern (format "spacemacs/%S-micro-state" name))) + +(defun spacemacs//micro-state-auto-execute (bindings) + "Auto execute the binding corresponding to `this-command-keys'." + `(let* ((key (substring (this-command-keys) + (1- (length (this-command-keys))))) + (binding (assoc key ',bindings))) + (when binding + (call-interactively (cadr binding))))) + +(defun spacemacs//micro-state-create-wrappers + (name doc msg-func disable-leader bindings) + "Return an alist (key wrapper) for each binding in BINDINGS." + (mapcar (lambda (x) (spacemacs//micro-state-create-wrapper + name doc msg-func x)) + (append bindings + ;; force SPC to quit the micro-state to avoid a edge case + ;; with evil-leader + (list `(,dotspacemacs-leader-key + ,(unless disable-leader 'spacemacs-default-map) + :exit t))))) + +(defun spacemacs//micro-state-create-wrapper (name default-doc msg-func binding) + "Create a wrapper of FUNC and return a tuple (key wrapper BINDING)." + (let* ((key (car binding)) + (wrapped (cadr binding)) + (binding-doc (spacemacs/mplist-get binding :doc)) + (binding-pre (spacemacs/mplist-get binding :pre)) + (binding-post (spacemacs/mplist-get binding :post)) + (wrapper-name (intern (format "spacemacs//%S-%S-%s" name wrapped key))) + (doc-body + `((let ((bdoc ,@binding-doc) + (defdoc ,@default-doc)) + (cond + (bdoc + (apply ',msg-func + (list (spacemacs//micro-state-propertize-doc + (format "%S: %s" ',name bdoc)))) + bdoc) + ((and defdoc + ',wrapped + (not (plist-get ',binding :exit))) + (spacemacs//micro-state-set-minibuffer-height defdoc) + (apply ',msg-func + (list (spacemacs//micro-state-propertize-doc + (format "%S: %s" ',name defdoc)))) + defdoc))))) + (wrapper-func + (if (and (boundp wrapped) + (eval `(keymapp ,wrapped))) + wrapped + `(defun ,wrapper-name () + "Auto-generated function" + (interactive) + ,@binding-pre + (let ((throwp t)) + (catch 'exit + (when (fboundp ',wrapped) + (setq this-command ',wrapped) + (call-interactively ',wrapped) + (setq last-command ',wrapped)) + (setq throwp nil)) + ,@binding-post + (when throwp (throw 'exit nil))) + (when ,@doc-body + (spacemacs//micro-state-set-minibuffer-height ,@doc-body) + ,@doc-body))))) + (append (list (car binding) (eval wrapper-func)) binding))) + +(defun spacemacs//micro-state-fill-map-sexps (wrappers) + "Return a list of `define-key' sexp to fill the micro-state temporary map." + (mapcar (lambda (x) `(define-key map ,(kbd (car x)) ',(cadr x))) + wrappers)) + +(defun spacemacs//micro-state-create-exit-func + (name wrappers persistent on-exit) + "Return a function to execute when leaving the micro-state. + +The returned function returns nil if the executed command exits the +micro-state." + (let ((func (intern (format "spacemacs//%s-on-exit" name)))) + (eval `(defun ,func () + "Function executed after each micro-state command." + (let* ((cur-wrapper (spacemacs//get-current-wrapper + ',name ',wrappers)) + (exitp (if cur-wrapper (plist-get cur-wrapper :exit) + ,(not persistent)))) + (when (listp exitp) (setq exitp (eval exitp))) + (when exitp ,@on-exit (spacemacs//micro-state-close-window)) + (not exitp)))))) + +(defun spacemacs//get-current-wrapper (name wrappers) + "Return the wrapper being executed. +Return nil if no wrapper is being executed (i.e. an unbound key has been +pressed)." + (let ((micro-state-fun (spacemacs//micro-state-func-name name))) + (catch 'found + (dolist (wrapper wrappers) + (let ((key (car wrapper)) + (func (cadr wrapper))) + (if (and (or (eq this-command micro-state-fun) + (eq this-command func)) + (equal (this-command-keys) (kbd key))) + (throw 'found wrapper)))) + nil))) + +(defun spacemacs//micro-state-propertize-doc (doc) + "Return a propertized doc string from DOC." + (when (string-match "^\\(.+?\\):\\([[:ascii:]]*\\)$" doc) + (let* ((header (match-string 1 doc)) + (pheader (when header + (propertize (concat " " header " ") + 'face 'spacemacs-micro-state-header-face))) + (tail (spacemacs//micro-state-propertize-doc-rec + (match-string 2 doc)))) + (concat pheader tail)))) + +(defun spacemacs//micro-state-propertize-doc-rec (doc) + "Recursively propertize keys" + (if (string-match "^\\([[:ascii:]]*?\\)\\(\\[.+?\\]\\)\\([[:ascii:]]*\\)$" doc) + (let* ((head (match-string 1 doc)) + (key (match-string 2 doc)) + (pkey (when key + (propertize key 'face 'spacemacs-micro-state-binding-face))) + (tail (spacemacs//micro-state-propertize-doc-rec + (match-string 3 doc)))) + (concat head pkey tail)) + doc)) + +(defun spacemacs//micro-state-close-window () + "Close micro-state help window." + (when (window-live-p lv-wnd) + (let ((buf (window-buffer lv-wnd))) + (delete-window lv-wnd) + (kill-buffer buf)))) + +(provide 'core-micro-state) diff --git a/core/core-release-management.el b/core/core-release-management.el new file mode 100644 index 0000000..7967f9f --- /dev/null +++ b/core/core-release-management.el @@ -0,0 +1,343 @@ +;;; core-spacemacs.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 +(defconst spacemacs-repository "spacemacs" + "Name of the Spacemacs remote repository.") +(defconst spacemacs-repository-owner "syl20bnr" + "Name of the Spacemacs remote repository owner.") +(defconst spacemacs-checkversion-remote "checkversion" + "Name of the remote repository used to check for new version.") +(defconst spacemacs-checkversion-branch "master" + "Name of the branch used to check for new version.") + +(defvar dotspacemacs-check-for-update) +(defvar spacemacs-version) +;; new version variables +(defvar spacemacs-new-version nil + "If non-nil a new Spacemacs version is available.") +;; used to be "6 hours" but we now check for new versions only at startup +(defvar spacemacs-version-check-interval nil + "Time between two version checks.") +(defvar spacemacs-version-check-lighter "[+]" + "Text displayed in the mode-line when a new version is available.") +(defvar spacemacs-version--check-timer nil + "The current timer for new version check.") +(defvar spacemacs-version--last-startup-check-file + (expand-file-name (concat spacemacs-cache-directory "last-version-check")) + "File where the last startup version check time is stored.") +(defvar spacemacs-version--last-startup-check-time nil + "Time of last version check.") +(defvar spacemacs-version--startup-check-interval (* 3600 24) + "Minimum number of seconds between two version checks at startup.") + +(defun spacemacs/switch-to-version (&optional version) + "Switch spacemacs to VERSION. + +VERSION is a string with the format `x.x.x'. +IMPORTANT: The switch is performed by hard resetting the current branch. +If VERSION is nil then a prompt will ask for a version number. +If the current version is not `master' and not `develop' then +a prompt will ask for confirmation before actually switching to the +specified version. +It is not possible to switch version when you are on `develop' branch, +users on `develop' branch must manually pull last commits instead." + (interactive) + (let ((branch (spacemacs//git-get-current-branch)) + (dirty (spacemacs//git-working-directory-dirty))) + (unless version + (message "Getting version information...") + (let ((last-version (spacemacs/get-last-version))) + (setq version (read-string + (format "Version (default %s [latest]): " last-version) + nil nil last-version)))) + (cond ((string-equal "develop" branch) + (message (concat "Cannot switch version because you are on " + "develop.\n" + "You have to manually `pull --rebase' the latest " + "commits."))) + (dirty + (message (concat "Your Emacs directory is not clean.\n" + "git status:\n%s") dirty)) + ((string-equal version spacemacs-version) + (message "You are already on the latest version.")) + ((or (string-equal "master" branch) + (yes-or-no-p + (format (concat "You are not on master. " + "This command will switch branches.\n" + "Are you sure that you want to switch " + "to version %s ? ") + version))) + (let ((tag (concat "v" version))) + (if (spacemacs//git-hard-reset-to-tag tag) + (progn + (setq spacemacs-version version) + (message "Successfully switched to version %s" version)) + (message "An error occurred while switching to version %s" + version)))) + (t (message "Update aborted."))))) + +(defun spacemacs/check-for-new-version (force &optional interval) + "Periodicly check for new for new Spacemacs version. +Update `spacemacs-new-version' variable if any new version has been +found." + (interactive "P") + (cond + ((and (not force) + (not dotspacemacs-check-for-update)) + (message "Skipping check for new version (reason: dotfile)")) + ((and (not force) + (string-equal "develop" (spacemacs//git-get-current-branch))) + (message "Skipping check for new version (reason: develop branch)")) + ((and (not force) + (not (spacemacs//can-check-for-new-version-at-startup))) + (message (concat "Skipping check for new version " + "(reason: last check is too recent)"))) + ((require 'async nil t) + (message "Start checking for new version...") + (async-start + `(lambda () + ,(async-inject-variables "\\`spacemacs-start-directory\\'") + (load-file (concat spacemacs-start-directory + "core/core-load-paths.el")) + (require 'core-spacemacs) + (spacemacs/get-last-version)) + (lambda (result) + (if result + (if (or (version< result spacemacs-version) + (string= result spacemacs-version) + (if spacemacs-new-version + (string= result spacemacs-new-version))) + (message "Spacemacs is up to date.") + (message "New version of Spacemacs available: %s" result) + (setq spacemacs-new-version result)) + (message "Unable to check for new version.")))) + (when interval + (setq spacemacs-version--check-timer + (run-at-time t (timer-duration interval) + 'spacemacs/check-for-new-version)))) + (t (message "Skipping check for new version (reason: async not loaded)")))) + +(defun spacemacs/git-get-current-branch-rev () + "Returns the hash of the head commit on the current branch. +Returns nil if an error occurred." + (let ((proc-buffer "git-get-current-branch-head-hash") + (default-directory (file-truename spacemacs-start-directory))) + (when (eq 0 (process-file "git" nil proc-buffer nil + "rev-parse" "--short" "HEAD")) + (with-current-buffer proc-buffer + (prog1 + (when (buffer-string) + (goto-char (point-min)) + (replace-regexp-in-string + "\n$" "" + (buffer-substring (line-beginning-position) + (line-end-position)))) + (kill-buffer proc-buffer)))))) + +(defun spacemacs/get-new-version-lighter-face (current new) + "Return the new version lighter face given the difference between the CURRENT +version and the NEW version." + (let* ((lcur (version-to-list current)) + (lnew (version-to-list new)) + (scur (spacemacs//compute-version-score lcur)) + (snew (spacemacs//compute-version-score lnew)) + (diff (- snew scur))) + (cond + ((< diff 3000) 'spacemacs-mode-line-new-version-lighter-success-face) + ((< diff 5000) 'spacemacs-mode-line-new-version-lighter-warning-face) + (t 'spacemacs-mode-line-new-version-lighter-error-face)))) + +(defun spacemacs/get-last-version () + "Return the last tagged version." + (interactive) + (spacemacs//get-last-version spacemacs-repository + spacemacs-repository-owner + spacemacs-checkversion-remote + spacemacs-checkversion-branch)) + +(defun spacemacs//can-check-for-new-version-at-startup () + "Return non-nil if the version check at startup can be performed." + (when (file-exists-p spacemacs-version--last-startup-check-file) + (load spacemacs-version--last-startup-check-file)) + (let ((result + (or (null spacemacs-version--last-startup-check-time) + (> (- (float-time) spacemacs-version--last-startup-check-time) + spacemacs-version--startup-check-interval)))) + (when result + (setq spacemacs-version--last-startup-check-time (float-time)) + (spacemacs/dump-vars-to-file '(spacemacs-version--last-startup-check-time) + spacemacs-version--last-startup-check-file)) + result)) + +(defun spacemacs//get-last-version (repo owner remote branch) + "Return the last tagged version of BRANCH on REMOTE repository from +OWNER REPO." + (let ((url (format "https://github.com/%s/%s" owner repo))) + (spacemacs//git-remove-remote remote) + (spacemacs//git-add-remote remote url) + ;; removing this call according to issue #6692 proposal + ;; (spacemacs//git-fetch-remote remote) + (spacemacs//git-fetch-tags remote branch)) + (let ((version (spacemacs//git-latest-tag remote branch))) + (when version + (save-match-data + (string-match "^.*\\([0-9]+\\.[0-9]+\\.[0-9]+\\)$" version) + (match-string 1 version))))) + +(defun spacemacs//git-has-remote (remote) + "Return non nil if REMOTE is declared." + (let ((proc-buffer "git-has-remote") + (default-directory (file-truename spacemacs-start-directory))) + (when (eq 0 (process-file "git" nil proc-buffer nil "remote")) + (with-current-buffer proc-buffer + (prog2 + (goto-char (point-min)) + (re-search-forward (format "^%s$" remote) nil 'noerror) + (kill-buffer proc-buffer)))))) + +(defun spacemacs//git-add-remote (remote url) + "Add a REMOTE with URL, return t if no error." + (let ((proc-buffer "git-add-remote") + (default-directory (file-truename spacemacs-start-directory))) + (prog1 + (eq 0 (process-file "git" nil proc-buffer nil + "remote" "add" remote url)) + (kill-buffer proc-buffer)))) + +(defun spacemacs//git-remove-remote (remote) + "Remove a REMOTE, return t if no error." + (let ((proc-buffer "git-remove-remote") + (default-directory (file-truename spacemacs-start-directory))) + (prog1 + (eq 0 (process-file "git" nil proc-buffer nil + "remote" "remove" remote)) + (kill-buffer proc-buffer)))) + +(defun spacemacs//git-fetch-remote (remote) + "Fetch last commits from REMOTE, return t if no error." + (let ((proc-buffer "git-fetch-remote") + (default-directory (file-truename spacemacs-start-directory))) + (prog1 + (eq 0 (process-file "git" nil proc-buffer nil + "fetch" remote)) + (kill-buffer proc-buffer)))) + +(defun spacemacs//git-fetch-tags (remote branch) + "Fetch the tags for BRANCH in REMOTE repository." + (let ((proc-buffer "git-fetch-tags") + (default-directory (file-truename spacemacs-start-directory))) + (prog1 + ;;;; original comment: seems necessary to fetch first + ;; but we remove this according to issue #6692 proposal + ;; (eq 0 (process-file "git" nil proc-buffer nil + ;; "fetch" remote branch)) + ;; explicitly fetch the new tags + (eq 0 (process-file "git" nil proc-buffer nil + "fetch" "--tags" remote branch)) + (kill-buffer proc-buffer)))) + +(defun spacemacs//git-hard-reset-to-tag (tag) + "Hard reset the current branch to specifed TAG." + (let ((proc-buffer "git-hard-reset") + (default-directory (file-truename spacemacs-start-directory))) + (prog1 + (eq 0 (process-file "git" nil proc-buffer nil + "reset" "--hard" tag)) + (kill-buffer proc-buffer)))) + +(defun spacemacs//git-latest-tag (remote branch) + "Returns the latest tag on REMOTE/BRANCH." + (let ((proc-buffer "git-latest-tag") + (default-directory (file-truename spacemacs-start-directory)) + (where (format "%s/%s" remote branch))) + (when (eq 0 (process-file "git" nil proc-buffer nil + "describe" "--tags" "--abbrev=0" + "--match=v*" where "FETCH_HEAD")) + (with-current-buffer proc-buffer + (prog1 + (when (buffer-string) + (goto-char (point-max)) + (forward-line -1) + (replace-regexp-in-string + "\n$" "" + (buffer-substring (line-beginning-position) + (line-end-position)))) + (kill-buffer proc-buffer)))))) + +(defun spacemacs//git-checkout (branch) + "Checkout the given BRANCH. Return t if there is no error." + (let ((proc-buffer "git-checkout") + (default-directory (file-truename spacemacs-start-directory))) + (prog1 + (eq 0 (process-file "git" nil proc-buffer nil + "checkout" branch)) + (kill-buffer proc-buffer)))) + +(defun spacemacs//git-get-current-branch () + "Return the current branch. Return nil if an error occurred." + (let ((proc-buffer "git-get-current-branch") + (default-directory (file-truename spacemacs-start-directory))) + (when (eq 0 (process-file "git" nil proc-buffer nil + "symbolic-ref" "--short" "-q" "HEAD")) + (with-current-buffer proc-buffer + (prog1 + (when (buffer-string) + (goto-char (point-min)) + (replace-regexp-in-string + "\n$" "" + (buffer-substring (line-beginning-position) + (line-end-position)))) + (kill-buffer proc-buffer)))))) + +(defun spacemacs//git-working-directory-dirty () + "Non-nil if the user's emacs directory is not clean. +Returns the output of git status --porcelain." + (let ((proc-buffer "git-working-directory-dirty") + (default-directory (file-truename spacemacs-start-directory))) + (when (eq 0 (process-file "git" nil proc-buffer nil + "status" "--porcelain")) + (with-current-buffer proc-buffer + (prog1 + (when (and (buffer-string) + ;;simplecheckforanytext + (string-match-p "[^ \t\n]" (buffer-string))) + (replace-regexp-in-string "\n\\'" "" (buffer-string))) + (kill-buffer proc-buffer)))))) + +(defun spacemacs//deffaces-new-version-lighter (state) + "Define a new version lighter face for the given STATE." + (let* ((fname (intern + (format "spacemacs-mode-line-new-version-lighter-%s-face" + (symbol-name state)))) + (foreground (face-foreground state))) + (eval `(defface ,fname '((t ())) + ,(format "Color for new version lighter in mode line (%s)." + (symbol-name state)) + :group 'spacemacs)) + (set-face-attribute fname nil + :foreground foreground + :box (face-attribute 'mode-line :box)))) + +(defun spacemacs//compute-version-score (version) + "Returns an integer from the version list. +Example: (1 42 3) = 1 042 003" + (let ((i -1)) + (cl-reduce '+ (mapcar (lambda (n) (setq i (1+ i)) (* n (expt 10 (* i 3)))) + (reverse version))))) + +(defun spacemacs/set-new-version-lighter-mode-line-faces () + "Define or set the new version lighter mode-line faces." + (mapcar 'spacemacs//deffaces-new-version-lighter + '(error warning success))) +(spacemacs/set-new-version-lighter-mode-line-faces) +(add-hook 'spacemacs-post-theme-change-hook + 'spacemacs/set-new-version-lighter-mode-line-faces) + +(provide 'core-release-management) diff --git a/core/core-spacemacs-buffer.el b/core/core-spacemacs-buffer.el new file mode 100644 index 0000000..5d11296 --- /dev/null +++ b/core/core-spacemacs-buffer.el @@ -0,0 +1,1024 @@ +;;; core-spacemacs-buffer.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 +(defconst spacemacs-buffer-version-info "0.200" + "Current version used to display addition release information.") + +(defconst spacemacs-buffer-name "*spacemacs*" + "The name of the spacemacs buffer.") + +(defconst spacemacs-buffer-logo-title "[S P A C E M A C S]" + "The title displayed beneath the logo.") + +(defconst spacemacs-buffer-buttons-startup-lists-offset 25 + "Relative position in characters of the home buffer buttons and the home + buffer startup lists.") + +(defconst spacemacs-buffer--banner-length 75 + "Width of a banner.") + +(defconst spacemacs-buffer--cache-file + (expand-file-name (concat spacemacs-cache-directory "spacemacs-buffer.el")) + "Cache file for various persistent data for the spacemacs startup buffer") + +(defvar spacemacs-buffer-startup-lists-length 20 + "Length used for startup lists with otherwise unspecified bounds. +Set to nil for unbounded.") + +(defvar spacemacs-buffer--release-note-version nil + "If nil the release note is displayed. If non nil it contains +a version number, if the version number is lesser than the current +version the release note it displayed") + +(defvar spacemacs-buffer--note-widgets nil + "List of widgets used to display the release note.") + +(defvar spacemacs-buffer--previous-insert-type nil + "Previous type of note inserted.") + +(defvar spacemacs-buffer--fresh-install + (not (file-exists-p dotspacemacs-filepath)) + "Non-nil if this Emacs instance if a fresh install.") + +(defvar spacemacs-buffer--buttons-position nil + "Offset in characters between the edge of the screen and the beginning of the + home buffer buttons. Do not set this variable.") + +(defvar spacemacs-buffer-mode-map + (let ((map (make-sparse-keymap))) + (define-key map [down-mouse-1] 'widget-button-click) + (define-key map (kbd "RET") 'widget-button-press) + + (define-key map [tab] 'widget-forward) + (define-key map (kbd "J") 'widget-forward) + (define-key map (kbd "C-i") 'widget-forward) + + (define-key map [backtab] 'widget-backward) + (define-key map (kbd "K") 'widget-backward) + + (define-key map (kbd "C-r") 'spacemacs-buffer/refresh) + (define-key map "q" 'quit-window) + map) + "Keymap for spacemacs buffer mode.") + +(with-eval-after-load 'evil + (evil-make-overriding-map spacemacs-buffer-mode-map 'motion)) + +(define-derived-mode spacemacs-buffer-mode fundamental-mode "Spacemacs buffer" + "Spacemacs major mode for startup screen. + +\\ +" + :group 'spacemacs + :syntax-table nil + :abbrev-table nil + (page-break-lines-mode) + (setq buffer-read-only t + truncate-lines t) + ;; needed to make tab work correctly in terminal + (evil-define-key 'motion spacemacs-buffer-mode-map + (kbd "C-i") 'widget-forward) + ;; motion state since this is a special mode + (evil-set-initial-state 'spacemacs-buffer-mode 'motion)) + +(defun spacemacs-buffer/insert-ascii-banner-centered (file) + (insert-string + (with-temp-buffer + (insert-file-contents file) + (let ((banner-width 0)) + (while (not (eobp)) + (let ((line-length (- (line-end-position) (line-beginning-position)))) + (if (< banner-width line-length) + (setq banner-width line-length))) + (forward-line 1)) + (goto-char 0) + (let ((margin (max 0 (floor (/ (- spacemacs-buffer--banner-length banner-width) 2))))) + (while (not (eobp)) + (insert (make-string margin ?\ )) + (forward-line 1)))) + (buffer-string)))) + +(defun spacemacs-buffer/insert-banner-and-buttons () + "Choose a banner according to `dotspacemacs-startup-banner'and insert it +in spacemacs buffer along with quick buttons underneath. + +Easter egg: +Doge special text banner can be reachable via `999', `doge' or `random*'. +Cate special text banner can de reachable via `998', `cat' or `random*'. +`random' ignore special banners whereas `random*' does not." + (let ((banner (spacemacs-buffer//choose-banner)) + (buffer-read-only nil)) + (progn + (when banner + (spacemacs-buffer/message (format "Banner: %s" banner)) + (if (image-type-available-p (intern (file-name-extension banner))) + (spacemacs-buffer//insert-image-banner banner) + (spacemacs-buffer/insert-ascii-banner-centered banner)) + (spacemacs-buffer//inject-version)) + (spacemacs-buffer//insert-buttons) + (spacemacs//redisplay)))) + +(defun spacemacs-buffer/display-info-box () + "Display an info box." + (when (file-exists-p spacemacs-buffer--cache-file) + (load spacemacs-buffer--cache-file)) + (cond + (spacemacs-buffer--fresh-install + ;; we assume the user is new to spacemacs and open the quickhelp + (spacemacs-buffer/toggle-note + (concat spacemacs-info-directory "quickhelp.txt") + (spacemacs-buffer//insert-note-p 'quickhelp)) + (setq spacemacs-buffer--release-note-version spacemacs-version) + (spacemacs/dump-vars-to-file '(spacemacs-buffer--release-note-version) + spacemacs-buffer--cache-file)) + ((or (not spacemacs-buffer--release-note-version) + (version< spacemacs-buffer--release-note-version + spacemacs-version)) + ;; check the variable ;; spacemacs-buffer--release-note-version + ;; to decide whether ;; we show the release note + (spacemacs-buffer/toggle-note + (concat spacemacs-release-notes-directory + spacemacs-buffer-version-info ".txt") 'release-note))) + (spacemacs//redisplay)) + +(defun spacemacs-buffer//choose-banner () + "Return the full path of a banner based on the dotfile value." + (when dotspacemacs-startup-banner + (cond ((eq 'official dotspacemacs-startup-banner) + (if (and (display-graphic-p) (image-type-available-p 'png)) + spacemacs-banner-official-png + (spacemacs-buffer//get-banner-path 1))) + ((eq 'random dotspacemacs-startup-banner) + (spacemacs-buffer//choose-random-text-banner)) + ((eq 'random* dotspacemacs-startup-banner) + (spacemacs-buffer//choose-random-text-banner t)) + ((eq 'doge dotspacemacs-startup-banner) + (spacemacs-buffer//get-banner-path 999)) + ((eq 'cat dotspacemacs-startup-banner) + (spacemacs-buffer//get-banner-path 998)) + ((integerp dotspacemacs-startup-banner) + (spacemacs-buffer//get-banner-path dotspacemacs-startup-banner)) + ((and dotspacemacs-startup-banner + (image-type-available-p (intern (file-name-extension + dotspacemacs-startup-banner))) + (display-graphic-p)) + (if (file-exists-p dotspacemacs-startup-banner) + dotspacemacs-startup-banner + (spacemacs-buffer/warning (format "could not find banner %s" + dotspacemacs-startup-banner)) + (spacemacs-buffer//get-banner-path 1))) + (t (spacemacs-buffer//get-banner-path 1))))) + +(defvar spacemacs-buffer--random-banner nil + "The random banner chosen.") + +(defun spacemacs-buffer//choose-random-text-banner (&optional all) + "Return the full path of a banner chosen randomly. + +If ALL is non-nil then truly all banners can be selected." + (setq spacemacs-buffer--random-banner + (or spacemacs-buffer--random-banner + (let* ((files (directory-files spacemacs-banner-directory t ".*\.txt")) + (count (length files)) + ;; -2 to remove the two last ones (easter eggs) + (choice (random (- count (if all 0 2))))) + (nth choice files))))) + +(defun spacemacs-buffer//get-banner-path (index) + "Return the full path to banner with index INDEX." + (concat spacemacs-banner-directory (format "%03d-banner.txt" index))) + +(defun spacemacs-buffer//insert-image-banner (banner) + "Display an image banner." + (when (file-exists-p banner) + (let* ((title spacemacs-buffer-logo-title) + (spec (create-image banner)) + (size (image-size spec)) + (width (car size)) + (left-margin (max 0 (floor (- spacemacs-buffer--banner-length width) 2)))) + (goto-char (point-min)) + (insert "\n") + (insert (make-string left-margin ?\ )) + (insert-image spec) + (insert "\n\n") + (insert (make-string (max 0 (floor (/ (- spacemacs-buffer--banner-length + (+ (length title) 1)) 2))) ?\ )) + (insert (format "%s\n\n" title))))) + +(defun spacemacs-buffer//inject-version () + "Inject the current version of spacemacs in the first line of the +buffer, right justified." + (with-current-buffer (get-buffer-create spacemacs-buffer-name) + (save-excursion + (let ((maxcol spacemacs-buffer--banner-length) + (version (format "%s@%s (%s)" + spacemacs-version + emacs-version + dotspacemacs-distribution)) + (buffer-read-only nil)) + (goto-char (point-min)) + (delete-region (point) (progn (end-of-line) (point))) + (insert (format (format "%%%ds" maxcol) version)))))) + +(defun spacemacs-buffer//insert-footer () + (save-excursion + (let* ((maxcol spacemacs-buffer--banner-length) + (badge-path spacemacs-badge-official-png) + (badge (when (and (display-graphic-p) + (image-type-available-p + (intern (file-name-extension badge-path)))) + (create-image badge-path))) + (badge-size (when badge (car (image-size badge)))) + (heart-path spacemacs-purple-heart-png) + (heart (when (and (display-graphic-p) + (image-type-available-p + (intern (file-name-extension badge-path)))) + (create-image heart-path))) + (heart-size (when heart (car (image-size heart)))) + (build-lhs "Made with ") + (build-rhs " by the community") + (buffer-read-only nil)) + (when (or badge heart) + (goto-char (point-max)) + (spacemacs-buffer/insert-page-break) + (insert "\n") + (when badge + (insert (make-string (floor (/ (- maxcol badge-size) 2)) ?\ )) + (insert-image badge)) + (when heart + (when badge (insert "\n\n")) + (insert (make-string (floor (/ (- maxcol + (length build-lhs) + heart-size + (length build-rhs)) 2)) ?\ )) + (insert build-lhs) + (insert-image heart) + (insert build-rhs) + (insert "\n")))))) + +(defun spacemacs-buffer//insert-note (file caption &optional additional-widgets) + "Insert the release note just under the banner. + +FILE is the file that contains the content to show. +CAPTION is the title of the note. +TAG-STRING is the label of the button for additional action. +HELP-STRING is the help message of the button for additional action." + (save-excursion + (goto-char (point-min)) + (search-forward "Search in Spacemacs\]") + (forward-line) + (let* ((note (concat "\n" (spacemacs//render-framed-text + file spacemacs-buffer--banner-length caption)))) + (add-to-list 'spacemacs-buffer--note-widgets (widget-create 'text note)) + (save-excursion + (while (re-search-backward "\\[\\[\\(.*\\)\\]\\]" nil t) + (let ((buffer-read-only nil)) + (make-text-button + (match-beginning 1) + (match-end 1) + 'type 'help-url + 'help-args (list (match-string 1)))))) + (funcall additional-widgets)))) + +(defun spacemacs-buffer//insert-note-p (type) + "Decicde if whether to insert note widget or not based on current note TYPE. + +If note TYPE is `quickhelp' or `release-note' and is equal to +previous insert type in `spacemacs-buffer--previous-insert-type', +which means previous note widget of the same type already +inserted. In this case, we simply delete the widgets but don't insert. + +Otherwise, delete and allow insert note of TYPE." + (if (not (eq spacemacs-buffer--previous-insert-type type)) + type + (setq spacemacs-buffer--previous-insert-type nil))) + +(defun spacemacs-buffer/toggle-note (file type) + "Toggle the note in FILE for the buffer based on TYPE. + +If TYPE is nil, just remove widgets." + (interactive) + (spacemacs-buffer//remove-existing-widget-if-exist) + (cond + ((eq type 'quickhelp) + (spacemacs-buffer//insert-quickhelp-widget file)) + ((eq type 'release-note) + (spacemacs-buffer//insert-release-note-widget file)) + (t))) + +(defun spacemacs-buffer//remove-existing-widget-if-exist () + "Remove existing note widgets if exists." + (when spacemacs-buffer--note-widgets + (spacemacs-buffer//remove-note-widgets))) + +(defun spacemacs-buffer//insert-quickhelp-widget (file) + "Insert quickhelp with content from FILE." + (spacemacs-buffer//remove-existing-widget-if-exist) + (let ((widget-func + (lambda () + (add-to-list + 'spacemacs-buffer--note-widgets + (widget-create 'push-button + :tag (propertize "Evil Tutorial" + 'face 'font-lock-keyword-face) + :help-echo + "Teach you how to use Vim basics." + :action (lambda (&rest ignore) + (call-interactively #'evil-tutor-start)) + :mouse-face 'highlight + :follow-link "\C-m")) + (widget-insert " ") + (add-to-list + 'spacemacs-buffer--note-widgets + (widget-create 'push-button + :tag (propertize "Emacs Tutorial" + 'face 'font-lock-keyword-face) + :help-echo "Teach you how to use Emacs basics." + :action (lambda (&rest ignore) + (call-interactively #'help-with-tutorial)) + :mouse-face 'highlight + :follow-link "\C-m")) + (widget-insert " ") + (add-to-list + 'spacemacs-buffer--note-widgets + (widget-create 'push-button + :tag (propertize "Vim Migration Guide" + 'face 'font-lock-keyword-face) + :help-echo "Documentation for former vim users." + :action (lambda (&rest ignore) + (spacemacs/view-org-file + (concat spacemacs-docs-directory + "VIMUSERS.org") "^" 'all)) + :mouse-face 'highlight + :follow-link "\C-m"))))) + (spacemacs-buffer//insert-note file "Quick Help" widget-func)) + (setq spacemacs-buffer--previous-insert-type 'quickhelp)) + +(defun spacemacs-buffer//insert-release-note-widget (file) + "Insert release note with content from FILE." + (spacemacs-buffer//remove-existing-widget-if-exist) + (let ((widget-func + (lambda () + (add-to-list + 'spacemacs-buffer--note-widgets + (widget-create 'push-button + :tag (propertize "Click here for full change log" + 'face 'font-lock-warning-face) + :help-echo "Open the full change log." + :action + (lambda (&rest ignore) + (funcall 'spacemacs/view-org-file + (concat spacemacs-start-directory + "CHANGELOG.org") + (format "Release %s.x" + spacemacs-buffer-version-info) + 'subtree)) + :mouse-face 'highlight + :follow-link "\C-m"))))) + (spacemacs-buffer//insert-note file + (format " Important Notes (Release %s.x) " + spacemacs-buffer-version-info) + widget-func)) + + (setq spacemacs-buffer--release-note-version nil) + (spacemacs/dump-vars-to-file + '(spacemacs-buffer--release-note-version) spacemacs-buffer--cache-file) + (setq spacemacs-buffer--previous-insert-type 'release-note)) + +(defun spacemacs-buffer//remove-note-widgets () + (mapc 'widget-delete spacemacs-buffer--note-widgets) + (setq spacemacs-buffer--note-widgets nil) + (setq spacemacs-buffer--release-note-version spacemacs-version) + (spacemacs/dump-vars-to-file + '(spacemacs-buffer--release-note-version) spacemacs-buffer--cache-file)) + +(defun spacemacs-buffer/set-mode-line (format) + "Set mode-line format for spacemacs buffer." + (with-current-buffer (get-buffer-create spacemacs-buffer-name) + (setq mode-line-format format))) + +(defun spacemacs-buffer/message (msg &rest args) + "Display MSG in message prepended with '(Spacemacs)'. +The message is displayed only if `init-file-debug' is non nil." + (when init-file-debug + (message "(Spacemacs) %s" (apply 'format msg args)))) + +(defvar spacemacs-buffer--warnings nil + "List of warnings during startup.") + +(defun spacemacs-buffer/warning (msg &rest args) + "Display MSG as a warning message but in buffer `*Messages*'. +The message is always displayed. " + (let ((msg (apply 'format msg args))) + (message "(Spacemacs) Warning: %s" msg) + (add-to-list 'spacemacs-buffer--warnings msg 'append))) + +(defun spacemacs-buffer/insert-page-break () + "Insert a page break line in spacemacs buffer." + (spacemacs-buffer/append "\n \n")) + +(defun spacemacs-buffer/append (msg &optional messagebuf) + "Append MSG to spacemacs buffer. If MESSAGEBUF is not nil then MSG is + also written in message buffer." + (with-current-buffer (get-buffer-create spacemacs-buffer-name) + (goto-char (point-max)) + (let ((buffer-read-only nil)) + (insert msg) + (if messagebuf (message "(Spacemacs) %s" msg))) + (spacemacs-buffer/set-mode-line ""))) + +(defun spacemacs-buffer/replace-last-line (msg &optional messagebuf) + "Replace the last line of the spacemacs buffer with MSG. If MESSAGEBUF is + not nil then MSG is also written in message buffer." + (with-current-buffer (get-buffer-create spacemacs-buffer-name) + (goto-char (point-max)) + (let ((buffer-read-only nil)) + (delete-region (line-beginning-position) (point-max)) + (insert msg) + (if messagebuf (message "(Spacemacs) %s" msg))) + (spacemacs-buffer/set-mode-line ""))) + +(defun spacemacs-buffer/insert-framed-text + (msg &optional caption hpadding) + "Insert MSG in spacemacs buffer within a frame of width FILL-COLUMN. + +See `spacemacs//render-framed-text' for documentation of the other +parameters." + (with-current-buffer (get-buffer-create spacemacs-buffer-name) + (let ((buffer-read-only nil)) + (insert (spacemacs//render-framed-text msg spacemacs-buffer--banner-length + caption hpadding))))) + +(defun spacemacs-buffer/insert-framed-text-from-file + (filepath &optional caption hpadding) + "Insert at point the content of FILENAME file in spacemacs buffer in a +frame. + +If FILEPATH does not exists the function returns nil. + +See `spacemacs//render-framed-text' for documentation of the other +parameters." + (when (file-exists-p filepath) + (with-current-buffer (get-buffer-create spacemacs-buffer-name) + (let ((buffer-read-only nil)) + (insert (spacemacs//render-framed-text + filepath spacemacs-buffer--banner-length caption hpadding)))))) + +(defun spacemacs//render-framed-text (content &optional width caption hpadding) + "Return a formated string framed with plained lines of width FILL-COLUMN. + +CONTENT can be a text or a filepath. + +WIDTH set the `fill-column' variable. + +If CAPTION is non nil string then it is included in at the top of the frame. +If CAPTION length is greater than FILL-COLUMN minus 5 the function returns +nil. + +HPADDING is the horizontal spacing between the text and the frame. +The vertical spacing is always one line." + (with-temp-buffer + (if (not (file-exists-p content)) + (insert content) + (insert-file-contents content) + ;; remove additional newline at eof + (goto-char (point-max)) + (delete-char -1)) + (let* ((hpadding (or hpadding 1)) + (fill-column (if width + (- width (+ 2 (* 2 hpadding))) + fill-column)) + (sentence-end-double-space nil) + (caption-len (length caption))) + (fill-region (point-min) (point-max) 'justify 'nosqueeze) + (concat + ;; top + "╭─" + (if caption + (concat caption + (make-string (max 0 (+ (- fill-column caption-len 1) + hpadding)) ?─)) + (make-string fill-column ?─)) + (make-string hpadding ?─) "╮\n" + ;; content + (spacemacs//render-framed-line "" hpadding) + (mapconcat (lambda (x) + (spacemacs//render-framed-line x hpadding)) + (split-string (buffer-string) "\n" nil) "") + (spacemacs//render-framed-line "" hpadding) + ;; bottom + "╰" (make-string hpadding ?─) + (make-string fill-column ?─) + (make-string hpadding ?─) "╯")))) + +(defun spacemacs//render-framed-line (line hpadding) + "Return a formated LINE with borders of a frame on each side and +with width FILL-COLUMN. + +If length of LINE is bigger than FILL-COLUMN it returns nil. + +HPADDING is the horizontal spacing betwee the content line and the frame +border." + (let* ((len (length line)) + (fill (- fill-column len))) + (when (>= fill 0) + (concat "│" (make-string hpadding ?\s) + line (make-string fill ?\s) + (make-string hpadding ?\s) "│\n")))) + +(defun spacemacs-buffer/loading-animation () + "Display the progress bar by chunk of size +`spacemacs--loading-dots-chunk-threshold'." + (when (and (not noninteractive) dotspacemacs-loading-progress-bar) + (setq spacemacs-loading-counter (1+ spacemacs-loading-counter)) + (setq spacemacs-loading-value (1+ spacemacs-loading-value)) + (when (>= spacemacs-loading-counter spacemacs-loading-dots-chunk-threshold) + (let ((suffix (format "> %s/%s" spacemacs-loading-value + (length configuration-layer--used-packages)))) + (setq spacemacs-loading-counter 0) + (setq spacemacs-loading-string + (make-string + (max 0 + (- (* spacemacs-loading-dots-chunk-size + (floor (/ spacemacs-loading-value + spacemacs-loading-dots-chunk-threshold))) + (length suffix))) + spacemacs-loading-char)) + (spacemacs-buffer/set-mode-line (concat spacemacs-loading-string + suffix))) + (spacemacs//redisplay)))) + +(defmacro spacemacs//insert--shortcut (shortcut-char search-label + &optional no-next-line) + `(define-key spacemacs-buffer-mode-map + ,shortcut-char (lambda () + (interactive) + (unless (search-forward ,search-label (point-max) t) + (search-backward ,search-label (point-min) t)) + ,@(unless no-next-line + '((forward-line 1))) + (back-to-indentation)))) + +(defun spacemacs-buffer//center-line () + (let* ((width (current-column)) + (margin (max 0 (floor (/ (- spacemacs-buffer--banner-length width) 2))))) + (beginning-of-line) + (insert (make-string margin ?\ )) + (end-of-line))) + +(defun spacemacs-buffer//insert-buttons () + (goto-char (point-max)) + (spacemacs//insert--shortcut "m" "[?]" t) + (widget-create 'url-link + :tag (propertize "?" 'face 'font-lock-doc-face) + :help-echo "Open the quickhelp." + :action (lambda (&rest ignore) + (spacemacs-buffer/toggle-note + (concat spacemacs-info-directory "quickhelp.txt") + ;; if nil is returned, + ;; just delete the current note widgets + (spacemacs-buffer//insert-note-p 'quickhelp))) + :mouse-face 'highlight + :follow-link "\C-m") + (insert " ") + (widget-create 'url-link + :tag (propertize "Homepage" 'face 'font-lock-keyword-face) + :help-echo "Open the Spacemacs Github page in your browser." + :mouse-face 'highlight + :follow-link "\C-m" + "http://spacemacs.org") + (insert " ") + (widget-create 'url-link + :tag (propertize "Documentation" 'face 'font-lock-keyword-face) + :help-echo "Open the Spacemacs documentation in your browser." + :mouse-face 'highlight + :follow-link "\C-m" + "http://spacemacs.org/doc/DOCUMENTATION.html") + (insert " ") + (widget-create 'url-link + :tag (propertize "Gitter Chat" 'face 'font-lock-keyword-face) + :help-echo + "Ask questions and chat with fellow users in our chat room." + :mouse-face 'highlight + :follow-link "\C-m" + "https://gitter.im/syl20bnr/spacemacs") + (insert " ") + (widget-create 'push-button + :help-echo "Update Spacemacs core and layers." + :action (lambda (&rest ignore) (spacemacs/switch-to-version)) + :mouse-face 'highlight + :follow-link "\C-m" + (propertize "Update Spacemacs" 'face 'font-lock-keyword-face)) + (let ((len (- (line-end-position) + (line-beginning-position)))) + (spacemacs-buffer//center-line) + (setq spacemacs-buffer--buttons-position (- (line-end-position) + (line-beginning-position) + len))) + (insert "\n") + (widget-create 'push-button + :help-echo "Update all ELPA packages to the latest versions." + :action (lambda (&rest ignore) + (configuration-layer/update-packages)) + :mouse-face 'highlight + :follow-link "\C-m" + (propertize "Update Packages" 'face 'font-lock-keyword-face)) + (insert " ") + (widget-create 'push-button + :help-echo + "Rollback ELPA package updates if something got borked." + :action (lambda (&rest ignore) + (call-interactively 'configuration-layer/rollback)) + :mouse-face 'highlight + :follow-link "\C-m" + (propertize "Rollback Package Update" + 'face 'font-lock-keyword-face)) + (spacemacs-buffer//center-line) + (insert "\n") + (widget-create 'push-button + :tag (propertize "Release Notes" + 'face 'font-lock-preprocessor-face) + :help-echo "Hide or show the Changelog" + :action (lambda (&rest ignore) + (spacemacs-buffer/toggle-note + (concat spacemacs-release-notes-directory + spacemacs-buffer-version-info + ".txt") + ;; if nil is returned, + ;; just delete the current note widgets + (spacemacs-buffer//insert-note-p 'release-note))) + :mouse-face 'highlight + :follow-link "\C-m") + (insert " ") + (widget-create 'url-link + :tag (propertize "Search in Spacemacs" + 'face 'font-lock-function-name-face) + :help-echo "Search Spacemacs contents." + :action + (lambda (&rest ignore) + (let ((comp-frontend + (cond + ((configuration-layer/layer-usedp 'helm) + 'helm-spacemacs-help) + ((configuration-layer/layer-usedp 'ivy) + 'ivy-spacemacs-help)))) + (call-interactively comp-frontend))) + :mouse-face 'highlight + :follow-link "\C-m") + (spacemacs-buffer//center-line) + (insert "\n\n")) + +(defun spacemacs-buffer//insert-string-list (list-display-name list) + (when (car list) + (insert list-display-name) + (mapc (lambda (el) + (insert + "\n" + (with-temp-buffer + (insert el) + (fill-paragraph) + (goto-char (point-min)) + (insert " - ") + (while (= 0 (forward-line)) + (insert " ")) + (buffer-string)))) + list))) + +(defun spacemacs-buffer//insert-file-list (list-display-name list) + (when (car list) + (insert list-display-name) + (mapc (lambda (el) + (insert "\n ") + (widget-create 'push-button + :action `(lambda (&rest ignore) + (find-file-existing ,el)) + :mouse-face 'highlight + :follow-link "\C-m" + :button-prefix "" + :button-suffix "" + :format "%[%t%]" + (abbreviate-file-name el))) + list))) + +(defun spacemacs-buffer//insert-bookmark-list (list-display-name list) + (when (car list) + (insert list-display-name) + (mapc (lambda (el) + (insert "\n ") + (let ((filename (bookmark-get-filename el))) + (widget-create 'push-button + :action `(lambda (&rest ignore) (bookmark-jump ,el)) + :mouse-face 'highlight + :follow-link "\C-m" + :button-prefix "" + :button-suffix "" + :format "%[%t%]" + (if filename + (format "%s - %s" + el (abbreviate-file-name filename)) + (format "%s" el))))) + list))) + +(defun spacemacs-buffer//get-org-items (types) + "Make a list of agenda file items for today of kind types" + (require 'org-agenda) + (let ((date (calendar-gregorian-from-absolute (org-today)))) + (apply #'append + (loop for file in (org-agenda-files nil 'ifmode) + collect + (spacemacs-buffer//make-org-items + file + (apply 'org-agenda-get-day-entries file date + types)))))) + +(defun spacemacs-buffer//agenda-list () + "Returns today's agenda" + (require 'org-agenda) + (spacemacs-buffer//get-org-items org-agenda-entry-types)) + +(defun spacemacs-buffer//todo-list () + "Returns current todos" + (require 'org-agenda) + (spacemacs-buffer//get-org-items '(:todo))) + +(defun spacemacs-buffer//make-org-items (file items) + "make a spacemacs-buffer org item list" + (loop + for item in items + collect + (spacemacs-buffer//make-org-item file item))) + +(defun spacemacs-buffer//make-org-item (file item) + "make a spacemacs-buffer version of an org item" + (list (cons "text" + (get-text-property 0 'txt item)) + (cons "file" file) + (cons "pos" + (marker-position + (get-text-property 0 'org-marker item))) + (cons "time" + (get-text-property 0 'time item)))) + +(defun spacemacs-buffer//org-jump (el) + (require 'org-agenda) + (find-file-other-window (cdr (assoc "file" el))) + (widen) + (goto-char (cdr (assoc "pos" el))) + (when (derived-mode-p 'org-mode) + (org-show-context 'agenda) + (save-excursion + (and (outline-next-heading) + (org-flag-heading nil))) ; show the next heading + (when (outline-invisible-p) + (outline-show-entry)) ; display invisible text + (recenter (/ (window-height) 2)) + (org-back-to-heading t) + (if (re-search-forward org-complex-heading-regexp nil t) + (goto-char (match-beginning 4)))) + (run-hooks 'org-agenda-after-show-hook)) + +(defun spacemacs-buffer//insert-todo-list (list-display-name list) + (when (car list) + (insert list-display-name) + (setq list (sort list + (lambda (a b) + (cond + ((eq "" (cdr (assoc "time" b))) + t) + ((eq "" (cdr (assoc "time" a))) + nil) + (t + (string< (cdr (assoc "time" a)) + (cdr (assoc "time" b)))))))) + (mapc (lambda (el) + (insert "\n ") + (widget-create 'push-button + :action `(lambda (&rest ignore) + (spacemacs-buffer//org-jump ',el)) + :mouse-face 'highlight + :follow-link "\C-m" + :button-prefix "" + :button-suffix "" + :format "%[%t%]" + (format "%s %s %s" + (abbreviate-file-name + (cdr (assoc "file" el))) + (if (not (eq "" (cdr (assoc "time" el)))) + (format "- %s -" + (cdr (assoc "time" el))) + "-") + (cdr (assoc "text" el))))) + list))) + +(defun spacemacs//subseq (seq start end) + "Use `cl-subseq`, but accounting for end points greater than the size of the +list. Return entire list if `END' is omitted." + (let ((len (length seq))) + (cl-subseq seq start (and (number-or-marker-p end) + (min len end))))) + +(defun spacemacs-buffer//do-insert-startupify-lists () + (let ((list-separator "\n\n")) + (mapc (lambda (els) + (let ((el (or (car-safe els) els)) + (list-size + (or (cdr-safe els) + spacemacs-buffer-startup-lists-length))) + (cond + ((eq el 'warnings) + (when (spacemacs-buffer//insert-string-list + "Warnings:" + spacemacs-buffer--warnings) + (spacemacs//insert--shortcut "w" "Warnings:") + (insert list-separator))) + ((eq el 'recents) + (recentf-mode) + (when (spacemacs-buffer//insert-file-list + "Recent Files:" + (spacemacs//subseq recentf-list 0 list-size)) + (spacemacs//insert--shortcut "r" "Recent Files:") + (insert list-separator))) + ((eq el 'todos) + (when (spacemacs-buffer//insert-todo-list + "ToDo:" + (spacemacs//subseq (spacemacs-buffer//todo-list) + 0 list-size)) + (spacemacs//insert--shortcut "d" "ToDo:") + (insert list-separator))) + ((eq el 'agenda) + (when (spacemacs-buffer//insert-todo-list + "Agenda:" + (spacemacs//subseq (spacemacs-buffer//agenda-list) + 0 list-size)) + (spacemacs//insert--shortcut "c" "Agenda:") + (insert list-separator))) + ((eq el 'bookmarks) + (when (configuration-layer/layer-usedp 'spacemacs-helm) + (helm-mode)) + (require 'bookmark) + (when (spacemacs-buffer//insert-bookmark-list + "Bookmarks:" + (spacemacs//subseq (bookmark-all-names) + 0 list-size)) + (spacemacs//insert--shortcut "b" "Bookmarks:") + (insert list-separator))) + ((and (eq el 'projects) + (fboundp 'projectile-mode)) + (projectile-mode) + (when (spacemacs-buffer//insert-file-list + "Projects:" + (spacemacs//subseq (projectile-relevant-known-projects) + 0 list-size)) + (spacemacs//insert--shortcut "p" "Projects:") + (insert list-separator)))))) + (append + '(warnings) + dotspacemacs-startup-lists)))) + +(defun spacemacs-buffer//get-buffer-width () + (save-excursion + (goto-char 0) + (let ((current-max 0)) + (while (not (eobp)) + (let ((line-length (- (line-end-position) (line-beginning-position)))) + (if (< current-max line-length) + (setq current-max line-length))) + (forward-line 1)) + current-max))) + +(defun spacemacs-buffer//center-startupify-lists () + (let* ((lists-width (spacemacs-buffer//get-buffer-width)) + (margin (max 0 (- spacemacs-buffer--buttons-position + spacemacs-buffer-buttons-startup-lists-offset))) + (final-padding (if (< spacemacs-buffer--banner-length (+ margin lists-width)) + (max 0 (floor (/ (- spacemacs-buffer--banner-length lists-width) 2))) + margin))) + (goto-char 0) + (while (not (eobp)) + (line-beginning-position) + (insert (make-string final-padding ?\ )) + (forward-line)))) + +(defun spacemacs-buffer/insert-startupify-lists () + (interactive) + (with-current-buffer (get-buffer spacemacs-buffer-name) + (let ((buffer-read-only nil)) + (goto-char (point-max)) + (spacemacs-buffer/insert-page-break) + (insert "\n") + (save-restriction + (narrow-to-region (point) (point)) + (spacemacs-buffer//do-insert-startupify-lists) + (spacemacs-buffer//center-startupify-lists))))) + +(defun spacemacs-buffer/goto-link-line () + "Set point to the beginning of the link line." + (interactive) + (with-current-buffer spacemacs-buffer-name + (goto-char (point-min)) + (with-demoted-errors "spacemacs buffer error: %s" + (widget-forward 1)))) + +(defun spacemacs-buffer//startup-hook () + "Code executed when Emacs has finished loading." + (with-current-buffer (get-buffer spacemacs-buffer-name) + (when dotspacemacs-startup-lists + (spacemacs-buffer/insert-startupify-lists)) + (spacemacs-buffer//insert-footer) + (if configuration-layer-error-count + (progn + (spacemacs-buffer-mode) + (spacemacs-buffer/set-mode-line + (format + (concat "%s error(s) at startup! " + "Spacemacs may not be able to operate properly.") + configuration-layer-error-count)) + (face-remap-add-relative 'mode-line + '((:background "red") mode-line))) + (spacemacs-buffer/set-mode-line spacemacs--default-mode-line) + (spacemacs-buffer-mode)) + (force-mode-line-update) + (spacemacs-buffer/goto-link-line))) + +(defvar spacemacs-buffer--last-width nil + "Previous width of spacemacs-buffer") + +(defun spacemacs-buffer/goto-buffer (&optional refresh) + "Create the special buffer for `spacemacs-buffer-mode' if it doesn't +already exist, and switch to it." + (interactive) + (let ((buffer-exists (buffer-live-p (get-buffer spacemacs-buffer-name))) + (save-line nil)) + (when (or (not (eq spacemacs-buffer--last-width (window-width))) + (not buffer-exists) + refresh) + (setq spacemacs-buffer--banner-length (window-width) + spacemacs-buffer--last-width spacemacs-buffer--banner-length) + (with-current-buffer (get-buffer-create spacemacs-buffer-name) + (page-break-lines-mode) + (save-excursion + (when (> (buffer-size) 0) + (set 'save-line (line-number-at-pos)) + (let ((inhibit-read-only t)) + (erase-buffer))) + (spacemacs-buffer/set-mode-line "") + ;; needed in case the buffer was deleted and we are recreating it + (setq spacemacs-buffer--note-widgets nil) + (spacemacs-buffer/insert-banner-and-buttons) + ;; non-nil if emacs-startup-hook was run + (if (bound-and-true-p spacemacs-initialized) + (progn + (configuration-layer/display-summary emacs-start-time) + (when dotspacemacs-startup-lists + (spacemacs-buffer/insert-startupify-lists)) + (spacemacs-buffer//insert-footer) + (spacemacs-buffer/set-mode-line spacemacs--default-mode-line) + (force-mode-line-update) + (spacemacs-buffer-mode)) + (add-hook 'emacs-startup-hook 'spacemacs-buffer//startup-hook t)))) + (if save-line + (progn (goto-char (point-min)) + (forward-line (1- save-line)) + (forward-to-indentation 0)) + (spacemacs-buffer/goto-link-line)) + (switch-to-buffer spacemacs-buffer-name) + (spacemacs//redisplay)))) + +(add-hook 'window-setup-hook + (lambda () + (add-hook 'window-configuration-change-hook 'spacemacs-buffer//resize-on-hook) + (spacemacs-buffer//resize-on-hook))) + +(defun spacemacs-buffer//resize-on-hook () + (let ((space-win (get-buffer-window spacemacs-buffer-name)) + (frame-win (frame-selected-window))) + (when (and dotspacemacs-startup-buffer-responsive + space-win + (not (window-minibuffer-p frame-win))) + (with-selected-window space-win + (spacemacs-buffer/goto-buffer))))) + +(defun spacemacs-buffer/refresh () + "Force recreation of the spacemacs buffer." + (interactive) + (setq spacemacs-buffer--last-width nil) + (spacemacs-buffer/goto-buffer t)) + +(defalias 'spacemacs/home 'spacemacs-buffer/refresh + "Go to home Spacemacs buffer") + +(defun spacemacs/home-delete-other-windows () + "Open home Spacemacs buffer and delete other windows. +Useful for making the home buffer the only visible buffer in the frame." + (interactive) + (spacemacs/home) + (delete-other-windows)) + +(provide 'core-spacemacs-buffer) diff --git a/core/core-spacemacs.el b/core/core-spacemacs.el new file mode 100644 index 0000000..0eaafc8 --- /dev/null +++ b/core/core-spacemacs.el @@ -0,0 +1,341 @@ +;;; core-spacemacs.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 +(setq message-log-max 16384) +(defconst emacs-start-time (current-time)) + +(require 'subr-x nil 'noerror) +(require 'page-break-lines) +(require 'core-debug) +(require 'core-command-line) +(require 'core-dotspacemacs) +(require 'core-release-management) +(require 'core-auto-completion) +(require 'core-jump) +(require 'core-display-init) +(require 'core-themes-support) +(require 'core-fonts-support) +(require 'core-spacemacs-buffer) +(require 'core-keybindings) +(require 'core-toggle) +(require 'core-funcs) +(require 'core-micro-state) +(require 'core-transient-state) +(require 'core-use-package-ext) + +(defgroup spacemacs nil + "Spacemacs customizations." + :group 'starter-kit + :prefix 'spacemacs-) + +;; loading progress bar variables +(defvar spacemacs-loading-char ?█) +(defvar spacemacs-loading-string "") +(defvar spacemacs-loading-counter 0) +(defvar spacemacs-loading-value 0) +;; (defvar spacemacs-loading-text "Loading") +;; (defvar spacemacs-loading-done-text "Ready!") +(defvar spacemacs-loading-dots-chunk-count 3) +(defvar spacemacs-loading-dots-count (window-total-size nil 'width)) +(defvar spacemacs-loading-dots-chunk-size + (/ spacemacs-loading-dots-count spacemacs-loading-dots-chunk-count)) +(defvar spacemacs-loading-dots-chunk-threshold 0) + +(defvar spacemacs-post-user-config-hook nil + "Hook run after dotspacemacs/user-config") +(defvar spacemacs-post-user-config-hook-run nil + "Whether `spacemacs-post-user-config-hook' has been run") + +(defvar spacemacs--default-mode-line mode-line-format + "Backup of default mode line format.") +(defvar spacemacs-initialized nil + "Whether or not spacemacs has finished initializing by completing +the final step of executing code in `emacs-startup-hook'.") + +(defun spacemacs/init () + "Perform startup initialization." + (when spacemacs-debugp (spacemacs/init-debug)) + ;; silence ad-handle-definition about advised functions getting redefined + (setq ad-redefinition-action 'accept) + ;; this is for a smoother UX at startup (i.e. less graphical glitches) + (hidden-mode-line-mode) + (spacemacs//removes-gui-elements) + ;; explicitly set the prefered coding systems to avoid annoying prompt + ;; from emacs (especially on Microsoft Windows) + (prefer-coding-system 'utf-8) + ;; TODO move these variables when evil is removed from the bootstrapped + ;; packages. + (setq-default evil-want-C-u-scroll t + ;; `evil-want-C-i-jump' is set to nil to avoid `TAB' being + ;; overlapped in terminal mode. The GUI specific `' is used + ;; instead. + evil-want-C-i-jump nil) + (dotspacemacs/load-file) + (require 'core-configuration-layer) + (dotspacemacs|call-func dotspacemacs/init "Calling dotfile init...") + (dotspacemacs|call-func dotspacemacs/user-init "Calling dotfile user init...") + (setq dotspacemacs-editing-style (dotspacemacs//read-editing-style-config + dotspacemacs-editing-style)) + (configuration-layer/initialize) + ;; default theme + (let ((default-theme (car dotspacemacs-themes))) + (spacemacs/load-theme default-theme) + ;; protect used themes from deletion as orphans + (setq configuration-layer--protected-packages + (append + (delq nil (mapcar 'spacemacs//get-theme-package + dotspacemacs-themes)) + configuration-layer--protected-packages)) + (setq-default spacemacs--cur-theme default-theme) + (setq-default spacemacs--cycle-themes (cdr dotspacemacs-themes))) + ;; font + (spacemacs|do-after-display-system-init + ;; If you are thinking to remove this call to `message', think twice. You'll + ;; break the life of several Spacemacser using Emacs in daemon mode. Without + ;; this, their chosen font will not be set on the *first* instance of + ;; emacsclient, at least if different than their system font. You don't + ;; believe me? Go ahead, try it. After you'll have notice that this was true, + ;; increase the counter bellow so next people will give it more confidence. + ;; Counter = 1 + (message "Setting the font...") + (unless (spacemacs/set-default-font dotspacemacs-default-font) + (spacemacs-buffer/warning + "Cannot find any of the specified fonts (%s)! Font settings may not be correct." + (if (listp (car dotspacemacs-default-font)) + (mapconcat 'car dotspacemacs-default-font ", ") + (car dotspacemacs-default-font))))) + ;; spacemacs init + (setq inhibit-startup-screen t) + (spacemacs-buffer/goto-buffer) + (unless (display-graphic-p) + ;; explicitly recreate the home buffer for the first GUI client + ;; in order to correctly display the logo + (spacemacs|do-after-display-system-init + (kill-buffer (get-buffer spacemacs-buffer-name)) + (spacemacs-buffer/goto-buffer))) + ;; This is set to nil during startup to allow Spacemacs to show buffers opened + ;; as command line arguments. + (setq initial-buffer-choice nil) + (setq inhibit-startup-screen t) + (require 'core-keybindings) + ;; for convenience and user support + (unless (fboundp 'tool-bar-mode) + (spacemacs-buffer/message (concat "No graphical support detected, " + "you won't be able to launch a " + "graphical instance of Emacs" + "with this build."))) + ;; check for new version + (if dotspacemacs-mode-line-unicode-symbols + (setq-default spacemacs-version-check-lighter "[⇪]"))) + +(defun spacemacs//removes-gui-elements () + "Remove the menu bar, tool bar and scroll bars." + ;; removes the GUI elements + (unless (spacemacs/window-system-is-mac) + (when (and (fboundp 'menu-bar-mode) (not (eq menu-bar-mode -1))) + (menu-bar-mode -1))) + (when (and (fboundp 'scroll-bar-mode) (not (eq scroll-bar-mode -1))) + (scroll-bar-mode -1)) + (when (and (fboundp 'tool-bar-mode) (not (eq tool-bar-mode -1))) + (tool-bar-mode -1)) + ;; tooltips in echo-aera + (when (and (fboundp 'tooltip-mode) (not (eq tooltip-mode -1))) + (tooltip-mode -1))) + +(defun spacemacs/maybe-install-dotfile () + "Install the dotfile if it does not exist." + (unless (file-exists-p dotspacemacs-filepath) + (spacemacs-buffer/set-mode-line "Dotfile wizard installer") + (spacemacs//redisplay) + (when (dotspacemacs/install 'with-wizard) + (configuration-layer/sync)))) + +(defun spacemacs/display-and-copy-version () + "Echo the current spacemacs version and copy it." + (interactive) + (let ((msg (format "Spacemacs v.%s" spacemacs-version))) + (message msg) (kill-new msg))) + +(defun display-startup-echo-area-message () + "Change the default welcome message of minibuffer to another one." + (message "Spacemacs is ready.")) + +(defun spacemacs/defer-until-after-user-config (func) + "Call FUNC if dotspacemacs/user-config has been called. Otherwise, +defer call using `spacemacs-post-user-config-hook'." + (if spacemacs-post-user-config-hook-run + (funcall func) + (add-hook 'spacemacs-post-user-config-hook func))) + +(defun spacemacs/setup-startup-hook () + "Add post init processing." + (add-hook + 'emacs-startup-hook + (lambda () + ;; This is set here so that emacsclient will show the startup buffer (and + ;; so that it can be changed in user-config if necessary). It was set to + ;; nil earlier in the startup process to properly handle command line + ;; arguments. + (setq initial-buffer-choice (lambda () (get-buffer spacemacs-buffer-name))) + ;; Ultimate configuration decisions are given to the user who can defined + ;; them in his/her ~/.spacemacs file + (dotspacemacs|call-func dotspacemacs/user-config + "Calling dotfile user config...") + (run-hooks 'spacemacs-post-user-config-hook) + (setq spacemacs-post-user-config-hook-run t) + (when (fboundp dotspacemacs-scratch-mode) + (with-current-buffer "*scratch*" + (funcall dotspacemacs-scratch-mode))) + (configuration-layer/display-summary emacs-start-time) + (spacemacs/check-for-new-version nil spacemacs-version-check-interval) + (setq spacemacs-initialized t)))) + +(defun spacemacs//describe-system-info-string () + "Gathers info about your Spacemacs setup and returns it as a string." + (format + (concat "#### System Info :computer:\n" + "- OS: %s\n" + "- Emacs: %s\n" + "- Spacemacs: %s\n" + "- Spacemacs branch: %s (rev. %s)\n" + "- Graphic display: %s\n" + "- Distribution: %s\n" + "- Editing style: %s\n" + "- Completion: %s\n" + "- Layers:\n```elisp\n%s```\n" + (when (version<= "25.1" emacs-version) + "- System configuration features: %s\n")) + system-type + emacs-version + spacemacs-version + (spacemacs//git-get-current-branch) + (spacemacs/git-get-current-branch-rev) + (display-graphic-p) + dotspacemacs-distribution + dotspacemacs-editing-style + (cond ((configuration-layer/layer-usedp 'helm) + 'helm) + ((configuration-layer/layer-usedp 'ivy) + 'ivy) + (t 'helm)) + (pp-to-string dotspacemacs--configuration-layers-saved) + (bound-and-true-p system-configuration-features))) + +(defun spacemacs/describe-system-info () + "Gathers info about your Spacemacs setup and copies to clipboard." + (interactive) + (let ((sysinfo (spacemacs//describe-system-info-string))) + (kill-new sysinfo) + (message sysinfo) + (message (concat "Information has been copied to clipboard.\n" + "You can paste it in the gitter chat.\n" + "Check the *Messages* buffer if you need to review it")))) + +(defun spacemacs//describe-last-keys-string () + "Gathers info about your Emacs last keys and returns it as a string." + (loop + for key + across (recent-keys) + collect (if (or (integerp key) (symbolp key) (listp key)) + (single-key-description key) + (prin1-to-string key)) + into keys + finally (return + (with-temp-buffer + (set-fill-column 60) + (insert (mapconcat 'identity keys " ")) + (fill-region (point-min) (point-max)) + (format "#### Emacs last keys :musical_keyboard: \n```text\n%s\n```\n" (buffer-string)))))) + +(defun spacemacs/describe-last-keys () + "Gathers info about your Emacs last keys and copies to clipboard." + (interactive) + (let ((lossage (spacemacs//describe-last-keys-string))) + (kill-new lossage) + (message lossage) + (message (concat "Information has been copied to clipboard.\n" + (propertize + "PLEASE REVIEW THE DATA BEFORE GOING FURTHER AS IT CAN CONTAIN SENSITIVE DATA (PASSWORD, ...)\n" + 'face 'font-lock-warning-face) + "You can paste it in the gitter chat.\n" + "Check the *Messages* buffer if you need to review it")))) + +(defun spacemacs/report-issue (arg) + "Open a spacemacs/report-issue-mode buffer prepopulated with + issue report template and system information. + + With prefix arg,include the last keys pressed." + (interactive "P") + (let ((buf + (generate-new-buffer "REPORT_SPACEMACS_ISSUE")) + (system-info + (spacemacs//describe-system-info-string)) + (backtrace + (if (get-buffer "*Backtrace*") + (with-current-buffer "*Backtrace*" + (buffer-substring-no-properties + (point-min) + (min (point-max) 1000))) + "<>")) + (last-keys + (if (and arg (y-or-n-p (concat "Do you really want to " + "include your last pressed keys? It " + "may include some sensitive data."))) + (concat (spacemacs//describe-last-keys-string) "\n") + ""))) + (switch-to-buffer buf) + (insert-file-contents-literally + (concat configuration-layer-template-directory "REPORTING.template")) + (loop + for (placeholder replacement) + in '(("%SYSTEM_INFO%" system-info) + ("%BACKTRACE%" backtrace) + ("(%LAST_KEYS%)\n" last-keys)) + do (save-excursion + (goto-char (point-min)) + (search-forward placeholder) + (replace-match (symbol-value replacement) [keep-case] [literal]))) + (spacemacs/report-issue-mode))) + +(define-derived-mode spacemacs/report-issue-mode markdown-mode "Report-Issue" + "Major mode for reporting issues with Spacemacs. + +When done editing, you can type \\[spacemacs//report-issue-done] to create the +issue on Github. You must be logged in already for this to work. After you see +that the issue has been created successfully, you can close this buffer. + +Markdown syntax is supported in this buffer. + +\\{spacemacs/report-issue-mode-map} +" + (font-lock-add-keywords 'spacemacs/report-issue-mode + '(("\\(<<.*?>>\\)" . 'font-lock-comment-face)))) + +(define-key spacemacs/report-issue-mode-map + (kbd "C-c C-c") 'spacemacs//report-issue-done) +(define-key spacemacs/report-issue-mode-map + (kbd "C-c C-k") 'kill-buffer) + +(with-eval-after-load 'bind-map + (spacemacs/set-leader-keys-for-major-mode 'spacemacs/report-issue-mode + "," 'spacemacs//report-issue-done + "c" 'spacemacs//report-issue-done + "a" 'kill-buffer + "k" 'kill-buffer)) + +(defun spacemacs//report-issue-done () + (interactive) + (let ((url "http://github.com/syl20bnr/spacemacs/issues/new?body=")) + (setq url (url-encode-url (concat url (buffer-string)))) + ;; HACK: Needed because the first `#' is not encoded + (setq url (replace-regexp-in-string "#" "%23" url)) + (browse-url url))) + +(provide 'core-spacemacs) diff --git a/core/core-themes-support.el b/core/core-themes-support.el new file mode 100644 index 0000000..8ce8182 --- /dev/null +++ b/core/core-themes-support.el @@ -0,0 +1,230 @@ +;;; core-themes-support.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defconst emacs-built-in-themes (cons 'default (custom-available-themes)) + "List of emacs built-in themes") + +(defface org-kbd + '((t (:background "LemonChiffon1" :foreground "black" :box + (:line-width 2 :color nil :style released-button)))) + "Face for displaying key bindings in Spacemacs documents." + :group 'org-faces) + +(defconst spacemacs-theme-name-to-package + '( + (alect-black-alt . alect-themes) + (alect-black . alect-themes) + (alect-dark-alt . alect-themes) + (alect-dark . alect-themes) + (alect-light-alt . alect-themes) + (alect-light . alect-themes) + (ample-light . ample-theme) + (ample-flat . ample-theme) + (apropospriate-light . apropospriate-theme) + (apropospriate-dark . apropospriate-theme) + (base16-3024 . base16-theme) + (base16-apathy . base16-theme) + (base16-ashes . base16-theme) + (base16-atelier-cave . base16-theme) + (base16-atelier-dune . base16-theme) + (base16-atelier-estuary . base16-theme) + (base16-atelier-forest . base16-theme) + (base16-atelier-heath . base16-theme) + (base16-atelier-lakeside . base16-theme) + (base16-atelier-plateau . base16-theme) + (base16-atelier-savanna . base16-theme) + (base16-atelier-seaside . base16-theme) + (base16-atelier-sulphurpool . base16-theme) + (base16-bespin . base16-theme) + (base16-brewer . base16-theme) + (base16-bright . base16-theme) + (base16-chalk . base16-theme) + (base16-codeschool . base16-theme) + (base16-darktooth . base16-theme) + (base16-default-dark . base16-theme) + (base16-default-light . base16-theme) + (base16-eighties . base16-theme) + (base16-embers . base16-theme) + (base16-flat . base16-theme) + (base16-github . base16-theme) + (base16-google-dark . base16-theme) + (base16-google-light . base16-theme) + (base16-grayscale-dark . base16-theme) + (base16-grayscale-light . base16-theme) + (base16-green-screen . base16-theme) + (base16-harmonic16-dark . base16-theme) + (base16-harmonic16-light . base16-theme) + (base16-hopscotch . base16-theme) + (base16-ir-black . base16-theme) + (base16-isotope . base16-theme) + (base16-london-tube . base16-theme) + (base16-macintosh . base16-theme) + (base16-marrakesh . base16-theme) + (base16-mocha . base16-theme) + (base16-monokai . base16-theme) + (base16-ocean . base16-theme) + (base16-oceanicnext . base16-theme) + (base16-paraiso . base16-theme) + (base16-phd . base16-theme) + (base16-pico . base16-theme) + (base16-pop . base16-theme) + (base16-railscasts . base16-theme) + (base16-seti-ui . base16-theme) + (base16-shapeshifter . base16-theme) + (base16-solar-flare . base16-theme) + (base16-solarized-dark . base16-theme) + (base16-solarized-light . base16-theme) + (base16-summerfruit-dark . base16-theme) + (base16-summerfruit-light . base16-theme) + (base16-tomorrow-night . base16-theme) + (base16-tomorrow . base16-theme) + (base16-twilight . base16-theme) + (base16-unikitty-dark . base16-theme) + (base16-unikitty-light . base16-theme) + (sanityinc-solarized-dark . color-theme-sanityinc-solarized) + (sanityinc-solarized-light . color-theme-sanityinc-solarized) + (sanityinc-tomorrow-blue . color-theme-sanityinc-tomorrow) + (sanityinc-tomorrow-bright . color-theme-sanityinc-tomorrow) + (sanityinc-tomorrow-day . color-theme-sanityinc-tomorrow) + (sanityinc-tomorrow-eighties . color-theme-sanityinc-tomorrow) + (sanityinc-tomorrow-night . color-theme-sanityinc-tomorrow) + (doom-one . doom-themes) + (doom-molokai . doom-themes) + (solarized-light . solarized-theme) + (solarized-dark . solarized-theme) + (spacemacs-light . spacemacs-theme) + (spacemacs-dark . spacemacs-theme) + (colorsarenice-dark . colorsarenice-theme) + (colorsarenice-light . colorsarenice-theme) + (hemisu-dark . hemisu-theme) + (hemisu-light . hemisu-theme) + (majapahit-dark . majapahit-theme) + (majapahit-light . majapahit-theme) + (material-light . material-theme) + (minimal-light . minimal-theme) + (moe-dark . moe-theme) + (moe-light . moe-theme) + (stekene-dark . stekene-theme) + (stekene-light . stekene-theme) + (brin . sublime-themes) + (dorsey . sublime-themes) + (fogus . sublime-themes) + (graham . sublime-themes) + (granger . sublime-themes) + (hickey . sublime-themes) + (junio . sublime-themes) + (mccarthy . sublime-themes) + (odersky . sublime-themes) + (omtose-darker . omtose-phellack-theme) + (omtose-softer . omtose-phellack-theme) + (ritchie . sublime-themes) + (spolsky . sublime-themes) + (wilson . sublime-themes) + (zonokai-blue . zonokai-theme) + (zonokai-red . zonokai-theme) + (tao-yin . tao-theme) + (tao-yang . tao-theme) + (farmhouse-light . farmhouse-theme) + (farmhouse-dark . farmhouse-theme) + ) + "alist matching a theme name with its package name, required when +package name does not match theme name + `-theme' suffix.") + +(defvar spacemacs-post-theme-change-hook nil + "Hook run after theme has changed.") + +(defun spacemacs//get-theme-package (theme) + "Returns the package theme for the given THEME name." + (cond + ;; built-in + ((memq theme emacs-built-in-themes) nil) + ;; from explicit alist + ((assq theme spacemacs-theme-name-to-package) + (cdr (assq theme spacemacs-theme-name-to-package))) + ;; fallback to -theme + (t (intern (format "%S-theme" theme))))) + +(defun spacemacs/load-theme (theme) + "Load THEME." + ;; Required dependencies for some themes + (condition-case-unless-debug err + (progn + (when (or (eq 'zonokai-blue theme) + (eq 'zonokai-red theme) + (eq 'solarized-light theme) + (eq 'solarized-dark theme)) + (configuration-layer/load-or-install-package 'dash)) + ;; Unless Emacs stock themes + (unless (or (memq theme (custom-available-themes)) + (eq 'default theme)) + (cond + ;; themes with explicitly declared package names + ((assq theme spacemacs-theme-name-to-package) + (let* ((pkg (spacemacs//get-theme-package theme)) + (pkg-dir (configuration-layer/load-or-install-package pkg))) + (when (or (eq 'moe-light theme) + (eq 'moe-dark theme)) + (load-file (concat pkg-dir "moe-light-theme.el")) + (load-file (concat pkg-dir "moe-dark-theme.el"))) + (add-to-list 'custom-theme-load-path pkg-dir))) + (t + ;; other themes + ;; we assume that the package name is suffixed with `-theme' + ;; if not we will handle the special themes as we get issues + ;; in the tracker. + (let ((pkg (spacemacs//get-theme-package theme))) + (configuration-layer/load-or-install-package pkg)))))) + ('error + (setq theme 'default) + (display-warning 'spacemacs + (format (concat "An error occurred while retrieving the " + "theme, using default theme. (error: %s)") + err) + :warning))) + (mapc 'disable-theme custom-enabled-themes) + (if (eq 'default theme) + (progn + (setq spacemacs--cur-theme 'default) + (spacemacs/post-theme-init 'default)) + (load-theme theme t) + ;; explicitly reload the theme for the first GUI client + (eval `(spacemacs|do-after-display-system-init + (load-theme ',theme t))))) + +(defun spacemacs/cycle-spacemacs-theme () + "Cycle through themes defined in `dotspacemacs-themes.'" + (interactive) + (when spacemacs--cur-theme + (disable-theme spacemacs--cur-theme) + ;; if current theme isn't in cycleable themes, start over + (setq spacemacs--cycle-themes + (or (cdr (memq spacemacs--cur-theme dotspacemacs-themes)) + dotspacemacs-themes))) + (setq spacemacs--cur-theme (pop spacemacs--cycle-themes)) + (message "Loading theme %s..." spacemacs--cur-theme) + (spacemacs/load-theme spacemacs--cur-theme)) + +(defadvice load-theme (after spacemacs/load-theme-adv activate) + "Perform post load processing." + (let ((theme (ad-get-arg 0))) + ;; Without this a popup is raised every time emacs25 starts up for + ;; assignment to a free variable + (with-no-warnings + (setq spacemacs--cur-theme theme)) + (spacemacs/post-theme-init theme))) + +(defun spacemacs/post-theme-init (theme) + "Some processing that needs to be done when the current theme +has been changed to THEME." + (interactive) + (run-hooks 'spacemacs-post-theme-change-hook)) + +(provide 'core-themes-support) diff --git a/core/core-toggle.el b/core/core-toggle.el new file mode 100644 index 0000000..e3f88dc --- /dev/null +++ b/core/core-toggle.el @@ -0,0 +1,113 @@ +;;; core-toggle.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 +(require 'core-funcs) + +(defvar spacemacs-toggles '() + "List of all declared toggles. The structure of an element is a +property list (name :func FUNCTION :doc STRING :key STRING).") + +(defmacro spacemacs|add-toggle (name &rest props) + "Add a toggle with NAME symbol. + +This macro creates the following functions: +- spacemacs/toggle-NAME switches on or off depending on the current state +- spacemacs/toggle-NAME-on only switches on if currently disabled +- spacemacs/toggle-NAME-off only switches off if currently enabled + +Avaiblabe PROPS: + +`:status EXPRESSION' + The EXPRESSION to evaluate to get the current status of the toggle. + +`:if EXPRESSION' + If this EXPRESSION evaluate to nil then no attempt to update the toggle + status will be performed. + +`:on BODY' + Evaluate BODY when the toggle is switched on. + +`:off BODY' + Evaluate BODY when the toggle is switched off. + +`:documentation STRING' + STRING describes what the toggle does. + +`:prefix SYMBOL' + SYMBOL is bound to the raw value of prefix-arg (same as calling + (interactive \"P\")) in the wrapper function. + +`:on-message EXPRESSION' + EXPRESSION is evaluated and displayed when the \"on\" toggle is activated. + +`:mode SYMBOL' + If given, must be a minor mode. This overrides `:on', `:off' and `:status'. + +All properties supported by `spacemacs//create-key-binding-form' can be +used." + (declare (indent 1)) + (let* ((wrapper-func (intern (format "spacemacs/toggle-%s" + (symbol-name name)))) + (wrapper-func-status (intern (format "%s-p" wrapper-func))) + (wrapper-func-on (intern (format "%s-on" wrapper-func))) + (wrapper-func-off (intern (format "%s-off" wrapper-func))) + (mode (plist-get props :mode)) + (status (or mode (plist-get props :status))) + (condition (plist-get props :if)) + (doc (plist-get props :documentation)) + (on-body (if mode `((,mode)) (spacemacs/mplist-get props :on))) + (off-body (if mode `((,mode -1)) (spacemacs/mplist-get props :off))) + (prefix-arg-var (plist-get props :prefix)) + (on-message (plist-get props :on-message)) + (bindkeys (spacemacs//create-key-binding-form props wrapper-func)) + ;; we evaluate condition and status only if they are a list or + ;; a bound symbol + (status-eval `(and (or (and (symbolp ',status) (boundp ',status)) + (listp ',status)) + ,status))) + `(progn + (push (append '(,name) '(:function ,wrapper-func + :predicate ,wrapper-func-status) ',props) + spacemacs-toggles) + ;; toggle function + (defun ,wrapper-func ,(if prefix-arg-var (list prefix-arg-var) ()) + ,(format "Toggle %s on and off." (symbol-name name)) + ,(if prefix-arg-var '(interactive "P") '(interactive)) + (if (or (null ',condition) + (and (or (and (symbolp ',condition) (boundp ',condition)) + (listp ',condition)) + ,condition)) + (if (,wrapper-func-status) + (progn ,@off-body + (when (called-interactively-p 'any) + (message ,(format "%s disabled." name)))) + ,@on-body + (when (called-interactively-p 'any) + (message ,(or on-message (format "%s enabled." name))))) + (message "This toggle is not supported."))) + ;; predicate function + (defun ,wrapper-func-status () + ,(format "Check if %s is on." (symbol-name name)) + ,status-eval) + ;; Only define on- or off-functions when status is available + ,@(when status + ;; on-function + `((defun ,wrapper-func-on () + ,(format "Toggle %s on." (symbol-name name)) + (interactive) + (unless (,wrapper-func-status) (,wrapper-func))) + ;; off-function + (defun ,wrapper-func-off () + ,(format "Toggle %s off." (symbol-name name)) + (interactive) + (when (,wrapper-func-status) (,wrapper-func))))) + ,@bindkeys))) + +(provide 'core-toggle) diff --git a/core/core-transient-state.el b/core/core-transient-state.el new file mode 100644 index 0000000..5e572a0 --- /dev/null +++ b/core/core-transient-state.el @@ -0,0 +1,193 @@ +;;; -*- lexical-binding: t -*- +;;; core-transient-state.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Justin Burkett +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs//transient-state-func-name (name) + "Return the name of the transient state function." + (intern (format "spacemacs/%S-transient-state" name))) + +(defun spacemacs//transient-state-props-var-name (name) + "Return the name of the variable use to store the transient state properties." + (intern (format "spacemacs--%S-transient-state-props" name))) + +(defun spacemacs//transient-state-body-func-name (name) + "Return the name of the transient state function." + (intern (format "spacemacs/%S-transient-state/body" name))) + +(defun spacemacs//transient-state-heads-name (name) + "Return the name of the transient state heads variable which +holds the key bindings." + (intern (format "spacemacs/%S-transient-state/heads" name))) + +(defun spacemacs//transient-state-adjust-bindings (bindings to-remove to-add) + (append + (cl-remove-if + (lambda (bnd) + (and (boundp to-remove) + (listp (symbol-value to-remove)) + (member (car bnd) (symbol-value to-remove)))) + bindings) + (when (and (boundp to-add) + (listp (symbol-value to-add))) + (symbol-value to-add)))) + +(defun spacemacs//transient-state-make-doc + (transient-state docstring &optional body) + "Use `hydra' internal function to format and apply DOCSTRING." + (let ((heads (spacemacs//transient-state-heads-name transient-state))) + (setq body (if body body '(nil nil :hint nil :foreign-keys nil))) + (eval + (hydra--format nil body docstring (symbol-value heads))))) + +(defmacro spacemacs|transient-state-format-hint (name var hint) + "Format HINT and store the result in VAR for transient state NAME." + (declare (indent 1)) + `(add-hook 'spacemacs-post-user-config-hook + (lambda () + (let* ((props-var ,(spacemacs//transient-state-props-var-name + name)) + (prop-hint (cadr (assq 'hint props-var))) + (prop-columns (cadr (assq 'columns props-var))) + (prop-foreign-keys (cadr (assq 'foreign-keys props-var))) + (prop-entry-sexp (cadr (assq 'entry-sexp props-var))) + (prop-exit-sexp (cadr (assq 'exit-sexp props-var)))) + (setq ,var (spacemacs//transient-state-make-doc + ',name + ,hint + `(nil + nil + :hint ,prop-hint + :columns ,prop-columns + :foreign-keys ,prop-foreign-keys + :body-pre ,prop-entry-sexp + :before-exit ,prop-exit-sexp))) + 'append)))) + +(defface spacemacs-transient-state-title-face + `((t :inherit mode-line)) + "Face for title of transient states.") + +(defmacro spacemacs|define-transient-state (name &rest props) + "Define a transient state called NAME. +NAME is a symbol. +Available PROPS: +`:on-enter SEXP' + Evaluate SEXP when the transient state is switched on. +`:on-exit SEXP' + Evaluate SEXP when leaving the transient state. +`:doc STRING or SEXP' + A docstring supported by `defhydra'. +`:additional-docs cons cells (VARIABLE . STRING)' + Additional docstrings to format and store in the corresponding VARIABLE. + This can be used to dynamically change the docstring. +`:title STRING' + Provide a title in the header of the transient state +`:columns INTEGER' + Automatically generate :doc with this many number of columns. +`:hint BOOLEAN' + Whether to display hints. Default is nil. +`:hint-is-doc BOOLEAN' + Whether the hints act as a documentation, the only effect of this value is + to change where the hints are displayed. If non-nil the hints are displayed + on the same line as the `:title', otherwise they are displayed below it. + Default is nil. +`:dynamic-hint SEXP' + An sexp evaluating to a string for dynamic hinting. + When provided `:hint' has no effect. Default is nil. +`:foreign-keys SYMBOL' + What to do when keys not bound in the transient state are entered. This + can be nil (default), which means to exit the transient state, warn, + which means to not exit but warn the user that the key is not part + of the transient state, or run, which means to try to run the key binding + without exiting. +`:bindings EXPRESSIONS' + One or several EXPRESSIONS with the form + (STRING1 SYMBOL1 DOCSTRING + :exit SYMBOL) + where: + - STRING1 is a key to be bound to the function or key map SYMBOL1. + - DOCSTRING is a STRING or an SEXP that evaluates to a string + - :exit SYMBOL or SEXP, if non nil then pressing this key will + leave the transient state (default is nil). + Important note: due to inner working of transient-maps in Emacs + the `:exit' keyword is evaluate *before* the actual execution + of the bound command. +All properties supported by `spacemacs//create-key-binding-form' can be +used." + (declare (indent 1)) + (let* ((func (spacemacs//transient-state-func-name name)) + (props-var (spacemacs//transient-state-props-var-name name)) + (body-func (spacemacs//transient-state-body-func-name name)) + (add-bindings + (intern (format "spacemacs-%s-transient-state-add-bindings" name))) + (remove-bindings + (intern (format "spacemacs-%s-transient-state-remove-bindings" name))) + (bindings (spacemacs/mplist-get props :bindings)) + (doc (or (plist-get props :doc) "\n")) + (title (plist-get props :title)) + (hint-var (intern (format "%s/hint" func))) + (columns (plist-get props :columns)) + (entry-sexp (plist-get props :on-enter)) + (exit-sexp (plist-get props :on-exit)) + (hint (plist-get props :hint)) + (hint-doc-p (plist-get props :hint-is-doc)) + (dyn-hint (plist-get props :dynamic-hint)) + (additional-docs (spacemacs/mplist-get props :additional-docs)) + (foreign-keys (plist-get props :foreign-keys)) + (bindkeys (spacemacs//create-key-binding-form props body-func))) + `(progn + (defvar ,props-var nil + ,(format (concat "Association list containing a copy of some " + "properties of the transient state %S. Those " + "properties are used in macro " + "`spacemacs|transient-state-format-hint'.") name)) + (add-to-list ',props-var '(hint ,hint)) + (add-to-list ',props-var '(columns ,columns)) + (add-to-list ',props-var '(foreign-keys ,foreign-keys)) + (add-to-list ',props-var '(entry-sexp ,entry-sexp)) + (add-to-list ',props-var '(exit-sexp ,exit-sexp)) + (spacemacs/defer-until-after-user-config + '(lambda () + (eval + (append + '(defhydra ,func + (nil nil + :hint ,hint + :columns ,columns + :foreign-keys ,foreign-keys + :body-pre ,entry-sexp + :before-exit ,exit-sexp) + ,doc) + (spacemacs//transient-state-adjust-bindings + ',bindings ',remove-bindings ',add-bindings))) + (when ,title + (let ((guide (concat "[" (propertize "KEY" 'face 'hydra-face-blue) + "] exits state [" + (if ',foreign-keys + (propertize "KEY" 'face 'hydra-face-pink) + (propertize "KEY" 'face 'hydra-face-red)) + "] will not exit"))) + ;; (add-face-text-property 0 (length guide) '(:height 0.9) t guide) + (add-face-text-property 0 (length guide) 'italic t guide) + (setq ,hint-var + (list 'concat + (when dotspacemacs-show-transient-state-title + (concat + (propertize + ,title + 'face 'spacemacs-transient-state-title-face) + (if ,hint-doc-p " " "\n"))) ,hint-var + ',dyn-hint + (when dotspacemacs-show-transient-state-color-guide + (concat "\n" guide)))))) + ,@bindkeys))))) + +(provide 'core-transient-state) diff --git a/core/core-use-package-ext.el b/core/core-use-package-ext.el new file mode 100644 index 0000000..f9c7040 --- /dev/null +++ b/core/core-use-package-ext.el @@ -0,0 +1,50 @@ +;;; core-use-package-ext.el --- Spacemacs Core File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 +(defconst spacemacs--use-package-add-hook-keywords '(:pre-init + :post-init + :pre-config + :post-config)) + +(defmacro spacemacs|use-package-add-hook (name &rest plist) + "Add post hooks to `:init' or `:config' arguments of an existing +configuration. + +In order to use this macro the variable `use-package-inject-hooks' +must be non-nil. + +This is useful in the dotfile to override the default configuration +of a package. + +Usage: + + (spacemacs|use-package-add-hook package-name + [:keyword [option]]...) + +:pre-init Code to run before the default `:init' configuration. +:post-init Code to run after the default `:init' configuration. +:pre-config Code to run before the default `:config' configuration. +:post-config Code to run after the default `:config' configuration. + +In practice the most useful hook is the `:post-config' where you can +override lazy-loaded settings." + (declare (indent 1)) + (let ((name-symbol (if (stringp name) (intern name) name)) + (expanded-forms '())) + (dolist (keyword spacemacs--use-package-add-hook-keywords) + (let ((body (spacemacs/mplist-get plist keyword))) + (when body + (let ((hook (intern (format "use-package--%S--%s-hook" + name-symbol + (substring (format "%s" keyword) 1))))) + (push `(add-hook ',hook (lambda nil ,@body)) expanded-forms))))) + `(progn ,@expanded-forms))) + +(provide 'core-use-package-ext) diff --git a/core/info/quickhelp.txt b/core/info/quickhelp.txt new file mode 100644 index 0000000..0591722 --- /dev/null +++ b/core/info/quickhelp.txt @@ -0,0 +1,28 @@ +Press [TAB] or [J] to move to next button. + +Press [Shift-TAB] or [K] to move to previous button. + +Press [r] to jump to recent file list if it is enabled. + +Press [p] to jump to project list if it is enabled. + +Press [b] to jump to bookmark list if it is enabled. + +Press [o] to jump to any link or button. + +Press [m] to jump to the top menu. + +Press [SPC] (in Vim editing style) or [Alt-m] (in Emacs editing style) to access +Spacemacs commands (will list only the Vim style ones for the rest of this +help). + +Press [SPC f e d] (or [Alt-m f e d] in Emacs style) to access .spacemacs file. + +Press [SPC h SPC] to access a list of documentation and supported layers. You +can type anything to narrow to a specific feature i.e. "python" for Python +layer. There are multiple lists and you can press [Ctrl-o] to switch between +them. + +When reading a document, you can use [SPC s j] to jump to a heading. + +Please consult Spacemacs documentation from [SPC h SPC] for more details. diff --git a/core/info/release-notes/0.101.txt b/core/info/release-notes/0.101.txt new file mode 100644 index 0000000..be5f02a --- /dev/null +++ b/core/info/release-notes/0.101.txt @@ -0,0 +1,10 @@ +New layers: +company-mode layer has been replaced by the new layer auto-completion. +Org packages have been moved to the new layer org. +Flycheck has been moved to the new layer syntax-checking. +Be sure to update your dotfile to add these layers. + +Init functions: +The init function /init- is now mandatory. Any package +without an explicit init function will be ignored and uninstalled by +Spacemacs. diff --git a/core/info/release-notes/0.102.txt b/core/info/release-notes/0.102.txt new file mode 100644 index 0000000..1305f63 --- /dev/null +++ b/core/info/release-notes/0.102.txt @@ -0,0 +1,34 @@ +1. Dotfile + +It is now possible to reload the dotfile and layers anywhere with `SPC f e +R`. This key binding *replaces* the old `C-c C-c` and `SPC m c c` only +available in the dotfile. + +*Important* You should replace your `(defvar -packages ...)`, +`(defvar -pre-extensions ...)`, `(defvar -post-extensions ...)` +and `(defvar -excluded-packages ...)` by `(setq ...)`. This will +allow to install newly added packages to a layer without restarting spacemacs +by pressing `SPC f e R`. Be sure to remove the docstring when replacing the +`defvar` since `setq` does not take a third argument. + +`:variables` keyword now behaves like a regular `setq` so you'll have to +quote any value appropriately. + +2. Emacs lisp and Shell config are now in their own layers + +Be sure to add the new layers `emacs-lisp` and `shell` to your dotfile to +continue to enjoy the emacs-lisp and shell configurations of Spacemacs. + +Also be sure to check the key binding `SPC '` to open a shell buffer. + +3. Key bindings + +`SPC b s` to switch buffer is now on `SPC b b`. +`SPC f f` uses helm instead of ido, set the new variable. +`dotspacemacs-use-ido` to t to get back the old ido behavior. +`TAB` and `C-z` in helm buffers have been *swapped*. + +4. Sentence delimiter + +Sentence delimiter is now a *single space* as opposed to Emacs default +which is double spaces. diff --git a/core/info/release-notes/0.103.txt b/core/info/release-notes/0.103.txt new file mode 100644 index 0000000..bc67213 --- /dev/null +++ b/core/info/release-notes/0.103.txt @@ -0,0 +1,36 @@ +1. Magit 2.1 + +Spacemacs is now compatible only with Magit 2.1 and later, be +sure to *update your packages* (at least Magit). + +2. Helm + +Helm input pattern is now displayed in its header instead of the +minibuffer. + +3. Git layer + +The `git` layer has been split into two layers: `git` and `github` so +the layer variable `git-enabled-github-support` is deprecated, you +have to *add the layer `github` in your dotfile*. + +The `git-gutter` has been replaced by `diff-hl`. This package is in +the new layer `version-control`, be sure to *add this new layer to +your dotfile*. + +4. Auctex layer + +The `auctex` layer has been renamed `latex`, be sure to *update your +dotfile* if you use this layer. + +5. Erlang/Elixir layer + +The erlang/elixir layer has been split into two layers `erlang` and +`elixir`, be sure to *update your dotfile* if you use these layers. + +6. Key bindings changes + +Projectile key bindings changes: +~SPC p e~ is now ~SPC p r~ (recent files), +~SPC p R~ is now ~SPC p G~ (regenerate tags), +~SPC p r~ is now ~SPC p R~ (replace). diff --git a/core/info/release-notes/0.104.txt b/core/info/release-notes/0.104.txt new file mode 100644 index 0000000..fa6ac4d --- /dev/null +++ b/core/info/release-notes/0.104.txt @@ -0,0 +1,44 @@ +1. Org + +`org-plus-contrib` is now installed from org ELPA repository, you may +encounter strange behaviours from Org. In this case delete the `org` +directory in the `elpa` directory and restart Emacs. + +2. Helm + +`Helm` key bindings have been slightly adjusted: + +- in `helm-find-files` (`SPC f f`): now `C-h` move up a directory + and `C-l` enter the selected directory. `describe-key` command is + available on `C-S-h` + +- in other `helm` buffers ~C-h~ is used to go to the next source + and `C-l` is the same as `RET`. `describe-key` command is also + available on `C-S-h`. + +3. Vim keys + +`Y` has been remapped to `y$`, if you don't like this behavior you can +set the variable `dotspacemacs-remap-Y-to-y$` to nil in your dotfile. + +4. Guide-key + +`guide-key` has been replaced by `which-key`, you may encounter issues +if you have some `guide-key` custom configuration, remove any `guide-key` +configuration and check the options offered by `which-key`. + +5. Bookmarks + +The `bookmark` save file has been moved to the `.cache` directory, if +you have a bookmark file `~/.emacs.d/bookmarks` then you'll have to move +it to file `~/.emacs.d/.cache/bookmarks` + +6. Ruby on Rails + +Ruby on Rails framework has now its own layer called `ruby-on-rails`, +be sure to add this layer to your dotfile if you use it. + +7. Django + +Django framework has now its own layer called `django`, +be sure to add this layer to your dotfile if you use it. diff --git a/core/info/release-notes/0.105.txt b/core/info/release-notes/0.105.txt new file mode 100644 index 0000000..e114293 --- /dev/null +++ b/core/info/release-notes/0.105.txt @@ -0,0 +1,32 @@ +1. Key binding changes + +- `SPC l` for `avy-goto-line` is now under `SPC y`. `SPC l` is now for + spacemacs layouts. + +- `SPC a p` is now for `list-processes` and `SPC a P` for `proced`, + `paradox` to list ELPA packages is now on `SPC a k`. + +- `SPC s l` is now used to bring back last search buffer and `SPC s j` + is for jumping into a file using `imenu` (was `SPC s l`). + +- In home buffer, jumping to bookmark list is now on ~b~. + +2. Magit + +Magit key bindings have been revamped thanks to the official `evil-magit` +package. `evil-magit` provides a faithful port of Magit UX using Vim key +bindings. If you want to continue to use the old evilified bindings add +`evil-magit` package to the `dotspacemacs-excluded-packages` variable +of your dotfile. + +3. Projectile + +Caching is now disabled by default, while it should not break anything, +if you have some functions relying on caching being enabled be sure to +activate it explicitly with `(setq projectile-enable-caching t)`. + +4. Ruby + +The default major mode is now the Emacs built-in `ruby-mode`. If you want +to continue to use `enh-ruby-mode` set the layer variable +`ruby-enable-enh-ruby-mode` to `t`. diff --git a/core/info/release-notes/0.200.txt b/core/info/release-notes/0.200.txt new file mode 100644 index 0000000..30a241f --- /dev/null +++ b/core/info/release-notes/0.200.txt @@ -0,0 +1,16 @@ +The Autumnal Cleanup 2016 is complete! Thank you to everyone +who helped keep the issue tracker clean. In particular + +1. gilbertw1 (230 issues, 27.09%) +2. NJBS (98 issues, 11.54%) +3. mahinshaw (90 issues, 10.60%) +4. smile13241324 (75 issues, 8.83%) +5. deb0ch (66 issues, 7.77%) + +as well as bleggett, jredville, lazywithclass, rgrinberg, +kdelwat, cmr, bmag, ksjogo, ekmecic, cro, inirudebwoy, +mwillsey, robbyoconnor and alimoeeny. And of course, last but +not least, the hard working organizer d12frosted! + +For more info on release 0.200.x see the newsletter #01 at +[[http://spacemacs.org/news/news01.html]] diff --git a/core/info/release-notes/af-1.01.txt b/core/info/release-notes/af-1.01.txt new file mode 100644 index 0000000..70c43e1 --- /dev/null +++ b/core/info/release-notes/af-1.01.txt @@ -0,0 +1,38 @@ + The new version of Spacemacs has arrived! + +This version brings Emacs to a whole new level by embedding Zerovim technologies +through a state of the art message passing interface, this is Emacs for the next +next NEXT century. + +This is so powerful that we decided to rename Spacemacs! + + Zemacs: Emacs to THE MAX! + +- Zerovim ambitious refactor of the (-1)Vim code base directly improves the code +quality of Emacs while still retaining its important [implementation tricks]. + +- Elisp can now be transpiled to Vimscript which can be transpiled to Lua which +can be used to code plugins for Zerovim, so now Emacs can have true native Vim +plugins in Lua code coded in Elisp. +Note: For performance reasons native plugins are transpiled to Elisp before +being executed. + +- You can now type in [Atom] in Emacs by sharing a Zerovim session. Zemacs is +shipped with a groundbreaking new UI using the new VR headsets capabilities: +by projecting the Atom web-based interface on the left eye and the Emacs +text-based interface on the right eye (also available the `swap-the-eyes' major +mode tailored for colour-blind people) we can create the perfect blend of Emacs +and Atom, instantaneous context switching with the blink of an eye. Welcome +to the definitive GUI: + + Zemacstom, the editor for the next next NEXT millennium. + + ------------------------------------------- + +This text is a parody of Neovim whose only purpose is to be funny (the text, not +Neovim!). Neovim is a popular fork of Vim, you can try it and contribute to it +by visiting this [link] or maybe [this one]. + +This prank will self-destruct the 2nd April 2016. + +Type ~SPC m aprilfool~ to start working :-) diff --git a/core/libs/ht.el b/core/libs/ht.el new file mode 100644 index 0000000..0d5d8b0 --- /dev/null +++ b/core/libs/ht.el @@ -0,0 +1,280 @@ +;;; ht.el --- The missing hash table library for Emacs + +;; Copyright (C) 2013 Wilfred Hughes + +;; Author: Wilfred Hughes +;; Version: 2.0 +;; Keywords: hash table, hash map, hash + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; The missing hash table utility library for Emacs. +;; +;; See documentation on https://github.com/Wilfred/ht.el + +;;; Code: + +(eval-when-compile (require 'cl)) ;; dolist + +(defmacro ht (&rest pairs) + "Create a hash table with the key-value pairs given. +Keys are compared with `equal'. + +\(fn (KEY-1 VALUE-1) (KEY-2 VALUE-2) ...)" + (let* ((table-symbol (make-symbol "ht-temp")) + (assignments + (mapcar + (lambda (pair) `(ht-set! ,table-symbol ,@pair)) + pairs))) + `(let ((,table-symbol (ht-create))) + ,@assignments + ,table-symbol))) + +(defun ht-create (&optional test) + "Create an empty hash table. + +TEST indicates the function used to compare the hash +keys. Default is `equal'. It can be `eq', `eql', `equal' or a +user-supplied test created via `define-hash-table-test'." + (make-hash-table :test (or test 'equal))) + +(defun ht<-alist (alist) + "Create a hash table with initial values according to ALIST." + (let ((h (ht-create))) + ;; the first key-value pair in an alist gets precedence, so we + ;; start from the end of the list: + (dolist (pair (reverse alist) h) + (let ((key (car pair)) + (value (cdr pair))) + (ht-set! h key value))))) + +(defalias 'ht-from-alist 'ht<-alist) + +;; based on the excellent -partition from dash.el, but we aim to be self-contained +(defun ht/group-pairs (list) + "Return a new list with the items in LIST grouped into pairs. +Errors if LIST doesn't contain an even number of elements." + (let ((result) + (sublist) + (len 0)) + + (while list + ;; take the head of LIST and push onto SUBLIST + (setq sublist (cons (car list) sublist)) + (setq list (cdr list)) + + (setq len (1+ len)) + + (when (= len 2) + ;; push this two-item list onto RESULT + (setq result (cons (nreverse sublist) result)) + (setq sublist nil) + (setq len 0))) + + (when sublist (error "Expected an even number of elements")) + (nreverse result))) + +(defun ht<-plist (plist) + "Create a hash table with initial values according to PLIST." + (let ((h (ht-create))) + (dolist (pair (ht/group-pairs plist) h) + (let ((key (car pair)) + (value (cadr pair))) + (ht-set! h key value))))) + +(defalias 'ht-from-plist 'ht<-plist) + +(defun ht-get (table key &optional default) + "Look up KEY in TABLE, and return the matching value. +If KEY isn't present, return DEFAULT (nil if not specified)." + (gethash key table default)) + +(defun ht-set! (table key value) + "Associate KEY in TABLE with VALUE." + (puthash key value table) + nil) + +(defalias 'ht-set 'ht-set!) + +(defun ht-update! (table from-table) + "Update TABLE according to every key-value pair in FROM-TABLE." + (maphash + (lambda (key value) (puthash key value table)) + from-table) + nil) + +(defalias 'ht-update 'ht-update!) + +(defun ht-merge (&rest tables) + "Crete a new tables that includes all the key-value pairs from TABLES. +If multiple have tables have the same key, the value in the last +table is used." + (let ((merged (ht-create))) + (mapc (lambda (table) (ht-update! merged table)) tables) + merged)) + +(defun ht-remove! (table key) + "Remove KEY from TABLE." + (remhash key table)) + +(defalias 'ht-remove 'ht-remove!) + +(defun ht-clear! (table) + "Remove all keys from TABLE." + (clrhash table) + nil) + +(defalias 'ht-clear 'ht-clear!) + +(defun ht-map (function table) + "Apply FUNCTION to each key-value pair of TABLE, and make a list of the results. +FUNCTION is called with two arguments, KEY and VALUE." + (let (results) + (maphash + (lambda (key value) + (push (funcall function key value) results)) + table) + results)) + +(defmacro ht-amap (form table) + "Anaphoric version of `ht-map'. +For every key-value pair in TABLE, evaluate FORM with the +variables KEY and VALUE bound." + `(ht-map (lambda (key value) ,form) ,table)) + +(defun ht-keys (table) + "Return a list of all the keys in TABLE." + (ht-amap key table)) + +(defun ht-values (table) + "Return a list of all the values in TABLE." + (ht-amap value table)) + +(defun ht-items (table) + "Return a list of two-element lists '(key value) from TABLE." + (ht-amap (list key value) table)) + +(defalias 'ht-each 'maphash + "Apply FUNCTION to each key-value pair of TABLE. +Returns nil, used for side-effects only.") + +(defmacro ht-aeach (form table) + "Anaphoric version of `ht-each'. +For every key-value pair in TABLE, evaluate FORM with the +variables key and value bound." + `(ht-each (lambda (key value) ,form) ,table)) + +(defun ht->plist (table) + "Return a flat list '(key1 value1 key2 value2...) from TABLE. + +Note that hash tables are unordered, so this cannot be an exact +inverse of `ht<-plist'. The following is not guaranteed: + +\(let ((data '(a b c d))) + (equalp data + (ht->plist (ht<-plist data))))" + (apply 'append (ht-items table))) + +(defalias 'ht-to-plist 'ht->plist) + +(defun ht-copy (table) + "Return a shallow copy of TABLE (keys and values are shared)." + (copy-hash-table table)) + +(defun ht->alist (table) + "Return a list of two-element lists '(key . value) from TABLE. + +Note that hash tables are unordered, so this cannot be an exact +inverse of `ht<-alist'. The following is not guaranteed: + +\(let ((data '((a . b) (c . d)))) + (equalp data + (ht->alist (ht<-alist data))))" + (ht-amap (cons key value) table)) + +(defalias 'ht-to-alist 'ht->alist) + +(defalias 'ht? 'hash-table-p) + +(defalias 'ht-p 'hash-table-p) + +(defun ht-contains? (table key) + "Return 't if TABLE contains KEY." + (not (eq (ht-get table key 'ht--not-found) 'ht--not-found))) + +(defalias 'ht-contains-p 'ht-contains?) + +(defun ht-size (table) + "Return the actual number of entries in TABLE." + (hash-table-count table)) + +(defun ht-empty? (table) + "Return true if the actual number of entries in TABLE is zero." + (zerop (ht-size table))) + +(defun ht-select (function table) + "Return a hash table containing all entries in TABLE for which +FUNCTION returns a truthy value. + +FUNCTION is called with two arguments, KEY and VALUE." + (let ((results (ht-create))) + (ht-each + (lambda (key value) + (when (funcall function key value) + (ht-set! results key value))) + table) + results)) + +(defun ht-reject (function table) + "Return a hash table containing all entries in TABLE for which +FUNCTION returns a falsy value. + +FUNCTION is called with two arguments, KEY and VALUE." + (let ((results (ht-create))) + (ht-each + (lambda (key value) + (unless (funcall function key value) + (ht-set! results key value))) + table) + results)) + +(defun ht-reject! (function table) + "Delete entries from TABLE for which FUNCTION returns a falsy value. + +FUNCTION is called with two arguments, KEY and VALUE." + (ht-each + (lambda (key value) + (when (funcall function key value) + (remhash key table))) + table) + nil) + +(defalias 'ht-delete-if 'ht-reject!) + +(defun ht-find (function table) + "Return (key, value) from TABLE for which FUNCTION returns a truthy value. +Return nil otherwise. + +FUNCTION is called with two arguments, KEY and VALUE." + (catch 'break + (ht-each + (lambda (key value) + (when (funcall function key value) + (throw 'break (list key value)))) + table))) + +(provide 'ht) +;;; ht.el ends here diff --git a/core/libs/mocker.el b/core/libs/mocker.el new file mode 100644 index 0000000..c06080e --- /dev/null +++ b/core/libs/mocker.el @@ -0,0 +1,368 @@ +;;; mocker.el --- mocking framework for emacs + +;; Copyright (C) 2011 Yann Hodique. + +;; Author: Yann Hodique +;; Keywords: lisp, testing +;; Version: 0.3.0 +;; Package-Requires: ((eieio "1.3") (el-x "0.2.4")) + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; + +;;; Code: + +(eval-when-compile + (require 'cl)) + +(require 'eieio) + +(eval-and-compile + ;; use dflet from el-x if available + (if (require 'dflet nil t) + (defalias 'mocker-flet 'dflet) + ;; fallback to regular flet, hoping it's still there + (defalias 'mocker-flet 'flet))) + +(defvar mocker-mock-default-record-cls 'mocker-record) + +(put 'mocker-mock-error 'error-conditions '(mocker-mock-error error)) +(put 'mocker-mock-error 'error-message "Mocker mock error") + +(put 'mocker-record-error 'error-conditions '(mocker-record-error error)) +(put 'mocker-record-error 'error-message "Mocker record error") + +(defun mocker--plist-remove (plist key) + ;; courtesy of pjb + (if (eq (car plist) key) (cdr (cdr plist)) + (cons (car plist) + (cons (cadr plist) + (mocker--plist-remove (cddr plist) key))))) + +;;; Mock object +(defclass mocker-mock () + ((function :initarg :function :type symbol) + (orig-def :initarg :orig-def :initform nil) + (argspec :initarg :argspec :initform nil :type list) + (ordered :initarg :ordered :initform t) + (records :initarg :records :initform nil :type list))) + +(defmethod constructor :static ((mock mocker-mock) newname &rest args) + (let* ((obj (call-next-method)) + (recs (oref obj :records)) + (func (oref obj :function))) + (oset obj :orig-def (when (fboundp func) (symbol-function func))) + (oset obj :records nil) + (mapc #'(lambda (r) + (apply 'mocker-add-record obj r)) + recs) + obj)) + +(defmethod mocker-add-record ((mock mocker-mock) &rest args) + (object-add-to-list mock :records + (let ((cls mocker-mock-default-record-cls) + (tmp (plist-get args :record-cls))) + (when tmp + (setq cls tmp + args (mocker-read-record cls + (mocker--plist-remove + args :record-cls)))) + (apply 'make-instance cls :-mock mock + :-sym (make-symbol "unique") args)) + t)) + +(defmethod mocker-fail-mock ((mock mocker-mock) args) + (signal 'mocker-mock-error + (list (format (concat "Unexpected call to mock `%s'" + " with input `%s'") + (oref mock :function) args)))) + +(defvar mocker-inhibit nil) + +(defmethod mocker-run ((mock mocker-mock) &rest args) + (if (not mocker-inhibit) + (let* ((mocker-inhibit t) + (rec (mocker-find-active-record mock args)) + (ordered (oref mock :ordered))) + (cond ((null rec) + (mocker-fail-mock mock args)) + ((or (not ordered) (mocker-test-record rec args)) + (mocker-run-record rec args)) + (t + (mocker-fail-record rec args)))) + (apply (oref mock :orig-def) args))) + +(defmethod mocker-find-active-record ((mock mocker-mock) args) + (let ((first-match (lambda (pred seq) + (let ((x nil)) + (while (and seq + (not (setq x (funcall pred (pop seq)))))) + x)))) + (let* ((ordered (oref mock :ordered)) + rec) + (if ordered + (setq rec (funcall + first-match + #'(lambda (r) + (when (oref r :-active) + (if (mocker-test-record r args) + (progn + (mocker-use-record r) + r) + (mocker-skip-record r args)))) + (oref mock :records))) + (setq rec (funcall + first-match + #'(lambda (r) + (and + (oref r :-active) + (mocker-test-record r args) + (progn + (mocker-use-record r) + r))) + (oref mock :records)))) + rec))) + +(defmethod mocker-verify ((mock mocker-mock)) + (mapc #'(lambda (r) (when (and (oref r :-active) + (< (oref r :-occurrences) + (oref r :min-occur))) + (signal 'mocker-record-error + (list (format + (concat "Expected call to mock `%s'," + " with input like %s," + " was not run.") + (oref mock :function) + (mocker-get-record-expectations r)))))) + (oref mock :records))) + +;;; Mock record base object +(defclass mocker-record-base () + ((min-occur :initarg :min-occur :initform 1 :type number) + (max-occur :initarg :max-occur :initform nil :type (or null number)) + (-occur :initarg :occur :initform nil :type (or null number)) + (-occurrences :initarg :-occurrences :initform 0 :type number + :protection :protected) + (-mock :initarg :-mock) + (-active :initarg :-active :initform t :protection :protected) + (-sym :initarg :-sym))) + +(defmethod constructor :static ((rec mocker-record-base) newname &rest args) + (let* ((obj (call-next-method)) + (occur (oref obj :occur))) + (when occur + (oset obj :min-occur (max (oref obj :min-occur) + occur)) + (oset obj :max-occur (if (oref obj :max-occur) + (min (oref obj :max-occur) occur) + occur))) + obj)) + +(defmethod mocker-read-record :static ((rec mocker-record-base) spec) + spec) + +(defmethod mocker-use-record ((rec mocker-record-base)) + (let ((max (oref rec :max-occur)) + (n (1+ (oref rec :-occurrences)))) + (oset rec :-occurrences n) + (when (and (not (null max)) + (= n max)) + (oset rec :-active nil)))) + +(defmethod mocker-skip-record ((rec mocker-record-base) args) + (if (>= (oref rec :-occurrences) + (oref rec :min-occur)) + (oset rec :-active nil) + (mocker-fail-record rec args))) + +(defmethod mocker-test-record ((rec mocker-record-base) args) + (error "not implemented in base class")) + +(defmethod mocker-run-record ((rec mocker-record-base) args) + (error "not implemented in base class")) + +(defmethod mocker-get-record-expectations ((rec mocker-record-base))) + +(defmethod mocker-fail-record ((rec mocker-record-base) args) + (signal 'mocker-record-error + (list (format (concat "Violated record while mocking `%s'." + " Expected input like: %s, got: `%s' instead") + (oref (oref rec :-mock) :function) + (mocker-get-record-expectations rec) + args)))) + +;;; Mock input recognizer +(defclass mocker-input-record (mocker-record-base) + ((input :initarg :input :initform nil :type list) + (input-matcher :initarg :input-matcher :initform nil))) + +(defmethod constructor :static ((rec mocker-input-record) newname &rest args) + (let* ((obj (call-next-method))) + (when (or (not (slot-boundp obj :max-occur)) + (and (oref obj :max-occur) + (< (oref obj :max-occur) + (oref obj :min-occur)))) + (oset obj :max-occur (oref obj :min-occur))) + obj)) + +(defmethod mocker-test-record ((rec mocker-input-record) args) + (let ((matcher (oref rec :input-matcher)) + (input (oref rec :input))) + (cond (matcher + (apply matcher args)) + (t + (equal input args))))) + +(defmethod mocker-get-record-expectations ((rec mocker-input-record)) + (format "`%s'" (or (oref rec :input-matcher) (oref rec :input)))) + +;;; Mock record default object +(defclass mocker-record (mocker-input-record) + ((output :initarg :output :initform nil) + (output-generator :initarg :output-generator :initform nil))) + +(defmethod mocker-run-record ((rec mocker-record) args) + (let ((generator (oref rec :output-generator)) + (output (oref rec :output))) + (cond (generator + (apply generator args)) + (t + output)))) + +;;; Mock simple stub object +(defclass mocker-stub-record (mocker-record-base) + ((output :initarg :output :initform nil))) + +(defmethod constructor :static ((rec mocker-stub-record) newname &rest args) + (let* ((obj (call-next-method))) + (unless (slot-boundp obj :min-occur) + (oset obj :min-occur 0)) + (unless (slot-boundp obj :max-occur) + (oset obj :max-occur nil)) + obj)) + +(defmethod mocker-test-record ((rec mocker-stub-record) args) + t) + +(defmethod mocker-run-record ((rec mocker-stub-record) args) + (oref rec :output)) + +(defmethod mocker-get-record-expectations ((rec mocker-stub-record)) + "anything") + +;;; Mock passthrough record +(defclass mocker-passthrough-record (mocker-input-record) + ()) + +(defmethod mocker-run-record ((rec mocker-passthrough-record) args) + (let* ((mock (oref rec :-mock)) + (def (oref mock :orig-def))) + (when def + (apply def args)))) + +;;; Helpers +(defun mocker-gen-mocks (mockspecs) + "helper to generate mocks from the input of `mocker-let'" + (mapcar #'(lambda (m) + (let* ((func (car m)) + (argspec (cadr m)) + (rest (cddr m)) + (sym (make-symbol (concat (symbol-name func) "--mock")))) + (list sym + (apply 'make-instance 'mocker-mock + :function func + :argspec argspec + (let* ((order (if (plist-member rest :ordered) + (prog1 + (plist-get rest :ordered) + (setq rest + (mocker--plist-remove + rest :ordered))) + (oref-default 'mocker-mock + :ordered)))) + (list :ordered order))) + (if (plist-member rest :records) + (plist-get rest :records) + (car rest))))) + mockspecs)) + +;;;###autoload +(defmacro mocker-let (mockspecs &rest body) + "Generate temporary bindings according to MOCKSPECS then eval +BODY. The value of the last form in BODY is returned. +Each element of MOCKSPECS is a list (FUNC ARGS [OPTIONS] +RECORDS). + +FUNC is the name of the function to bind, whose original + definition must accept arguments compatible with ARGS. +OPTIONS can be :ordered nil if the records can be executed out of +order (by default, order is enforced). +RECORDS is a list ([:record-cls CLASS] ARG1 ARG2...). + +Each element of RECORDS will generate a record for the +corresponding mock. By default, records are objects of the +`mocker-record' class, but CLASS is used instead if specified. +The rest of the arguments are used to construct the record +object. They will be passed to method `mocker-read-record' for +the used CLASS. This method must return a valid list of +parameters for the CLASS constructor. This allows to implement +specialized mini-languages for specific record classes. +" + (declare (indent 1) (debug t)) + (let* ((mocks (mocker-gen-mocks mockspecs)) + (vars (mapcar #'(lambda (m) + `(,(car m) ,(cadr m))) + mocks)) + (specs (mapcar + #'(lambda (m) + (let* ((mock-sym (car m)) + (mock (cadr m)) + (func (oref mock :function)) + (spec (oref mock :argspec)) + (call (or (and (member '&rest spec) 'apply) + 'funcall)) + (args (loop for el in spec + if (or (not (symbolp el)) + (not (equal + (elt (symbol-name el) 0) + ?&))) + collect el))) + (list func + spec + `(,call #'mocker-run ,mock-sym ,@args)))) + mocks)) + (inits (mapcar #'(lambda (m) + (cons 'progn + (mapcar #'(lambda (rec) + `(mocker-add-record ,(car m) + ,@rec)) + (nth 2 m)))) + mocks)) + (verifs (mapcar #'(lambda (m) + `(mocker-verify ,(car m))) + mocks))) + `(let (,@vars) + ,@inits + (prog1 + ,(macroexpand `(mocker-flet (,@specs) + ,@body)) + ,@verifs)))) + +(provide 'mocker) +;;; mocker.el ends here diff --git a/core/libs/page-break-lines.el b/core/libs/page-break-lines.el new file mode 100644 index 0000000..c8b3b9a --- /dev/null +++ b/core/libs/page-break-lines.el @@ -0,0 +1,165 @@ +;;; page-break-lines.el --- Display ugly ^L page breaks as tidy horizontal lines + +;; Copyright (C) 2012-2015 Steve Purcell + +;; Author: Steve Purcell +;; URL: https://github.com/purcell/page-break-lines +;; Package-Version: 20160109.1813 +;; Package-X-Original-Version: DEV +;; Keywords: convenience, faces + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; This library provides a global mode which displays form feed +;; characters as horizontal rules. + +;; Install from Melpa or Marmalade, or add to `load-path' and use +;; (require 'page-break-lines). + +;; Use `page-break-lines-mode' to enable the mode in specific buffers, +;; or customize `page-break-lines-modes' and enable the mode globally with +;; `global-page-break-lines-mode'. + +;; Issues and limitations: + +;; If `page-break-lines-char' is displayed at a different width to +;; regular characters, the rule may be either too short or too long: +;; rules may then wrap if `truncate-lines' is nil. On some systems, +;; Emacs may erroneously choose a different font for the page break +;; symbol, which choice can be overridden using code such as: + +;; (set-fontset-font "fontset-default" +;; (cons page-break-lines-char page-break-lines-char) +;; (face-attribute 'default :family)) + +;; Use `describe-char' on a page break char to determine whether this +;; is the case. + +;; Additionally, the use of `text-scale-increase' or +;; `text-scale-decrease' will cause the rule width to be incorrect, +;; because the reported window width (in characters) will continue to +;; be the width in the frame's default font, not the scaled font used to +;; display the rule. + +;; Adapted from code http://www.emacswiki.org/emacs/PageBreaks + +;;; Code: + +(defgroup page-break-lines nil + "Display ugly ^L page breaks as tidy horizontal lines." + :prefix "page-break-lines-" + :group 'faces) + +(defcustom page-break-lines-char ?─ + "Character used to render page break lines." + :type 'character + :group 'page-break-lines) + +(defcustom page-break-lines-lighter " PgLn" + "Mode-line indicator for `page-break-lines-mode'." + :type '(choice (const :tag "No lighter" "") string) + :group 'page-break-lines) + +(defcustom page-break-lines-modes + '(emacs-lisp-mode lisp-mode scheme-mode compilation-mode outline-mode help-mode) + "Modes in which to enable `page-break-lines-mode'." + :type '(repeat symbol) + :group 'page-break-lines) + +(defface page-break-lines + '((t :inherit font-lock-comment-face :bold nil :italic nil)) + "Face used to colorize page break lines. +If using :bold or :italic, please ensure `page-break-lines-char' +is available in that variant of your font, otherwise it may be +displayed as a junk character." + :group 'page-break-lines) + + + +;;;###autoload +(define-minor-mode page-break-lines-mode + "Toggle Page Break Lines mode. + +In Page Break mode, page breaks (^L characters) are displayed as a +horizontal line of `page-break-string-char' characters." + :lighter page-break-lines-lighter + :group 'page-break-lines + (page-break-lines--update-display-tables)) + +;;;###autoload +(defun turn-on-page-break-lines-mode () + "Enable `page-break-lines-mode' in this buffer." + (page-break-lines-mode 1)) + +;;;###autoload +(defun turn-off-page-break-lines-mode () + "Disable `page-break-lines-mode' in this buffer." + (page-break-lines-mode -1)) + + +(dolist (hook '(window-configuration-change-hook + after-setting-font-hook)) + (add-hook hook 'page-break-lines--update-display-tables)) + + + +(defun page-break-lines--update-display-table (window) + "Modify a display-table that displays page-breaks prettily. +If the buffer inside WINDOW has `page-break-lines-mode' enabled, +its display table will be modified as necessary." + (with-current-buffer (window-buffer window) + (if page-break-lines-mode + (progn + (unless buffer-display-table + (setq buffer-display-table (make-display-table))) + (let* ((width (- (window-width window) 1)) + (glyph (make-glyph-code page-break-lines-char 'page-break-lines)) + (new-display-entry (vconcat (make-list width glyph)))) + (unless (equal new-display-entry (elt buffer-display-table ?\^L)) + (aset buffer-display-table ?\^L new-display-entry)))) + (when buffer-display-table + (aset buffer-display-table ?\^L nil))))) + +(defun page-break-lines--update-display-tables () + "Function called for updating display table." + (mapc 'page-break-lines--update-display-table (window-list nil 'no-minibuffer))) + + + +;;;###autoload +(defun page-break-lines-mode-maybe () + "Enable `page-break-lines-mode' in the current buffer if desired. +When `major-mode' is listed in `page-break-lines-modes', then +`page-break-lines-mode' will be enabled." + (if (and (not (minibufferp)) + (apply 'derived-mode-p page-break-lines-modes)) + (page-break-lines-mode 1))) + +;;;###autoload +(define-global-minor-mode global-page-break-lines-mode + page-break-lines-mode page-break-lines-mode-maybe + :group 'page-break-lines) + + +(provide 'page-break-lines) + +;; Local Variables: +;; coding: utf-8 +;; byte-compile-warnings: (not cl-functions) +;; checkdoc-minor-mode: t +;; End: + +;;; page-break-lines.el ends here diff --git a/core/templates/.spacemacs.template b/core/templates/.spacemacs.template new file mode 100644 index 0000000..76d942e --- /dev/null +++ b/core/templates/.spacemacs.template @@ -0,0 +1,305 @@ +;; -*- mode: emacs-lisp -*- +;; This file is loaded by Spacemacs at startup. +;; It must be stored in your home directory. + +(defun dotspacemacs/layers () + "Configuration Layers declaration. +You should not put any user code in this function besides modifying the variable +values." + (setq-default + ;; Base distribution to use. This is a layer contained in the directory + ;; `+distribution'. For now available distributions are `spacemacs-base' + ;; or `spacemacs'. (default 'spacemacs) + dotspacemacs-distribution 'spacemacs + ;; Lazy installation of layers (i.e. layers are installed only when a file + ;; with a supported type is opened). Possible values are `all', `unused' + ;; and `nil'. `unused' will lazy install only unused layers (i.e. layers + ;; not listed in variable `dotspacemacs-configuration-layers'), `all' will + ;; lazy install any layer that support lazy installation even the layers + ;; listed in `dotspacemacs-configuration-layers'. `nil' disable the lazy + ;; installation feature and you have to explicitly list a layer in the + ;; variable `dotspacemacs-configuration-layers' to install it. + ;; (default 'unused) + dotspacemacs-enable-lazy-installation 'unused + ;; If non-nil then Spacemacs will ask for confirmation before installing + ;; a layer lazily. (default t) + dotspacemacs-ask-for-lazy-installation t + ;; If non-nil layers with lazy install support are lazy installed. + ;; List of additional paths where to look for configuration layers. + ;; Paths must have a trailing slash (i.e. `~/.mycontribs/') + dotspacemacs-configuration-layer-path '() + ;; List of configuration layers to load. + dotspacemacs-configuration-layers + '( + ;; ---------------------------------------------------------------- + ;; Example of useful layers you may want to use right away. + ;; Uncomment some layer names and press (Vim style) or + ;; (Emacs style) to install them. + ;; ---------------------------------------------------------------- + helm + ;; auto-completion + ;; better-defaults + emacs-lisp + ;; git + ;; markdown + ;; org + ;; (shell :variables + ;; shell-default-height 30 + ;; shell-default-position 'bottom) + ;; spell-checking + ;; syntax-checking + ;; version-control + ) + ;; List of additional packages that will be installed without being + ;; wrapped in a layer. If you need some configuration for these + ;; packages, then consider creating a layer. You can also put the + ;; configuration in `dotspacemacs/user-config'. + dotspacemacs-additional-packages '() + ;; A list of packages that cannot be updated. + dotspacemacs-frozen-packages '() + ;; A list of packages that will not be installed and loaded. + dotspacemacs-excluded-packages '() + ;; Defines the behaviour of Spacemacs when installing packages. + ;; Possible values are `used-only', `used-but-keep-unused' and `all'. + ;; `used-only' installs only explicitly used packages and uninstall any + ;; unused packages as well as their unused dependencies. + ;; `used-but-keep-unused' installs only the used packages but won't uninstall + ;; them if they become unused. `all' installs *all* packages supported by + ;; Spacemacs and never uninstall them. (default is `used-only') + dotspacemacs-install-packages 'used-only)) + +(defun dotspacemacs/init () + "Initialization function. +This function is called at the very startup of Spacemacs initialization +before layers configuration. +You should not put any user code in there besides modifying the variable +values." + ;; This setq-default sexp is an exhaustive list of all the supported + ;; spacemacs settings. + (setq-default + ;; If non nil ELPA repositories are contacted via HTTPS whenever it's + ;; possible. Set it to nil if you have no way to use HTTPS in your + ;; environment, otherwise it is strongly recommended to let it set to t. + ;; This variable has no effect if Emacs is launched with the parameter + ;; `--insecure' which forces the value of this variable to nil. + ;; (default t) + dotspacemacs-elpa-https t + ;; Maximum allowed time in seconds to contact an ELPA repository. + dotspacemacs-elpa-timeout 5 + ;; If non nil then spacemacs will check for updates at startup + ;; when the current branch is not `develop'. Note that checking for + ;; new versions works via git commands, thus it calls GitHub services + ;; whenever you start Emacs. (default nil) + dotspacemacs-check-for-update nil + ;; If non-nil, a form that evaluates to a package directory. For example, to + ;; use different package directories for different Emacs versions, set this + ;; to `emacs-version'. + dotspacemacs-elpa-subdirectory nil + ;; One of `vim', `emacs' or `hybrid'. + ;; `hybrid' is like `vim' except that `insert state' is replaced by the + ;; `hybrid state' with `emacs' key bindings. The value can also be a list + ;; with `:variables' keyword (similar to layers). Check the editing styles + ;; section of the documentation for details on available variables. + ;; (default 'vim) + dotspacemacs-editing-style 'vim + ;; If non nil output loading progress in `*Messages*' buffer. (default nil) + dotspacemacs-verbose-loading nil + ;; Specify the startup banner. Default value is `official', it displays + ;; the official spacemacs logo. An integer value is the index of text + ;; banner, `random' chooses a random text banner in `core/banners' + ;; directory. A string value must be a path to an image format supported + ;; by your Emacs build. + ;; If the value is nil then no banner is displayed. (default 'official) + dotspacemacs-startup-banner 'official + ;; List of items to show in startup buffer or an association list of + ;; the form `(list-type . list-size)`. If nil then it is disabled. + ;; Possible values for list-type are: + ;; `recents' `bookmarks' `projects' `agenda' `todos'." + ;; List sizes may be nil, in which case + ;; `spacemacs-buffer-startup-lists-length' takes effect. + dotspacemacs-startup-lists '((recents . 5) + (projects . 7)) + ;; True if the home buffer should respond to resize events. + dotspacemacs-startup-buffer-responsive t + ;; Default major mode of the scratch buffer (default `text-mode') + dotspacemacs-scratch-mode 'text-mode + ;; List of themes, the first of the list is loaded when spacemacs starts. + ;; Press T n to cycle to the next theme in the list (works great + ;; with 2 themes variants, one dark and one light) + dotspacemacs-themes '(spacemacs-dark + spacemacs-light) + ;; If non nil the cursor color matches the state color in GUI Emacs. + dotspacemacs-colorize-cursor-according-to-state t + ;; Default font, or prioritized list of fonts. `powerline-scale' allows to + ;; quickly tweak the mode-line size to make separators look not too crappy. + dotspacemacs-default-font '("Source Code Pro" + :size 13 + :weight normal + :width normal + :powerline-scale 1.1) + ;; The leader key + dotspacemacs-leader-key "SPC" + ;; The key used for Emacs commands (M-x) (after pressing on the leader key). + ;; (default "SPC") + dotspacemacs-emacs-command-key "SPC" + ;; The key used for Vim Ex commands (default ":") + dotspacemacs-ex-command-key ":" + ;; The leader key accessible in `emacs state' and `insert state' + ;; (default "M-m") + dotspacemacs-emacs-leader-key "M-m" + ;; Major mode leader key is a shortcut key which is the equivalent of + ;; pressing ` m`. Set it to `nil` to disable it. (default ",") + dotspacemacs-major-mode-leader-key "," + ;; Major mode leader key accessible in `emacs state' and `insert state'. + ;; (default "C-M-m") + dotspacemacs-major-mode-emacs-leader-key "C-M-m" + ;; These variables control whether separate commands are bound in the GUI to + ;; the key pairs C-i, TAB and C-m, RET. + ;; Setting it to a non-nil value, allows for separate commands under + ;; and TAB or and RET. + ;; In the terminal, these pairs are generally indistinguishable, so this only + ;; works in the GUI. (default nil) + dotspacemacs-distinguish-gui-tab nil + ;; If non nil `Y' is remapped to `y$' in Evil states. (default nil) + dotspacemacs-remap-Y-to-y$ nil + ;; If non-nil, the shift mappings `<' and `>' retain visual state if used + ;; there. (default t) + dotspacemacs-retain-visual-state-on-shift t + ;; If non-nil, J and K move lines up and down when in visual mode. + ;; (default nil) + dotspacemacs-visual-line-move-text nil + ;; If non nil, inverse the meaning of `g' in `:substitute' Evil ex-command. + ;; (default nil) + dotspacemacs-ex-substitute-global nil + ;; Name of the default layout (default "Default") + dotspacemacs-default-layout-name "Default" + ;; If non nil the default layout name is displayed in the mode-line. + ;; (default nil) + dotspacemacs-display-default-layout nil + ;; If non nil then the last auto saved layouts are resume automatically upon + ;; start. (default nil) + dotspacemacs-auto-resume-layouts nil + ;; Size (in MB) above which spacemacs will prompt to open the large file + ;; literally to avoid performance issues. Opening a file literally means that + ;; no major mode or minor modes are active. (default is 1) + dotspacemacs-large-file-size 1 + ;; Location where to auto-save files. Possible values are `original' to + ;; auto-save the file in-place, `cache' to auto-save the file to another + ;; file stored in the cache directory and `nil' to disable auto-saving. + ;; (default 'cache) + dotspacemacs-auto-save-file-location 'cache + ;; Maximum number of rollback slots to keep in the cache. (default 5) + dotspacemacs-max-rollback-slots 5 + ;; If non nil, `helm' will try to minimize the space it uses. (default nil) + dotspacemacs-helm-resize nil + ;; if non nil, the helm header is hidden when there is only one source. + ;; (default nil) + dotspacemacs-helm-no-header nil + ;; define the position to display `helm', options are `bottom', `top', + ;; `left', or `right'. (default 'bottom) + dotspacemacs-helm-position 'bottom + ;; Controls fuzzy matching in helm. If set to `always', force fuzzy matching + ;; in all non-asynchronous sources. If set to `source', preserve individual + ;; source settings. Else, disable fuzzy matching in all sources. + ;; (default 'always) + dotspacemacs-helm-use-fuzzy 'always + ;; If non nil the paste micro-state is enabled. When enabled pressing `p` + ;; several times cycle between the kill ring content. (default nil) + dotspacemacs-enable-paste-transient-state nil + ;; Which-key delay in seconds. The which-key buffer is the popup listing + ;; the commands bound to the current keystroke sequence. (default 0.4) + dotspacemacs-which-key-delay 0.4 + ;; Which-key frame position. Possible values are `right', `bottom' and + ;; `right-then-bottom'. right-then-bottom tries to display the frame to the + ;; right; if there is insufficient space it displays it at the bottom. + ;; (default 'bottom) + dotspacemacs-which-key-position 'bottom + ;; If non nil a progress bar is displayed when spacemacs is loading. This + ;; may increase the boot time on some systems and emacs builds, set it to + ;; nil to boost the loading time. (default t) + dotspacemacs-loading-progress-bar t + ;; If non nil the frame is fullscreen when Emacs starts up. (default nil) + ;; (Emacs 24.4+ only) + dotspacemacs-fullscreen-at-startup nil + ;; If non nil `spacemacs/toggle-fullscreen' will not use native fullscreen. + ;; Use to disable fullscreen animations in OSX. (default nil) + dotspacemacs-fullscreen-use-non-native nil + ;; If non nil the frame is maximized when Emacs starts up. + ;; Takes effect only if `dotspacemacs-fullscreen-at-startup' is nil. + ;; (default nil) (Emacs 24.4+ only) + dotspacemacs-maximized-at-startup nil + ;; A value from the range (0..100), in increasing opacity, which describes + ;; the transparency level of a frame when it's active or selected. + ;; Transparency can be toggled through `toggle-transparency'. (default 90) + dotspacemacs-active-transparency 90 + ;; A value from the range (0..100), in increasing opacity, which describes + ;; the transparency level of a frame when it's inactive or deselected. + ;; Transparency can be toggled through `toggle-transparency'. (default 90) + dotspacemacs-inactive-transparency 90 + ;; If non nil show the titles of transient states. (default t) + dotspacemacs-show-transient-state-title t + ;; If non nil show the color guide hint for transient state keys. (default t) + dotspacemacs-show-transient-state-color-guide t + ;; If non nil unicode symbols are displayed in the mode line. (default t) + dotspacemacs-mode-line-unicode-symbols t + ;; If non nil smooth scrolling (native-scrolling) is enabled. Smooth + ;; scrolling overrides the default behavior of Emacs which recenters point + ;; when it reaches the top or bottom of the screen. (default t) + dotspacemacs-smooth-scrolling t + ;; If non nil line numbers are turned on in all `prog-mode' and `text-mode' + ;; derivatives. If set to `relative', also turns on relative line numbers. + ;; (default nil) + dotspacemacs-line-numbers nil + ;; Code folding method. Possible values are `evil' and `origami'. + ;; (default 'evil) + dotspacemacs-folding-method 'evil + ;; If non-nil smartparens-strict-mode will be enabled in programming modes. + ;; (default nil) + dotspacemacs-smartparens-strict-mode nil + ;; If non-nil pressing the closing parenthesis `)' key in insert mode passes + ;; over any automatically added closing parenthesis, bracket, quote, etc… + ;; This can be temporary disabled by pressing `C-q' before `)'. (default nil) + dotspacemacs-smart-closing-parenthesis nil + ;; Select a scope to highlight delimiters. Possible values are `any', + ;; `current', `all' or `nil'. Default is `all' (highlight any scope and + ;; emphasis the current one). (default 'all) + dotspacemacs-highlight-delimiters 'all + ;; If non nil, advise quit functions to keep server open when quitting. + ;; (default nil) + dotspacemacs-persistent-server nil + ;; List of search tool executable names. Spacemacs uses the first installed + ;; tool of the list. Supported tools are `ag', `pt', `ack' and `grep'. + ;; (default '("ag" "pt" "ack" "grep")) + dotspacemacs-search-tools '("ag" "pt" "ack" "grep") + ;; The default package repository used if no explicit repository has been + ;; specified with an installed package. + ;; Not used for now. (default nil) + dotspacemacs-default-package-repository nil + ;; Delete whitespace while saving buffer. Possible values are `all' + ;; to aggressively delete empty line and long sequences of whitespace, + ;; `trailing' to delete only the whitespace at end of lines, `changed'to + ;; delete only whitespace for changed lines or `nil' to disable cleanup. + ;; (default nil) + dotspacemacs-whitespace-cleanup nil + )) + +(defun dotspacemacs/user-init () + "Initialization function for user code. +It is called immediately after `dotspacemacs/init', before layer configuration +executes. + This function is mostly useful for variables that need to be set +before packages are loaded. If you are unsure, you should try in setting them in +`dotspacemacs/user-config' first." + ) + +(defun dotspacemacs/user-config () + "Configuration function for user code. +This function is called at the very end of Spacemacs initialization after +layers configuration. +This is the place where most of your configurations should be done. Unless it is +explicitly specified that a variable should be set before a package is loaded, +you should place your code here." + ) + +;; Do not write anything past this comment. This is where Emacs will +;; auto-generate custom variable definitions. diff --git a/core/templates/README.org.template b/core/templates/README.org.template new file mode 100644 index 0000000..c5cf7ba --- /dev/null +++ b/core/templates/README.org.template @@ -0,0 +1,30 @@ +#+TITLE: %LAYER_NAME% layer + +# The maximum height of the logo should be 200 pixels. +[[img/%LAYER_NAME%.png]] + +# TOC links should be GitHub style anchors. +* Table of Contents :TOC_4_gh:noexport: + - [[#decsription][Description]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + +* Description +This layer does wonderful things: + - thing01 + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =%LAYER_NAME%= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key bindings + +| Key Binding | Description | +|-------------+----------------| +| ~SPC x x x~ | Does thing01 | +# Use GitHub URLs if you wish to link a Spacemacs documentation file or its heading. +# Examples: +# [[https://github.com/syl20bnr/spacemacs/blob/master/doc/VIMUSERS.org#sessions]] +# [[https://github.com/syl20bnr/spacemacs/blob/master/layers/%2Bfun/emoji/README.org][Link to Emoji layer README.org]] +# If space-doc-mode is enabled, Spacemacs will open a local copy of the linked file. diff --git a/core/templates/REPORTING.template b/core/templates/REPORTING.template new file mode 100644 index 0000000..5b0be96 --- /dev/null +++ b/core/templates/REPORTING.template @@ -0,0 +1,21 @@ +<> +#### Description :octocat: +<> + +#### Reproduction guide :beetle: +- Start Emacs +- <> + +*Observed behaviour:* :eyes: :broken_heart: +<> + +*Expected behaviour:* :heart: :smile: +<> + +(%LAST_KEYS%) +%SYSTEM_INFO% + +#### Backtrace :paw_prints: +``` +%BACKTRACE% +``` diff --git a/core/templates/packages.el.template b/core/templates/packages.el.template new file mode 100644 index 0000000..af6bce2 --- /dev/null +++ b/core/templates/packages.el.template @@ -0,0 +1,62 @@ +;;; packages.el --- %LAYER_NAME% layer packages file for Spacemacs. +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: %USER_FULL_NAME% <%USER_MAIL_ADDRESS%> +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;;; Commentary: + +;; See the Spacemacs documentation and FAQs for instructions on how to implement +;; a new layer: +;; +;; SPC h SPC layers RET +;; +;; +;; Briefly, each package to be installed or configured by this layer should be +;; added to `%LAYER_NAME%-packages'. Then, for each package PACKAGE: +;; +;; - If PACKAGE is not referenced by any other Spacemacs layer, define a +;; function `%LAYER_NAME%/init-PACKAGE' to load and initialize the package. + +;; - Otherwise, PACKAGE is already referenced by another Spacemacs layer, so +;; define the functions `%LAYER_NAME%/pre-init-PACKAGE' and/or +;; `%LAYER_NAME%/post-init-PACKAGE' to customize the package as it is loaded. + +;;; Code: + +(defconst %LAYER_NAME%-packages + '() + "The list of Lisp packages required by the %LAYER_NAME% layer. + +Each entry is either: + +1. A symbol, which is interpreted as a package to be installed, or + +2. A list of the form (PACKAGE KEYS...), where PACKAGE is the + name of the package to be installed or loaded, and KEYS are + any number of keyword-value-pairs. + + The following keys are accepted: + + - :excluded (t or nil): Prevent the package from being loaded + if value is non-nil + + - :location: Specify a custom installation location. + The following values are legal: + + - The symbol `elpa' (default) means PACKAGE will be + installed using the Emacs package manager. + + - The symbol `local' directs Spacemacs to load the file at + `./local/PACKAGE/PACKAGE.el' + + - A list beginning with the symbol `recipe' is a melpa + recipe. See: https://github.com/milkypostman/melpa#recipe-format") + + +;;; packages.el ends here diff --git a/core/tools/spacefmt/spacefmt b/core/tools/spacefmt/spacefmt new file mode 100755 index 0000000..de742c0 --- /dev/null +++ b/core/tools/spacefmt/spacefmt @@ -0,0 +1,77 @@ +#!/bin/bash +# ---------------------------------------------------------------------- +# Formatting/Migration tool for Spacemacs +# ---------------------------------------------------------------------- +# +# Authors: Eugene Yaremenko and Sylvain Benner +# +# Arguments: +# $1: action name can be `all`, `doc`, `config` +# `doc` formats documentation files +# `config` format configuration files +# `all` performs all actions +# $2: if equal to `test` then use test files as input + +# TODO a function to add headers to config.el, packages.el etc... + +if ! [ -d "./.git" ] +then + echo "Should be executed from the repo root." + exit 1 +fi + +#Use "sed" or "gsed" if avaliable. +seder="sed" +if hash gsed 2>/dev/null; then + seder="gsed" +fi + +#Use md5 or md5sum +mdfive="md5sum" +if hash md5 2>/dev/null; then + mdfive="md5" +fi + + +if [[ $2 = "test" ]] +then + places=("./core/tools/spacefmt/tests") +else + places=("./doc" "./layers") +fi + +for place in "${places[@]}" +do : + before_md5="foo" + after_md5="bar" + while ! [ "$before_md5" = "$after_md5" ] + do + # Calculate md5 of the files in $place before formating + before_md5=$(find $place -type f -exec $mdfive {} \; | sort -k 2 | $mdfive) + + if [ $1 = "all" ] || [ $1 == "doc" ] + then + # Remove trailing delimiters in headlines + find $place -name "*.org" -type f -exec $seder -i 's/^\(*\+\s\+.*\)[;,.]$/\1/g' {} \; + # Remove trailing spaces + find $place -name "*.org" -type f -exec $seder -i 's/[ \t]*$//' {} \; + # Remove #+HTML_HEAD_EXTRA: ... readtheorg.css" /> + find $place -name "*.org" -type f -exec $seder -i '/#+HTML_HEAD_EXTRA.*readtheorg.css.*/d' {} \; + # Replace multiply empty lines with a single empty line + find $place -name "*.org" -type f -exec $seder -i '/^$/N;/^\n$/D' {} \; + # Replace :TOC_4_org: with :TOC_4_gh: + find $place -name "*.org" -type f -exec $seder -i 's/:TOC_4_org:/:TOC_4_gh:/' {} \; + # apply toc-org + find $place -name "*.org" -type f -exec emacs -batch -l ./core/tools/spacefmt/spacefmt.el '{}' -f apply-all \; + fi + + if [ $1 = "all" ] || [ $1 == "config" ] + then + # migrate packages lists to config.el + find $place -name "packages.el" -type f -exec emacs -batch -l ./core/tools/spacefmt/spacefmt.el '{}' -f move-packages-to-config \; + fi + + # Calculate md5 of the files in $place after formating + after_md5=$(find $place -type f -exec $mdfive {} \; | sort -k 2 | $mdfive) + done +done diff --git a/core/tools/spacefmt/spacefmt.el b/core/tools/spacefmt/spacefmt.el new file mode 100644 index 0000000..cb3ea0a --- /dev/null +++ b/core/tools/spacefmt/spacefmt.el @@ -0,0 +1,169 @@ +;;; fmt.el --- .org file formatter. +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +(load-file "./core/tools/spacefmt/toc-org.el") + +(require 'cl) +(require 'files) +(require 'org) +(require 'thingatpt) + +(defconst empty-line-regexp "^[ \t]*$") + +(defconst toc-heading-head "* Table of Contents") +(defconst toc-heading-tail ":TOC_4_gh:noexport:") +(defconst toc-headline (format "%-41s%s" + toc-heading-head + toc-heading-tail)) + +(defun apply-all () + "Apply all filters." + (remove-empty-lines-at-the-beginning) + (insert-title) + (insert-toc) + (apply-toc) + (remove-empty-lines-after-headlines) + ;; Multiply empty lines are handled by + ;; the bash script. + (insert-empty-line-before-tables) + (insert-empty-line-after-tables) + (insert-empty-line-after-sections) + (insert-empty-line-at-the-end) + (align-tables) + (save-buffer 0)) + +(defun remove-empty-lines-at-the-beginning () + "Remove empty lines at the begging of the buffer." + (goto-char (point-min)) + (while (looking-at-p empty-line-regexp) + (delete-blank-lines))) + +(defun insert-empty-line-at-the-end () + "Insert an empty line at the end of the buffer." + (goto-char (point-max)) + (unless (looking-at-p empty-line-regexp) + (open-line 1))) + +(defun insert-title() + "Insert #TITLE:{DIR_NAME} if the buffer doesn't have one." + (goto-char (point-min)) + (unless (looking-at-p "^#\\+TITLE:.*$") + (insert (format "#+TITLE:%s\n" + (clj/->> (buffer-file-name) + file-name-directory + directory-file-name + file-name-base))))) + +(defun insert-toc () + "Insert toc if the buffer doesn't have one." + (goto-char (point-min)) + (unless (re-search-forward toc-org-toc-org-regexp nil t) + (goto-char (point-max)) + ;; Skip from the end of the buffer to the first headling. + (while (re-search-backward org-heading-regexp nil t)) + (open-line 3) + (forward-line 1) + (insert-string toc-headline))) + +(defun remove-empty-lines-after-headlines() + "Remove empty liners after each headline." + (goto-char (point-min)) + (while (re-search-forward org-heading-regexp nil t) + (unless (= (forward-line) 0) + (while (looking-at-p empty-line-regexp) + (delete-blank-lines))))) + +(defun insert-empty-line-before-tables () + "Insert an empty line before each org table." + (goto-char (point-min)) + (while (goto-next-table) + (forward-line -1) + (unless (looking-at-p empty-line-regexp) + (end-of-line) + (open-line 1)) + (forward-line 1))) + +(defun insert-empty-line-after-sections () + "Insert an empty line after each section." + (goto-char (point-min)) + (while (re-search-forward org-heading-regexp nil t) + (forward-line -1) + (unless (or (looking-at-p empty-line-regexp) + (looking-at-p org-heading-regexp)) + (end-of-line) + (open-line 1)) + (forward-line 2))) + +(defun insert-empty-line-after-tables () + "Insert an empty line after each table." + (goto-char (point-min)) + (while (goto-next-table) + ;; Skip current table. + (while (looking-at-p org-table-any-line-regexp) + (forward-line)) + (unless (looking-at-p empty-line-regexp) + (beginning-of-line) + (open-line 1) + (forward-line)))) + +(defun align-tables () + "Align all tables" + (goto-char (point-min)) + (while (goto-next-table) + (org-table-align))) + +(defun apply-toc () + "Apply current toc-org TAG to TOC." + (goto-char (point-min)) + (toc-org-insert-toc)) + +(defun goto-next-table () + "Goto next org table. +Returns nil if no more tables left." + ;; Skip current table. + (while (looking-at-p org-table-any-line-regexp) + (forward-line)) + ;; Skip to the next table. + (when (re-search-forward org-table-hline-regexp nil t) + (forward-line -1 ))) + +(defun move-packages-to-config () + "Move xxx-packages list to config.el." + (let ((config-file (concat default-directory "config.el"))) + (when (or (re-search-forward "(setq.*-packages" nil t) + (re-search-forward "(defcustom.*-packages" nil t)) + (re-search-backward "(") + (kill-sexp) + (with-current-buffer (find-file-noselect config-file) + (when (file-exists-p config-file) + (re-search-forward ";;; License: GPLv3") + (newline) + (forward-line 2)) + (yank) + ;; config.el + (save-buffer 0)) + ;; packages.el + (save-buffer 0)))) + +(defmacro clj/->> (o &rest forms) + "Threads the expr through the forms. +Inserts o as the last item in the first form, +making a list of it if it is not a list already. +If there are more forms, inserts the first form +as the last item in second form, etc." + (cond ((not forms) o) + ((= 1 (length forms)) + (let ((f (first forms))) + (append (if (symbolp f) + (list f) f) + (list o)))) + (:else `(clj/->> (clj/->> ,o ,(first forms)) ,@(rest forms))))) diff --git a/core/tools/spacefmt/tests/config.el b/core/tools/spacefmt/tests/config.el new file mode 100644 index 0000000..4bc681b --- /dev/null +++ b/core/tools/spacefmt/tests/config.el @@ -0,0 +1,7 @@ +;;; packages.el --- test layer configuration file for Spacemacs. +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 diff --git a/core/tools/spacefmt/tests/packages.el b/core/tools/spacefmt/tests/packages.el new file mode 100644 index 0000000..f2f74de --- /dev/null +++ b/core/tools/spacefmt/tests/packages.el @@ -0,0 +1,9 @@ +;; Test file for packages.el formatting and migrations + +(setq mylayer-packages + '( + package1 + package2 + package3 + package4 + )) diff --git a/core/tools/spacefmt/tests/test.org b/core/tools/spacefmt/tests/test.org new file mode 100644 index 0000000..851f05c --- /dev/null +++ b/core/tools/spacefmt/tests/test.org @@ -0,0 +1,28 @@ + + + +#+HTML_HEAD_EXTRA: + + +* Links, +[[https://github.com/syl20bnr/spacemacs/blob/master/doc/FAQ.org#os-x][Link to FAQ "OS X" heading]] +[[https://www.google.com][Link to www.google.com]] +[[https://github.com/syl20bnr/spacemacs/blob/master/doc/VIMUSERS.org#sessions]] +[[https://github.com/syl20bnr/spacemacs/blob/master/layers/%2Bfun/emoji/README.org][Link to Emoji layer README.org]] +* FOO; +| Key Binding | Description | +|-------------+--------------------------------------------| + | ~SPC m d~ | lookup thing at point in lua documentation | +| ~SPC m s b~ | send buffer contents to REPL | +| ~SPC m s f~ | send current function to REPL | +| ~SPC m s l~ | send current line to REPL | +| ~SPC m s r~ | send current region to REPL | +=========================================================================== +** Org: +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed conseq +* BAR +** SUBBAR ; , . +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed conseq +* BAZ +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed conseq +* FOOBAZ diff --git a/core/tools/spacefmt/toc-org.el b/core/tools/spacefmt/toc-org.el new file mode 100644 index 0000000..30bb306 --- /dev/null +++ b/core/tools/spacefmt/toc-org.el @@ -0,0 +1,409 @@ +;;; toc-org.el --- add table of contents to org-mode files (formerly, org-toc) + +;; Copyright (C) 2014 Sergei Nosov + +;; Author: Sergei Nosov +;; Version: 1.0 +;; Keywords: org-mode org-toc toc-org org toc table of contents +;; URL: https://github.com/snosov1/toc-org + +;; 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 2, 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 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: + +;; toc-org helps you to have an up-to-date table of contents in org files +;; without exporting (useful primarily for readme files on GitHub). + +;; NOTE: Previous name of the package is org-toc. It was changed because of a +;; name conflict with one of the org contrib modules. + +;; After installation put into your .emacs file something like + +;; (if (require 'toc-org nil t) +;; (add-hook 'org-mode-hook 'toc-org-enable) +;; (warn "toc-org not found")) + +;; And every time you'll be saving an org file, the first headline with a :TOC: +;; tag will be updated with the current table of contents. + +;; For details, see https://github.com/snosov1/toc-org + +;;; Code: + +(require 'ert) +(require 'org) + +(defgroup toc-org nil + "toc-org is a utility to have an up-to-date table of contents +in the org files without exporting (useful primarily for readme +files on GitHub)" + :group 'org) + +;; just in case, simple regexp "^*.*:toc:\\($\\|[^ ]*:$\\)" +(defconst toc-org-toc-org-regexp "^*.*:toc\\([@_][0-9]\\|\\([@_][0-9][@_][a-zA-Z]+\\)\\)?:\\($\\|[^ ]*:$\\)" + "Regexp to find the heading with the :toc: tag") +(defconst toc-org-tags-regexp "\s*:[[:word:]:@]*:\s*$" + "Regexp to find tags on the line") +(defconst toc-org-states-regexp "^*+\s+\\(TODO\s+\\|DONE\s+\\)" + "Regexp to find states on the line") +(defconst toc-org-links-regexp "\\[\\[\\(.*?\\)\\]\\[\\(.*?\\)\\]\\]" + "Regexp to find states on the line") +(defconst toc-org-special-chars-regexp "[^[:alnum:]_-]" + "Regexp with the special characters (which are omitted in hrefs + by GitHub)") + +(defcustom toc-org-max-depth 2 + "Maximum depth of the headings to use in the table of +contents. The default of 2 uses only the highest level headings +and their subheadings (one and two stars)." + :group 'toc-org) + +(defcustom toc-org-hrefify-default "gh" + "Default hrefify function to use." + :group 'toc-org) + +(defcustom toc-org-enable-links-opening t + "With this option, org-open-at-point (C-c C-o) should work on +the TOC links (even if the style is different from org)." + :group 'toc-org) + +(defvar-local toc-org-hrefify-hash nil + "Buffer local hash-table that is used to enable links +opening. The keys are hrefified headings, the values are original +headings.") + +(defun toc-org-raw-toc () + "Return the \"raw\" table of contents of the current file, +i.e. simply flush everything that's not a heading and strip +tags." + (let ((content (buffer-substring-no-properties + (point-min) (point-max)))) + (with-temp-buffer + (insert content) + (goto-char (point-min)) + (keep-lines "^\*+[ ]") + + ;; don't include the TOC itself + (goto-char (point-min)) + (re-search-forward toc-org-toc-org-regexp nil t) + (beginning-of-line) + (delete-region (point) (progn (forward-line 1) (point))) + + ;; strip states + (goto-char (point-min)) + (while (re-search-forward toc-org-states-regexp nil t) + (replace-match "" nil nil nil 1)) + + ;; strip tags + ;; TODO :export: and :noexport: tags semantic should be probably + ;; implemented + (goto-char (point-min)) + (while (re-search-forward toc-org-tags-regexp nil t) + (replace-match "" nil nil)) + + ;; flatten links + (goto-char (point-min)) + (while (re-search-forward toc-org-links-regexp nil t) + (replace-match "\\2" nil nil)) + + (buffer-substring-no-properties + (point-min) (point-max))))) + +(ert-deftest toc-org-test-raw-toc () + "Test the `toc-org-raw-toc' function" + + (defun toc-org-test-raw-toc-gold-test (content gold) + (should (equal + (with-temp-buffer + (insert content) + (toc-org-raw-toc)) + gold))) + (declare-function toc-org-test-raw-toc-gold-test "toc-org") ;; suppress compiler warning + + (let ((beg "* TODO [[http://somewhere.com][About]]\n:TOC:\n drawer\n:END:\n\ntoc-org is a utility to have an up-to-date table of contents in the\norg files without exporting (useful primarily for readme files on\nGitHub).\n\nIt is similar to the [[https://github.com/ardumont/markdown-toc][markdown-toc]] package, but works for org files.\n:TOC:\n drawer\n:END:\n\n* Table of Contents ") + (gold "* About\n")) + + ;; different TOC styles + (toc-org-test-raw-toc-gold-test (concat beg ":TOC:" ) gold) + (toc-org-test-raw-toc-gold-test (concat beg ":TOC_1:" ) gold) + (toc-org-test-raw-toc-gold-test (concat beg ":TOC_1_qqq:" ) gold) + (toc-org-test-raw-toc-gold-test (concat beg ":TOC@1:" ) gold) + (toc-org-test-raw-toc-gold-test (concat beg ":TOC@1@cxv:" ) gold) + (toc-org-test-raw-toc-gold-test (concat beg ":TOC@1_hello:" ) gold) + + ;; trailing symbols + (toc-org-test-raw-toc-gold-test (concat beg ":TOC@1_hello:" "\n\n\n") gold) + (toc-org-test-raw-toc-gold-test (concat beg ":TOC@1_hello:" "\n\n\nsdfd") gold)) + + ;; more complex case + (toc-org-test-raw-toc-gold-test + "* About\n:TOC:\n drawer\n:END:\n\ntoc-org is a utility to have an up-to-date table of contents in the\norg files without exporting (useful primarily for readme files on\nGitHub).\n\nIt is similar to the [[https://github.com/ardumont/markdown-toc][markdown-toc]] package, but works for org files.\n:TOC:\n drawer\n:END:\n\n* Table of Contents :TOC:\n - [[#about][About]]\n - [[#use][Use]]\n - [[#different-href-styles][Different href styles]]\n - [[#example][Example]]\n\n* Installation\n** via package.el\nThis is the simplest method if you have the package.el module\n(built-in since Emacs 24.1) you can simply use =M-x package-install=\nand then put the following snippet in your ~/.emacs file\n#+BEGIN_SRC elisp\n (eval-after-load \"toc-org-autoloads\"\n '(progn\n (if (require 'toc-org nil t)\n (add-hook 'org-mode-hook 'toc-org-enable)\n (warn \"toc-org not found\"))))\n#+END_SRC\n** Manual :Hello:\n- Create folder ~/.emacs.d if you don't have it\n- Go to it and clone toc-org there\n #+BEGIN_SRC sh\n git clone https://github.com/snosov1/toc-org.git\n #+END_SRC\n- Put this in your ~/.emacs file\n #+BEGIN_SRC elisp\n (add-to-list 'load-path \"~/.emacs.d/toc-org\")\n (when (require 'toc-org nil t)\n (add-hook 'org-mode-hook 'toc-org-enable))\n #+END_SRC\n\n* Use\n\nAfter the installation, every time you'll be saving an org file, the\nfirst headline with a :TOC: tag will be updated with the current table\nof contents.\n\nTo add a TOC tag, you can use the command =org-set-tags-command=.\n\nIn addition to the simple :TOC: tag, you can also use the following\ntag formats:\n\n- :TOC@2: - sets the max depth of the headlines in the table of\n contents to 2 (the default)\n\n- :TOC@2@gh: - sets the max depth as in above and also uses the\n GitHub-style hrefs in the table of contents (the default). The other\n supported href style is 'org', which is the default org style (you\n can use C-c C-o to go to the headline at point).\n\nYou can also use =_= as separator, instead of =@=.\n\n* Different href styles\n\nCurrently, only 2 href styles are supported: =gh= and =org=. You can easily\ndefine your own styles. If you use the tag =:TOC@2@STYLE:= (=STYLE= being a\nstyle name), then the package will look for a function named\n=toc-org-hrefify-STYLE=, which accepts a heading string and returns a href\ncorresponding to that heading.\n\nE.g. for =org= style it simply returns input as is:\n\n#+BEGIN_SRC emacs-lisp\n (defun toc-org-hrefify-org (str)\n \"Given a heading, transform it into a href using the org-mode\n rules.\"\n str)\n#+END_SRC\n\n* Example\n\n#+BEGIN_SRC org\n * About\n * Table of Contents :TOC:\n - [[#about][About]]\n - [[#installation][Installation]]\n - [[#via-packageel][via package.el]]\n - [[#manual][Manual]]\n - [[#use][Use]]\n * Installation\n ** via package.el\n ** Manual\n * Use\n * Example\n#+END_SRC\n" + "* About\n* Installation\n** via package.el\n** Manual\n* Use\n* Different href styles\n* Example\n")) + +(defun toc-org-hrefify-gh (str) + "Given a heading, transform it into a href using the GitHub +rules." + (let* ((spc-fix (replace-regexp-in-string " " "-" str)) + (upcase-fix (replace-regexp-in-string "[A-Z]" 'downcase spc-fix t)) + (special-chars-fix (replace-regexp-in-string toc-org-special-chars-regexp "" upcase-fix t))) + (concat "#" special-chars-fix))) + +(ert-deftest toc-org-test-hrefify-gh () + "Test the `toc-org-hrefify-gh' function" + (should (equal (toc-org-hrefify-gh "About") "#about")) + (should (equal (toc-org-hrefify-gh "!h@#$%^&*(){}|][:;\"'/?.>,<`~") "#h")) + (should (equal (toc-org-hrefify-gh "!h@#$% ^&*(S){}|][:;\"'/?.>,<`~") "#h-s"))) + +(defun toc-org-hrefify-org (str) + "Given a heading, transform it into a href using the org-mode +rules." + str) + +(defun toc-org-unhrefify (type path) + "Looks for a value in toc-org-hrefify-hash using path as a key." + (let ((ret-type type) + (ret-path path) + (original-path (and (not (eq toc-org-hrefify-hash nil)) + (gethash + (concat + ;; Org 8.3 and above provides type as "custom-id" + ;; and strips the leading hash symbol + (if (equal type "custom-id") "#" "") + (substring-no-properties path)) + toc-org-hrefify-hash + nil)))) + (when toc-org-enable-links-opening + (when original-path + ;; Org 8.2 and below provides type as "thisfile" + (when (equal type "thisfile") + (setq ret-path original-path)) + (when (equal type "custom-id") + (setq ret-type "fuzzy") + (setq ret-path original-path)))) + (cons ret-type ret-path))) + +(defun toc-org-hrefify-toc (toc hrefify &optional hash) + "Format the raw `toc' using the `hrefify' function to transform +each heading into a link." + (with-temp-buffer + (insert toc) + (goto-char (point-min)) + + (while + (progn + (when (looking-at "\\*") + (delete-char 1) + + (while (looking-at "\\*") + (delete-char 1) + (insert (make-string + (+ 2 (or (bound-and-true-p org-list-indent-offset) 0)) + ?\s))) + + (skip-chars-forward " ") + (insert "- ") + + (let* ((beg (point)) + (end (line-end-position)) + (heading (buffer-substring-no-properties + beg end)) + (hrefified (funcall hrefify heading))) + (insert "[[") + (insert hrefified) + (insert "][") + (end-of-line) + (insert "]]") + + ;; maintain the hash table, if provided + (when hash + (puthash hrefified heading hash))) + (= 0 (forward-line 1))))) + + (buffer-substring-no-properties + (point-min) (point-max)))) + +(ert-deftest toc-org-test-hrefify-toc () + (let ((hash (make-hash-table :test 'equal))) + (should (equal (toc-org-hrefify-toc "* About\n" 'upcase hash) + " - [[ABOUT][About]]\n")) + (should (equal (gethash "ABOUT" hash) "About"))) + (let ((hash (make-hash-table :test 'equal))) + (should (equal (toc-org-hrefify-toc "* About\n* Installation\n** via package.el\n** Manual\n* Use\n* Different href styles\n* Example\n" 'upcase hash) + " - [[ABOUT][About]]\n - [[INSTALLATION][Installation]]\n - [[VIA PACKAGE.EL][via package.el]]\n - [[MANUAL][Manual]]\n - [[USE][Use]]\n - [[DIFFERENT HREF STYLES][Different href styles]]\n - [[EXAMPLE][Example]]\n")) + (should (equal (gethash "ABOUT" hash) "About")) + (should (equal (gethash "INSTALLATION" hash) "Installation")) + (should (equal (gethash "VIA PACKAGE.EL" hash) "via package.el")) + (should (equal (gethash "MANUAL" hash) "Manual")) + (should (equal (gethash "USE" hash) "Use")) + (should (equal (gethash "DIFFERENT HREF STYLES" hash) "Different href styles")) + (should (equal (gethash "EXAMPLE" hash) "Example")))) + +(defun toc-org-flush-subheadings (toc max-depth) + "Flush subheadings of the raw `toc' deeper than `max-depth'." + (with-temp-buffer + (insert toc) + (goto-char (point-min)) + + (let ((re "^")) + (dotimes (i (1+ max-depth)) + (setq re (concat re "\\*"))) + (flush-lines re)) + + (buffer-substring-no-properties + (point-min) (point-max)))) + +(ert-deftest toc-org-test-flush-subheadings () + (should (equal (toc-org-flush-subheadings "* About\n" 0) + "")) + (should (equal (toc-org-flush-subheadings "* About\n" 1) + "* About\n")) + (should (equal (toc-org-flush-subheadings "* About\n" 2) + "* About\n")) + + (should (equal (toc-org-flush-subheadings "* About\n* Installation\n** via package.el\n** Manual\n* Use\n* Different href styles\n* Example\n" 0) + "")) + (should (equal (toc-org-flush-subheadings "* About\n* Installation\n** via package.el\n** Manual\n* Use\n* Different href styles\n* Example\n" 1) + "* About\n* Installation\n* Use\n* Different href styles\n* Example\n")) + (should (equal (toc-org-flush-subheadings "* About\n* Installation\n** via package.el\n** Manual\n* Use\n* Different href styles\n* Example\n" 2) + "* About\n* Installation\n** via package.el\n** Manual\n* Use\n* Different href styles\n* Example\n")) + (should (equal (toc-org-flush-subheadings "* About\n* Installation\n** via package.el\n** Manual\n* Use\n* Different href styles\n* Example\n" 3) + "* About\n* Installation\n** via package.el\n** Manual\n* Use\n* Different href styles\n* Example\n"))) + +(defun toc-org-insert-toc (&optional dry-run) + "Looks for a headline with the TOC tag and updates it with the +current table of contents. + +If optional second argument DRY-RUN is provided, then the buffer +is not modified at all. Only the internal hash-table is updated +to enable `org-open-at-point' for TOC links. + +To add a TOC tag, you can use the command +`org-set-tags-command' (C-c C-q). + +In addition to the simple :TOC: tag, you can also use the +following tag formats: + +- :TOC_2: - sets the max depth of the headlines in the table of + contents to 2 (the default) + +- :TOC_2_gh: - sets the max depth as in above and also uses the + GitHub-style hrefs in the table of contents (this style is + default). The other supported href style is 'org', which is the + default org style." + + (interactive) + (when (eq major-mode 'org-mode) + (save-excursion + (goto-char (point-min)) + (let ((case-fold-search t)) + ;; find the first heading with the :TOC: tag + (when (re-search-forward toc-org-toc-org-regexp (point-max) t) + (let* ((tag (match-string 1)) + (depth (if tag + (- (aref tag 1) ?0) ;; is there a better way to convert char to number? + toc-org-max-depth)) + (hrefify-tag (if (and tag (>= (length tag) 4)) + (downcase (substring tag 3)) + toc-org-hrefify-default)) + (hrefify-string (concat "toc-org-hrefify-" hrefify-tag)) + (hrefify (intern-soft hrefify-string))) + (if hrefify + (let ((new-toc + (toc-org-hrefify-toc + (toc-org-flush-subheadings (toc-org-raw-toc) depth) + hrefify + (when toc-org-hrefify-hash + (clrhash toc-org-hrefify-hash))))) + (unless dry-run + (newline (forward-line 1)) + + ;; insert newline if TOC is currently empty + (when (looking-at "^\\*") + (open-line 1)) + + ;; find TOC boundaries + (let ((beg (point)) + (end + (save-excursion + (when (search-forward-regexp "^\\*" (point-max) t) + (forward-line -1)) + (end-of-line) + (point)))) + ;; update the TOC, but only if it's actually different + ;; from the current one + (unless (equal + (buffer-substring-no-properties beg end) + new-toc) + (delete-region beg end) + (insert new-toc))))) + (message (concat "Hrefify function " hrefify-string " is not found"))))))))) + +;;;###autoload +(defun toc-org-enable () + "Enable toc-org in this buffer." + (add-hook 'before-save-hook 'toc-org-insert-toc nil t) + + ;; conservatively set org-link-translation-function + (when (and (equal toc-org-enable-links-opening t) + (or + (not (fboundp org-link-translation-function)) + (equal org-link-translation-function 'toc-org-unhrefify))) + (setq toc-org-hrefify-hash (make-hash-table :test 'equal)) + (setq org-link-translation-function 'toc-org-unhrefify) + (toc-org-insert-toc t))) + +(ert-deftest toc-org-test-insert-toc () + "Test the `toc-org-insert-toc' function" + + (defun toc-org-test-insert-toc-gold-test (content gold) + (with-temp-buffer + (org-mode) + (insert content) + (toc-org-raw-toc) + (toc-org-insert-toc) + (should (equal + (buffer-substring-no-properties + (point-min) (point-max)) + gold)))) + (declare-function toc-org-test-insert-toc-gold-test "toc-org") ;; suppress compiler warning + + (let ((beg "* About\n:TOC:\n drawer\n:END:\n\ntoc-org is a utility to have an up-to-date table of contents in the\norg files without exporting (useful primarily for readme files on\nGitHub).\n\nIt is similar to the [[https://github.com/ardumont/markdown-toc][markdown-toc]] package, but works for org files.\n:TOC:\n drawer\n:END:\n* Hello\n** Good-bye\n*** Salut\n* Table of Contents ")) + (toc-org-test-insert-toc-gold-test + (concat beg ":TOC:") + "* About\n:TOC:\n drawer\n:END:\n\ntoc-org is a utility to have an up-to-date table of contents in the\norg files without exporting (useful primarily for readme files on\nGitHub).\n\nIt is similar to the [[https://github.com/ardumont/markdown-toc][markdown-toc]] package, but works for org files.\n:TOC:\n drawer\n:END:\n* Hello\n** Good-bye\n*** Salut\n* Table of Contents :TOC:\n - [[#about][About]]\n - [[#hello][Hello]]\n - [[#good-bye][Good-bye]]\n") + + (toc-org-test-insert-toc-gold-test + (concat beg ":TOC_1:") + "* About\n:TOC:\n drawer\n:END:\n\ntoc-org is a utility to have an up-to-date table of contents in the\norg files without exporting (useful primarily for readme files on\nGitHub).\n\nIt is similar to the [[https://github.com/ardumont/markdown-toc][markdown-toc]] package, but works for org files.\n:TOC:\n drawer\n:END:\n* Hello\n** Good-bye\n*** Salut\n* Table of Contents :TOC_1:\n - [[#about][About]]\n - [[#hello][Hello]]\n") + + (toc-org-test-insert-toc-gold-test + (concat beg ":TOC_3:") + "* About\n:TOC:\n drawer\n:END:\n\ntoc-org is a utility to have an up-to-date table of contents in the\norg files without exporting (useful primarily for readme files on\nGitHub).\n\nIt is similar to the [[https://github.com/ardumont/markdown-toc][markdown-toc]] package, but works for org files.\n:TOC:\n drawer\n:END:\n* Hello\n** Good-bye\n*** Salut\n* Table of Contents :TOC_3:\n - [[#about][About]]\n - [[#hello][Hello]]\n - [[#good-bye][Good-bye]]\n - [[#salut][Salut]]\n") + + (toc-org-test-insert-toc-gold-test + (concat beg ":TOC_1_org:") + "* About\n:TOC:\n drawer\n:END:\n\ntoc-org is a utility to have an up-to-date table of contents in the\norg files without exporting (useful primarily for readme files on\nGitHub).\n\nIt is similar to the [[https://github.com/ardumont/markdown-toc][markdown-toc]] package, but works for org files.\n:TOC:\n drawer\n:END:\n* Hello\n** Good-bye\n*** Salut\n* Table of Contents :TOC_1_org:\n - [[About][About]]\n - [[Hello][Hello]]\n") + + (toc-org-test-insert-toc-gold-test + (concat beg ":TOC_3_org:") + "* About\n:TOC:\n drawer\n:END:\n\ntoc-org is a utility to have an up-to-date table of contents in the\norg files without exporting (useful primarily for readme files on\nGitHub).\n\nIt is similar to the [[https://github.com/ardumont/markdown-toc][markdown-toc]] package, but works for org files.\n:TOC:\n drawer\n:END:\n* Hello\n** Good-bye\n*** Salut\n* Table of Contents :TOC_3_org:\n - [[About][About]]\n - [[Hello][Hello]]\n - [[Good-bye][Good-bye]]\n - [[Salut][Salut]]\n"))) + +;; Local Variables: +;; compile-command: "emacs -batch -l ert -l *.el -f ert-run-tests-batch-and-exit && emacs -batch -f batch-byte-compile *.el 2>&1 | sed -n '/Warning\|Error/p' | xargs -r ls" +;; End: + +(provide 'toc-org) +;;; toc-org.el ends here diff --git a/doc/CONVENTIONS.org b/doc/CONVENTIONS.org new file mode 100644 index 0000000..76cfc4f --- /dev/null +++ b/doc/CONVENTIONS.org @@ -0,0 +1,376 @@ +#+TITLE: Spacemacs Conventions + +* Spacemacs conventions :TOC_4_gh:noexport: + - [[#code-guidelines][Code guidelines]] + - [[#spacemacs-core-and-layer][Spacemacs core and layer]] + - [[#all-layers][All layers]] + - [[#use-package][Use-package]] + - [[#key-bindings-conventions][Key bindings conventions]] + - [[#reserved-prefix][Reserved prefix]] + - [[#user-prefix][User prefix]] + - [[#major-mode-prefix][Major mode prefix]] + - [[#transient-state][Transient-state]] + - [[#evilified-buffers][Evilified buffers]] + - [[#navigation][Navigation]] + - [[#n-and-n][n and N]] + - [[#code-navigation][Code Navigation]] + - [[#insert-state-buffers][=insert state= buffers]] + - [[#confirm-and-abort][Confirm and Abort]] + - [[#evaluation][Evaluation]] + - [[#repls][REPLs]] + - [[#send-code][Send code]] + - [[#in-terminal][In terminal]] + - [[#building-and-compilation][Building and Compilation]] + - [[#debugging][Debugging]] + - [[#plain-text-markup-languages][Plain Text Markup Languages]] + - [[#headers][Headers]] + - [[#insertion-of-common-elements][Insertion of common elements]] + - [[#text-manipulation][Text manipulation]] + - [[#movement-in-normal-mode][Movement in normal mode]] + - [[#promotion-demotion-and-element-movement][Promotion, Demotion and element movement]] + - [[#table-editing][Table editing]] + - [[#tests][Tests]] + - [[#all-languages][All languages]] + - [[#language-specific][Language specific]] + - [[#toggles][Toggles]] + - [[#refactoring][Refactoring]] + - [[#code-formatting][Code Formatting]] + - [[#help-or-documentation][Help or Documentation]] + - [[#writing-documentation][Writing documentation]] + - [[#spacing-in-documentation][Spacing in documentation]] + +* Code guidelines +** Spacemacs core and layer +Function names follow these conventions: + - =spacemacs/xxx= is an interactive function called =xxx= + - =spacemacs//xxx= is a private function called =xxx= (implementation details) + - =spacemacs|xxx= is a /macro/ called =xxx= + +Variables follow these conventions: + - =spacemacs-xxx= is a variable + - =spacemacs--xxx= is a private variable (implementation details) + +** All layers +A package is initialized in a function with name =/init-xxx= where: + - == is the layer name + - =xxx= is the package name + +** Use-package +- Always use =progn= when a code block requires multiple lines for =:init= or + =:config= keywords. +- If there is only one line of code then try to keep =:init= or =:config= + keywords on the same line. +- Don't nest multiple =use-package= calls unless you have a very good reason + to do it. + +* Key bindings conventions +** Reserved prefix +*** User prefix +~SPC o~ and ~SPC m o~ must not be used by any layer. They are reserved for the +user. + +*** Major mode prefix +~SPC m~ is reserved for the current major mode. Three keys bindings are not an +issue (ie. ~SPC m h d~) since ~SPC m~ can be accessed via ~​,​~. + +*** Transient-state +Whenever possible a transient-state should be enabled with ~M-SPC~ and ~s-M-SPC~. We +need the latter bindings on OS X since ~M-SPC~ is used by the OS for spotlight. + +For instance transient-states dedicated to special buffers like =helm= or =ido= +buffers are good candidates to be put on ~M-SPC~ and ~s-M-SPC~. + +It is recommended to add ~q~ to leave the transient-state. + +** Evilified buffers +/Evilifying/ a buffer is to set the =evilified state= as the default +state for the major mode of the buffer. + +The =evilified state= is derived from the =emacs state= and modify the +map to: +- add ~hjkl~ navigation +- add scrolling feature on ~C-f~, ~C-b~, ~C-d~ and ~C-u~ +- ~G~ and ~gg~ to go to the end and beginning of the buffer +- add incremental search with ~/~, ~n~ and ~N~ +- enabling =evil-ex= on ~:~ +- add =visual state= and =visual line state= on ~v~ and ~V~ +- add yank on ~y~ _in visual state only_ +- activate evil-leader key on ~SPC~ + +Setting the =evilified state= to a mode is done by calling the macro +=spacemacs|evilify-map=. + +/Evilification/ rebinds shadowed key bindings according to the following +rules: +- alphabetic key bindings: ~x~ -> ~X~ -> ~C-x~ -> ~C-X~ +- ~SPC~ -> ~​'​~ +- ~/~ -> ~\~ +- ~:~ -> ~|~ +- ~C-g~ cannot be shadowed + +If a key binding cannot be remapped then it is ignored and a warning message +is displayed in =*Messages*=. + +** Navigation +*** n and N +To be consistent with the Vim way, ~n~ and ~N~ are favored over Emacs ~n~ and +~p~. + +Ideally a transient-state should be provided to smooth the navigation +experience. A transient-state allows to repeat key bindings without entering +each time the prefix commands. More info on transient-states in the +[[file:DOCUMENTATION.org::Transient-states][documentation]]. + +*** Code Navigation +The prefix for going to something is ~SPC m g~. + +| Key | Description | +|---------+-------------------------------------------------| +| ~m g a~ | go to alternate file (i.e. =.h <--> .cpp=) | +| ~m g b~ | go back to previous location (before last jump) | +| ~m g g~ | go to things under point | +| ~m g G~ | go to things under point in other window | +| ~m g t~ | go to corresponding test file if any | + +*** =insert state= buffers +Navigation in buffers like =Helm= and =ido= which are in =insert state= +should be performed with ~C-j~ and ~C-k~ bindings for vertical movements. + +| Key | Description | +|-------+-------------| +| ~C-j~ | go down | +| ~C-k~ | go up | + +** Confirm and Abort +Confirming and aborting actions which are bound to ~C-c C-c~ and ~C-c C-k~ +in raw Emacs are mirrored in Spacemacs to: + +| Key | Description | +|-------------------------+---------------------------| +| ~SPC m ​,​~ and ~SPC m c~ | Valid/Confirm the message | +| ~SPC m a~ and ~SPC m k~ | Abort/Discard the message | + +Some example of these modes are =magit= commit messages, =message-mode= for +mails or =org-mode= notes. + +** Evaluation +Live evaluation of code is under the prefix ~SPC m e~. + +| Key | Description | +|---------+-----------------------------------------------| +| ~m e $~ | put point at the end of the line and evaluate | +| ~m e b~ | evaluate buffer | +| ~m e e~ | evaluate last expression | +| ~m e f~ | evaluate function | +| ~m e l~ | evaluate line | +| ~m e r~ | evaluate region | + +** REPLs +*** Send code +A lot of languages can interact with a REPL. To help keeping a +consistent behavior between those languages the following conventions +should be followed: + - ~SPC m s~ is the prefix for sending code. This allows fast interaction with + the REPL whenever it is possible + - lower case key bindings keep the focus on the current buffer + - upper case key bindings move the focus to the REPL buffer + +| Key | Description | +|---------+--------------------------------------------------------------| +| ~m s b~ | send buffer | +| ~m s B~ | send buffer and switch to REPL | +| ~m s d~ | first key to send buffer and switch to REPL to debug (step) | +| ~m s D~ | second key to send buffer and switch to REPL to debug (step) | +| ~m s f~ | send function | +| ~m s F~ | send function and switch to REPL | +| ~m s i~ | start/switch to REPL inferior process | +| ~m s l~ | send line | +| ~m s L~ | send line and switch to REPL | +| ~m s r~ | send region | +| ~m s R~ | send region and switch to REPL | + +Note: we don't distinguish between the file and the buffer. + +*** In terminal +History navigation in shells or REPLs buffers should be bound as well to +~C-j~ and ~C-k~. + + | Key | Description | + |-------+----------------------------| + | ~C-j~ | next item in history | + | ~C-k~ | previous item in history | + | ~C-l~ | clear screen | + | ~C-r~ | search backward in history | + +** Building and Compilation +The base prefix for major mode specific compilation is ~SPC m c~. + + | Key Binding | Description | + |-------------+-------------------| + | ~m c b~ | compile buffer | + | ~m c c~ | compile | + | ~m c r~ | clean and compile | + +Note: we don't distinguish between the file and the buffer. We can +implement an auto-save of the buffer before compiling the buffer. + +** Debugging +The base prefix for debugging commands is ~SPC d~. + +| Key Binding | Description | +|-------------+-------------------------| +| ~m d a~ | abandon current process | +| ~m d b~ | toggle a breakpoint | +| ~m d B~ | clear all breakpoints | +| ~m d c~ | continue | +| ~m d d~ | start debug session | +| ~m d i~ | inspect value at point | +| ~m d l~ | local variables | +| ~m d n~ | next | +| ~m d r~ | run | +| ~m d s~ | step | + +Notes: + - Ideally a transient-state for breakpoint navigation should be provided. + - If there is no toggle breakpoint function, then it should be implemented at + the spacemacs level and ideally the function should be proposed as a patch + upstream (major mode repository). + +** Plain Text Markup Languages +For layers supporting markup languages please follow the following +keybindings whenever applicable. + +*** Headers +All header functionality should be grouped under ~SPC m h~ + +| Key Binding | Description | +|-------------+--------------------------------------------------| +| ~m h i~ | Insert a header | +| ~m h I~ | Insert a header alternative method (if existing) | +| ~m h 1..10~ | Insert a header of level 1..10 (if possible) | + +*** Insertion of common elements +Insertion of common elements like links or footnotes should be grouped +under ~SPC m i~ + +| Key Binding | Description | +|-------------+------------------| +| ~m i f~ | Insert footnote | +| ~m i i~ | Insert image | +| ~m i l~ | Insert link | +| ~m i u~ | Insert url | +| ~m i w~ | Insert wiki-link | + +*** Text manipulation +Manipulation of text regions should be grouped under ~SPC m x~ + +| Key Binding | Description | +|-------------+-------------------------------| +| ~m x b~ | Make region bold | +| ~m x c~ | Make region code | +| ~m x i~ | Make region italic | +| ~m x q~ | Quote a region | +| ~m x r~ | Remove formatting from region | +| ~m x s~ | Make region strike-through | +| ~m x u~ | Make region underlined | +| ~m x v~ | Make region verbose | + +*** Movement in normal mode +In normal mode Vim style movement should be enabled with these keybindings: + +| Key Binding | Description | +|-------------+----------------------------------------| +| ~g h~ | Move up one level in headings | +| ~g j~ | Move to next heading on same level | +| ~g k~ | Move to previous heading on same level | +| ~g l~ | Move down one level in headings | + +*** Promotion, Demotion and element movement +Promotion, demotion and movement of headings or list elements (whatever is +possible) should be enabled with the following keys in any mode + +| Key Binding | Description | +|-------------+------------------------------| +| ~M-h~ | Promote heading by one level | +| ~M-j~ | Move element down | +| ~M-k~ | Move element up | +| ~M-l~ | Demote heading by one level | + +*** Table editing +If table specific commands are available the they are grouped under the +~SPC m t~ group. + +** Tests +A lot of languages have their own test frameworks. These frameworks +share common actions that we can unite under the same key bindings: + - ~SPC m t~ is the prefix for test execution. + - ~SPC m t X~ is used to execute ~SPC m t x~ but in debug mode (if supported). + +*** All languages + +| Key | Description | +|---------+--------------------------------------------------------------| +| ~m t a~ | execute all the tests of the current project | +| ~m t A~ | execute all the tests of the current project in debug | +| ~m t b~ | execute all the tests of the current buffer | +| ~m t B~ | execute all the tests of the current buffer in debug | +| ~m t t~ | execute the current test (thing at point, function) | +| ~m t T~ | execute the current test in debug (thing at point, function) | + +Note: we don't distinguish between the file and the buffer. We can +implement an auto-save of the buffer before executing the tests of +buffer. + +*** Language specific + +| Key | Description | +|---------+--------------------------------------------------| +| ~m t m~ | execute the tests of the current module | +| ~m t M~ | execute the tests of the current module in debug | +| ~m t s~ | execute the tests of the current suite | +| ~m t S~ | execute the tests of the current suite in debug | + +Note that there are overlaps, depending on the language we will choose +one or more bindings for the same thing + +** Toggles +- Global toggles are under ~SPC t~, ~SPC T~ and ~SPC C-t~ +- Major mode toggles are only under ~SPC m T~ + +** Refactoring +Refactoring prefix is ~SPC m r~. + +** Code Formatting +Major-mode code formatting is under prefix ~SPC m =~. + +| Key Binding | Description | +|-------------+--------------------------| +| ~m = =~ | format thing under point | +| ~m = b~ | format current buffer | +| ~m = f~ | format current function | + +** Help or Documentation +The base prefix for help commands is ~SPC h~. Documentation is considered +as an help command. + +| Key | Description | +|---------+------------------------------------| +| ~m h h~ | documentation of thing under point | +| ~m h r~ | documentation of selected region | + +* Writing documentation +Spacemacs provides an example layer =README.org= file in +=~/.emacs.d/core/templates/README.org.template=. + +** Spacing in documentation +- Spacemacs tries to keep the documentation consistent between all layers by + providing some rules for spacing: + - After each header, you should not add an empty line + - *Exception*: If the first item under the header is a table, add an empty + line after it + - At the end of each header node, there should be an empty line + - Note: Many layer =READMEs= do not follow this convention yet. Please fix + them if you can. + +- To keep things readable only mention the prefix ~SPC~ when documenting + key bindings, you don't need to mention ~M-m~. diff --git a/doc/DOCUMENTATION.org b/doc/DOCUMENTATION.org new file mode 100644 index 0000000..7e4d4b6 --- /dev/null +++ b/doc/DOCUMENTATION.org @@ -0,0 +1,3258 @@ +#+TITLE: Spacemacs documentation + +* Spacemacs documentation :TOC_4_gh:noexport: + - [[#core-pillars][Core Pillars]] + - [[#mnemonic][Mnemonic]] + - [[#discoverable][Discoverable]] + - [[#consistent][Consistent]] + - [[#crowd-configured][Crowd-Configured]] + - [[#highlighted-feature][Highlighted feature]] + - [[#screenshots][Screenshots]] + - [[#who-can-benefit-from-this][Who can benefit from this?]] + - [[#update-and-rollback][Update and Rollback]] + - [[#update-spacemacs-repository][Update Spacemacs repository]] + - [[#automatic-updates][Automatic Updates]] + - [[#updating-from-the-spacemacs-buffer][Updating from the Spacemacs Buffer]] + - [[#updating-manually-with-git][Updating Manually with git]] + - [[#update-packages][Update packages]] + - [[#configuration-layers][Configuration layers]] + - [[#purpose][Purpose]] + - [[#structure][Structure]] + - [[#configure-packages][Configure packages]] + - [[#with-a-layer][With a layer]] + - [[#declaration][Declaration]] + - [[#initialization][Initialization]] + - [[#exclusion][Exclusion]] + - [[#without-a-layer][Without a layer]] + - [[#packages-synchronization][Packages synchronization]] + - [[#types-of-configuration-layers][Types of configuration layers]] + - [[#submitting-a-configuration-layer-upstream][Submitting a configuration layer upstream]] + - [[#example-themes-megapack-example][Example: Themes Megapack example]] + - [[#managing-private-configuration-layers][Managing private configuration layers]] + - [[#using-the-private-directory][Using the private directory]] + - [[#using-an-external-git-repository][Using an external Git repository]] + - [[#using-a-personal-branch][Using a personal branch]] + - [[#tips-for-writing-layers][Tips for writing layers]] + - [[#dotfile-configuration][Dotfile Configuration]] + - [[#dotfile-installation][Dotfile Installation]] + - [[#alternative-dotdirectory][Alternative dotdirectory]] + - [[#synchronization-of-dotfile-changes][Synchronization of dotfile changes]] + - [[#testing-the-dotfile][Testing the dotfile]] + - [[#dotfile-contents][Dotfile Contents]] + - [[#configuration-functions][Configuration functions]] + - [[#custom-variables][Custom variables]] + - [[#declaring-configuration-layers][Declaring Configuration layers]] + - [[#setting-configuration-layers-variables][Setting configuration layers variables]] + - [[#disabling-layer-services-in-other-layers][Disabling layer services in other layers]] + - [[#selectingignoring-packages-of-a-layer][Selecting/Ignoring packages of a layer]] + - [[#excluding-packages][Excluding packages]] + - [[#concepts][Concepts]] + - [[#editing-styles][Editing Styles]] + - [[#vim][Vim]] + - [[#emacs][Emacs]] + - [[#hybrid][Hybrid]] + - [[#states][States]] + - [[#evilified-modes][Evilified modes]] + - [[#evil-leader][Evil leader]] + - [[#universal-argument][Universal argument]] + - [[#transient-states][Transient-states]] + - [[#differences-between-vim-evil-and-spacemacs][Differences between Vim, Evil and Spacemacs]] + - [[#the-vim-surround-case][The vim-surround case]] + - [[#evil-plugins][Evil plugins]] + - [[#binding-keys][Binding keys]] + - [[#gui-elements][GUI Elements]] + - [[#color-themes][Color themes]] + - [[#font][Font]] + - [[#gui-toggles][GUI Toggles]] + - [[#global-line-numbers][Global line numbers]] + - [[#mode-line][Mode-line]] + - [[#powerline-font-installation-for-terminal-mode-users][Powerline font installation for terminal-mode users]] + - [[#flycheck-integration][Flycheck integration]] + - [[#anzu-integration][Anzu integration]] + - [[#battery-status-integration][Battery status integration]] + - [[#powerline-separators][Powerline separators]] + - [[#minor-modes][Minor Modes]] + - [[#customizing-the-mode-line][Customizing the mode-line]] + - [[#layouts-and-workspaces][Layouts and workspaces]] + - [[#layouts][Layouts]] + - [[#the-default-layout][The default layout]] + - [[#project-layouts][Project layouts]] + - [[#custom-layouts][Custom Layouts]] + - [[#saveload-layouts-into-a-file][Save/Load layouts into a file]] + - [[#layout-key-bindings][Layout key bindings]] + - [[#workspaces][Workspaces]] + - [[#workspace-key-bindings][Workspace key bindings]] + - [[#commands][Commands]] + - [[#vim-key-bindings][Vim key bindings]] + - [[#escaping][Escaping]] + - [[#executing-vim-and-emacs-exm-x-commands][Executing Vim and Emacs ex/M-x commands]] + - [[#leader-key][Leader key]] + - [[#additional-text-objects][Additional text objects]] + - [[#reserved-prefix-command-for-user][Reserved prefix command for user]] + - [[#completion][Completion]] + - [[#helm][Helm]] + - [[#c-z-and-tab-switch][C-z and Tab switch]] + - [[#helm-focus][Helm focus]] + - [[#helm-transient-state][Helm transient state]] + - [[#discovering][Discovering]] + - [[#key-bindings][Key bindings]] + - [[#which-key][Which-key]] + - [[#helm-describe-key-bindings][Helm describe key bindings]] + - [[#getting-help][Getting help]] + - [[#available-layers][Available layers]] + - [[#available-packages-in-spacemacs][Available packages in Spacemacs]] + - [[#new-packages-from-elpa-repositories][New packages from ELPA repositories]] + - [[#toggles][Toggles]] + - [[#navigating][Navigating]] + - [[#pointcursor][Point/Cursor]] + - [[#smooth-scrolling][Smooth scrolling]] + - [[#vim-motions-with-avy][Vim motions with avy]] + - [[#ace-link-mode][ace-link mode]] + - [[#unimpaired-bindings][Unimpaired bindings]] + - [[#jumping-joining-and-splitting][Jumping, Joining and Splitting]] + - [[#jumping][Jumping]] + - [[#joining-and-splitting][Joining and splitting]] + - [[#window-manipulation][Window manipulation]] + - [[#window-manipulation-key-bindings][Window manipulation key bindings]] + - [[#window-manipulation-transient-state][Window manipulation transient state]] + - [[#golden-ratio][Golden ratio]] + - [[#buffers-and-files][Buffers and Files]] + - [[#buffers-manipulation-key-bindings][Buffers manipulation key bindings]] + - [[#buffers-manipulation-transient-state][Buffers manipulation transient state]] + - [[#special-buffers][Special Buffers]] + - [[#files-manipulations-key-bindings][Files manipulations key bindings]] + - [[#emacs-and-spacemacs-files][Emacs and Spacemacs files]] + - [[#browsing-files-with-helm][Browsing files with Helm]] + - [[#ido][Ido]] + - [[#ido-transient-state][Ido transient state]] + - [[#neotree-file-tree][NeoTree file tree]] + - [[#neotree-navigation][NeoTree navigation]] + - [[#opening-files-with-neotree][Opening files with NeoTree]] + - [[#other-neotree-key-bindings][Other NeoTree key bindings]] + - [[#neotree-mode-line][NeoTree mode-line]] + - [[#neotree-source-control-integration][NeoTree Source Control Integration]] + - [[#neotree-theme][NeoTree Theme]] + - [[#bookmarks][Bookmarks]] + - [[#docview-mode][DocView mode]] + - [[#auto-saving][Auto-saving]] + - [[#frequency-of-auto-saving][Frequency of auto-saving]] + - [[#location-of-auto-saved-files][Location of auto-saved files]] + - [[#disable-auto-save][Disable auto-save]] + - [[#searching][Searching]] + - [[#with-an-external-tool][With an external tool]] + - [[#useful-key-bindings][Useful key bindings]] + - [[#searching-in-current-file][Searching in current file]] + - [[#searching-in-all-open-buffers-visiting-files][Searching in all open buffers visiting files]] + - [[#searching-in-files-in-an-arbitrary-directory][Searching in files in an arbitrary directory]] + - [[#searching-in-a-project][Searching in a project]] + - [[#searching-the-web][Searching the web]] + - [[#persistent-highlighting][Persistent highlighting]] + - [[#highlight-current-symbol][Highlight current symbol]] + - [[#visual-star][Visual Star]] + - [[#listing-symbols-by-semantic][Listing symbols by semantic]] + - [[#helm-swoop][Helm-swoop]] + - [[#editing][Editing]] + - [[#paste-text][Paste text]] + - [[#paste-transient-state][Paste Transient-state]] + - [[#auto-indent-pasted-text][Auto-indent pasted text]] + - [[#text-manipulation-commands][Text manipulation commands]] + - [[#text-insertion-commands][Text insertion commands]] + - [[#smartparens-strict-mode][Smartparens Strict mode]] + - [[#zooming][Zooming]] + - [[#text][Text]] + - [[#frame][Frame]] + - [[#increasedecrease-numbers][Increase/Decrease numbers]] + - [[#spell-checking][Spell checking]] + - [[#region-selection][Region selection]] + - [[#expand-region][Expand-region]] + - [[#indent-text-object][Indent text object]] + - [[#region-narrowing][Region narrowing]] + - [[#replacing-text-with-iedit][Replacing text with iedit]] + - [[#iedit-states-key-bindings][iedit states key bindings]] + - [[#examples][Examples]] + - [[#replacing-text-in-several-files][Replacing text in several files]] + - [[#renaming-files-in-a-directory][Renaming files in a directory]] + - [[#commenting][Commenting]] + - [[#regular-expressions][Regular expressions]] + - [[#deleting-files][Deleting files]] + - [[#editing-lisp-code][Editing Lisp code]] + - [[#lisp-key-bindings][Lisp Key Bindings]] + - [[#mouse-usage][Mouse usage]] + - [[#managing-projects][Managing projects]] + - [[#registers][Registers]] + - [[#errors-handling][Errors handling]] + - [[#compiling][Compiling]] + - [[#modes][Modes]] + - [[#major-mode-leader-key][Major Mode leader key]] + - [[#helm-1][Helm]] + - [[#emacs-server][Emacs Server]] + - [[#connecting-to-the-emacs-server][Connecting to the Emacs server]] + - [[#keeping-the-server-alive][Keeping the server alive]] + - [[#troubleshoot][Troubleshoot]] + - [[#loading-fails][Loading fails]] + - [[#upgradingdowngrading-emacs-version][Upgrading/Downgrading Emacs version]] + - [[#achievements][Achievements]] + - [[#issues][Issues]] + - [[#merged-pull-requests][Merged Pull Requests]] + - [[#stars-forks-and-watchers][Stars, forks and watchers]] + - [[#gitter-chat][Gitter chat]] + - [[#first-times][First times]] + - [[#special-mentions][Special Mentions]] + - [[#special-titles][Special Titles]] + - [[#thank-you][Thank you]] + +* Core Pillars +Four core pillars: Mnemonic, Discoverable, Consistent and "Crowd-Configured". + +If any of these core pillars is violated open an issue and we'll try our best +to fix it. + +** Mnemonic +Key bindings are organized using mnemonic prefixes like ~b~ for buffer, ~p~ for +project, ~s~ for search, ~h~ for help, etc... + +** Discoverable +Innovative real-time display of available key bindings. Simple query +system to quickly find available layers, packages, and more. + +** Consistent +Similar functionalities have the same key binding everywhere thanks to a +clearly defined set of conventions. Documentation is mandatory for any layer +that ships with Spacemacs. + +** Crowd-Configured +Community-driven configuration provides curated packages tuned by power users +and bugs are fixed quickly. + +* Highlighted feature +- *Bring the efficiency of modal editing* to the powerful Emacs lisp platform. + Modal UX is optional and Spacemacs can be used with only Emacs key bindings. + +- Integrate nicely with =Evil= states (=Vim= modes). + +- *Keep your fingers on the home row* for quicker editing with support for + QWERTY and BEPO layouts. + +- *Minimalistic and nice graphical UI* keeps your available screen space for + what matters: your text files. + +- *Fast boot time*: packages and configuration are lazy-loaded as much as + possible. + +- *Lower the risk of RSI* by heavily using the space bar instead of modifiers. + If you have issues with your thumbs you can still use Spacemacs using + modifiers. + +- Contribute easily your improvements and new configuration layers. + +- *Very active and helpful community* on =Gitter= and =IRC= + (via Gitter IRC bridge) + +* Screenshots + +[[file:img/spacemacs-python.png]] +/Python/ + +*Note*: Even though screenshots are updated frequently, Spacemacs is evolving +quickly and the screenshots may not reflect exactly the current state of the +project. + +* Who can benefit from this? +- Spacemacs was initially intended to be used by *Vim users* who want to go to + the next level by using Emacs (see [[./VIMUSERS.org][guide]] for Vimmers). But it is now + perfectly *usable by non Vim users* by choosing the =emacs= editing style. + +- It is also a good fit for people wanting to *lower the [[http://en.wikipedia.org/wiki/Repetitive_strain_injury][risk of RSI]]* induced by + the default Emacs key bindings. (This is an assumption, there are no official + studies to prove this!) If you have issues using your thumbs you can still + use the =emacs= editing style which puts the leader key on a modifier + combination. + +- Emacs users wanting to learn *a different way to edit files* or wanting to + learn Vim key bindings or even wanting to mix both editing styles by setting + their style to =hybrid=. + +- Emacs users wanting a simple but deep configuration system that greatly + *lower the risk of .emacs bankruptcy*. + +- *Pair-programming* users thanks to out of the box support for dynamic + switching of editing style. A Vim user and an Emacs user can use the same + Spacemacs comfortably. + +* Update and Rollback +** Update Spacemacs repository +There are several methods of updating the core files and layer information for +Spacemacs. It is recommended to update the packages first; see the next section. + +*** Automatic Updates +Spacemacs will automatically check for a new version every startup. When it +detects that a new version is available an arrow will appear in the modeline. +Click it to update Spacemacs. You must restart Emacs after updating. +[[file:img/powerline-update.png]] +/Update Button/ + +*Note*: If you use the =develop= branch of Spacemacs, automatic update is +disabled---you have to update manually using git. + +*** Updating from the Spacemacs Buffer +Use the button labeled "Update Spacemacs" in the Spacemacs buffer. You will be +prompted for the version you would like to use. + +*Note*: If you use the =develop= branch of Spacemacs, you cannot use this method. + +*** Updating Manually with git +To update manually close Emacs and update the git repository: + +#+BEGIN_SRC sh +$ git pull origin master +#+END_SRC + +*Note*: The master branch is considered to be immutable in the sense that you +must not modify it by adding your own commit. If you do so you will break the +automatic update of Spacemacs on the master branch. To fork Spacemacs code you +have to use a custom branch that you manage manually. + +** Update packages +To update the Emacs packages used by Spacemacs press RET (enter) or click on the +link =[Update Packages]= in the startup page under the banner then restart +Emacs. If you prefer, you can use the command +=configuration-layer/update-packages= instead of the button. + +If anything goes wrong you should be able to rollback the update by pressing +~RET~ or clicking on the =[Rollback Package Update]= link in the startup page +and choosing a rollback slot (sorted by date). This button uses the command +=configuration-layer/rollback=. + +* Configuration layers +This section is an overview of layers. A more extensive introduction to writing +configuration layers can be found [[file:LAYERS.org][here]] (recommended reading!). + +** Purpose +Layers help collect related packages together to provide features. For example, +the =python= layer provides auto-completion, syntax checking, and REPL support +for python files. This approach helps keep configuration organized and reduces +overhead for the user by keeping them from having to think about what packages +to install. To install all the =python= features the user has just to add the +=python= layer to their dotfile. + +** Structure +Configuration is organized in layers. Each layer has the following structure: + +#+BEGIN_EXAMPLE + [layer_name] + |__ [local] + | |__ [package 1] + | | ... + | |__ [package n] + |-- layers.el + |__ packages.el + |__ funcs.el + |__ config.el + |__ keybindings.el + + [] = directory +#+END_EXAMPLE + +Where: + +| File | Usage | +|----------------+--------------------------------------------------------------------------------------------------| +| layers.el | The place to declare additional layers | +| packages.el | The list of packages and their configuration functions (init, post-init, etc...) | +| funcs.el | All functions defined in the layer (used in package configuration for instance) | +| config.el | Layer configuration (defines the layer variables default values and setup some config variables) | +| keybindings.el | General key bindings no tied to a specific package configuration | + +=Packages= can be: +- =ELPA= packages installed from an =ELPA= compliant repository +- local packages in a layer's =local= folder +- installed from an online source using [[https://github.com/quelpa/quelpa][quelpa]]. + +** Configure packages +*** With a layer +**** Declaration +=Packages= are declared in a variable called =-packages= where == +is the name of the layer. + +Example: + +#+BEGIN_SRC emacs-lisp +(setq -packages '(package1 package2 ...) +#+END_SRC + +All packages from all layers are processed in alphabetical order so sometimes +you'll have to use some =with-eval-after-load= black magic to configure them +properly. For instance if package =A= depends on =B= then you can configure +=A= with: + +#+BEGIN_SRC emacs-lisp +(with-eval-after-load 'B ...) +#+END_SRC + +For details on installing packages using quelpa or local packages see [[file:LAYERS.org::packages.el][LAYERS]]. + +**** Initialization +To initialize a package =xxx=, define a function with this format in +=packages.el=: + +#+BEGIN_SRC emacs-lisp +(defun /init-xxx () ...body ) +#+END_SRC + +It is common to define the body with the [[https://github.com/jwiegley/use-package][use-package]] macro. + +**** Exclusion +It is possible to exclude some packages from Spacemacs on a per-layer basis. +This is useful when a configuration layer aims to replace a stock package +declared in the Spacemacs layer. + +To do so add the package names to exclude to the variable +=-excluded-packages=. + +Example: + +#+BEGIN_SRC emacs-lisp +(setq -excluded-packages '(package1 package2 ...) +#+END_SRC + +*** Without a layer +Sometimes a layer can be an unnecessary overhead, this is the case if you just +want to install a package with very few configuration associated to it. A good +example is some niche language where you are only interested in syntax +highlighting. + +You can install such packages by adding them to the variable +=dotspacemacs-additional-packages= under the =dotspacemacs/layers= function in your dotfile. + +For example, to install =llvm-mode= and =dts-mode=: +#+BEGIN_SRC emacs-lisp +(defun dotspacemacs/layers () + "Configuration Layers declaration..." + (setq-default + ;; ... + dotspacemacs-additional-packages '(llvm-mode dts-mode) + ;; ... + )) +#+END_SRC + +If you want to add some configuration for them then put the configuration in +the =dotspacemacs/user-config= function or consider creating a layer. + +** Packages synchronization +Spacemacs will only install the packages that are explicitly used by the user. +A package is considered to be used if its layer is used (i.e. listed in +=dotspacemacs-configuration-layers=). +Any packages that are not used is considered to be orphan and is deleted at +the next startup of Emacs. + +** Types of configuration layers +There are two types of configuration layers: + - distributed layers (in the =layers= directory, those layers are contributions shared + by the community and merged upstream) + - private (in the =private= directory, they are ignored by Git) + +** Submitting a configuration layer upstream +If you decide to provide a configuration layer, please check the contribution +guidelines first in [[file:../CONTRIBUTING.org][CONTRIBUTING]]. + +** Example: Themes Megapack example +This is a simple configuration layer listing a bunch of themes which you can +find [[../layers/themes-megapack/README.org][here]]. + +To install it, just add =themes-megapack= to your =~/.spacemacs= like so: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers '(themes-megapack)) +#+END_SRC + +Adding this layer will install around 100 themes; to uninstall them remove the +layer from the =dotspacemacs-configuration-layers= and press ~SPC f e R~. + +** Managing private configuration layers +Spacemacs's configuration system is flexible enough to let you manage your +private layers in different ways. + +*** Using the private directory +Everything in the private directory is ignored by Git so it is a good place to +store private layers. There is a huge drawback to this approach though: /your +layers are not source controlled/. + +*** Using an external Git repository +This is the recommended way to manage your private layers. + +The best approach is to store all your private layers into an external Git +repository. It is especially a good practice to store them in your =dotfiles= +repository if you have one. Put also your =~/.spacemacs= file in it. + +Then you are free to symlink your layers into =~/emacs.d/private= /or/ let them +anywhere you want and reference the parent directory in the variable +=dotspacemacs-configuration-layer-path= of your =~/.spacemacs=. + +Note that you could also have a dedicated repository for all your private layers +and then directly clone this repository in =~/.emacs.d/private=. + +*** Using a personal branch +The final main way to manage your private layers is to push them in a personal +branch that you keep up to date with upstream =master= or =develop=. + +** Tips for writing layers +Please refer to [[file:LAYERS.org][this]] introduction for some tips on writing layers, and how to +best make them fit with the Spacemacs philosophy and loading strategy. + +* Dotfile Configuration +User configuration can be stored in your =~/.spacemacs= file. + +** Dotfile Installation +The very first time Spacemacs starts up, it will ask you several questions +and then install the =.spacemacs= in your =HOME= directory. + +** Alternative dotdirectory +A dotdirectory =~/.spacemacs.d/= can be used instead of a dotfile. +If you want to use this option, move =~/.spacemacs= to =~/.spacemacs.d/init.el=. + +It is also possible to override the location of =~/.spacemacs.d/= using the +environment variable =SPACEMACSDIR=. Of course you can also use symlinks to +change the location of this directory. + +*Note:* =~/.spacemacs= will always take priority over =~/.spacemacs.d/init.el=, +so =~/.spacemacs= must not exist for =~/.spacemacs.d/init.el= to be used by +Spacemacs. + +** Synchronization of dotfile changes +To apply the modifications made in =~/.spacemacs= press ~SPC f e R~. It will +re-execute the Spacemacs initialization process. + +*Note*: A synchronization re-executes the functions =dotspacemacs/init=, +=dotspacemacs/user-init= and =dotspacemacs/user-config=. +Depending on the content of this functions you may encounter some unwanted side +effects. For instance if you use a toggle in =dotspacemac/user-config= to enable +some behavior, this behavior will be turned off whenever the dotfile is +re-synchronized. To avoid these side-effects it is recommended to either use +=setq= expressions instead of toggle functions, or to use the =on= or =off= +versions instead (i.e. instead of =spacemacs/toggle-=, use +=spacemacs/toggle--on= or =spacemacs/toggle--off=). + +It is possible to /skip/ the execution of =dotspacemacs/user-config= with the +universal argument (~SPC u SPC f e R~). + +** Testing the dotfile +You can use the command =SPC SPC dotspacemacs/test-dotfile= to check if your +=~/.spacemacs= looks correct. This will check, among other things, whether the +declared layers can be found and that the variables have sensible values. These +tests are also run automatically when you synchronize with ~SPC f e R~. + +** Dotfile Contents +*** Configuration functions +Three special functions in the =~/.spacemacs= file can be used to perform +configuration at the beginning and end of Spacemacs loading process: + +- =dotspacemacs/layers= is called at the very startup of Spacemacs initilialization, + this is where you set the Spacemacs distribution and declare layers to be used + in your configuration. You can also add or excluded packages of your choice + and tweak some behavior of Spacemacs loading. +- =dotspacemacs/init= is called at the very startup of Spacemacs initialization + before layers configuration. *You should not put any user code* in there + besides modifying the Spacemacs variable values prefixed with =dotspacemacs-=. +- =dotspacemacs/user-init= is called immediately after =dotspacemacs/init=, + before layer configuration. This function is mostly useful for variables + that need to be set before packages are loaded. +- =dotspacemacs/user-config= is called at the very end of Spacemacs + initialization after layers configuration. This is the place where most of + your configurations should be done. Unless it is explicitly specified that a + variable should be set before a package is loaded, you should place your code + here. + +*** Custom variables +Custom variables configuration from =M-x customize-group= built-in Emacs feature +are automatically saved by Emacs at the end of your =~/.spacemacs= file. + +** Declaring Configuration layers +To use a configuration layer, declare it in your dotfile by adding it to the +=dotspacemacs-configuration-layers= variable of your =~/.spacemacs=. + +*Note:* In this documentation a =used layer= is equivalent to a =declared +layer=. + +For instance, [[Thank you][RMS]] can add his private configuration layer like this: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '( + ;; other layers + ;; rms layer added at the end of the list + rms + )) +#+END_SRC + +Official layers shipped with Spacemacs are stored in =~/.emacs.d/layers=. The +directory =~/.emacs.d/private= is a drop-in location for your private layers. +It is possible to put layers at the location of your choice provided you tell +Spacemacs where to look for them. This is done by setting the list +=dotspacemacs-configuration-layer-path= in your =~/.spacemacs=. For instance +to add some layers in =~/.myconfig=, set the variable like this: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layer-path '("~/.myconfig/")) +#+END_SRC + +*** Setting configuration layers variables +Some configuration layers have configuration variables to enable specific +feature. For instance the [[../layers/%2Bsource-control/git][git layer]] has several configuration variables, they +can be set directly in the =dotspacemacs-configuration-layers= like this: + +#+BEGIN_SRC emacs-lisp +(defun dotspacemacs/layers () + ;; List of configuration layers to load. + (setq-default dotspacemacs-configuration-layers + '(auto-completion + (git :variables + git-magit-status-fullscreen t + git-variable-example nil) + smex))) +#+END_SRC + +The =:variables= keyword is a convenience to keep layer configuration close to +their declaration. Setting layer variables in the =dotspacemacs/user-init= +function of your dotfile is also a perfectly valid way to configure a layer. + +*** Disabling layer services in other layers +Often layers enable services that other layers can use. For instance if you use +the layer =auto-completion= then every other layers supporting =auto-completion= +will have this feature enabled. + +Sometimes you may want to disable a service added by a layer in some specific +layers. Say you want to disable =auto-completion= in =org= and =git= layers, +you can do it with the following layer declaration. + +#+BEGIN_SRC emacs-lisp +(defun dotspacemacs/layers () + ;; List of configuration layers to load. + (setq-default dotspacemacs-configuration-layers + '(org git + (auto-completion :disabled-for org git)))) +#+END_SRC + +You can also use the =:enabled-for= construct to disable it for /all/ layers +/except/ those explicitly identified. + +#+BEGIN_SRC emacs-lisp +(defun dotspacemacs/layers () + ;; List of configuration layers to load. + (setq-default dotspacemacs-configuration-layers + '(java python c-c++ + (auto-completion :enabled-for java python)))) +#+END_SRC + +Note that =:enabled-for= may be an empty list. + +#+BEGIN_SRC emacs-lisp +(defun dotspacemacs/layers () + ;; List of configuration layers to load. + (setq-default dotspacemacs-configuration-layers + '(java python c-c++ + (auto-completion :enabled-for)))) +#+END_SRC + +=:enabled-for= takes precedence over =:disabled-for= if both are present. + +*** Selecting/Ignoring packages of a layer +By default a declared layer installs/configures all its associated packages. You +may want to select only some of them or ignoring some of them. This is possible +with the =:packages= keyword. + +For instance to ignore the =neotree= and =fancy-battery= packages from +=spacemacs-ui-visual= layer: + +#+BEGIN_SRC emacs-lisp +(defun dotspacemacs/layers () + ;; List of configuration layers to load. + (setq-default dotspacemacs-configuration-layers + '(auto-completion + (spacemacs-ui-visual :packages (not neotree fancy-battery)))) +#+END_SRC + +The opposite would be to ignore all packages except =neotree= and +=fancy-battery=: + +#+BEGIN_SRC emacs-lisp +(defun dotspacemacs/layers () + ;; List of configuration layers to load. + (setq-default dotspacemacs-configuration-layers + '(auto-completion + (spacemacs-ui-visual :packages neotree fancy-battery))) +#+END_SRC + +*Note:* Ignoring a package from a layer is different than excluding a package. +An excluded packages is completely removed from your configuration whereas an +ignored package is ignored only for a given layer but it can remain on your +system. It happens that if the given layer is the owner of the package then +ignoring this package is the same as excluding it (because the package becomes +orphan so it is considered unused by Spacemacs). + +*** Excluding packages +You can exclude packages you don't want to install with the variable +=dotspacemacs-excluded-packages= (see [[Configuration layers][Configuration layers]] for more info +on packages). + +For instance, to disable the =rainbow-delimiters= package: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-excluded-packages '(rainbow-delimiters)) +#+END_SRC + +When you exclude a package, Spacemacs will automatically delete it for you the +next time you launch Emacs or at the next dotfile synchronization. All the +orphan dependencies are also deleted automatically. Excluding a package +effectively remove _all_ references to it in Spacemacs without breaking the rest +of the configuration, this is a powerful feature which allows you to quickly +remove any feature from Spacemacs. + +*Note:* A few packages are essential for Spacemacs to correctly operate, those +packages are protected and cannot be excluded or unsintalled even if they become +orphans or are excluded. =use-package= is an example of a protected package that +cannot be removed from Spacemacs. + +* Concepts +** Editing Styles +Spacemacs comes with several editing styles which can be switched dynamically +providing an easier way to do pair programming, for instance between a Vim user +and an Emacs user. + +Three styles are available: +- Vim, +- Emacs, +- Hybrid (a mix between Vim and Emacs). + +*** Vim +Spacemacs behaves like in Vim using [[https://gitorious.org/evil/pages/Home][Evil]] mode package to emulate Vim key bindings. +This is the default style of Spacemacs; it can be set explicitly by setting +the =dotspacemacs-editing-style= variable to =vim= in the dotfile. + +To bind keys in Vim editing style (=insert state=): + +#+BEGIN_SRC emacs-lisp +(define-key evil-insert-state-map (kbd "C-]") 'forward-char) +#+END_SRC + +*** Emacs +Spacemacs behaves like in raw Emacs using the Holy mode which configures Evil to +make the =emacs state= the default state everywhere. +Set the =dotspacemacs-editing-style= variable to =emacs= in the dotfile. + +In Emacs style the leader is available on ~M-m~. It is possible to toggle it on +and off with ~SPC t E e~ and ~M-m t E e~. When off the =vim= style is enabled. + +To bind keys in Emacs editing style (=emacs state=): + +#+BEGIN_SRC emacs-lisp +(define-key evil-emacs-state-map (kbd "C-]") 'forward-char) +#+END_SRC + +*** Hybrid +The hybrid editing style is like the Vim style except that =insert state= is +replaced by a new state called =hybrid state=. In =hybrid state= all the Emacs +key bindings are available; this is like replacing the =insert state= with the +=emacs state= but provides an isolated key map =evil-hybrid-state-map=. + +To bind keys in Hybrid editing style (=hybrid state=): + +#+BEGIN_SRC emacs-lisp +(define-key evil-hybrid-state-map (kbd "C-]") 'forward-char) +#+END_SRC + +This style can be tweaked to be more like Emacs or more like Vim depending +on the user preferences. The following variable are available to change the +style configuration: + +- =hybrid-mode-default-state= The default state when opening a new buffer, + default is =normal=. Set it to =emacs= for a more emacsy style. +- =hybrid-mode-enable-hjkl-bindings= If non nil then packages will configure + =h j k l= key bindings for navigation. +- =hybrid-mode-enable-evilified-state= If non nil buffer are =evilified= when + supported, if nil then =emacs= state is enabled in those buffers instead. + +Default configuration is: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-editing-style '(hybrid :variables + hybrid-mode-enable-evilified-state t + hybrid-mode-enable-hjkl-bindings nil + hybrid-mode-default-state 'normal) +#+END_SRC + +To toggle the hybrid style on and off use ~SPC t E h~ and ~M-m t E h~. When +off the =vim= style is enabled. + +** States +Spacemacs has 10 states: + +| State | Default Color | Description | +|--------------+---------------+------------------------------------------------------------------------------------------------------------| +| normal | orange | like the =normal mode of Vim=, used to execute and combine commands | +| insert | green | like the =insert mode of Vim=, used to actually insert text | +| visual | gray | like the =visual mode of Vim=, used to make text selection | +| motion | purple | exclusive to =Evil=, used to navigate read only buffers | +| emacs | blue | exclusive to =Evil=, using this state is like using a regular Emacs without Vim | +| replace | chocolate | exclusive to =Evil=, overwrites the character under point instead of inserting a new one | +| hybrid | blue | exclusive to Spacemacs, this is like the insert state except that all the emacs key bindings are available | +| evilified | light brown | exclusive to Spacemacs, this is an =emacs state= modified to bring Vim navigation, selection and search. | +| lisp | pink | exclusive to Spacemacs, used to navigate Lisp code and modify it (more [[Editing Lisp code][info]]) | +| iedit | red | exclusive to Spacemacs, used to navigate between multiple regions of text using =iedit= (more [[Replacing text with iedit][info]]) | +| iedit-insert | red | exclusive to Spacemacs, used to replace multiple regions of text using =iedit= (more [[Replacing text with iedit][info]]) | + +Note: Technically speaking there is also the =operator= evil state. + +** Evilified modes +Some buffers are not for editing text and provide their own keybindings for +certain operations. These often conflict with Vim bindings. To make such buffers +behave more like Vim in a consistent manner, they use a special state called +/evilified/ state. In evilified state, a handful of keys work as in Evil, namely +=/=, =:=, =h=, =j=, =k=, =l=, =n=, =N=, =v=, =V=, =gg=, =G=, =C-f=, =C-b=, +=C-d=, =C-e=, =C-u=, =C-y= and =C-z=. All other keys work as intended by the +underlying mode. + +Shadowed keys are moved according to the pattern: =a= → =A= → =C-a= → =C-A= + +For example, if the mode binds a function to =n=, that is found under =C-n= in +evilified state, since both =n= and =N= are reserved, but =C-n= is not. On the +other hand, anything originally bound to =k= will be found on =K=, since =k= is +reserved but =K= is not. If there is a binding on =K=, that will be moved to +=C-k=. + +In addition to this, =C-g=, being an important escape key in Emacs, is skipped. +So anything bound to =g= originally will be found on =C-G=, since =g=, =G= and +=C-g= are all reserved. + +** Evil leader +Spacemacs uses a leader key to bind almost all its key bindings. + +This leader key is commonly set to ~​,​~ by Vim users, in Spacemacs the leader +key is set on ~SPC~ (the space bar, hence the name =spacemacs=). This key is the +most accessible key on a keyboard and it is pressed with the thumb which is a +good choice to lower the risk of [[http://en.wikipedia.org/wiki/Repetitive_strain_injury][RSI]]. It can be customized to any other key +using the variable =dotspacemacs-leader-key= and =dotspacemacs-emacs-leader-key=. + +With Spacemacs there is no need to remap your keyboard modifiers to attempt +to reduce the risk of RSI, every command can be executed very easily while you +are in =normal= mode by pressing the ~SPC~ leader key, here are a few examples: + +- Save a buffer: ~SPC f s~ +- Save all opened buffers: ~SPC f S~ +- Open (switch) to a buffer with =helm=: ~SPC b b~ + +** Universal argument +The universal argument ~C-u~ is an important command in Emacs but it is also a +very handy Vim key binding to scroll up. + +Spacemacs binds ~C-u~ to =scroll-up= and change the universal argument binding +to ~SPC u~. + +*Note*: ~SPC u~ is not working before =helm-M-x= (~SPC SPC~). Instead, call +=helm-M-x= first, select the command you want to run, and press ~C-u~ before +pressing ~RETURN~. For instance: ~SPC SPC org-reload C-u RET~ + +** Transient-states +Spacemacs defines a wide variety of =transient states= (temporary overlay maps) +where it makes sense. This prevents one from doing repetitive and tedious +presses on the ~SPC~ key. + +When a =transient state= is active, a documentation is displayed in the +minibuffer. Additional information may as well be displayed in the minibuffer. + +Auto-highlight-symbol transient state: +[[file:img/spacemacs-ahs-transient-state.png]] +[[Text][Text scale transient state]]: + +[[file:img/spacemacs-scale-transient-state.png]] + +* Differences between Vim, Evil and Spacemacs +- The ~​,​~ key does "repeat last ~f~, ~t~, ~F~, or ~T~ command in + opposite direction in =Vim=, but in Spacemacs it is the major mode specific + leader key by default (which can be set on another key binding in the + dotfile). + +Send a PR to add the differences you found in this section. + +** The vim-surround case +There is one obvious visible difference though. It is not between =Evil= and +=Vim= but between Spacemacs and [[https://github.com/tpope/vim-surround][vim-surround]]: in visual mode the =surround= command is on ~S~ +in =vim-surround= whereas it is on ~s~ in Spacemacs. + +This is something that can surprise some Vim users so here are some motivations +behind this change: + - ~s~ and ~c~ do the same thing in =visual state=, + - ~s~ is only useful to delete /one/ character and add more than one character + which is a /very/ narrow use case + - ~c~ accept motions and can do everything ~s~ can do in =normal state= + (note that this is also true for ~r~ but ~r~ is more useful because it + stays in =normal state=) + - =surround= command is just a more powerful command than ~s~. + +If you are not convinced, then here is the snippet to revert back to the default +=Vim + vim-surround= setup (add it to your =dotspacemacs/user-config= function or +your =~/.spacemacs=): + +#+BEGIN_SRC emacs-lisp +(evil-define-key 'visual evil-surround-mode-map "s" 'evil-substitute) +(evil-define-key 'visual evil-surround-mode-map "S" 'evil-surround-region) +#+END_SRC + +* Evil plugins +Spacemacs ships with the following evil plugins: + +| Mode | Description | +|-------------------------------+--------------------------------------------| +| [[https://github.com/wcsmith/evil-args][evil-args]] | motions and text objects for arguments | +| [[https://github.com/Dewdrops/evil-exchange][evil-exchange]] | port of [[https://github.com/tommcdo/vim-exchange][vim-exchange]] | +| [[https://github.com/cofi/evil-indent-textobject][evil-indent-textobject]] | add text object based on indentation level | +| [[https://github.com/redguardtoo/evil-matchit][evil-matchit]] | port of [[http://www.vim.org/scripts/script.php?script_id=39][matchit.vim]] | +| [[https://github.com/redguardtoo/evil-nerd-commenter][evil-nerd-commenter]] | port of [[https://github.com/scrooloose/nerdcommenter][nerdcommenter]] | +| [[https://github.com/cofi/evil-numbers][evil-numbers]] | like ~C-a~ and ~C-x~ in vim | +| [[https://github.com/juanjux/evil-search-highlight-persist][evil-search-highlight-persist]] | emulation of hlsearch behavior | +| [[https://github.com/timcharper/evil-surround][evil-surround]] | port of [[https://github.com/tpope/vim-surround][vim-surround]] | +| [[https://github.com/bling/evil-visualstar][evil-visualstar]] | search for current selection with ~*~ | +| [[https://github.com/jaypei/emacs-neotree][NeoTree]] | mimic [[https://github.com/scrooloose/nerdtree][NERD Tree]] | + +* Binding keys +Key sequences are bound to commands in Emacs in various keymaps. The most basic +map is the =global-map=. Setting a key binding in the =global-map= is achieved +with the function =global-set-key=. Example to bind a key to the command +=forward-char=: + +#+BEGIN_SRC emacs-lisp +(global-set-key (kbd "C-]") 'forward-char) +#+END_SRC + +The =kbd= macro accepts a string describing a key sequence. The =global-map= is +often shadowed by other maps. For example, =evil-mode= defines keymaps that +target states (or modes in vim terminology). Here is an example that creates the +same binding as above but only in =insert state= (=define-key= is a built-in +function. =Evil-mode= has its own functions for defining keys). + +#+BEGIN_SRC emacs-lisp +(define-key evil-insert-state-map (kbd "C-]") 'forward-char) +#+END_SRC + +Perhaps most importantly for Spacemacs is the use of the bind-map package to +bind keys behind a leader key. +This is where most of the Spacemacs bindings live. Binding keys behind the +leader key is achieved with the functions =spacemacs/set-leader-keys= and +=spacemacs/set-leader-keys-for-major-mode=, example: + +#+BEGIN_SRC emacs-lisp +(spacemacs/set-leader-keys "C-]" 'forward-char) +(spacemacs/set-leader-keys-for-major-mode 'emacs-lisp-mode "C-]" 'forward-char) +#+END_SRC + +These functions use a macro like =kbd= to translate the key sequences for you. +The second function, =spacemacs/set-leader-keys-for-major-mode=, binds the key +only in the specified mode. The second key binding is active only when the +major mode is =emacs-lisp=. + +Finally, one should be aware of prefix keys. Essentially, all keymaps can be +nested. Nested keymaps are used extensively in spacemacs, and in vanilla Emacs +for that matter. For example, ~SPC a~ points to key bindings for "applications", +like ~SPC a c~ for =calc-dispatch=. Nesting bindings is easy. + +#+BEGIN_SRC emacs-lisp +(spacemacs/declare-prefix "]" "bracket-prefix") +(spacemacs/set-leader-keys "]]" 'double-bracket-command) +#+END_SRC + +The first line declares ~SPC ]~ to be a prefix and the second binds the key +sequence ~SPC ]]~ to the corresponding command. The first line is actually +unnecessary to create the prefix, but it will give your new prefix a name that +key-discovery tools can use (e.g., which-key). + +There is much more to say about bindings keys, but these are the basics. Keys +can be bound in your =~/.spacemacs= file or in individual layers. + +* GUI Elements +Spacemacs has a minimalistic and distraction free graphical UI: + - custom [[https://github.com/milkypostman/powerline][powerline]] mode-line [[Flycheck integration][with color feedback]] according to current [[https://github.com/flycheck/flycheck][Flycheck]] status + - Unicode symbols for minor mode lighters which appear in the mode-line + - [[Errors handling][custom fringe bitmaps]] and error feedbacks for [[https://github.com/flycheck/flycheck][Flycheck]] + +** Color themes +The official Spacemacs theme is [[https://github.com/nashamri/spacemacs-theme][spacemacs-dark]] and it is the default theme +installed when you first started Spacemacs. There are two variants of the +theme, a dark one and a light one. Some aspect of these themes can be customized +in the function =dotspacemacs/user-init= of your =~/.spacemacs=: + - the comment background with the boolean =spacemacs-theme-comment-bg= + - the height of org section titles with =spacemacs-theme-org-height= + +It is possible to define your default themes in your =~/.spacemacs= with the +variable =dotspacemacs-themes=. For instance, to specify =spacemacs-light=, +=leuven= and =zenburn=: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-themes '(spacemacs-light leuven zenburn)) +#+END_SRC + +| Key Binding | Description | +|-------------+-------------------------------------------------------| +| ~SPC T n~ | switch to next theme listed in =dotspacemacs-themes=. | +| ~SPC T s~ | select a theme using a =helm= buffer. | + +You can see samples of all included themes in this [[http://themegallery.robdor.com][theme gallery]] from [[http://www.twitter.com/robmerrell][Rob Merrell]]. + +*Note*: + - You don't need to explicitly list in a layer the theme packages you are + defining in =dotspacemacs-themes=, Spacemacs is smart enough to remove those + packages from the list of orphans. + - Due to the inner working of themes in Emacs, switching theme during the same + session may have some weird side effects. Although these side effects should + be pretty rare. + - In the terminal version of Emacs, color themes will not render correctly as + colors are rendered by the terminal and not by emacs. You will probably have + to change your terminal color palette. More explanations can be found on + [[https://github.com/sellout/emacs-color-theme-solarized#important-note-for-terminal-users][emacs-color-theme-solarized webpage]]. + +*Hint*: If you are an =Org= user, [[https://github.com/fniessen/emacs-leuven-theme][leuven-theme]] is amazing ;-) + +** Font +The default font used by Spacemacs is [[https://github.com/adobe-fonts/source-code-pro][Source Code Pro]] by Adobe. It is +recommended to install it on your system if you wish to use it. + +To change the default font set the variable =dotspacemacs-default-font= in your +=.spacemacs= file. By default its value is: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-default-font '("Source Code Pro" + :size 13 + :weight normal + :width normal + :powerline-scale 1.1)) +#+END_SRC + +If the specified font is not found, the fallback one will be used (depends on +your system). Also note that changing this value has no effect if you are +running Emacs in terminal. + +The properties should be pretty straightforward, it is possible to set any valid +property of a [[http://www.gnu.org/software/emacs/manual/html_node/elisp/Low_002dLevel-Font.html][font-spec]]: + - =:family= Font family or fontset (a string). + - =:width= Relative character width. This should be one of the symbols: + - ultra-condensed + - extra-condensed + - condensed + - semi-condensed + - normal + - semi-expanded + - expanded + - extra-expanded + - ultra-expanded + - =:height= The height of the font. In the simplest case, this is an integer + in units of 1/10 point. + - =:weight= Font weight- one of the symbols (from densest to faintest): + - ultra-bold + - extra-bold + - bold + - semi-bold + - normal + - semi-light + - light + - extra-light + - ultra-light + - =:slant= Font slant- one of the symbols: + - italic + - oblique + - normal + - reverse-italic + - reverse-oblique + - =:size= The font size- either a non-negative integer that specifies the + pixel size, or a floating-point number that specifies the point size. + - =:adstyle= Additional typographic style information for the font, such as + 'sans'. The value should be a string or a symbol. + - =:registry= The charset registry and encoding of the font, such as + 'iso8859-1'. The value should be a string or a symbol. + - =:script= The script that the font must support (a symbol). + +The special property =:powerline-scale= is Spacemacs specific and it is for +quick tweaking of the mode-line height in order to avoid crappy rendering of the +separators like on the following screenshot (default value is 1.1). + +[[file:img/crappy-powerline-separators.png]] +/Ugly separators/ + +** GUI Toggles +Some graphical UI indicators can be toggled on and off (toggles start with ~t~ +and ~T~): + +| Key Binding | Description | +|-------------+-------------------------------------------------------------------| +| ~SPC t 8~ | highlight any character past the 80th column | +| ~SPC t f~ | display the fill column (by default the fill column is set to 80) | +| ~SPC t h h~ | toggle highlight of the current line | +| ~SPC t h i~ | toggle highlight indentation levels | +| ~SPC t h c~ | toggle highlight indentation current column | +| ~SPC t i~ | toggle indentation guide at point | +| ~SPC t l~ | toggle truncate lines | +| ~SPC t L~ | toggle visual lines | +| ~SPC t n~ | toggle line numbers | +| ~SPC t v~ | toggle smooth scrolling | + +| Key Binding | Description | +|-------------+------------------------------------------------------------------| +| ~SPC T ~~ | display =~= in the fringe on empty lines | +| ~SPC T F~ | toggle frame fullscreen | +| ~SPC T f~ | toggle display of the fringe | +| ~SPC T m~ | toggle menu bar | +| ~SPC T M~ | toggle frame maximize | +| ~SPC T t~ | toggle tool bar | +| ~SPC T T~ | toggle frame transparency and enter transparency transient state | + +*Note*: These toggles are all available via the =helm-spacemacs-help= interface +(press ~SPC h SPC~ to display the =helm-spacemacs-help= buffer). + +**** Global line numbers +Line numbers can be toggled on in all =prog-mode= and =text-mode= buffers by +setting the =dotspacemacs-line-numbers= variable in your =~/.spacemacs= +to something different than =nil=. + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-line-numbers t) +#+END_SRC + +If it is set to =relative=, line numbers are show in a relative way: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-line-numbers 'relative) +#+END_SRC + +** Mode-line +The mode line is a heavily customized [[https://github.com/milkypostman/powerline][powerline]] with the following capabilities: + - show the window number + - color code for current state + - show the number of search occurrences via anzu + - toggle flycheck info + - toggle battery info + - toggle minor mode lighters + +Reminder of the color codes for the states: + +| Evil State | Color | +|--------------------+-----------| +| Normal | Orange | +| Insert | Green | +| Visual | Grey | +| Emacs | Blue | +| Motion | Purple | +| Replace | Chocolate | +| Lisp | Pink | +| Iedit/Iedit-Insert | Red | + +Some elements can be dynamically toggled: + +| Key Binding | Description | +|-------------+-----------------------------------------------------------------| +| ~SPC t m b~ | toggle the battery status | +| ~SPC t m c~ | toggle the =org= task clock (available in =org= layer) | +| ~SPC t m m~ | toggle the minor mode lighters | +| ~SPC t m M~ | toggle the major mode | +| ~SPC t m n~ | toggle the cat! (if =colors= layer is declared in your dotfile) | +| ~SPC t m p~ | toggle the point character position | +| ~SPC t m t~ | toggle the mode line itself | +| ~SPC t m v~ | toggle the version control info | +| ~SPC t m V~ | toggle the new version lighter | + +**** Powerline font installation for terminal-mode users +Users who run Emacs in terminal mode may need to install the [[https://github.com/powerline/fonts][Powerline patched +fonts]] and configure their terminal clients to use them to make the Powerline +separators render correctly. + +**** Flycheck integration +When [[https://github.com/flycheck/flycheck][Flycheck]] minor mode is enabled, a new element appears showing the number of +errors, warnings and info. + +[[file:img/powerline-wave.png]] +/Flycheck integration in mode-line/ + +**** Anzu integration +[[https://github.com/syohex/emacs-anzu][Anzu]] shows the number of occurrence when performing a search. Spacemacs +integrates nicely the Anzu status by displaying it temporarily when ~n~ or ~N~ +are being pressed. See the =5/6= segment on the screenshot below. + +[[file:img/powerline-anzu.png]] +/Anzu integration in mode-line/ + +**** Battery status integration +[[https://github.com/lunaryorn/fancy-battery.el][fancy-battery]] displays the percentage of total charge of the battery as well as +the time remaining to charge or discharge completely the battery. + +A color code is used for the battery status: + +| Battery State | Color | +|---------------+--------| +| Charging | Green | +| Discharging | Orange | +| Critical | Red | + +Note the these colors may vary depending on your theme. + +**** Powerline separators +It is possible to easily customize the =powerline separator= by setting the +=powerline-default-separator= variable in your =~./spacemacs= and then +recompiling the modeline. For instance if you want to set back the separator to +the well-known =arrow= separator add the following snippet to your configuration +file: + +#+BEGIN_SRC emacs-lisp +(defun dotspacemacs/user-config () + "This is were you can ultimately override default Spacemacs configuration. +This function is called at the very end of Spacemacs initialization." + (setq powerline-default-separator 'arrow)) +#+END_SRC + +To save you the time to try all the possible separators provided by the +powerline, here is an exhaustive set of screenshots: + +| Separator | Screenshot | +|--------------+-----------------------------------| +| =alternate= | [[file:img/powerline-alternate.png]] | +| =arrow= | [[file:img/powerline-arrow.png]] | +| =arrow-fade= | [[file:img/powerline-arrow-fade.png]] | +| =bar= | [[file:img/powerline-bar.png]] | +| =box= | [[file:img/powerline-box.png]] | +| =brace= | [[file:img/powerline-brace.png]] | +| =butt= | [[file:img/powerline-butt.png]] | +| =chamfer= | [[file:img/powerline-chamfer.png]] | +| =contour= | [[file:img/powerline-contour.png]] | +| =curve= | [[file:img/powerline-curve.png]] | +| =rounded= | [[file:img/powerline-rounded.png]] | +| =roundstub= | [[file:img/powerline-roundstub.png]] | +| =slant= | [[file:img/powerline-slant.png]] | +| =wave= | [[file:img/powerline-wave.png]] | +| =zigzag= | [[file:img/powerline-zigzag.png]] | +| =nil= | [[file:img/powerline-nil.png]] | + +**** Minor Modes +Spacemacs uses [[http://www.emacswiki.org/emacs/DiminishedModes][diminish]] mode to reduce the size of minor mode indicators: + +The minor mode area can be toggled on and off with ~SPC t m m~ + +Unicode symbols are displayed by default. Setting the variable +=dotspacemacs-mode-line-unicode-symbols= to =nil= in your =~/.spacemacs= will +display ASCII characters instead (may be useful in terminal if you cannot set an +appropriate font). + +The letters displayed in the mode-line correspond to the key bindings used to +toggle them. + +Some toggle have two flavors: local and global. The global version of the toggle +can be reached using the =control= key. + +| Key Binding | Unicode | ASCII | Mode | +|-------------+---------+-------+----------------------------------------------------------------------| +| ~SPC t -~ | =⊝= | - | [[http://emacswiki.org/emacs/centered-cursor-mode.el][centered-cursor]] mode | +| ~SPC t 8~ | =⑧= | 8 | toggle highlight of characters for long lines | +| ~SPC t C-8~ | =⑧= | 8 | global toggle highlight of characters for long lines | +| ~SPC t C--~ | =⊝= | - | global centered cursor | +| ~SPC t a~ | =ⓐ= | a | auto-completion | +| ~SPC t c~ | =ⓒ= | c | camel case motion with subword mode | +| =none= | =ⓔ= | e | [[https://github.com/edwtjo/evil-org-mode][evil-org]] mode | +| ~SPC t E e~ | =Ⓔe= | Ee | emacs editing style (holy mode) | +| ~SPC t E h~ | =Ⓔh= | Eh | hybrid editing style (hybrid mode) | +| ~SPC t f~ | =ⓕ= | f | fill-column-indicator mode | +| ~SPC t F~ | =Ⓕ= | F | auto-fill mode | +| ~SPC t g~ | =ⓖ= | g | [[https://github.com/roman/golden-ratio.el][golden-ratio]] mode | +| ~SPC t h i~ | =ⓗi= | hi | toggle highlight indentation levels | +| ~SPC t h c~ | =ⓗc= | hc | toggle highlight indentation current column | +| ~SPC t i~ | =ⓘ= | i | indentation guide | +| ~SPC t C-i~ | =ⓘ= | i | global indentation guide | +| ~SPC t I~ | =Ⓘ= | I | aggressive indent mode | +| ~SPC t K~ | =Ⓚ= | K | which-key mode | +| ~SPC t p~ | =ⓟ= | p | [[https://github.com/Fuco1/smartparens][smartparens]] mode | +| ~SPC t C-p~ | =ⓟ= | p | global smartparens | +| ~SPC t s~ | =ⓢ= | s | syntax checking (flycheck) | +| ~SPC t S~ | =Ⓢ= | S | enabled in [[../layers/spell-checking][spell checking layer]] (flyspell) | +| ~SPC t w~ | =ⓦ= | w | whitespace mode | +| ~SPC t C-w~ | =ⓦ= | w | global whitespace | +| ~SPC t W~ | =Ⓦ= | W | automatic whitespace cleanup (see =dotspacemacs-whitespace-cleanup=) | +| ~SPC t C-W~ | =Ⓦ= | W | automatic whitespace cleanup globally | +| ~SPC t y~ | =ⓨ= | y | [[https://github.com/capitaomorte/yasnippet][yasnippet]] mode | + +**** Customizing the mode-line +Spacemacs uses [[https://github.com/TheBB/spaceline][Spaceline]] to provide its mode-line. It consists of a number of +/segments/ arranged on the left and right sides. These are defined in the +variables =spaceline-left= and =spaceline-right=. Segments can be defined using +=spaceline-define-segment=, and added to the appropriate location in the left or +right hand side variables. + +Please see the Spaceline documentation for more information. + +* Layouts and workspaces +Layouts are window configurations with buffer isolation, each layout can define +several workspaces (think of them as sub-layouts) sharing the same list of +buffers as their parent layout. + +** Layouts +A layout is a window configuration associated with a list of buffers. The list +of buffers can be an arbitrarily chosen set of buffers. Spacemacs provides +some facilities to create meaningful sets of buffers, for instance the buffers +related to a projectile project. + +The name of the current layout appears in the mode-line at the far left (first +element of the mode-line). + +To create a new layout type a layout number that does not exist yet. +For instance if you have two layouts currently then type ~SPC l 3~ to create a +third layout. + +*** The default layout +The =default= layout (the layout created at the startup of Emacs) is not +displayed in the mode-line but it is possible to display it by setting the +variable =dotspacemacs-display-default-layout= to =t=. + +Its name is "default" by default but it can be changed by setting the variable +=dotspacemacs-default-layout-name=. + +The =default= layout is special because it has a global scope which means that +all the opened buffers belong to it. So using only the =default= layout feels +like not using layouts at all. + +*** Project layouts +A project layout is bound to a projectile project. To create a project layout +use ~SPC p l~. + +The name of the layout is the name of the project root directory. + +*** Custom Layouts +Custom layouts can be defined using the macro ~spacemacs|define-custom-layout~, +they are accessible via ~SPC l o~. + +By convention the name of a custom layout should start with =@=. + +Example of custom layout definition for =ERC= buffers: + +#+BEGIN_SRC emacs-lisp + (spacemacs|define-custom-layout "@ERC" + :binding "E" + :body + (progn + ;; hook to add all ERC buffers to the layout + (defun spacemacs-layouts/add-erc-buffer-to-persp () + (persp-add-buffer (current-buffer) + (persp-get-by-name + erc-spacemacs-layout-name))) + (add-hook 'erc-mode-hook #'spacemacs-layouts/add-erc-buffer-to-persp) + ;; Start ERC + (call-interactively 'erc))) +#+END_SRC + +Then use ~SPC l o E~ to start ERC inside its own layout. Any new ERC buffer +will be part of the custom layout. + +Some custom layouts that ship with Spacemacs: + +| Name | Key Binding | Description | +|------------+-------------+---------------------------------------------------------------------------------| +| @Spacemacs | ~e~ | Custom perspective containing all buffers of =~/.emacs.d= | +| @ERC | ~E~ | Custom perspective containing all ERC buffers (needs the erc layer enabled) | +| @RCIRC | ~i~ | Custom perspective containing all RCIRC buffers (needs the rcirc layer enabled) | +| @Org | ~o~ | Custom perspective containing all the =org-agenda= buffers | + +*** Save/Load layouts into a file +With ~SPC l s~ and ~SPC l L~ you can save and load layouts to/from a file. + +*Note:* By default, Spacemacs will automatically save the layouts under the name +=persp-auto-save=. + +Setting the variable =dotspacemacs-auto-resume-layouts= to =t= will +automatically resume the last saved layouts. + +*** Layout key bindings +The key bindings are registered in a transient state. The docstring of the +transient state displays the existing layouts and the currently active +layout has square brackets. Pressing a layout number will activate it (or +create a new one) and exit the transient state. It is possible to just preview a +layout with ~Ctrl-~. Pressing ~TAB~ will activate the previously +selected layout. + +Press ~?~ to toggle the full help. + +| Key Binding | Description | +|-------------------+------------------------------------------------------------| +| ~SPC l~ | activate the transient- state | +| ~?~ | toggle the documentation | +| ~[1..9, 0]~ | switch to nth layout | +| ~[C-1..C-9, C-0]~ | switch to nth layout and keep the transient state active | +| ~~ | switch to the latest layout | +| ~a~ | add a buffer to the current layout | +| ~A~ | add all the buffers from another layout in the current one | +| ~b~ | select a buffer in the current layout | +| ~d~ | delete the current layout and keep its buffers | +| ~D~ | delete the other layouts and keep their buffers | +| ~h~ | go to default layout | +| ~C-h~ | previous layout in list | +| ~l~ | select/create a layout with helm | +| ~L~ | load layouts from file | +| ~C-l~ | next layout in list | +| ~n~ | next layout in list | +| ~N~ | previous layout in list | +| ~o~ | open a custom layout | +| ~p~ | previous layout in list | +| ~r~ | remove current buffer from layout | +| ~R~ | rename current layout | +| ~s~ | save layouts | +| ~t~ | display a buffer without adding it to the current layout | +| ~w~ | workspaces transient state (needs eyebrowse layer enabled) | +| ~x~ | kill current layout with its buffers | +| ~X~ | kill other layouts with their buffers | + +** Workspaces +Workspaces are sub-layouts, they allow to define multiple layouts into a given +layout, those layouts share the same buffer as the parent layout. + +The currently active workspace number is displayed before the window number, +for instance "➊|➍" or "1|4" means the fourth window of the first workspace. + +Any new layout comes with a default workspace which is the workspace 1. + +Switching to a workspace that does not exist in the current layout will create a +new one. For instance at startup you can press ~SPC l w 2~ to create the +workspace 2 in the =default= layout. + +When created a workspace is anonymous, you can give them a name with +~SPC l w R~. + +*** Workspace key bindings +The key bindings are registered in a transient state. The docstring of the +transient state displays the existing workspaces and the currently active +workspace has square brackets. Pressing a workspace number will activate it (or +create a new one) and exit the transient state. It is possible to just preview a +workspace with ~Ctrl-~. Pressing ~TAB~ will activate the previously +selected workspace. + +Press ~?~ to toggle the full help. + +| Key Binding | Description | +|-------------------+-------------------------------------------------------------| +| ~SPC l w~ | activate the transient state | +| ~?~ | toggle the documentation | +| ~[1..9, 0]~ | switch to nth workspace | +| ~[C-1..C-9, C-0]~ | switch to nth workspace and keep the transient state active | +| ~TAB~ | switch to last active workspace | +| ~d~ | close current workspace | +| ~n~ or ~l~ | switch to next workspace | +| ~N~ or ~p~ or ~h~ | switch to previous workspace | +| ~R~ | set a tag to the current workspace | +| ~w~ | switched to tagged workspace | + +There are also some handy globally available key bindings related to workspaces: + +| Key Binding | Description | +|-------------+--------------------------------------| +| ~gt~ | go to next workspace | +| ~gT~ | got to previous workspace | +| ~SPC b W~ | go to workspace and window by buffer | + +* Commands +** Vim key bindings +Spacemacs is based on =Vim= modal user interface to navigate and edit text. If +you are not familiar with the =Vim= way of editing text you can try the +[[https://github.com/syl20bnr/evil-tutor][evil-tutor]] lessons by pressing ~SPC h T~ at any time. + +*** Escaping +Spacemacs uses [[https://github.com/syl20bnr/evil-escape][evil-escape]] to +easily switch between =insert state= and =normal state= by quickly pressing the +~fd~ keys. + +The choice of ~fd~ was made to be able to use the same sequence to escape from +"everything" in Emacs: + - escape from all stock evil states to normal state + - escape from evil-lisp-state to normal state + - escape from evil-iedit-state to normal state + - abort evil ex command + - quit minibuffer + - abort isearch + - quit magit buffers + - quit help buffers + - quit apropos buffers + - quit ert buffers + - quit undo-tree buffer + - quit paradox + - quit gist-list menu + - quit helm-ag-edit + - hide neotree buffer + +If you find yourself in a buffer where the Spacemacs (~SPC~) or Vim keybindings +don't work you can use this to get back to =normal state= (for example in ~SPC +SPC customize~ press ~fd~ to make ~SPC b b~ work again). + +This sequence can be customized in your =~/.spacemacs=. +Example to set it to ~jj~: + +#+BEGIN_SRC emacs-lisp +(defun dotspacemacs/user-config () + (setq-default evil-escape-key-sequence "jj")) +#+END_SRC + +*Note*: Although ~jj~ or ~jk~ are popular choices of vim users, these key +sequences are not optimal for Spacemacs. Indeed it is very easy in =visual +state= to press quickly ~jj~ and inadvertently escape to =normal state=. + +*** Executing Vim and Emacs ex/M-x commands + +| Command | Key Binding | +|------------------+-------------| +| Vim (ex-command) | ~:~ | +| Emacs (M-x) | ~SPC SPC~ | + +The emacs command key ~SPC~ (executed after the leader key) can be changed +with the variable =dotspacemacs-emacs-command-key= of your =~/.spacemacs=. + +*** Leader key +On top of =Vim= modes (modes are called states in Spacemacs) there is a +special key called the leader key which once pressed gives a whole new keyboard +layer. The leader key is by default ~SPC~ (space). It is possible to change this +key with the variable =dotspacemacs-leader-key=. + +*** Additional text objects +Additional text objects are defined in Spacemacs: + +| Object | Description | +|---------+----------------------------| +| ~a~ | an argument | +| ~g~ | the entire buffer | +| ~$~ | text between =$= | +| ~*~ | text between =*= | +| ~8~ | text between =/*= and =*/= | +| ~%~ | text between =%= | +| ~\vert~ | text between =\vert= | + +** Reserved prefix command for user +~SPC o~ and ~SPC m o~ are reserved for the user. Setting key bindings behind +these is *guaranteed* to never conflict with Spacemacs default key bindings. + +*Example:* Put =(spacemacs/set-leader-keys "oc" 'org-capture)= inside +=dotspacemacs/user-config= in your =~/.spacemacs= file, to be able to use ~SPC o +c~ to run org mode capture. + +** Completion +Spacemacs is powered by one of two incremental completion and selection +narrowing frameworks: [[https://github.com/emacs-helm/helm][Helm]] (default) or [[https://github.com/abo-abo/swiper][Ivy]]. To use Ivy, add the =ivy= layer to +your list of enabled layers. If the =ivy= layer is not enabled, Helm will be +enabled automatically. (Please note that, as Helm is the more mature of the two, +some functions may be unavailable if you choose Ivy.) + +These completion systems are the central control towers of Spacemacs, they are +used to manage buffers, projects, search results, configuration layers, toggles +and more... + +Mastering your choice of completion system will make you a Spacemacs power user. + +*** Helm +Do not hesitate to read the [[https://github.com/emacs-helm/helm/wiki][Helm documentation wiki]]. + +**** C-z and Tab switch +The command bound to ~C-z~ is much more useful than the one bound to Tab, so it +makes sense to swap them. It's also recommended [[http://tuhdo.github.io/helm-intro.html][here]]. + +**** Helm focus +If you find yourself unable to return focus to Helm (after a careless +mouse-click for example), use ~SPC w b~ to return focus to the minibuffer. + +**** Helm transient state +Spacemacs defines a [[Transient-states][transient state]] for =Helm= to make it work like [[https://github.com/Shougo/unite.vim][Vim's Unite]] +plugin. + +Initiate the transient state with ~M-SPC~ or ~s-M-SPC~ while in a =Helm= buffer. + +| Key Binding | Description | +|----------------------+------------------------------------------------------| +| ~M-SPC~ or ~s-M-SPC~ | initiate the transient state | +| ~q~ | quit transient state | +| ~TAB~ | switch to actions page and leave the transient state | +| ~1~ | execute action 0 | +| ~2~ | execute action 1 | +| ~3~ | execute action 2 | +| ~4~ | execute action 3 | +| ~5~ | execute action 4 | +| ~6~ | execute action 5 | +| ~7~ | execute action 6 | +| ~8~ | execute action 7 | +| ~9~ | execute action 8 | +| ~0~ | execute action 9 | +| ~a~ | switch to actions page | +| ~g~ | go to first candidate | +| ~G~ | go to last candidate | +| ~h~ | go to previous source | +| ~j~ | select next candidate | +| ~k~ | select previous candidate | +| ~l~ | go to next source | +| ~t~ | mark current candidate | +| ~T~ | mark all candidates | +| ~v~ | execute persistent action | + +** Discovering +*** Key bindings +**** Which-key +A help buffer is displayed each time the ~SPC~ key is pressed in normal mode. +It lists the available key bindings and their associated commands. + +By default the [[https://github.com/justbur/emacs-which-key][which-key]] buffer will be displayed quickly after the key has been +pressed. You can change the delay by setting the variable +=dotspacemacs-which-key-delay= to your liking (the value is in second). + +**** Helm describe key bindings +It is possible to search for specific key bindings by pressing ~SPC ?~. + +To narrow the list to some key bindings using the leader key type a pattern like +this regular expression: ~SPC\ b~ which would list all =buffer= related +bindings. + +*** Getting help +=Describe functions= are powerful Emacs introspection commands to get +information about functions, variables, modes etc. These commands are bound +thusly: + +| Key Binding | Description | +|-------------+-----------------------------------------------------------| +| ~SPC h d b~ | describe bindings in a =helm= buffer | +| ~SPC h d c~ | describe current character under point | +| ~SPC h d d~ | describe current expression under point | +| ~SPC h d f~ | describe a function | +| ~SPC h d F~ | describe a face | +| ~SPC h d k~ | describe a key | +| ~SPC h d K~ | describe a keymap | +| ~SPC h d l~ | copy last pressed keys that you can paste in gitter chat | +| ~SPC h d m~ | describe current modes | +| ~SPC h d p~ | describe a package (Emacs built-in function) | +| ~SPC h d P~ | describe a package (Spacemacs layer information) | +| ~SPC h d s~ | copy system information that you can paste in gitter chat | +| ~SPC h d t~ | describe a theme | +| ~SPC h d v~ | describe a variable | + +Other help key bindings: + +| Key Binding | Description | +|-------------+--------------------------------------------------------------------| +| ~SPC h SPC~ | discover Spacemacs documentation, layers and packages using =helm= | +| ~SPC h i~ | search in info pages with the symbol at point | +| ~SPC h k~ | show top-level bindings with =which-key= | +| ~SPC h m~ | search available man pages | +| ~SPC h n~ | browse emacs news | + +Navigation key bindings in =help-mode=: + +| Key Binding | Description | +|--------------+-----------------------------------------------------| +| ~g b~ or ~[~ | go back (same as clicking on =[back]= button) | +| ~g f~ or ~]~ | go forward (same as clicking on =[forward]= button) | +| ~g h~ | go to help for symbol under point | + +Reporting an issue: + +| Key Binding | Description | +|-----------------+------------------------------------------------------------------------------------------| +| ~SPC h I~ | Open Spacemacs GitHub issue page with pre-filled information | +| ~SPC u SPC h I~ | Open Spacemacs GitHub issue page with pre-filled information - include last pressed keys | + +/Note:/ If these two bindings are used with the =*Backtrace*= buffer open, the +backtrace is automatically included + +*** Available layers +All layers can be easily discovered via =helm-spacemacs-help= accessible with +~SPC h SPC~. + +The following helm actions are available: + - default: open the layer =README.org= + - 2nd: open the layer =packages.el= + +**** Available packages in Spacemacs +=helm-spacemacs-help= also lists all the packages available in Spacemacs. The +entry format is =(layer) packages=. If you type =flycheck= you'll be able to see +all the layers where =flycheck= is used. + +The following helm actions are available on packages: + - default: go the package init function + +**** New packages from ELPA repositories +=package-list-packages= is where you can browse for all available packages in the +different Elpa repositories. It is possible to upgrade packages from there but +it is not recommended, use the =[Update Packages]= link on the Spacemacs startup +page instead. + +Spacemacs uses [[https://github.com/Bruce-Connor/paradox][Paradox]] instead of =package-list-packages= to list available +ELPA packages. Paradox enhances the package list buffer with better feedbacks, +new filters and Github information like the number of stars. Optionally you can +also star packages directly in the buffer. + +*Important Note 1*: Installing a new package from =Paradox= won't make it +persistent. To install a package persistently you have to add it explicitly to a +configuration layer. + +*Important Note 2*: Don't /update/ your packages from =Paradox= or +=package-list-packages= because they don't support the rollback feature of +Spacemacs. + +| Key Binding | Description | +|-------------+-------------------------------------------------------| +| ~SPC a k~ | launch =paradox= | +| ~/~ | evil-search | +| ~f k~ | filter by keywords | +| ~f r~ | filter by regexp | +| ~f u~ | display only installed package with updates available | +| ~h~ | go left | +| ~H~ | show help (not accurate) | +| ~j~ | go down | +| ~k~ | go up | +| ~l~ | go right | +| ~L~ | show last commits | +| ~n~ | next search occurrence | +| ~N~ | previous search occurrence | +| ~o~ | open package homepage | +| ~r~ | refresh | +| ~S P~ | sort by package name | +| ~S S~ | sort by status (installed, available, etc...) | +| ~S *~ | sort by Github stars | +| ~v~ | =visual state= | +| ~V~ | =visual-line state= | +| ~x~ | execute (action flags) | + +*** Toggles +=helm-spacemacs-help= is also a central place to discover the available toggles. +To display only the toggles source press ~C-l~ (or in [[Helm transient state][Helm transient state]] you can +press just ~l~). + +The following helm actions are available on packages: + - default: toggle on/off + +*Tips* Use ~SPC h l~ to resume the last helm session. It is handy to quickly +toggle on and off a toggle. + +** Navigating +*** Point/Cursor +Navigation is performed using the Vi key bindings ~hjkl~. + +| Key Binding | Description | +|-------------+-----------------------------------------------------------------------------------| +| ~h~ | move cursor left | +| ~j~ | move cursor down | +| ~k~ | move cursor up | +| ~l~ | move cursor right | +| ~H~ | move cursor to the top of the screen | +| ~L~ | move cursor to the bottom of the screen | +| ~SPC j 0~ | go to the beginning of line (and set a mark at the previous location in the line) | +| ~SPC j $~ | go to the end of line (and set a mark at the previous location in the line) | +| ~SPC t -~ | lock the cursor at the center of the screen | + +**** Smooth scrolling +[[https://github.com/aspiers/smooth-scrolling][smooth-scrolling]] prevent the point to jump when it reaches the top or +bottom of the screen. It is enabled by default. + +On Windows, you may want to disable it. To disable the smooth scrolling set the +=dotspacemacs-smooth-scrolling= variable in your =~/.spacemacs= to =nil=: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-smooth-scrolling nil) +#+END_SRC + +You can also toggle smooth scrolling with ~SPC t v~. + +*** Vim motions with avy +Spacemacs uses the =evil= integration of [[https://github.com/abo-abo/avy][avy]] which enables the +invocation of =avy= during motions. + +For instance, it is useful for deleting a set of visual lines from the current line. +Try the following sequence in a buffer containing some text: ~d SPC j l~, followed by +selecting an avy candidate. + +| Key Binding | Description | +|-------------+----------------------------------------------------| +| ~SPC j b~ | go back to the previous location (before the jump) | +| ~SPC j j~ | initiate avy jump char | +| ~SPC j w~ | initiate avy jump word | +| ~SPC j l~ | initiate avy jump line | + +**** ace-link mode +Similar to =avy=, [[https://github.com/abo-abo/ace-link][ace-link]] allows one to jump to any link in +=help-mode= and =info-mode= with two key strokes. + +| Key Binding | Description | +|-------------+-------------------------------------------------------| +| ~o~ | initiate ace link mode in =help-mode= and =info-mode= | + +*** Unimpaired bindings +Spacemacs comes with a built-in port of [[https://github.com/tpope/vim-unimpaired][tpope's vim-unimpaired]]. + +This plugin provides several pairs of bracket maps using ~[~ to denote +previous, and ~]~ as next. + +| KeyBindings | Description | +|-------------+----------------------------------| +| ~[ SPC~ | Insert space above | +| ~] SPC~ | Insert space below | +| ~[ b~ | Go to previous buffer | +| ~] b~ | Go to next buffer | +| ~[ f~ | Go to previous file in directory | +| ~] f~ | Go to next file in directory | +| ~[ l~ | Go to the previous error | +| ~] l~ | Go to the next error | +| ~[ h~ | Go to the previous vcs hunk | +| ~] h~ | Go to the next vcs hunk | +| ~[ q~ | Go to the previous error | +| ~] q~ | Go to the next error | +| ~[ t~ | Go to the previous frame | +| ~] t~ | Go to the next frame | +| ~[ w~ | Go to the previous window | +| ~] w~ | Go to the next window | +| ~[ e~ | Move line up | +| ~] e~ | Move line down | +| ~[ p~ | Paste above current line | +| ~] p~ | Paste below current line | +| ~g p~ | Select pasted text | + +*** Jumping, Joining and Splitting +The ~SPC j~ prefix is for jumping, joining and splitting. + +**** Jumping + +| Key Binding | Description | +|-------------+-----------------------------------------------------------------------------------| +| ~SPC j 0~ | go to the beginning of line (and set a mark at the previous location in the line) | +| ~SPC j $~ | go to the end of line (and set a mark at the previous location in the line) | +| ~SPC j b~ | undo a jump (go back to previous location) | +| ~SPC j d~ | jump to a listing of the current directory | +| ~SPC j D~ | jump to a listing of the current directory (other window) | +| ~SPC j f~ | jump to the definition of an Emacs Lisp function | +| ~SPC j i~ | jump to a definition in buffer (imenu) | +| ~SPC j I~ | jump to a definition in any buffer (imenu) | +| ~SPC j j~ | jump to a character in the buffer (works as an evil motion) | +| ~SPC j J~ | jump to a suite of two characters in the buffer (works as an evil motion) | +| ~SPC j k~ | jump to next line and indent it using auto-indent rules | +| ~SPC j l~ | jump to a line with avy (works as an evil motion) | +| ~SPC j q~ | show the dumb-jump quick look tooltip | +| ~SPC j u~ | jump to a URL in the current buffer | +| ~SPC j v~ | jump to the definition/declaration of an Emacs Lisp variable | +| ~SPC j w~ | jump to a word in the current buffer (works as an evil motion) | + +**** Joining and splitting + +| Key Binding | Description | +|-------------+--------------------------------------------------------------------------| +| ~J~ | join the current line with the next line | +| ~SPC j k~ | go to next line and indent it using auto-indent rules | +| ~SPC j n~ | split the current line at point, insert a new line and auto-indent | +| ~SPC j s~ | split a quoted string or s-expression in place | +| ~SPC j S~ | split a quoted string or s-expression, insert a new line and auto-indent | + +*** Window manipulation +**** Window manipulation key bindings +Every window has a number displayed at the start of the mode-line and +can be quickly accessed using =SPC number=. + +| Key Binding | Description | +|-------------+-----------------------| +| ~SPC 1~ | go to window number 1 | +| ~SPC 2~ | go to window number 2 | +| ~SPC 3~ | go to window number 3 | +| ~SPC 4~ | go to window number 4 | +| ~SPC 5~ | go to window number 5 | +| ~SPC 6~ | go to window number 6 | +| ~SPC 7~ | go to window number 7 | +| ~SPC 8~ | go to window number 8 | +| ~SPC 9~ | go to window number 9 | +| ~SPC 0~ | go to window number 0 | + +Windows manipulation commands (start with ~w~): + +| Key Binding | Description | +|------------------------+-----------------------------------------------------------------------------| +| ~SPC w =~ | balance split windows | +| ~SPC w b~ | force the focus back to the minibuffer (usefull with =helm= popups) | +| ~SPC w c~ | maximize/minimize a window and center it | +| ~SPC w C~ | maximize/minimize a window and center it using [[https://github.com/abo-abo/ace-window][ace-window]] | +| ~SPC w d~ | delete a window | +| ~SPC u SPC w d~ | delete a window and its current buffer (does not delete the file) | +| ~SPC w D~ | delete another window using [[https://github.com/abo-abo/ace-window][ace-window]] | +| ~SPC u SPC w D~ | delete another window and its current buffer using [[https://github.com/abo-abo/ace-window][ace-window]] | +| ~SPC w t~ | toggle window dedication (dedicated window cannot be reused by a mode) | +| ~SPC w f~ | toggle follow mode | +| ~SPC w F~ | create new frame | +| ~SPC w h~ | move to window on the left | +| ~SPC w H~ | move window to the left | +| ~SPC w j~ | move to window below | +| ~SPC w J~ | move window to the bottom | +| ~SPC w k~ | move to window above | +| ~SPC w K~ | move window to the top | +| ~SPC w l~ | move to window on the right | +| ~SPC w L~ | move window to the right | +| ~SPC w m~ | maximize/minimize a window (maximize is equivalent to delete other windows) | +| ~SPC w M~ | swap windows using [[https://github.com/abo-abo/ace-window][ace-window]] | +| ~SPC w o~ | cycle and focus between frames | +| ~SPC w p m~ | open messages buffer in a popup window | +| ~SPC w p p~ | close the current sticky popup window | +| ~SPC w r~ | rotate windows forward | +| ~SPC w R~ | rotate windows backward | +| ~SPC w s~ or ~SPC w -~ | horizontal split | +| ~SPC w S~ | horizontal split and focus new window | +| ~SPC w u~ | undo window layout (used to effectively undo a closed window) | +| ~SPC w U~ | redo window layout | +| ~SPC w v~ or ~SPC w /~ | vertical split | +| ~SPC w V~ | vertical split and focus new window | +| ~SPC w w~ | cycle and focus between windows | +| ~SPC w W~ | select window using [[https://github.com/abo-abo/ace-window][ace-window]] | + +**** Window manipulation transient state +A convenient window manipulation transient state allows performing most of the +actions listed above. The transient state allows additional actions as well like +window resizing. + +| Key Binding | Description | +|---------------+---------------------------------------------------------------| +| ~SPC w .~ | initiate transient state | +| ~?~ | display the full documentation in minibuffer | +| ~0~ | go to window number 0 | +| ~1~ | go to window number 1 | +| ~2~ | go to window number 2 | +| ~3~ | go to window number 3 | +| ~4~ | go to window number 4 | +| ~5~ | go to window number 5 | +| ~6~ | go to window number 6 | +| ~7~ | go to window number 7 | +| ~8~ | go to window number 8 | +| ~9~ | go to window number 9 | +| ~/~ | vertical split | +| ~-~ | horizontal split | +| ~[~ | shrink window horizontally | +| ~]~ | enlarge window horizontally | +| ~{~ | shrink window vertically | +| ~}~ | enlarge window vertically | +| ~d~ | delete window | +| ~D~ | delete other windows | +| ~g~ | toggle =golden-ratio= on and off | +| ~h~ | go to window on the left | +| ~j~ | go to window below | +| ~k~ | go to window above | +| ~l~ | go to window on the right | +| ~H~ | move window to the left | +| ~J~ | move window to the bottom | +| ~K~ | move bottom to the top | +| ~L~ | move window to the right | +| ~o~ | focus other frame | +| ~r~ | rotate windows forward | +| ~R~ | rotate windows backward | +| ~s~ | horizontal split | +| ~S~ | horizontal split and focus new window | +| ~u~ | undo window layout (used to effectively undo a closed window) | +| ~U~ | redo window layout | +| ~v~ | vertical split | +| ~V~ | horizontal split and focus new window | +| ~w~ | focus other window | +| Any other key | leave the transient state | + +**** Golden ratio +If you resize windows like crazy you may want to give a try to [[https://github.com/roman/golden-ratio.el][golden-ratio]]. + +=golden-ratio= resizes windows dynamically depending on whether they are +selected or not. By default =golden-ratio= is off. + +The mode can be toggled on and off with ~SPC t g~. + +*** Buffers and Files +By default Spacemacs uses =helm= to open files. + +**** Buffers manipulation key bindings +Buffer manipulation commands (start with ~b~): + +| Key Binding | Description | +|-----------------+--------------------------------------------------------------------------| +| ~SPC TAB~ | switch to alternate buffer in the current window (switch back and forth) | +| ~SPC b b~ | switch to a buffer using [[https://github.com/emacs-helm/helm][helm]] | +| ~SPC b d~ | kill the current buffer (does not delete the visited file) | +| ~SPC u SPC b d~ | kill the current buffer and window (does not delete the visited file) | +| ~SPC b D~ | kill a visible buffer using [[https://github.com/abo-abo/ace-window][ace-window]] | +| ~SPC u SPC b D~ | kill a visible buffer and its window using [[https://github.com/abo-abo/ace-window][ace-window]] | +| ~SPC b C-d~ | kill buffers using a regular expression | +| ~SPC b e~ | erase the content of the buffer (ask for confirmation) | +| ~SPC b h~ | open =*spacemacs*= home buffer | +| ~SPC b n~ | switch to next buffer avoiding special buffers | +| ~SPC b m~ | kill all buffers except the current one | +| ~SPC u SPC b m~ | kill all buffers and windows except the current one | +| ~SPC b M~ | kill all buffers matching the regexp | +| ~SPC b p~ | switch to previous buffer avoiding special buffers | +| ~SPC b P~ | copy clipboard and replace buffer (useful when pasting from a browser) | +| ~SPC b R~ | revert the current buffer (reload from disk) | +| ~SPC b s~ | switch to the =*scratch*= buffer (create it if needed) | +| ~SPC b w~ | toggle read-only (writable state) | +| ~SPC b Y~ | copy whole buffer to clipboard (useful when copying to a browser) | +| ~z f~ | Make current function or comments visible in buffer as much as possible | + +**** Buffers manipulation transient state +A convenient buffer manipulation transient state allows to quickly cycles through +the opened buffer and kill them. + +| Key Binding | Description | +|---------------+-----------------------------------------------| +| ~SPC b .~ | initiate transient state | +| ~K~ | kill current buffer | +| ~n~ | go to next buffer (avoid special buffers) | +| ~N~ | go to previous buffer (avoid special buffers) | +| Any other key | leave the transient state | + +**** Special Buffers +Unlike vim, emacs creates many buffers that most people do not need to see. Some +examples are =*Messages*= and =*Compile-Log*=. Spacemacs tries to automatically +ignore buffers that are not useful. However, you may want to change the way +Spacemacs marks buffers as useful. For instructions, see the [[file:FAQ.org::Change%20special%20buffer%20rules?][special buffer howto]]. + +**** Files manipulations key bindings +Files manipulation commands (start with ~f~): + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------------------------------------------------------------------| +| ~SPC f b~ | go to file bookmarks | +| ~SPC f c~ | copy current file to a different location | +| ~SPC f C d~ | convert file from unix to dos encoding | +| ~SPC f C u~ | convert file from dos to unix encoding | +| ~SPC f D~ | delete a file and the associated buffer (ask for confirmation) | +| ~SPC f E~ | open a file with elevated privileges (sudo edit) | +| ~SPC f f~ | open file with =helm= | +| ~SPC f F~ | try to open the file under point =helm= | +| ~SPC f h~ | open binary file with =hexl= (a hex editor) | +| ~SPC f j~ | jump to the current buffer file in dired | +| ~SPC f J~ | open a junk file, in mode determined by the file extension provided (defaulting to =fundamental mode=), using =helm= (or =ivy=) | +| ~SPC f l~ | open file literally in =fundamental mode= | +| ~SPC f L~ | Locate a file (using =locate=) | +| ~SPC f o~ | open a file using the default external program | +| ~SPC f R~ | rename the current file | +| ~SPC f s~ | save a file | +| ~SPC f S~ | save all files | +| ~SPC f r~ | open a recent file with =helm= | +| ~SPC f t~ | toggle file tree side bar using [[https://github.com/jaypei/emacs-neotree][NeoTree]] | +| ~SPC f v d~ | add a directory variable | +| ~SPC f v f~ | add a local variable to the current file | +| ~SPC f v p~ | add a local variable to the first line of the current file | +| ~SPC f y~ | show and copy current file absolute path in the minibuffer | + +**** Emacs and Spacemacs files +Convenient key bindings are located under the prefix ~SPC f e~ to quickly +navigate between =Emacs= and Spacemacs specific files. + +| Key Binding | Description | +|-------------+-----------------------------------------------------------------| +| ~SPC f e d~ | open the spacemacs dotfile (=~/.spacemacs=) | +| ~SPC f e D~ | open =ediff= buffer of =~/.spacemacs= and =.spacemacs.template= | +| ~SPC f e f~ | discover the =FAQ= using =helm= | +| ~SPC f e i~ | open the all mighty =init.el= | +| ~SPC f e l~ | locate an Emacs library | +| ~SPC f e R~ | resync the dotfile with spacemacs | +| ~SPC f e v~ | display and copy the spacemacs version | + +**** Browsing files with Helm +In =vim= and =hybrid= styles, Spacemacs remap the navigation in Helm find-files +to keep finger on the home row. + +| Key Binding | Description | +|-------------+-----------------------------------| +| ~C-h~ | go up one level (parent directory | +| ~C-H~ | describe key (replace ~C-h~) | +| ~C-j~ | go to previous candidate | +| ~C-k~ | go to next candidate | +| ~C-l~ | enter current directory | + +*** Ido +Spacemacs displays the =ido= minibuffer vertically thanks to the +[[https://github.com/gempesaw/ido-vertical-mode.el][ido-vertical-mode]]. + +Basic =ido= operations can be done with ~Ctrl~ key: + +| Key Binding | Description | +|--------------------+---------------------------------------------------| +| ~C-~ | open a =dired buffer= | +| ~M-~ | open a =dired buffer= in terminal | +| ~C-d~ | delete selected file (ask for confirmation) | +| ~C-h~ | go to parent directory | +| ~C-j~ | select next file or directory | +| ~C-k~ | select previous file or directory | +| ~C-l~ | open the selected file | +| ~C-n~ | select next file or directory | +| ~C-o~ | open selected file in other window | +| ~C-p~ | select previous file or directory | +| ~C-s~ | open selected file in a vertically split window | +| ~C-t~ | open selected file in a new frame | +| ~C-v~ | open selected file in a horizontally split window | +| ~C-S-h~ | go to previous directory | +| ~C-S-j~ or ~C-S-n~ | next history element | +| ~C-S-k~ or ~C-S-p~ | previous history element | +| ~C-S-l~ | go to next directory | + +*** Ido transient state +Spacemacs defines a [[Transient-states][transient state]] for =ido=. + +Initiate the transient state with ~M-SPC~ or ~s-M-SPC~ while in an =ido= buffer. + +| Key Binding | Description | +|----------------------+---------------------------------------| +| ~M-SPC~ or ~s-M-SPC~ | initiate or leave the transient state | +| ~?~ | display help | +| ~e~ | open dired | +| ~h~ | delete backward or parent directory | +| ~j~ | next match | +| ~J~ | sub directory | +| ~k~ | previous match | +| ~K~ | parent directory | +| ~l~ | select match | +| ~n~ | next directory in history | +| ~o~ | open in other window | +| ~p~ | previous directory in history | +| ~q~ | quit transient state | +| ~s~ | open in a new horizontal split | +| ~t~ | open in other frame | +| ~v~ | open in a new vertical split | + +*** NeoTree file tree +Spacemacs provides a quick and simple way to navigate in an unknown project +file tree with [[https://github.com/jaypei/emacs-neotree][NeoTree]]. + +To toggle the =NeoTree= buffer press ~SPC f t~ or ~SPC p t~ (the latter open +NeoTree with the root set to the projectile project root). + +The NeoTree window always has the number =0= so it does not shift the current +number of the other windows. To select the NeoTree window you then use ~SPC 0~. + +VCS integration is supported, the file color will change depending on its +current state. With default =spacemacs-dark= theme: +- green: new file +- purple: modified file + +**** NeoTree navigation +Navigation is centered on the ~hjkl~ keys with the hope of providing a fast +navigation experience like in [[http://ranger.nongnu.org/][ranger]]: + +| Key Binding | Description | +|--------------+-------------------------------------------------------------------------------| +| ~h~ | collapse expanded directory or go to parent node | +| ~H~ | select previous sibling | +| ~j~ | select next file or directory | +| ~J~ | select next expanded directory on level down | +| ~k~ | select previous file or directory | +| ~K~ | select parent directory, when reaching the root change it to parent directory | +| ~l~ or ~RET~ | expand directory | +| ~L~ | select next sibling | +| ~R~ | make a directory the root directory | + +*Note*: Point is automatically set to the first letter of a node for a smoother +experience. + +**** Opening files with NeoTree +By default a file is opened in the last active window. It is possible to choose +window number where to open a file by using a numeric argument, for instance ~2 +l~ or ~2 RET~ will open the current file in window 2. It is also possible to +open the file in a split window with ~|~ and ~-~: + +| Key Binding | Description | +|------------------+-------------------------------------------| +| ~l~ or ~RET~ | open file in last active window | +| ~# l~ or ~# RET~ | open file in window number =#= | +| ~¦~ | open file in an vertically split window | +| ~-~ | open file in an horizontally split window | + +**** Other NeoTree key bindings + +| Key Binding | Description | +|-------------+---------------------------------| +| ~TAB~ | toggle stretching of the buffer | +| ~c~ | create a node | +| ~d~ | delete a node | +| ~gr~ | refresh | +| ~s~ | toggle showing of hidden files | +| ~q~ or ~fd~ | hide =NeoTree= buffer | +| ~r~ | rename a node | +| ~?~ | show help | + +**** NeoTree mode-line +The mode-line has the following format =[x/y] d (D:a, F:b)= where: + - =x= is the index of the current selected file or directory + - =y= the total number of items (file and directory) in the current directory + - =d= the name of the current directory + - =a= the number of directories in the current directory + - =b= the number of files in the current directory + +**** NeoTree Source Control Integration +If you would like NeoTree to show source control information, you can use the +setting =neo-vc-integration=. It is a list containing the possible values: + +| Setting | Description | +|---------+---------------------------------------------------------------------------| +| =face= | Show information by changing the color of the file/directory name. | +| =char= | Show information with a character to the left of the file/directory name. | + +The default is =nil= (do not show source control information), which is recommended. + +For example, + +#+BEGIN_SRC emacs-lisp +(setq neo-vc-integration 'face) +#+END_SRC + +*Note*: At this time, it is not recommended to set this to anything other +than =nil=. Otherwise, it will become very slow with larger source trees. +See https://github.com/jaypei/emacs-neotree/issues/126 for more information. + +**** NeoTree Theme +You can change the NeoTree theme by using the setting =neo-theme=. Possible +values are: + +| Setting | Description | +|-----------+------------------------------------------------------------------| +| =classic= | Use an icon to display items - only suitable for gui mode. | +| =ascii= | The simplest style, it will use =x=, =-= to display fold status. | +| =arrow= | Use unicode arrows to display fold status. | +| =nerd= | Use the NERDTree indentation mode and arrows. | + +The default is =classic=. + +Use =nerd= if you want it to look most like NERDTree in VIM. For example: + +#+BEGIN_SRC emacs-lisp +(setq neo-theme 'nerd) +#+END_SRC + +*** Bookmarks +Bookmarks can be set anywhere in a file. Bookmarks are persistent. They are very +useful to jump to/open a known project. Spacemacs uses =helm-bookmarks= to +manage them. + +Open an =helm= window with the current bookmarks by pressing: ~SPC f b~ + +Then in the =helm-bookmarks= buffer: + +| Key Binding | Description | +|-------------+----------------------------------------------| +| ~C-d~ | delete the selected bookmark | +| ~C-e~ | edit the selected bookmark | +| ~C-f~ | toggle filename location | +| ~C-o~ | open the selected bookmark in another window | + +To save a new bookmark, just type the name of the bookmark and press ~RET~. + +*** DocView mode +=doc-view-mode= is a built-in major mode to view DVI, PostScript (PS), PDF, +OpenDocument, and Microsoft Office documents. + +| Key Binding | Description | +|-------------+------------------------------------------| +| ~/~ | search forward | +| ~?~ | search backward | +| ~+~ | enlarge | +| ~-~ | shrink | +| ~gg~ | go to first page | +| ~G~ | go to last page | +| ~gt~ | go to page number | +| ~h~ | previous page | +| ~H~ | adjust to height | +| ~j~ | next line | +| ~k~ | previous line | +| ~K~ | kill proc and buffer | +| ~l~ | next page | +| ~n~ | go to next search occurrence | +| ~N~ | go to previous search occurrence | +| ~P~ | fit page to window | +| ~r~ | revert | +| ~W~ | adjust to width | +| ~C-d~ | scroll down | +| ~C-k~ | kill proc | +| ~C-u~ | scroll up | +| ~C-c C-c~ | toggle display text and image display | +| ~C-c C-t~ | open new buffer with doc's text contents | + +** Auto-saving +*** Frequency of auto-saving +By default auto-saving of files is performed every 300 characters and +every 30 seconds of idle time which can be changed by setting to a +new value the variables =auto-save-inteval= and =auto-save-timeout= +respectively. + +*** Location of auto-saved files +Auto-save of modified files can be performed in-place on the original file +itself /or/ in the cache directory (in this case the original file will remain +unsaved). By default Spacemacs auto-save the file in the cache directory. + +To modify the location set the variable =dotspacemacs-auto-save-file-location= +to =original= or =cache=. + +Local files are auto-saved in a sub-directory called =site= in the =cache= +directory whereas remote files (i.e. files edited over TRAMP) are auto-saved +in a sub-directory called =dist=. + +*** Disable auto-save +To disable auto-saving set the variable =dotspacemacs-auto-save-file-location= +to =nil=. + +You can toggle auto-save in a buffer by calling the command =auto-save-mode=. + +** Searching +*** With an external tool +Spacemacs can be interfaced with different search utilities like: + - ack + - grep + - [[https://github.com/ggreer/the_silver_searcher][ag]] + - [[https://github.com/monochromegane/the_platinum_searcher][pt]] + +The search commands in Spacemacs are organized under the ~SPC s~ prefix with the +next key is the tool to use and the last key is the scope. For instance ~SPC s a +b~ will search in all opened buffers using =ag=. + +If the last key (determining the scope) is uppercase then the current region or +symbol under point is used as default input for the search. For instance ~SPC s +a B~ will search with symbol under point (if there is no active region). + +If the tool key is omitted then a default tool will be automatically selected +for the search. This tool corresponds to the first tool found on the system of +the list =dotspacemacs-search-tools=, the default order is =ag=, =pt=, =ack= +then =grep=. For instance ~SPC s b~ will search in the opened buffers using =pt= +if =ag= has not been found on the system. + +The tool keys are: + +| Tool | Key | +|------+-----| +| ag | a | +| grep | g | +| ack | k | +| pt | t | + +The available scopes and corresponding keys are: + +| Scope | Key | +|----------------------------+-----| +| opened buffers | b | +| files in a given directory | f | +| current project | p | + +It is possible to search in the current file by double tapping the second key +of the sequence, for instance ~SPC s a a~ will search in the current +file with =ag=. + +*Notes*: +- =ag= and =pt= are optimized to be used in a source control repository but + they can be used in an arbitrary directory as well. +- It is also possible to search in several directories at once by marking + them in the helm buffer. + +*Beware* if you use =pt=, [[https://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/apps/pt.html][TCL parser tools]] also install a command line tool +called =pt=. + +**** Useful key bindings + +| Key Binding | Description | +|------------------------+---------------------------------------------------------------| +| ~F3~ | in a =helm= or =ivy= buffer, save results to a regular buffer | +| ~SPC r l~ | resume the last =completion= buffer | +| ~SPC r s~ or ~SPC s l~ | resume search buffer (completion or converted search buffer) | +| ~SPC s `~ | go back to the previous place reached with =helm-ag= | +| Prefix argument | will ask for file extensions | + +When results have been saved in a regular buffer with ~F3~, that buffer supports +browsing through the matches with Spacemacs’ =next-error= and =previous-error= +bindings (~SPC e n~ and ~SPC e p~) as well as the error transient state (~SPC e~). + +**** Searching in current file + +| Key Binding | Description | +|-------------+-----------------------------------------------------| +| ~SPC s s~ | search with the first found tool | +| ~SPC s S~ | search with the first found tool with default input | +| ~SPC s a a~ | =ag= | +| ~SPC s a A~ | =ag= with default input | +| ~SPC s g g~ | =grep= | +| ~SPC s g G~ | =grep= with default input | + +**** Searching in all open buffers visiting files + +| Key Binding | Description | +|-------------+-----------------------------------------------------| +| ~SPC s b~ | search with the first found tool | +| ~SPC s B~ | search with the first found tool with default input | +| ~SPC s a b~ | =ag= | +| ~SPC s a B~ | =ag= with default text | +| ~SPC s g b~ | =grep= | +| ~SPC s g B~ | =grep= with default text | +| ~SPC s k b~ | =ack= | +| ~SPC s k B~ | =ack= with default text | +| ~SPC s t b~ | =pt= | +| ~SPC s t B~ | =pt= with default text | + +**** Searching in files in an arbitrary directory + +| Key Binding | Description | +|-------------+-----------------------------------------------------| +| ~SPC s f~ | search with the first found tool | +| ~SPC s F~ | search with the first found tool with default input | +| ~SPC s a f~ | =ag= | +| ~SPC s a F~ | =ag= with default text | +| ~SPC s g f~ | =grep= | +| ~SPC s g F~ | =grep= with default text | +| ~SPC s k f~ | =ack= | +| ~SPC s k F~ | =ack= with default text | +| ~SPC s t f~ | =pt= | +| ~SPC s t F~ | =pt= with default text | + +**** Searching in a project + +| Key Binding | Description | +|-----------------------+-----------------------------------------------------| +| ~SPC /~ or ~SPC s p~ | search with the first found tool | +| ~SPC *~ or ~SPC s P~ | search with the first found tool with default input | +| ~SPC s a p~ | =ag= | +| ~SPC s a P~ | =ag= with default text | +| ~SPC s g p~ | =grep= with default text | +| ~SPC s k p~ | =ack= | +| ~SPC s k P~ | =ack= with default text | +| ~SPC s t p~ | =pt= | +| ~SPC s t P~ | =pt= with default text | + +*Hint*: It is also possible to search in a project without needing to open a +file beforehand. To do so use ~SPC p p~ and then ~C-s~ on a given project to +directly search into it like with ~SPC s p~. + +**** Searching the web + +| Key Binding | Description | +|-------------+----------------------------------------------------------------------| +| ~SPC s w g~ | Get Google suggestions in emacs. Opens Google results in Browser. | +| ~SPC s w w~ | Get Wikipedia suggestions in emacs. Opens Wikipedia page in Browser. | + +*** Persistent highlighting +Spacemacs uses =evil-search-highlight-persist= to keep the searched expression +highlighted until the next search. It is also possible to clear the highlighting +by pressing ~SPC s c~ or executing the ex command =:noh=. + +*** Highlight current symbol +Spacemacs supports highlighting of the current symbol on demand (provided by +[[https://github.com/emacsmirror/auto-highlight-symbol][auto-highlight-symbol]] mode) and adds a transient state to easily navigate and rename +this symbol. + +It is also possible to change the range of the navigation on the fly to: + - buffer + - function + - visible area + +To initiate the highlighting of the current symbol under point press ~SPC s h~. + +Navigation between the highlighted symbols can be done with the commands: + +| Key Binding | Description | +|-------------+------------------------------------------------------------------------------------| +| ~*~ | initiate navigation transient state on current symbol and jump forwards | +| ~#~ | initiate navigation transient state on current symbol and jump backwards | +| ~SPC s e~ | edit all occurrences of the current symbol(/) | +| ~SPC s h~ | highlight the current symbol and all its occurrence within the current range | +| ~SPC s H~ | go to the last searched occurrence of the last highlighted symbol | +| ~SPC t h a~ | toggle automatic highlight of symbol under point after =ahs-idle-interval= seconds | + +In 'Spacemacs' highlight symbol transient state: + +| Key Binding | Description | +|---------------+---------------------------------------------------------------| +| ~e~ | edit occurrences (*) | +| ~n~ | go to next occurrence | +| ~N~ | go to previous occurrence | +| ~d~ | go to next definition occurrence | +| ~D~ | go to previous definition occurrence | +| ~r~ | change range (=function=, =display area=, =whole buffer=) | +| ~R~ | go to home occurrence (reset position to starting occurrence) | +| Any other key | leave the navigation transient state | + +(*) using [[https://github.com/tsdh/iedit][iedit]] or the default implementation +of =auto-highlight-symbol= + +The transient state text in minibuffer display the following information: + +#+BEGIN_EXAMPLE + [6/11]* press (n/N) to navigate, (e) to edit, (r) to change range or (R) + for reset +#+END_EXAMPLE + +Where = [x/y]*= is: + - M: the current range mode + - ==: whole buffer range + - ==: current display range + - ==: current function range + - =x=: the index of the current highlighted occurrence + - =y=: the total number of occurrences + - =*=: appears if there is at least one occurrence which is not currently visible. + +*** Visual Star +With [[https://github.com/bling/evil-visualstar][evil-visualstar]] you can search for the next occurrence of the current +selection. + +It is pretty useful combined with the [[Region selection][expand-region]] bindings. + +*Note*: If the current state is not the =visual state= then pressing ~*~ uses +auto-highlight-symbol and its transient state. + +*** Listing symbols by semantic +Use =helm-semantic-or-imenu= command from =Helm= to quickly navigate between the +symbols in a buffer. + +To list all the symbols of a buffer press: ~SPC s j~ + +*** Helm-swoop +This is very similar to =moccur=, it displays a =helm= buffer with all the +occurrences of the word under point. You can then change the search query in +real-time and navigate between them easily. + +You can even edit the occurrences directly in the =helm= buffer and apply the +modifications to the buffer. + +| Key Binding | Description | +|-------------+--------------------------------| +| ~SPC s s~ | execute =helm-swoop= | +| ~SPC s S~ | execute =helm-multi-swoop= | +| ~SPC s C-s~ | execute =helm-multi-swoop-all= | + +** Editing +*** Paste text +**** Paste Transient-state +The paste transient state can be enabled by settings the variable +=dotspacemacs-enable-paste-transient-state= to =t=. By default it is disabled. + +When the transient state is enabled, pressing ~p~ again will replace the pasted text +with the previous yanked (copied) text on the kill ring. + +For example if you copy =foo= and =bar= then press ~p~ the text =bar= will +be pasted, pressing ~p~ again will replace =bar= with =foo=. + +| Key Binding | Description | +|---------------+-------------------------------------------------------------------------------| +| ~p~ or ~P~ | paste the text before or after point and initiate the =paste= transient state | +| ~C-j~ | in transient state: replace paste text with the previously copied one | +| ~C-k~ | in transient state: replace paste text with the next copied one | +| Any other key | leave the transient state | + +**** Auto-indent pasted text +By default any pasted text will be auto-indented. To paste text un-indented use +the universal argument. + +It is possible to disable the auto-indentation for specific major-modes by +adding a major-mode to the variable =spacemacs-indent-sensitive-modes= in your +=dotspacemacs/user-config= function. + +*** Text manipulation commands +Text related commands (start with ~x~): + +| Key Binding | Description | +|-------------+---------------------------------------------------------------| +| ~SPC x a &~ | align region at & | +| ~SPC x a (~ | align region at ( | +| ~SPC x a )~ | align region at ) | +| ~SPC x a ​,​~ | align region at , | +| ~SPC x a .~ | align region at . (for numeric tables) | +| ~SPC x a :~ | align region at : | +| ~SPC x a ;~ | align region at ; | +| ~SPC x a =~ | align region at = | +| ~SPC x a a~ | align region (or guessed section) using default rules | +| ~SPC x a c~ | align current intendation region using default rules | +| ~SPC x a r~ | align region using user-specified regexp | +| ~SPC x a m~ | align region at arithmetic operators (+-*/) | +| ~SPC x a ¦~ | align region at ¦ | +| ~SPC x c~ | count the number of chars/words/lines in the selection region | +| ~SPC x d w~ | delete trailing whitespaces | +| ~SPC x g l~ | set languages used by translate commands | +| ~SPC x g t~ | translate current word using Google Translate | +| ~SPC x g T~ | reverse source and target languages | +| ~SPC x j c~ | set the justification to center | +| ~SPC x j f~ | set the justification to full | +| ~SPC x j l~ | set the justification to left | +| ~SPC x j n~ | set the justification to none | +| ~SPC x j r~ | set the justification to right | +| ~SPC x J~ | move down a line of text (enter transient state) | +| ~SPC x K~ | move up a line of text (enter transient state) | +| ~SPC x l s~ | sort lines | +| ~SPC x l u~ | uniquify lines | +| ~SPC x o~ | use avy to select a link in the frame and open it | +| ~SPC x O~ | use avy to select multiple links in the frame and open them | +| ~SPC x t c~ | swap (transpose) the current character with the previous one | +| ~SPC x t w~ | swap (transpose) the current word with the previous one | +| ~SPC x t l~ | swap (transpose) the current line with the previous one | +| ~SPC x u~ | set the selected text to lower case | +| ~SPC x U~ | set the selected text to upper case | +| ~SPC x w c~ | count the number of occurrences per word in the select region | +| ~SPC x w d~ | show dictionary entry of word from wordnik.com | +| ~SPC x TAB~ | indent or dedent a region rigidly | + +*** Text insertion commands +Text insertion commands (start with ~i~): + +| Key binding | Description | +|-------------+-----------------------------------------------------------------------| +| ~SPC i l l~ | insert lorem-ipsum list | +| ~SPC i l p~ | insert lorem-ipsum paragraph | +| ~SPC i l s~ | insert lorem-ipsum sentence | +| ~SPC i u~ | Search for Unicode characters and insert them into the active buffer. | +| ~SPC i U 1~ | insert UUIDv1 (use universal argument to insert with CID format) | +| ~SPC i U 4~ | insert UUIDv4 (use universal argument to insert with CID format) | +| ~SPC i U U~ | insert UUIDv4 (use universal argument to insert with CID format) | + +*** Smartparens Strict mode +[[https://github.com/Fuco1/smartparens][Smartparens]] comes with a strict mode which prevents deletion of parenthesis if +the result is unbalanced. + +This mode can be frustrating for novices, this is why it is not enabled by +default. + +It is possible to enable it easily for /all programming modes/ with the variable +=dotspacemacs-smartparens-strict-mode= of you =~/.spacemacs=. + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-smartparens-strict-mode t) +#+END_SRC + +*** Zooming +**** Text +The font size of the current buffer can be adjusted with the commands: + +| Key Binding | Description | +|---------------+--------------------------------------------------------------------------------| +| ~SPC z x +~ | scale up the font and initiate the font scaling transient state | +| ~SPC z x =~ | scale up the font and initiate the font scaling transient state | +| ~SPC z x -~ | scale down the font and initiate the font scaling transient state | +| ~SPC z x 0~ | reset the font size (no scaling) and initiate the font scaling transient state | +| ~+~ | increase the font size | +| ~=~ | increase the font size | +| ~-~ | decrease the font size | +| ~0~ | reset the font size | +| Any other key | leave the font scaling transient state | + +Note that /only/ the text of the current buffer is scaled, the other buffers, +the mode-line and the minibuffer are not affected. To zoom the whole content of +a frame use the =zoom frame= bindings (see next section). + +**** Frame +You can zoom in and out the whole content of the frame with the commands: + +| Key Binding | Description | +|---------------+-----------------------------------------------------------------------------| +| ~SPC z f +~ | zoom in the frame content and initiate the frame scaling transient state | +| ~SPC z f =~ | zoom in the frame content and initiate the frame scaling transient state | +| ~SPC z f -~ | zoom out the frame content and initiate the frame scaling transient state | +| ~SPC z f 0~ | reset the frame content size and initiate the frame scaling transient state | +| ~+~ | zoom in | +| ~=~ | zoom in | +| ~-~ | zoom out | +| ~0~ | reset zoom | +| Any other key | leave the zoom frame transient state | + +*** Increase/Decrease numbers +Spacemacs uses [[https://github.com/cofi/evil-numbers][evil-numbers]] to easily increase or decrease numbers. + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------| +| ~SPC n +~ | increase the number under point by one and initiate transient state | +| ~SPC n -~ | decrease the number under point by one and initiate transient state | + +In transient state: + +| Key Binding | Description | +|---------------+----------------------------------------| +| ~+~ | increase the number under point by one | +| ~-~ | decrease the number under point by one | +| Any other key | leave the transient state | + +*Tips:* you can increase or decrease a value by more that once by using a prefix +argument (ie. ~10 SPC n +~ will add 10 to the number under point). + +*** Spell checking +Spell checking is enabled by including the [[../layers/spell-checking][spell +checking]] layer in your dotfile. + +Keybindings are listed in the layer documentation. + +*** Region selection +Vi =Visual= modes are all supported by =evil=. + +**** Expand-region +Spacemacs adds another =Visual= mode via the [[https://github.com/magnars/expand-region.el][expand-region]] mode. + +| Key Binding | Description | +|-------------+------------------------------------------| +| ~SPC v~ | initiate expand-region mode then... | +| ~v~ | expand the region by one semantic unit | +| ~V~ | contract the region by one semantic unit | +| ~r~ | reset the region to initial selection | +| ~ESC~ | leave expand-region mode | + +**** Indent text object +With [[https://github.com/TheBB/evil-indent-plus][evil-indent-plus]] the following text objects are available: + +- ~ii~ - Inner Indentation: the surrounding textblock with the same indentation +- ~iI~ - Above and Indentation: ~ii~ + the line above with a different indentation +- ~iJ~ - Above, Below and Indentation+: ~iI~ + the line below with a different indentation + +There are also ~a~ variants that include whitespace. Example (=|= indicates point): + +#+BEGIN_SRC emacs-lisp + (while (not done) + (messa|ge "All work and no play makes Jack a dull boy.")) + (1+ 41) +#+END_SRC + +- ~vii~ will select the line with message +- ~viI~ will select the whole while loop +- ~viJ~ will select the whole fragment + +*** Region narrowing +The displayed text of a buffer can be narrowed with the commands (start with +~n~): + +| Key Binding | Description | +|-------------+-------------------------------------------| +| ~SPC n f~ | narrow the buffer to the current function | +| ~SPC n p~ | narrow the buffer to the visible page | +| ~SPC n r~ | narrow the buffer to the selected text | +| ~SPC n w~ | widen, i.e show the whole buffer again | + +*** Replacing text with iedit +Spacemacs uses the powerful [[https://github.com/tsdh/iedit][iedit]] mode through [[https://github.com/syl20bnr/evil-iedit-state][evil-iedit-state]] to quickly +edit multiple occurrences of a symbol or selection. + +=evil-iedit-state= defines two new evil states: + - =iedit state= + - =iedit-insert state= + +The color code for these states is =red=. + +=evil-iedit-state= has also a nice integration with [[https://github.com/magnars/expand-region.el][expand-region]] for quick +editing of the currently selected text by pressing ~e~. + +**** iedit states key bindings +***** State transitions + +| Key Binding | From | To | +|-------------+------------------+--------| +| ~SPC s e~ | normal or visual | iedit | +| ~e~ | expand-region | iedit | +| ~ESC~ | iedit | normal | +| ~C-g~ | iedit | normal | +| ~fd~ | iedit | normal | +| ~ESC~ | iedit-insert | iedit | +| ~C-g~ | iedit-insert | normal | +| ~fd~ | iedit-insert | normal | + +To sum-up, in =iedit-insert state= you have to press ESC twice to go back to the +=normal state=. You can also at any time press ~C-g~ or ~fd~ to return to =normal +state=. + +*Note*: evil commands which switch to =insert state= will switch in +=iedit-insert state=. + +***** In iedit state +=iedit state= inherits from =normal state=, the following key bindings are +specific to =iedit state=. + +| Key Binding | Description | +|-------------+-----------------------------------------------------------------------------------------| +| ~ESC~ | go back to =normal state= | +| ~TAB~ | toggle current occurrence | +| ~0~ | go to the beginning of the current occurrence | +| ~$~ | go to the end of the current occurrence | +| ~#~ | prefix all occurrences with an increasing number (SPC u to choose the starting number). | +| ~A~ | go to the end of the current occurrence and switch to =iedit-insert state= | +| ~D~ | delete the occurrences | +| ~F~ | restrict the scope to the function | +| ~gg~ | go to first occurrence | +| ~G~ | go to last occurrence | +| ~I~ | go to the beginning of the current occurrence and switch to =iedit-insert state= | +| ~J~ | increase the editing scope by one line below | +| ~K~ | increase the editing scope by one line above | +| ~L~ | restrict the scope to the current line | +| ~n~ | go to next occurrence | +| ~N~ | go to previous occurrence | +| ~p~ | replace occurrences with last yanked (copied) text | +| ~S~ | (substitute) delete the occurrences and switch to =iedit-insert state= | +| ~V~ | toggle visibility of lines with no occurrence | +| ~U~ | Up-case the occurrences | +| ~C-U~ | down-case the occurrences | + +*Note*: ~0~, ~$~, ~A~ and ~I~ have the default Vim behavior when used outside of +an ~occurrence~. + +***** In iedit-insert state + +| Key Binding | Description | +|-------------+---------------------------| +| ~ESC~ | go back to =iedit state= | +| ~C-g~ | go back to =normal state= | + +**** Examples +- manual selection of several words then replace: ~v w w SPC s e S "toto" ESC ESC~ +- append text to a word on two lines: ~v i w SPC s e J i "toto" ESC ESC~ +- substitute symbol /with expand-region/: ~SPC v v e S "toto" ESC ESC~ +- replace symbol with yanked (copied) text /with expand region/: ~SPC v + e p ESC ESC~ + +*** Replacing text in several files +If you have =ag=, =pt= or =ack= installed, replacing an occurrence of text in +several files can be performed via [[https://github.com/syohex/emacs-helm-ag][helm-ag]]. + +Say you want to replace all =foo= occurrences by =bar= in your current +project: + - initiate a search with ~SPC /~ + - enter in edit mode with ~C-c C-e~ + - go to the occurrence and enter in =iedit state= with ~SPC s e~ + - edit the occurrences then leave the =iedit state= + - press ~C-c C-c~ + +*Note*: In Spacemacs, =helm-ag= despite its name works with =ack= and =pt= as +well (but not with =grep=). + +*** Renaming files in a directory +It is possible to batch rename files in a directory using =wdired= from an +=helm= session: +- browse for a directory using ~SPC f f~ +- enter =wdired= with ~C-c C-e~ +- edit the file names and use ~C-c C-c~ to confirm the changes +- use ~C-c C-k~ to abort any changes + +*** Commenting +Comments are handled by [[https://github.com/redguardtoo/evil-nerd-commenter][evil-nerd-commenter]], it's bound to the following keys. + +| Key Binding | Description | +|-------------+---------------------------| +| ~SPC ;~ | comment operator | +| ~SPC c h~ | hide/show comments | +| ~SPC c l~ | comment lines | +| ~SPC c L~ | invert comment lines | +| ~SPC c p~ | comment paragraphs | +| ~SPC c P~ | invert comment paragraphs | +| ~SPC c t~ | comment to line | +| ~SPC c T~ | invert comment to line | +| ~SPC c y~ | comment and yank | +| ~SPC c Y~ | invert comment and yank | + +*Tips:* To comment efficiently a block of line use the combo ~SPC ; SPC y~ + +*** Regular expressions +Spacemacs uses the packages [[https://github.com/joddie/pcre2el][pcre2el]] to manipulate regular expressions. It is +useful when working with =Emacs Lisp= buffers since it allows to easily converts +=PCRE= (Perl Compatible RegExp) to Emacs RegExp or =rx=. It can also be used to +"explain" a PCRE RegExp around point in =rx= form. + +The key bindings start with ~SPC x r~ and have the following mnemonic structure: + +- ~SPC x r ~ convert from source to target +- ~SPC x r~ do what I mean + +| Key Binding | Function | +|---------------+----------------------------------------------------------------------------------------| +| ~SPC x r /~ | Explain the regexp around point with =rx= | +| ~SPC x r '​~ | Generate strings given by a regexp given this list is finite | +| ~SPC x r t~ | Replace regexp around point by the =rx= form or vice versa | +| ~SPC x r x~ | Convert regexp around point in =rx= form and display the result in the minibuffer | +| ~SPC x r c~ | Convert regexp around point to the other form and display the result in the minibuffer | +| ~SPC x r e /~ | Explain Emacs Lisp regexp | +| ~SPC x r e '​~ | Generate strings from Emacs Lisp regexp | +| ~SPC x r e p~ | Convert Emacs Lisp regexp to PCRE | +| ~SPC x r e t~ | Replace Emacs Lisp regexp by =rx= form or vice versa | +| ~SPC x r e x~ | Convert Emacs Lisp regexp to =rx= form | +| ~SPC x r p /~ | Explain PCRE regexp | +| ~SPC x r p '​~ | Generate strings from PCRE regexp | +| ~SPC x r p e~ | Convert PCRE regexp to Emacs Lisp | +| ~SPC x r p x~ | Convert PCRE to =rx= form | + +*** Deleting files +Deletion is configured to send deleted files to system trash. + +On OS X the =trash= program is required. It can be installed with [[http:www.brew.sh][homebrew]] with +the following command: + +#+BEGIN_SRC sh +$ brew install trash +#+END_SRC + +To disable the trash you can set the variable =delete-by-moving-to-trash= to +=nil= in your =~/.spacemacs=. + +*** Editing Lisp code +Editing of lisp code is provided by [[https://github.com/syl20bnr/evil-lisp-state][evil-lisp-state]]. + +Commands will set the current state to =lisp state= where different commands +combo can be repeated without pressing on ~SPC k~. + +When in =lisp state= the color of the mode-line changes to pink. + +Examples: + - to slurp three times while in normal state: ~SPC k 3 s~ + - to wrap a symbol in parentheses then slurp two times: ~SPC k w 2 s~ + +*Note*: The =lisp state= commands are available in /any/ modes! Try it out. + +**** Lisp Key Bindings +***** Lisp state key bindings +These commands automatically switch to =lisp state=. + +| Key Binding | Function | +|-------------+---------------------------------------------------------------------| +| ~SPC k %~ | evil jump item | +| ~SPC k :~ | ex command | +| ~SPC k (~ | insert expression before (same level as current one) | +| ~SPC k )~ | insert expression after (same level as current one) | +| ~SPC k $~ | go to the end of current sexp | +| ~SPC k ` k~ | hybrid version of push sexp (can be used in non lisp dialects) | +| ~SPC k ` p~ | hybrid version of push sexp (can be used in non lisp dialects) | +| ~SPC k ` s~ | hybrid version of slurp sexp (can be used in non lisp dialects) | +| ~SPC k ` t~ | hybrid version of transpose sexp (can be used in non lisp dialects) | +| ~SPC k 0~ | go to the beginning of current sexp | +| ~SPC k a~ | absorb expression | +| ~SPC k b~ | forward barf expression | +| ~SPC k B~ | backward barf expression | +| ~SPC k c~ | convolute expression | +| ~SPC k ds~ | delete symbol | +| ~SPC k Ds~ | backward delete symbol | +| ~SPC k dw~ | delete word | +| ~SPC k Dw~ | backward delete word | +| ~SPC k dx~ | delete expression | +| ~SPC k Dx~ | backward delete expression | +| ~SPC k e~ | unwrap current expression and kill all symbols after point | +| ~SPC k E~ | unwrap current expression and kill all symbols before point | +| ~SPC k h~ | previous symbol | +| ~SPC k H~ | go to previous sexp | +| ~SPC k i~ | switch to =insert state= | +| ~SPC k I~ | go to beginning of current expression and switch to =insert state= | +| ~SPC k j~ | next closing parenthesis | +| ~SPC k J~ | join expression | +| ~SPC k k~ | previous opening parenthesis | +| ~SPC k l~ | next symbol | +| ~SPC k L~ | go to next sexp | +| ~SPC k p~ | paste after | +| ~SPC k P~ | paste before | +| ~SPC k r~ | raise expression (replace parent expression by current one) | +| ~SPC k s~ | forward slurp expression | +| ~SPC k S~ | backward slurp expression | +| ~SPC k t~ | transpose expression | +| ~SPC k u~ | undo | +| ~SPC k U~ | got to parent sexp backward | +| ~SPC k C-r~ | redo | +| ~SPC k v~ | switch to =visual state= | +| ~SPC k V~ | switch to =visual line state= | +| ~SPC k C-v~ | switch to =visual block state= | +| ~SPC k w~ | wrap expression with parenthesis | +| ~SPC k W~ | unwrap expression | +| ~SPC k y~ | copy expression | + +***** Emacs lisp specific key bindings + +| Key Binding | Function | +|-------------+--------------------------------------------| +| ~SPC m e $~ | go to end of line and evaluate last sexp | +| ~SPC m e b~ | evaluate buffer | +| ~SPC m e c~ | evaluate current form (a =def= or a =set=) | +| ~SPC m e e~ | evaluate last sexp | +| ~SPC m e f~ | evaluate current defun | +| ~SPC m e l~ | go to end of line and evaluate last sexp | +| ~SPC m e r~ | evaluate region | + +| Key Binding | Function | +|-------------+----------------------------------------------------| +| ~SPC m g g~ | go to definition | +| ~SPC m g G~ | go to definition in another window | +| ~SPC m h h~ | describe elisp thing at point (show documentation) | +| ~SPC m t b~ | execute buffer tests | +| ~SPC m t q~ | ask for test function to execute | + +*** Mouse usage +There are some added mouse features set for the line number margin (if shown): + +- single click in line number margin visually selects the entire line +- drag across line number margin visually selects the region +- double click in line number margin visually select the current code block + +** Managing projects +Projects in Spacemacs are managed with [[https://github.com/bbatsov/projectile][projectile]]. In =projectile= projects +are defined implicitly, for instance the root of a project is found when a +=.git= repository or =.projectile= file is encountered in the file tree. + +=Helm= is used whenever it is possible. + +To search in a project see [[Searching in a project][project searching]]. + +=projectile= commands start with p: + +| Key Binding | Description | +|-------------+---------------------------------------------------------| +| ~SPC p '​~ | open a shell in project's root (with the =shell= layer) | +| ~SPC p !~ | run shell command in project's root | +| ~SPC p &~ | run async shell command in project's root | +| ~SPC p %~ | replace a regexp | +| ~SPC p a~ | toggle between implementation and test | +| ~SPC p b~ | switch to project buffer | +| ~SPC p c~ | compile project using =projectile= | +| ~SPC p d~ | find directory | +| ~SPC p D~ | open project root in =dired= | +| ~SPC p f~ | find file | +| ~SPC p F~ | find file based on path around point | +| ~SPC p g~ | find tags | +| ~SPC p C-g~ | regenerate the project's =etags= / =gtags= | +| ~SPC p h~ | find file using =helm= | +| ~SPC p I~ | invalidate the projectile cache | +| ~SPC p k~ | kill all project buffers | +| ~SPC p o~ | run =multi-occur= | +| ~SPC p p~ | switch project | +| ~SPC p r~ | open a recent file | +| ~SPC p R~ | replace a string | +| ~SPC p t~ | open =NeoTree= in =projectile= root | +| ~SPC p T~ | test project | +| ~SPC p v~ | open project root in =vc-dir= or =magit= | +| ~SPC /~ | search in project with the best search tool available | +| ~SPC s p~ | see [[Searching in a project][search in project]] | +| ~SPC s a p~ | run =ag= | +| ~SPC s g p~ | run =grep= | +| ~SPC s k p~ | run =ack= | +| ~SPC s t p~ | run =pt= | + +*Note for Windows Users*: To enable fast indexing the GNU ~find~ or +Cygwin ~find~ must be in your ~PATH~. + +** Registers +Access commands to the various registers start with =r=: + +| Key Binding | Description | +|-------------+------------------------------------| +| ~SPC r e~ | show evil yank and named registers | +| ~SPC r m~ | show marks register | +| ~SPC r r~ | show helm register | +| ~SPC r y~ | show kill ring | + +** Errors handling +Spacemacs uses [[https://github.com/flycheck/flycheck][Flycheck]] to gives error feedback on the fly. The checks are +only performed at save time by default. + +Errors management commands (start with ~e~): + +| Key Binding | Description | +|-------------+-----------------------------------------------------------------------| +| ~SPC t s~ | toggle flycheck | +| ~SPC e c~ | clear all errors | +| ~SPC e h~ | describe a flycheck checker | +| ~SPC e l~ | toggle the display of the =flycheck= list of errors/warnings | +| ~SPC e n~ | go to the next error | +| ~SPC e p~ | go to the previous error | +| ~SPC e v~ | verify flycheck setup (useful to debug 3rd party tools configuration) | +| ~SPC e .~ | error transient state | + +The next/previous error bindings and the error transient state can be used to +browse errors from flycheck as well as errors from compilation buffers, and +indeed anything that supports Emacs’ =next-error= API. This includes for example +search results that have been saved to a separate buffer. + +Custom fringe bitmaps: + +| Symbol | Description | +|--------------------------+-------------| +| [[file:img/dot-error.png]] | Error | +| [[file:img/dot-warning.png]] | warning | +| [[file:img/dot-info.png]] | Info | + +** Compiling +Spacemacs binds a few commands to support compiling a project. + + | Key Binding | Description | + |-------------+--------------------------------| + | ~SPC c c~ | use =helm-make= via projectile | + | ~SPC c C~ | compile | + | ~SPC c d~ | close compilation window | + | ~SPC c k~ | kill compilation | + | ~SPC c m~ | =helm-make= | + | ~SPC c r~ | recompile | + +** Modes +*** Major Mode leader key +Key bindings specific to the current =major mode= start with ~SPC m~. For +convenience a shortcut key called the major mode leader key is set by default on +~​,​~ which saves one precious keystroke. + +It is possible to change the major mode leader key by defining the variable +=dotspacemacs-major-mode-leader-key= in your =~/.spacemacs=. For example to +setup the key on tabulation: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-major-mode-leader-key "") +#+END_SRC + +*** Helm +Spacemacs add =hjkl= navigation to =helm= buffers: + + | Key Binding | Description | + |-------------+------------------------------| + | ~C-h~ | go to next source | + | ~C-H~ | describe key (replace ~C-h~) | + | ~C-j~ | go to previous candidate | + | ~C-k~ | go to next candidate | + | ~C-l~ | same as ~return~ | + +** Emacs Server +Spacemacs starts a server at launch. This server is killed whenever you close +your Emacs windows. + +*** Connecting to the Emacs server +You can open a file in Emacs from the terminal using =emacsclient=. Use +=emacsclient -c= to open the file in Emacs GUI. Use =emacsclient -t= to open the +file in Emacs within the terminal. + +If you want your Linux/OS X system to use Emacs by default for any prompt, you +need to set it in your shell configuration, e.g. =~/.bashrc= or =~/.zshrc=: + +#+BEGIN_SRC sh-mode +export EDITOR="emacsclient -c" +#+END_SRC + +Note that if you're on OS X, you may have to refer to the emacsclient that comes +with your GUI Emacs, e.g.: + +#+BEGIN_SRC sh-mode +export EDITOR="/Applications/Emacs.app/Contents/MacOS/bin/emacsclient -c" +#+END_SRC + +Tip: Remember to use ~:wq~ or ~C-x #~ after you are done editing the file in +Emacs. + +See [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html][Emacs as a Server]] in the official Emacs manual for more details. + +** Keeping the server alive +It is possible to keep the server alive when you close Emacs by setting the +variable =dotspacemacs-persistent-server= to =t= in your =~./spacemacs=. + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-persistent-server t) +#+END_SRC + +When this variable is set to =t=, the only way to quit Emacs /and/ kill the +server is to use the following bindings: + +| Keybinding | Description | +|------------+--------------------------------------------------------------------------| +| ~SPC q q~ | Quit Emacs and kill the server, prompt for changed buffers to save | +| ~SPC q Q~ | Quit Emacs and kill the server, lose all unsaved changes. | +| ~SPC q r~ | Restart both Emacs and the server, prompting to save any changed buffers | +| ~SPC q s~ | Save the buffers, quit Emacs and kill the server | +| ~SPC q z~ | Kill the current frame | + +** Troubleshoot +*** Loading fails +If any errors happen during the loading the mode-line will turn red and the +errors should appear inline in the startup buffer. Spacemacs should still be +usable; if it is not then restart Emacs with =emacs --debug-init= and open a +[[https://github.com/syl20bnr/spacemacs/issues][Github issue]] with the backtrace. + +*** Upgrading/Downgrading Emacs version +To ensure that packages are correctly compiled for the new Emacs version you +installed, be sure to run the interactive command =spacemacs/recompile-elpa= +with ~SPC SPC spacemacs/recompile-elpa~. + +* Achievements +** Issues + +| Achievements | Account | +|---------------------------+--------------| +| [[https://github.com/syl20bnr/spacemacs/pull/100][100th issue (PR)]] | [[https://github.com/danielwuz][danielwuz]] | +| [[https://github.com/syl20bnr/spacemacs/issues/200][200th issue (question)]] | [[https://github.com/justrajdeep][justrajdeep]] | +| [[https://github.com/syl20bnr/spacemacs/pull/300][300th issue (PR)]] | [[https://github.com/danielwuz][danielwuz]] | +| [[https://github.com/syl20bnr/spacemacs/pull/400][400th issue (PR)]] | [[https://github.com/CestDiego][CestDiego]] | +| [[https://github.com/syl20bnr/spacemacs/pull/500][500th issue (PR)]] | [[https://github.com/bjarkevad][bjarkevad]] | +| [[https://github.com/syl20bnr/spacemacs/pull/600][600th issue (PR)]] | [[https://github.com/bjarkevad][bjarkevad]] | +| [[https://github.com/syl20bnr/spacemacs/pull/700][700th issue (enhancement)]] | [[https://github.com/jcpetkovich][jcpetkovich]] | +| [[https://github.com/syl20bnr/spacemacs/pull/800][800th issue (PR)]] | [[https://github.com/laat][ryansroberts]] | +| [[https://github.com/syl20bnr/spacemacs/pull/900][900th issue (PR)]] | [[https://github.com/jcpetkovich][jcpetkovich]] | +| [[https://github.com/syl20bnr/spacemacs/pull/1000][1000th issue (PR)]] | [[https://github.com/tuhdo][tuhdo]] | +| [[https://github.com/syl20bnr/spacemacs/pull/2000][2000th issue (PR)]] | [[https://github.com/IvanMalison][IvanMalison]] | +| [[https://github.com/syl20bnr/spacemacs/pull/3000][3000th issue (issue)]] | [[https://github.com/malchmih][malchmih]] | +| [[https://github.com/syl20bnr/spacemacs/pull/4000][4000th issue (issue)]] | [[https://github.com/icymist][icymist]] | +| [[https://github.com/syl20bnr/spacemacs/pull/5000][5000th issue (issue)]] | [[https://github.com/justbur][justbur]] | +| [[https://github.com/syl20bnr/spacemacs/pull/6000][6000th issue (issue)]] | [[https://github.com/d12frosted][d12frosted]] | +| [[https://github.com/syl20bnr/spacemacs/pull/7000][7000th issue (issue)]] | [[https://github.com/deb0ch][deb0ch]] | + +** Merged Pull Requests + +| Achievements | Account | +|---------------------+----------------| +| [[https://github.com/syl20bnr/spacemacs/pull/228][100th pull request]] | [[https://github.com/bru][bru]] | +| [[https://github.com/syl20bnr/spacemacs/pull/418][200th pull request]] | [[https://github.com/smt][smt]] | +| [[https://github.com/syl20bnr/spacemacs/pull/617][300th pull request]] | [[https://github.com/BrianHicks][BrianHicks]] | +| [[https://github.com/syl20bnr/spacemacs/pull/806][400th pull request]] | [[https://github.com/cpaulik][cpaulik]] | +| [[https://github.com/syl20bnr/spacemacs/pull/993][500th pull request]] | [[https://github.com/tuhdo][tuhdo]] | +| [[https://github.com/syl20bnr/spacemacs/pull/1205][600th pull request]] | [[https://github.com/trishume][trishume]] | +| [[https://github.com/syl20bnr/spacemacs/pull/1995][1000th pull request]] | [[https://github.com/justbur][justbur]] | +| [[https://github.com/syl20bnr/spacemacs/pull/4089][2000th pull request]] | [[https://github.com/channingwalton][channingwalton]] | +| [[https://github.com/syl20bnr/spacemacs/pull/6338][3000th pull request]] | [[https://github.com/darkfeline][darkfeline]] | + +** Stars, forks and watchers + +| Achievements | Account | +|----------------------+-----------------| +| 100th watcher | [[https://github.com/adouzzy][adouzzy]] | +| 100th fork | [[https://github.com/balajisivaraman][balajisivaraman]] | +| 200th fork | [[https://github.com/alcol80][alcol80]] | +| 300th fork | [[https://github.com/mlopes][mlopes]] | +| 2000th fork | [[https://github.com/Gameguykiler][Gameguykiler]] | +| 100th star | [[https://github.com/Jackneill][Jackneill]] | +| 200th star | [[https://github.com/jb55][jb55]] | +| 400th star | [[https://github.com/dbohdan][dbohdan]] | +| 600th star | [[https://github.com/laat][laat]] | +| 700th star | [[https://github.com/kendall][kendall]] | +| 800th star | [[https://github.com/urso][urso]] | +| 900th star | [[https://github.com/luisgerhorst][luisgerhorst]] | +| 1000th star! | [[https://github.com/rashly][rashly]] | +| 2000th star!! | [[https://github.com/stshine][stshine]] | +| 3000th star!!! | [[https://github.com/TheBB][TheBB]] | +| 4000th star!!!! | [[https://github.com/nixmaniack][nixmaniack]] | +| 5000th star!!!!! | [[https://github.com/StreakyCobra][StreakyCobra]] | +| 6000th star!!!!!! | [[https://github.com/NJBS][NJBS]] | +| 7000th star!!!!!!! | [[https://github.com/mukhali][mukhali]] | +| 8000th star!!!!!!!! | [[https://github.com/shsteven][shsteven]] | +| 9000th star!!!!!!!!! | [[https://github.com/deb0ch][deb0ch]] | + +** Gitter chat + +| Achievements | Account | +|---------------------------------+-------------| +| First joiner on the Gitter Chat | [[https://github.com/trishume][trishume]] | +| 1000th joiner | [[https://github.com/gabrielpoca][gabrielpoca]] | + +** First times + +| Achievements | Account | +|---------------------------------+--------------| +| [[https://github.com/syl20bnr/spacemacs/pull/19][First contribution]] | [[https://github.com/trishume][trishume]] | +| [[https://github.com/syl20bnr/spacemacs/commit/e802027d75d0c0aed55539b0da2dfa0df94dfd39][First contribution layer]] | [[https://github.com/trishume][trishume]] | +| [[http://oli.me.uk/2014/11/06/spacemacs-emacs-vim/][First blog article on Spacemacs]] | [[https://github.com/Wolfy87][Wolfy87]] | +| [[https://github.com/syl20bnr/spacemacs/commit/7b44a56263049482ed540ed6815a295633ffe9d1][First contributed banner]] | [[https://github.com/chrisbarrett][chrisbarrett]] | + +** Special Mentions + +| Reason | Account | +|---------------------------------------------------------------------+-----------------| +| Autumnal Cleanup 2015 ([[https://github.com/syl20bnr/spacemacs/wiki/Autumnal-Cleanup-2015][wiki]]) | [[https://github.com/StreakyCobra][StreakyCobra]] | +| Test and debug tools | [[https://github.com/justbur][justbur]] | +| Integration of Ivy | [[https://github.com/justbur][justbur]] | +| Transient States | [[https://github.com/justbur][justbur]] | +| Integration of Persp-mode | [[https://github.com/CestDiego][CestDiego]] | +| Cleanest PR ([[https://github.com/syl20bnr/spacemacs/pull/5545][PR #5545]]) | [[https://github.com/JAremko][JAremko]] | +| Documentation tools and GitHub support | [[https://github.com/JAremko][JAremko]] | +| Code navigation improvement (jump handlers, generalized next error) | [[https://github.com/TheBB][TheBB]] | +| Better support for GUI using an Emacs daemon (after-display macro) | [[https://github.com/travisbhartwell][travisbhartwell]] | + +** Special Titles + +| Achievements | Account | +|-------------------------------------------------+--------------| +| The Gunner (18 PRs in a row) | [[https://github.com/ralesi][ralesi]] | +| The Saint (unlocked the holy-mode) | [[https://github.com/trishume][trishume]] | +| The Artist ([[https://github.com/nashamri/spacemacs-logo][logo]] and [[https://github.com/nashamri/spacemacs-theme][theme]]) | [[https://github.com/nashamri][nashamri]] | +| The Meme Master (doge banner) | [[https://github.com/chrisbarrett][chrisbarrett]] | +| The Helm captain ([[http://tuhdo.github.io/helm-intro.html][helm guide]]) | [[https://github.com/tuhdo][tuhdo]] | +| The Master of the Keys ([[https://github.com/justbur/emacs-which-key][which-key]] and [[https://github.com/justbur/emacs-bind-map][bind-map]]) | [[https://github.com/justbur][justbur]] | +| The PR Patrol Officer | [[https://github.com/robbyoconnor][robbyoconnor]] | +| The Expert in Latin Language ([[https://github.com/syl20bnr/spacemacs/pull/4043][PR]]) | [[https://github.com/vijaykiran][vijaykiran]] | +| The Tiler ([[https://github.com/syl20bnr/spacemacs/pull/4068][eyebrowse integration]]) | [[https://github.com/bmag][bmag]] | +| The Geometer ([[https://github.com/TheBB/spaceline][spaceline]]) | [[https://github.com/TheBB][TheBB]] | +| The Librarian (doc-fmt tool and space-doc mode) | [[https://github.com/JAremko][JAremko]] | + +* Thank you +Thank you Richard for this great piece of software. + +Thank you to all the contributors and the whole Emacs community from core +developers to elisp hackers! diff --git a/doc/FAQ.org b/doc/FAQ.org new file mode 100644 index 0000000..1e3d57c --- /dev/null +++ b/doc/FAQ.org @@ -0,0 +1,582 @@ +#+TITLE: Frequently Asked Questions + +* FAQ :TOC_4_gh:noexport: + - [[#common][Common]] + - [[#which-version-of-spacemacs-am-i-running][Which version of Spacemacs am I running?]] + - [[#what-is-the-official-pronunciation-of-spacemacs][What is the official pronunciation of Spacemacs?]] + - [[#why-do-you-call-this-a-distribution-i-dont-see-any-spacemacs-executable][Why do you call this a "distribution", I don't see any "Spacemacs" executable?]] + - [[#why-are-packages-installed-with-package-install-automatically-deleted-by-spacemacs-when-it-boots][Why are packages installed with =package-install= automatically deleted by Spacemacs when it boots?]] + - [[#how-to-fix-package-download-errors-when-installing-spacemacs-][How to fix package download errors when installing Spacemacs ?]] + - [[#how-to-fix-symbols-value-as-variable-is-void-errors-on-startup][How to fix =Symbol's value as variable is void= errors on startup?]] + - [[#how-to-fix-wrong-type-argument-arrayp-nil-errors-on-startup][How to fix =(wrong-type-argument arrayp nil)= errors on startup?]] + - [[#the-spacemacs-banner-is-ugly-what-should-i-do][The Spacemacs banner is ugly, what should I do?]] + - [[#the-powerline-separators-are-ugly-how-can-i-fix-them][The powerline separators are ugly, how can I fix them?]] + - [[#the-powerline-separators-have-no-anti-aliasing-what-can-i-do][The powerline separators have no anti-aliasing, what can I do?]] + - [[#why-is-after-init-hook-not-executed][Why is after-init-hook not executed?]] + - [[#what-is-the-difference-between-spacemacs-base-and-spacemacs-distributions][What is the difference between =spacemacs-base= and =spacemacs= distributions?]] + - [[#should-i-place-my-settings-in-user-init-or-user-config][Should I place my settings in =user-init= or =user-config=?]] + - [[#why-do-some-of-my-org-related-settings-cause-problems][Why do some of my =org=-related settings cause problems?]] + - [[#why-is-spacemacs-hanging-on-startup][Why is Spacemacs hanging on startup?]] + - [[#why-does-helm-m-x-spc-spc-not-accept-the-prefix-argument][Why does =helm-M-x= (~SPC SPC~) not accept the prefix argument?]] + - [[#why-does-my-color-theme-not-render-correctly-in-terminal-mode][Why does my color theme not render correctly in terminal mode?]] + - [[#typing-quickly-fd-takes-me-out-of-insert-state-what-is-going-on][Typing quickly =fd= takes me out of =insert state=. What is going on?]] + - [[#why-do-i-get-files-starting-with-][Why do I get files starting with .#?]] + - [[#why-do-i-get-4m-characters-inside-ansi-term][Why do I get '4m' characters inside ansi-term?]] + - [[#why-are-my-font-settings-not-being-respected][Why are my font settings not being respected?]] + - [[#why-am-i-getting-a-message-about-environment-variables-on-startup][Why am I getting a message about environment variables on startup?]] + - [[#how-do-i][How do I:]] + - [[#install-a-package-not-provided-by-a-layer][Install a package not provided by a layer?]] + - [[#disable-a-package-completely][Disable a package completely?]] + - [[#disable-a-package-only-for-a-specific-major-mode][Disable a package only for a specific major-mode?]] + - [[#disable-company-for-a-specific-major-mode][Disable company for a specific major-mode?]] + - [[#change-special-buffer-rules][Change special buffer rules?]] + - [[#enable-navigation-by-visual-lines][Enable navigation by visual lines?]] + - [[#disable-evilification-of-a-mode][Disable evilification of a mode?]] + - [[#include-underscores-in-word-motions][Include underscores in word motions?]] + - [[#setup-path][Setup =$PATH=?]] + - [[#change-or-define-an-alias-for-a-leader-key][Change or define an alias for a leader key?]] + - [[#restore-the-sentence-delimiter-to-two-spaces][Restore the sentence delimiter to two spaces?]] + - [[#prevent-the-visual-selection-overriding-my-system-clipboard][Prevent the visual selection overriding my system clipboard?]] + - [[#make-spell-checking-support-curly-quotes-or-any-other-character][Make spell-checking support curly quotes (or any other character)?]] + - [[#use-spacemacs-as-the-editor-for-git-commits][Use Spacemacs as the =$EDITOR= for git commits?]] + - [[#try-spacemacs-without-modifying-my-existing-emacs-configuration][Try Spacemacs without modifying my existing Emacs configuration?]] + - [[#make-copypaste-working-with-the-mouse-in-x11-terminals][Make copy/paste working with the mouse in X11 terminals?]] + - [[#use-helm-ag-to-search-only-in-files-of-a-certain-type][Use =helm-ag= to search only in files of a certain type?]] + - [[#modify-spacemacs-documentation-look-space-doc-mode][Modify spacemacs documentation look (space-doc-mode)]] + - [[#remap-paste-key-to-be-able-to-paste-copied-text-multiple-times][Remap paste key to be able to paste copied text multiple times]] + - [[#windows][Windows]] + - [[#why-do-the-fonts-look-crappy-on-windows][Why do the fonts look crappy on Windows?]] + - [[#why-is-there-no-spacemacs-logo-in-the-startup-buffer][Why is there no Spacemacs logo in the startup buffer?]] + - [[#why-are-all-packages-unavailable][Why are all packages unavailable?]] + - [[#the-powerline-isnt-shown-correctly-when-spacemacs-is-used-within-putty][The powerline isn't shown correctly when Spacemacs is used within =PuTTY=]] + +* Common +** Which version of Spacemacs am I running? +The version is displayed on the upper right corner of the loading screen. You +may also just type ~SPC f e v~. + +** What is the official pronunciation of Spacemacs? +As it is written, that is _space_ then _macs_. + +** Why do you call this a "distribution", I don't see any "Spacemacs" executable? +Although we could do it we don't package Emacs with Spacemacs. We allow users to +choose whatever build of Emacs they want that works with their OS, this is more +flexible and it saves use tons of issues. Spacemacs is more than a configuration +of Emacs it comes with advanced feature, concepts and tooling. Roughly, think of +it as a Linux distribution where we would ask people to install the kernel first +and then fetch somehow the actual code to get the distribution. +Note that some Linux distributions may start to create packages for Spacemacs, +they are unofficial packages, we will never package Emacs with Spacemacs. + +** Why are packages installed with =package-install= automatically deleted by Spacemacs when it boots? +By default Spacemacs will keep only the packages that you use (i.e. the packages +belonging to a layer explicitly listed in the variable +=dotspacemacs-configuration-layers=). + +To install packages that does not belong to any Spacemacs layers, you can: + +- use the variable =dotspacemacs-additional-packages=. +- or create a configuration layer configuring the package and add this layer to + =dotspacemacs-configuration-layers= +- or set the variable =dotspacemacs-install-packages= to =used-but-keep-unused= + which will prevent Spacemacs from removing the packages you installed + manually. + +To create a new configuration layer see the [[file:QUICK_START.org][quick start guide]] for more info. + +** How to fix package download errors when installing Spacemacs ? +Since 0.105.0 HTTPS protocol is used by default to download packages. If your +environment does not allow HTTPS to reach ELPA repositories then you can start +Emacs with the =--insecure= argument for force the usage of HTTP non secured +protocol. You can set the variable =dotspacemacs-elpa-https= to =nil= in your +dotfile to remove the need to start Emacs with =--insecure= argument. + +** How to fix =Symbol's value as variable is void= errors on startup? +If Emacs reports an error that the symbol =closed= or =-= is unbound as a +variable, it is probably because you are using HTTPS to download packages, but +you shouldn't be. Try deleting your packages (the =.emacs.d/elpa= folder), and +restart Emacs without HTTPS to download the packages again. There are two ways +to do this: + +- Run Emacs with the =--insecure= command line argument: =emacs --insecure=. You + will have to do this again the next time you update your packages. +- Set the variable =dotspacemacs-elpa-https= to =nil= in your dotfile. This has + the same effect as =--insecure=, but is persistent. + +** How to fix =(wrong-type-argument arrayp nil)= errors on startup? +This is most likely caused by a corrupted package archive. Try deleting your +=~/.emacs.d/elpa/archives/= folder and restart Emacs. + +** The Spacemacs banner is ugly, what should I do? +Install the default font supported by Spacemacs or choose a fixed width font. +More information in the font section of the [[file:DOCUMENTATION.org][documentation]]. + +** The powerline separators are ugly, how can I fix them? +Use the property =:powerline-scale= of the variable =dotspacemacs-default-font=. +See font section of the [[file:DOCUMENTATION.org][documentation]] for more details. + +** The powerline separators have no anti-aliasing, what can I do? +Emacs powerline uses XMP images to draw the separators in a graphical +environment. You can have anti-aliasing if you use the =utf8= separator. Note +that by default the =utf8= separator is used in a terminal. See the powerline +section in the font section of the [[file:DOCUMENTATION.org][documentation]]. + +** Why is after-init-hook not executed? +Don't launch Spacemacs with =emacs -q -l init.el= command. This command will run +the hooked functions in =after-init-hook= before the evaluation of the passed +=-l init.el= file. + +** What is the difference between =spacemacs-base= and =spacemacs= distributions? +The =distribution= concept was introduced in 0.104.x. You can now choose between +two distributions =spacemacs= or =spacemacs-base=. =spacemacs-base= contains +only a minimal set of packages; whereas =spacemacs= is the full Spacemacs +experience. + +Set the distribution with =dotspacemacs-distribution= variable. The default is +=spacemacs=. For more information as to what is included, check out the +=packages.el= file in the respective folders in the =+distributions= folder of +the =layers/= directory. + +** Should I place my settings in =user-init= or =user-config=? +Any variable that layer configuration code will *read* and *act on* must be set +in =user-init=, and any variable that Spacemacs explicitly sets but you wish to +*override* must be set in =user-config=. + +Anything that isn't just setting a variable should 99% be in =user-config=. + +** Why do some of my =org=-related settings cause problems? +Since version 0.104, spacemacs uses the =org= version from the org ELPA +repository instead of the one shipped with emacs. Then, any =org= related code +should not be loaded before =dotspacemacs/user-config=, otherwise both versions +will be loaded and will conflict. + +Because of autoloading, calling to =org= functions will trigger the loading up +of the =org= shipped with emacs wich will induce conflicts. One way to avoid +conflict is to wrap your =org= config code in a =with-eval-after-load= block +like this: + +#+BEGIN_SRC emacs-lisp +(with-eval-after-load 'org + ;; here goes your Org config :) + ;; .... + ) +#+END_SRC + +** Why is Spacemacs hanging on startup? +This is probably related to Helm using Tramp which tries to figure out some +SSH/DNS settings at startup. The root cause is probably your ISP redirecting +non-existing addresses to their own servers. + +Try using these settings in the ~user-init~ function in your ~.spacemacs~ +configuration: + +#+BEGIN_SRC emacs-lisp +(setq tramp-ssh-controlmaster-options + "-o ControlMaster=auto -o ControlPath='tramp.%%C' -o ControlPersist=no") +#+END_SRC + +See [[https://github.com/syl20bnr/spacemacs/issues/3422#issuecomment-148919047][issue #3422]] and [[https://github.com/emacs-helm/helm/issues/1000#issuecomment-119487649][helm issue #1000]] for details. If for any reason this code is +not working, you can try to put these settings directly in =~/.ssh/config=: + +#+BEGIN_SRC ssh +Host * +ControlMaster auto +ControlPath ~/.ssh/master -%r@%h:%p +ControlPersist = no +#+END_SRC + +** Why does =helm-M-x= (~SPC SPC~) not accept the prefix argument? +If you try to run =helm-M-x= with the prefix argument (i.e. ~SPC u SPC SPC~) it +will fail with this message: + +#+BEGIN_VERSE +Error: Specifying a prefix arg before calling helm-M-x +#+END_VERSE + +Instead, call =helm-M-x= first, select the command you want to run, and press +~C-u~ before pressing ~RETURN~. For instance: ~SPC SPC org-reload C-u RET~ + +** Why does my color theme not render correctly in terminal mode? +In the terminal version of Emacs, color themes will not render correctly as +colors are rendered by the terminal and not by emacs. You will probably have to +change your terminal color palette. More explanations can be found on +[[https://github.com/sellout/emacs-color-theme-solarized#important-note-for-terminal-users][emacs-color-theme-solarized webpage]]. + +** Typing quickly =fd= takes me out of =insert state=. What is going on? +This is a feature of Spacemacs, enabling you to easily escape from a lot of +situations, like escaping from =insert state= to =normal state=. + +The sequence of characters used can be customized. See the [[http://spacemacs.org/doc/DOCUMENTATION.html#orgheadline78][documentation]] for +more information. + +If you don't like this feature, you can deactivate it by adding =evil-escape= to +=dotspacemacs-excluded-packages= in your init file. + +** Why do I get files starting with .#? +These are lockfiles, created by Emacs to prevent editing conflicts which occur +when the same file is edited simultaneously by two different programs. To +disable this behaviour: + +#+BEGIN_SRC emacs-lisp +(setq create-lockfiles nil) +#+END_SRC + +** Why do I get '4m' characters inside ansi-term? +Ansi-term only has a subset of capabilities supported by xterm256. Your shell +(e.g. fish shell) might ignore =$TERMINFO= information and require you to set +the =~/.terminfo= yourself. + +#+BEGIN_SRC fish +tic -o ~/.terminfo $TERMINFO/e/eterm-color.ti +#+END_SRC + +Note that =eterm-color.ti= may be at a different location, to find out the exact +location you may try to use =locate=: + +#+BEGIN_SRC fish +locate eterm-color.ti +#+END_SRC + +** Why are my font settings not being respected? +The settings of =dotspacemacs-default-font= (such as size, weight, etc.) will +only be applied if the name of the font exists on your system. Check to make +sure that this is the case. If Spacemacs can't find the font, there should be a +warning to this effect in the =*Messages*= buffer. + +** Why am I getting a message about environment variables on startup? +Spacemacs uses the =exec-path-from-shell= package to set the executable path +when Emacs starts up. This is done by launching a shell and reading the values +of variables such as =PATH= and =MANPATH= from it. If your shell configuration +sets the values of these variables inconsistently, this could be problematic. It +is recommended to set such variables in shell configuration files that are +sourced unconditionally, such as =.profile=, =.bash_profile= or =.zshenv=, as +opposed to files that are sourced only for interactive shells, such as =.bashrc= +or =.zshrc=. If you are willing to neglect this advice, you may disable the +warning, e.g. from =dotspacemacs/user-init=: + +#+BEGIN_SRC emacs-lisp + (setq exec-path-from-shell-check-startup-files nil) +#+END_SRC + +You can also disable this feature entirely by adding =exec-path-from-shell= to +the list =dotspacemacs-excluded-packages= if you prefer setting =exec-path= +yourself. + +* How do I: +** Install a package not provided by a layer? +Spacemacs provides a variable in the =dotspacemacs/layers= function in +=.spacemacs= called =dotspacemacs-additional-packages=. Just add a package name +to the list and it will be installed when you reload your configuration with +~SPC f e R~, or at the next Spacemacs launch. + +** Disable a package completely? +To completely disable a package and effectively uninstalling it even if it is +part of your used layers, look for the variable =dotspacemacs-excluded-packages= +in your dotfile and add the package name to it: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-excluded-packages '(package1 package2 ...)) +#+END_SRC + +** Disable a package only for a specific major-mode? +This is done by removing the hook added by Spacemacs. For example to remove +=flycheck= support in python buffers, look for the function +=dotspacemacs/user-config= in your dotfile and add the following code: + +#+BEGIN_SRC emacs-lisp +(remove-hook 'python-mode-hook 'flycheck-mode) +#+END_SRC + +*Hint* to know the name of the major-mode of the current buffer press: ~SPC h d +v major-mode RET~ + +** Disable company for a specific major-mode? +It may be handy to disable =company= for a given mode if you plan on configuring +=auto-complete= instead. One easy way to do it is to use the macro +=spacemacs|disable-company= in the function =dotspacemacs/user-config= of your +dotfile. The following snippet disables company for =python-mode=: + +#+BEGIN_SRC emacs-lisp +(spacemacs|disable-company python-mode) +#+END_SRC + +** Change special buffer rules? +To change the way spacemacs marks buffers as useless, you can customize +=spacemacs-useless-buffers-regexp= which marks buffers matching the regexp as +useless. The variable =spacemacs-useful-buffers-regexp= marks buffers matching +the regexp as useful buffers. Both can be customized the same way. + +Examples: +#+BEGIN_SRC emacs-lisp +;; Only mark helm buffers as useless +(setq spacemacs-useless-buffers-regexp '("\\*helm\.\+\\*")) + +;; Marking the *Messages* buffer as useful +(push "\\*Messages\\*" spacemacs-useful-buffers-regexp) +#+END_SRC + +** Enable navigation by visual lines? +Add the following snippet to your =dotspacemacs/user-config= function: + +#+BEGIN_SRC emacs-lisp +;; Make evil-mode up/down operate in screen lines instead of logical lines +(define-key evil-motion-state-map "j" 'evil-next-visual-line) +(define-key evil-motion-state-map "k" 'evil-previous-visual-line) +;; Also in visual mode +(define-key evil-visual-state-map "j" 'evil-next-visual-line) +(define-key evil-visual-state-map "k" 'evil-previous-visual-line) +#+END_SRC + +** Disable evilification of a mode? +You can ensure a mode opens in emacs state by using =evil-set-initial-state=. + +#+BEGIN_SRC emacs-lisp +(evil-set-initial-state 'magit-status-mode 'emacs) +#+END_SRC + +You can also do this using buffer name regular expressions. E.g. for magit, +which has a number of different major modes, you can catch them all with + +#+BEGIN_SRC emacs-lisp +(push '("*magit" . emacs) evil-buffer-regexps) +#+END_SRC + +This should make all original magit bindings work in the major modes in +question. To enable the leader key in this case, you may have to define a +binding in the mode's map, e.g. for =magit-status-mode=, + +#+BEGIN_SRC emacs-lisp +(with-eval-after-load 'magit + (define-key magit-status-mode-map + (kbd dotspacemacs-leader-key) spacemacs-default-map)) +#+END_SRC + +** Include underscores in word motions? +You can modify the syntax table of the mode in question. To do so you can +include this on your =dotspacemacs/user-config=. + +#+BEGIN_SRC emacs-lisp +;; For python +(add-hook 'python-mode-hook #'(lambda () (modify-syntax-entry ?_ "w"))) +;; For ruby +(add-hook 'ruby-mode-hook #'(lambda () (modify-syntax-entry ?_ "w"))) +;; For Javascript +(add-hook 'js2-mode-hook #'(lambda () (modify-syntax-entry ?_ "w"))) +#+END_SRC + +** Setup =$PATH=? +Some layers require certain tools to be available on your =$PATH=. This means +that your =$PATH= must contain the installation paths for those tools. For +example, if you have installed some tools to =~/.local/bin= and want them to be +available in Spacemacs, you need to add =~/.local/bin= to your =$PATH=. + +Users of =bash=, =zsh=, =sh= and other similar shells should add following line +to their =.bashrc= (=.zshrc=, =.profile= or your shell's equivalent). Note that +the =export= part is very important. + +#+BEGIN_SRC sh +export PATH=~/.local/bin:$PATH +#+END_SRC + +Users of =fish= should add following line to their =config.fish= file (should be +in =$XDG_CONFIG_HOME= or its default value - =~/.config/fish=). Note that =-x= +part is very important. + +#+BEGIN_SRC fish +set -x PATH ~/.local/bin $PATH +#+END_SRC + +Users of other shells should consult its documentation on how to setup =$PATH= +variable (with export to environment). + +So now, =~/.local/bin= should be available in your =$PATH=. You can verify this +by calling =echo $PATH=. But you also should verify that =$PATH= is set properly +in your environment. To do so call following command in your terminal. + +#+BEGIN_SRC sh +env | grep "PATH" +#+END_SRC + +This is the value that will be used by Emacs. So it must contain =~/.local/bin=. + +After that you can run Spacemacs and check that it properly gets the value of +=$PATH= by running =M-: (getenv "PATH")=. + +Note that having =~/.local/bin= in your =$PATH= also means that it's possible to +run terminal and call tools from =~/.local/bin= without specifying their full +path. Under certain conditions you might want to avoid modifying your =$PATH=. +In that case you have the option of updating the value of =exec-path= in the +=dotspacemacs/user-config= function of your =.spacemacs= file. + +#+BEGIN_SRC emacs-lisp +(add-to-list 'exec-path "~/.local/bin/") +#+END_SRC + +** Change or define an alias for a leader key? +It is possible to change a leader key by binding its keymap to another sequence. +For instance, if you want to switch ~SPC S~ (spelling) with ~SPC d~ (used by +dash) to make the former easier to reach, you can use: + +#+BEGIN_SRC emacs-lisp +(defun dear-leader/swap-keys (key1 key2) + (let ((map1 (lookup-key spacemacs-default-map key1)) + (map2 (lookup-key spacemacs-default-map key2))) + (spacemacs/set-leader-keys key1 map2 key2 map1))) +(dear-leader/swap-keys "S" "d") +#+END_SRC + +If you want to define your own alias, like using ~SPC é~ (because it's a not +used key on your keyboard-layout for instance) for accessing ~SPC w~ (windows +management), you can use this: + +#+BEGIN_SRC emacs-lisp +(defun dear-leader/alias-of (key1 key2) + (let ((map (lookup-key spacemacs-default-map key2))) + (spacemacs/set-leader-keys key1 map))) +(dear-leader/alias-of "é" "w") +#+END_SRC + +** Restore the sentence delimiter to two spaces? +To restore the sentence delimiter to two spaces, add the following code to the +=dotspacemacs/user-init= function of your =.spacemacs=: + +#+BEGIN_SRC emacs-lisp +(setq sentence-end-double-space t) +#+END_SRC + +** Prevent the visual selection overriding my system clipboard? +On some operating systems, there is only one clipboard for both *copied* and +*selected* texts. This has the consequence that visual *selection* – which +should normally be saved to the /PRIMARY/ clipboard – overrides the /SYSTEM/ +clipboard, where normally goes the *copied* text. This can be corrected by +adding the following code to the =dotspacemacs/user-config= of your +=.spacemacs=: + +#+BEGIN_SRC emacs-lisp +(fset 'evil-visual-update-x-selection 'ignore) +#+END_SRC + +** Make spell-checking support curly quotes (or any other character)? +To have spell-checking support curly quotes (or any other character), you need +to add a new entry to =ispell-local-dictionary-alist=, by adding for example the +following code in the =dotspacemacs/user-config= of your =.spacemacs=: + +#+BEGIN_SRC emacs-lisp +(add-to-list 'ispell-local-dictionary-alist + (quote ("my_english" "[[:alpha:]]" "[^[:alpha:]]" "['’]" t ("-d" "en_US") nil utf-8))) +#+END_SRC + +You can then add any regular expression you want in the fourth argument (i.e. +add a symbol within =['’]=) to make it supported. Consult the help of +=ispell-dictionary-alist= for more details about the possibilities. + +You finally have to set =my_english= as your =ispell-local-dictionary= in order +to use the dictionary supporting your newly added characters. + +** Use Spacemacs as the =$EDITOR= for git commits? +Spacemacs can be used as the =$EDITOR= (or =$GIT_EDITOR=) for editing git +commits messages. To enable this you have to add the following line to your +=dotspacemacs/user-config=: + +#+BEGIN_SRC emacs-lisp +(global-git-commit-mode t) +#+END_SRC + +** Try Spacemacs without modifying my existing Emacs configuration? +Emacs' ability to use any directory as the home for launching it allows us to +try out Spacemacs (or any other Emacs configuration we desire) without having to +go through the trouble of backing up our =~/.emacs.d= directory and then cloning +the new configuration. This can be achieved easily using the following steps: + +#+BEGIN_SRC sh +mkdir ~/spacemacs +git clone git@github.com:syl20bnr/spacemacs.git ~/spacemacs/.emacs.d +HOME=~/spacemacs emacs +#+END_SRC + +If you're on Fish shell, you will need to modify the last command to: +=env HOME=$HOME/spacemacs emacs= + +** Make copy/paste working with the mouse in X11 terminals? +It is possible to disable the mouse support in X11 terminals in order to +enable copying/pasting with the mouse. You need to add this line to your +=dotspacemacs/user-config=: + +#+begin_src emacs-lisp +(xterm-mouse-mode -1) +#+end_src + +** Use =helm-ag= to search only in files of a certain type? +It is possible to restrict the scope of =helm-ag= to search only expressions in +some specified file types. There are two ways of doing this, both by appending +some expressions to the search input: + +- By using a regexp with =-G=, for instance =-G\.el$= will look for all files + ending with =.el= which are emacs-lisp files. + +- By using a flag like =--python= which should be self-explaining. The list of + available flags colud be accessed from terminal with: + + #+begin_src shell + ag --list-file-types + #+end_src + +This is possible because =helm-ag= is treating the search input as command-line +arguments of the =ag= program. + +** Modify spacemacs documentation look (space-doc-mode) +You can modify the list of visual enhancements applied by the =space-doc-mode=: +#+BEGIN_SRC emacs-lisp +(setq spacemacs-space-doc-modificators + '(center-buffer-mode + org-indent-mode + view-mode + hide-line-numbers + alternative-emphasis + alternative-tags-look + link-protocol + org-block-line-face-remap + org-kbd-face-remap + resize-inline-images)) +#+END_SRC +By default only =center-buffer-mode= is disabled. +Both =space-doc-mode= and =center-buffer-mode= can be customized +with "Easy Customization Interface". + +** Remap paste key to be able to paste copied text multiple times +In vim and evil, pasting over a text would cause it to be copied, hence making it impossible to paste +the same text multiple times. + +To fix this, add the following snippet to your ~user-config~: +#+BEGIN_SRC emacs-lisp +(defun evil-paste-after-from-0 () + (interactive) + (let ((evil-this-register ?0)) + (call-interactively 'evil-paste-after))) + +(define-key evil-visual-state-map "p" 'evil-paste-after-from-0) +#+END_SRC + +* Windows +** Why do the fonts look crappy on Windows? +You can install [[https://code.google.com/archive/p/gdipp/][GDIPP]] (simplest) or [[https://code.google.com/p/mactype/][MacType]] (more complete) on Windows to get +very nice looking fonts. It is also recommended to disable smooth scrolling on +Windows. + +** Why is there no Spacemacs logo in the startup buffer? +A GUI build of emacs supporting image display is required. You can follow the +instructions [[http://stackoverflow.com/questions/2650041/emacs-under-windows-and-png-files][here]]. Alternatively you can download binaries of emacs with image +support included such as [[http://emacsbinw64.sourceforge.net/][this one]]. + +** Why are all packages unavailable? +Check if your Emacs has HTTPS capabilities by doing =M-:= and then: + +#+BEGIN_SRC emacs-lisp + (gnutls-available-p) +#+END_SRC + +If this returns =nil=, you need to install the GnuTLS DLL file in the same +directory as Emacs. See [[https://www.gnu.org/software/emacs/manual/html_mono/emacs-gnutls.html#Help-For-Users][here]] for instructions. + +** The powerline isn't shown correctly when Spacemacs is used within =PuTTY= +You can follow [[http://mschulte.nl/posts/using-powerline-in-PuTTY.html][this explanation]] explaining how to correct this. diff --git a/doc/LAYERS.org b/doc/LAYERS.org new file mode 100644 index 0000000..9b58f27 --- /dev/null +++ b/doc/LAYERS.org @@ -0,0 +1,623 @@ +#+TITLE: Configuration layers + +* Configuration Layers :TOC_4_gh:noexport: + - [[#introduction][Introduction]] + - [[#nomenclature][Nomenclature]] + - [[#the-emacs-loading-process][The Emacs loading process]] + - [[#emacs-lisp-files][Emacs Lisp files]] + - [[#loading-a-file][Loading a file]] + - [[#features][Features]] + - [[#the-load-path][The load path]] + - [[#auto-loading][Auto-loading]] + - [[#eval-after-load][Eval after load]] + - [[#use-package][Use-package]] + - [[#anatomy-of-a-layer][Anatomy of a layer]] + - [[#layersel][layers.el]] + - [[#packagesel][packages.el]] + - [[#funcsel][funcs.el]] + - [[#configel][config.el]] + - [[#keybindingsel][keybindings.el]] + - [[#the-spacemacs-loading-process][The Spacemacs loading process]] + - [[#case-study-auto-completion][Case study: auto-completion]] + - [[#layer-tips-and-tricks][Layer tips and tricks]] + - [[#cross-dependencies][Cross-dependencies]] + - [[#use-package-1][Use-package]] + - [[#use-package-hooks][Use-package hooks]] + - [[#best-practices][Best practices]] + - [[#package-ownership][Package ownership]] + - [[#localize-your-configuration][Localize your configuration]] + - [[#load-ordering][Load ordering]] + - [[#no-require][No require]] + - [[#auto-load-everything][Auto-load everything]] + - [[#how-do-i--idiomatically][How do I ... idiomatically?]] + - [[#setup-auto-completion-for-a-major-mode][Setup auto-completion for a major mode]] + +* Introduction +This document is intended as a tutorial for users who are interested in writing +their first configuration layer, whether for private use or for contributing +upstream. It should help clear up some confusion regarding how layers work and +how Spacemacs (and Emacs) loads packages. + +* Nomenclature +Layers and packages. What gives? + +- Package :: A set of Emacs Lisp files that, taken together, provide some + feature. Packages may be available on a package repository, such as ELPA or + MELPA or on a third-party service provider (such as github) or even + locally on the disk. +- Layer :: A collected unit of configuration that can be enabled (or disabled) + in Spacemacs. A layer typically brings together one or more packages, as + well as the glue configuration code required to make them play well with + each other and Spacemacs in general. + +Before writing a layer, it is helpful to consider what you are trying to +achieve. Is there a package that provides the functionality you are after, and +you want to integrate it in Spacemacs? If yes, you should write a layer. Are you +trying to implement a new feature that would be useful for the Emacs community +at large? In that case, consider whether it wouldn't be more appropriate to +write a package first, and then a layer that uses your package. + +* The Emacs loading process +To understand how to best implement a layer, we have to investigate how Emacs +loads code. + +** Emacs Lisp files +Emacs Lisp files contains code that can be evaluated. When evaluated, the +functions, macros and modes defined in that file become available to the current +Emacs session. Henceforth, this will be termed as /loading/ a file. + +One major problem is to ensure that all the correct files are loaded, and in the +proper order. Another issue is to ensure that not too many files are loaded +immediately. This causes startup to take too long. Instead, we want to make sure +that files are loaded only as needed, and not all at once. + +How is this done in Emacs, and how is it done in Spacemacs? + +*** Loading a file +The simplest way to load a file is to call =load-file=. + +#+begin_src emacs-lisp +(load-file "~/elisp/foo.el") +#+end_src + +This is as primitive as it comes. The path must be exact, and it does not have +to be in the Emacs load path (we'll get to that later). It will not look for a +byte-compiled =.elc= file. It will simply load exactly what you tell it to. + +** Features +A better way to load what you need is to use /features/. A feature is a symbol +that typically has the same name as the file it resides in. Let us say you have +the following contents in a file called =my-feature.el=. + +#+begin_src emacs-lisp +;; Your code goes here ... + +(provide 'my-feature) +#+end_src + +To have Emacs load this file, call =require=, as such: + +#+begin_src emacs-lisp +(require 'my-feature) +#+end_src + +This checks whether the feature =my-feature= has already been loaded. If not, it +looks for a file called =my-feature.el=, =my-feature.elc= or some such. If it +finds such a file, it will load it. When the call to =provide= is evaluated, the +feature is added to the list of loaded features, so that subsequent calls to +=require= will do nothing. + +This will cause an error if no such file can be found. + +The file =my-feature.el= may very well contain other calls to =require=, and in +fact this is quite a common way to ensure that dependencies are loaded before +your code runs. + +Package authors should use this technique to make sure that dependencies are +loaded before their code runs. + +*** The load path +When loaded using =require=, Emacs looks for files in its /load path/. This is +nothing more than a list of paths where elisp files can be found, and you can +inspect it through ~SPC h d v load-path~ in Spacemacs. To add to the load path, +simply push to this list, e.g. + +#+begin_src emacs-lisp +(push "/some/path/" load-path) +#+end_src + +** Auto-loading +Calling =require= is nothing more than a glorified way of calling =load-file=. +It solves the problem of ensuring that files are loaded in the correct order, +and to some degree it solved the problem of where to find the files on disk but +a long list of calls to =require= at startup would still cause Emacs to take for +ever to load. + +Emacs uses auto-loading to solve this problem. When a function is registered as +auto-loading, an "empty" definition is provided. When that function is called, +the file that provides the function is immediately loaded (along with all its +required features). Finally, the "empty" function is substituted with the real +one and called normally. The end user will see only a slight delay when first +calling the function, while subsequent calls to that function (or any other +function loaded as part of the same procedure) will be as quick as normal. + +To register a function as auto-loadable, we call =autoload=: + +#+begin_src emacs-lisp +(autoload 'some-function "some-file") +#+end_src + +This instructs Emacs that whenever =some-function= is called, load +=some-file.el= first, and then proceed. + +After evaluating the above code, you can try to inspect =some-function= by doing +~SPC h d f some-function~. It will say it's an auto-loaded function, and that +nothing else is known about it until it is loaded. The call to =autoload= can +optionally include more information, such as a doc-string, whether the function +can be called interactively, and so on. This provides more information to the +end-user without her having to actually load the file first. + +Open your =elpa= directory, go to =helm= and look at the file +=helm-autoloads.el=. This provides all the auto-loads for all the files in Helm. +However, this file is not written by hand. Instead, it is automatically +generated from "magic" comments in the source code of Helm. They look like this: + +#+begin_src emacs-lisp +;;;###autoload +(defun my-function () + ;; Source code... + ) +#+end_src + +The magic comment =;;;###autoload= instructs Emacs that the following definition +should be auto-loaded. This automatically generates an appropriate call to +=autoload=. + +Things that can be auto-loaded generally involve anything "definable", such as +functions, macros, major or minor modes, groups, classes, and so on. + +Magic comments also work on other things, such as variable definitions +(=defvar=), but in that case, the definition is just copied verbatim into the +auto-loading file. For example, this code will load Helm on startup, long before +your file is actually evaluated, probably not what was intended: + +#+begin_src emacs-lisp +;;;###autoload +(require 'helm) +#+end_src + +It is the responsibility of the package authors to ensure that their package can +be appropriately auto-loaded, and most packages do this quite well. + +Spacemacs makes thorough use of auto-loading. Almost everything in Spacemacs is +loaded when needed instead of right away. + +** Eval after load +Often, we will want to configure packages after loading them. We may want to set +some variables or call some functions. This is trivial with =require=, because +it loads immediately, but it can be tricky with autoloading, because the +configuration code must also be deferred. + +Emacs offers =with-eval-after-load= for this purpose. It can be used like this: + +#+begin_src emacs-lisp +(with-eval-after-load 'helm + ;; Code + ) +#+end_src + +This arranges for the relevant code to be executed after Helm is loaded (using +either =require= or an autoload), or if Helm is already loaded, the code is +executed immediately. + +Since =with-eval-after-load= is a macro and not a function, its argument does +not have to be quoted. + +** Use-package +For /end users/ who are trying to put together an efficient Emacs configuration, +there is a very useful /package/ called =use-package= that provides a macro +which is /also/ called =use-package= which does a very good job of streamlining +the whole process of loading packages. + +The aspiring layer author is recommended to have a look at the =use-package= +[[https://github.com/jwiegley/use-package][documentation]]. Some examples follow. + +#+begin_src emacs-lisp +(use-package helm) +#+end_src + +This simply loads Helm. It is essentially equivalent to =(require 'helm)=. + +#+begin_src emacs-lisp +(use-package helm + :defer t) +#+end_src + +This defers the loading of Helm using the auto-load facility and the auto-load +commands provided by the Helm source code. It is, in fact, a no-op. + +#+begin_src emacs-lisp +(use-package helm + :defer t + :init + ;; Code to execute before Helm is loaded + :config + ;; Code to execute after Helm is loaded + ) +#+end_src + +This form includes code to execute before and after Helm is loaded. The =:init= +section can be executed immediately, but since Helm is deferred, the =:config= +section is not executed until after loading, if ever. It is essentially +equivalent to simply running the =:init= block, and then adding the =:config= +block in an =with-eval-after-load=. + +#+begin_src emacs-lisp +(use-package helm + :commands (helm-find-files helm-M-x)) +#+end_src + +This creates auto-load references for additional commands, if you find that the +package author has been slacking. + +#+begin_src emacs-lisp +(use-package ruby-mode + :mode "\\.rb\\'") +#+end_src + +For packages that provide major modes, you can associate file extensions to that +mode by using the =:mode= keyword. This adds an entry to =auto-mode-alist= and +an auto-load for =ruby-mode=. Typically this is not required, as =ruby-mode= +should already be auto-loadable, and the package should associate Ruby files +with itself already. + +Use-package supports heaps of useful keywords. Look at the [[https://github.com/jwiegley/use-package][documentation]] for +more. + +* Anatomy of a layer +A layer is simply a folder somewhere in Spacemacs' layer search path that +usually contains these files (listed in loading order). + +- =layers.el= :: declare additional layers +- =packages.el= :: the packages list and configuration +- =funcs.el= :: all functions used in the layer should be declared here +- =config.el= :: layer specific configuration +- =keybindings.el= :: general key bindings + +Additionally, for each local package (see the next section), there should be a +folder =/local//= containing the source code for that package. +Before initializing that package, Spacemacs will add this folder to the load +path for you. + +** layers.el +This file is the first file to be loaded and this is the place where addtional +layers can be declared. + +For instance is layer A depends on some functionality of layer B then in the +file =layers.el= of layer A we can add: + +#+begin_src emacs-lisp +(configuration-layer/declare-layer 'B) +#+end_src + +The effect is that B is considered a used layer and will be loaded as if it +was added to =dotspacemacs-configuration-layers= variables. + +** packages.el +It contains this list of packages of the layer and the actual configuration for +the packages included in the layer. + +This file is loaded after =layers.el=. + +It must define a variable called =-packages=, which should be a list of +all the packages that this layer needs. Some valid package specifications are +as follows: + +#+begin_src emacs-lisp +(defconst mylayer-packages + '( + ;; Get the package from MELPA, ELPA, etc. + some-package + (some-package :location elpa) + + ;; A local package + (some-package :location local) + + ;; A package recipe + (some-package :location (recipe + :fetcher github + :repo "some/repo")) + + ;; An excluded package + (some-package :excluded t) + )) +#+end_src + +The =:location= attribute specifies where the package may be found. Spacemacs +currently supports packages on ELPA compliant repositories, local packages and +MELPA recipes (through the Quelpa package). Local packages should reside at =/local//=. For information about recipes see the [[https://github.com/milkypostman/melpa#recipe-format][MELPA documentation]]. + +Packages may be /excluded/ by setting the =:excluded= property to true. This +will prevent the package from being installed even if it is used by another +layer. + +For each included package, you may define one or more of the following +functions, which are called in order by Spacemacs to initialize the package. + +1. =/pre-init-= +2. =/init-= +3. =/post-init-= + +It is the responsibility of these functions to load and configure the package in +question. Spacemacs will do nothing other than download the package and place it +in the load path for you. + +*Note:* A package will not be installed unless at least one layer defines an +=init= function for it. That is to say, in a certain sense, the =init= function +does mandatory setup while the =pre-init= and =post-init= functions do optional +setup. This can be used for managing cross-layer dependencies, which we will +discuss later. + +** funcs.el +It contains all the defined functions used in the layer. + +This file is loaded after =packages.el= and before =config.el=. + +It is good practice to guard the definition of functions to make sure a package +is actually used. For instance: + +#+begin_src emacs-lisp +(when (configuration-layer/package-usedp 'my-package) + (defun spacemacs/my-package-enable () ...) + (defun spacemacs/my-package-disable () ...)) +#+end_src + +By guarding these functions we avoid to define them in case the package +`my-package` is not used. + +** config.el +This file configure the layer like declaring layer variables default values +and setup some other variables related to the layer. + +This file is loaded after =funcs.el=. + +** keybindings.el +It contains general key bindings. + +This is the last file loaded. + +The word /general/ here means /independent of any package/. Since the end user +can exclude an arbitrary set of packages, you cannot be sure that, just because +your layer includes a package, that package will necessarily be loaded. For this +reason, code in these files must be generally safe, regardless of which packages +are installed. + +More on this in the next section. + +* The Spacemacs loading process +The Spacemacs loading process can be summarized as follows: + +1. Spacemacs goes through all the enabled layers and evaluates their files. The + changes introduced by =config.el= are thus applied, then =funcs.el= and + =packages.el= are loaded, but nothing happens from =packages.el=, since these + files only define functions and variables. +2. Spacemacs checks which packages should be downloaded and installed. To be + installed, a package must be + - included by a layer that the user has enabled, + - not be excluded by any other layer that the user has enabled, + - not be excluded by the user herself, and + - there must be at least one =/init-= function defined for + it. + Alternatively, if a package is part of the end user's + =dotspacemacs-additional-packages=, it will also be installed. +3. All packages which should be installed are installed in alphabetical order, + =package.el= built-in Emacs library is in charge of implicit dependencies. + Installed packages not following the rules of 2. are removed as well as + their dependencies if possible. (This last behavior is optional but default.) +4. The =pre-init=, =init= and =post-init= functions for each installed package + are executed in turn. + +It is step four that interests us. It is very important that a package is not +installed if no =init= function is defined for it. + +We say that a layer *owns* a package if it defines an =init= function for it. A +layer does *not* own a package if it only defines =pre-init= or =post-init= +functions. + +Only one layer may own a package. Since layers are processed in order of +specification in the user's dotfile, it is possible for layers to "seize" +ownership of a package that was owned by a previously enabled layer. + +* Case study: auto-completion +Spacemacs provides a layer called =auto-completion= which provides +auto-completion features in many modes. It does this using the package +=company=. This layer owns the =company= package, so it defines a function +called =auto-completion/init-company=. + +When a user enables the =auto-completion= layer, Spacemacs locates it and finds +=company= in the list of packages. Provided that =company= is not excluded, +either by the user or another layer, Spacemacs then locates and runs the =init= +function for =company=. This function includes a call to =use-package= that sets +up the basic configuration. + +However, auto-completion is a two-horse game. By its very nature, it is specific +to the major mode in question. It is pointless to expect the =auto-completion= +layer to include configuration for each conceivable major mode, and equally +futile to expect each programming language layer (python, ruby, etc.) to fully +configure =company= on their own. + +This is solved using the =post-init= functions. The Python layer, for example, +includes the =company= package and defines a function called +=python/post-init-company=. This function is called after +=auto-completion/init-company=, but it is not called if + +- the =auto-completion= layer is not enabled, in which case no =init= function + for =company= will be found, or +- the =company= package is excluded either by the user or another layer + +As such, =python/post-init-company= is the /only/ safe place to put +configuration related to =company= in Python mode. + +If the Python layer had defined an =init= function for =company=, that package +would have been installed even if the =auto-completion= layer had been disabled, +which is not what we want. + +* Layer tips and tricks + +** Cross-dependencies +Spacemacs provides a couple of additional useful functions you can use to check +whether other layers or packages are included. + +- =configuration-layer/layer-usedp= :: check if a layer is enabled +- =configuration-layer/package-usedp= :: check if a package is or will be installed + +These are useful in some cases, but usually you can get the desired result just +by using =post-init= functions. + +For layers that require another layers to be enabled, use the functions +=configuration-layer/declare-layer= and =configuration-layer/declare-layers= to +ensure that layers are enabled even if the user has not enabled them explicitly. +Calls to these functions must go in the =config.el= file. + +** Use-package +In the vast majority of cases, a package =init= function should do nothing but +call to =use-package=. Again, in the vast majority of cases, all the +configuration you need to do should be doable within the =:init= or =:config= +blocks of such a call. + +What goes where? Since =:init= is executed before load and =:config= after, +these rules of thumb apply. + +In =:config= should be +- Anything that requires the package to be already loaded. +- Anything that takes a long time to run, which would ruin startup performance. + +The =:init= block should contain setup for the entry points to the package. This +includes keybindings, if the package should be loaded manually by the user, or +hooks, if the package should be loaded upon some event. It is not unusual to +have both! + +** Use-package hooks +Spacemacs includes a macro for adding more code to the =:init= or =:config= +blocks of a call to =use-package=, after the fact. This is useful for =pre-init= +or =post-init= functions to "inject" code into the =use-package= call of the +=init= function. + +#+begin_src emacs-lisp +(spacemacs|use-package-add-hook helm + :pre-init + ;; Code + :post-init + ;; Code + :pre-config + ;; Code + :post-config + ;; Code + ) +#+end_src + +Since a call to =use-package= may evaluate the =:init= block immediately, any +function that wants to inject code into this block must run =before= the call to +=use-package=. Further, since this call to =use-package= typically takes place +in the =init-= function, calls to =spacemacs|use-package-add-hook= +typically happen in the =pre-init-= functions, and not in +=post-init-=. It is quite safe to do this in =pre-init=, so that should +be the default choice. + +** Best practices +If you break any of these rules, you should know what you are doing and have a +good reason for doing it. + +*** Package ownership +Each package should be owned by one layer only. The layer that owns the +package should define its =init= function. Other layers should rely on +=pre-init= or =post-init= functions. + +*** Localize your configuration +*Each function can only assume the existence of one package.* With some +exceptions, the =pre-init=, =init= and =post-init= functions can /only/ +configure exactly the package they are defined for. Since the user can exclude +an arbitrary set of packages, there is no /a priori/ safe way to assume that +another package is included. Use =configuration-layer/package-usedp= if you +must. + +This can be very challenging, so please take this as a guideline and not +something that is absolute. It is quite possible for the user to break her +Spacemacs installation by excluding the wrong packages, and it is not our +intention to prevent this at all costs. + +*** Load ordering +In Spacemacs, layers are loaded in order of inclusion in the dotfile, and +packages are loaded in alphabetical order. In the rare cases where you make use +of this property, you should make sure to document it well. Many will assume +that layers can be included in arbitrary order (which is true in most cases), +and that packages can be renamed without problems (which is also in most cases). + +Preferably, write your layer so that it is independent of load ordering. The +=pre=- and =post-init= functions are helpful, together with +=configuration-layer/package-usedp=. + +*** No require +Do not use require. If you find yourself using =require=, you are almost +certainly doing something wrong. Packages in Spacemacs should be loaded through +auto-loading, and not explicitly by you. Calls to =require= in package init +functions will cause a package to be loaded upon startup. Code in an =:init= +block of =use-package= should not cause anything to be loaded, either. If you +need a =require= in a =:config= block, that is a sign that some other package is +missing appropriate auto-loads. + +*** Auto-load everything +Defer everything. You should have a very good reason not to defer the loading +of a package. + +* How do I ... idiomatically? + +** Setup auto-completion for a major mode +In your layer's =config.el=, call =spacemacs|defvar-company-backends=. + +#+begin_src emacs-lisp +(spacemacs|defvar-company-backends yoyo-mode) +#+end_src + +This creates a variable called =company-backends-yoyo-mode=. In the package +=init= functions, you should push backends to this variable. But of course, only +if the =auto-completion= layer is enabled. + +#+begin_src emacs-lisp +(defconst yoyo-packages '( + ;; ... + some-weird-package + ;; ... + ) + + (when (configuration-layer/package-usedp 'company) + (defun yoyo/init-some-weird-package () + (use-package some-weird-package + :defer t + ;; This has to be in init because it's a package entry point + :init + (push 'some-weird-backend company-backends-yoyo-mode)))) +#+end_src + +Finally, we must make sure company is started when we enter =yoyo-mode=, but +again only if the =auto-completion= layer is enabled. + +#+begin_src emacs-lisp +(defconst yoyo-packages '( + ;; ... + yoyo-mode + ;; ... + )) + +(defun yoyo/init-yoyo-mode () + (use-package yoyo-mode + ;; Some configuration goes here, however nothing relating to company + ;; since this function may be called even if company is not installed! + )) + +(when (configuration-layer/package-usedp 'company) + (defun yoyo/post-init-yoyo-mode () + ;; This makes no reference to `some-weird-package', which may have + ;; been excluded by the user + (spacemacs|add-company-hook yoyo-mode))) +#+end_src diff --git a/doc/QUICK_START.org b/doc/QUICK_START.org new file mode 100644 index 0000000..dd35ba6 --- /dev/null +++ b/doc/QUICK_START.org @@ -0,0 +1,177 @@ +#+TITLE: Quick start + +* Configuration :TOC_4_gh:noexport: + - [[#configuration-layers][Configuration layers]] + - [[#dotfile-spacemacs][Dotfile (.spacemacs)]] + - [[#dotdirectory-spacemacsd][Dotdirectory (~/.spacemacs.d)]] + - [[#learning-spacemacs][Learning Spacemacs]] + - [[#editing-styles][Editing Styles]] + - [[#the-leader-keys][The leader keys]] + - [[#evil-tutor][Evil-tutor]] + - [[#universal-argument][Universal argument]] + - [[#configuration-layers-and-package-discovery][Configuration layers and Package discovery]] + - [[#key-bindings-discovery][Key bindings discovery]] + - [[#describe-functions][Describe functions]] + - [[#how-tos][How-To's]] + +* Configuration 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. + +A configuration layer is a directory containing at least a =packages.el= +file which defines and configures packages to be downloaded from Emacs +package repositories using the =package.el= built-in feature of Emacs. + +If you already have your own =Emacs= configuration you can move it to your +own layer. + +The following command creates a layer in the =private= directory: + +#+BEGIN_EXAMPLE + SPC SPC configuration-layer/create-layer RET +#+END_EXAMPLE + +Any configuration layers you create must be explicitly loaded in =~/.spacemacs=. + +Note: For your privacy, the contents of the =private= directory are not +under source control. See the section on private configuration management in +the [[file:DOCUMENTATION.org][documentation]]. + +* Dotfile (.spacemacs) +As mentioned =.spacemacs= controls which configuration layers to load and +is also a means to customizing Spacemacs. + +The following command will create a =.spacemacs= file in your home directory: + +#+BEGIN_EXAMPLE + SPC SPC dotspacemacs/install RET +#+END_EXAMPLE + +To open the installed dotfile: + +#+BEGIN_EXAMPLE + SPC f e d +#+END_EXAMPLE + +To load some configuration layers using the variable +=dotspacemacs-configuration-layers=: + +#+BEGIN_SRC elisp +;; List of configuration layers to load. +dotspacemacs-configuration-layers '(auto-completion smex) +#+END_SRC + +Some configuration layers support configuration variables to expose granular +control over layer-specific features, [[file:../layers/+source-control/git/README.org][git layer]] being one such example. +Variables can be directly set within =dotspacemacs-configuration-layers= like so: + +#+BEGIN_SRC elisp +;; List of configuration layers to load. +dotspacemacs-configuration-layers '(auto-completion + (git :variables + git-magit-status-fullscreen t) + smex) +#+END_SRC + +At anytime you can apply the changes made to the dotfile or layers +_without restarting_ Spacemacs by pressing ~SPC f e R~. + +The [[file:../core/templates/.spacemacs.template][dotfile template]] contain further information about how to customize +Spacemacs. See the dotfile configuration section of the [[file:DOCUMENTATION.org][documentation]] for +more details. + +* Dotdirectory (~/.spacemacs.d) +Like =Emacs=, Spacemacs initialization can also be contained in an =init.el= file +in a special directory =~/.spacemacs.d=. The contents of the dotfile should be +then copied in the =init.el= file. + +The Emacs dotfile or dotdirectory is not replaced but rather +complemented by the Spacemacs dotfile or dotdirectory. During startup, +Emacs still uses =~/.emacs.d/init.el= (or =~/.emacs=) for its +initialization, and variable =user-emacs-directory= will still point +to =~/.emacs.d/=, even if =~/.spacemacs.d= or =~/.spacemacs= are +present. Only now =~/.emacs.d/init.el= is provided by Spacemacs +(e.g. after cloning the Spacemacs git repo into an empty +=~/.emacs.d/=), and your own personnal configurations go into +=~/.spacemacs.d/init.el= (or =~/.spacemacs=). + +Have a look into the FAQ for an easy workaround to maintain (your +former) vanilla Emacs and (your new) Spacemacs configurations +side-by-side without the need to rename and backup =~/.emacs.d/=. + +* Learning Spacemacs +** Editing Styles +Spacemacs can be used by Vim users or Emacs users by setting the +=dotspacemacs-editing-style= variable to =vim=, =emacs= or even =hybrid= +in the dotfile =~/.spacemacs=. + +** The leader keys +Spacemacs key bindings use a leader key which is by default bound to +~SPC~ (space bar) in =vim= or =hybrid= editing styles and ~M-m~ in =emacs= +style. + +You can change it by setting the variable =dotspacemacs-leader-key= if +you use the =vim= style or =dotspacemacs-emacs-leader-key= if you use +the =emacs= style (these variables must be set in the file =~/.spacemacs=). + +For simplicity the documentation always refers to the leader key as +~SPC~. + +There is secondary leader key called the major-mode leader key which is +set to ~​,​~ by default. This key is a shortcut for ~SPC m~ +where all the major-mode specific commands are bound. + +** Evil-tutor +If you are willing to learn the Vim key bindings (highly recommended since +you can benefit from them even in =emacs= style), press ~SPC h T~ +to begin an Evil-adapted Vimtutor. + +** Universal argument +In =vim= editing style the universal argument defaults to ~SPC u~ +instead of ~C-u~ because the latter is used to scroll up as in Vim. + +** Configuration layers and Package discovery +By using =helm-spacemacs-help= with ~SPC h SPC~ you can quickly search +for a package and get the name of the layers using it. + +You can also easily go to the =README.org= of a layer or go to the initialization +function of a package. + +** Key bindings discovery +Thanks to [[https://github.com/justbur/emacs-which-key][which-key]], whenever a prefix command is pressed (like ~SPC~) +a buffer appears after one second listing the possible keys for this prefix. + +It is also possible to search for specific key bindings by pressing: + +#+BEGIN_EXAMPLE + SPC ? +#+END_EXAMPLE + +To narrow the bindings list to those prefixed with =SPC=, +type a pattern like this regular expression: + +#+BEGIN_EXAMPLE + SPC\ b +#+END_EXAMPLE + +which would list all =buffer= related bindings. *Note:* You are at the +/HELM-Descbind/ prompt, the pattern consists of 6 letters: uppercase ~SPC~, a +backslash, an actual space and a lowercase ~b~. + +** Describe functions +=Describe functions= are powerful Emacs introspection commands to get information +about functions, variables, modes etc. These commands are bound thusly: + +| Key Binding | Description | +|-------------+-------------------| +| ~SPC h d f~ | describe-function | +| ~SPC h d k~ | describe-key | +| ~SPC h d m~ | describe-mode | +| ~SPC h d v~ | describe-variable | + +* How-To's +Some quick =how-to's= are compiled in the [[file:FAQ.org::How%20do%20I...][FAQ.org]] file. diff --git a/doc/VIMUSERS.org b/doc/VIMUSERS.org new file mode 100644 index 0000000..39820ec --- /dev/null +++ b/doc/VIMUSERS.org @@ -0,0 +1,484 @@ +#+TITLE: Migrating from Vim + +* Migrating from vim :TOC_4_gh:noexport: + - [[#purpose-of-this-document][Purpose of this document]] + - [[#philosophy][Philosophy]] + - [[#basic-orientation][Basic orientation]] + - [[#terms][Terms]] + - [[#modes-vs-states][Modes vs. States]] + - [[#layers][Layers]] + - [[#transient-states][Transient-states]] + - [[#keybinding-conventions][Keybinding conventions]] + - [[#running-commands][Running commands]] + - [[#buffer-and-window-management][Buffer and window management]] + - [[#buffers][Buffers]] + - [[#special-buffers][Special buffers]] + - [[#windows][Windows]] + - [[#files][Files]] + - [[#the-help-system][The Help System]] + - [[#exploring][Exploring]] + - [[#customization][Customization]] + - [[#the-spacemacs-file][The .spacemacs file]] + - [[#emacs-lisp][Emacs Lisp]] + - [[#variables][Variables]] + - [[#keybindings][Keybindings]] + - [[#functions][Functions]] + - [[#activating-a-layer][Activating a Layer]] + - [[#creating-a-layer][Creating a Layer]] + - [[#installing-a-single-package][Installing a single package]] + - [[#loading-packages][Loading packages]] + - [[#uninstalling-a-package][Uninstalling a package]] + - [[#common-tweaks][Common tweaks]] + - [[#changing-the-escape-key][Changing the escape key]] + - [[#changing-the-colorscheme][Changing the colorscheme]] + - [[#nohlsearch][Nohlsearch]] + - [[#sessions][Sessions]] + - [[#navigating-using-visual-lines][Navigating using visual lines]] + - [[#other-useful-links][Other useful links]] + +* Purpose of this document +This document is intended to supplement the Spacemacs documentation by bridging +the gap between vim and Spacemacs. While some information may be duplicated, +this does not replace the Spacemacs documentation. It is recommended that you +read both files to fully understand Spacemacs. + +[[file:DOCUMENTATION.org][Spacemacs Documentation]] + +* Philosophy + One misconception many vim users have is that Spacemacs is an Emacs /clone/ of + vim. Spacemacs does not seek to completely mimic the behavior of vim + everywhere, only when editing. You should not expect every vim command to be + available, although many are. You cannot use Vimscript to configure Spacemacs, + but who likes Vimscript anyway? It is important to understand that Spacemacs is + an attempt to improve on both vim and Emacs using the superior modal editing of + vim and the nicer configuration language of Emacs. + +* Basic orientation +** Terms +Spacemacs uses some different terminology than vim, which can cause confusion +for new users. This section attempts to clear up any confusion. + +*** Modes vs. States +In vim you have various editing modes like =insert mode= and =visual mode= to +manipulate text. In Emacs, we have [[./DOCUMENTATION.org#states][states]]. These are equivalent to vim modes. +For example, =evil-insert-state= is the same as =insert-mode= in vim. + +A =minor-mode= in Emacs is like a feature that is activated. For example, +=aggressive-indent-mode= is a =minor-mode= that automatically indents code as you +type. It is important to know that there can be many =minor-modes= activated in a +buffer. Many Emacs packages work by providing a =minor-mode=. A =major-mode= +determines the editing behavior of Emacs in the current buffer. There is +generally a corresponding =major-mode= per filetype. An example of a =major-mode= is +=python-mode=, which provides python specific settings in python files. There is +only one =major-mode= per buffer. + +*** Layers +Spacemacs has the concept of layers. Layers are similar to vim plugins. They +provide new features to use in Spacemacs. However, layers are often comprised of +several packages that integrate well with each other. For example, the =python= +layer includes support for auto-completion, documentation look-up, tests, and +much more by using several different packages. This keeps you from thinking +about what packages to install, and instead worry about what features you want. +More information on layers can be found in the [[./VIMUSERS.org#customization][customization]] section and in the +[[./DOCUMENTATION.org#configuration-layers][documentation]]. There is also a more in-depth guide on writing layers [[file:LAYERS.org][here]]. + +*** Transient-states +Spacemacs provides a special functionality called transient-states. Transient-states +allow similar commands to be run in succession without repeatedly pressing the +~~ key. Transient-states are usually triggered by using a keybinding with the +following pattern: ~ .~ where group is the category the +transient-state falls under. When in a transient-state you will see documentation at the +bottom of your window. To exit a transient-state press ~q~. + +#+CAPTION: Transient-state documentation window + +[[file:img/spacemacs-scale-transient-state.png]] + +** Keybinding conventions +Spacemacs uses ~SPC~ as its ~~ key. This document will use ~SPC~ to refer to +the ~~ key. All keybindings are mnemonic and are organized under the +~~ key. For example, the keybindings for language-specific commands are +always under the ~SPC m~ prefix. A full list of conventions used in Spacemacs is +[[./CONVENTIONS.org][here]]. Note that all keybindings can be changed. + +Spacemacs uses [[https://github.com/justbur/emacs-which-key][which-key]] to show available keybindings after a delay: + +#+CAPTION: Which-key window + +[[file:img/which-key.png]] + +** Running commands +Emacs commands can be run using ~SPC SPC~. This will pop up a buffer using [[https://github.com/emacs-helm/helm][Helm]] +which can be used to run any Emacs command. You can also run many ex commands +using ~:~, just like in vim. + +Note: You can run Emacs interactive commands using ~:~, but you cannot run ex +commands using ~SPC SPC~. + +** Buffer and window management +*** Buffers +Buffers in Emacs and vim are essentially the same. The keybindings for buffers +are located under the ~SPC b~ prefix. + +| Keybinding | Function | +|---------------------------+------------------------------------------------------| +| ~SPC b b ~ | Create a buffer named ==. | +| ~SPC b b~ | Search through open buffers and recent files. | +| ~SPC b n~ or ~:bnext~ | Switch to the next buffer. (See [[*Special%20buffers][Special buffers]]) | +| ~SPC b p~ or ~:bprevious~ | Switch to the previous buffer. (See [[*Special%20buffers][Special buffers]]) | +| ~SPC b d~ or ~:bdelete~ | Kill current buffer. | +| ~SPC b C-d~ | Kill buffers using a regular expression. | +| ~SPC b m~ | Kill all buffers except the current buffer. | +| ~SPC b .~ | Buffer transient-state. | + +**** Special buffers +By default Emacs creates a lot of buffers that most people will never need, like +=*Messages*=. Spacemacs automatically ignores these when using these +key bindings. More information can be found [[./DOCUMENTATION.org#special-buffers][here]]. + +*** Windows +Windows are like splits in vim. They are useful for editing multiple files at +once. All window keybindings are under the ~SPC w~ prefix. + +| Keybinding | Function | +|------------------------+--------------------------------------| +| ~SPC w v~ or ~:vsplit~ | Opens a vertical split on the right. | +| ~SPC w s~ or ~:split~ | Opens a horizontal split below. | +| ~SPC w h/j/k/l~ | Navigate among windows. | +| ~SPC w H/J/K/L~ | Move the current window. | +| ~SPC w .~ | Window transient-state. | + +** Files +All file commands in Spacemacs are available under the ~SPC f~ prefix. + +| Keybinding | Function | +|-------------------+--------------------------------------------------------------| +| ~SPC f f~ | Opens a buffer to search for files in the current directory. | +| ~SPC f r~ | Opens a buffer to search through recently opened files. | +| ~SPC f s~ or ~:w~ | Save the current file. | +| ~:x~ | Save the current file and quit. | +| ~:e ~ | Open == | + +** The Help System +Emacs has an extensive help system. All keybindings under the ~SPC h d~ prefix +allow convenient access to the help system. The most important of these +keybindings are ~SPC h d f~ , ~SPC h d k~ , and ~SPC h d v~. There is also the +~SPC ~ keybinding which allows you to search for documentation. + +| Keybinding | Function | +|-------------+----------------------------------------------------------------------------------| +| ~SPC h d f~ | Prompts for a function and shows its documentation. | +| ~SPC h d k~ | Prompts for a keybinding and shows what it is bound to. | +| ~SPC h d v~ | Prompts for a variable and shows its documentation and current value. | +| ~SPC ~ | Searches for a command, function, variable, or face and shows its documentation. | + +Whenever, you see weird behavior or want to know what something does, these +functions are the first thing you should refer to. + +** Exploring +There are a few ways to explore the functionality of Spacemacs. One is to read +the [[https://github.com/syl20bnr/spacemacs][source code]] on Github. You can begin to feel your way around Emacs Lisp and +how Spacemacs works this way. You can also use the following keybindings to +explore: + +| Keybinding | Function | +|-------------+---------------------------------------------------------------| +| ~SPC h SPC~ | Lists all layers and allows you to view files from the layer. | +| ~SPC ?~ | Lists all keybindings. | + +* Customization +** The .spacemacs file +When you first start spacemacs, you will be prompted to choose an editing style. +If you are reading this, you likely want to choose the vim style. A =.spacemacs= +file will be created with the appropriate style selected. Most trivial +configuration will go in this file. + +There are four top-level functions in the file: =dotspacemacs/layers=, +=dotspacemacs/init=, =dotspacemacs/user-init= and =dotspacemacs/user-config=. +The =dotspacemacs/layers= function exist only to enable and disable layers and +packages. The =dotspacemacs/init= function is run before anything else during +startup and contains Spacemacs settings. You will never need to touch this +function except to change default Spacemacs settings. +The =dotspacemacs/user-init= function is also run before anything else and +contains user specific configuration. The =dotspacemacs/user-config= function +is the one you will use the most. This is where you define any user configuration. + +| Keybinding | Function | +|-------------+--------------------------------------------------------------------------| +| ~SPC f e d~ | Open your =.spacemacs= | +| ~SPC f e D~ | Update your =.spacemacs= manually using a diff with the default template | + +** Emacs Lisp +This section introduces a few emacs lisp functions that are needed to configure +Spacemacs. For a more detailed look at the language, see [[http://learnxinyminutes.com/docs/elisp/][this]] link. If you +really want to learn everything there is about emacs lisp, use the info page +found at ~SPC h i elisp RET~ . + +*** Variables +Setting variables is the most common way to customize the behavior of Spacemacs. +The syntax is simple: + +#+begin_src emacs-lisp + (setq variable value) ; Syntax + ;; Setting variables example + (setq variable1 t ; True + variable2 nil ; False + variable3 '("A" "list" "of" "things")) +#+end_src + +*** Keybindings +Defining keybindings is something that almost everyone will want to do. The +built-in =define-key= function is the best way to do that. + +#+begin_src emacs-lisp + (define-key map new-keybinding function) ; Syntax + ;; Map H to go to the previous buffer in normal mode + (define-key evil-normal-state-map (kbd "H") 'previous-buffer) + ;; Mapping keybinding to another keybinding + (define-key evil-normal-state-map (kbd "H") (kbd "^")) ; H goes to beginning of the line +#+end_src + +The map is the keymap you want to bind the key in. Most of the time you will use +=evil--state-map=. These correspond to different =evil-mode= states. +For example, using =evil-insert-state-map= maps the keybinding in insert mode. + +To map ~~ keybindings, use the =spacemacs/set-leader-keys= function. + +#+begin_src emacs-lisp + (spacemacs/set-leader-keys key function) ; Syntax + ;; Map killing a buffer to b c + (spacemacs/set-leader-keys "bc" 'spacemacs/kill-this-buffer) + ;; Map opening a link to o l only in org-mode (works for any major-mode) + (spacemacs/set-leader-keys-for-major-mode 'org-mode + "ol" 'org-open-at-point) +#+end_src + +*** Functions +You may occasionally want to define a function to do a more complex +customization. The syntax is simple: + +#+begin_src emacs-lisp + (defun func-name (arg1 arg2) + "docstring" + ;; Body + ) + + ;; Calling a function + (func-name arg1 arg1) +#+end_src + +Here is an example of a function that is useful in real life: + +#+begin_src emacs-lisp + ;; This snippet allows you to run clang-format before saving + ;; given the current file as the correct filetype. + ;; This relies on the c-c++ layer being enabled. + (defun clang-format-for-filetype () + "Run clang-format if the current file has a file extensions + in the filetypes list." + (let ((filetypes '("c" "cpp"))) + (when (member (file-name-extension (buffer-file-name)) filetypes) + (clang-format-buffer)))) + + ;; See http://www.gnu.org/software/emacs/manual/html_node/emacs/Hooks.html for + ;; what this line means + (add-hook 'before-save-hook 'clang-format-for-filetype) +#+end_src + +** Activating a Layer +As said in the terms section, layers provide an easy way to add features. +Activating a layer is done in the =.spacemacs= file. In the file search for the +=dotspacemacs-configuration-layers= variable. By default, it should look like +this: + +#+begin_src emacs-lisp + (defun dotspacemacs/layers () + (setq-default + ;; ... + dotspacemacs-configuration-layers '(;; auto-completion + ;; better-defaults + emacs-lisp + ;; (git :variables + ;; git-gutter-use-fringe t) + ;; markdown + ;; org + ;; syntax-checking + ))) +#+end_src + +You can uncomment these suggested layers by deleting the semi-colons for a nice +out-of-the-box experience. To add a layer, add its name to the list and restart +Emacs or press ~SPC f e R~ . To view all layers and their documentation use ~SPC +h SPC~. + +** Creating a Layer +To group configuration or when configuration doesn't fit well in your +=.spacemacs= file, you can create a configuration layer. Spacemacs provides a +builtin command to generate the layer boilerplate: ~SPC SPC +configuration-layer/create-layer~. This generates a folder that looks like this: + +#+BEGIN_EXAMPLE + [layer-name] + |__ [local]* + | |__ [example-mode-1] + | | ... + | |__ [example-mode-n] + |__ config.el* + |__ funcs.el* + |__ keybindings.el* + |__ packages.el + + [] = directory + * = not created by the command +#+END_EXAMPLE + +The =packages.el= file contains a list of packages that you can install in the +variable =-packages=. Any package that is available on the [[http:melpa.org][MELPA]] +repository can be added to the list. A list can also exclude packages using the +=:excluded t= property. +Each package requires a function to initialize it. The function /must/ be named +with this pattern: =/init-=. This function contains +configuration for the package. There are also =pre/post-init= functions to +execute code before or after a package loads. It would look like this: + +#+begin_src emacs-lisp + (setq layer-name-packages '(example-package + ;; This layer uninstalls example-package-2 + ;; by setting the :excluded property to true (t) + (example-package-2 :excluded t))) + + (defun layer-name/post-init-package () + ;; Add configuration to a package in another layer here + ) + + (defun layer-name/init-example-package () + ;; Configuration for example-package goes here + ) +#+end_src + +**Note**: Only one layer can have a =init= function for a package. If you want +to override the configuration of a package in another layer, use a +=/pre-init= function in addition to [[file:LAYERS.org#use-package-hooks][use-package hooks]]. + +If a package is not available on MELPA, you must use a local package or a +package recipe. For more details see [[file:LAYERS.org#anatomy-of-a-layer][anatomy of a layer]]. + +Make sure you [[Activating a Layer][add]] your layer to your =.spacemacs= file and restart to +activate it. + +A detailed description of the loading process and how layers work can be found in +[[file:LAYERS.org][LAYERS.org]]. + +** Installing a single package +Sometimes creating a layer is a bit overkill. Maybe you just want one package +and don't want to maintain a whole layer. Spacemacs provides a variable in the +=dotspacemacs/layers= function in =.spacemacs= called +=dotspacemacs-additional-packages=. Just add a package name to the list and it +will be installed when you restart. Loading the package is covered in the next +[[Loading packages][section]]. + +** Loading packages +Ever wonder how Spacemacs can load over a 100 packages in just a few seconds? +Such low loading times must require some kind of unreadable black magic that no +one can understand. Thanks to [[https://github.com/jwiegley/use-package][use-package]], this is not true. It is a package +that allows easy lazy-loading and configuration of packages. Here are the basics +to using it: + +#+begin_src emacs-lisp + ;; Basic form of use-package declaration. The :defer t tells use-package to + ;; try to lazy load the package. + (use-package package-name + :defer t) + ;; The :init section is run before the package loads The :config section is + ;; run after the package loads + (use-package package-name + :defer t + :init + (progn + ;; Change some variables + (setq variable1 t variable2 nil) + ;; Define a function + (defun foo () + (message "%s" "Hello, World!"))) + :config + (progn + ;; Calling a function that is defined when the package loads + (function-defined-when-package-loads))) +#+end_src + +This is just a very basic overview of =use-package=. There are many other ways +to control how a package loads using it that aren't covered here. + +** Uninstalling a package +Spacemacs provides a variable in the =dotspacemacs/init= function in +=.spacemacs= called =dotspacemacs-excluded-packages=. Just add a package name to +the list and it will be uninstalled when you restart. + +** Common tweaks +This section is for things many will want to change. All of these settings go in +the =dotspacemacs/user-config= function in your =.spacemacs= unless otherwise noted. + +*** Changing the escape key +Spacemacs uses [[https://github.com/syl20bnr/evil-escape][evil-escape]] to +allow escaping from many =major-modes= with one keybinding. You can customize +the variable in your =dotspacemacs/user-config= like this: + +#+begin_src emacs-lisp + (defun dotspacemacs/user-config () + ;; ... + ;; Set escape keybinding to "jk" + (setq-default evil-escape-key-sequence "jk")) +#+end_src + +More documentation is found in the =evil-escape= [[https://github.com/syl20bnr/evil-escape/blob/master/README.md][README]]. + +*** Changing the colorscheme +The =.spacemacs= file contains the =dotspacemacs-themes= variable in the +=dotspacemacs/init= function. This is a list of themes that can be cycled +through with the ~SPC T n~ keybinding. The first theme in the list is the one +that is loaded at startup. Here is an example: + +#+begin_src emacs-lisp + (defun dotspacemacs/init + ;; Darktooth theme is the default theme + ;; Each theme is automatically installed. + ;; Note that we drop the -theme from the package name. + ;; Ex. darktooth-theme -> darktooth + (setq-default dotspacemacs-themes '(darktooth + soothe + gotham))) +#+end_src + +All installed themes can be listed and chosen using the ~SPC T h~ keybinding. + +*** Nohlsearch +Spacemacs emulates the default vim behavior which highlights search results even +when you are not navigating between them. You can use ~SPC s c~ or ~:nohlsearch~ +to disable search result highlighting. + +To disable the result highlighting when it is not needed anymore automatically, +you can [[Uninstalling a package][uninstall]] the =evil-search-highlight-persist= package. + +*** Sessions +Spacemacs does not automatically restore your windows and buffers when you +reopen it. If you use vim sessions regularly you may want to set +=dotspacemacs-auto-resume-layouts= to =t= in your =.spacemacs=. + +*** Navigating using visual lines +Spacemacs uses the vim default of navigating by actual lines, even if they are +wrapped. If you want ~j~ and ~k~ to behave like ~g j~ and ~g k~, add this to +your =.spacemacs=: + +#+begin_src emacs-lisp + (define-key evil-normal-state-map (kbd "j") 'evil-next-visual-line) + (define-key evil-normal-state-map (kbd "k") 'evil-previous-visual-line) +#+end_src + +* Other useful links +- [[https://www.gnu.org/software/emacs/manual/emacs.html][Emacs Manual]] +- [[file:DOCUMENTATION.org][Spacemacs Documentation]] +- [[http://ian.mccowan.space/2015/04/07/Spacemacs/][Spacemacs: A Vimmer's Emacs Prerequisites]] + - Note: The article refers to ~SPC b s~ as the keybinding to switch buffers. + It is ~SPC b b~ +- [[http://thume.ca/howto/2015/03/07/configuring-spacemacs-a-tutorial/][Configuring Spacemacs: A Tutorial]] +- [[http://juanjoalvarez.net/es/detail/2014/sep/19/vim-emacsevil-chaotic-migration-guide/][From Vim to Emacs+Evil chaotic migration guide]] diff --git a/doc/img/crappy-powerline-separators.png b/doc/img/crappy-powerline-separators.png new file mode 100644 index 0000000000000000000000000000000000000000..0d813b8e59240cb70e75b3dbf98b110b3245ea00 GIT binary patch literal 7954 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 X1`?DI2T<(a>b0_hhJ5);i_rfE2JmLR literal 0 HcmV?d00001 diff --git a/doc/img/dot-error.png b/doc/img/dot-error.png new file mode 100644 index 0000000000000000000000000000000000000000..9e1d36635289dcc64d42c93eacbc36262d4fbe80 GIT binary patch literal 6844 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 literal 0 HcmV?d00001 diff --git a/doc/img/flycheck-error.png b/doc/img/flycheck-error.png new file mode 100644 index 0000000000000000000000000000000000000000..3405cdfb2f6edf6e78d5f481f9b146d78fc3ed42 GIT binary patch literal 18549 zcmYJaWmp_d(>A;i+=IJYaCZs8-Q6MR;_fbi#oY-W+}(q_ySuyl$CdjzzPEqu_Uz2m z)Kqt$byjt4n1Y-*A{;Ip002Ogln_w@0KN==_KjhnK0k#Mo}vK&Y&;8LVFe3gV*o%S zIME$i1zon*WnvskBZ=Z5BYqbl&T$;a|Ff$YMk*wVq5z?yAf(X!9hI3x0_Cepm!AYv zjEchduQ9w3-kl%qAN&ui0%oRJwJrz+zw})Uj0zJA3%K`z1{Q?hmQ9%ZZ9J4U;s_h#TnjVT8M5$ zz;Dg=zhrq}T?oVu9ZiRq^ld=~&k{kz0F4^@)5gH1#;OCPq~-bQ`gx%$2Eb1U)Nj+s zfbAsTa}7qpUSwwcqdderBp6W@R+O^yJ^5=WzxppzOK7O54Z&C_bf-^5KCkaY*;&5c zaS}ehSK}HDc&RquRos}qZGCVNe0ajcMm;$q>+KRhisNe8M&hJ4N(&iMYNz;ZHYmtD z!b8lEHt}|OYWu=>-bXXnt;}UVgij0YBQSxJPp*^eqCt>3h8ab`*32yTvE&b0Yl{$> z5TaQBYz6U?^_023JHpHp4;UNxfiWK(D%AoNVR5#|2)15Z; z-VnmuP?aa2kat96vo6r$!HaKTo2}5QJI)lRyFB08kh;~K)cSmhlWp+jB-1^lQnYXR zwb~mql6-NTuPff4+<1iG{Zh)UuHX!blMOcooZvTnlMsS~TL2RZ4EXaw`a!HdFaNV2 z1gSsKCD?XroFFFB3V+Vv5)^sB1k5#qKXV;(in{N%tYa8ca7O@{jph=K(}r{C0S&2u)j_cJQmv8%uwES-0L?C|{e??>HKX zd*!=`2#QCPSd~sb&d&37p<-9Apr!<_rnKRIP|@*`uyjobrfI`3#d)u>N&*B*>C&0k|jSmJ_&)rn`gy)Mo;i_Fl=*oWT4{kO2$X?tLQt z=Yx~lR0v&PXnvYh0pz-%gJPM70Fb}o*!&5ZpfI~IxxhGo&c6x4{N+J9g)SyW+YQ+H z4U++7*6nTws{_gToz?scau?YpHi93?CDc$PvH=pEA4V0F5DHRm&>=DAFL+eHUSb>x zSf$WgV&y?xhX6ieL2C4H|9jyh1qKyBW(du1+(RBGcn`qc_rOV7bMQ3(4xvs3rf|Pp zar@s8igDBw37EqWCZOfeYhlsfsERm$jQ=SAk($L&K|2OJX10W3k4h7!?*SD0;TRHX z;Hw2V8^AB(+y|3w1==C$AgKR!wxdNoIk@EFL$1uNHs@jE)WRQ<7p@~%h9~eB_$3e^ z5ZMuA^TYLbb{^Fv{NV<+6audpLS6v#UoN9pCi@f_8RkN`nO{dDYO~OzaF`&IUN}RH z*!rU m6nXoHdJyTzA9p;L4hoY0=?&0af8E_i%ctjLkx#LbG$^R28cflZ${#Tfh8 zp_rq1?)c!if>@0Bxwth7PqF(jtH_Kr9Y3Am)qvG>K7YRGS8#XQC*^D8U7#Co8;TyH zEeN@{Xj^{k<{HC zRU4^SQGPyp{%pQeVMHOHn5OVkj6=jVRcsWs5F4onT6|bRFXcAtHWrNo4HykQ4QGi+ ziBUAU^;5t*3C8g2nq|71Pz6LOD~Q(!kIxfI$Tm&YFl(zw5e)06|V->XxCCzXPaFZ>+f&wGHt>f zP;a>nGEWQ*77yVJY7V+5JBEOwq%&##N@Gq47w9;@G-A3kJ$ySyI)@~5Ar#KS&VtMG z$zsBHc|`u_Hs{G<;b15XY62%mv|i26uEO@2u1 zrctG7r}ay7P=Z?Vux9cPQ$baTU65VDCH&X2UvUyK63v5t)KV&Xv-))^x5d~}GD39U z%XF;lkWHhnvnKfyJ;i!qx3#vbx0Cy*$gwG8D5lBNC^{srrFo?HrClW7lj4%$l3IxG z#M0E3HF#uORG-r${zN3p6pzAdN@;p8{anIa66I#*CTeDNVB9;}9ot17X&kYorlt|0 znf*3OeNF2@o%Ah=dWu$)hCuOHt)Ci5OGVrGt+Isrk4WjN!cz%N1#Z4pDNnn)dF8}9 zyl2s@+nj_YhUL!j>M`N*!R!FL8=C}fB5r(|SK4}-YFc)kNF8{6g}L`s(sb0U&Fp(l zUasT!gARr=;P3Rjl}hnavm#e5TbXS24f&6n_W=Jkp}1~u;fS0t!;YrCZcO0~41e1H-7YVPF$vnUrY%b> zP%WMl2U?uG&FgYFah!A1bI>*{H@G+0o(7#6oi3jhpX#0gPkp%#dC<8cc%^s^M&Y$F*l#Cq4Vc$BMcR;w#f^{V(dW(>7o`aeNU!j6R+KnSL{1 zApa15voF37nh>hc)=<0<3!yQ=Zb7SX1&D}nXD~YmAY?oQEcgioqG*LM>Tr!;Y++^L z0lD|0^&&H5l|0_ef0;v#D2?WfrHy_2mj>1%io%d1FQidq2jw0U{$#r`!)ER#&UR#* z`5wQAebIuZLHYsBkK90YLt#elE5R($oDeRLDCHeTnWz@ikZ>Nep4J^38^`QCxH-8e zV`Tbsf6#EQ$ESxvj?)G`9H1#-hwMY zQdqzejZ%kFjuPS00Y**z<3EaJ#lS)T;U|gyr7h~($Gs;s$2cdBmHt5H z1=C7T9ik3HhrGAK>9H0l|BxE7mi`RNKi_gJa+W&X+xm)4E|adx@73n!`&UpKOIO^M zr7oCOhgw0M>GrNSdfV-LFIx`>M34L_maewGHnCEH(7a%>;?pCf#ou$BomIz$n9Z}xx_mn2+tZ6q%&(>GiFB*Hiv95PJa67J)PE^m7 z)|4AE?y_U;(H@=eBs*k#1KaXC*_MSSg)64FW>BWOrh=ov6Xj!OK7~&@_o9!|J?dkX z-tbZIM3`h)oSg(u6%Z>q%;+ zo>z7s4owI5O}W0s)xFUG$e@Q8u>5T2017-{-$Q5Z-L~c4>Q@ZROHTn^gww(n-BRYJ z2!zrh@uZHV@&g-W2HzxmO)dFknXDPx`Gj%M43LbD%#;lT$C(EThB60O2SX3kG3`(h zP~pD1U`%1|q3EJ}))k5HN&JwFQ@YMnX?F^bNTiECHEY(s4n;3RU&0Wip8GaXYF@mp znteg9e51CJ_b!{K>DZanz#;UKIj*~=)$Z`-6&M&oPKIb~x+5AdFvC;pa03V882JW_ zKm^g364disb)Hx4Lu3r;{;EiLnS4oFqg;dLJCC>VP;*aoJ9s32e12Mb20{-)hC^LJ z)CMU8|ILv$jNkh5wULZbga9NLH56eTAx`y3zP^Es1VgAI$suJg87aw|q?ZuuBym2e zV!CcPLg#N4jvoW!`QfPYnBtN3WFP8v0DgcL6?`w+(5FT>!7%oDe;`Fu6LpVhV`Vgh7V{@I!wfsmW`6lQ23BS% zx5eO3<8a_kc^2PFZL(k89j6~nCEF53WcnrxoO2p-S_qijuWtwTiSNh{&&bT|uyWTr z)b2PY@1qIg`H;LQ-OO#C%>I4qd$hILpidf2`l7z_T2q44W!ksZUWb*Ca>!w{JIfPeT7|l4=%xytiL`;z%rSc2T5jf^Dj=sDavL z*rfZG#8+oUmMJVFvj>Rq5zt4H8@ap8uuz)xbG%HZRar(FANfXcOrCj;ND*6^PVRQ@ za1KxSPybRL(DSc;Nm(p

p;!lFXA9@msIk2i!?)FE%Sy8kQ*bE9N`48&2d}nCjcQ znku#Wuk|LiWXpM{>i7cONWA<`6^`GW$Ci>0F*nZ-bEM;Lf8GbQnYM>|@p$3AmArz! zuz>djWCXAa2mSaKE0Y341kwoK4s(hA7Uqrez~Vz=C}8g_*atQq_;+aa+hT%iaioR& zQ7n#4=qU>UGW5>^v*ZJvF>AhQr@F1hySCB+;58#=2Ct%)hDw5ZhBwQZ$`8p!i_U4k znuKdlGtqI~5_BGYyRE0bIm>N|dE5>yMRH{H%94en`E*^!7D6wwoBgMd*2q9vi1Ipl^8pqcal7}uhfYQ(W?Pqrb*e1DoV4Jvwq7Os?JMk6;b}nx_Rtxb+137x z-vyz&1po>#r&4JWpW()c&nVjgfrQ4yGbH=9bckh{R%@rxTsDqsc72XO$B*siF5q9@ zf#g2M-VKIL$|@QSYI2HM+Ec0kv|>zl^f&UPW^p(9qNZes80zFz+9xF%DEHRlWah-w zB-!Mh1Ym4qQnor*{$RmkL|eTKEmbK~iH_Qwl6S)b@B*uz+&ROeI3%OL$}|_VNDb5w zd{0Z@n<={{#V_sc@D>X7g1CoZ7D*GSE1M!4A`2R|8Z936q?@K!rB5z9E)TQ{vRYqJ zTRf{ZtM=WBIWRwLI+{JiKmB`gJzwvZ{nUZc_`?NW|)&n*#tXuL{ za^hh_!0y37{JJMWyO`ag@8}4}FjR--4hdvxSflqdd6((+_}`!O$e3_V~8q2*?5OjK4n3Y zljarN)o^2J_K8~M*9yn=m}ZNmnAye2+gi~lH8OpYMThQ+bFgU{i!fDaRDtpa|@{544gQ z5{WYvAwXIRV3i0aHHq~b#v7oN`uOtd7gL0YsQ|$3LTK_si2 zhsE~&G+Z}St)f_D&;NT&p-f&%X+}0NpuAc8?Gk+ewk*g}ihGzN7q>c5D(sk}p5zWM z&0NcJxzwq}De$)8HV^?5VFG&%$Co9Msgyao8sEUg*xJO=n99s{=ht4s&g-~yAa9&_ zmRV*as4`_k-=LCM(N5>E&@Sm$(VwK0O~UOg_A5rz3yRQu+=BR@`6m58Yj=0|I))pm z(Wxn^-D%THB#K$iC`u&%BwL1C5X_xVJ(Y+TP8f6<4cheD(wQ0A;2OFNxAknNV`SF{ zjxnz=c-9407#AvM!{?PAbZ9j`5Ne=CQq4OqodiDonJ6Pl?3DbjxLLH>P7<7>|2LA% zG7o0zD|6+}?T$8TUwjFY9TAVVdvd%d`L2esz!>cO--$lHre6AZl2l3lB8|8T+CzVdNok|`>tx*A{ru2e`8064 z)7oz3GD^6^jSCXd$Imvq<$M zSHI}`%AD+YU#+e;;$ee{mZ;!yJ6``5(d1ZuNH18XG9>G& zmcDqE?}l8Dy^AT$Xi1xts^T>%J5Job8@((cO^DO1@wFcg$Y=Em^dar?k?~dHI}kB@ zV!ReUpB33xNRB)d6J3lmjS+m1HeK#|ZVkt(=CP;VvEp6$GM@JnAr6AE*F3xXVJiT5 zx=@=)ss;VZUg0JIE#25P=ddxv`LJh!ale%gk=Xo6#dGC;VB|muyJqJtuwxoSc&4=-h8_W+z$)+rZQV=Fs%u_6FZe*T$7;zYhQ-&Rxik>Q} zv8%bZgu0l=&BtxsJlZ_wHtHt(H2PQ$xeA#V6a}{s?gSb?%|TaBxJ=}uXQ%6-IiXi) z>?|}dz7?VHtc>Ro+iBWwX$X_!LG3nu;|OdGc@qOtQWnbYqhhL;k(Z@gIiH3Q{K&W* zSJydPGv}k`TWi<#T7M~iK7jH}R{@I$KZ-Iex zpQ;mzRdcaR$bFn{7BiuA*)-W`zW37ucI;@FCHR`k%$xT2a1Fc^R%nT_<)US4CHVr5 zPJCO=M$D?pQryDvY`>G)uHMm?qR^%&Q1ot#&BNhc)NS8`G*VX}{6tYGl=!tiY&(PR z%}e>Z#(3)hno7Kj^1=FqSHe3wo3~A&r;7{WP3jwHR(%aJRCJp2;vz}9O?qTRTzyg9 z(wF*!>&^JCsAr;3wSR7Ku5hkiKdqC+=dSGQg4MiS1!7rzIj~}&QeQuNX>-YLnR@YX zZSj%*ZRO=*Xd~M9V?AO0c8RZksS)FYT3<8uYyeth5(>cD(EOx}0?+{i;60_M0~6EJ z@eX2*jM4pGx_LKT8nW4E0SVULJ7Ce;J_WBYcq6`G-TD20XZSyGK6eXal##T!$mjQGdlGK-1ppYGB}If( z+?LPQ+@0_r42do;PJ{clJHSxMVPYU80v^7_QBs7*Q4ClA9EqDCuh{7yFIdPw0#1`V zr|;KK$m&05;S~)@Thhv5=+~QQhEph_I%|?sTy;pI5dR8n5?XCtbbKBFfY$m>M{T2Y z0oxBZgzMw)`_E&jz2~mJ0}@qY!`ts-6DIXGsU3u*{~GU*^k#-wL!$?O;X@OnB>z z>E%^wJ(ZbTOT*46U;k@sw5K*CNvuts)-NW;tCi~lYV+Fs4Z1J?J4Z`aKOobV6Nz`su8}nxQN_}RD*kG(3`)o#Y$nqWSKP?msO^%ZkTwF^zPy^1a5;^MI z*GQ(#4aUSYDJy2ELrnj@X^nK@MY0tKIVeQ0b!4=I!J@H|XQVE1M*@81$htPAhoy)4 zKUrT*($;dg<4H6xnh!ZV?&|oI8xxs3NLSKeJ3UrX_zP28malOCr<#d!A>}D5Vz~#{ zVntU*b(NJ{{}()?k)$qt96$iD{PUBNJ9+9Hl;q1uoKxqRwOWlg(`TG~JS zQ`_`Q%@VP7U58o&**_(<%0zndmgbG8h%?H&tZ3*?>W2%B)g?I4!q4EwJr+h`JO0_t zJcoX_S66L-KwFceM(#ojA=HFbh#QSW({{;HVO)jNDn$4H#L>xHLIQP5?~=|CrcEoz z&Ri^oRH9R_x>Df=Q<27UPyRO!NpP&J+S;%KsR*Mkt7?|(4WFWR;u*Uos8(LgB#Eun|X}k0P>;g(n3~N1w8B`0X)iqAJ(}M;W2`yE`ScwA~ zP*WmZy7!w*{`VHgWl`dC-Zm7wTHdp?Go`JUCq^99W;Em=h)tP#29RFqA@F|^>rg~m zu+k9+kCH?Q&lbfhWiEJv^vK$OXAH$yaUkGn7O5k*pG?uP)*}AXRguz!mb{3T6)zyN zY^F4H{qC?sO)aoyD#nTpfTwA@tLUV8QP1@MUz~zCRJ`XBB{cteN7~#xh~cC|k0BCk zay&`3y<)+I9+)Wfn+|P3?w>9Rh-zB#1#ByWG%NY=RZ7ETN=c%}lm&DkeED7ckbCKc zT&sqW`q=MfYK2(8&aA94Kdt!x^je%cTb2RV#HtzBp41H!D^Pm80qV39>VJhu#WI!R zMC83!kPHxgG!I##{(F-tqw6yQ=*!XMPMs`;gymesL}$|SvD(oF^MPVWlhX3y+_fxG ztq2Oh;>(sv-h#={keQsxotIc7en-=!DzVf_wY;};PHEMj_Se6zm@RN3()~ofJKFHN zkfba}+oC>tb2YPq$Qn;=t_}}kuMdK6%HMg7OPnFq;X98A>tUR`T~eAj+8Gus_l~rp z(6UQ|f4Z1ZYW={DtEa!?6wS3VlAzRD=CECFn^e`9eN2V*^Eg)?@h9!EQI3ZHbD(Be zOg}896(1?LoOn)(lMp5V{s^s)Cw$#*HciyqjHjD|6buHC3k{M5S}H2Wby7!h(xOLo z?PP6qj}AUf6ZFu9{LGCG8B6D^HPP%b&VD|Qd-F0l1H~+!2AIz)r;Cgplk2yv;Cid0 z5k!|YFzC|Os5Ni>KE2=1ZL-91xV{F{6fqJ7*6*%4jNF@)bW!i9DQ#L z;}0}`oJWrC%f49Bh^9ie9$9{W$nC?7OTQ=htFT~=;9Ae z_H?6asMKzroSVKq1yNO1bijFXmN%TGBrkg~v9b8`ryp;PTmb;2Q`F;Yhkx%@yt%5Z z#{vj#)jTIqd~TO5UbiX*5E@4;j=kPo2d++~sjjr;3BTL>Ph10&i(}|o9sP10BzAhf z|H_8_RTFHexuS$L!l5wY;gIHByqBw6tvo@+r>4nBo!(wlHE%VY3$|pSkfhLT$xeee z|051R#>C`D9qN$(F}v)cEwEeRfc~lnhYe#)$hQgsv4arMb)oaYicc*N$f(i@4sdfe z7i5s**xIOkW&ms+@6xdCJ9kmw5UOWkydR+mG_6L}a`J3Bab3RXbK&cAa$t1%zMRwE z++XdvU1oRO)57aIKRWO))*E7oQNEg=;SN5(Kj5;GxZjPxU1DH-0T@lefTQgk0^5;3 z7JpqbUx!O8wi?3QWViuy^uc9K*I(ZcE3*f_@Z#G4+z9{ zdv3XHoNjmOw7qHx>#!jXLU2Txpt^Nrqm9! zuJPgv7G9_E+LyOuA)jm69=e59&Nwpq`c3e+v3?_`n*T^dOJ-&{|CA+cp(qe_3KYAT zben!Ek%F%V3KL{`?tOVZpF#c}H|h$-N)YFGLvpbHMGgxENjME3j5H@-mK;!nFj&L) z(G$!I?I83mzqP&aBuf$0?jyo88e)>X5*TMftDsYh?;s;~651)F#VCntiJPvdREuA2 zjvh#0jeRWh9@kb?gF9E6zIpY`#Lw>Ek-osh&0;m;9G0OUv{XfR?c-Wp4lORP*FTs- zq-qlU*gL>s=xhxcB1U-?xFAP@A7=ECG`Cn=O$e~NGUdcgN+#PlsNZ9s_Jn1h4}&nB z8fuBCqZw#c;$ZV25wmH}$MmA`Cn8ZT#ZzpSa-WG3%{%OH`KnANtl_(9$b~OATc(Q~ z+T-uPQl1-%?&4j7w9$Tpo>k_7hL4lz ztBslw%kRlI@PxqoaUfaF=-`=$ug3MuvpA()PJuKRHSq0C%DMUuX?|9Xc!Kxg#p!gG zz0L)36PPXFC+Ul_A?N{DAo{eZpkMBJE;WO3D@R&=qCZ&SNL?a zWSgxX+Qw=#7-`E*Z4CW1Kc;Fz0mzy}vfTFCAdIN?Rx?+81T z=}Uq;W3G(n15Jtl<{J2DkV)tWq-zvbwFG*c@%yY);vFznUn@%6Y$J4KN7VX84dTs5 z2I20DLWhcewIS{Ea)t5rIg?kgs9n=qgKqr#QzR2w(%t$+f}U`Z-OmrPGCe*2tZv1} zz+tL0v`%dZNnojf$y)Kvi5$17n;z`zu5~Kebo>{Vpz&COqCY9ES z+O_iGt2R5EacvR^x?oV&%?VtLN3&edQLbYUS4V zD{k%MpUE}3e0*13YWTd)1j$EGQY&d+K|^lmi4R|+`Y$U5 zs*&Z2?gdY1sTg+JZ>$%abCAp`oHwVu$GCht5D6RMJKs_Rn-)Ew1-)P_-cGxE!<*CSn;Q{P-MB z`Z?d~s^v8v%t%r`{z#@m=0$sW3if)tgWayPyIjKoJssZ*Y*LcFzzWVz0MNx3VZqlO zK~5eC_ktH&aJ;Z58vqCbe|Ik*q2;gm_4Cjg4^g#&ClH7mBe@Q2fspn&@9 z9^|N?mbIB*Tx%^hNN(%(#O?1`c9T_!xf0ttVQAO>7%}4rR6+}r#UB#li^__A1^2g` z=4j@&LEqcU{ah2RoU>b0wpp^vAB)96F7Ns;?*`b~c)+WnFWQ^-yi-fASiUbau9s%| z-gJaWt!cP^kh(&guGimZFh2}MF$+^%_4}D-* z?R{IpLnL4%nA#Z&?=|Aum=3EHOnu#x+J1T#@1JU_Vd=10cy4jikmt|-bVJ743!9^J zNXkM>P7+D@G2W0}v)JSxO-h(@?+#iF<%(KqX0AAR5w7h?nKr+j&NoymG;-)f$cD-r z!C$+!0>ZDby>;>XVcFmxZBmHfUZYuaO|G7^A&1cH9X{!J!eGhezsCXRu(`&(XQ$_j3_OyJHlA;`wAY49GdV=h*B~-Q zt_&oEXt~^aPZa%+Td<}K(|u2lzC-n6%N$MMsKaqHg7e;-2S&s?Ew^)~`GVz$P_xt1 zaK5a%&9Z++TfkFd9C-qRzTxhjB#=oZ$hP5wvITtZQLJZU6n+R$RrCnHjRhvpxeeKO;f<}(_+BrD?S}h zrbcH8lAZvuDEH84u&y97A`qTq`*?RXUCn6QW~ zKV!VgDi{K+iOuo55$aOi;P94^{5K#jr$N&Rhn8F$BsZq?vVQbjwOFh?TQn9IRtZ6|n5Or^I ztL5!@d&1K-x6z=)k1N+uR1H6#Ce3K&Sm5#4GUc3~Q~flI!8DP`#wB(Gr$sc7kTCu4 zQ*I&O(_+{GP)9RNzs(h=T=&Z_ zF_R|UakmA&`WyCn)h(9`Ceo=C1p-q|oOrs{Rli+7w#;{FI*U4@={3SR18UJ8DcYOe zKd1ts7u14eLqrZHMesE}#dRu0UTm?tHWVo#fidk*Qr}%X0SlwacUky*i^hR5{h=hD z4qzLrX6Q@m5M20DF$71@q+4#T2szJtSYOup26uXfnRRRi-M@9R#(i-x48Df!UelA< z5iZnsBrQEnLtHs>=*ip>HSj_&Z8#N~JEnXb5Z@ZhetDaqW%zHXOXzv0>Ml^!*ldGm zGFM~v$M3r1PlWX(amXe4h{H2B5O@WR>mLyE%D9L&UXsxsM|^q0i8@^1;=%StdS4pZ za|`l_COVwJvwaL`ho!HtZnw^s5QhBtahP>YXGcmVHINM|M3*Y$!jH6~%iA+$rW;eqOE#TCAH zyBIpHYoUUVe*;6zMEGl5$@E?}X|5d{tI91XeC%$8Wu5{rn{*eao4|`I>WuAvqQ>Rd zE#t3t%qyr*TyJ~5E*n1xCHdd48#>*t2mA6sWG|5Upu`U}=DoxBRS0e-ma66DR)EFr zey83PKiI2HdCRqJdf^yW=P6GaPws&WLHH*p zz{?v~24eIm1K^C5j)nAljPL2JbDQ%s6zLRp$w&erJOCw1^g|GI1`$q38%#%WaJdN^Eg-eX>;kHGutV7{&==iJVkV>wrq zH$8xYny6X+D1@E8{B@0CaE1_1Ra-M);NDim-e3L^zDea1f2!>7YVxm|yQ{8W5_aqj z9e5(ToUplV)Z29Aj~`d>d4=7~AD|>qH=THxabWtjry~g&vBNiCDt%JwI)DbVv-QzW zMT$x>rS2UVss(Pxmo6EtQ^AdL8{ZZEk;U&hiryN(4d48T^ZTT>QV>*kH9YpoyLL1m z#>T^*WjZ>=K`NRdY-}?vs57wV)!5{Nk^`x(SrXXSyVNKkBfY>NI@5FC&cVKu`UxHV$A6m44E}0f}wi?sgreiP53@_Y}X%CgUS<=`yIyvj0Bl$M{57 zI_<`!UhfZFp&aHun-soi4&X%mFyg^;#tWR8u zg8ls&dPy4>NHnjlm4l%PEe$pbBBl2~@hM!Bi2V(I1Zj5$GA^|F$wJ-?2n_s$CZzwM z=vaFyb<2NEzL_6kx!fPLX=8JP(f{)vY)yg#c;9Z!syfrqs;GZ38Vi@2b5344|D0%~ z=wSw4H0EwffKcHl3_Bij3D(Y=+Ri7>H1)07L>HZ=rN~wM0t_o)UiCWo^k`)=IoMM( zVT3%?CNehs@F(rMbjzR~9btF!;yvzE(DT{iZ3x=;Jo>;^|Hie-xIZnCXqxrH_aGt#>;ej?MljLxfsRrnAw8ydH7bK zeZAK}=mx31Vhr2Kx%MRwI}>5^qr(doz{G*m)i=+(*jQ}1zaje3&UfX;O^DU;czB+F z_i+n~zcPvaBynO!b|rPVfbWK)cdIX* zbizp{w{<#^zE}K1mhh53iVuSKNQUNyd=FcCxU#V*yq>^S%nY@5p$i z8&F61x@~cF+#WLg2U726$%KEA^>~BvGQBm_iv(8(p)Apyahgq3j_q$-4DpVW=%;&& z7IZQzWXKQ0gG_XVKJp!Ssk^PuHsgNs>E7|A-DqE(W>QsKALC|K@WC~bJqZrLT>z5Y zq3x_$+!0pY$gw8w`NFF0z~0U01bDh;)t za=^$ziNHiNRko$6E3`cF+1O2a4F_M;fQRn_Bw!nbM*%5N=Zx5|J-Bj#kkg`5Myo4o zFYp{Pps1_%>xMq_@pZt}(4-!9`NtOZ`_W$f=d>1TYIWPbs>43>(fdTR-q}}ea*C{r z;KqraTI91|4^SngsqopB2RG2dzeJ3wM_KO+{uETc;1(#L;J{4!Bq z=zCfdJOoaVg+uI&V`h(xz4`|6 z!%!rTIU+*d(2C|smJ2n~(2FIefx_aTg=bbRVRNc|3?`V&?PSzh`=qJ0nUG&N?=!vG z+tB}{D*&Vk-*n)yD?UT&xY@qSx19uha%~n?F!0 zx>W)_^X=vX@h+-T{iBaz=HV5uW5z#s7#CfAu6M%^6|#R|b9_kX=sNN8@j6CdiPC9R zp)2~T+lS6}8Ae|b7H*hUvD%Uyif7qC-j*Pkp!_`2S@jRyx5?H0j>tQ^<_x!o)z4hz zz*+BmIq-6tk#WmIoaj7Ce(U*6pw5ZBaqvP%KNM8H*5px&wK8v3$SLeDNyt#=l;diS zf5ty#OnR}R6Aj{QwZAfbXk%E3K41Cud2|`iIg#_pKdBh&w<_PCoFPy<>W&GqyZ_5? zd;)$N*0RXEPiE^>7(EcE+DW`P*9K?n<%XEq-qYkzibbT?9?6e)99-e|GaE%rB$o*=;k33%?Z>LW$vd0$Ih1V(M6qTv>0<}^SFj1 zWo`e;;~Ba&a+lAqul<1XxwsIJYrzt#J_{qiyzaz&Ca}DNr2u1B-G}0M-%!=GJU-K? zyt+35Wv33b@lF^?I078_sJrG6eh^E0iv83RnK%xHIGbb2KWgZN!~0@*0DRVOyVxix zei{1UOFOER^f$ZX5e1Z5UJ)TbKT}?WwhZ_TSolcLeCs+*?T(!ruAVIlbCWQi{`8Yr zDz#!N*LUoieiG=N9`MD zYbw#MkA~vHHnTIh6^6+xm8^ObagZ)ibWSfDhcy+r{Pm~dw@c0(E zB#gc89hV$iH}Ld@`R%JO>B0Be?G@ItwDw#31iJ?wlXaFpjjHWCCv(2vs!H)1(mvBn zGx0m06P<~j=L6GnCVsd*nf7EM*YpfZMqbX~_*8PxW9KWFlYYD3as9u1?XCv8Yb!64 zTkF_8u&UHV6Et$v`g9!EgoUAQwY$>SDB7|e z`ON(9?kwB;1ZZH(h3D#U-E=Osapui)b}nIi^iGb?{$t+#B>L1^>|+h~6CiS4^d<-| zen_i(CB2G3e+GK4ZZeN)~ zTt=^OJR!vDj@FS^uGW!RFyt1#A(P@~^xr*1fdQaw8~^Uz|Mqzy?9FAqZCvZ>y<8o= zb-i%v-Wv)F-K_T4yRD~?@4`cR{F?T}%p#__`zn_5)b{(qr_s##OJSk#V>hq}1vI?4 zssR!=^$0j$R>1nmT~6NVu0SlkEGHuTgeZY|*p7oG;%d+>U44>CtYBO2T1oH#vvi8! zP5nC8&-wwU9gwIm{!!BBmZ|m&k(buP4;>q1HJf$+Hlw|jmrv>|(qot~NAm_nDIPNA ze&yu#nv)bivB>*Uy(WgVGGk&={OKqkM=l6NRW);RUIxb3JBn-S0KSg}q1KhjhgW0s zzRbfa8hZ66Sm0>Jhn;gZlgZ|ig+13wcb_|d3fig}P7_;JpKhV+#x}F3^W#pO#U<(! zIhomb!ajL&S8|?LDt1`E-MI&JVPQ{`uV-FPn9`{LA>bA&HSoqJ((Kkt zedXn{wsB%>!~4i^*R5==yZabIU!?AFac=E7&+?m(T-Ei`#qN2e#?@=-;rY1@03{Gr z$0X7uPf$T~-Xmz)vE7w5k5vsXXKrr!&}!*dkZ_apzIVbbow%ed{k8Nk@krP18cD>h z%Y;+&=k6s1eVMQO1*we-5-|$G&gaIL@&MCgK~DL9(Kje;jeg`4_&&YP7A-?x=85#j z7&{*Qi1g6lBYMT!xv=L2QC!|iAEUJSw_Q#aOEdK!eG z<;N#ti;U{!>r+Rv0ag}Amu2hnj=V6J0l76Xpx}%lP7L$(N@T3wi)nOW9~FMs_M7zC z;Mmn>JT#~AT1naH@WAs)6)hbvzFb-R1@Yf*3nx7uR$H;tf^b94uVErrf}I~wa5s)u zC(&oje0UuMSsv!%YU9c=2lafcu9VTxpK0OB{^648{1~fSFO%S>$4ILC6&@0j9+oNb zFTyn(J`5>X5z1!eYAbRVZVhV;Qk5t5dVX^)1@USRmTL?PwIhnY>gf^-K;G&T_E`7S z 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 literal 0 HcmV?d00001 diff --git a/doc/img/powerline-arrow-fade.png b/doc/img/powerline-arrow-fade.png new file mode 100644 index 0000000000000000000000000000000000000000..0facdec653dbf938211dfdb6c9bdc1ec31eedeec GIT binary patch literal 14638 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 literal 0 HcmV?d00001 diff --git a/doc/img/powerline-arrow.png b/doc/img/powerline-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..e887a36f848f8cdbe3539fec411da6d8435ed1ea GIT binary patch literal 14396 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 literal 0 HcmV?d00001 diff --git a/doc/img/powerline-bar.png b/doc/img/powerline-bar.png new file mode 100644 index 0000000000000000000000000000000000000000..4c810f1c1f464ea2df7db3a0286f4bed481f5a48 GIT binary patch literal 13994 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 X_b9<&?}~c=V8&8nKSZmA^#lG7lRNv; literal 0 HcmV?d00001 diff --git a/doc/img/powerline-box.png b/doc/img/powerline-box.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec53ca6d7557c4bf42e1d917d5c222ed811839e GIT binary patch literal 14250 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

_fedz8#^&1V0Kl52}z)$fhOz$XujTrdOm( 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 E1MIBs!2kdN literal 0 HcmV?d00001 diff --git a/doc/img/powerline-butt.png b/doc/img/powerline-butt.png new file mode 100644 index 0000000000000000000000000000000000000000..981263cbef605ef08e5436f2bafdeed95a3a4fd5 GIT binary patch literal 14112 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 DfgV@$ literal 0 HcmV?d00001 diff --git a/doc/img/powerline-chamfer.png b/doc/img/powerline-chamfer.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb4f4b31193ae7ab01c425155485de661cea687 GIT binary patch literal 14058 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 a)ep>=@n$e8*7cv6vy_;;Xtl6m;Qs>GaUrn) literal 0 HcmV?d00001 diff --git a/doc/img/powerline-contour.png b/doc/img/powerline-contour.png new file mode 100644 index 0000000000000000000000000000000000000000..b4112ebcd23b63b22f99acc935f931af8d21722f GIT binary patch literal 14282 zcmZ{KbyQv5uI~nlyHkq0ySux)ySo-=;}myyC{WzpDNb>BcX!?J`kiy%y=OdGf2@&} z=Hdf_q-teMi*y&5{c)k9bX9RJU z;}upTKDhc`=Z6(Twmiw#n-oZ9I*$KwE#ui(e1XKthMNwKpAX+EjNsxK#DoF^{(6*k zlwioq{~GXxB#`hLY_}s(5DRIIzhGnqiY#af<`zsDc+uG6<0nK%vh_^6!5sy$b+Nf@ zA4PPH+DB}q(a58NX&;%*o*)WU6{7KBIxPQiRISBd$*_o05r_FQ{u|yHKN>HAXuD_p zqi(==0KtTUSv1}G53Nzq{VS2_rU}lghuPycs5xz8>k`a5;nQRi@lP+8Nofx+kK%y$ zVH}bUiZOlMqC^GpJL;vC1RE`iu-c}cD?7ris+K4FA2%n0EP2*|M-pxYf$KQB>o0(&901e7J1M#wSb#Y) zU@6aQP;BUOWLlRJp%;S2%)Az$&c!#$<1||Y3B&aBAe}>( z5uxt~?d8K{Ls|BDIl<~datg6pK_K^%UgIDH5MM)$#vmIZ(FI`ELJ6ZF6^0xWVf}zd z3m72!Dg~<&eov%2g6k5*MdZNUj2FMAc$;UnBaf9~;JO~9((^`RN26hYg zC^1C_6iPbhe^E}PB2UH|`(hro8h$G(o{y&d^_S@{)n796m}=;!V5iJBFzm6JqV&H3 zB>`WJ3AFGug4~VZm%l!SlI{dMA?YD#_PaaLqMaRGbMYb96xLbsuyN|(jVg*Z;;+Kv z2MYWU2oi|t4sj6i$j>XHoQ6N%!jVDXl|U#8V(#ZMd1rD?my=^Ift&krBBn79{Ra*! z%6tIM7&D>iBm{AQ!Z^-oyzXK7ZCUsne z{)x)*&IzOOCrR8%p^3!_m`MwX8{|F`j}dk;*_nC)dZFt<>sfq(d~xsKUbHW&x5)dp zp17ST28fPP$OEOjiaTf5InT=P9&m7Q25{zZw2^>Fj7U|CC8~C63MviQ#xKf2NPQ_N zqFfTcDAp-ENqkFx{>1n>|I@7`x`a&0DWZ6QVwZIno5qC( zjE0_uvs|p)q&!PavFxyHv<$M${g?DSbeU|KqjH=QGF&CJQP*G%!8e*W3dH=(#<>_W~$J>r$-8Wt5Rn?oB=5r0OoM8^ryg5|;VM16^L2}$ss zKr|O87cSR7m)(HafOnH^(|fbU*HeI8z_44S`+GN}KZ8H(2k1TR#SlIoo(lFEJ{#j0 z?U|U0?3lQ+ld||GBsAUc;wsFU$dfrMW@M?{ejn((e_(0Tftfp=Vs<6Y-4p{JUH2(*he03 z8F!?jq7kE+r~X5AOY2RQN*zlzL#s`LuY9U8L}g1$N!vnQQ%?0utYTg1rJSZ3_oq$; zPnV`u&D18mPwBkpf|L!W&EDzyDZ%N{{4l#Gn-p#eZc?Ui=4PgPW?rLMBY0D_mETP2 zZ0x+l{6|4ip{vkQH$$auepb<1jbw#osfUiET%P8Z;%EIwP++HUVxOOAbU}o1_s$R0 z@Pstwn3od@zK8G8}B}WqnZS!igSF_`J$c4%I>P6YP{)O#1kn5NSgDaX> zhKIn(_k7?KV|#u#+O^rE+Qs1ej4QRv%Qnqb<_S-yqLtx$Hvy+ci%|>jrP?LgQx*XZ zGIX3yoO>cgGx?p(*T&yeIqY41@|O{QbuRbyV}7HrQ~AmXRV z=L;YwU=A!QFf7m#0{BJyi#oJD6z`X%@c2;Akaf6XL`1j?m_39jI|AnZr#eOcqRKO@Tuz!yD115y&xDvMBN+3eU;E@;sSg zbM{l_yYno8rymgzI?yyoBGCNE&6IcKmSjLFW~sL1NJT^$zeI`@jriu|%lOUAzJ!EC zX7`cp=>s_v3$w!!fgmF2Piyq@r2^I&SyDz}Vx+?nI)yv7ym$Up-}jZGa+11oPhH;(`F zCI}Q-9VLTpTdq~%Qo&I!S~1M1ZFu@ixw5Rxyk?>!x*gBe>oD>xC9tAhQ}=Y>jOO&~ znQKj;E%TB^jgKB-x3NnRsAP7c9V#%aUZQ;{o8lLBfpx)3k5}hlnfZ0#V)B0#fR8N+($DP4$*TLJ)(-Gk_f4Yr_Bk*qeW+w`%BKAWeY4TF?HICrB zwfn}I#+k#J@=4o5#r)d4){e7kp0D8^`U_e`kB|Y{ikD#kwXhE>cmD64S*DSYzaHSaRH#j111zc@9ep&0BTw@vZ^=-^b*X9 zTKCCVSs)O|h9!}>k|+*uks47;4_Mgn$urqAcJYaRMK?k+Ik8kV5}afnE*{MpW*rGX z(!_E?LqLN={f;?3ufT8Ox9hpAJ^YeAs{f-p`EB|wb%SC9n(s2n!CS*C#q;Qy?D_R&<<%B? z1Tqrp=1W6}QfPmHtZ~u~1ZoQ@qZodaLhNX?eY7OyGuh@AG7=1dnly)uvviC!Z>m9Z zf}7Okw3@}H@i<+eT_j$76px6j+H<;h?u&D{?-BSBdTi*Uc=MnJ<%D8JGEVj)gF2%s zLmEG+zs7yGTBx-7>&s1)gt}(=k&TrNB!jG>a#y*orN))h1gQNp<~qw65&GL)CK9`4 z)Bfg|Eq%NGqK13vj>Az`!rLBl*xDK4>vtv(HxDeq$g|sv&859*+lS?!Q`-^7Jr{F7 z0$qb^a#cIy@n*kr;LiAz-OFsV-#naVoy?>;5=Q3$(*!O#jXA9a%pW&*g9jz|6vyV| z=Jr^*8(bRpT+`U>w#S+D?XhLl=Zy;SQI@iP#;6~!*cdK@#cAr>DJI30+JT8z;yf=Fc>a^$z_vP{Z z1}cA#f?xsv9h4o!E*c_2ogkMELl~tMxf}64jyl2*<%z|g##q4FU2qU=GPr+qoq9Rh zqb$bS>m=c;L-;uhJ~Fgfv1Qtk-h@5htXt#G@D}Q=SVv5- zyy?Uo{g&>|nw-6fhuW3RrfTQZ9pJ&JzU$1`RMOq@q-ak+ydB+##HWbR@~P>8Re+!A z`tk3m7=zs`+WniF6x&e1ujxMQyV`rziPm#R(q0Q?u6(S#e0Sd458=W*9#$?%R>lYI zkEm_U@)|*G0ft!LGmyV+nF+Vo;79m$TuPpOMMRI<63kiqH`b1uw17jUgW7L8UxI(r znOHhCm?iB;VR!}sim_%gXi{F`CWtO5x&XlhrbKhZhYfUyl{t1B=W$#Pt{P5*uC}h9 zyKTL;{k+3zgNy@P4BHg7G+I<-1$#ZLVo7Uo=?O0e9k$td3hx=8y5t`>$>nn>_Pgx-nZsJiwlykm=)=etIezOr?zo z>|U8}R~(m~J7NgIA;6MA+J-2FM~4|8z{92?8^(F!WT2aWoj?Im9NJZSWE-syKeNJm z!xlyKN#9FPJ#7g%JsC;f{!Z2{W49hWIr(ZFuE+9#6lGytZ(x?T&vkTrRE_^t@O6K= zs?&8C`LF}ySGEyFm?RO z$!@ow6ve4-+Ba}FV=WbVXBsuA)vlZIZPqLC^UKrs4dO2vp0=YGw)XTM4qF#(E$_Yg zAdPVOBNt8QIJ>K;?jjHYgv3;%ffX`z4@vB#{Noe@W0k`o@Cevi6{Zf@7Nb!qumCqI z1rzdzRJZ|?!|rHEKc0Nh@L)&P`va2hFlJFx6P zMiunZAU-Fk`M{2C>U4mt)WHanv?x?OF9!61sAj&yF)3UWnnXrnq0)g=PD{kRd)+nt zGv_M651cC~|5b_4Y_#xQJUh>Z;Q7)K#)U5ZS^ zDMu6W!?#Q;9h=n(w|2MS`{wT2IpoQ05?IHAKozddDSBsXt18rKWEa?B=rHFrrGR`1@Gr z@7*lSyr$p@<~0VN#^7qx64gBTqKcz#ot7s8EwmWQMc0+H;HO_xm4qoh(n8AHrQ2P^ zp#_HhF{Cy{Ff*vkHGB7ax@dz*6NEzR z2H8v36mZ@*O~KNKwvV$_&QNj?=6hU`ppRxL z&`-;!X|vY(z2&H6{_&#@6NpCy(CG#D44{gKwCP1z21iB#PZZ*y0%PCC@(k3tqE+Qiu~) z>9CB^O!WweYpN;8O9JZjf{4b9rsA8K7Ow|>v?#C6u-B$=0cE^vU zYNQ7WCMR>}iI3&}k>{gH3FrA}-u5=Ot6Lv+Bwvy>9aEot=h0NBcI|%eFQqB4`IKF< z$zVv+SFd>Ut=bQ}o%oPYnbVOquTcNis_Hs*|6%gBf;1&bv%%MOJgk^IATWru&qvBv zgXcoX?1TAU@_JF~TrEBRR7Q9;$uxogNz!_~@3S+OpkBnD@xc1+3dndlM2I*7#$NyG z6@a4z;ORwcC9V?;sC~aW+ho=mYw@~ z7`{mM^`xfW#fB9h72igezVGH++3OLMFG4-iB|JO457rJEH+~Mr_*c%cA7bwZpJb7GgW;!2!=WT^ z4Pm<&fOl_In_80{!{};B-&Kz`r+kw?FxdPYN_@V5C%DT1Ma^q&K!%IYa$a4f%67_* zk4tJUYuW&*KDj`q52e4SO4NrIMixpInhZ00So|LKoUVWI``fp1AXwkeq5h8Vix~g_IE1yD zmYbHm9FM7^J%h2Cqlr0#r@hnPasmLr=gISzv^RG%Ci1kmb8zMHzT+A$ZRKz6y3;y?upTx?|&54JR(Zj=o z!Go2-(Z!OHnVXxNk%@(og@yjF2ED77gPXA@y@M<1zm5EFJ7Rxl3m0oAH)}@+qJQif zn>f0=@sp7JY8`ACmt-{u2m~ zqKmcp-yHpu2?1t4#{Y}=U;2EE|D@?Z()RB@`4{(ZrwG9DG5&W43&6ddMlu5c_^Q%k z!fKvi7y7VHdV?7sl0|QL(u>wPsrJ&TkzViY3c5L0Z96-2ev^^O7?TU*r> zk|w)yj+9l}QHPN_lo4U9J)_z_oZ!$a(M06Y=1Se>%Qpdw&l*YoyTj=}KCV)vXCQUf ztJ9A+;OE&=&1VB5|D7^#@5e#I1SB44H>6{{Y3}^L$5{cBU^x)~n^AksjY8wN zQ~V&9*wNRt;ZN6kJX5BvhSz%KYG|PL^zArn0jaN`p%x3dijA6`sG4&{1CR8VIT5hPn#~pc-nKf z4jOCx0_t3#@3*cw00}4QJ%CH=wc?`_bj^fK6lrtTZTJ-NU(bNn2#oy|NTR6O25Mb4~2PI(ap$txgz z@jO5l8qN(|ZJHMRhO`paapC(U=+Stx#ODeSA@Jv+!$T4p`K<^I553=_7%L8+!ie(t zZoK09f%|Jm%9BQUjG*w?m%*L_x19XcH_xh5Ro?!|94kNmDXL|RdI3W+Z-e>C0jUb# z?>=b>S=+1K%UyuK(>3Q|c`ml*fq$n*y?Pu>6p5(M(=c@HyNabMzdQQ^B%)Uz%Ly`W z*dJ8ly9L80fvYRfTArHoe(@2ZhPnb)dAWV@WG>jMUZ&y<>dx-{{(LgZd-<8;EdE*Q zcwu>SU##M$n7%C~=yKcobu!6^if*1tF$wE+t^MsJ?Jahu0eMTfq}7TRiJsSW<0%2fWzx7`k4v+b%B@>#B-z_>RME_m7v;@P8PmEXr} z(B$Qmwm3cCZ_v{z!>uYCvWGep5{L(+oCg_~jUU}Ms%x>K5rcOcd)NaVkiwNsp2;po z@$%8;eptwLKWa`Ox-{@*uz$afIL8@Qf zA>6@%IX82+bo|(K8p0oe-1>1ALz;|&Za&y%cY;PUB6EXFh=R}U6Pmf^a}wd>fNsj2 z?5J~`G_cM4IQD^lKgj>>B7~0|bmi+3==~ZF2~0#YIoY%)cPnbxs_tt1=~+UWX5e-7 z#qR>%BcZQ%%a5^_5X8t$o0iycN5w~zDFF@j>&1mU2I+B4)s$oI9^;T?66Ji)ymqEk z_cr@YsW$IsC^6hWt-CY5aCg_**DZau+OVLz`P-syOf09egfXo6;LzN_G8JvynRbMo zD$zFt;>JcR_QBGU1{|Z3%`AGpv^F^le{2vKjw_2ss*=f&ihoP#ucCrfo^SRS74{H! z?2g^iXh2e+=wpguz6L=ax(TWETjs$#ZG4(_;&2Y9Hb<+{8i`qW6K%uE2d~Uv`pOEc zR1H3#IC_$5AyPC`z*xmZ$d!bh+fPize2>P#;{$tgtd(AO08&%*c|k4_RAXa>s-mqAn=Q)ZF~S~4L4VGT26uMQ2Z%KU2?fE( zr0?#oV`&a+QO^gWd-17cB2*6=3*HbAZ0`O-T+Z(oJtP^Xjoy_oQa%C&jpO*`8zl*n*fXWN1j+dMqC@?-$dZ$Mv&0&6sRy zN*hNDFF6Rix+!uL(h7LnO>Y(%SCWK%rr+G+DoPxqC^vI*Dq)VE`Q&$kPTdA+Qol5g zKK*)E`m3iQW;d;tGXVnO(QW1+Zp+nr;*QOLCqMJrchQb8)WaKCy$6#Cr$VlaUxw2`o>uCUZ?<5VmhvDJ9IB2A^S zD(i_DEX8kA&k315B8?uPb7z}2J@K*^+BU?sR*Dm)h6i$kD^ZR96o&Dij{MzOm)%wA zAHI#VllkDG>l4)iua`-Ag*|@v4CU6H(v}uOe~K`h8k_9C@_!EIxLrS!V+BcjCj0(5 z0+AtCwD~DZbcr*Du@`A8uA=0<;(fdGju4^8f;$U6uc`fZWL%g4bw<6wduKEOVLuAX ze7~)4doo>SQ{KL4BI)4qiDE3`^mIrP84;a7@Qh<)HBq$p9{6Wes+l$_*m}{S^LElX z(@6UBWXg`TXa+<^fV)_9WNS@ot2CwOknf}QTW50kN1f+o0>0YledkS|_F`vsNe4$I z#>IstB1B`aq4`p#xvXlol~Qg1${Q%}s_0;)Ok{l8sVFJG4m4Zpi2hVXcQ(;Y`JOKI zEYict23a3lqhn)LN+BU>9VDSG>z>1|p^brsDr}sP&}jEtqg=rI2gUI4AiWWhzW>^V z8t8_Yr9Pm=WgO|OiZ}@k&|g^O&gk>NlZ#S3vwV%hZonnG*9nOu`Wpt~yNFEY^sz?^ zn~Ki{dv`x63WT1Zu`ye*rHY*kTnysM5_Txt`%9s;C@WNK6-#(MLu8drEQ;4IU1)6> z(Co|}!>{+S{akBuqweb%jVM(Q_T#fCNg_4Pkuq-A4TJoBu7}9ZNxN#OwnDVxw;#WU zsOF7!1S5?<&jv5dvbkGGT>{3|On+HZWmoz1*)QBZcun&6 zpBux=%5N;=N}HUNlfheq--(5dI?9km3~|{EYS}aY!JJI#G4AEtPUCO2HACNE^~ONJ zX}`G8?n+r{PGYjF7L!(ByrWiY-GL*iY$$>UpKQ&y5@L?CIMBR`+Z=!~b39G7;L5GV zK(ewL25yb81I>!5#Ijm%VkyZhgniCPGd!KmR8K>cuo5@@diR^L z8ILi0oAU#UE*Bjfn3lfFvU$^^8#g_@o;_8|QfU>#vDdEBwf>XDG;0Ip z=E5GKGhwq8?#VF9Qu)2<>S{aY(P&*8HI2SOv zDLkeiYXXUjagAysu-Qit5HPI-5#!v+M(0gjIdZmJzm&;)T!FknjNwxlKh^^RdPti~ zADL|NR*;`ryoyE(6E|Xf#+%;5W!IU^CUck`xOTU1PYw)=MTV=WI-VGH*}d3a9GiP! zW4Y+}<{{-3Z3d!xpKeYNgz{K9+Q222NR0Lr%P7m~AUd2Bvorzf@ zfbv;_{k2krn;;%Fbg1{iK*z~}Kw>kv7T;t)D;BGYest({W5I?JId`>5$TyWThCXOu*=)tFxbfROirG zrp~NC@H+x@(Z_=1A#ek|xg_o1(SrW{o7LQdjSQ0$GY`COG^HvO7Fvcb%Ic`HfK% z==L8}HZx<^kKna`onuB~Y91Wz;tdJm&_jhumQe}*Ufq|_2+FCkMk_Exd9CL3n0@_f zzL9gLfwq1K93==ut|PXFr38Be_u1<6F|8K{t}qL8UTib^1bnX%wut<-Y*^3fkmz$yGtyr4sakU6|i+69HY;MY&}_fO;N^ z^%)v+xz&}jThsJKkaJtbn3Yi*tC_+Lc%2f%xNPz0d~BDmp5_O6f*!H^iJEyAYf#?c zFdRGzVmu=^+?m?S_To6#Ls90y3T6qnk$MD=pP*y<0!UNXdr_*H0z{002jz9<+cVF! z8=9keaBJXI<6oLGZ zKcT+6-cX#b!iAcq<20bTG&{;5Trr@9By8_w7H#tKEg$pM6Fd8g@A3!=}wYj z_IIf*RUmrRdPh^pu2#kg9NIHqH)r}fnRiC=Af^HP5m7H7{|iL#8raQ*l7RmEbpRJ- z4fU0>-nL-V9yuLUZ6Yy}H1`W+u5>JDPz&cbgY9)>uP6WDo`cjc^Hnm_Fed3(Gk6jc z=puBqziYD9KvOLdsO8Kh1LP}Mc+W!Q$X@c5m)$oeHdX@B<39}AlAP7cjc+J;3BDD> zF+y}}^DR8kdd@`dD{#gMNq6AdP#R5@yDF%`OG@rx{2@>W=0LZ*s1g+bftBljvOt z@&Hqe_5+PY{gIif1@2bt`wOADcjt?}iBT*{DP|!&su$RRJy()Qw`ouk$(I(&^6oDv zN6$^#XJJ;KN)wT?gQ0|c-?ZRK$lPEIP0wYpzM@J%FK=-uq}$jJ5aXaTBkrvezlA@W zRxwYbRkPHllR$EvWkQ;a3(g!S@(~}aJE2%&v>*#jmtp}l00QfE*}ag=5x+@Szwm!a z3k&~7ZIBQxH2bd~Iqib(-rhqt35F&&H?vm3WS{?`UV_eakY-0DP+C&UlkCC6%2hqU z_SY9?>I`R}kT3)$0h1`%{$9F9FFu$8IsiHftZFpvKsnOYyJ>*80!-l%V+|D&lYeBs;!f6IC z%ZpM})Q(S+glh>?Jf%zdeqClsB)`70+i|D2vG7wOBs@}!huqQs?veSdpuR>|k>{N1 zW=91IIFGt_2-mnP3XbLZEf^w2wf|_> zOl4AV{TQpV&pw8Jv$i-g2v8JRR4V7Z>#~= z1^MjC12+E8V}^z5EVN;}wev=?oy6ep1?0UvO0ueQ-v>!8(MF?PR%04=(=nexAqqVbE((YP zqGxWK3{=)2xp*C61&012laLOoQ%SMmNMZL#zmZ_Xu&WjEnJa%Gi)OC4^Ue*K&E+9> zHUkwaexwT9pT9`+ls@O;X56y9$7R$mi|{1geUN6Ne*P*BRL9VcP(SBO-;njmlEX01 zE>X06q^{QbUg2G61&oTwHJBN7$m)CY&4xirM5m@3SwBC0I_`#D5@$z|@^xDCJy*@5 zqU4v32N&OQ)H)8%FHIHjLVjjIK;VW)k$FwPzntmd)asIVVWqnO53hI(8y*T>qv*#z z#N8f?y+OG&9%+R(b~KUDE)K<-+9MzCt4kZi(LKY{pW| z)2Qt?vTLZ>cSDIFEGlA@DNW$z&tKpzV;r#$Q`^r#pXb}j=xXXVR^MWAxHthdWJrq1hvwpdZvyxNs`T~uBWK+XjB#RHSMp3&*FGUPsAHP3ehLJ-%DD*NpY8~rlHJ4REXI1zj zBjQHXsTl!1b!dD$Phvf2OD3CFHrDw;h-=IJ91QjH+_&JDC{ml?JzlMtp?CX|?K(WE z>I9+<(XbFfkGeJtFnPXYXjVtk7z6i4!8e7NA$g?f+d)M3xRUr0 zw`3J+qlgX3YXSE9OYmoohmr88CKZnYycDt%I>&Y*K|3eo59O&Nuo&HqKTT{L&Whh0 z85_{BCYk4*Hm(keU2M3TMaR(uGAf_X_LiMIZH!=vU}atdk#``UHVkA6?CAT+Aji)D zdN)O>d-5vidzC>21KilUt@gsb=*<0<=J-40R{0B>IDgayPV6 z$0ByUPe}xiCzAf)5LT-txQXX^NVLi} zAk+@B^PD+ty?933t19EMJ3htfo@Zgm!=?3^v8rv2yy-!A?XJyZ8YZ-B$J<#;oNG{` zgKg30`x(Tp=?n7II_)IAIq~Us#5h|o;fx&CbNB7^g@QBUY_Z7DeOG5owhR}&?a&|5 z7Lq3y=;|Uz*TPh3tj0ww9uKquccRp50C1$n)q>DXE^9oTyn%`hol~1sd8lldu=O`b zA3(ZcA?@k!J(22Wn3k!2z9Y7l5xrBS9?I7)v++(f(J?2(#W`0=HYkn(ZzCuC(+g*s zNZV;5Qh2O&KGbbNx5xD94<5|#Tr+=!K_l%E5 zlCaY%_1B8-DcZ4gs)Bpy-R#n{#Yls51O=SIzb8YlIynu*apvD_ny1tIRn+@NE6h?&%)9XMh=9R!#-b~boDz!p1L0bGW|QsbFj`Lv zv;sf3{p0u8@W7Z|?KdFGZ$@98P9$$J29nM<)yNd#kr76br{jKt*IWuREc*7F93!7= z{T?0En*+X@bRD9A+5V2icYGuKdl#xa!2Q18von}7WN|dN^u{F!(?}_3r&N68_XY6< zFCB^XI2`v-nXFuhJ@xTKNac`JY$(e!mgshahy9+JtizCNt5<)Fe0z9dCCj8@pGls_ zLv)rvgVQ9cXOc6zn22)r;5aS7MaKTl>koOg%PtX&PpwF))8ZOTZg_7y!WGHAB;eJ> zZ%~@~Q)@J%{bn=&lT@|@&DX1ihbtG;x&7sg^A3lJepMp7q9uSFtI;A<;s=@@3-O41 z1GXO9R2}nEclfXs;BW}|u+6dhf4It4(hn`m33hz_H#Bp z(g?l4!Qh1fO!(Mq%d-F*_-B6(Y+v3Kzf0+9N6I*1@BMoY<>RmF(&l`f_s!Xw)Yvu# zkF6u{()1DC2I*F6BhQCNy5GDeA^AX|%O(#P0HIKye2sqJxc7;QJ z!3=C&Wl)q8rSjy0VeKBogp)Rin(_GK9ovJOKBp+5E@C0F-$5J=z55*`Lz4K_6yc7N^YlL*6uoajYT+lIX&h=4F& z`NZ)c#m%DbhggVq_9@=(2}^p%Dz7`~JKvUz7P>qpJEziaA7n_Lo`HOrTmU^p1B zyGEsU!4YIOq=5nan({rnteyK6d~=hoVxg83#dr9ej}=ei4Z!>?{PU{e!%Y?Wc?KaLNB!r~L228b!l-0v1$>cp#KF&KDX%r literal 0 HcmV?d00001 diff --git a/doc/img/powerline-curve.png b/doc/img/powerline-curve.png new file mode 100644 index 0000000000000000000000000000000000000000..6d31e5ef2cb397e65ab1088950ba847f318d0af9 GIT binary patch literal 14311 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 z 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%0A|B%Ka`3j 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 VcS&Z$L>lUko{rJ2a&7yF{{ym#Rx|(r literal 0 HcmV?d00001 diff --git a/doc/img/powerline-nil.png b/doc/img/powerline-nil.png new file mode 100644 index 0000000000000000000000000000000000000000..9da702e02008cc6aa3d2983343da2cb3159e55c9 GIT binary patch literal 13924 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 StxW%Pd!@zY#p*;1g8mPORN0&W literal 0 HcmV?d00001 diff --git a/doc/img/powerline-rounded.png b/doc/img/powerline-rounded.png new file mode 100644 index 0000000000000000000000000000000000000000..966616711de53fe83722151192cd88058836c51f GIT binary patch literal 14165 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 literal 0 HcmV?d00001 diff --git a/doc/img/powerline-roundstub.png b/doc/img/powerline-roundstub.png new file mode 100644 index 0000000000000000000000000000000000000000..90402c68aa7c320068c0da1171701c555ad3607c GIT binary patch literal 14147 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 literal 0 HcmV?d00001 diff --git a/doc/img/powerline-wave.png b/doc/img/powerline-wave.png new file mode 100644 index 0000000000000000000000000000000000000000..d6090f5a54f9f6f086f8074bce30ae06e64d8a71 GIT binary patch literal 14321 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

lsHKP3Nw{3j4@1t&|> zzcu=&68wKL|AY5m`n(MPl<7ap_U|?M7x(X?@Wb*l{GSEphs{;V{sjQwc}a;1sd|81 z=)ySQE<0Wf`WicKL4lw^2?exzNTovApixK>K?yJa+M2&&Fmr$Gy_}c=XeP|7^-kUR zf8`1If4*P(Z5Vs)9Q7?7<=YgP>w84PGkf(OgA_x>;4}UYLi3$ZQ7J`+XwLNAVKTmS zviEiJg<0uxK9DS#Xp(LbjG^b1yzBjxz^>9d?=0H)eHQBEM#6p4m8F&SOAxnp$hYSq z%!DxR_xCIMWA8yrOUn>}V9;`?KWl3+{;kX#vRCPE{FCkRh^pOteqJZ#0%Xbit7mH( zWnkZPwQRV`SVV$zXTd(70`!pbzfjh3*`6*x4<;RnqW7smP1muXd=ud_xKLOWhjwsv zH|c)26cz2JwJi-g6)r9=MvEyu*q(7?46|Biiw2_I6a3 zcPG_e%`!tU)^xRw9dRh1d>uSu_`4Tmi}z4>(IKHSD|{^3OGyWwU1h*>^IeqoP?Le^ zR#3N+;Zm{hjW=~HDs}ZUdy0V(;@=qf3@E+yxXlCQv7+*h;*e6@QswTaz&M7el?|9ROD5h=@#A4lQsLMgSa>+&N6&Cq$p3;-&fY$**{oaoEPVJ zdd+Maw0Pufx2;e2^RNT(guTrHA=EP$!Dxcm_BLfUF zXRM7Gq|yf$o#qi)enJbkQLUdEZgwC>_hAylCj)KPs;-rhLBT=CIQd&Uq}EUjD4RZC z@NCUbiaN5S8;$ibbp2ZLrs!4_)XXtU4AbSCfrjmK>xJ6zH4kbWzanT1ZfAa+qy1bH zR=P2pg_~DNW@VmH;P|;P=b&G^n-|GWq5OE8>T*&n5_LxF($|*bAy;e+eA*osMMYhB za?Oi&AwJtjj&;Q=y}6WThJaA9Ik}V1@y&IoJ|C9fGr+vCjV;IdU6_K*F2%zFRWZR^ zl$DIXr|w$Jg7)5a{{x*_e@}uQ}$*y(Jc=`Yg9EOcb7weky}SiVws2b{+X{evJDTCi|tmb zf4l2(t&8H=nP-`c%FF5H$=4;$>n&XDi*#ssrYn2AqNZxAva4x;GmRwPuj2~b_khJc zadf~ML_o6EF(V~cLW=7Jh>j&z3U+!5H z#y=OI8`_jI(3Os?aAFhSl|5FuE-Y`F^`umAvX}zXl}u!D*fT>Et;^+cBDhsQc3c7M}kEtzzu2}+C_*`G) ze){KJUUAx<^l|Z#1#~p&xB7)$Bc#&|9a;>W8e7EoVQOMr_q})rMt)M;}%$WpgEqqCNJ~1&fg+_svO& z+R3cKwQQt{SHFJq6o-B3Y=J2>(28dNbdqgITJ|W;R;M3#<1^iwmW{(;9KP%(daGY$ z*Le{O37s>pPLcA*8Hb}}8T9wFXsxdaN1G+Y#xXahPR8~t>YwNV8)i_J^5aH3;7YO_ zIS_C!Riou5d_#S*C3V&T=JIZB*LT@kM_c+BMaeI+k7g@&)ws%*?4v~u7KCC{Aed8E z_EhEWCSlp`3kP>?xZM19=ks?Y+yinqyD$5zGsM0vdT!# z&-^_S*HPx#&BY&k3r_W6%IQEyoVXX6B#}{uPH*jFU-tG?43jwyf;A!cEp=&sUge8@ z#Xyitad!gWqez9BeE&!K_63(<`RR#xiK(UevMA8k)1#Kzz\Eb>6&mxTDU5{#;L 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 literal 0 HcmV?d00001 diff --git a/doc/img/powerline-zigzag.png b/doc/img/powerline-zigzag.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb3cf27c94438f38d69645ad328195f45ba816c GIT binary patch literal 14381 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 OwwIAm5U&z73i?0t8>@=| literal 0 HcmV?d00001 diff --git a/doc/img/spacemacs-ahs-transient-state.png b/doc/img/spacemacs-ahs-transient-state.png new file mode 100644 index 0000000000000000000000000000000000000000..cef0dac93654a0c704dcebb9c2d60da20233a205 GIT binary patch literal 24569 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 literal 0 HcmV?d00001 diff --git a/doc/img/spacemacs-lisp-transient-state.png b/doc/img/spacemacs-lisp-transient-state.png new file mode 100644 index 0000000000000000000000000000000000000000..f3eb23649ba0a07ebc3f2b0b82912f5f1c1b284e GIT binary patch literal 36662 zcmYhi18}6x_clD)*v`hbv$2g$Hnujl&57+~V`H}0-#-8P>g$@Sx$B

CV8%kmmcr9pIIW&5ZO~}N|SH9TzB5%0!Fsg8) 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 ~LEYTt7J3 zsapRWy|Y~Ejpf@GEAPF}C8(N6c=LKs=(>l{Io;vK2(9;-%}Ta0lSW}sO3DC8+m7>Z zx0UwnHyznFdNil1Y8X@B@{}~cJG8P|zP})Sbn|*-c1@#XSN7rlVq5mgN@jdt5)DPy z^3xps46HUB9JePT0XI^FzDW%(tvpDl=Gwh*2lNj*E+Y~c^I=$4UEifQ2{?09W{E43 z4upp;=gu`2lxZfCk##`iYOM^>@9cPZs5vL(PAzw*PZE`ER|v#Ub=Nnm$u(W@h)#>N zu3wXeFyd73s!hh|wC6v7PbmWr=LE>i)2Ef!fyA}Doxod?d0;)YpTv$sr#`fk{IPk@ ztNxU=&34?a(aZZDx428^pZfgu zv>8?st-m8{M=Wa$2!7jHUA&h+-ikZ`o7FSQAu*Ty@jvZ0b)o|c$lz}^4gvxT4RavEKGMYm?n@jP!t3`+K@v@~9t`7zJqmGN8B znCZBci!h<|&UTzB$%di!p)4F-`?h#YgugGilx&BWY=5Y$w#GcXGjr&x3&>m==l-V1 zAoHYo3Y=>g;aTg?UWc3*T8R)hyXFkh7W*7i^RgKmgg6RgiC0aV-sqfZ!Exu3pNHCN zbaaxE=YH9UBN*qWj<7cD*^Lbfj}mMnT$ox-NlJ=ds?=Ir?d%=sdfB@QNTP1vx6c;> zYhf4ZAmgaj8-Z9oyo8w^)&5gkZP?uF9W*TA)m1^3Vh3hKR>p$&RpJca#W>fBty!PW z&EfyxlwCNzR(OBU)lt?5Q&d2>uQxKEGk4OVG(PpK+5@>-|zP} zmT5Y~5Id5nj1jzs+-t3?pk3Q^6UB$G9j+K7_AnxzLf189Xbh;Eg2D;1{$Z89A&6c; z5m!i0{!O0~Bq=6-@9NnBh=sd3&G+iFur-)+UmY?N)p~K!rQ51W3FUtgzyEyWqPy37q!OvWqqxzHKW+O@8G1`oX-t@I{OURG5P0(^ z_X~0ec1ac5^#Dg$LlnD)7}~IPj~lO?D5WlW^S-A5;;zM-yX++3EX!<=n~Bo{X#{fRpvNw zeF(Pso++{=x^0P~Wog-_aSwC*i?^R5&Txy@veI)psJjRA6}3vCvAbpGZ2$#tqVDL5 z4Nbr^RbpA&nR+@oUH!?kI=-;R`h%j=u~gwhv#wfM=0Dp)NAj{oZ@UUNH@#wpDNx@1 z2aU_VE5;!v1BTwZv)8$G7}IH&|eQ?QHg?GUluo~9?BgG4CxuSTxVM0fuP#0YxuA~pd{r4S= zPf@V>UPS4oUua6p1tKySc7U%9@foU3U-Nq1zK0d?EtEhO{YrIob+>EO$^-KL9YPa69k3x5r0J9-+GcJB|v64-^&aa9J zN^RzJ)tv#iZJ4zb)$9hn9!`Hb-LMy7?>B8KUUnO=WE9i=H%gbuW#Gm3t9kfP<6U4S z3fco>?~wI36@URn9+ICQNfjEJ$RaWjUIWmAZB|OnXULP=Mo$U(?)!VB>Hpm!Twc$x zVE9Ucl$7L@1X6w~U18lXY_!7%I?HoeBnSE*$Q0u(eBLn2xFi*{Vc`@`ycQcQ8|eQ^ zTDnQZ`Btj}85V+^;?U4rvcrUrx;}Nr$jD8E^LCodVqCQPn~o7ym8gkXB_Ekq=BH|I zmfbJ0lIe)j#l2IxA3ZX27EQcM-dbq%TYhv?Q~gydX;;M8H*CN*bT%#ON8k19#&Xa9 zNXyE?zUZ6QR&M;jt{EF$aBQR^r|jO6Pii-JdXXb`4qO?D83sRmE2pkj8cee*zce~B z<1dEz=3=e{>fO4OP7z^EwB)iLC6O@w#%#*N;lQPusgHg+-`*Ob-vhj_l4$N{Tt& zF1c)(%!6zULRAEX96CC~zvw|FhN*93<(TmGh={D1eu&PVaM^~bP3J)_OB+uPUA)d7 zgATKXZ)F|rSvY}{`ubgoQFqji++RZou+9#L0B`ynR#KwMj@}-EG>&k;Ej-+Ypf~o= zbLri!u_7(24@rK2gc8F3zvB!qN&#nxn)uJ0p_`=jf8q>#YtYO83uh?NbLjd1Cut~| zAx9Kpd>p?lLG<7J`F4-4ogw9BUW5z0)E@IGZwcsrDM38g^FV559O7{lPMfMiaXdgC z58>(ZXaeIwDpZ{f9fZyKwcIY1hYnq~CLdU*ijUfO7n~f*xg1Pb4jCz0&)f}QsSNM= zwyY)Wk(vzvd-V~sHPCs?R+P^Sh*S{RKF0l&^L9D2fG%QeL8DsV+dV_2kB))EaJ3z{ z29RbzS23t>R=NVB>7f6t8Leqzc}0Dq;<=y0_NEcy+$Gb`0i4-+K|c6;)WAhp%d-zx zmMG##2PV`qDQECpLLi)zLmx^2=5i?%`F7MQMR8!dnp(0)|As4+Kf%JOk5E^{G1|*Q z=~iuLyDNrRz3^($Gepp@MvpS-QkgKmoEmO|PfS#LY`t~_hMRkHUFuz``wH9k6u`dc zv@_CF_XV45N?Z}0m?of^)!PDb%1TQjbWV2`zlGhh4iEl1XaYz+#iLp1#+?Fe?3IDk zUlkzDNe_M$z_d!iLCdn>N$q~}^%&q{T=U?p{aY~i^>tC;O0b80#w zg^J2oeXBc#g>sJ*=Fd-AF|D(@N-Fr*wX{H;XpEQ*UOX~K|NhSKgXRB%tLoiSi>wU| z(c&||tNydi++NtszRK$4Ex!f191V^9OjW^1Q$~D3rCaa4`vTM;khFc1i#V8f#XuOd zw3u^Fb**Xdh1>bzTZP*(}7ITR@-_fv|&| z@zTe8Qy2+mKR->EvACVmLZi+Iy4lz$#wo}pAo;xK^fJ^gHA0}yIr>F!wfLaOI?9djA!OAKUzNMy%VI%awtNdsm{m75e2$pW70%EjcVd(J9VKg z{sRZb^Pf1dE1lacobd6MtJ^WXw}S)T^5@Q9hUIoyb9W{BCK&EN;`f2hLP&v$-(ZX9 zJESG?5Jw`O&%oY_O=!uoe#TCAQ$z4Nh3Qr5db!i^_zGaxMPEqd@yyV2c(Bocxl#tt zy#g7K#ciYl~ zuX|K6`G8B?6?Jz5Zhil9X%HFt-+8bPxLBrzDQ7SSs}H?o!7+!(${`*7Jyu?RA4q?S zQbBoi4ug#;AQXBU6wSf5(qryGdmY1D;^AcI-h`|S*ooLs{H)NFohQ zA6(CeDd;qvkgvuebbecK2jf#W((8+!gA_Qgf4`HF0N8^inT*w|Q?OilzYP*}!k zl;E{|ZrvA1M~%}%$2ABcKJnTZpJ@~JB(b7m6F2eYxsB^~QT*O?UMbq8g-EYD19su0 z;jOwgLAB2D)_HvVz*`m%gyq7vwj`84m89Bczqi`ap$p0-@HJ+q#H;Zz1O2SvqzX1S z{ovXe=y+uH|38S!a996laoO6Js+x5p(6bF{z?5x((OB-d z`FHvf1y@o6U0vPe&@}yP*q4fd(%QGVb8`NuX;XhN;UivKvxocQczPU<%{xrvZ~Ywm z_`OJQwyFgyzhupZRaNc%$JT%p*~T<^1B3a)&;d?evT?V-+R52#KhWkQK_B%Dmjc;`p1P9qUa|&L0X^?E6(rfjq2Qz-NZ$|6x-+<8Pev)J2_a-h`t0AY2h}I!Ptq zE=*LL!dn?IqvPMIc6lnUSFNg#LNpCbqfe|LfZ{BzfXbvFX9+YsvE&%-rPfap=I~g0;Rh)`IUgt*g#P<>U`KqfuxMPx2e~g4cSqL?`+CZUYog~`06`NKc)ItNl`kI|APMBG?NW<5+>G} zO|(=>D0bQ*RXp8Ta1{Bb1(IC_cgwm(hpa_!O_2V#6+&%(Z20CoAIUH4+rR+ z5|Rcap>p5Hy0I!pdUo_0T|IU*z3CYuby=1-Nm(a#G}a}cWh$z^J)`Ds!Jai3T9+diCu~4_mEf6La=s4)P42 z!h0(|Gea{qhulK$Pmw;x0UaUIIR|(MCwmcR7oDlw&K{*lNS*2Z)BfEv)?qP1c zespy};^*WD&snc^bzOa-ZYkBMxp8l`zcII7^6PGgO!1s->QBD=71Jh% z)1|CeJmA$*0MeV?V5sw03lN;R)x6fIEUbxO@^xS9RA8tcP5=Bo7Werr>96-7&#nN_ zz-;NSug8;Yh4t9T^iCaq`Z+4mq_m4!cp*!xm90<{4YGXF?y8uvHQR%qy?OvF;sC;F z=GdMy%b6QD`)1N30m=M*OBCw;3Ev|fvO1=W%X-p;nVtYgv$hlZXt+N^GI?5-4|CX~ zBFOM)=|TyPero;($Bsl=0(keyFeSK|3?AS6Hv-Eu(`Iddx!j z>T5dsxqnXxm>~|oVC3CDqOEQ7D(iYg(?=KS( zw)DHQ2_-zeeLFEtB}7NtwYe-x$sfVrzWVTCDo>Ib@XsvB{2}I7)v?*WL}O#j)~+P^LOt6gHE@BxAMM`OTy-5uS1m39k^)H3WK)p%mmN!Y?TPh4=HE zvSqxMG_!((KT;4Lc*Rpvk=$#KNT$Zx+I4Qp7oM=WI8N}&egX!v(g_Gieml)MBX*6K zK36qof85)v`O8{9x#fcUXbzLPeR2h)^&%`#Spw9#p8^lPgH7E(CQbEE#Kob;bN_~_ zrxWNIee_fuCe>8$!$YX3cNn-0%{9;8ED{+84(tfc+yqOgL+byXPpHK-0F51>1566j zZX*d3pY)GFtEbX{t455`EkLCKq<=?b59ygIDi{nJ!OzjgA}R?fCY9kRR*4~EfOKX@ z+j$<$@q`_-=voT_xo8pm@$UH~SYegYrXSMQ&x_UE(%}%@N4VlNz7Y)Lhe`S>2{esu z!85y5!PYLqUe`iUzDzIV0BzBbn|{oY^Izm#8*BgH&DPf+h~ zeAzoX)bNH*%H2G@tz!JGJS5*~8~6p>Gc{E_VDJGCy78*Oc6sgl6FB=fuRr=5jTom1 zaLj>w*)om*RTDX#c=!71>Zk9ob!qm*=(Is;5C}nC>Sg?D#+(E~o!22K-+|v!t4YPW zwHu+{30EzpIKj8NdtVqRT9bT>x$pHGGz)M;YXU!;5V{wKL7C3sUq|vO(II0MlgV694&6HYvL{v&i=i+Nu$DFRe}>*RV9Ml-Ogj}&q@ z3$cbwqD7E5>+B9*t|`-SvSVuD83uFno~bHBhbSPx8ahRmF!Yi2q^~1^G}R{e2m1cQbe&vnP0#q;DF8dSML#*(rjX0+5b3ww$b|cuQyhrpsr3RG7Ur4xB{N0+OAw%p&Ggd|2kl>m45oCmc&xdvrQ zD5P@RjqxqX1*zQ;<+ov3vu9 ztmmy9-ND_72wJl@xZbYFLPRjZu)~Z1YUJ%tjE5|A2BY>ElNV7|3aUo-%$K=N?z5|o zm(;dr=fYy=dppY?Pv_7!E{#Te&hR-etXW`g2ZBNCq@GUKNiy{w4Tm@G4fnywUC6gQ z2^Ju!0-1W~KUlcOy(S9RI)`a9k|x*-c1aCYw`xY?wMm(-3d+u z{99z@M<^3J^|@n>(oBF$gj(tC4v{JR`i+18wRs_i zV4?4V>nDETK>OONL%9xhgM`f@1h&67I!`*jCpmz4r`P4BIC1m{mI)QUfUk?3&8t%s zHE|9Nckld(LJ4t(`BV-8$lC|a)z{h?9 zr8`kR(T7f1axgf(_0R?&u%Iu!>@1-442(RZNc#uq{tMtAg)17~_H=7Jd5@o3h*c& zre7}C^TZ5h)S){DaIEnDzCf0ivKJkQIRBMV3O2~ugTr92M*+dV`>zhxj=&0! zIG9)oO+vrZa*UhJT z^-Gf>Gw=y`B_BO2z#I;!d927w4;&|D6D*?ClJ`K#_9<}V%EPBL>`LMWv|-;xNtt}L zO-!<*BzVYtE=&l49RvaJ{>lGxvy+&vy~+IB@OO!Us+BRPNjff;@GztGVYT~DkHsBz zSjrcrv4G|LeuhotOUDxW+8O09Oi}uCPa<0VWkkL}BN8O%cE^?hws<8ry_+TDYQ5+v zUo&%Z+87MmGKtB<-12D>C>_>xPVNuX$NORZapi{xGvI>nq7iU;lHWqcPUTqGWwPaL7Qsg(gYux$fF=So$gcih=-EN=Djt zkIoyvHp}~LTyf>6lA&r7f_Dqc#WTX84J3;G(cQxuJpY5aw~mT}ZP&g*kP<`;Is~MZ zR60dMx&$O8q`P}WM5MbUrIC^bDd{fh9FXpAX6C&{?`QAl+56t{zTZFJTCa^psAa``(8c+WgPAm$_JCv6% z#MIKmKSeJu{T{y8_W>!Y)xt62uH`=8yj7JwKpzFz_CAtcbDz)2mApzm0?n;9DGb$D zwk=l9cZdku0LciLn^FGveirO`P{zW2<~tG_5lk_G6q4-PG8jr$bBGI z#dl=oSI;oES9!@h7L|+|L{5kg6V$l$Xnq2d_m!4k?~Vy*LE}T?0;#)Pb6UEZBMavp z>N`=r{B=G)FBYXo1KGV_Q}j?E2s5($QVf{_QugucJ0xG%n)wm|e`4N|(wi1DcSORw z+-tNFe*yFFvd*7u**sq^iY16Yi*kvtSYJ&9^ zok%2J7o};~Eeb`PhBMJNcNBaM;HnModf@obcS=iFGix1u2IM!u@DmNd2t0C>K{I&z zd%_ad(TNOujTr9$%?cPZ`+#Uhn)H4T@GP3WvZkL01Osq{c=%LFcKpNrK6T6sQ_Jqu zgrJ$7)pkW!Rh6k9V1)zuep7Dg5rhSP(Anh0Sc9r*P{T1+lw0Z5%{{kRW7@Tq*KdU1 z$?lNcO-u~a%3g4Kjkh`;+Jhk#V29`@As6%x^L95)1Zq4`Q$n{GJ0{AVXbNbZl{+ny z?}}yK#0jU-Ft6VTh!c?)RioiT96WRI54uiX*><MboQ5;IvBi?uGw6@z2;0Oa^~0ctD-96M1+s`F}(|XOC$L< zmcjWGe7B=IfRFYn!Et)F)81-{H`)U0(yA=FNv4ich zPX7WYGz=^%CNn?v?{XVImVaQHCs-eA4uQ$3?CV*;OrOk18%>#W3pvZiJA4Pul+ywh z!Iso`Dw-vp!Fyab7*%l?Ulq4eAF_L}zaF&RXZ;d=a{cl4icBd)Ff*uG?3R_~}7;m!Nf?lAFd430D< z2gzhFoIJbIY&iMg%77)D^1?t?eVG3Rn#+Tr-qk;@ikBz9@}k z*sCRsRT&TwnICY)yj2VAP4mZ~7n}iDX+R}$*iB@OwE&23^K{Yx|2CF?U3@5OF2V$+ z*+2|IUn1v?cjaU9*U<1P&Xu4S-N2Q$212Cok&ynNT9wZko$LZ47cO_TdgHn5il%); zapdob<$7KoE^>8Q(A4AvIRxilm1Q)m?k6UIv_MQq71q9bCn@&#NjCz(u57EHW~yL1 z@%ofikQU5!R~lhBDys8?vImf;bW|NjSq!N2*srXk7pL)}zbo&M1Y2Kv*}w}>#t$*z zKz8ygFNgtir4^7HoBN;6!7RdvtAgw8g$XJxnzSsZ~G)?afBaru$A2vYta%A#=sBztT4DI z*9eX)*H`2@*J)=Bol&N<5{n%Vgi)8zyLmE{EK!NQ`gh2^&IW~1uiKca3GQr^T5g`) zI*0d*v}82NMp518`B0H2(mX%m6EHX0wJbF+O0jSd4KHjG;V%!5Ic1rykD3geYE#(n z;~hr#Cx{0=kVKUoXsi#4UrB=>7u0K%@CWqZW~lJJ9C`N- zZFVwMy6P$cscokkK9_xE+4N)lwS2>ge*Ph9$8D0fZ*GIm*{@gx8lXrh)WXlzvbypD z=P#3wLn*>|5(`nnBmlt>+RwL?4+dq;G-g;LbWzjh69`*H-5R|S63sPbx+4nBM2Z$TGSHGt; zx3GZ_u6sk;>>;1K)}?(_kCTWiu{C|*kk~haxhs2tg4~ejHhuxDn(Bx6 zpSxCJDnZdseANcq@#m^Cq|G6q9NN2%15khX;B|m4A{?B;!5%+rdzx=sh4Kb#)MG>( ztx~8g?RWW9KUXfMKGWD$C+~FpaNX z?-;R5v5@y8ooVDf;6EYRCet7he~@gH@332q1gw7Cqat~nzrFv40w@Fkv2$LKwVJF} zPSUO5x@WqI;AG9>vv%+J%P5hj!pUod3c1b3ZwCW8h2f`I`rBPcQ{T3)N6lU9R(t{e z#L`Y+CTD3%+e-?QsS-6L6+xW2=6T~>0AWfXk)*-7e0g)dMJQAFbI;&8-a_wviaC`p z;~BTeM&D9e=P}sX@H}&q>YDkyRS&s}F2Uw}sLJ?l^p(5RkTz+EFsl20VZkn}uK2EV zM6+pN(kZH`Yy-h7QFe!Ht+MM@Dj1%)3~A2SyEu&(5u=6r$DaQfDXcVvs;|te%OZOP z*#tezk<30Ni<36_`qZBkz^+jHY49JkHPL-lT5}~v;HU=jWEqJGvb>M~YB1n_nEu}y z3=aACF8XPkq7T|I-`Y5(;1(zAoYzLE4MgiAUR^b_s_Xsb~4?Ini_@WMSjDf?{+x;wS z05bz`Friv`CND?%fXy9e_HU_cHUC0gyV;(lX%b+@ z>oU$ePEAB(_P%2uZQ{5cjc7K0+`i-RQ|Yr5{1UMf?=prSa8LNLU(}8zieh>Lr)$CT zHD~SngaaD!h3O-%s4zga@%cIX-6_ukg#sept;!>%^%MMLiSmwN-?5K?+3Jl zf3M8b8E18|fjzjxsE!y>0AW99ChESrezl2n`%0scY7=18cH*BpQ<|O?=U!jgf+Y@Y z(@fB`C0Z%dPaWfG!P&)S8mDKS3zmE7PHXWoJ9@Ieo>iY{{}F`N#Jv1;yZKJmlA5`E zKn1>|15>`$k5xOBk)alF=*Vh2XQc(Cv41Jb9~nYTT!H=(U~fUBo0&yv*_vCT;yiHw zPbRs>?J34BIn|nT&rCvoa+NEVyy7r7CQtKn#WiZcj-QbS9UX9R1k@@0Ud%y^6fojv z-^pZ)Vo=24pbko=FKKVh-AiWWaS6CrJ;P%84Z$$)baR}pKiHzgO`UG8ge+tn=Sgd6{{!yFBcAI@TG z17?nN(+rizUK2dRP#o;r~CU_^ilQ=I{X4V2<9I$ z8ltb1To=@p)jgjHa79hEZ*Q=0Q?7u41!_FJk1RdkF+XsC^CFnlZG=0Djk19l`2)Hc zC<{~9E?fS@1fR);2?P~ro$qC-Mn7xj`mE0yeQ;G9eKA-qHR)XsE~L%J_T8Wf2G*1z z(I)@}CS(c!AJJ;?p{ZbS+1Q&pUzT5|{e?vp=Q}bzKFs+l&hFfA?Hl))hm<&jo=|6! z@NVN8@4*y{mA(gC)vAZnM>7n4foiB0H@HkV?$3#+`YdRxT|R6HP+V7rb2NER*wl{7kG^esw4e3H95%Ch?ct(hY|T`uat^OtmKhHIQ2lH@ipHJSS@6 zftU9Ke(!$$Q-?ZivY&M;UcXC{=lRtCtcAD!Uuxm?G5$^qA8HM21-b;;-GsKanM1d= zEk83goHB+SkCDA3p|HWK)HlF94hB0r`bG`6_qQyM6R8U@romB0PBr*JkybZwS?Q## z)^&gFHe3U2i&SkV-EeEf&#$_m3V1^>>GkS1%K|6@B=X2>Q6Xmb2EWfHA9}DpU$r8zus+-G&$+80(>V!C#T!>{%P0Udldt zrQA~%NN40-&}K+$XfOUw<6EcYEe8~fOYkIy{efw;>(f|gP+j5j(R|FAcnl5uB*v2gT%kBJ zkf)LsQ|o~*)jWLD6Bw0eUE~oJvHOVBVJHyu-#G=w()UzU{+vZ4ORTv|6Yp9FJEyt< z?@gm_?-WuuL*ZC`wY!V9(1;#46j?b^4T)e;>#Ijt64V34mfo0WTeGgHl1?E~!U#1*5?4MHo?<(}~;SS3B zVr_T%<4ML$%&PDz2;a-b=ForB#L&70z9vFJ9Bpz(H#d#Tx1D213kUuEt{Ladx5+mD zY1Q9_{53%G`h6P$Z%U2;0K$fh{jht#oZiL%p)OPv=-71mz4PL+XD=Vup|yg4qx6(~ z0e_ZuIB9qElO4NycqrQaM-2n{=|p+gunym1_&bBrALWDZyPpny#+oj-mcjP79mlI6 zjpDo1e1HjgHN5Dyq|9Pz?2cA6FVQ)<*SMsCiGO2%I+3euypY5!)+?bNgbUv%!q>b| z*)I1MDAXLT3|Wy{z>nW6(tSv5_y385M!bGXv3}^;3l*8}02KpB*$EghH+-FdvYP1e z%&n>J2x7sZ&$zf9xz+a$gNJboARo?4R-L6aIxq-e7U}^@U+_a1D%Zu{uZ0t@GvhLD zO^9oeeh9#?pch)3p`krM%(DY5*mp6qf=941-zl^o=hnBjmX0u|(S>sIvTp)20Qe!P z&kITtzFU)#ef^4|RYVmFCFgG|(MCH}>F#;o;JG+kJ1`P&{G&&Z_m#jF! z{w0v-dn!l9Mz#QlU2=i-uKoPmv~45~PB`sVQuv8x7`1dKzy+k_Q2h63G@zOdqZ&c5 zJ@DE5^T7a(D{;WBc|m}kzhvD~Y1dN=rx*I#>jeC1t*su1?9&ub*bty<@qSNd4Px>CV?IbzCQ zdTd$)NY~z)Zud<1TpuXT_I*z1LH-pq_clwD0sIs+{ThnJ|H7oj`Px8zS@lPM&n9mP zz9AePi|vB_Lhm$^8IJxjtJd>n!p}{-p#@VPZDei?mzaE!!R>fkrux)?&mdgx(J{Of zCE4>0T38guAfroSNCtNAaF&E2TVCswnK&2odof!RTKsVoCB&}5rrvCDLk&Tqq}b3- z>n9&~dd?J_cfXjZz9f+cKdZ*kHbC24zGJ8{AZ9Rh;|*J3uHi8M<13b-kU+_lyYJ=b zU=#`$gN;Ax5#->t2IiV56ZQOURB%fXwe6k?05({&!%Du=A7UpmOgrOZD#COQ?q8>t zT8^Yk_n_1x%+0%x&Uc4L8?S|Yr(U*s**P|?V=8H4sk3A`4L9{L75>_=X6Py~rx(p$ zhz!gZ`dr#_4#@_gUxKBzw8HY&54n@XU2%1?wz7^_;|A2PE+Z*Lhr5kx zm;nYN7oVhq-*q!tLdFg1cAQ}ZKk0-S7&P8^DnVW zWp&au0w3PTZ++?+k3JA9G=|k>W)BVcN<0|dtG>f287wRjs6%(e$H0(}5*A0kBx#@~3i{afEXstKUP^E`95(r497RiBa zJwu^$Peqjv7!^bmQw&Y&j%=nIf-4r@3?yg);aNcY%JLHSy#z{vm%s(m8sIo(Rw(%- z+R;?!F@ji#G<0@J?E#@bhW3mU9WNw3c#36&8$ZBsL;J{5V)jhSY{H_$xt0F*dC(!H<)W!1%I z{@cl4->j?}ftFx0E0IQ+!a|bwO`XWQ?J%CV$Fdhdqk0C&68S$#LD>UbBHhocRtiApy5Qh>)qy zRG&zFg_s0E?zG{$d>MjR^y8T1_tEHj)m?O9&YHZ zXfH^F1I$T7wjh#+%~y6ay2NSIoAS|2Z`&kOR z2v3&$izcx|;+FL4Vuoi39^q!scK|T@a+1AC<6lu|(~fLGT_}KnB;Aj|3r$OHdHr^i z2PPv+&5X00qT_zW4Cq@YlyF{i#<8Y4U-4VH(ZoLq-F)oCSpfmS1Li~9(vMVG4+dNI2a@>0T5zdiJ_BDVLrWD0fL&d8mukM3G zve%hGlJ$^9#2-AT?Y>?R?E46tT@9&tPFPtuS;JZ^JlFSAzQ;@O>i}++6@2lJD0aZm z0@d?&u3j@G#oaC_*|WRe$uRUuih90S_&WJ>V*CD&hbWYN{n_1%=?__g8%A;tLx;PL za=l9i_qMiPL&jc_Cks>5_4ccFdhazO-5@T9#=wMd-KJJQqZ+JCVhZ}nUy@Q^))y!K+?=?zXK0P zqG#^i!U?56Nkx-s8VW|imHIvUO>0j<3d>vkw?~_MHVegx8x-%iQA!tm)y9&(O&E7{)sr$zlY`0Y0{-P-ZggPOc3%l zU#}H~m*=YpM0zGg->-(Y)i?cQfDBzncA*KPKKWl^&2Im}nvq>(PLHL*v>I9Bvh+1h z;tfRr&5Sej#z};d+Dqy#zfph>;boTVdMeYj!*a8nq+)ttWS(EGZ5C`C9J5@80xBho z0|cqV8$d%ls1SQJrwiO2EZ8b6?q*(`B~*;dY#P<_&S@f?sVK3zBSLh-0G2HuwTw19 zW25D5l^*8~@*?z=5t&tbpvMm6x+A zKTXo4OZ8nZQE~N%dlEIaq`lj?JSvV`F+RdT;X;~5GdrW%rV~$CY(EJT&roIygHTL{ zPE00y?eg(&TTFc?rHsPrNy~FMXZ_CQwY!&~hkvIA(QO6e#b&hnsQD_rjfTL$tctK8 zg!ty2T{tjyb0|bz4+H0EL|n&ggJ*vE%!S3Famy%$zD>OseOf-jVhA?&My&1tw5iWz z$c#TH4I<2~Ni8~E_W;P=P}#M&&BiF|V4MqzuKKOhKmzcll^PIIK~@#Ae`>HJ`9^{A zLHPGdh`qcA&0ew4g05}t{}c6Wkc*e*MYswzL(d)27oRALv|if1`v`QOpvRKdg9+jz z5+1uSTOtoE^v|k}-mVYK3|duYg8s9e3`nG@*I4~_ZU_3;myF8%@a+kG@YQ;7CmzS# zFhkAfgQ-y6soY`X6=QR}TeigEGWiebIz&BW22W9=e*Q~#k{8uB%mA@F8Sff*#c>78Uf4miJ9!ZJf=m$B%8@@T)F|TQ3_Cw+5=}W4Q$jYH&JVz~ zo$_w6pNDMc(y5{15Q{nD#(ia7%<=bYc%A2Mu4a-F={v?0si(egBx-I;y}DI1_b__6 zEc?Ufrkyr*C45$*Vo9>;myMkFsjUefB+7)%Y?EMY@UD?a6bIcp&SAOt-oD!HCz=iM z^TRI+<2P?C8~lu;+PDSZW_Z<9yorBanYMjhfs@^GgsRkKFQ5}OGePC+JM{CXyOzE9 zEsb_pxL?PlA;?3zM>a_a3&$Q+8Q$Isq5fPYtCbyL%}Q^)2`a>y zV*^=}-}ELbb8)=|apTAO;b|IgSj+D@THZ05|0GGm*r~HkLcnVcxeI`4w%Vxq6qz4~ zdCq`_P7 ziPNr0Nw-}JS&5vv>mFSk85+6&n&gnYc{9>{{T!`+YH?xgJ(m}syFYk`ysm47uK0D7xO^ zS?4tRwlbl5*5iXKOMjjv&@&zP>0A7>%#cxE@Vm9jbvk7>oNr8BNDIGF8?u>OZ8-0F zn~Bj#(AU$n=;qtxwSa)~>1~P~wh5NVElB+vO;2M|I$m$Ia4?%SV3)=s)!Gg~#>0fo z%+kDwvVvdS*i7w#vniLd8a!H{-18O?r=+n@V)TctsOgnFVhRN=Oah{(SX>WIw@a_R z)C3(8Ljacijjemipu0n&sj-V~#MX~Fo7Z@rezt3>B#%swk0L{Sgzq}$`=yl2FnJWD zQbVxB8Y#u?i9{ci9#KB~qxVd( zbb{)8zt%9%zQR?eRJD8ChK9mCy7-GB5B}YiwEo+bBq*9VwSDB8rL}YPKHXcivBj`G zUFAz;FI_KUXR#GPaF&zg>Q$6}M2)JY9V3wzz?#3gKR>9$_{6`4SIK#?IH2H-6S|qi z-t&hwc|aHT?|D)34&YxgY{S9|DoDQMM&%h4~DTQe|PO+Y?j z4XchxAZP_Axv(;S_cv2-M$E#Lgxw^^2Z478L`td7n5{xUFufpctl6q;e^->fVLCFEF#*wWan6sd`n;~k|sQ1RjQ zhQAR}4F^ZEIayEa`nhs~?1FaRnO~v;92m=-$sL5G8q)f$dL%_sJaoPv&xCrLcza0A z;oskgTIEqb@O76;99(x}I^DYEU8xV*h>t+QKuhKyp-P=T$eeR#P=1!Vj|Q|aDj4Qarh4db-rt~0qq zx$d>;nB*RA!MC<$huJnJz9j38Nne=C*HEO&oA+v5DJ+h)=YJzf0sOSE!o3360GFEq zV>ZG(-AaNs@Rmn4x|}QUS<3XA=rJ)aWCFiAqM83d_e(@~!o7RFKSy%S9C(2V@7&dZ z+R+GHVE);;^=`(<+w_6=&}Xp516Z1{Ye)ObIE0uv6O=Ucdhh(8Fqt>f^zd*}b>b9l zc+=tFxtK77l)gwo*Z!C>gbM2Hp+McYp-lkRF{y{t{OBN`LN)st#ZMs8&(11CO=^89 zFMccO_Wh{4O9H{BfZzf&@-a z)tg(OBf8;w1=JwbO^2@Sf6We80BHEDud1+e{OosU_2(U~pcP`a zgB|Db)-iGjV$)EPw>o#IgF8^(2w7w~bn`s2N(iS>^P^D{AC=`|N;~6wiAm%UKY;z2 zC+g=Ei@kaxR+j?xCY37cpaZ`jJVj!vs6hFHc_gOgkfQt#z46Dd&nCldR%bIRpL+X{ zO5|a{DzT%EWWMZH?&ZTKC}&*;*Dv2^O$fQTTXLh8Pv`W0oQ+rL?VwSRYQVAK$#2K^ z*qjK3UCKZvOGJ*NyC1ULs3ozr71!BPf}f$mr>5G7_aNS)N|CKuedz^JuHk;h&^+G@HsT|XrvX&OGz{4&wOW$1vu{2Mvw8=) z>z@psGk)|7W@bdxW53Ev-naCYdX(Z`6m|_6`&H&?^*MUkU5w|nNbE)bp@?N$n$Jf$ zifG|*+Py^5+pK~C&)JTOr68$47A>Nvo_=$GPQduk-JY>EEohzS3iX42=288q{m9me z*LPa$5&9dkG9CUO_T5eBUn@sO9W@Hmrv%_r(bF+tR_YAQ*6>nNZF+hS1P2?P7VE0L zE<(~|!l`D_S3BD6M|S7bG#~c`1^r6Pl#-2t031490Dk%6*8;3p`QYKk^d!{X^UT5S z(g}FB=UG_kB{Nqp*XK**EjgPbY4>LxQ*tM?-prBk*5^T!B!N$efFuI+N#bT{Btn-w}Z`ntvg2O01{X5P(vIlOox^--fk0eL|&T zi2JzK=x&;A?-B^r%ur_PvYBYAwLRrUN>BhxA$Q8E73eCakDH@5$Ea2`#uLv$PAQmb zAfXk+4ca?@-lH!7bxEM%cDEUJ7OH~D7P#1FeZ$$eqE7^(bTS6~w?M}kbqKkFk&N&3 zcTVwpo(%Ii2)g_Z+LA(L|Bqc^ds$0F-+wTAA^mg6yT544bjdY^l#ChojN4&KsNU=U zK5Hvc?h;q%&(zjO5>;ZK+rsp5(B_2U>su!y@qbQeEi`Cq6;GO3j*kA8lhz7Fa?+^& zuQ+MVZ~Ma%>0ZcU@Vj~Q3nPkc5Hdty_wn{1jI zj*b!KB%=;)yVJMyBz#3t{t?JUFlqk1b>mmQD^Kb2>B}}r=`_?6U@ZXFm4m5}0|z5e zE@oVDuxWBx7A>IJZ=KQiRs@liGsPQeRd?Y~uFIL<6pK6HX!CXrXbndWEPpJnEp0D@ z-gg1g!8W%ORy*VEdWLEjOmN;HTJ)~|3RCM=b9Rslwru?E3c?%B*-|?;T+e3ujqBOw zy-q%qn{YMBkoHk{dl|W{rOf3b9H&Jm)E?e(3i!W9roF!fAT+-AvF%S&Dx%;H zPp5eg);F>L9h0{3OR7ZUVRSwcRkrY6`$Xn%KJz?Y@&5EC8 zov|q{M9CDusixELYsbd7f6L8c75nd~XhBF$PASy8v*b1<`a&g_X++U$t|8_NcK2Sw zc_vm$vuE{!F2{KjdOM)c;Wj+AYbY87i6y^C&Ll(d4SoGB5_nkC#ZGFyyz+&=tjztzjMuNP17kljjPNT*!UJ?&Ni*?Je`bx2?5 ziJg(opCqe25hUges5R=(m0U^=T|0qMqSi*I44Q6kyK<)C)0`cshWH+H!BL|4yXG(a z3B^am5j0-0)bm07a~PE z|AexEUozca301&2nJ+#qo3?B6!Vp~+67Bz-o)%%X1DedkU(}fr*ahQ&gRIt4QY-ur z8B$fF!>XrQne-v=&8j?wzs~&8%ON0+;^OjvLUt|TvbrL^3x<;a_{49V3%x08{_#z8 zFfR!ZDM(V#S7SLz0{JPLWaU@PjA#*p&OHq8AS1iFSvN5qJ4RdPzw<-a;+^?|{SzaV>z~;?#)xHT z5V)YvjRr8zBWVlfGX^@;eNh`$x+hP(oL6G!b;IiZ2J3b18}%<)K_qiix!}6qz0`S; zk@4On*N@47pq`&T<%RBybXoFO=2T((_w}nLH}2z5l0@|wiGOtXKGn9ZD*!<0YFb6O z7pr6_KEKn6@J=kLAeZeH&N`*`v~MT$6)PmsMDwTQ929N?nA4+;6WA|(lt@1YN3UL4 zns*@B52^RK3+mRI*0)s*@q{~*`niFL-~i-Zqi>9&Wc}CHDUcLdRNHPf8LudxNdhQC z9s8QQplPd>zu&_Pl1vdKxm9Gq_*s6DIj7R+FzSY~X-yTkBn#8U~gW zpwh)uc=gTUh(k^0rb2u$NUPuPZ@f_~9rz2L#Ce(R1$dvH`cw;Q=6I~tNxTk z1afN2Jp(wB@k{Mv$Ur8kHYB4o2FIMO6r9fIwOv1fR^8pq=b#msX%=5CaP_jG@%rG` zS6!f{GAguP1ZYKBiZ)L!Fn)CgQeU>o0E-2&@^q`M(XU5&ExSUB_vlBmEy?U0KsCo*=CG zg+IoA_?2l!L~r+0{Gesp&LRl2NBIWm;nu^>*IUskF&aDvpgj{;Ulx|8>v|Je7w-M{ zb`KyT0UP7q9b?Q-c=%bMr9HO$A~T9|Hm)VmkXCWt@d8?%gJI7>RAI-vC*E z5{adex$`GGB2r{GfbS{JH82b?yPTPuKw{RkBFxUoctbE_SEAy*i zOLsP()3O{3hlW>DiBwh=HL*gqv@I%&&WmL8wemCaUZJaqo$9tIy!%l2$XK5~ddk!X zBFEXCV7zML`;KpK!cs4K)^X4=^(fhKF!^fMF}1f4JLN3Cd7G#ZA^mnHQYE#<8zZq> z8HD^mdw-x!LD-82eW!mbbD-oO&=53tb3lpMZUI$<;XL%c&i0yUBMTo%LyJJZhn+DF{wmd>;{r53>bZwB7K%t8al4Q{#j<>k zbd<>an}zVHsmIW!G|2$JL6d<;Do?DPTW%JF&f(!*(=uR&>I`h>F~+sGzwEhk_9#;< zZ*Be@gd@4`RIjUd`(5YKm-daUc^d|qqE%Zuy2pxg%cpHGPz;}v?n=uc-^#yYirFf z=N;@HxM4qA=SCB$Yq&B<9v||3&fNQ??f$$bq-*U*a`fCrNGR4=R8s7Vm#?DtCdXUp zmwXiFBB5ejnyYLeevfSP+_x*5M?93YByqD2(w5lP`$`_ar7zR`@}83v*Dg$6omdbv*{AckKp3x z>#+?`V!!gQ+GE}vL&{Kl%}|R7GzHCGq!Eo$qNRrgN0W4TW;C- zT8H4a*Ps&1kfNLd!y@ym>Id5-JGW1ZN2j-Wg(&Yj!~>*XM269VEERq@Inw8-cgDOOmr#52e29FM^pHZbi>Rqi6z)|JDa@+=*@0aQzE5zL_F&986n z3@Oak=jpwKzjyBaep}n_L?GXS6E(NmCPm_v!Gwh!!T>_`ui%kB*U4YNP*?)z+P${gwo(LbMSH5?&2EW_qkIy~7$$c121GgiOObH7esmCb}V#p(^y5KP^s*(o4#; zVC07=4+w*yP!5aAH1F^H$pwYnABr%M;^+gWNK_pSiR1FF)no ze#BJIQnk750=4mN9E$c=D$r`mSu{U2cHXbCsQuBp;M7GIT6a zQEmnG|ujWJ;5ZMh_a z==Wh)AE%ns&mF02rpgBM7rJj#0>8yH_FD@2foitK$UGlJ&~<=HQ9Rfm+EkrX6d+r} z?HU7hUwPL5NP_J0zTUD5pkcY@oIU_0UeWA`rCli!6wB(=wpF_e^&)&if}OB_`tsOG zti9`oDJ${ZNS|PqY*>IN0?;(n#;fmUyaJ~o<|#Nv1F64`q)|a^LfEl7%i@>0y%LX2 zeTu_=LV?ZGgzF;0I$NGL(QVB6cvUHx+5W=y#r6@Ek~Fwpn#zublDd@gTiQ|rj~r9y zrY3T;@5oyfD?aO0b()TO!Cnd_J`jAe5j{9ikhrNB9!L0Gf;!q>_BqX9nvh@jM%GV@ zm6G=Mx#aqS-X304?vZV~{oITU8XU>hSB z5@M)Vq-1_9_-*D-!OrlD>h1ha@B_kIX&M^%pLJ=~n0Mu5enAwH7m}w!dY2ZZ9l2Nl z&T-9)?OAN)+F*Hc+1=bu@rJp90DVtPu_y(pqPY(Dg7&={wJXdeP&B$Qb?38WX08#T z%hta9xM`8f=l*`|?ORxtg!}>PT`nTL&(=su{KGq5T9QO=3KL@G_+Gal$L0w0rw* zW-G6@GIVVY)l*UZ+n(`FgtO&tdXpR1;}@+71j=6DuW*6>_UEQa7@_WZG%nMQ$m|tl z@dCr=WSo24N_d>%s`o8tjtPC4&majvlgbyVgLQm&_~ooB0_WCnL?U_nz|#CxFIaA9 zCBTM{RtXi2^ne|oUB*~68LfSNU3Y>m5PsqX;Tu9WNX~N{v(HmXK0P?s2;x93tG1$6 z%Qu#B%CDcNlVqA(9DK|$NZM-Nod(uK&L zq$Tm|*yw3hhp(!$fU!`@G(20$KC_oRTlh#FtS52YWK-s)g$ZjZkdK?AUY;9|^e*kF zsI?yOhX!#l4L_}N;{OUZWkLHZT;XZuA6sc_naWI>{0)vir$5S=3TJ$R)}V7Q3)+zb z_;Vm_WXqcv{W-JMqWa8)Y2XZ($uXtl5SW1we4N@`n5?z%IT?B{JOfv>JhLmT!Psw< z4AQ4{~3kTS5FPaI~7#|J1vZA|g`RBLMMPnC_O7J{kZHH1XHG&r;UZZ6#Ra zxgauM_vmt(4>8O2F*Qtc?aHz~GU&~Nvz5V0rY!bYzF!a2xiCaMI3=yVaf-om`~$)4 z+(VR8;@_K%4X%@_?S|| z{kj>{&$oHGZCvCbfKqw(-xJrBN3IZ9=@J3}#z2rmc#Z*i9us*5;v;#=J~q*zB=sHIT{RY46LPcqV}*ZPAZ4mo=F zFP7F|W_bmSzY7QpI4|-ej;>p2(DflT;=e51o3nF|pWg%c)iyJQyo-lCmMaUM655gf65wvp5^z)_TI-n z`{Pg~e&ynOTJ_(y^WXoC)^1#CR4EXk70ME3QjQle@@&-N_qhsuD+bBn4+)*S;BCTV zrHqWoAc(6}y%9@G`9f{i1PJ^HMc+%AeRNaC1a`S}|Go~f#WPkC%-b<#mKwu!EPLgH zVfL$X{Yn~jP~2)b$E4224y5*u)pdg!I++Ltf1}Rk0Tc1fn?#y*r+4=1%hSBCWLQ1i zrn#@$RWRY?vcw zIfaNqV12`d>r27*p%@frtf`Ym(}7W1dis!0L{!?K<>0HyP8WJp^{1PoxKGmwnHdcI z{d~l<20!*u(qgqHlA2sKo)d$RPPA*Z@(nw|7SyeLPM-OAju zTvbi2x1UGxP{616NwiWyY)ssEx%-hh;gcR34i2xpu?FK41U>krA%ij&KlSby$og<7 z&T?mJPp1h_%Bsse9fUwQK&QLq2v59d_bn21HJ$LHYMIFKtYuqx1-ADcJ}iZ>LUBI8vlBSQn!nb-`@0*aY`1}ICS!P*ZINMm4qy=n-tf$?xgp>Qsy z(ayAZ%^cujW- zLhg+pR#oLLJJfM(Y0u5_Fp~PaQ-#*@zFLT}#z)2xN+>Ac;P{`>8-RgpZ2TfRcE#Cd zWi5VW)Yt%iE!Ta*m9$f+4@v%r!Btv{u{ucQr&WZq(3eQ6ket_MRYe=$OU%a^mB=*$ zmc^&sRRf`T5Ht1PdL%=s+VJpl2 ze4=!r!k$>TJ?$L!{ku91tvEaJ)2nKpJr3aBi~D@Z>PFV za9;59l9Ki%$Z_LhgzCeam(LGmBtzKm66Tx;u*Ua-x6fsxb0aj=nq0tTe$W>oZ;nXa zq{{Q|=^^EF`*z>|dDzSjJuU6WdkkNtWpLI$Th=ed$87CgU(g>O^_tsMWvKO#hzR>) z-@A+YZAN!{_O-NgB{qPExz&W-yw#CDAzKHh-ai*mx@g`cvbx5KqujoX;1oXj7_-Hr ziJ)L?UdA77Y{qhd-DHNacZm4D$zv+EXftt*N;Nwcn71f(Y#eA?s$Ml5a_>wEB(e8d z69n5qH;2LK)5OxrWN^r@vE6v&M7rnYbQP(>O~IJe*!~_U6;0)6&K~zj7Hw}MI)g3G z%{rNwx3obz)8mxX<}#9bC_VtqV9qE+L8@>-7S8G?vt3=m$UJt6fC04w`1n0=RR`_| zjZms)$nEVTgeZT}io0Kr>x5t+QgDoElpA!+3zLeyi6D}#tezq~6W~@hurIedi0xFwVP^(fdM=wr%)+8Dx2>aD& zwWgalj5?@*^ko<}Ex%5PpRIUK92_3N`%Nye_&=PzbyU=E*Efoy zBBFp&(xRjw9nuO20uln!-67pI2ndLjGzf@vNq38McgN5TLk}>_%(?J)p7(v;bKmzm z&pB(c{KK_?nc=&yYw!K3wk4;-F1gXif}Hf`h+8{QrOup%yDCjFmk-(?*Zuut?V|hO zE;*9Cq2K;B@49pjJEiKf`ja-CV|)%?i*T7{avFYqUp9AOM>#y4mMo~&d47nEK}a?X_e^~Ni-EZIfIyWXp;i|US!#wvu+(VepB3K3UowseFsFfrCFI_iVv z<$7QDljqL~3&vZrn$ZYPu0YamPPy z);84-aHHCSWvV{%_lNPx)W5%{(nMHg%SJ1t-MQSZF*cbrU2{lFN;+R1kt(9o|0lpG zfzOs3HwY)Fm2Mj4>|8i!C(bLAmCV*G)C$V~A^^e2lxH?wc4%JtoYz*QABCjrON@S~ z(xk*>*5b$UamvnbN*xm%UeBMC)ox|COn;>y&NjI?Vrs&F)Ef^MvcMe!?%K8=K5$Ly z@ZAUyn|OiNHz?=lcgzmlDZ*)R7N+lbB`ppA@I}o70ar!q@2xo1)n2RzgE~*o>;7}J zrmSAR{-m}Rw?gy7&`xntQEY#bf@42V##`y&HXB!^597Pc=&91fDT2XfU}WySF)i6}em#^bM%#RO1DY5Dtgm7t@D7&Fl$-1rz^@7_ zO6}>YxeLZA-SbISaA&S&YZzg`TK(fi<~rfFeFi<7w`P91$j6Rf7#A0r5BWVyX=jP*A3URHK@X#bK}2H9MYV~&i~MR()mPY{ScUoUvU*_=RLw5_dQ zeuO1^-DphnRh_Sea0MRxc^2YL!>;RQY##w6uWUfhjsF()!m+HzB;57=*o6StE~o7E zC4PI#4~p$-Z`8j{;`2c(5f@Xj_0ol_E2m@f36vFVmoI%_x6094N#XjAFE5bKLO|r` z)l%d9=UrhCUtLre7Y`miCNb!?~OHM&4~E+#49!X z{-b2}?_GoarZ(R2{`kw6+_q1$Q1y)2n~_vlAWk`l^_>4eFd367B4}j9qo~n^;(08f zkGxh@rMP{2+<*J`VAq$!!WlXF@Sl0z%d$Imeg1s7&X$&h&d#RI4I2aF9F{8g!8bc@ zYhH6?08kb*(h!Ny z;d65;p!&k*_YH^BIihxX6HX>XGplShHFLZTjUGUd%=p&UE}$ecYp2CjRkeQy@iHi= zJ_IL(vGLniiQw&dB32PeV<_QqQFR2y=RiwvPlKArelQN2xS=hTipuF>%MY)Mn@4jB zq~*e%^6=clC{%p|emajEyrqG-pZou9#HuViD=hu0^TB zR}n=)ASr1$i1Sfk*Q}KP&b)7`An!B-7Z?B69)Z!HJ$MrAhzG=`1)$)jdawIZiibRm zXBHf@FLiVW{U_z#WT|}np>J&Hp`B_hYk^)`KugiRISN5+q)p~tgNQHOrUatq?nL6d@<&(TCWhi%#HBy%az1&RFh#XOp^8 zHTgyc{pt5)^Vne?-yH{UFvI4`U$SakH-z_-dk1B`Bj4u{N=OBr33@Y1%Z3<2n+!pF z;wH4Pclk`pgW;ZP!DRO+55;HQ;toUm`}w$<)@JeV8CPqxZJ=lp)(X4Tx3}q|A4GKe z&+pUHcPz>(C`2p|rE&gJ#R5GH=qmNx9+giEN;ht02ZQ4|c;=ko*VQYhsXVKiAK&o9 z^pFCeHJcBYuJln0%9qS&vpjXh_YrQM-){pQRCPUVw}M>Q>SBu$Xvv~>ME-e9i)F@Z zpK7wkpPHk8Oo2-UbX3{zq)j`+pRy2RjpjtGc10fNj^EQuAO`(mcl3v-Klk`4im0ep zb-MSUTF9&lh0b)j#CL(ekksJc93+iZ$xd6LI z^SPVx#W4+j9$}8NO`Shv5l%polg->*r)DHUz{S5_`A(@l_bqDny@EL5Z^GX{d2A`> zY&rAmjB50cIQLv5V^Ted$*6wW!9@162Gj-357flR<|`evjYauN3j*Wk&tKsRuBqAC zc@L^P{m0jz2y=|MLUbI-Gon3RrY3kiJF7SLQ>7AgM_2eMm&ynM@BM5FxM$supG9DD ze>=KSl*CUK)Z3r0fIFgJ#_sHN6RIJQH;Wljb%r%VgG|o3BUXG!ExIc|`7?f)yk(c~ zF=&;*ZvB&e9!Fp52%MxJe!VVd#^@Lt`1a{x+Kk9`90eX6bsa|$60sS_mw=SBcG0$p z(DQK1jaxtSY8kRO{NFqBvwnU`t6g`4Z!tT}L#J%cUfW^5+EAs-oa>>3m9llf z*M}}ciRrCuNOnmHaYX0N5KLVzcl>!|uL(FOyqVo*XLg(1E-+-W<~BZJdZmfp!Hn;f z(_LUP9h7Gf7A6CEybuUK0Q8z1#l*P5QTJY3TS44Ev7&+zn#oPuCdg!NS%yyyg_A#H zTEj|jmFG^E z88Ez65N6BCwt(TuVpMt{Iqz`qB^e`TB=s*yOGkwMR?99l{*Vd3QKwl6QB1h%KuQ&n zqi}>}sh4-+f|N!gH(}=t_}aMtYl)9Al!Z%VzV2-3&TD8weS;p}QQioT>LA7eJ91Ke z*Shl+gr}SSw6STptR#JOsZA%-S7vhW4XL1=Jd0g-DOr^Ss!zZd)qu&{5#Rkzn%6;5 zT%#k(Z9iG`M<6jyvyUyG7GAua^*&?sagWt^>94#eOkV9-VyqdnQ_Q#j;}(DZpDliJ zA=u(i22tkzgTRFJzc%q^2HU>F$P}D;ziH@CH4r3d{;~4WXyk$=U4yV*3GiOGRX}nj zc#l879htvaI+vxb_mxWb-F!TVX51SE)f)#&IP+}KuT0?UbMoM@AueHNi=ol$<@Tb9 z-GaR9?ct%J4k)@QXi!9OqWC1u^kh>V^q?zqwE~h6;ir`G-Nu=j5)QlSbhtqwRlI`W zif*zaS`5q3)0w~NrnjlCO7DGye?Mn5tapu`zT?w7`c_M4yM1k)>SIpM2D~RSGTX>y zKn}P!GLrt%?k8b%_g8?jrnU4PuEhFlLTopko-Z%|VPrW8EM`x#R#D-W9$;%nVVDh0 z=yPh6&ZZ>4e7`mOdib?L8sGeqo&B;z7F*jF!i#`_N)=UJ$J6nQL_S-m2wX<+PzF9= zm@41UZl2L7Rx_#;xS}usdvt`%a6xM+)uZ&K%N+(g`21+iQs76ZEUgYJAA`Kg?NI4G z7r>g_OBT|2^Zq^M^z;aQq?#B4D<7RzgW}{eVq(h6si?S7J?r1Uo|&1s5D!6l5xjV@ z5UYAGz%>@FU)V&Qd!>Jh!wb13i)V`V4OgH951!0kv(lF@L(0lVM_S%g?@+Jym}3`; zMDv=dk(8i4?e%?VzXX={12L1XvYvvlyC&oPV079}nw@gUO*pxQW`7_U5ep)DI>0@< zrT=i0b5`%wz8%P9)Y{;-iG3?e0<}b>WT#b=$58vqN~Zm+8fkVr$Ht74~!%w z4!8EXfD%`xAc#LD}9^9$I z->&tI^0!Uc3d}$kv^@L*^;GTdqG39ZL@@JIykU6l;*(u@#T`1MPee;i-EMUBTRcR#!S_g ze;XOOGiG_)-rgH06~7Nfc{$~AI+)H^!obxf3!IDnFIcLvN1`o2QSGxECbSJvyqQFvMwXMapRNX zC-yRG$G?IU_>VH&t}pt|1R404gJWT^w5)zf7flxCb$8e5fd2q)`28DjL%1~__3yw9 zx^XM^9kBSWG;NS`5s>zVcl$5e1fU62c<+~U3S%bxgxcO z*AmiuT@|QJ@Su&5vB2C(jE^q_v9kVviKNt44;zOhoQ96BY;Y?clbr9z6B-)rm$*gj z*H2X_B{{6xaaqan-0pS|o|@fpKLJ=xh+9X=2F~so%-6MoXLY3bL%V;AVikH#(Z^Sx zv6iAk4-h|?qD@{NfJ0T}ICd))CBrX~{;OG7E#-E}9^|Kc1qQ-JjM!^iD? zYBKyLn`<9ATQWSJDU0NL?k}zzilfHs=I?n3xR$XPKRk&IvGy5m`U?cRk-E@0tq%@T zC|)WaO`COsiHzMyG9UH^a`Uxb&3+xWc;TOK_+ieq(AMp|R&WN0)^ncSP?Wj4Hb9J`1-+%`2+C zc~WCOHZjA*XuiiYZ|Qn8w_TV}7@nqj`qgNoloKp@L^1_b#;WYl$JBa9S6W9Q?v@{@ zBCZa(7LdzRCON74<`?~fg6Evg=jq*OH?!9f@Bk(337@Ppm~4A<6~#vX1I%XVbzQxN z);tp1yf2FdSwb}vB=KVDsQ*zc7zvvp@SHkdZ3uZPXx*a2qEVZeIcIWXaFom_(ajc3 z5k#Vlrhb9Hc+ZT@&>i`n}m*z7JXVwQW+YHFt8xY{QSV#8ZkgZS4oR@9#t%$ zc`SB^Q{+KR2!9jy)dgy))vGuHk0rIs7ml;|PJD2Slpnh8)pAFZTqdy2<7UgZ62K1t zps+;1)>Zfr}+qrx%t%)LCa6XMFVKb^);<86V$~X>S;}OqGs_*v*S?i(Z?i3&+yPQBrxKT{wxx{r1 zr!GbGcs*_ix6X<=~w~#XjmkhU$fi(PtcZiHpjdn*#To1YY{c7Z>ewjqLRb z?r6{U4>j{Ps2UfxXNIln9Ig}&?$Ala0P_zlJ<>2&$~)iDGLwHy0RVjj#DHfxyv)K#o$xYP}O8h|oqeEUW2Jt&*JKfMFTz0{dPi@u#Ypd$^4k zEOPCg*b3cZ)X|~Z!xn$^w|vbDSxp9eg6yXYr!==O21jLYJmz-=!Jq{e zArz;kQ8Fzu>k$d*SM3EjPTqpy(qV%TZ+u+3Dr3zv<`C#WQjlaC#$wnrDfh$Q5E(7a zAx6SEUi#>G;um5$DmN78#@fWmdF@K_ze<Ueu3>$3&->t4~>sjf2kLg%uRqP30DSOFUE6HNX`TZGxbN$mTXxxU?M=(?R8PkB_7 zJ33B_-Lf*uSx9j$%sVw{N)|yfd2mdb!F zbTwnbfYsQ?j6@UIUdOW2d+REW?QwL)EJG~yAjONkeL;vLUU#_-tu?9|gYo>FtwJT4 z4t^N_={J)6w}th}Di)hkY%^(mWms1q1^qmNr7m|MMaWan>vPHKyS_>y?jM3*XAO*I zp7}iS*bV)8DNQPRvm1|Blj0GR@t}yLG6gj+PH+n z@&pGo+xq~wYRg+uuriIQ%Q*+mxCN>020@IMM-k|Vs!N$7kE0LYZa4qP8WSBlC+rhZ znkimCXO;Ip;Vg`8XXF-;e9;*3zL$!k;;@zvS<#`+i$0Mo^0p`cUc!jM@_?iZG5nOc zxdhwW>EMF_SC}NHc%wDHSdNjwyHGukg3)dT`5&v%`Oh_Vo2%nv z2gk}ejONyK5^0Ow@4+8027dX`>80D|5RJ>&J^xxNZEU4 z!OozSb{?;a6~frlLg2?5CqJmKfq*pw1m548p<7fd0C;ISN^k=>`mIVrxVTyVHNyg^ z7Jx3Hpd(^Y6zglkH>%!NzSa9O7ht8xCo0;Oc;qohg$KGiA&3>Lq(Azc+r{`kwT(%r8-VTDyG|seS&v z*>8KO`$SG(5MRUR%lVQ~Mt`msrm9R=t5{Ff5g{nN&Vdi*M@Zp!JzrM3iPW6S4Zw=4 z8R98u!qXor|MkQwRsT}D5rwgfOX8zj9iiA52-6iM3eYAVf{>6i?TuQN9=j|&l#iQ8 z1D|HUjB$IzA>%A8)iSBCp>~NK{Eaf(0tpDxq=wf}j*L6k(gmoBF(=H=bCBra%be)m z1>a&Nrbt;k)Z47AGj5s=LgTXiXr)B$ma!m+_<5K8l-z?|kEPf5_)sYvd`OH>{%DxR zeeA71k8N9SVrsKV7?pn8FLLh-|17Mh+%~i!dQ%d6!NOjrms~86Gz9O|Gh5`N_`D%qsBoX=TSu>MdkIZidMXwFYNFTM2qr9-S_8A@pj zb~Y`=w`Sln#pJR2@STgGEYuTkWx@OE;~5J^j035yt`DX1@^YTFmC<4IM2Q0$@*{<3 zR%<^eHHwI+Jy39eQU3!G&g8G91?&|>W~&+rYYAKso~F!Hv$CS#=7Mn1)oplbevuI- zd5`)+L@y@B4t;qFl6a6*Yd&t5+&i!u%na35KiA0vONhvzwsWj8GJHZT@FAhFwh~r8 zSuMDa8yt;r`6A?h4qI;YvTAKo&pX{JZns?jK8;!MeYHJ{Jv{`Jx_bL6A3fOiC&X!~E$rm?II9$lC3Wcd)(M z-PCL=|8{Zx78>6kk6PrNh2N>zZ4ys>gq?F9m>n&@-fg3 znO7g1=xm%KgUZb;>;;&#>Ii{8*|&qf;%L9Q^??hP4>Oa&#<&_h4?-Cl=9f;-F8D-Z zTzDQoHoP|PetfH+7@ZB|c5Bel46$KY+Wh($jQ|fgO8^5XIjc4U^z`W;T$_a%Ylqqf zo4H70Wm=f2sTW)Ka=eatK(3DXq=JdD_N{DQa<(fg5^^|+!zc^vTv2`Gg<#=Pe#gR-cuoa`jz# zRgo$}AON%fpv=c0_{va)5m3HBIt*E?(?%7cJODtVJ&Rw1nE85F*CP`M2VcctD#msH zM^yRZdVFj4vhTnLs3Hf0jHNrk=XEztAY)n(ragv$S4Xyq(d{oB8k$A&4m5P@B>1XPq1Zj6`oWbV$=){#Mx*gUmF`& zyfv+lxVl&RY~8~K*UU!f_ip{O`l(x1snxucEg)PNAw>*$U>B{P_1M#%aY-|91UlN|H(VfDmn8eJnB`*4nH#r)j)ZG;7r zqs<|*FzgE*6I}DVOasUB!hUCN!u9Cm#*Ikkafz@WGIMS6SmGroJ(x)^uOc=)SX`H@ zfiGg{&du#T`}*9g=Mns91YXPxKKL3TUXVLn=LxOd!orMWyPfzhymd~@${E|BJ5j>) z9a)77DI;q{lCzoo@!Gtrfnoti?zj-I^YdZ~fz@lt%6zTia}MqpA`K&c^$!nz-!4y_ z-xxfOAh&syp~x=CpJ+mwGV3PF$ha6OCoCFs-Wx^dW%Uc5_1!g$JVF!iUb!KND_M{n#VxdxuqOmQS^HQQI+Pej!X)kmUP78f>ftDJP zv288+*^tv96n?IcAPfETvmz-HQiY2m1q|4zW=<9n=yJD*?m}x1qc;d*w{)CG?F;YJ zi)55LV1`rcY)L~(4%7Ts6DJWagkcSryhqUUyi`n4lYzp|ZEm(?oJEbP#kxppw@tpN zRq`mwNbkvrX>>f=zjf|UAA?#NE;g25gpYTg54%U%b@I>jrAY8-eAG*8Yz#7S;~{u} z)04ll4ECe%v;6Q>R{_fNdJ&rAz#xQ)e=*>hmt?2=Jrtm{jgR+qK65j-7s#ugz43N@ zXSi!E^d2_NhvLqkDvxr86-_E16%5az(4W5Ht~GNI2Ah3mdCR zU)`Woz{9Dp_mkOv?e|m90f1?>0=`Q^0##>Y2*aaklYosr`|jLXA87H9gg@jU;DRE- zvF-{Y_1O|!+Uc3SF!+CIfX<*k{<`8ep!aEC*N1iAd)n%>E3ibF`hO#@4J*n{HB_M9 ze{p=?v=i2>i~?KP{zBD1C*N$#@dViN`i`5SbadP2gt6Ial2dU z+;Xv!jj(XOjr9__^}LT~ZP8_=r0P-PehTf>_eN$S&}Tz0>bh=eyM$z()JQufqI)Ae zCh|g#i}^lgOA4{Zr+Qht-Je*Wc^%0XFgz*zdDdWKF`wGNqUP0~v4D4%18gAE#s8_# zld&odySjPWKr*k+M`Gf+mV4UBhQeQ=dawn#_sRq|5lO^JDWrP?**JR}bff~U!J+J* zhu57j>~uO9aYd&b=MuYEPa{UQu24l5R>$oVfX$;~c#?8dDMJ_Mg3NrBP8dmc9?ryaASK_I0$~@G1q$<^}KX>Dj!Xt9`+X z#r5bJLZ#Uk)T`F^^BW29IjkmphQ^1F1k-0r^(W1C0v`Q@A3jUC(q9puEUQCVTUi|J zQ(Eao<~@MjmrW1*(qh1|EhU4{*nS>N z@xr>^+h-37bT!hoy)Q2Zp+nlbpE}q6jHvH*+IOPXf_2qVn)$b9idbW?#VV+r5y0B!Wlk zJQk1AdImT$#1Vd$T@!@r`gH)irq{+~keb@`2(y{ief_k{*g?L~GqGdY=+k84?L~Gz zglfr*7P+?%maJNC<>u2Be`dz`)AKW{POgtZb;-)!ZlJ!>xVSG3ffy%xCR3#-kY{W_w4@El^Z~=e!tBX{n9UCc zubm6nokb|}%`NC8i^T(3%r8>bqjknwXc?&Pk+%QqK-fX7W+9*Pd< zMUPwiURJaAAbz&1xU=SB>P@tIvia$xUW3p_{$Y3`f_zSAe6ql^z<-#nO-?PSyfTmY z!`sJyqoXolS7b&WyzAdNzoL$LNkf{2H&5{-70x0@Aa$D(u-4gECyrjY+0>tu3K%Rd zD`Q}nw<2cc9QMl~`icN$=V2Qe}5^EpsjMQpou$GAw0s<88{1 zr;f0t^!qY&Y@yVHI4hmXHl-!TaGUFU3{NWTD5X5VCSkXP-Bjw-+Qd{XeB$@H`Oq0> zy+sj!7>x(vy{wvt#P`{hR-WbBaDxaN@6veBrz1a&7FJcjjM@cr^Upi>wKNL3?XMel zzeG^y>JTX`RPvFNtCQ|obhmo-3Sqkrq&cJYbnN5^K~1zynF@GspR-Q9y{yY?M;S6WO$5TeFfKcMhvHAxV%>TiE>ETe*07!3yx}4~hw};mu z(OK zXkFm}>+C7V`iw)eD%YDNRfJgA+ep2p9Rf>*U4v~`pWYKGz0Ac7(NT4$lc+J#$4WD7 z&inTUV9>W~YUq{~2LoH{^dtQrsmUS2A`uPiERVn`qNs%8jmIhIZFe$4oLZEZX8%E7Ug=ssw;D_}(=nlwj|lRpPr+km z_TC~dDBz#9?7-Y4yl4EXCjXeGu77Vm;!S{1bRv^<&O#S+pw`VVxl9Xh4A;|NmlwXW z%VK}ZN|EupGx2CY4GsVzF%4%fASS(B=dGf6PA}Xd8rlvNCP1%IIz{nOK)tQv9nAlI zeQQAL*3%c@{H1RlGc|%vLYg<^tN|7d>6=|WWjk66+l zS2-!HLu4QVWCi)RZL$xjj=|kse=kH6?FwqN_{@JNKUjM2a~Efr-Bf}Q$eH~|*Rm_> z5;NYAT+)jFEmb|YCSSeA$}k>~RMK6gbbYyXK8JgfC}d85Tv?$6xU60YY8Hy3ybF%} zu|A0j7{CAcerDcy&$@WK2!p%&m%zSNMi(mhLIO_$3kB15vXM;Tf9D2_8U5V4M#yS} zYHq47;_-5FIyA{`MOL%94u1Biqr4fiS+Kp}eThbT`HC;@;t045n~H z-eq}rs?aOPel)ztb>1F+lj=%{x>2SjdX&p+tC%IRYsFnkS}%6e21@(m2Y{xheOINn z#;%;VXl+n-)RCG*24qBz%ISILhs_Tu2}pY~lt&Y*JgfjG!(DY*c0!WP^9!>0iZ98> z0rPT`Hl5SaZdzasYX_=KbxxEs(bzYz0c%~D`8@Erv&$+DPjmLZ(-lx!(5~tB{)ojh zvdUxN^~7CK71~M_@n-VWySg!vO=if@XK+QSARPr&vX29oY@mjy2W9NSCmGu(i2c+O zbTK;UqWS8r(&J+NQ?T5>{Y)J}I?BMg5-h5GFs#?*gUn&%*3=Wa#AQ7@r-)5l@it#Q z#OKfVS@QB&sbo?gODHo7+ zeA&%Ic46LeAM#%DxBtb(CeghgeVY`b_xeq#1U+Ijlfo3UqKKrWA@-+GmKSudGuCEm zn%Y_SW&DYFll?Oq6XtEKvoGgdh=oqNf6k~rsd@D6#x;KDlKI&_4^{6^!OF*0I4k8? zK-8$(J{4oWubHstDsQ9uh#3kMmrV-Wtx#9(Bgb-U4gOb&sLKUXUV;6ZuzhYWb)(ql zM}%aSzD4{+J7#Zoi4B73hmY&Eg@mMkxD~w&dFq{vt8Gax+cnDeF;npZRZd~%;OS`; zn+A^-<+U86m`ZcVY!+>?M-@&qiLnr0x=zWse3_V`!C~8wd8Oy&9R2`-V_(})uaK&_ z=3R63yD~cQ+xmlfVrtT!KY3f%>KBLFcRMcaP36 zw0etP7gWry>GzWJajjH|8hsgfT=U8oBcaNJCt_pO&d25KcYuz>E^EU1onQ42I^N(_ z^7_fPPi(|RH*HcWt>0hhv1wT>-wD9_GSEYLf|VN21+J7nv{wtPBf{v761v(34O3O@ zT~eDoNro8iP=D(k4{clzPAe*VW%vGCm#AmUz+A9_PXc7!X3(iW06l%eG4n)YAFx)+ z7#ZeaCNZsH@aiA0K(^W}k5P~&(QABN#4a;%3z_pcU95=RME_+Mc$I%+F5Bw%h1u6P zVZHSC(iZlDpVj zQq%YL2?oX|3~7niDru-b8iywMm12Q|G{0@>!Tea{+(Ku(hffN$A17G^vJeqimk%Iq zpn`Bm89Wrr7oDTAuWVQxQT9l~j#YYXSm6thBB_x43!vJ2P^tO%Mc!rADry*q+r9Zb zMA|?y_18Pjj=v142L0odmJkfTx>Z<;HZU%dkla4KGX7KwyM6PC6D}yFOANhjiVbc(kFkdOKH^{%r|u|^GzGfSelpU zIuYIWqgjzcd-%edEi*SB7Sz*DPE}5{BmJrBx9ee z+Ir=5WF$?s82aluD?JYzUaMK^A+$3bgwKya3L;wYFt4~{DG^^*l6?5aJ^+=axP*0K zil5(v?r5P4!(idU*XixYmLG~=x==A2^{=mp=Zn9w#(|5X59tP*>6#M&I(FDaExIz# z7Jllnpt!~GSQBzQfZNo^w(knbL&{z=TKtv&!ekwsVn{Gq;wIF zT+AjE3m$*_FRDZ(z4t~)lx7sV&f=O~&_YXQbaC7`h^wtAdcNF76_uLIH%4Fc@glt{ zZZ!!bpB62L2f3a%k$m@Ox0f8*|^; z`T7sj)qxB!&S`%{lzl9yJ8QhYh6g{KN}V|NCz(9nsjgO5ROK7n)>XacwSf+cmAm4M zAJzkRaRd|-g!hDv@UR&_I6XZ{;8zGY0M0P@_Z4HV;kEfOS^T!k6jusb)T%>JxpJw$B}H zjm*0|yTA4-mha5l#&B@Uy`AUEtCQ*8wifn#CN~FSn1vl<{#kh_O(=B}x&!jBBGuc=^dm%Q6s9rT3yN)bddCSB`#h6(EkZzidDvscW z3P$o2rIu+)uHJ>&u=cI=nUB{5hZ~Fa(aINxeZwO&19N}GZBa3lW=((ATp~$Rdx9dG z-$ilYezF*R!63*Vo&KFulf|@y&g5X*d+=d4&gphFQe1bg;`_*@47UtV^%~21mM6qd zzHsjs^ib#ODkGjLmxW#;W2HL_ewbl`cXP#T<(@`K!Cer+20Ncl>JObzWnTe9m64Mr%ME;T!-oej` z^OiPpoR#F-Fl1Pm z`aJ7G3UAoOu&$2s@sVB4JRljl+02O~~KYm0ag zZfQmnReYzosW~I{Ko=cIp>wig2DXyf%QIHNqvj1~mFjPMdo%0~4V6wWKV4)EZ95%B zM>AYx=6_X1bo<#-&g^1)fN*axDSveIEK1_+j~Q(&AmIgK z{U;U#Y`pD0+PxiI%hxI>xoFamercr&Uqqa|Sk7U1^K3*++14u>KnwtGUi?OnYR%sB zS_0b;k5fEs`-)-P+6OMODbr(!0>t7MP%!mOZVCdD}X%Q~QR1>YOB-+V^| zvlaH0$@{(L;y8Z(@M`1LLxK?__w&Hy*MC>?>l;BYm31R#S7<~yV>)g7+szNCn>)ip zms+hEYCR30`!xSO9*xz*m+zLeWO^hB|F%q;`4T*Iy!oQ`vs0pvXytP}AUshnh#ePg zYIkj@8}0+gqLFKzImfJ9oi{`nINnUUChEcC^zxB@58t9X1#zZaGP!R3m^L(9KR2e* z=6$1t(g%6;r3aUn;)H5E*B=VNF@Sd?gD8H>jNXaQOP8YWfGcdEBuSxARFj|dVCVbn z`RVK|Q-Ou4lTxN0;#R&Md*+zlKex)C634~ru^;qp2|zOItu)gTAa#6@uxCst>^Ezi z@`h6 z^nZf!dsm^Ud7Gp|vSQ0(wG^2@P%w&wt7aVvZWKfj>>@8bH&w{?-PWXkAP?wto8UQn zmrQQQX;5~P)t8oX4_F{euT^cX1P2#RFl~`vBkYf5BMt#FzqrnXWAV{yy;m9GRYnci z1DuA+jOTkBxrEPk`?UJ^eBAvoo7HhXP1`JW6^oi~Q8)E=_dLA^SR8W%j_0k_Kj?W` zEPt=b=J`DF>-IS*)HAHAe1C!vdZ)@Ii$2f^rCGZArPGY7J6jbOk$R5f$cg^aZP{VW zBU`4x4t(PjqGP`e1m>VRT9#K>uI4f41a~Bx9c5H)*4^4Q%2FHi)cBF(Y~Q>kJHs*$ z0_42x4e{X3sQUqIPS9)-d<30jTT~Knq$}L3BO34s7E?V%O!gDD01W}7SpLT@0*0HX%Mm|f>k^f4}*0JhT<^;D1H5)uC=g{d0 zn$dL8c6^{&n|xc)^~lnmW6;=?Q-J&PpLW2xsER{03rH+2FBHQjWn?bgI_|GayfJVP z;NTb3%T_Nl#_rV8>{=+x>TIA^Q7v;Gpa7PEHq+G+IpLHW{do)IC!)#1vLU0=(<52A zYYw>FylJtXofjNwX{%&m4O;J8qDe`05pinld;;H98b!<@OhR7g?4&d_ge;n$Wmq@b z|A^T@t0ORv*B{6roY{Href|D>_Y?jHxRbbwzjNtca*KP>> z+U6?W%@KFo@w#w%e7}3BS<=$00?eQXXz$Q}gwOndzIsim z2S)WffNW(U%5*Err#G3!CUNC~f(LM3Kzo}BI?`vp9RO@AAH>NMj)yc?cJ1$athC%v z^C^84@hpFxH7|Yiaeox82D$c$6@PFB+^SO?$&$;z{%`EsHDZ7u4S%W?R7n&okO?Ez zvC*7Np<|;2_EgSR5&weEyQlbE+g_SIzc||Ge>^4wF!~5Nxs_P)b_nj3U?)An z2t=8af&Xi?GrjcDjs2an7lIrrySA-BgY8+jgRs;~igS2>ZI*KL7j@ND-QJd{fybFXvzH>hIc#fZ7P1YeToMja`<%t| zFX$(Bbq2q5xh*W5Vq;JVRj6y`*`7{t@CaasDfQ=05h`Uwvzv>5!3jyvuZ^23$-NOv z{R>4+G1c}A?N%gJk6fD-UD4ty!eNB2xs>h~2sK?nee{O{!PmjmpL%zb5lTvL@eXHpf=DxJ zHVXV3f+v01;=9eAUcMZik#SLf%=HYZmMHSlf!0UFbpZVS`i4+5PQjFC!0IY}dP!gI z&FyDS0t>8cSU?XlwCtp0TTPIqDjP=>8h+S34VaR8(4A}=Am*5FAoh%W0n5OAa9>uuD ziJtYS`MhQHC=ql5+?zbBRfE(3{RMt+_@voJli0BH;77VekLfm|E&1>_GXQdm5&8-mPB%>k9^ID^5Z%(f0jND&42$+@6 z|BxCG4}w-RE3cJb8BtF!+L6aYRvrm%808F^_+}>qqV#|oFvFmZ6mxFbkZRff>y_GK zw{*{b5s&I0{66)V-|B^1vQ13z9Vmy1*xiBW7iqEw#Ru#=qj`A9ohqF6)9y_;=?jx206LwHMd(a5PR+^zie?U1u1$|G;41 z1De z;Ama#$Ym&XGA+__BIuZQ>r*D{TEv%kKl^Rcich3Ona=RqUhM%((tS?Upr}u4HttgZ@Ooh)Od>Z zn`0N%fu=#2NwZ;q9K1E0QCd4c=X~%4cr60HT#4lft=Oz{6Bko38pJV3eNVFY5K>Y9 zH5WHU8p5KE(yzMx@}(_R>Gu#%uIX!7-qKUvb*h1{ANZlZ85akJ`5HhKRiUvboE;Ek zUIUC!UDAc-QXuL`E9d${TlXNit~quD;#`r zOD_E1m_2@c>gATPt3`%0898;uI3&l?t86{Qcv;ZLNYF6A7}5UvqO6j(!R3X4YZxZ5 zHA%JYEJOS8`S?xR!z@eE-yOy6UFjLCSxd^cE@$(<3X3|~|=Y*KRU`v%I(Y03EoB;Gog}rP?^++}!uX4hA#!%M> z@1GRW~dS) zx|xKeNOw%SyBj1FkZzNW=Ynb@nH_!MN_P>NYsyPqLhQ&c^oeRQiQPZC(sGe7XZ~I zZ;DO*ECW$fWJfeAF9kn%7+zwr?d;{uoGEJ77+om}SVeR(n zZ#g$Z%%x^e8K-}&A3RF*xg9F~JXwka7Pf}W7RW!rVb3{ajhV}L&v^%p$pyksu9^QD z(p|qlRW!%r7KZ>TPVUddtJ7*v2jNNpR>o%R^dz7)=dMp0RGCx5 z9{Wa2^N_F0dO$Rq4kxjPR1=pEoqrT?0Ss&VDQb(I>i$iTUG*B5mduUWsHi)0(#(!( z5jOegXhn4Y>R1YydZks9C+v5L-tKL9(e;)npAPGmR_eup9u)$fE0WWYdN;iB+-+z) zVa2wAPf@qEFWfUR_xeSDq9)u64E|>ElEs9AP-iIYLsF43Q>yvJ_HQQ*5s!k$Q%KeF z+UkUM&+RUHh9VL7eUpYGE%xoGNrRwmJ2+AA!*YI&wO)3cx2zylL(p(^?F8YoFvbsO zCF{3^R+Lp&NdJ{<8xKw_elIgb-B4pkr9Y4NK|(`eX=947e{O;XXg;gm>(gicwS9NU zT|-*|m-74{#P`tk3>~;lv<96K(#5?o(bX2r$t1V=QTH zj|5MkV+qcvCc$xiH~7V}L{zstI>OR@@8QH@HOD7-ZN0pS#n>As!rAmBf^ z!c$M$%1lVrTg{mkW7tfX2Jo<)T5&RWf3=;q`u@H6?G=QCsIv3oYZQ`{x!C!RqVd7qjfW+5$*P@UsXg#_O0;S%JqX8B6-(S zjPS+Mg_>;P5xx<;)@rA$rq)&;7ICvTq)U^9s( zfq93-{!}Dfigq=VpJFiGgz0JyDdz=% zQsewy&rxG=KU_rAP3DU3iKKcW%!UIb1V_1#GpL?9o$Up3d$8G-Q<>2NxZ@n&a?@%R3$bkm$%j9iZdos^^CzIQaEMM*KO zW5->T`uT0*n~3NIJ%6nAMN_u9zJJu1r8B2x0onRE`ac($JN}P~%*pW2^dv6JXQb{` zIbIW@!%{hlWmWw*C*DR%>a{S!J1Kx_C?)7~;UaxTQvlKgK)wc! zHSi0o8iBifA4It7({K%ZbXu5#xdgG1&2UigT_->ZRvOGZOJBBJY*7IB#AWjZ%9}B! z{rwfB2{~i&l=E{Akj?a08g;QeRb92^KhDd&(lsDs0n{@GYX`>%^l#0bmqC~`(I=IN z|5XVszGYjT6x6*%T|6q~e*qOiT|-l(bOD5hs@aCDv{bayv#HU0HHjTyupeDd_opDy z{sF5~qbqJtD8cdXs>3gS1Y^Fd_H??T-k{q*nme_6m1r2kx*+Tk2g;^b3gm!$TUNb8 zR`sSq2fL=xhLh9snloS{%p0Szb5e)>5KG;OJS>#T{39#%7vb8p9^$zUm>sIq8mQ?q zYMitq4fOY&3X|YsvW7bD8tB?rt)gKh62KdX#%wRfxrOsGC$G>}ZMh9gT@3R7l<8i8 zGToJ{poWHUV4d|piSV5c{vpCo;QwDhi2pj1@nU>45RdE;ww(C40AkVr<^!>kcjX&P z!vNI_%~5^P)*(^s50Hu$XAdd$*OMh~R@{bhs+ksEpYd>2R5oXLuF6oFt6X*M|3;Cc z7TuSUD9#3@(l7uF6M~namyc8LMb&BQT5mEo{qO@m+8om_WMe@O(fG}INMV5Hv%iY5 zK4M1d0tY}Zzi7Mi72**(N*v;{nUM*$P;zsJW*hBl5ArHyVog7Z1e_BTPuP-T2^qp`7;h^NQQtZc#-4!yF#0;5sMnYX$b&6Y=4RO+t}AC zoE9+_VDVCbb>y&(eLU<*wHV6wp#C#2z)haF?30>vUk|?9UVvObB-GXeaM{M=A?VpI zGwJic>u;DMfG_>vfu@^m?R5HG3x#o^VZKV!GT3OsKtmNy0X9(W-08a$h2RM{1{s?1 zJ#?NoVNNZ4j#K}p{u&YFE&6(Lm-Y5?7^+o zID;fTf|@W)DW&@6rphf?{9*C0}O&BZLETGvp%2|@4PD{lp&Ap z1SFT@_B#8a3aXnGlNwGDTSnJsey%i2@`CdGIdCRVD3v}j#-u~qmSkZ-L8 z<^cAK!_JtDmexEojIEiW)pX48`BZ)}H&CtuI5F4#`%5v~nVAqdyGo+ZibH^DDw7n2 z?lt)P{cwhzvPv~gVn5)IJ));a@o#sFEr-Hv0Oyd4D~Ti7f&`Q7Zve60_Akz{@nnwF zk2~`o*#6>jGBONy>k()1Er4@8Yl#Dxh*ZvtOrmoG#)4qXD5_0_jO5b;wwEH~dGX>M z+?SMeYrhSR2NY(&(F4#r zYWGDQl$d1F?b;Zjs9O*+v!j|X=)KggB@<9FB0-Et&-@cy) zP~i;G(X>@n>ehU-FJEpXaWhlK_kDoBfJyY767)iijKV2|)I-E+K|Uuo8m}XmK;`ih z|2r%x+Gn7acq?@q%H8a+_7D7Ud>VbyZT8&^{R9W4D}zcwX?dOG7mI2zXJQH zy(?!O&VE@_|(3H7Fy|65(J7;RV=GIUys8f~n zQ3$r>iI6179}lJ_cFI2${Kn2({x=JL8&FRLkpC%Nn3vO#<;;nF1e>OR2lJu*e5*+E z8umE?2eu25DE>pMfY5z>i1#XDd zTU(k_jh9>#+MFSAaj$nA=~Yw)n@@z@LTm))SRf)OfgP^^Xb%wPpUTUfr7Nk74>(N7 zzQ~Fyw^@+}RJ#j`+2h|Xl$+Gt>Gz-s^wE2ELCmTH$_42tiL@>vzjILHp_X=?tU$#V$E!0j#v;O1fMg z{M}D7=P`>+|1Iou70YNKfahrTs5atJFCPiicui8%nN(Y2oJwF^07+;;5$7Rb-?}WXVYz>3L%tKbCAQcsXaGYj zW@@bvMcTZ&uLY^Glr$VnaiE8cClDk2O}(AggMZD{{Z#QUxw`iMnyWj~`rqK{YCl(u z{&|}XNBh0F`3CCT!*ZgjQhRn^wM7rP(32fi6YdQ%;kQ}8{*X!3u+;*PAUxK1l%3sV zb%)&+fUDi|6HOT_8M9&Tm0cxDj>3LuJdR$iAiq;dL=-Oft5?+s&O%fa*u*@k1mRzl zGQntFUT(B$Qek=(8PS))=TVKn+_LRS^eNsA}MX%0DpN_aR!c-{14b#$7=PK_^(aMS25a6c=vGl?EXq$u)4 zu7~>+HVysbxh=D>Z$01_MypqvDCy z?cSVs0?cG*PaqyC>Ce39xf`OhGk4$CRcP1N#s~)+QpUG+bI>T>p_PiQv|ylb;7V}^ zf_R@uQ~_iuIhJtYW>CoptNh=lh1{V+Y$_34;ClT+^49dO1+yS_hB~pc|_z$zQzKy?0(&hYg)FybF@}KJ` zmnQ#3S*hW)*^Yo(xuB7aXGUns>g=0!mOq^o6MM1+7@uGP<=_Yqd9$CKRkQG7^DVp~ z>CF4~+$vqJ3oMTVNzoy|HDNfzz;TDKzk0&41bP38Mm$HspjyBKjpqcd$&cLB)&^e;VEqDsXD;L0#%6Ld#|Rrl2{t6H_=Nyp+R{q+%s&R6D?ZP zJI)6p2n-B`E2DFH1!m?QyN7z!{IBK1PSPQF#fa4m${L5kj|f6e@J3y=(Z02L4mH}? zEYnCzP%H%H2&97-eQ0$cR|F2!puF(f_j~);$bEN{&0I?yq3LPrjR0*wmzd`M{ZtTZ z?8VhIII`b4@3rn8mTko%fp%s6+qf#RN_nM1A_PNIliuc_cONr%=>Hr)C(M*{yQEH- zI(`^IOBI>i&j4^+5BV$nZ&9EJw{js>92f?Pict1TVx>Pm7Ved}bk{T^cw4P2o9@$# zjtvS00q(M8w@=Ln=A_kHWyuiYD{bP99E@SDnPFdV4!UK zgq0?Fu^Ck1GEeD5ThgYdf0eH7X5LDCY-tAZ<;@l2kGxx_^4-yeTiEGU7%4$d1f@T; z2heSGZXG|3yOzo`!svdSa^haQ2xTB9;&}HYVuJxSIH(HHic3pB4Go7<;v?kp!~v(( zVv4WEQn-J{YM)*}!0*Z1?#m%&hPoF3zg-%!g+Z*DU%-I}EF+3v?uP;|p+8Yu%RiW~ zIheQ^%>OKQv+L3OpNie$!<&!q)NWj7jVmB?fBp0NZz$}+Ur^Yhmj5XfRy$#darHUS z2IbOpK`HYIZD(N&NP4@!V!^p|;p=JJqwG1Gh4(f1rD)? zE5(-PGd7(0#J5sk?+u%vX~JJ@D)!+#g&S;5h=E$#tN8Fv$&KWUabf%I7k{9y)@CG* zh>n2Bd~v;SegHUjSMl@Y;KAnS)d{gn@8gC5^I> zdE6Yu%uIoT?_J3E_g$dE{X_5f#bKXVp_{QW3vfG#OW;{_bSs-mi;EjW(#ju`-_ZSHWv|KKzG*x5D)9-gbYxeT-r&gKYjAUvC@T&KXo z`UuVjnpz(T36-5@^li>8u%5;eHOzevCWsHC*n9?g14p-qVU9tOo>AY6WTPDWRdYx2 z14LS`Iz^oy+vCk>%(S#*B`wf!td?A%>w)^(Lp*k5mC7NsR}8e&d&Y( zkBz85sLnbJmC~edyWw+Fx|3hUmNCEpoeqAq;8&J$_3gx`QfWSO#LhU2DE)6(!_5a4Jm26@ z?mb*4`%*K}zy@ATAxBIV>GY(&WAmsugNg;*9iWYbe`)qNj{7&xaF(rsQZU;8mNneo z49o_yH37J0Vcx$WTNgjb+m0X)U=its#=E}=c7#-a6-FRQ-_=IjKI{L@Xnp%Pqt#%( zQRZy#nK8(3fOrsCxWuHUZv9sT>FnxMB`2SKei|0JoL(jW$oBYqlnCn5&N=941pvZ2 zO#B6ewFalTJ4+?-guO=c&-vE{dWYne``P4=N2CG)j31xaq;)gyp^s#af-ShR`{64@ zvT%F=M|F2kVzZY-TUrvRs93&pvjGs^n`IBQQMkd3)u*#vJpfJq`ZYxZ_*wvC0>Qmr zu^a{6le@)j#nElD@tYS|H_5_dKtiEq8;6FQI|LkM!Po}AO#pU<_2n2NId%3C6E$({yR+DGK9N=pE?O=av=;cr#V*zP`Vr2<0Dz0DCc1_ zc}|o+2a^MObY+}bq(LBQ?c_!stJv~F$bE(D4x|NlbwL8wIx>SYJEN9ze-SEPL}|8U zTulJivMZc1k+vh8>OZzGb+%E6Oac&se`5p(GJr^Bsg780{N*!>0OB7X@N^~Kym_BF zijo*XDfj>k6?UV(pe)r_2Uv>>aFIS>WCifJH^%RN@PdU6SRffsSH*?aY`?6!i#(9O z)clh3Xi6_C%8<|okmL*xLkwV9<=bhxxsTuq^3@>obKS&ZS9j;#12plL4PW;6o$<6a z|D8tX>522~ilYaPHR@%Z>&4#Y%HCc2Sw7J)gLT1M1R;a@vER_*N6zB^prh6=E-OH+ zz|P)a(D}YXQDNkzZH0}OB9K3HeJLK411mV4REUidh^|@HKx^KxXk)(okehd+;O}ta zq3iy*pBS>rzmgI1&7Rv;<);Lb9wNm7)xljd&Dw=yM|@)-Gn4<5eOp&f@!$|R3xEU^ zASZv3qg*=2M!fq!_Cj%%9go%?bzsqdcr#?~XVB<8&saPG zIxC~99VKfXkmvk$uk6VGlRPbgLLqm)^4BcYoMCN5?3=b8Gu}#vQ(KB(zq3?7Lnum7 zrjF+#hutxBMW2sNpALO>f31TOAlmNfX>-_rJ@W8kFCeRbf&98qZ|4K<;iK8I8aG#~ zT|tsFX2CPO9$vWR0rQhTccJ&X;Qz!)?#EH8ljDIA)TZV5?JmUkZ)oXd;($nt>j!ec znL`z}D!YPz{)0%-4(8i&+`(>G*t%x+)+a`y{$veb2$oItWo224Nrb(+KMN}ARNF0K zFOhCs4xgws4ZC~N)d?R=Ki`LoCN0CXG4n3geB#bvmyQ=_$QR#Lg!9gSHT&wffP!Y_ zX8h%Q88~)Ubb-W2*1sNEVo>-s#&@~UCrmQyPL2P~tnSXtb+T%6ZK`1xH?-$(9`m{M zKS4_Gx;&Q+-(JUy;$nQsE!TUa`7Te-a}7ro+7=%?c6%x-b>a!`pw6C8NA0)e7;tSn zuhSu1hli5Z!i@4&HhH5porO&DtI=hQm>ccxMF{bYrD#LrxH?uin(`n6XDazsk0Uh1 zZEndbh($QZzWhD3@Be?6-qjuoy1gs4_~-#45Y%v-BkhbQELd2+`8Z^0UGUQn6D-6slq0!Ox#mTPZaTW?VigIFGJ3B5@Kdy~ZNs71Km+^u!>kwywcTXhM5P zubiqsRyZ%Tkd7&uF{N>f^?_Cpb%@(VqF6osU{99aGnZG`frw9A7wy}6&)lh~#yZxp zZ5w8&;*!;bYd@N4Rl7uHM})1l3k@f}NFz}Urgc5y)5bj=ek$T+;g&{}pQ>U@bWvnf zeDDd4Z`77#C^=z2XPzc`Eb!f9qw@OsaKC(}yY+48i;4Nr(A32&EbFodPrJljk@E?E z_TwaoMgeQ-bFEBgqr~dg4sx+lKhofX;Z%Ws^k2>1rqvztHEr}JO`gM~OFG{(@qc^j z4)i9c&7RROwf@y^l>|s>L4$jbg-1LMe*GtJwF1PXB)oN}J4W}vkX3YJ&;4t-B)!7F z@K(z~v@*@asY!nfw;%$L`T@L=JHvJbeF5zBf@N4S{X0e?(3Vs}Ch7y6%MHX`S#TDj zI2qPbi?Qc#Zg4>)2uyrCr2>vFiocOy-3k(Q|D~(A-f30qHDXwO@cwyJ|NH#7+t|^C z#!BC?mvlgrKgLsyN07BXqGfx3#If7h0}zW@6H@^nztGb?bl=$_Cm9qyy7%ly3~CNf zfOts{#EW2_2$(_(&M+itE~)of4lrm9Y9^EUMUv4HWuxOnlRQ8(>77s(C{Z5w_~C)f zMX}<=cbu1HXT&h-yMS%&+AS##uP2td-io&5gXPMEl~rERm*f%YXy`6MKC~@L5v~WY z11@$Q`gi7R!C3T9#UsT>E)kw3K^1ohdYcjA9i9mtPaCHUs&?mf+rq13pXdM=6VI|M zY08B^JHzE&_2OA|-hGZQG_ekuaa8#}siJ;PmVT*HZj`?u2@YRG>+cU>Gq@tlII3S! zk({>=8#`rGekOFB#n61h;!F$#aV8}`Ba)?bjdY!Fmgt(cFQ)M>E*z6$cb@gU-8KitA znT=Omf4y3=Do!8@AJPUm|5A5%FPz%UBY(H3ej_1!n6hN|D?Rhd!}b=(a)5&79VA0? zrlx88tSCF0yxLKRpmEm3 z*ZOMtvMV6whxs1DMPMO*3`p{GHbh{g-&hW^8q1QqUpw%%Ys(S-!qhVuAjcJ`aLM<{m_762|#W!zgGQccFfh zW_D0=l$pGddEOR$uwDxAbXL^oBJLYB>bKas0tj|e&T8dvUxj$=Z&xfbauBM%ccI)} zoU~vW;W~|GLJ^Po#`X)yuXSb zm+JmUn|ZLU6>20}=$*rKgU^%y2Yu$dIh1FWlN7#tt;3Y5JF&^h6t9fZ&EBn{JxYS1 zVgS2_x70gEm$NoN)<#Bn4a!SttflL1+h4L3nO@7YKj#oGk+1mt$6@3jedfw1ojdm# zJ4u_)iDREHyYCVdL9^-?dB1sYdDa(2cv=YjG;FqFOMVF)V((l@=CSyJ3xFiO)a5RF zOg4o58o83KH4R+grSq;Gu%s<&gg$z*G!^-8nc=dX2Oy}h48-I%3ydqd=2-)QCfwtT@&L%kDhe0(48yPuu%V05tOG zLdtGp%l5*vkB&ml)Chni4_sYF$GEDO&Ya7pDRSv0uZBuLSQ^^f4r9;M|K>r+XzGoTjp()trWh<*KaM>P`eQlR!&uB1(P15jV@ znHBwUdNh(mvW^=@GvB|Bw%!%92|rSvp}&^?d+Rs^FC;+iC3dABTs!=OjhZ zGj`EKl=hF7dkigEI(BVo)Gp*(r2-@r42MBe@jNbTd~rJSY@sHM5_BH-H!|lSW$j$M z6}#IzFsLOr9qtPn^pcMqw7c);HKHUmuFp9fbZA?-=1(_#g%z&=j~&XZE7qqE5~%f5 znw=bOcMt^CxF76?oHb8QEc+SlcYNqyEV0oQymd$0DLwh(ls2KaY2QAfA#gfTc(Z-v z;B)tY6{np(oxE>};5&zVy6sa^^*AiJd79MZIC(L=q?=5g41Fn0SYXWkHi1IRaT#AQ zg5X+uC+>W3Q1+(tFnm}2JNX>BAa69$s|q5mijZPCCBm+G^4GYJgRp%zJjxx6=S3ej zB&Da@8e=@TycWVKOTB!*SpY`{**-+?; zI+GU9jpB@o`rdl@#}lkeeemPLsmIV+MY_;FyliAwU+kWmzu4B32-N>V|NjEAY2 z>a`@F7;dL*U)c6y@B+W0a+z|pP9yTrz#~k@jEMW!eVU8ol8dLzv>&#`a1N&9-zE7Y zQE6ei!%chPF6YPxr6ykT&$tskHH>>xu3bZ#!#oZROz+Lwc=n=QDODUbE#RkEsN7qu z@Gp|AAR1S=@U zp9(?K>hUXDU)xQWxoD6=FGrr7MAp&1!56reJiHD5AanYL%aevn%w)fe93LTd@E-O% z2O`_@YMkwdiR~;t479j}G}5$hPhPwWQkSO>os}W(ruQI8xIg&ayoLQUiiYVH85hi< zwLE|oym>pX$TvpD?9XXM_Gk&pt1HEHYIuY%tIi{q#qA;sxYYlQj#3@!b|=UU2^^;1 zR8YgM)Z%=dNTsof&B8j|lNCyP&L^=#m1ecats;_h#$gUY;B)5~^K87O5#e)r*4-ud zb*o45_CTa`uf|PD$z-|f|il*_2D$EcM zx(PsYDsuCQW$%^14h|Ip)Sd01$IUAx)9{6ec0_athGrAk^?noJor&ayM66e=tVs%ObMT6Kag@0zh^f& z4f>)V!6=Dn6?9{~K8BcJqs;&xC=tv_1cd` zC5@*CM*dl`3xXl@2}qNdYmn3r6n_n*XB1v@+aC@NFL_u>nZh1mpg+1@J6$13KX^1~ z)=}Y)axox0f)kXQkg$}j7GYrVGf-vxmGe=_8iM%VOA*fnvYY-7J<)qrZEI!v-`nqD zM#^G*=fT$e7mX^+L{5oh1sGe_HIb|R-0W;Esdl0GjPvRs#hK#sJ(u?k8_jb zSs~EcI#|_VPFmgO6t0Vertbg_gbIl_q7tbrs~6}EVHy>UrVj0QXjxg-wjGZ_<++{Hj3PfS?Kga`-V)ehTAN>Yf#9*DxfU-WF9rE;DUY2NR;NsSy^bMPsT`Ld6lT zp;rt%qPH#48t+n_eRxS5pm-@`@hZ-!;t&>=Tc<@dCx1T=14~;ocx3CbBg@R;;1ufv zFR$YmQCF-rY z2sIl{SrGfPFN)5Kg!}ApxgSNWQZR49!L^WW?3V0{18ICvv;xV_T4 zUy7Ka{(Od;=0x3QB6H9Y4=i@*K1nD=52+U5Oy7Ql2Ii3zuLURPHJKpu6ry}aN!}p0 zSrNBmyIuWW9852B_u)EagC9$4+Mx~d!!(DqQ=sni?hV$J6{oKj`*07~8uI9EjXpmo zzhHJ%efrnciGKcMS>(I6Aois(j$69VraNs%)$HYEpNAzs`;DUd^S6IoSel*W2mZl$ z5~rraBUby>J-aIHjo!rKA5K|0zZHAT`+GgG5pLv#GJgit-8O{>(~ILWE*Iowr0hP* zjZ@QgF{%lDksFoT1RrupV13eJ+_^I{ImtKk>NR7f2b_tSJahNy-Rcg01i2ttX%y7! z;QKE~6*W+B^9sBn7C17(yJEGEE3r$`**FkzNcpaSI_eU{_9_K1;gYo@lE*9aQ3al->f{RMvvXPbp)ztPL#Cbz>DT^E#Ck%gkp$iSTN z@C$0TCc?`P8yiXGjq4awDk}NY)fk~v?zsNURUY4_IXM;14>~G!w0++BU(t)<`U${b zP%a+10Y?t-RDF@}-J5qUq=Lc+FzRGwJ@{<0J!(=H6O4Hx|GG1=vgffP2Tx*WxJegu zF-=BESmxU=WH;; zQ&d zg{cvX$62M#(3(Pmu7gfw=t(#EMXVH+n7$(q!lHqjpst`TvgdX3@XIro^D)M%vorB~ z@8Z(K-K-k0#=E+r?cKc*n$P=~dk1@4Gexd8EY$kBB-dId=OZGwwnsz-9wg31I8;~H zSLaSMA&SPHU^AerVzU=JWvG5hXRaQ;EB7Y2h2LU|m29B{Y zzr*c`oU_sGOf!Ff2Hl2-#VxR18A^PmfzunQVav@Pb=h?h{!`@!D979aDi^SO(A#4I=Z!2C29^N? z1ns72VB;WoxG7&M&o>)%Xu}pk_0fNV{DqDVUcxix!Y-_j-no zjI90bXXx8R%hr|qix`l}=Y~cN&gJCv@--csRZEU011oV+I_jiTPfqxZqbv+Rx4L;k~d)FCFH@LAu642Fd_&vs; zNQ?L*ORf9my~d+Hvm*6!1PzTL(n7nhE~n$1)(tS{o5Sj8SDofrUrrN&!;?|Fe&N#T zL(lc}(2Z^K9wqr=Dc5?+Y=$M`7Csa)+{4RZtBl=83(seZ*3raf{T|DXMiA2>Ld1I~ zJcQz-Wp?@_{C(Z*@Qys8&z`=vKk9YK!K#6>-C+D=Kbd;9IER>*8YDn+Z&b!N1uw zjBIPS+1S{RoLcWY-R>RkYd^T)yONYr;Nm7>hx}mnl#oJ$I$W?*%~hcEGc&O-oi0y@ zlMk3xRxL!tGnaoDBy)yAcZ8j=;nh~uw@1PBi)B+u$0LtCr=Gu0NXTB_(QuZMTY*j zi`uh(`3t_J)*?EUmuV6LcMGZ%(sPMPK7T=73VWsx&xyukfj-%W*ZG zsw$IMRc1L4lI53P#rzon?zigB(d1sTr5_-=;;}8TDsS%$G$e6 zadP>CS0H3~-o+$$_!%p6=+wTV6k0+;{8IM;J8Mm?;riCN%qC7)_|jDEd^<$w);YH& zyngOtgd9*!B83BH!!Xm#&D)py6FCIKoGJ~UFKKBS_8V!RaB)^7C2IJZw0 zEid>JyO7Yc)rL8dG`^7t0J%kYVP?j|^YN=sKM|QWHC0AuxnVI0g}p?~}00@T|RY+*a+sSDaKbae%~yM@q^ zU#_m!m3`F0vfy!4s{m^YIV#$i*zSM5`Mg3$EsnrK% z3iJRQ>SDyjJkBcofDB?C^=5ZO1ig`LaV}mQy+JaofyI^aLXVAoYALW^hJ;LJd{^?G zKP)X7lKQZXpjyf*VRwvRZhmC5)PAC7=Ugu_qo-Afyrhcy-j5$Z?RuzT2) z^#SwqHbL1zI~K%_d)oNl9LfD5U}t`tSij_W-F8gD#C%+4^wuF4-Y^HH5OT%>_uo4x zDdQHO(d1@m*aP2ebT`viaBVPEqcGsW{ne zL3##h42s;|K3v_cCGTb%?C*%JU5MyUPp<>9eU5gidjz!w{ zrDLoYmtTPeYnl0cKJ~;gy>wMsjqbxzdvAS1DchqL6+dd6*mjbW^BcEIlFAyVH4k{m zHP80^ABR}~UhTwu$X8K0;;@1HQlZo5bUV7mp7DxJS4IB_OwLbyyKMqX-aGRh5DYU0+`SKPJ8YuL0<5%?B< z1$wLJdA|@}3f3#1X`8V)2#@RlSJb<-#pLFuZTM>5y#-HQ=~==-J>2b~@)afN z^xT`nnCJ?v({hZg7vT#MbzekOFIK%-ZbiH~o8=d3G#d?z=TNbjRS%|<(p)@6EpxWv zKo+~3^LIhnboE-9x-$qtzZT}9g*=fKH#B4m39XDu>=8jP>1l06)`ecaf8SK`ob3_r z)b8)~S%c5j4!9r`c$?5W3%m5;bE_d>R!fkqd8Qr}J~X5s7UB9%O^p!m;FUsqhHxSW z&+o3SaigfmpPFw4W-Y0y+^wG=EFLTwW8%mg9RD^~FBZDG>dtvu!S!H&lT<=M;i+l~ z3y`$;By*XE0BZrb<9}cSe$jovk(r_4y+bLOPgXGrPc+n3588N-A1Z zhNaZUkNWSu7@rMB)Ym^!VZI3o(RLPsQV5J;O2>c?@AoS7L2~EH`)sG1bU9{iRzX+S zZg#HK?xQt~Y~&m85TcSdI|<}xQ6pBYHx+r$b{l*Gsj-{v#wH+v3)Gz;Ohy{EBO$St z!crvlKNjNU)=NYz<@Lf5F>M9mxq9W(F*pu|skreMf(9qHt{+k4`z;GzDJed=@$!*i zv3l^}`H!E^y@;5_k$Au|%E0(NMB6Q_Z#V_+E+UG){8U0IG{JwnxF?pH({6WAv?h!2 zobYmMPh*6tYLfj@RWo!pxJNuQQ(jhv`=M}(T1d;y^)7nh9v`pscmqU1 zq+${#^r$^O$VsIqW}9Hz`jF@R7cbL7q4E6&9wvJ+yHSG<@dJT?z^0i(faD zLIZP7`l}cGTf<%mdbe6Bq^BWI4iR1FX|wHu$3 zGA13gp%8+KqV{yZON;dl@wxZKy<;POff`f%UexcfVXH@PuMu0znboYnd`1yzp$4xL z@wncVCQZT&{gExoRVv+fwARalBYaVFdsgceH|fD)*mjT54D**?@rExI&SQm_dbar9 z-=%}vXnaJdK|F+=fD8*T_Vh(USd{c4(bC;tgMwqu~CB-Bl9vvOyqZs##jL}TP zWBdY!|?VSHpo_U004dSED#DdJ}zRZB{L2 z>e?>N>`37rDKXJzCI3~#*ptG&MnaPG0>mkIIUN@lv&s5u<8IVXVG*7mKO$mNHS#zJ z$Gt!FF*Uo7rOCw`$OUc^7abiOudMlsKtTf9;x(dx1L8h|qMPt`;%7`@EP0=&?#^1? z-cfld;PZhX&|*OsBh+6?U;ioiYGO4-=(e^(tS@clPCdwE0Yb>Znw#iB z>#){=#lme#e2m6hn-32OQJn(YYX$$IUdMaB^xllE(Kkzc9h;r>JeGfcZmd3r+THN! z3c38$xp^xFTI7zsFP()|RaBPJmGXXY3So*7a`5m66A_KZ z+E<^Q8F+dK2RwaB^9J7?D%xiRY7We*Gz=jZYi+(H>1mx6N47#0E}WHc=cc1P!Su2N zp{E|re$%R@Fs~?6`-!hA*6PK0w2Y+aN|s4{saP=!ky(XmOQa+(3cicIe)jbG>W9su zmwD30IbCrX`*MydzTf68lXTWCMr(X#WMjR+Br932Zw7)0Vo&z>QH(TNHIbugepK>)Bb(zjk9q~isMQ=3K#mRD2ZIB}>=V05bFT_?+87bMUsMN_X8UVpF-J3e>>#vrUdy(ks z`rSPe_bz`GkMp@!5t$6xFApTky*C!HIiCxqd)Vo^6!UoL=8_d04R9jqU9DwsJ9}%= z(tdahtW~sG*1r7B{JP4$XqOXm=<196im~sJ;Il!h(O=ks+~!l;+)f_0d_@P>v7WLR zp%LJ-l&SNL{d$;PP#{0Z~KsF!u+~ z&T?U5%jv!E%n|5~W&#t_$Vh}0vL^;2gE6S3Q?J)*w3KScrm`nQqxvf$NO`S9mbUHw z`SL90G$~2h+3(_=j>}^m5^5Ze-K}#p1$7eFQk+b*qvMXX3XpowjUNu$+H$85oeu$r zxW|lfCPr%~r&6Ui#z&FsH?O;4k?o8(s@S}3X?TYkCAj96AcMa7It0SL*D*^|vu%ld zOc}*O!AE2RJ!!VR_)r-Icc*jCthdHzkoGMe#u(}hA2qIivr8Fgj8v>_J>an8e*-$1f(Qh>KITmczaVJ2jQrW;FJ2k#zzc4 z#Qhv{OJNsECaj*_9@Nlnkkp`!QoJLS>ArNL@ z)JH!92!&fxL!1(7*d6u5wY0S5N(Tt;{ZKz=k_=70AUO~)WEdG~+2XCI_Cl8ICEPDumzbHI zt4!s&1Y%#w_F=a!!%=#f^0MnS#)gKH6<7S|12QPoI|y*Lpe6g>2s}F`rv6Rgad%Kio@9c;kKUblS~@w;TH3`z1>H_67pfvs=E)w|Lp*C zsWkJ)m=h%#I@&o94&!)!LH(azmskW;LYz1TP1nsvhv=Z3k09%rr4Dad@ z_qkPs$YxgKbM1=-TUFey9hh#p2&FgEFXzGrk9koC*ewOg@#lOgeQ5O@>(5FfYCc;n z)P{w)M|=+88JsA$Hb)8UDxeGjB4SW_`V&X;M>>Ce1=RcyI*JfyaeWK*e1g-UGQgCB z10a#+3?pgONf8I&PfOz(4_s%`#d|21>%&x@XbU!4{D}hSagpKYpNw+<39>U-eBk6 zdLmFaP=PW9gLpZBxs;cG z8OSqZcXA-;MTd*TJ3a|+1ksQ)MZ;DGm3==H?m$s`VcyiLI&HAO?JmK>!dejo8O#%vuXA~0oXtyx; z6Zr(7hL0~u{gtwLJI0(t{LDDFg$!vZr8_wp*^!)FTf0B$oGY*~ZO!zO9ggdgBhL}e zace7g{bE72laq-wgwCj}6y2B;b=f*Zlm`!BH;Lbg?Vfwc|s70uPUeM}5f(RF={j8vUT-Agl^0d;4@NmS3Ln`5*UF zq3^?}!g0{Yq>gWpShe3qhk*=2hLsor40#OOu!)a1(mdBJ&u{Wi@dv_ha>pY6& znH{AUMCoIT!40qu&iP29qT_ZX^<5p_b^O%_gGmNcvmSZ1FUVBHnlL?5XLHOf7@Y0yO8zTq~Cu{!BpQ> zd#!v(X8a*Ljfh8Z)_$=Q9pp!>{jiW?7}{;#y>k2Gh_m;Igz~#jkxKW$c`m0gnaYx% zFmqI-+GU+?IV?-~u=Bz9!B>rlD9`=FJyQ(_c6e32?~SP?H$=sL$$BR@l=nVzP$AR7 z=9R7k2Y?||f$oOcGmbBW*?mMuO(>vD(I^)-w$!t$kGsxaN*V>MI|>L0v^p$t*xg)L zWAbFzD(BvciGS0hX{hIuIkWNJFE2i?ip6X^IaT#p@r4VRY4ZWHWPe48M#y9LmfkvsDU^r~cmWes8i7JuM0# z^SM5d3D_BzJq&@jx7X9L8yW74Agi^4LT*`KDM0P7Ie+<*M{7={6a{dJ0(R6X2qzp; z6Xcj8tzJBS_5R{|?!x4JWF?9UoXj<=pGG&@69}Z#%$d`yC*LAY+W1T%G>gX7DS@pM90MLhk+qOq({RePAIV>PY zEyaGGjZzJXdJ)*DEziOl?VMJ(gO?M4jrw`>?lP?l&usO?3?HH$RFWl3{q)KA`2`E5 zPLu#yKD(~Ru$jic3^#hJrL7$S)Gks7H6_)!9AFqV5cgTx*?N8VXXx1;S`KxhP5N|> z_ew1~0j3*36jtxlC%Ux10vO%r27B3agB++;51VbO3Uv{i!V|2UTV#QZx7mLk#X%Vc z0E1M+lOJUOu@pI#&A%y6tlh&!ItBYOyZh8jc=bRSXLV*I!bKp!-tx783 zEt>`YVM`^&O=Qb8^HCvGw&QHLg#SYF`KgJ%erlA;rUE z2?CAs^}!@7c>moATvo#$=DS(ewXq#I3k|c6wMpycGCd3|kzX)Z<#~K|bNMrsNH(s% zYagT2yykNWv-luKt3hM8Q7=%@`~+I>m|?)vXprdXwQ*(z;3`dIDS*m8G{sO1C@yM= zwMHcenB%jp$@~_DRAvz^~hRDhu6%le2IKtUhn<-b3-*2cVd&P)H z4LZO^OR8zCYmECNu)d0ms1LvbNd0dcy~U zb*weSc;;;Hy{~iZfz;?8zdPk@Z1i&bSRk$33%wRwS8YD3`g+kVn&s&Sxx-{zuO8ac zvC-ST37Aj@`g)br*EQQtK&UQxMzIJ zCN?6D_{|)esi^?82Y8R0`?&p6ztaqKt@<*$H3=5gPtdK5?JAdTTy-LT?@Zy@5SQ&{ z=uTcKZAIL$&B-kcM_U<$ADx=2nBg;W+6(&Zh>z>ni}{IKw;wsXfQs|g)r>4I++0V+(={w zwj?Nf8ww=7jmU*1(LjKJZS3)Z`eX!*g*a1`%w2XZrfP$mBS*Frvc9^vA z>{8`3#Nmms`&0p)uaG#Zu>p2ma+YfpSOebBW@287xp;fZ-@Au8I} zM7!B~1hy2plJd3FnI(Fl#G}3KndS0yMc`?XN!xI<5Xzsx6VGGE1DTYP>>9r|4qcA;{y3aAjn4E&Tw)~6R5gzW=dbLZ*{*nSdD)=OZoz}-I-`RWF z%XFqZo7tF?8;5m8aTss=`34p=%9jX`6mGq6U)G4RxQ80p>S*wpxH055P0hrK-_2s-D$w#z zhKwEw%nW^gM;6?@TIka#%MN z&F))fXIG^*+|Hi8&ZqPJODOjrJ1?@-UL|9*v5WEmslz;JN!5NbvE?B*S@~|=j;^%f zJ=|MhZN!N;p~-T%tph4!^A@?DXNiZkMzh!H+5@`S^uL7{A{R8-TA%Op6E#lnJ4h7{ z#rn*skGgZcNITd_8N5B`&neda z-ja0VT30ODEG2!ixvmsI1r2ry@1zZ6X9cH>rM11 z517U!E#fNi2ZZ6H9UhqF{GnBqOk^Q~RzN##>x872Uy|eQN4qNcvKPVgA_J?_3d?Qb zVp;Xk?4ZB-B^R{jj{p^G5CI$0zo&&y{nHTKZBm+?VOLuhu#tuYTT0DbR=z|EM z`oq!PZz^j=m+?9N$oqJC{H=WHUJ&`|YLmy0&*$Gc0rBmdk6FkqBY_;Ej$|%m4a>x# zqadl*R`yD%st^3kIjVQ@u%;wW=^a&{kQfoTB{#$Z8gvl zReNR#2w(>T=4EBiyEH*MSOItURb|!K5Z}ds(d8QE0nzAxgb%iKynY&Ze&|3~SpWw$ zT~V0-`Ncb3KI;JDc*D1f5+Mn#&(t{jd&fiB7aOVw;T&tfpeqs*ex?$}cqu3HaKbqA zrCI<55K-SkiNYS$`ktl>xNw~}eHp9AD96K~C6v+-+5H%tpM^c8raXMRuinj4)w6QM z+4`*AxiAgN_lbkuhyYqylo7J_(CSC-e-qM@IsrZoI)x$y!ulWwp@4nG`FSDk_N7Dn zFX)xdA37Yez6ahafp5N+TefjUgKjU4Y<0E2>51jRWOfP+RX@e#F1lv6dm}6qO^A4Z z#oON_ltT2KxwwIWh1;)s%mEdD*eob`79^z{I$8Pf=oe03%R!@UF394y^Y+t1navY1 z4x)7!R?1|4&=YE~Ydry$ojy65{}$Gf^yB(p7u~3B7}_888T#6z*lLI|+;?=iJq;1u zh0P@Dj?IaO9(913N**d74|5lvLG^y`4oy6q5B9z7sL#f^9XVP?1E^w9hZin{qLF-) zU5Z2R2u8SFNJg0>_2Z~_^UCs&G7<-x(GpgfpBvD0Un5@v!IA+CY%R=iAtn~^4M1LA zI0W&y)ru8IkI2mNu1r?p@b`b&x#I7|=yx_m3yjh9VRh7#t$;5?Z-4wq>Q`{#G<;Av zP{c&m;PM;y_D3 zVkO%?0<|)X!(A$Z#kql6kVM&5M<=wNjCOL)k$iC(&O40ZjX`RN4gt%il-E{@EFjrp zX!8?kwUd_;IfXqDm>COcWhKHi+{?5^L!) zYlcK8-*r4Rd)#|7n{MAx7o||?X?+;%s9SXgBCLn#g|9EV!gZ$48@pmfXGC^bX?sbj z>FQ;JBE+{Y))cm>+Rs*newGnF2Dv@bi;I}r8h-4r5ZvT@h`N{tV6kDo%=Z+fMC(Ps zXcI29t_x389FXAmu1A9PEDw?3ZYN7+AH!Nsvx{Jb8Q@e$w3pUsM##f6_{l1AdW9qQ zIHrUK`zu>Mip&wYV$uoP=OG$;d1veFnz?{3d%Z)4J_$*~BMEPTYI1?T-rHVBBQ)oz zEdU6psJX#wP8@u!>@mUo?$1_%95lwyji#EgdXDtwT{;n(zoR0>lfdwt+iQFP6=(rZ zVCwK$A$|Rghw^?k9)oFUv`5xL*Qv4{;nJ=wWXPzybB7LYRoJi*UE2zCayM2bRO)Q; znT4sYdng`o%Z1lrmqR0&u{kNbf#OVX0Y+Cs-m-2RWZ&LCu(1ptUw<1S&Ny51ejo-E z6_I;1TQH-@LPU3ZnY*x%;aaON!{&9Iv*JqWCe09SRxsVY91PYU>i{^Y>op0xFkna1 zoPTWv&(%;$AH$t05l%T&Y7}ec+N!Ei1mr+&8!V3P{K2`Y4U}gO`o1Klmh`JfJv)tV zdNwSLDt@D(upZI>vOr|I@>$XGstR%WeNNfg`Rdh}w(**P7VP6bP4)&=c*56HlL?~q zfUMqgtiOTEB2A^$)I4c}4ta5Kue8Wut#*`egi%XjBj{wdJ2`98zV~~9nE<#750GC> zR#%7fLd2O?a|{F{Im9Xnb(2$qHUwJzpxioUVmn#xERVx%;Oj#IV$#!9kiQq=&1l`) z{p%=Ps|_Z=8-AHJL19@#<73Nl4RHpK+4H5JM*nNY%T9r6!aa0OK6ETquHyJK^RSR@ zPLVZfBjB}ml)&JOk3uC+iT@9vqY?+Yc%HM0N9mt`2MmJXKl;eFS@Rps>^Qs>NFI<0 zGm?|OanoC;S#?yx3Zx(p!E1sqjmh6AFsxlrIQgjJi?!Q>^e|nD9RD-ahx*jG=d!8w z{_EkxtBvgb6KE<*n$<;djV?>(Ic$$2M`}+~BNa&%-)U7+SYwtjug2jSBN-&G@CAP% zMa&yv|B>LnL_Z*W4RqRXQUfnI%05HN?b43TnK^D)VC}D=cVJKSoK)#Oe-+rYZ)mZ? zH29QTeMy$r{n_UxA7W`itDlXvw%@w}i2pwr$T)cnZ+G*?vX?g_<$3fcMo}LBnwrBs z?NtQQ7}I(gVGYgo{sLuko1HES?iB3%fPj~8UY-Z)0o3xbJSdjmRl2v_VORRUqhv4B zX?Zmw$piZA4I_a7_YFXoFN!dLH<7KSfb=B+$O1s28VCHNoJK;thFU80*ZM)KGZ2wJ zqowt?tuANG01%R4XoW$QY^3M_j03oD)X=HZj&c88*H|OUc9C8v94BjzDwtMlzr#*i z5OdaJbt>tQ>0!Zqo+JAnj{!iXzJdaZZ5 z(H^n9(t2EJ5(l@uc$6yFU)#m#f{?D#Ecc$C56L^gS!Cqi@DCkll%FOhsU?jLpC1|9 zfM%?~+G;BkQJR;AU0<$awb2;=3q8ZNB^4Wxha+yxmwv-tUke9VqJw!o1Ttk(4d|zz zR&1llm7h4>pz7$w$Gr%{NT4%PovT$0dX_?w)8T+|zgf2-=P?gJqDoUE_|U$>kWc@e zziJQXy>KVM;nyxJc`lo)-^;SnZyp9ev9hKWcbX zCGwb0_nlYnt?r-UF*67ZeLa1n$F92#$-hs8APsk6uyk)w-gb{-eFNcF0{J())kga5 zB;ywH*FEupt-pu1%nH|$kZ}C(CVgRB8yTuP9|cV|?||a5%EtHgl<8OVu854F82}am zS6W}`xP#gfZ6^PB1gv|J_n*ZsLaUjX-Z7mji~>#qE^rX?xr!YQTRmAiNnE~)^?9;e z+f3^D2Z%)hq#nZks?OJy?Rc8zQ0rX;h0PRODS)S(fa1pRs;9XTGnKL_jr|e(C1$g8 zdB~YP$bY)X#sLt(CqmO)hn^Vpkv3Q&V?(-fpY_`D9po_mU=O>2DMjbzjloCWh2BPb zuSn#qzr&Iw1}$|~?_CVZrC?#}j~Nq-J$W*b#V6vl?L3vd#gNS@F%0MbFahs+7DL0|9RU$*HL8z# z^%ny8PgcTVus_ftG-P8lqjdVRCCPYOdf8WcYuz-)<(!wdrOa4ut2la<4IcfP`UgN&s z+4dlJ!RlIV({)0vRMs^oa^w|lg3B6q6C4~#jJ%YDn*C|znYEd)+{s`yp>z>sFDanO z7OqT#1!%ug5oZb&ZDE=tzi?X!+~{->k&=(z^WY-+nyDO-3^b>ImVK$(P^;(abE6^0~l0(?baOi>jdWB#@HN@}zGWZYqbcVMIk=AEx#QkIsk zt_5k`##LR$RaC^!hz%NWOKGtH3?oOgbsLrF_qxzeJ-gDp*1+Xv;7&sZH$+8Z zNj)}wft>A9kd@u_OmEu~<7uk<7rb}kJ1t}JuE`in+b?T0Gmd_rpcFxyRnyI-jU_&Do#djg4 z){Dl+Yb&Gk{;BZ#K+b7f#X8|yhK0QE+oo%mQG-dBXv9m-^UJuNy<9uf{FBv^1tU73 zQ4b=AOnV`*!L0(;?u=UIgfB<;Q5w$O~|^V+)Boj*rK(Bkcy9y+`TjkG*rPAh6;AN z`5kpo*K*jQ?wAA_zEza63ca2qpxLl_@pUn(%g>~M) zak|P0|5(@lb&%wMwfFd!sZ38?{a9>0y6ULT(U$>OSuz}AAUt9S6`jnnL5;F^;L#L? zN1?LO249Z%+Nx=wvKqKPfmCOO_NSje>MfB%wDO{YmtoJE5=g zRP%11Xf$@?#eVeud8zmVK&H=35cj~tqlwF!&6DxDBYIS$s9lBH(AA(dYWtsu)kGSrtS*1895~{ z(;y3!Ac*44FTCQdXmu*g*H9=BE#ZDKzdWm^F@S&cI{LlkK$N*E|J_(UN3t=hIj6s2#`*cmgM>-`X@6`*>SAC3VVNBN| ziG|mR>CXg~P-vY5c~xb7-l%G`74($+#;MYzxnLv{&C@s2evy+Wh4Uc*lv`|@vn#>Z zc1ugIsi9V+Ygs`0yr|l@PDajkj8tj7LwQtIX%T%rT&Q8S(7Pz#`RWb7DfcM@WEM|p z7b5{t71y}Or_GgB16@y<=n1@dYoNs;h*bWmXzBCpS4pG1M$eCXWNMKy1*6c@R@1Dsmc1 z^RM*UczcXu@kYyo(qUN#eK&tv^xK~nEN-+60vkv9MZfl`Ks%j9kYM}TlvQq8Fe(9U9WK}(^ z20 z)+EqnF**AIJoLkPaESEYo&Gm7dIG9rz@$A&p9}Qr_R9%p=j&;SPo9o}oJAmba~0@x z%gNU{F>b{(Ik0TZTc`MjSo{X1GEc^@S*UA6jQr;Xy?XdZMT6wthN;a&At-?b#VxvO z=bqVNOTc=B9v+j|QYg~xlSTFDa#W!6`AiHne`E=%LnQ0UjF)wN=9UsU9+Huag~vqq zYQPf{yY|PI;2NIG9wO3T>C4OtxD1S<*ntu-gn>G4C3YQ)ug3ZZm5No{r)MxVZe+$+ z&y`bTvJ+=080yPZ>)zrVP8(dGWm^}>HAO2A?_5kze#f)<3iX+;{r!EwI*)N>$R=0) z<46@uv?u}opunvB4`Ekoo2m24myJ8{l|P?;fA_jh;8?_=C$WJk7O#fDj(by)8w z7)Mp+cW2usHALD_^G(x-yosrrz<6z$JwlyvfzV^MA&M69Ng{af^|tC8G6tfYv&5-v zigRQ_*^c;jpeXq8d> zhl$1Vv~u;om3V{w{>KdC`S2Y}HQ}-6Rg64MGX=gO7RkA;d_tjEL1x;u@{;!S{uc&t z$eqyemPD+#cLJ7x6#Auge-5=If-Oy}7zmMietvLgKLhIPVBV4PE?HSo}6DkK^ zlH7}g^$O@qafOBiz{SCS9RohUmGrT@+_FnN8nK)QebsWAAS2bE-kz%AvF(uf&J`8J z4uJq>vRDJ_>a^`-$jnUSpork^1AMaGwNi@6eACB^h=eH<-lWvM#-<4Naz9b@p^m*D zn&wAV=>!}5s5WDnG7r*=i-+#hyw@Q;1RUV2xhWLlazrXd(#zMNk_7-1K4KQ*DA zETOGj=e=|HVU37%UuNNNg#H(Uuq9NsUfTmLy)5E`FVoZ0R3 zpZ8>_3>mC0M5joG_iVb8J8MY&orlMYG9ahMZ{kAkK7gm3qj}3fv%1e#Dj_NMH%at} z&QFnOYupFk&y@v07?xQ=z`Vx>h#8F)`12cAK|kEJ zLrZ5&9Xh;&LF%2e3!#V?e-~_jRc>;;Wqy{?;4CY&%acvdGN`uHt>^tZ&hbb+MNJ&2 zlqMk=4y$;SBp<(XBw8jsQowm_Il9te3R}mY{3jAPVCku$oxaUKdTx(**#izXOTeYw z_qlS;ebSyD4q@Ed-+XTUDX4DI+HIz!!G1vphh>pPf4wsNnzh1JtL!kQ$9vPgf6!=3 z`_pDZigs{47I=ph;d=8u&Vl^TzX^iJJ2tMsjk_Td^$;qfX)mrW+f6AKr0;krS~@5F{Z*b@{~y zwm%oR;b~cgiB|d8=Du~8U=#;fbS=BLJU0EjEjt{dVL^)yp4>r$Stnl^O|f1~FYXXG zO{?M^olAkumK7xQ%7coN7;T*(=3Wqf$Iq9g8kFUB=2YWtdA0*$fc+|5o6CEl+zlGqk30d>rp6XMa;X$2H(0oq(dD}8wlQ&JfPE)j$7w*BI zww>xg9C2kXeXFLuW)lHp)qv^Hh?UZ}Yf!`huQfV|2CtSzTq*#&?w2swtc_!s%@?&P zT$*#&WbCW5F8b#>pAu+D=roBnF~`!^{Uz#kF)@k&SIM)gU1vK(X!WEe5Qyb{eqAl@eayyT8xD@C7z z^S1PTa=_AF>JOuARBJ5#vAsYyp66IArIc;|syl8r2{TH%J>8RotB2RbcT}kJOO!ez z4k7SVl@8coU+0s4tE3z*97&_(MXeCPj!EptThrcmj5 z8(9Cfh>BEaoNT_uaTsKiO9tZmVrd(W8a}6Yw#_+*GgD^$MBXk2GnhothgS>fw$jnz zg%=xk#|=4P?OlJa0@W6?d9TlAz0~4Pal{U**zb4rJ7i6h9|qm?+@t4ZM?+$hd)r9F zuN0^a+sO$JH)mk1#_iQOpJr|qaxNA8FU=Vs(>Lnu`*u+lpucYOzl#yxgcx;`B87Mh z<=8hAIds)R^fjYoJ#%zwQrXReIeIph4?}=*2An zT9%r5Ind1~2B`dl^Z+7Pxg<9d_^R5p($+L0hn3oJ1gl-6UB+yBzObypUN|kQhmTx! zh{%t);4?%|L#MA4?J8Fx{p7``E?-aW*PZ+}UZcjoqtz8i|LmzeTK+J<79zOru6Aa_ zEziU>0z$u>;Z&EGQV&cTn=fz##s@&?!&!KEaL;1I;y$eL7sGB9p~g6yiTUQLB^IrA~jZ0130sNh7JKv3`0$bOrrsV z&J0X}1zZr$VVInv__|fIrhWUx%yh7KP5Y7d%=!F3NU*;Gi5NGY25ilc7TrS>K1aHT z9}jpv1_ao?x{MN8GD0GuNB<{;S+^f|OSXZv6?I6 z!qG;732i(HkF$Fp+PIfYBQNO||Gb=24Q(2#3C?j$+3^Uhm!D;)Z$k`)bko!d)W&C& z-80kwbVaUmmgS9>-nM%3G~!*QBL_!Vwr5U%ex1(3)J#nMpO=$Z{9Q@xHZ+S@)e|=> z-X32Jf?xqTV7c~O^fUV^nf6*~2#fwMu^GEZUS9p{=kqKnn>6hcqixO;I#goE+0#!9 zZ89k7PX4?o*UEd|)tQBrvd)n`efGVbYOUIG`(N-;x5x{BHLDt*1b)Ve(CFIWEr}b{Aocxg=2 zPI4)5jCyG<<-_G8=jSIHPfx8SAM}Wh+{&z%eJ(;{|3DO9Bc`jw^kC{nWW+K%^9~l>vM>5 z+6G0Kjo6v%@ATunJ&l1pQ<-`I{LxOIgz!kJF5>AW-OQinC?Q3g_G}XO1TSkC#ekBuM^9+y%=eSjB#fgzZ0Bo zzBb$&Co0 zAAUu^fJ9{y}PvObYi0ut8lnr`E1;OE^#tGZVx~5hyboD7UA>yzS%O+-1KLnU@g; zswDY^;ccsXVN$)`Cmw%>0YomI{0WZs`3p4&+4OV!V@ghr_P!d2R(89DIxI!~eml%R zqoS0ve3CFln`5%w0PslFXtapSmnR_yYN%Hc_KMP?cy{Rj`tBJKQoYxn6H0|0x2CpH z4QwwiRYI^}o@Li~#|0pV?Bf{@O1a^Gdoe9RZrhy5@YCG^sJ=Mux@admE8~I+xcYXA zaqkI}dY2H|#h=!<0P)?B&zBm@Eq^x!xY-d@pr{g zVsX46+<*P0)Si5^E@`OmTl&R}*c1gWvGK+M!u{>sH{wJ?Qh(YKwFLu1>1(sJgy;Q5 zCpI65aS1+dM}EvHyQX8o_;V3ayF>@^*b1a+IV{aZ1JP4Z8mG?t`!ok7OyGm=h zni{#937I&X0l(n5Ik{f2adEP73#f5(2?0O6+-#gLgg7~O1NFxLIKj>Vcm$8v|2~16 X>pv&tom}n$C&0-|D@#>Kz7PC=iqJb% literal 0 HcmV?d00001 diff --git a/doc/img/title.png b/doc/img/title.png new file mode 100644 index 0000000000000000000000000000000000000000..331537ee5150190223f2d73287781643a65d345b GIT binary patch literal 43391 zcmbq)WmH_v(k=vo2iG8jB)Ds^Awhy`aDuzL4;CB(gS%^RcXxLP?(Xh(Cr7^Teb2e~ z*JZ6??b%({RlU2ap57BICnNd}={*t@6x2I$F<}KLs5h&S>k0%o$bTa9i9RSOd$&LntU!|5#UeMQrIRr?F8u)wqwlDbZUfQTC$*K9EcKVDc{_=yI@% za$n>+K4Y?wiJ@aCwtI^)M<~jD#)#mB^=Nx-dF8)d0va2om6R5`HWoD+o54eI8Y#HA zFo(SNju_t)Gl#LX5~VV>TEcIKR&Ixt^G@Ev!6`K~HAQ;qt7S#WC^@u0XV8AFT6wLT zaCsDVg@#fipPS+xq=W5v2bH1L(n*mG-Ht+P*IK`K#?b7i^C0F&3Z+`fa8&0zUst}1 z8n^JfqUQIPaz-cvSWKEpG^mX@uM<@!fo?PwqW$c5*Qf|0ifrh`C)=_YaNadA6Z2S@ zn6>_R==4YT0MDlvKzf>&N0gYS*ZHVwEn%Y7XGIrgn)TOD#INqih~fA4Xj)sOccSmr zt-}Zs>m z!ai8oyp(x54npQ5YS`8iw9BkRiIMaK(3F{PQVmf5l6bw;oX z^{-rDkP*_iBofYl1H(T$f#$2wiENpqArN^{|NQ*GjU zM_kjx89}-Z%wei)K$%F-!c&C@ZrF#pQNH$QpAY&l$OF4eims9fyt6W$PKAlH9E zv2*#sjE?Z;VK;d72Tk26g^57p#~J zhTA{s<+t(j$acH!fKk=abs50FzZQ`_VVszJWv4?I9U`Nc5Hu&%j~2~&9bn#J3iaB# zSiN1`xJ}nzip3HMzG$N7d%c*wFS@p7;(28eUFo0MT1~RS1!0~10JQVl5H6wAue;kI zFTt84OOwTY`SZYaPLX~xCRwUI}ELXVL6mcJG@^c%K+5d3?z0R5@tBucHB?U zTn4|NzaVt-pdP^&kYa89*vvpkfiv!KwL$#;mg_T{2@G00#Th<|H`y87Kp2`1D!n&O zIoua?)GWU}QrsY9Oz&<|0x?8|z$?;k{qOC5@R15oV~6{fYlHe7MWxfxh7R*^_v{lNT3J?w z2@gA$I?;fvP&M%aGO-UZ2>1gS*6L>^=$w(BO*M|Zw~8-;!uu5^`v*(sC%q?T+XN{o zmOP}XpnYNGY4~9z+)%@ABwd`ynti`_-ITguouP{BxyQLLN7zmTfn61A-8N>QkcklS z!iKtI*Gkt;*3;I3Yo1Z^5w?*75&O~H(f(1nkvP#aQOh6Qzup8}gry{X_x|p`^kXTR z&xa5E^v0F${@VrGmbuIOW^}E0)}d(K`5Ut9hi9pG@=wl4NJv^phDdZFP$AeM->_$? z8)+!1l@Y69<$s`d#G(s*`udA|#l%JD>oim-|koPl>@2i^7eT3c53#!O)>M!i% zZdlR5x!sf-Y#VsAcC^s6476N@!i9Q;$%?WCI|Ty;ZwnlMiBH29NETSjgXNf}#wWz4 zRLA|si82dv_cIgodM1!24<_8EjK5QR|$qm{B>ZV{AVH>dPp%@M8H+Os*z6%ZZ6%QQD9$QYF19T;R^?UOo!^^RoNu19o3ko! zF%qo^t<1P=m=r0%`=vV7^jkga74VO%%^Dc@wB$=h> zf~muGX1=94K|Og(;zS~phM$I%=9$K!MW)5O!oK3RQU`JYegtZ_3bs16zV&4EWP5pj zioe%JjzFeHyhBdG-ov~jqyDf*>Y`e%W}_aY)-OgazgIc_i#fMEz{bxe_Y4`MI4DXi zLad?Rn_5CqYg)Tn@u~n{Lh1|s=i=`cHfToRi?nh6Sog2ph#Tq~6&vwAR3Gp^N`0LC zko2)t>_U=9a!1lh{3R|b9x1Mo^!jU(@`5UlbfeNk^3PvC0MHU1e4FwesbM zPxF_k4iBN9nZdfP>p>WSk@50j6F(}l&Y?F^v3>-H4VXrYf0LgQn^I`_oTe2_6y~&{6jR_S*EuPy1TuQadfD340p5`!(9rq1jj5(__g>MF{Px}G zvLtJt)9Uo3Rm3&|uXnF{ulG=?-c!(_J^?<)FkY}~uuAZjaJ;ayff4>LeoIKX@7^ID zBW$9Cq7kCtA&;Q|z;eOVA*w;_!NnmzvTj6bgr_LVcsy7-SpxMa^=9-X^}TxM`<8#^ z2cw0ZN}@~m%iP8MN_SyFOx=o|ZcR7#I(P|&QHQ5R6@=$UtEIa9X#BxTj76*=CPem~ zghv!*ta3zc%t^#bQb%ND6pLg3+W5AVo{_;$zwS(zan-mQwA%B0<^0F_Hv49KH~U<> zQ2SZ13-LZbt;f~$#E5=t-@_&L#VAo92^v2zr7Y5`z&nq$Lg&D5J~&VCq%);6m;5#> zO|N02it3z7UnV@Am48N|Q`@fD;JNyBKU3j&@`3fH@~9H9y|O(vYLZsKJ7mjwdsJo* zy{n~+ugI>1q>P*1mj>p4J^%6SUm7ZbXI`jUWLLylC{)zPq^5oFOTM_Ez_4tj>1QL6 zz3WcMVXRM4ql(5s_aW^8!J&Pbk2%Y%QJMR9K&!4@_H*9kNF$t2K;_rQ-W1ATG?}KE z^KGupJq3nmapxsB$}_)v7cuLK7F`x3PMMbmnnK%>ZJjT*Hd?kH*KcTWyeu>Vf-G=8e=hc-iNxJSzkr6D$3 z(q-I(Nanr^YtdurZc4j)dQs^<*Jmc^hgWXt?h+ulVZDXL-u>RS)O6uqS2Kx zoROxHz_9;V$%wIM-u?F*kvqvQm60+Jtqy8PEPc%{0&$Lh!@Po5>-qtfvay-zV z1E+0WHe{Y_7IjRDj-c8}CWTBpButD@NF)QI$?eHy`&KD*XvDjX%=o04Ety*Qgb1*7 zQ1$kWzv&2!vh?K+r1r7(2kxri+F+t!B4Ie;OyF*#Yht@s=L_?R2}(yPT%;i4@8?L}UK*T_{5laSgvk+e!HjY|4OUP-)EL_+#8MlbNK$ZA#mrgReo~*otcul(d#f6brej(#Gx|b13xW)ic;Nu zSXo6wMIccW=ajG&4-@B&(~6075IY%HG+NOeqW7@~A&Lm)5wuslOK?lOw+#gCzS+eJ z_rDRT?NO#0kxh)jPx;NL#Pp3Zo}a=~`6@-xU)=EF{yg-nl1kyOnTgq3MoDe?mO>3< zBtvt-+M@Pt!Is2s*MTPuU+42_zdQGQ+Ebx+|vl zDNZSkA=<+`I(8_MH$6YhImSBCOGHQcEO^{?T@1rfo^=9G&-fNLWGM7C&gFxv)ZmvS z$%kmEREy%2B)$);1rgaMnZo((#ox0wvIaAGLJWM0ctRh7dc~#j7`~Kn9FwIUHi}+> zu5RCtNtYcOgIt0)$-k5q_&+^D?#4yE=qjwAE& zd$?;Sdzq3^R|YpfnvGflK|CPB=fbB@7}hskKT>{h2>A)pL`o$f076wmHiDhNG{GL| zx2&GDx-G(*Ud$J z<`+!3DZKLPs){ixDIToHih|;Erfrknl`$9Y#v-Gdh1fjWHtY92GiDnff4^^4m;Zo< zT~;`||2tXJzL5k(ak+CJ&=lq?tv@owu&S}XC}pYVtaxg+@~wI766#u~vgJ@$U)0ff zKYLR%uo26h+&vp$d|PwP2IOZxyMgSAVR*Gdtz9$}c-laZnyUaO#ix>e)w`zX%{r2PW3*7V1qFInk4Y@bBgn6A}cLf2FZ%LMR%jNzceXHWA2J#N>Ym%wpwY`SGpaGT;R z!eJvJThn>G_m13lIiWhNZx_9uu}zgh^j0Xg%MYkr+=)cm*axH$(qqaNC|?qN(kZf? zD*AWDsTRve;7?Ze$~Har=Ju}}4ejQgynXRKOx>%DYn0`*s?;AoPSYJx{lF@~<-mUa z5Z55;BAZ_y4;w)pzeIPhKnv&ER1nV+n;0h@zZqj5Sr?bC@+qf3ckX9%jT9YK5p&^p zdr}v1CI!`Zt*SMtL zx8l?ZIz!*Wp)r7Gb6jM##^U>d8>jkfMSJ;2*4UqsP!P%An)}HG{tVDUK}L*6(+0cX zCt?{AjG#YL?pPE%r|2y8-LWCMA!Y}6h+m11-L3*{ZgoU2x?(g6I81x?_X%_Zzq4MW zh8pQsY8k|DecHX)EhQ!pc-WdNX}0e}+iAl7m7>F6q5kQ+L-yU)Kz2To1g*>}y@%pW zCFo{&fqM|?L}LCj0Pj0ffD&=>XsbgGWp12<+BwqsU|muAp>i2Usr^bsgXw(4^xXJW zmB_uai}}E@xg~?M)#`CW-BWwUvvQ#HuAPc4*y1#_HT#(a=IdCsmI)es8+rJs^vxI} zQ;AiN*REH6Nq`d6nlP z^?h5bqB+CvLoD_)li(iY%z9rDD-nFaSwnVBm}H`Ewov5I=-_)*d*zFQi!z44OyI>D z%Ur|)t{~De)VDOW*QYYJ-VEA~*?byx^yQ5bO*2ld3oT1n)z&E^mACo6muC|fl>aL( zVU1)XjpLjN^Ymk2&imYGgB-(NgQ~5q?bg9MYHVssYFE1CLa_qYQnFGP+m$mg?tyOGnNw+HF;@yCqS@ z45RvOKY!?Z`)jNi5ZfmHS$-{lt%b}#Q@b;a!YmtM0)wS&^J-HAvnRR`)doN>tt&Mm z+h?3Zq7EcV;E0cQ|FEU14;(@K-8t67k-sF%7Ka)G;5WCiYG6Hm^W0Nh7%TaOW0eum zR;VItZ+YI^7qFk#5GPym%`)^hfn<-*;qYp&a(}{w{$6;ipi^h>GM!>?b}QR>bwYaS z`E$yOK>l^Z%i#i-|Ho&XCvdiayGp*7hpKzcO1bS*-EQ9W%}WK27ZE9xdixs}Z|aD* zX6@*6Z_v=+M1AI@hUQqqbwOGA@fHE5LQr9GLe?88(_BvAia^9aN`yOmQl3i=pu;#v z+zK_8jWbTLNA?qe5{E6MyA>PW=B1vDmA?|#PW(c>8Q}%VpQwlb$4A`|)-*90`mBx2 z#(?QEYm*HV0@LLEqkZ5MK&PE8MGxEf$Ph{2NUwDavt44$EuG&cK-r=Q2Dm1PnhFY*~B=R6^O)gu(ckU4U95tb!HJQW;o9H=D#Es=jc`xFx z5~3*~Js3+Xs)%*lTWDBRXYw>2HFNWOV5Vf!e6r2bX7Mas9(?XcGblB^w6YOlST)o9 zuC1g=v*9^`qU>9SeKeg_y6>Xttqk~!LX&ZrN}RJdxTY*KJ=#mX{h4%7XDp(Y`S)3O zP@Vk31V@FU?fN+w%QZ^x7L6!Iwl!ifPC3CxASQ-8U1TtASelPEHjw9~cFj%KqGD;l z`s1vm{-Dz66OW1#jeYA=XFhGF*{kHNSt4V+rc%)(sAMbPV&vtk!j!tCVUZGH{Wtru zs~5e;dDJmc+GW0$y*}BrZeS1U79Ry)8Ic`;#U1A<@8LM#wp4uRwg7NC$~;2+N?w1q z<-R@`sg%u;c+Ez5>cw=@3wYNL%~AQ_>Wwc4#nX;iPgWt|UHpVJ4%OI!UwMKUL7Ibj z>>HJ#u!qX-LoS*nBZ!j;rvoY zG$s4DujskK0tGw;k|ug4se3>7!U&4-!xFI*MO3%cmgh0&vbp)VEgOa#MqGwnr0<9C zO5QHL&GrjNnhkLX9X-m#R*5-_IpIjvODfNCO2^^_7DMA+!^)$i_e8YQ;fDL4#7?0_dvYL(=8J2gJk1~F@>}G@j8=j z12@Ex{Xtg$3o2s|x{Sd}WC^^$LVdG2v!=2SvjpFxn=@A%&9ATa8w?d)MJtJ-3pm?Y_uk`GIhv7utv|j9!>e<0P9UhlWH|=2XnQs9!%l>tE-0jpZrz&h*dZ&D3Zo zwXu3$7h}v?{FW(wR~%hpUfNftt(`u~xYtC7`VI|6c%PhX9-Ev@xErabkL~@~!Mo~Io6a!}6=UhK z2@Tfp%zb(!9P)zh$m#8Da{8SJIW<7E5mU2=f(vksG*?vTzDXtmWB?xq%M{gR`xtD{N(?j;DKEKxy?jQ`VSHZbAEDF zX*p6MYdb?y4n}rHW^y1BDJdzRoq-XLg7DXWu|vM`lbbj=*zhnhIXgQuIdIp{#VYwjQoZ3k0m^^cBY09C;f2+ z5TfnB?){6NkLiz}{^GZP2IU`jAyEM$@iF~Rgn>xn_VYVXP@kd1g}*4eKp&;THxt#I z_xVdBx9F>vBXao2y?LU^jEBmc9Vg4IL&p?E?D0cIgcUqZ9d}1d9ehjX&G%>3U3{h@%+&;L{G{~!HNK=Rl( zS$@OT=Nk>S31KWl@vq@Trk@JRwc9-Nyk1|_TwZpXB3Bbn%~#_uJ&f;L%Y3c*l27ll zFGRrWtEgO4QoLb__M_aFv^lH)Gt+;Y6i&gcb;P~88OEj67aJz8lj)DkDhs?fKr!DC z|GRI*5UO!}fOW?P!5`yH=)7sF{^hfOOY-|n|HcumwXE&MZQhK0kuLy^i{k6georjr zE3Tyr597KR?4AbQ3Xp}g?Ub$8w7jTzB2|LUkGV>!*8h^Eff2NFS)wityx(#&*Mo0V zy2P>cNi>KO7iNOn3I0pK{;7O9=<_n&D#&0ytQ(21o7N@kzXWoT%iXRuX~5T+_B0WW z(Cx?kJ-lmwh8Lw%PO$!WE&O|4E`I_^Qq-OJcNWNELGoe0vqEZ(`ShQw1s(i3od9%O zwZcf&Y)L8cpMG?pc;g6GY`X61ja&`m@%OLl#QONxRrp79BZkkfj@x)`&&2(g5w2B( z+hvDrp4P{crsW*v$&df3FoF!7<1Wo%QoITlOPXEYX;qr5aPueI=$y3KN6r6o7r`5O z-_xIqD_5tptIzWsx6hB@N%Kxbs-yR*QRM%*LZI<{8kdKX&zH8A?aM~JLcWhVD-3zP zKCbRujtOuH+;yN0V}Fy<-N9!MOw{Q_${kEw?M?ahgu^B)T5g@PM{FE)0(vr*92^G1~;zr?D=TJxbhKtSc}H z1zVQ)xLVNBy6xDhYM6B>p{T62k$DBL-@v<#D$PYuRrQ$!Z!b4qixmWj0D2SSneoQ5 z{KX_yNI>1$6{4kBgA`+cBYke3jZaQh) zSq}toj`3aoRCAnB8hN@LD?76DxEP=sp#bxdn+9pPZpV&Hf0JGIrP_gaecER7VxbTX z=W+I^TXtfr8Ur@npLL;)6jzO!-7MLUk?4_lJ=wa_o$cqRhsa1WwNxkC4br%uD%EUza13RgBW=5nM2y!O$66l~Hp6*k;Ksb}x&Xr*vs(IE?#DG! zA7BncnOf(HTOSTOyVkt2!#G*%R@}^ceM>bgD*V-qQyqtqnVNNK7tHAFA&v?OZ+m?{ z9qA>sPC2&|O5~b1z-p+JHYjVkVa3yQh&0`ja;78zfX;kSt|CW-p}D1?#+N@{Xj)YC z3=6#8%XS48hypyS?;lrRfw<|(l*?3qeLVMO5azz6wF0y>*!s}Hq zUWiq`%L}Ks4=sMn&Z{1nMk(H2AYorzz|#hi@j0P0>N=roB~ZSl{M$T_5foc5_;uQ$x@^6a zUZ3}6z0B@E81Ez+$MGF`%U|vGwY^+3A-Y3y$8hzO4BhQhpHoOtX`_U42FEz+wEu1o zp7wOc9vxll5tT8H>TRs7!1I+I>mc9daP+{uKA3;_3p}ww?UJ1&BFt{fYki%XVXV^d zym2~%?(;)fq4FdKxcPFFR~G1Pa7{9)wC8@(&_`c0tx$PDk8vX)W0DElnxXc1o|%nO zyc`(P)j)B8>|qH5l*v*jD(a>mX}W-qM-**SUVmS(@886twL%{Gi#VMe83%Q8P_-N- zD!O|C0XvCZKbc)8;$sU_!xiRyl~nVI@rsV`yWS*&C6~>x9mpf%Tf)c#*;a=i4$G{M z2J5(%%XPaxSgpA39(VYvjQQiLQzujJyiKwV%(?9FO|2pKX9~oea9_B0m@iqcpj|CAqEB)_Cj&4$s%uCPSdgqq zI$M<8^yRkgbs)`wyd7O3rS0*h$zq%VLnh_-I~W_db19x*6y@m#lk!DdNqK2SrLBhr zRQJ`btY-6|Putu7QD(Sd{c*XYQUcn(U{QSqX+_r14Jxr%Z=QJo7>o(<#$dT+j8|( zBKJ-L1*aNKdKyw!V9|ZFlGsyp`jfE1lGp3=g_92ebmTg37%$H4;p-$G^CJ1z>^&}t z@e6cTvWVg!Qls{Lq2<{-`wb-8R%#taHK`rf6<*xRA(@Z4_qKyH`3W4qRlAxYd!5m4 zsx$8F`3;4%nyyj#KI-&(x>;d?0khYfZlIyB(T&5Qa{M)y>MGy;Db@B?6rol97r0`` z_T@Dq&9!V0r>ciowc>V2_Vq>&vMsyZc-n^`P$i$m>H1!Cp_8OSRUo0+8afh9mQW8? zJs}MxivrxIhxx~rb}ITvu$EOtcDu1}Lb!NHXOAg%)4f`cWOwgA!_CIL)l=vpac%an zJ3zFSqUL%ca!vSqL98vDanVs%DtAa)rZ!#}g;mrC_PnAX03DLp6BDr|IMub%SN4_3B|Wr1p=+qjgE0ACeg)Kd?Wr>=wdP+%mHs~AZHYPI8=ZYa&JD;Tlok({-57_^wG z8dr_X?zs2BMvE95+U~yW6ui-fRS7ddOgvbsq4ENi#Z(t3-G1ormDFA+!cSv(A^p~7 zSG^%WFTkt)Z zK3wmLqBi(o>nrzRfN!_ zd)gGJyc^Tz(7OG$yE%3GU$t~TM$miEVF3a4Bcw2OaWsN@nh*tugOo&J?VgC)9rolJ z9$q&2O!vZhPa@1Gyt-QPjbwQCKX9}7=^ulHUB|e0iK^CqASVqmwJr5g0vNU2_H*I5 zPEx9lDJWrQwcJZm3?}>4mVgbZ2z~qLR3%S0b#1ZwxE?&sSCf(fmxInrwxXAi)P6UI zvYTezbX;qcY+1{ab3UfwA@r2Rbj%iIlM%@sK1`KRRI-hGOaWIQh%6m3=c zZtI_t(?!D#%o@=hf+>lnlmR1RSo%&m+<7OWeRro@??&ELUbL)By&p4wJ;(LU=HVW- z8)B$qXKFtC5f7$dzFjb9s+fhOkjbGwjFc3V>YXI>_bCe3%2@)94+lj(xH1CI4%RGp z=nrwp))og?+Y}q6O((1=*p86K$FMIE_v0En#S;+<3Ey1(SS7n zhSursh;7VG$>X)&zYVyzKeRsMna+l1aNx6!fs4&*4tl6w?E2 zZaF|DO0?T>$`uH)KBQ~IWX>0sx&8*hY-BDzgR;v}b940!6I73XWxQel?@kVtriFgk& zo%qAdkxp|&{4R_~wO*L?L%+-?HsIms;lAJ3>rNQtbb#M`JS^`gjY!rZ(TV+ITSkJsqgC+;I$I0+&hhI_3M$qI7Oa4 z)p^CW<^9xYk!8i?!DAX6u=!c=u((R*OjUXGIxtS%tbjC~+40<~bi~gBIeCIL&>|G; zm(3X*jhFoS`l3bE$Onls^L8-d-EW-4FC2`OnR^@4^J~5D!n3jOH`pL~;rL@f_n*Li1hYD=GPfvT*j;N!5K*lDps1Ze`O>SBA;=M zR=Mw++<7s7YW%kd!et9}S;TdMMsE`o8Gcyv-i;bh4)j8VE0GMefS{u$zG_A|eMg#9 zTd!B#k%{40UqYNlzNkh^X;sF{Y?av{2UK2fC@^__vAjyk_*MCJW62yzGc!y6j{Cmn z!uj&nRL1s49gE?+n)8ga&jxe`aFvIu*zVi+oZb{b?$)SH{CPa>p1{1=GSJ~yk7x7@ z{a-i+C=m}h4q^fu>{?}SH?}C?!e-40(s#7GX9+v6y52cBo?bRK*`9b5-CtZZ9doJv zD%q@8gcBF{V1IEHvbdqo2-hQJeLes4hQ=8oReR=t@IlOycocRkdlx^LfIw846dyhjSgBTA2MBF)rG#+rO5`fkqP1(mV$URpTrQBBo6YQiQyH-1{Dp;Z`Z` z>AQ}bOOND0_kd>Dz`Kk6#$zrt^ctEL+=rYDg32XUaW3(=v8= z(%Wz=0t#iQO@KA$9l1P9RslC|WG3L9JGv)aiDrWp>8l8OC>(?nb=V#d6!?Lofj+IR z+j~m4^+14EU4XtUq~lKhrDCMvR&7F%PI8F9(REVI=vMXaP0E4xZvYJmkr&>3K3ae; zMGI3UAS_uwocjj|VmJ-T6E$6qA?+milVyBJ16cOa7ab5y=;7pl7jm&@sVk*!0~-`A zoU*)*f-I`{39k95awv&bW_wYl+Lp*+{L4n{Bo9txt{dNtJUVUZo)RLP?%~g`&0l*j zSniavH*qjsZAZDZ(8-MGXEmKup}q#bwYkyp3ht^ROgp~YNIYX|z3VJ5Of}jFeOg21`(7e}kBCd#I`UsvNC0Q->PrhIu2x4m!NsP2I2iaMc7%9TPEg)>{CiOt4uozy7w0GwHII881pjFd0$yNg zj>7|AsF^O#iU*E}v))Plfhy9<9g9g#+vO06D?0u_gZvg0y|v{uclCO{bIK$_<>VyG z6>3MH;q~U=(rD0tcRJ?@K{CH9qANxdx|@hynmF}|Q4;TW)7t_q&oiK5wy4)<>?1{R zBb{V4e_67a_SRx2Z-xtus)~MBfa6p5d>pAW3Zco5XoR6Vz=;ylJxLtEnx-b=#-`!ZGwgJ>q_`MLklO zbT`djN$ND50j%%TY%U5akf67^w2F{uB~;LCtW(I^BzQLNkHEh^wi9_hokId=r1P1N zB!ipDeLGeq?$b*Z>Tb9D)*EE{2x7AMxj zL2A?C)c!to@38o?r&t>!kLM-3KW6t+cG;O3uDp#c z`=&ChpG@o>JeoTBkyE?wjRnj>{b=pxm||sE<>o`odctj<8Q?SVtQs`vYC@E^RFc56 zdvR1!sdOIRtB6FBMwvgv8vY!j0jCmXAp8*1x8|^B9u%!U}7ERL^dwNE2Q8NZ4(xWWFu&xZ8a-(Jn{ytHzfeeFMrB|u`sGhz|^Rm#3F`v!EzY_H2Hoe$mXRhu_&wZO+KHv6HHI(%LmO!+ykMqgw) z__K-&!TFP>Q=l3_z(iwCyv~hnb{LWa7y3ZFY)f>M8eqhLM0#mV!^0URGI2SbgOIVZ z3|aHD{HvL7sb$51iKZhmz%sS$x8`Ce9GP;2$til;+Ajg+_%#s$Z{rLX}+1F7J)#pdAGpW|YM*huOvq9*!Z);Q}te4YQTztK~HX8?!=Z7fX>$e-|9- zhH3Vm3k1p+!*@K*E*{YcfUK>twF<0c<>KJJ+K4eE?i>xPdhI_aCyqFva>DYh5xDA; z#zP4&SjKA6t2a~@aEp^%Du0f}ib2_Ipy}k&Jzb4ra=|&Ao41r_WTGlps{RH_m|1Au zT57QdN}gTsxMFOc$22<(MWQRou$rI+wk}i*e9t;Xd3#?3IrkRWpNiWTfxW0_{X7F2jv4_>{Hd~T`>)zHa*@d1RHy)N& zlA{9dyaAljtK#W{gtkF1@vZ)Dl_v{^xvJzxUejPqk8w;%da^Mhiwv(e`LWUS=?b+{ zzz1SiUF81rYu~ed7dYSnjE2E3RJX?ak1IEmaKot_n>dv_ob$| z_VF+k*sJKei06&wJ z?xA@SYsK4_M4W<y2YVJQ$&= zM)0n^G1UNGO0BgP>%z!V8yac#2Qs5-6>&lQ7|_6fjI%tcDJepBt#ojHHsF5m==RWQ z$5fj;L~7C0cwK~x_oP1iY(7v;-eIWo$O&^`*2!jt&qAnFmu|YuLkR+Kq^gZL`E?p= z_d)E*m+Oj)tQ!M9y4(kiD+NK$S96Vc(U{7JQG)plJg>JCaBQuAAW`&33p9mw(9N`R zj$T!jy*7htVMgzcYH^s-m(vugqJir*zS2zT#5Oa(wcIV&Avc%+7*6FBAg2wStsO=88!o&C@LxM`=dwLDa=`}MKbx29xLrG(&Qz*G z(K?Om=(n@0R-M+qWj~XTS@{fhhFVo?mxlsGCK!-6M+)?ghhP^4z3z@a4EIs4bFH{Q zTqRQe{y7VLvzgI`N8!)se?+LXLWFD`t)is%v-C+>z3k^LDnYV4fD%eBqI`=h>8<0mD3p z#agZxA>!tk10rUK;H8{$uUwq#;-c%voAnNVBRl{!H)(z+> zB#KENs1IJ7!og^1Ja$qvc)mhn_{N;ZIUK>cCsmjkw4 zj^Nxur_Ckzu-6@PuhjY{rRBbbIK7f5k^3f2tV#x>hho&v!{b6ZpkhA1gYH-sy{%tL zs$9iWx9V+52OWiYijTl0uW}^Vo>EY`-K-4Ke9S?IS?YogZd_q# zEK-%K7{Jshr!|xQLMKeQf1oD{`WdH9R!aNKu-p$ZG-`3ATHSt zPPWFdDocv)-Gl7P<#OefzN?A79Arka=b&${WWe&77utT~Lz(+(RE=N}ic0;%8mU^3 zu8;H<(s~-RmUUq~us)Vb78K?I55sG`xJT5$raPQ2c<_Zk&jAUDQ`(x6!J6L?As4Y{ zCR!B3n$8e!8xJc$hQ+PtEFzt*jD+xm=24-nRD&BEIJCxHTagliX<*1|ql7Y86QuXr z&pfg=>)j7-nSgLE^bFhacs~b6B7!gWm4;>*X5|DFbM!5^bB=swF=$2a=w*NkK)49E z)6J32=MC04TI;MUyIvZ@C&TkSnHHLKt_wwArwVqiH{u~)f95D^tZ$^8(=2z}Kk z`QsY5Pq1~(#cJaARL|21o9}5tCuQ2d&>Ui^4ndL z+d^aiHQzNpO`=OtUex&t-&S;ZHV&xhh$23ObcecxSUc2PCfG|2v}d|MQKu|E^2 zuhz_@iDXUu=UuAouo_1mJc-|B8A8OwkKR{8KgQEY{~$^Ji3{!ct~pBFZr1}{i@H=| z=S5Vf{{$JS1$2n>GsF!uVYf zzA!S|0+5uQm05Zu%8uj0TRM~7+7J9{C^(G^!2q?DKvJGDLKTSfg7kpKzJB}rIe20> z%ab??1LO)2V=I|!1xQ`1PRdICR!d;gajO2DR_Hb$@NR8}2YDSnJ+7));76T=-C;M~ zY^?@Eeq3K4;ZXi!hapql3pIM-#itf>Ki&Mao?peA_$6IG^bkB30H%o`P(^L7-Ie+W zFmp*2Yb&+Jnc<|cOa4WP==QJ3G-aY6*FlMHtfuf~PBx!p&M>ru+$8h;v~8@XJC6>>{4nPl3EjxvX8vt+b_X!#I^o52HiB%ZdY{1}6~7RgOG z8-bXt=)mQkb&VHMnO~46Tp)mGS?z5D{==61t=m&7Nrh^6=!l6x0b{EN$Sn)r5OF?k zBj8(t9C6b%`T_WRt6b{>RfZR}_Uww#bFw)b+3@-|i|?A3pQ7+kqcX->?9U3C++vgC zbK7R%hSInPwP!f|0(V$0nj#4pKM7yXuv}+a21Qc}I^On_%TwX5$53_e{ucTbuGt!4 zX_{ErY_{CslpGH}`GosJu#cnDcuWEh*rVXN_2Mi0$mOBDrMg8mcR)kB0LDJYz|}`? ztse1fa@?)mH!@I8r>V%tvCcgxdbU4XVO~-b2bS*CEMDZkBLP07IK&`q^FCiq{U5I0GA_!f>)Te5 zPzez!i4jpyLIjj%5Rec_Y3XhdX&68n0YQ|Z8>CaDVUUKQyPKhNs2TFvT-Wow@9)09 z@ChAe&VBA#d#&U6pP{@Wo5tBe_*Jm9y}Zh{M^?cxoOSkC^Ss>b2PB%y-%f-f3k*F1 zeUUX~FLyny9~4#08&bKCty_lyzFQ<^Vm}_lbW}hkK1m+4753%oF>H!%ETGi2gF- zsVUpqZR0OuDQk?#kamS$;`XV+h&?XXc^~|c7{%~62c+~k`*@wVKTVZIsM{#w%Rmu% z%{qjhe@YAaR}+=f_Y?D2>)pK6Uf~ndK5q=7{US}WTkAHfX&NUn$&nl*J}Zw;NcFhS zs7|bgp6URNpo1b^2o@NoklFc*m7__zp~i!dg#oI*pWJ;y4y2*};Jw(C6WevCiu%>T z^h;6ES~8mDGnAZu?DQJcIo!kqkxpymA-0-{R(`67`Rq!=EEEzv4!V1zwzWqU&o7<1 z={&Yd)8~2xcWJvPdD7!Osqo!iqc@8e!PHOf*X?3XSkVboaEch2&ox*ieaCCqzN7h> zn{UeYLz%M5vg7B_vm1pIZ68@k=v})yY6zqM(1NL=Ndde~&v8KF=dNKWyBZ5`8^!&> zyU@wE!P>j}uEJK76OHnwe$HQMx+|0`0%m@>P}8|BM}CYJJ|1W6u%zPwSA>jyIrO^< z$6+rBH{h`GGDO?^GBANi~5Y;s>R249Bv?1L$eS!d&!;*0`)} zgM>H4NK2pcfKc%2{NQ)DGs7LHDaj37{!zTHQ^tqwrr@j3`U46stoKblp%ka5VnIsM zIZ__o#_b$zc$T3tm1hNe$Qj=Bp}>%eMQX&p$Ym+E;-k|gCpujX!R~6*VT<0C9IRJz zKU$ZDnX7GOC1CK$YDMZ#3Ub;N3H9PGIkB&slob%Am;kj3Z92_wp=s_XFGrQLV$Zu= zUyG>4bv|B(N!``-Z0Mdqn+VO>!2ry@?r

$De5zJ`YatiN~3n{sch~2(1>F#kUdA(-?25z@KnE*QPT8zgZt9!xmZWeim!?C zd)27VyGFms4GGX|lIJw1GJH)8T&n`vuQEVs0# zChN?e%*XiNl4-q*a_%o8XJwn$Ss&Jn>e`-Wsnk>WC>bs2=6ijtJG-Cbu{Yx>A^qst z?V5W&ulF{JPNgURi&xM3zjY5h%$l^69RutwVPzD{{~i}9@?L*)4uuuihAI30Z+7A9 z<7*6f3n$&*>c71AZ6Di<7Z?)Z~YY@|MRMC-Z`irVg@!-~Jy;@yYLB)wD=^bp6)DU!%jaKjZHQOFdq; zd#sDB>f#@XQda%w>LHuP4|cYm<0(6i@DO^pWzzp3O^E>8jmt=rd}_T7pVV6=V7>)ZRH)I|aY$J#Q~C#>XqRC$RY!?sPTZF^|7&qe68W4pyF-fD{VW}yFwH9$PJIPIf=8t6QVqKFgJ>{( z+YN(#DtCbZXSMFTtOY-W6YdA<_!^M(d3pURVD%P~TKqmJj91)Y8sg8>j9&ylmP#4F zTnj*7N^g>RC^5@Pn1m8#Tnu^7voV#4_HnauC_6Dsdye8_6EA}=qs(PozG$l zSg`;zq&WOc&KMR{;jSCDV22ywl=D<~HXdFNh%}l_s_d7XjsiV{*MwQcxM8Si>uY#& zBZ1$Q=^AKR=39%!jQNH0zf%=D7e{w3YTV%m*ducMQAoR=X@`-mxR}GY&%5D44f2CD zc6A0~v$RHzMmN&@T@X};^Ph0vaINJ$(SzS~)*olnak+51=5umC$dX^ogSTUJJ*}@n z7sg`&BVvB(W(v7exDgSX8Mvn2a0+K@3UK{Ir(VoXNGC9SzRWCQQT_?uVJ3Ff)KAI9 zF-Wj2;^nOw+&pBhg+B+6%DKs)TEO?yhMYBvC})oGeHo6Oe=F_hIY#BPW}URo_SQ>h z^;)ALl^%6fx=ZtLrJYfuqfpPPn9h6E?>Ihasn*qs4dryR7-P_;zLPyIQ!#2vEP{AJBrIvpLX58O5qmiWzvbeXsTe_wp0%mJi%R_T{S&*O>qyZOwI-TQc1 z3F}P%Q5{B%@mSv(7^8fY+~9R^#5+L&hb5lTVBIvkU#4!AI}872ogW#~qOtj_q(-bJ z_WT0^R%AO}_NZON8*H5Zc- z-1i5nTJw!r1`_HR1P#9>%}1rWKqb5}3XF};j*MpBAKaM-rJ(U{B4C80zc%UXq|AX; zd$X@dXwe@+iNc|&+OdF4b8MA<945K+eBO-)Nj7eKq{Y!u68n zbfS=0xM|z&GzwrP0y0SeWMueI47!JMBoi5DMO2CJgS^}{!HUgZQ-u>zkpE;CT|TRy z`S>xjA<$9_icbk>6~TT-<60&JROuzfV54+ltaY8z^xv zuCwLHV{ZD#tmo~&zPaRnfIQfYemtAS!XpI1bgky^y9eOw99HhiBvpBm!rEya!gA8F zt4Db!m6J_iH%nOeyIfnHyk)nQ_q6hILO^t)#I3Y(A*15&>1QRVULDO&w9g)3>;+jR z8}`$K-fG786H!^rmR=}DUOX}KZ`IFEa=vR4V>8CTk(2QUwk~31eIFrdqv*o$n#+y) zwYj3o6~$SBpWQfRb2ngwC6D}^VU5w#ECg}ZWTViJo6)RVUh!#bHq5r-1B6EEFPY+9 zpU6F^qY&<2(`LA&2xuAcu?9k#3X z6jh2(f32aQOqpx%rQ5!l^VwS=*)*z5=HLpIl#_o;Lq;#ZL-ZX|RillEC zk15Hx`>vPu6?GSAKTqy**_-q>V(ZPPn^JJZ`aqIv4Dmna!wI?sX$WjAV3&4Z0 zvz3JR_e?sbMm28Tx``^Mk)95JZfaKe*!1=G)9oCsNajDDN&NZUh3S$sx*4bDNvbmj z(G#)J%7QhLN4t(SYE$~m$T1`rIXt^tEoAU7cfrOT!;zZGT14LH96VdY>T15N9G#3W zqT=LzICpi)n{(Vjn!!XPnuW)xX~FSm`OWi}u?29RahVB;fR8j7XIHDX_Y!UovUrMZ z{9F@1o=vXb4LAN)e?!O)jB-TXhyYL$SN7Iy$3BNY^}j57wn zXjQekgc;TTBi6Z6eP#qA;_Hsw*4Z<;XR`l4@|;R@UjyLOgx;zj$BJRVcWUZd;v5Wo;32|`Kfr3t(#Yp|A zjV7WLrn;Hy4)?rS2vc3vW8&bM%fliMH{|vw`=Sgo_uY@+N=qZAp0Lsdmf|px=wey< z`h8(E5uvX(^aL?`9>2iRrM_7ZR!mJ7GHB`L&c4VXyX4VaChv3v|Bd|2%W(otk&3AL zTDUS)eo(oQGvv zE&0dO%@R&GGggAS*6+X23(h9DSDg|os8frQFv*i!+f~zRIP)5oYOtLMMGp&%D&Guo zB~XU;q6&SHhl4_|^)62 z>6Uy`h#Zy@pAy_$P^7wcd1kC z=udw;hBsxQb@Y%KyydMp2QU{$BU52&IP-!Re~0{FrIGG+(|~||Ae&A{XvQ2Qjk-8U zxgso8rB~;9JVdAiwb6LAsypMO&z8bNr5-+8ixz{Wcpc|5b%xU*Z+&w0lMj)b(ATsP z#d=zf2x4CT3Th@>1E$fj$%_S(FTURrf*lXOms3}gb(w8X$_8_!6iv+WsVL@|z4~nt zUu}8SSgOqMkp^~kaUyQL_!K`7C^WaRhK!)?fzi==zEsF{dC=D;D=W^kG^v&&k`C4I zT*?{wVMK%%TNk-F;Rxtnx6tKd_Ov^s=W4rt}7>rSv{KdGl7T58N4kK#8_)atJ}M!9t`1jXvO z%#3vNErmfT?#$U#&UE9^SnDIhDF)A1VvWL6h1jKja;LMr9VrM|ux+Tr>)7TG1ngZ{PcNW>YQw$htfAriW1gy7*xEmx6l|;^FT*0WUtAU@fI|S5#%NlQs|2+BTyb z3KEf<=zwG1YHT1z+byJe1*L0*szZ%Hl63L5|;1n`0v9h8hQ>HN+@Q699}I7bqkCK#6IR z%#z(?RNv{c>E*uaNJ+!U|2OJkZYaJC=eQs|EdVKcG{$ z&L<||9@Sv$vSuI~U!fUkP(F2Hnd6GBRpn6M1ppsQoh9WwOXXHxn+CaFTw-{ui}@F_ zP&-!p7iH`tO2vi4zonfkcQ`j6(o0Ysjh3hxjI&fj6Q`0=HU=2y-ai#@>zeKL)`7Zm_t_s40phB#;pO?kt^kHkI^`1_Y=H34x++1te zhZMIl<`Xl>j{&n5dpfuw?PMO`c6}%{5&BsMEv9;|CJX(Ra??o0z|d7A<; zIRZvo1zX)?c?a)wYm+|YkP#I&t3~Bf$8DUa%LdjCO4nMBy(^LOUOqH1IdwLwLxdD< zXi{oPI&BQa;6eW`#V&!*{OQ3zGJPk1Qz`8(&LF(O9UQmSPxRif0%ta7 z!>02JKsTnUb^@N{M;Zab*t-ulayAQj_2_&2MLs{ZtmlHSsKq=1(3&F>e*{|A2_MfOpR7dSjNFC{#@ zfxS|;-Sg^)mg=to7)1vir{Ozj)%qO3qeTD%gJy}XSFq$eO*IP$7)y{KQE;W6{;W!` z`~8oY_$ilqO{uhX!^N>FxY6M1+If(Fw@Nmo5Lk}%g@A}aCf&`gF@zhv<5v>RC?&Nh zS}4&N%*g5GVge8adO&ix(YRk;aagA^ez1Qh>x%>tDlWxG;8+%!Q`5B9assaT2mT{C z==w@6OT|^MY{qi2Le~F=AH;QSem)a;R8UTssjP(ov;Q98yk)@t1bS^!_>K8#O1EET`GFncB5N2gvdxkREC1^9_8?DNuffB>H7Q-o zd`rJ5J0R)4lu>&RIy>x4s0^a#MQ)92ZwxU62itpg5>hWB%Ez?q>Q!ggmazv7K(0&) zB|_(=2>3qdaI-vnN>WZErw|JbGqk?1Tbc5fm}@=46vC(2dW>YnA*q;sgDx1l{0R-_ zQGTbNR4EGnd-d|3duM7*f=B*jvgU}>Q`Uidbp51fH9$A%0s8ju0y({F4KTiT7cn(| zSKH>kN1F9=drBW(d5Y53fpf^0c(pU?i^A<#+yYz*jnwrosb_$idS|yC(J!^>dVYBv zXI}sN)N$A>X%vUb8sIxCKrQZ`3|Hu^-L09bJDaWLB2I<%@7Zm0cS8@#>CVu&W&}y% zJi*Y8RH(M*noghYf%nCx-k@6S-s4}T_XI5KgSj%U7{lC`IEMTF5%)%k?mM7VoQjV% z;X=zQP)xG-B{qM!_=_gtV*aBJ^&)M$TbzNQUMmWJI8u5!cXgrX)Fklyz2Hv?3eBgO z{o7MkR9{)W%UBNjwG9HuvBL4`2K{Z*6i?^o ze;xq7?}(a&mG$&UQ0hfp6rC^;AvPu0_Wy@IFHI1}O;AE|b=~gUQa5XqZ=kk%_!V^X zA67@b{GZ)?{lvFlFXmJ|$K#G+5oAoi?*6X~j(#G7!??yu`m&5M+Z(*={nWPwY;cl# z8@O|_wRLX)B&sqW_J)M&vFTkr8qe6+YCybIHBf;k>VC6GkTXbZtGR``#lOCMJdEHzHkdMI6!hr|eXJ{0p_V;cEyGY?0A$4ugaJ(}dy{yQ&4eX8ssZb!OpF z>dr6*9yV%sXxOJF*qJ}xJ9p?yAmW|w2Zk1O#g7EKXW3{k1U7>535PymKV6AA*CnDd zz|Y2lKVbr#_*iw_hFNzUu5X4lzI7n{qcRD*<$ z7E^hUZUZ1TSC1C8tJARtcRJ^P__m4LuohCO;4;RhkdE?z{!S8*W1$!=WX#Pcs&rSl z**ryN$3da_@D$8$5q)V+_GyV!AQ42snX zm!HtjNinz&>*ZgK1z8)N`XbQ9v;&Z2Fp~&&OwpkrBh!745YN7W|1ooS|=^_*+zK@nXx{3kB~}<-V1X~*m6g^?ktmtL;V4oNQtz@=vHBV)3I8s7YR zhvowMOB6zMW*94b12k1+_{GQDrTD$hrsj~#>)>WNDSclRZ4yXr8oYRqYeE{X-nKfL z6cKYta8b&RT+-Szu=kOmrg*Kf*U04AB1U|V5TDNRhb!yx{y>`>!e}V1k)8fCTUIiC?3oGRs=Ke*8>{zmb0!GM0UsHg!k0hR<2EIT`1m2JH1DNKAAvsy!}I?8>a>R zsVQM%ryk_FkJF_PI;VJDbG3Xos&JJuKBw0%I;VeQejqGnTQ)#9)}xps?rT?6z48F@ zgT?{_mbco%wGg%Z=@5d+4a&r&)Gi5rcF$p^Jdj>M(>KI+8YW)+MTc^8L#9$1SDl{z z47QAx6Zq!+c~d@5n=WKIPd5$rKAX$lj`j(hcl+;9;5e6?Ys(=i4>#cNza`sLOu(!M zEpoSW*(o@Uv@E+A`Z7Re4TewlCCZMQnMovcyn2;=oiS5|>L<{??4u8^1vUZJHw7^h zeO^ox{-@MbuXnki+Sc4T^XyvW51YhMe%oK;@H+Z_#7JVYQoP(3&Oijg0^RK)y`205 zVE;~4`BC&J7jMvo^S=6v3#qOE0M4|JV~*bE&Bpq^)!h~HL50nj!!%KmzGowx##&_Z zuMJl0RXCBGZFWo!1&(5q$tbBtZ_9fkm-`X-4BKzNn2Y_fSj&RdU{k&TuC212_q!`@ zP(Ox>jqB&gKQv1&O?zLgMKW1Q33vVZp1IRkr?%skmTSiG@3HiPew|I{kQWzZG9~(N zXg;!qE;nXh^n?3Qz2%9)UhYubO&rN1M(B!0!v1f&*VEe~lUTxhskxlSO4gDj95LRx zKOQ5jw_giADn6I^@@?o^IwhrGB!R*+)SKJ|1CWbAoonR6H_ZWZD)cEwG{@77$f`f# zpN%)37cY>6sBiEH+WB$YPqNzqGb-A%|bEc^GG6x3u@7xx^BLbOaf+A#(i{ zPq5E@kz`X5=IwhH@lOcE>|Zu)#=eNkI`(A$K(W{ryCoOg2gu2pL-%68gZmKsNjrbc z59+RLENjE1?ct}a807cGGM;o81I@cEG#oCDrAi&*IF-gy`3GU9598a2tWcia(aMg4 zozg(6y!Ka7-%vvWtiQ%&!o>bucP>_I@aJq7ZEMElHHx7#$i-(fv0jtRU{vxm#y%o} zce_pcV92Ug$<7S%hRm)YFGhFj`v<)a4vJb0#H{aoYd0ij+Vun)A^!YjUw(tQ#kBK- zMP*HGaabCkI^Id?oLmc11zNvy&~+7#>dFQ`;bdJgF?z>>YA<27o@dK{MxF&K47R(J zA+|Q|MzG|MyvH7HbY-&X4z;3RcvtFri1P#LvR3Q+<8}D|P83rFJ#?)|>9PNG)n64c z-2XIiul2hX-)}V2?HWR#@S@3VM4E*al@r@LVZ*kY{TbhD=%-H~+u6C64^iqzw7Jom zCnOapY%tWk6v#E#oE`5p*Sd4$)Y2Nw8?B(4AEP&P)MllksXTS0X7kWXenaCj)^mh~ zXIMTen`|uhPlectTF2IHuTr-!Pbiq-KD>~~K@gg9fH1CtT zb?W2mrJyi)x+PC>qr+F;F_6QCVc#sXSUyIx92LonZmA;~N}!k7uM*Uz?C z&YBm&{C$aB&fN~c-2G#&rKsx8IS!)wrihsD8*p&Tcc^lhSZB@uwv;YIe}F=MNT0w*fAoy>3to@=f2yvSr0x@ zt2*5oK4J2=OVgW~zvL`e00VGm5&F&&M_G19#OvFkB@S};SMI)hVtj-`*8@w8V_tl* zZs_trb?Z1`4Jcrj0rQ!43Wqn#6TQ)`8<85Utg#4p#HhuXx8}Ln-(tpxx$Z;>ahI|VbJz3W)fVlD-cn1-_4cs9R~qF zUvwJb-agAB2rB8uREfG^g2g!mZhih}XWY^Jipswp$Y6oQuxp2k`sh3;oT?F&6wTHZ zciZ%dlqmM>_aD>Q7r^( zoF7rwBZppQ*zze*ZO!8x)8w+lTK9Io5$h6NQP5cWF=b443M@HZ2Z38 zF8qP5)W2~6w^#V{qYNAev~n#CtV90*rLGquWSnQ?BO0r4C4Z2u2@g&!BmO=>9pMcp{Hzkl4i%twd+55hzsOfP+bGhjM~X z%6aHyt(DgJW1H0A2%#TRv}nvy<-_Kf#Q_QdRFray1?iFhQplV}L_&x9 zM;f8|uQFHc9QlxO5@bsfdUfDWEh<=d5pN-|$212Wj1dHLx!K7q zo)0c=2pzJH^IkmLR!B-%K*7s=OXVgBOd5Sixeng(UErg0D6Ioe=kq*oVVA1RK$RYi zegQ$@LbfYA?lH50w8e&TLfE0y;rd~~cMQd$0LIhf(8S0)fLfrV$8x6>k z9pJ-weS%j)&4!&FyOJ_-os_cwetfYK$ykS}yX4=L&y@~kPlKTUJrewQuFXFz+@~`6 zqr%BaUrMWq7>KPYlY|Cqry$=f^m+0GW=LQEE@T@7jJqrE{yl7V^~#Jm+fqKWK3x;H z5YNnzAK@p>j|tMmm&Vy%CeS<#@WUsG{_-PD>#9TROXsszJPU|_mCO4n)+1k= zMjSg*$ojmvHzvnyaOs<%0w1DLl-wB)!sD=AK6ZDiGds~b*>guTQbMytxttvtkikh% zeFaWKPwAl>;is{-lk43;Bz}D0ML60a#j)Whl&dw#xlR=(##f&~;!jcya){~{3a*6e zZBq{T_R>6!fYckwTd`y)_o>NTY7L)0YOFoT#)kn048zK;x~)3fw7Em(^Xis&DHS0) zf#*-FEbi_W8Y&r+ZOS(mAtv#D!rR^dY+34%56K#M7}ei570~i?&TyY@I3MhyPC@2w zSkkyf$0TW1vZdr5meYx5aqv3dSBdEz{p}EOh=m+4=*0*je;Y$4ow5t>#<(w!|HrER zrrhpS;nyJx+3c;q_G&F=ew&?sDFge6i?*3+2l2ANe-&Jx-+9_)e#_yT*24Ivr&|qI zmvm#L2LSP_j!bf|?q6;|{;wt#QOU4G@i*5|NmJ!i= zSo*6ne3Q)2Evuxyl-^OWs4OX`nq|bZkFWb>@9@@>Pd)D0MHAo5dS1R8-dZ%8`7?dn zh=W_hF*KOmP8+A})Bv{w!cAt%*bR+y!bq!mY=s4BDtH~QX8Dk4O5|I!Iz^L4hnueA6IybCk2}B6i7@PKV6Y+OHjPvBmAB}s$%6A>h)WU6K z6xhCX7wW}*U~GCPlG63Qyym=7TbFDc+|FqmDZ{QiABf;nQG5E-KIv+KRL%nACcrhJ z?qwfu^sX)Bla-{`)gW8!Fmb=RJ$`q~NYUG8x^3;ZFEgKyf8F*+olt05Gq92_e~61q z;`)Wls77aRc5gu`Qng4yq!gCo&BSev>Gy#rfMuhN0j+SlMsbu69qfMDXSJ@>5jCxz zS7*jY!MxNPs1HxJy#f6kRHe64o<7OqW>3NtLexbh*^fan5ph1x^UOUR0|463bZ6SyU{aE=|;t)r~ zradGDU90Z8kU^;5V+ZkJNZ#2Cx|ssdDml|QlW4XHpe{ep*O|vLEl}Ci3Is7qZ`C+; z5*mpID7%k{Mn72A(6-~-0C9N``g~Lnq=kcd4Wq;{h>XMyvJ=TbiXQ- zwN=LthCf_kLZ^&sstb(7ZsU{|8ud$Zcr7#{YK#M+b<^sr`UueaF|DcMk#6WqnM^ah zgSWS!xH`2kCqrkISmA;0!LV`g1hbW^V#*XI{b`)46t-3pYt_Qx^q9uMLN&oyRI`SCp7#^Q8 z3Q<0Z7}*5<1_fXb&p!E?eI}U&s;QK^VXd;PK0UW&!;?Cvcg(GkteJd<&CODTF|Kf* z!V=_pjn2(ho)X+yHGSS6NdN>k9F3GY9x*H1CbQZ#^1N>j!Svji{=a zAiJ~e%9s&H%)cNrLD*qZ9qz!$rOnpyO=QnO0J;54vJc_pjfQi21F)E-k zcs`?dUO6lTgXRgI`KM6(c{99{@^JU?Lmj*Q8DpC;$eM^`Hd#SBpoPx5eO$$_qh9W| zjZ?Ta1|^53XzT~NW}yjhaA2MbI!ULr@P$;qyg$xK{51k$2ne~KpD!YK{CoCB-%e32 z;UH-@@ZXb=cn^ych-}mRXn(+IXPyH=r^)V=$sL8%|4fFaaMFwymz>}A#kmkbCp^i= z@QGJ2jBcqB#eLI!TaT*vUSrBk1N7E!ZdmJ#f+WyaYg+A9Jh)@cSfH6f0X=&p0GU~G z0l}Pf(;-4y*f&-fVdKB(AiBEuh>E4+iLs*Dg6quOg|hE8ZODX(t%}G3+GB=Ypn{4T z_Slw^>YkmBb&YM49y6$yO{r(n9y^t*>ufxn%JAA2@9HwETp2Dg!4xEX;Yiu8vvmH) z0=v$8?Qyo$odqFbB$_YqO|t4SYw#GoP7G-J-GONJ*c#X@w?GhI^tI{x>ewTen*zX&;Y0oB0-a~9LhNZBql zrev^mzW>5xVLLiv>qed_KBUQvnGRa-)L-Yjh%Y`z(ws^W%?%1uzN| z@D8btp%EOlFvHCj=3=cTah~Q7cR~g~UI8)rT4Z)W1pHaYaSe7&_n=nF+gQEE^L7eQ zIxD1$VdH9Rha|1v$vbDQ{l;&x`f|2dzR3iP2M$F6R6N9l6oR$%PTfWX7f&@m4~kYs z(wXNY+e0{5tDzrZnuUauqib1R$S*(oVw7V1Ly0DNJAXviOTR&OYzSv+Q0%u(QlK3H zy}cf?d=&7i^?T*0%-G!L`mOJ)Hlo}Q>$fxGWNV(W2WI1pD7GJYZl77d%{Z4Z`8Tf` zuImZ2JS=>r2G@yl88NWcO~czoSD(0fYE%DTOBLj*9gT-gMmal5nBd%NWi-yuR7Lcs zHaw58y*Kow3WN`FMn?!NG`>VzPo0pW|8hHe*m zJ3hNuaUr(yl6d$_YPv^?dK?!z9uY=DEs*o_SN4TyFh{XeRxHp zFr$KrA?OIsWTrh_C&pEjkl%Vy;lIQ)J zM`Ko+{PRmG5h~$(n!1n|5FEMslYM8WDsK4~tWugnDF6Swrq{QFX052qvB3QqD(0Eb zzW0usDy0)I%RwA~8CiFg-1Pw0B@Bb1gp2R-=;;$c$t$vlpl_5BMd0UJulK$EI z?J9iQqf7mN+w?aS?c5>W)27;b8(`M<-$2fKN}v9&2u1B(cKbmghJNPzidSU611uy2 zZ3DUoeGl0K?QQqyj`He>n?rt@*+|la=qB)F2sl~`6f@zr7!DirEE%KSx884x7B4;3 zm!ojkZhcuXZ344}30F)Rm#ZdEvrEP8^-KBMPP!ZaEaF{SjjrAB_#D>ARH2(UTFm9< zOqj}(p`Nn!$5pT9;jF;zw%kVE)wf?RU$wZwpp$ziuKD98{K9<_GBixTvTM~y1 zJwy#S8SGf8oIt^|lK!iWw(iW?@crU>nn@e-T{rZP)AhnbwV-{B4y_KJpaf{MP!dEZ z2x)fcOLCS{)$&3vw?}gc`#2E=v>9i`N{_!^G@t>#m=#q&y@MmoD57H`p!2@ z&fRo)Mtw8nF}`1wRP9QtQf?oPZX!y%uUZbWv13S96k$#T2G#wt0 zY*|-7mw-+9bxPvdY)&ajy?cVAK2s0J{FzJcW7#k=gQkDa=?Mzg$W(4cJoZ>AS4eb3 z(C*?*I5?E`jwhssGHOpXl~+e-*WR0m?#j-_f7sbFJ2K*wq_2|#1 zjC3jfOb?k)ja?rSmHh0G6q2<3r-}nEmFYS(gp3R&m zB3Z0@0@;_8sApW%>63DmNdg|ivqvOp(8cX85P7j&lh}5f8?H zm!j*c_P1yq75sc_K+4s%dFsjRjhO@OgY$7g`rVuc5P8QBnX&S6fEKz3=zw_rdiQ2t z5C|l54*E?isHG!e<{NLp>6W6;32NHfBjAsmeRS$t%by6f0jHjayH!QJ19iQCY|nK) zU!G{OH-R>tErOhGW_mAih|5AD2}i`dFqnU&R27kAi^PNZ$~%S4!>%caebynE^D)6( zE$Bo(SDp3FHah;EUyEo_5y^s7uGG>>0BNneklk{u=W+H1XsRA`euKCOo%$I z+;P~gKRE{J8M3v3yyD9XH($O3vS+QpyonR%y9nn8sM25lgKS3FEu>OZjJ)6ifjb|o zYECHC)?KS8o>G`Tow##Arn*PvFjw0oA^kpv6-b6nJDs&0_bcv;?@f?*d>qx7^5qz= zgqsdOBP^{jQE$kwZYvU!-1pJ3_Sk)pQ)k&SNr?Jh-U#x+h^BaXbnD$eytDT9w*mdo z*p@vd%F@29SznXdBicD)f)AZDdP2Gl`*r6p^*S6L!V04IYW~P37Zu^5G?N^6oq|c| zQ3;<9>9^9GN)|Ip~ss|gdoL037BkCm3;?)q+4=nTzHR_+E=MU6K?192bxDTQRb z1(mZg6F$+b(Hs<3HVP~amAXbYl2baG{6;pR2p_;Clveb=K-jkPjaD$l_D_ags7nel zV^|rJlS;SiW!18mjBHpd>PpduXA$yC%F*7y&a~1B6EQ3?C8RvFW?^lvdITxo&Lp3I zwHMAHNb|xZbU}&XXwNd|I_LU&5w%^X4z4ua<9Kb?aN$gn z918()x^?_u7DXdN!#LO8Opyx0`FW~RCSoc$0uJPSJoAlUXAN`i2khMA2sDXjS3k|( zJk3|`UcTmO_szn3(V5inlR57O{!7e~-x-_VE$ij?%t=o@U=wHY&l&nzZjW=h17ev9 z5xOCHy4D=gO)5ppF!xn8?fOXxW*{y3aK6$)b@`WZ3*+8KelhZx>P$@psuX?zh;W|k zM~(D=tSQq=bWB4>1?}-47e=^3S*_A0lVivu*wnt)!;}%mKyYz}tjHv&;D2HAPhf<9 zsq3y|r57pS^&vF^|B{ccq2wTrZo|0!bjVpRb}wwi2QWn1MX>Jn*}7}!=ox5kEIvIrGRAkB~}V*9&XX?6oy34f|yeHpc|ez?&;5ZF@9ZzaAA?u{yO{ z3tBfc$0Z-lwhVT8{uJk+jJ{Zh-nn%Vyv| zMUoK1&o;s$=;P`RW^inZr`F)=dYspE)p8-(T+>53vJUP|H;=bXhR1QLlCavF``glM z37K5{rTfEoAmiNkGn3Ygab|&G3+mBCQ~UMMACn6mD=kD z>Bf>G8dfJa-X5*u#L4%^G$W$WS4YL(Z@>{=omu6F5H;osT*gCU$^Y3;PYwLk)ayu${Q^!}y8 zxC)S8_KTBH&q*avYJc{DMUB6hX={b;)@;6POeD8H!BJp(NBiY#(!$HBXR~c+r4u05 zM|<90Z*yrDCgZ1oVET*A=f8)uDfTBDQda%TpwnXJBQ@@MGsXtjm{yN4zW(BTnBIi2;Ku>{FTG3q+pj~6R4w~&F2G|}Sjrq`{EE1bVuim6qwUZ^ z&N4}pW?f3oiI(#`YfPcTieKd4EQqGLE(g4NYozrf!W=?Kus&ZCS5gf4#x7lRLRlHdX*C;j1mkx$`8Yw-RCEP2pYIg|OeXp@>C=p%gceo@_v0iA? z;#I<;rKqXV!SVA|RbYvz%U;hYQ!wwE#5)lx_dxRB>pcca9tfQb=iLKbm;Xe!CfNsK zUdhsJ;bIGn9=%xvqh3zfUQS|v(Dx!CcmfA&!$Q}x=EQd9__y0fqRfqcx)J9NUGK~q zt)A+x?y=}}wKzvVSu~f{{oUMdAK4v9!_fMjo$ESwG0 zY5mZq-^rbu0}#^#*!r^=)ANGY!ygJpExg=+dpX`;MH>BFTg1OoRo5Bmj~l?;)&M~T zCMla>w@F;TF)QJw%&eaypzDNEEwaR$c`aW|JCMCv&dObE{B6~y7nBqh=%WsVL`*Ef zQu9~1$YALwwdKCA?4||Qma|)tJ-aTMbP&KTPk`OP@A;KUjLwQFjc0_7MT+PXuUb!h zo>nO6`6#8$H?pkc7uT`4|KL4ZePBlEaG0?XAcsYm++byDM|O>V6Pl$xLh|6C7D6s4 zMoROg285?7)HDom4=z1+695jz`^#-DEr_Bt0f1beHsXX{1QGk{m>&L~D`)nWhP?Ao z)tPhOWREF7)SZ)saxUL#J|UB_X4M2-b`K$UZ>p#!eLSW5@k~ui#q(Dt|5^-t=smU= zw8lE{FY5|xEE4KPfH~PVsMIIsVp1kYq@$+eqs|*ZIYYQfX+g}ehY+#;*Qh7E{ zY}M{octnekQEL_wv6-Swsv4-JN?Kd!PO5DD&HjOg#fyq=HE!f*P*Zg{Ki;t*`K$Bn zP!J4yxGr3|R|LbUbx-YE0|Fi$si&f=bU~R$O;T6K;I=!nXm`ULe@xe*(5+tIyCORD zVD#wRdszg%$M{idr-GS+S%ss1a_C6EFL*c6RsLgNeqlxY1b7roE1p}z+efEuv(ie8 zqP_p8uCES=YWu>KkZx2;S_wtEV`zr%QW!!S90_R#5Xq5}?ruaHq+>u35JpO*2LTC@ z7;5Nuy!ZX?yZ4Vb|DUz@UTdAT=j^q=?|W|Su_vNg1F#m?9Qc!j!2m`e+vtwORv=l2FP_Cr*Ywt?93M`{*WJh#BkPf z1az4``yF*CtXucJejD=Oq8QQ!fM_3*J(b?1%NLS!lOj4PKDf1tMeL5p$4Gj?L5D($ z%$QeyE)S5TJhJAaXZ#J2^|K0HY4COx4~9~m{kddV^`+J*42zACy~b$K#F2!Gn}M;S zYoMse3+~@1aeL#dkZMRd{`F@E;ER9s`*=JVjrqGlpjlUIN_nw8QX>d@>GsVHxUW16 z*7$?`Y6Z5`63y%!Grl@{a;9V*=ATn`LHY`S_^wy#rglaJagdOlHNc{Dz;7dn{-bll zA-Wa|<#!w+5z62Vq{N3}vd-qU~y`VZHTM)|wewQE5 z8aNis#TDZBghuzKX-M0CPLdZhllZ>fo4?p(!f&OI$hCxVE}S8y!fCqkHHpj-D>Q;g z**#dD4TtP^Iy;vzQyG%u;3;-;ZM@JIb=FOndVeuupo(G|9DWfAl8Yh=p!rVKUYMM#%ip1^l-Zu)(z z$8EH?WTQEGFkfA1D4{WGR^!}YX<{z+BsRQvC{N(P5x65CGzb%@x(CTqGyl(E%-etid29j_O_1JkuFZbJ&uJrB{<}iVv>R zd=K9(*F2vEYj6d5uFMo+ApZ9w^?LIBy3e~<)$aBmAvxuV{ZqxmN7|!fEiTOy z%DEzs&H{l0@tGG64`JC!PzH<9pq6(BvorKfHytN=nb3TZ_8AS#&Wl!i6Pj@H#qs#} zB0n;JJ34#2gzwLe=_6j0@f-|0ICzT8SB&^AB+r6qmD9v5f{Rpw_6s;+C#@v%!ZKF$(UW}L#FfjBUXKT94+SMZu=cLcm!Gg4Cxc`)Cq1rkz1SbawA6)i zskvGnhz1(-1!gTuvU_UOyy2`xB_ST@QefT*S#dgJidQ{Qx#OQG?7+4>8i~5P} z@*4sqfFG%lM}Mg^!*}+k$}V}B=m3un8UDyjW$)BFe(8^^a*3LK)8##pxh4J_6P3w` zn%a@$O_HNSH7xT@bzS{5BP{Fst<+#|0=QWwo_8PZz^R=PqvBdiY&(k;8`Wcf#<(p7 zI`cKW8EP1P7?hM6^iHVtH(Qi6JF1Qut+Ch+MQE8F%lLmEsx#sFO_@uJP&x8T+%UP^ zj5M#ud3x$_B-7jh$Vk0?d4xP7ZgiN7)9}_$-$I(&0X@H(rw-u=h1MMM?A=(5zNh*DAd&UJTZ1H7r| z^R90wlomYnAl?**Y6zxngnl z-Z$1E@Gx8f22ej9tJMmZDvVRqimo3eh9gRwm38=jq#N?l!e_Z_Po~=^@QitDX}4Mu z!hBO*Eol@uR$*$bxuQv{T&FHbutyncN=QpdbtjKGgMZ+WnnPLMp-+whh@%9>F|qbW z8@I3_l)U5BTccX}swk4@cR9$JBsRK4SF+*~;A*tOaSKV7Zo#b;ckD>LLJUi@#f+^C zXc1%T1~4X_92ahwL8R%rDw5rtlK1IreLrp~uQ7a%9~5YU_`ARQhr{w*@NTETeGEc9 z=hxVc(SI5P87HU|QdSZo@m;HJj_ZS%TjY-)Pde0N4XpP_ zCaNKc=WJ;8O3=D^SEh!P0vO6TIjm1K6-TS)-v@~3(%AbC?cdz7q{FL2OHPPBboA;Z ze-MG{D;6^ToMhF$5Mug9ZkAbKs4R{R_hI$4EVp?ytzU4l8jII6ZZ_8^v>nH?idgh3 zt+B%L&eUDg#uOB*8qd@@%#TaL;pUsp8o>_{71YoIxG!JuDRVc2AD$L05MlZmo-!@( zyGYvsKNoj0^Ngcx}fXYJ8F1>gJO3QsogsQ-Yqe3)Ij@%)|k#eW_#8Q z(7QdC4m-J;>GITpF^;%aAk|!3_h32SiSmRib2Q)E1>SOc#*SOKSdzVZyF#N!!kL0K z|C_aBD}RTPY9w)5xFD|nW%1x93j8u50Zc-~ZGIkG&Y%BEWeG->W+qdu>`N+NM%zSu zv>bJjh6ywJi6!f`CS+>iS|T(=8K_M#O}@luUG%%zD9;qC3M0~?If&erBS5shklB_< zAxX}&oOCer?Y^9>g_Vp*noVbz52=O)NW&mJZOgFfn(BB z6|J(8b{-VBm-|i$I_|B(AJO5Ny~Ch|#Z9uDDv1xu`R`wxe>YvU!GwvOrkrt;8S(Jz z&nLQQw%%K};NoZ;y1S@OoAn8m_ku|GrXV-ew4*RbbZf3MTiUXd9N}nMzY?q|ZNSJS z=B!)yEOkNqO(>Uf(j@o!J|ryn3Eo=ybCenu1KB>eky6`)@tGtpVXBsj819`5cm?{9`Kl%A$aYso~`GyTw$%{o=AYe|^n^{p1syG~lpq0dS+ zV470=+OG0}T*f0tream!=!N6QqoQ)vue-gp(tbXo*RvI)XC6E7ve>O0?q7Wk%8Us? z1VvE8WCCI=5l{1oh3!Fgk!Has)q1ZM4)+2Q$8N%D$Od0d`RXQofeWIeZ$}mj(mmeq zI|U(zVY;EA@gAQFA^Ji|=g{2Jv1vRn2vhj&y}0u=YEB(MwCamj(SB^4$(L{XoNv1z zU%ve!>OA_PLHL3muZNB2YX)0>el(YYYjPy6>gHAd4yXjYsu)R>CPX2rvX8~}25U*I zC6c+#vEBQ(I&5LTCs+7Ta9lvF4tXtx^3WK|v_zfAzu5(uTkyE^L$CkT^VZ`wm2EG_GUWgyT`r{WS zBbzPiMYb|t$$E?-62jkhDMCecLcL=<44U_{@o^w?5|WssneRbP_rIKR$T0V=ACW31 z-E(<@7Y6MUX@svD7S$mQUnnU)#8MN7)ggQPZS-DLikN+ z3?F0lyUWf{3AgCr5TD7J8!$~o#=8vnN+^|qIYU`*OYiF&SFcR=fzw%H(q8|SIhoUU zp2ivk?}7=6NRr{gEfG2hD(eLt?__yDxK2cBv9dI5f%xU50{z-C`scbc5qlR&noEI) zNMd7}Aj+l33jL`V|9J_cY@ufy{ic(cv?595FrgO6(SR&wJ3Srl=H7orn}M2<;>;C` zU|L{*w#_osAAk20)A+u4B7w}Jc#O`K*RzU^fvB(lqpVlo!DCap6@{pCBX0!~u6;ao=E6tQ+n=eCr~v{R3|@PGK;?e1z@7 zQ|&Qyv(e8QPaE1NMH3>>=w@&hh1NuKGU&8k{nKufCWXiFd@3RX^Zq4~*;s;nuJE9q zg+)%axxeW%s>F#pn(7FmZ-T`qBFM=GBFwAPRzmr6X+r0{jLgz)kmN)K-o2&RA+lMuw3 zrqDrl5|!M?T93dPysK3tXO1|9YD=7peTDQ=J3seCk<_fI)B7d*X0s_4%f3yVF;)qj zEM1LOF{ABl1zB|od~LL*KlgAuG+(BWoko)Cr0{io6&r=-Y7p17T8nj1T(LwK*#(Qo zFkT#MsGCG zF;VW{!O|16|3QK#0A+26npiSkJt91Ti3~y9dv!JjDzUfONWQ_I*|@PXYu#V@rC8Ox z0*Z!o=myHO{CrQqDE0Ebh(LcIjsky&ZwYEdbMvT#$K&!)`fP!GOJdz!(qV%?ij3|q zQ7*CgIJZJe1GYoe&pP9>4~0v;ey#qM$nC9xyVsM4>rVyb?;XS)`lVtdzL+(Y;=ICFCpMYKO)H6! zjR#KEy-wGz8}G?Mmnz7`LIBu(oTP|@iK%>>Tq44H#F#cRB$5{t80j1Xa zr|Q9p>|TA3$z=JlHQb6`G>V1U9CJEnk$fjI=>8CtP#@uLd)NPT`lNe4cVd#p$aqz0 zDta`%*>yR0Nhi!}!ohqnmeQ!THDJ?Dn=HxNSW8R0K| zbMF04?Ao5EUN$~}RBIaz; z0=h#ql5!%ly?ko%A)gvTSu#O>E!ZDaI`BF6yDPmS@B5MT_ zZ?E?d%U4x$c45NOwq+2>kk{ZUrfDbi{UXH?@$$@b5xxy^J4%i*l9 z@`}!|cPT#(el{fbw`=EQxjjBi=zXZtBcaD3{cIe6B95QvA%qKeO1{c5j`kh(SVMn1 ziQgg2`0aBAp%X~i4RQOsWU(`$U7qlLlF(C@ri^r@X}rFq(m`?fO2NdVc=dRnHv;z* z#t>2zzey3l%s>F|0m?nHQGt~2;5o%uJ0xzok#Fub`cs42S+>D4WkiO+R?V4jZ~`P% z5vAJYTfhKbyUllHuWj{Oz)^EspFg*mza?^W+4rMO?*m9$a54C*EWwoVzQ(<-EY`Pl z&(JKrIJvi1+FMh}M6gwQ2xzg``RTA@q9IF9I5b8VRIEI3OP^w1PMyVJXW8RoRs8yb zM3y0sUP$&hI3!W>|Mf`7WXLUVHrxLV)R}hlwbH24TU_8(DW}z#nZt-mj5O zVjy|;EeG-#wPD9K`GC|5FYv72vhy@g*9EQjX{zkIG=|=%?dOU0eM^c6bf{0n>yBmGUGEpN=IzINomms?n)kY)2Smu6kw}i@ zH-WIfwgOmC1iNTKEI-!W??J4A^c5|i#-Q&>yF)eFoR$<>`bq2HJ z@j>R2Q8_ErD|4EmQ99|C4VNPG?|VO7+Lu@UxB8gZ!1(Xu<@i>lPDeYOCQHBRJBQw- zZG*9FK|W!bxFm*N>SWR`Q|HES#9gR*Dt53OZs)HN);Qw{xPuZDC+HqYrpjOJ}O>^{(S z$+GetctN#a9~5GE)7$ekOS>X;&SK}?H zx10NH2w)TIyHxxFZ<9fXs&mRt=$3}Dmq=RBdfKwVgEU`T)45OJ>>pk{lRq-0?=IVI z&U)7L{pGL!nYG6cu|S;qgnBQo-X|g)_A{N7fC<8O+9JibgyL5XI^v*bCu;ElMjI)r z@xsY9aa!wHTwg>}seA40|MtRPF44rn?hM;=;@WHx^duZw-G$t7?e(U7K=xmMfv_i^ zz#=I+3KhI`I`F2CG?pC{=mHQ>(SKRGw4z9Vxgs_7v7~76SP8Y&2c{3iobQ)Q?^L(m z6IP>}DTIwp{&~;;3ISl>O5o4Xu?#wXyjy5*K|<#FT*WgPyMxafOG<6%huTZJZ4-Ss zKw&*!n@`g@gLhZq%=mIpTBiA=p_h19zwk;Ad%~c9;`zVH@-q?~QFV0#&6&2wGe1Vm zm0A~r?F?DszM3iHASWN|oLc>tBp1=r1XdfGWdt)#WfG@O>4PTfaz-6@%N(gnOKQQgqL-a>wv-1hRZ(_2dY)bmJ+J!YlTHI>JmV%n*i(yd!DJj z1L{p)zrHmdmR5dxnR9q}*tX-PM1d4r-117w_}4V8aE%#522%F^&`(SgqZLQ@7k!o) zE6(+e8{3U9z*MK<|Evh`RZk|{*B0~@0Pr%5Bx6(`fS0Rv0DZh^piiAdbPn{U4Cg<( z*61=yc&w@ZVIMHw6e#jO048MQvn;bp3uDT@yVA!Vtv2k-o8Gqq}4`$uf-| za?`JfCU76syA3GQR|5PqP1`0nNAI`OZuUoryb{90!`GgK8?7AwnlWJpL;#x{kh$9c z@?Pih1;8#5@HR5uAK?S=2Nbu-0vgBDe|Rz%y=EX=V9Tp!InOf%O%poY%YE0;|J zjLn7xkH(b%lkSX{(G0GODx$dEL;7m2-!@+-RnD{G7 zM?)#@_el)Y&bOP_RwOq@kQx?0Oh54Mai4wGaHfSs#1{_^OL$&l4g@pKGmpAJCthv4 zf-PY>2XpWS?FUjJI%i%LK`h15H6u}i8gpg;D=dFys!$YAuNYVjlJg#G4odUNngH^) zj3Age#2cL>{t(v(t?W-VHi*u_G@Eo~O2=sEz$7c<&Ju)^wP`Ga;*qic@1?ZDwI}~m zsdkL!MgHDm|0x0Q<9j@bm#JScZ80*NbRUR=|MQ9s{i!Db^=;|%|E?N61ezk)E*vnI zjbZoAqo?D$eMK<;gWQ3;rwx^aR3-)g>~VjUnRLQGmHvz){mc(8$CQ>QcCdnlOFziz z%D#%Rb(6rn9FNHHIw@ui1+QCz?K$^{232IBxXcV2a+sl)?6^mr0jH&#eR*V^<-!L)K>M=}d0KjT zFti%A29ebD=z;Ui_0?83X~-Nw2*9zqtTXNkXt6Swc?faMyyfe@^mv@d{-0`L&k!=8 zu@%A=e)Bhx5L*(o5z1e`$ v>V*Fk#bh?Cl>l|-m}t9y$LIfV`iA`O^2b$-18wsy;HRdntyHaG_2&No)(|CZ literal 0 HcmV?d00001 diff --git a/doc/img/title2.png b/doc/img/title2.png new file mode 100644 index 0000000000000000000000000000000000000000..3c3e62d66b53aa564ba6ad2941c5712a7dada749 GIT binary patch literal 100162 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 Teeu&jdq!1JL!sii>AU{{!b)w^ literal 0 HcmV?d00001 diff --git a/doc/img/update-orange.png b/doc/img/update-orange.png new file mode 100644 index 0000000000000000000000000000000000000000..253df50d8115eab695636c28ee33c53237adfcce GIT binary patch literal 7080 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 literal 0 HcmV?d00001 diff --git a/doc/img/which-key.png b/doc/img/which-key.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1409de7df84c55ef7d4f9b7ca0eaa2f94c5a93 GIT binary patch literal 24235 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 literal 0 HcmV?d00001 diff --git a/init.el b/init.el new file mode 100644 index 0000000..d0cd280 --- /dev/null +++ b/init.el @@ -0,0 +1,35 @@ +;;; init.el --- Spacemacs Initialization File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Without this comment emacs25 adds (package-initialize) here +;; (package-initialize) + +;; Increase gc-cons-threshold, depending on your system you may set it back to a +;; lower value in your dotfile (function `dotspacemacs/user-config') +(setq gc-cons-threshold 100000000) + +(defconst spacemacs-version "0.200.5" "Spacemacs version.") +(defconst spacemacs-emacs-min-version "24.4" "Minimal version of Emacs.") + +(if (not (version<= spacemacs-emacs-min-version emacs-version)) + (message (concat "Your version of Emacs (%s) is too old. " + "Spacemacs requires Emacs version %s or above.") + emacs-version spacemacs-emacs-min-version) + (load-file (concat (file-name-directory load-file-name) + "core/core-load-paths.el")) + (require 'core-spacemacs) + (spacemacs/init) + (spacemacs/maybe-install-dotfile) + (configuration-layer/sync) + (spacemacs-buffer/display-info-box) + (spacemacs/setup-startup-hook) + (require 'server) + (unless (server-running-p) (server-start))) diff --git a/layers/+chat/erc/README.org b/layers/+chat/erc/README.org new file mode 100644 index 0000000..98ca526 --- /dev/null +++ b/layers/+chat/erc/README.org @@ -0,0 +1,103 @@ +#+TITLE: ERC layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#os-x][OS X]] + - [[#social-graph][Social graph]] + - [[#default-servers][Default servers]] + - [[#security-note][Security Note]] + - [[#key-bindings][Key bindings]] + - [[#spacemacs-layout-support][Spacemacs Layout Support]] + +* Description +Layer for [[http://www.emacswiki.org/emacs/ERC][ERC IRC chat]]. + +* Features +- Highlight nicks (using [[https://github.com/leathekd/erc-hl-nicks][erc-hl-nicks]]) +- Image inline support (using [[https://github.com/kidd/erc-image.el][erc-image]]) +- Logging to ~/.emacs.d/.cache/erc-logs and ViewLogMode for viewing logs + (using [[https://github.com/Niluge-KiWi/erc-view-log][erc-view-log]]) +- YouTube videos Thumbnails inline (using [[https://github.com/yhvh/erc-yt][erc-yt]]) +- Social Graph for ERC messages (using [[https://github.com/vibhavp/erc-social-graph][erc-social-graph]]) +- Optional SASL authentication via the variable =erc-enable-sasl-auth= + (using [[http://emacswiki.org/emacs/ErcSASL][erc-sasl]]) +- Completion of Emojis using [[https://github.com/dunn/company-emoji][company-emoji]] (still needs a way of showing, either + using the =emoji= layer or having a proper font) :clap: + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =erc= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** OS X +It's recommended to install the [[https://github.com/alloy/terminal-notifier][terminal-notifier gem]] so that you get +notifications via the OS X Notification Center. + +** Social graph +[[https://github.com/vibhavp/erc-social-graph][erc-social-graph]] needs graphviz to be installed on your system. + +** Default servers +You can define the default servers in the ERC custom layout by setting the +variable =erc-server-list=. Setting =:ssl= non nil will connect with =erc-tls=. +You can also use =aiD= to connect to your default servers outside the +custom layout. + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((erc :variables + erc-server-list + '(("irc.freenode.net" + :port "6697" + :ssl t + :nick "some-user" + :password "secret") + ("irc.myworkirc.net" + :port "1234" + :nick "some-suit" + :password "hunter2"))))) +#+END_SRC + +*** Security Note +You should not store your passwords in the clear in your =.spacemacs=, and that +goes double if you version your config file. ERC allows for a number of ways of +protecting this information. + +First, ERC will check your =~/.authinfo.gpg=, looking for lines like + +#+BEGIN_SRC shell + machine login password port +#+END_SRC + +You can omit =:password= in this case. + +You could also set an environment variable (or otherwise secret variable) and +read that in =:password=. + +* Key bindings + +| Key Binding | Description | +|-------------+-------------------------------------------------------| +| ~SPC a i e~ | Starts ERC | +| ~SPC a i E~ | Starts ERC via TLS/SSL | +| ~SPC a i i~ | Switch to next active ERC buffer | +| ~SPC a i D~ | Start ERC with default servers | +| ~SPC m b~ | Switch between ERC buffers | +| ~SPC m d~ | Interactively input a user action and send it to IRC. | +| ~SPC m D~ | Draw Social Graph using [[https://github.com/vibhavp/erc-social-graph][erc-social-graph]] | +| ~SPC m j~ | Join a channel, executes the /join command | +| ~SPC m n~ | Run "/names #channel" in the current channel. | +| ~SPC m l~ | Run the /list command | +| ~SPC m p~ | Part from the channel | +| ~SPC m q~ | Quit server | + +*Note:* If you want to connect securely to an IRC server, you must run =erc-tls= + command on ~SPC a i E~ instead of the =erc= command. + +* Spacemacs Layout Support +ERC buffers are added automatically to the default layout for ERC controlled by +the variable ~erc-spacemacs-layout-name~ (defaults to "@ERC") and the default +binding ("E") is controlled by ~erc-spacemacs-layout-binding~ diff --git a/layers/+chat/erc/config.el b/layers/+chat/erc/config.el new file mode 100644 index 0000000..7567fb1 --- /dev/null +++ b/layers/+chat/erc/config.el @@ -0,0 +1,24 @@ +;;; config.el --- erc Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar erc-enable-sasl-auth nil + "If non nil then use SASL authenthication with ERC.") + +(defvar erc-spacemacs-layout-name "@ERC" + "Name used in the setup for `spacemacs-layouts' micro-state") + +(defvar erc-spacemacs-layout-binding "E" + "Binding used in the setup for `spacemacs-layouts' micro-state") + +(defvar erc-server-list nil + "If non nil, connect automatically to the specified servers with the given credentials.") + +(spacemacs|defvar-company-backends erc-mode) diff --git a/layers/+chat/erc/funcs.el b/layers/+chat/erc/funcs.el new file mode 100644 index 0000000..34699e1 --- /dev/null +++ b/layers/+chat/erc/funcs.el @@ -0,0 +1,27 @@ +;;; funcs.el --- Spacemacs ERC Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun erc//servers (server-list) + (dolist (s server-list) + (setq s (copy-list s)) + (apply (if + (plist-get (cdr s) :ssl) + (progn + (remf (cdr s) :ssl) + 'erc-tls) + 'erc) + :server s))) + +(defun erc/default-servers () + (interactive) + (if erc-server-list + (erc//servers erc-server-list) + (message "You must define erc-server-list"))) diff --git a/layers/+chat/erc/local/erc-sasl/erc-sasl.el b/layers/+chat/erc/local/erc-sasl/erc-sasl.el new file mode 100644 index 0000000..0736b38 --- /dev/null +++ b/layers/+chat/erc/local/erc-sasl/erc-sasl.el @@ -0,0 +1,95 @@ +;; erc-sasl.el -- handle SASL PLAIN authentication + +;; Copyright (C) 2012 Joseph Gay + +;; Author: Joseph Gay +;; Keywords: comm + +;; This file is NOT part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; This file implements SASL PLAIN authentication +;; To activate: +;; +;; (require 'erc-sasl) +;; +;; (add-to-list 'erc-sasl-server-regexp-list "host\\.server\\.com") +;; e.g. irc\\.freenode\\.net, or .* for any host +;; +;; To disable: +;; (setq erc-sasl-use-sasl nil) +;; +;; NOTE: requires passing a password initially to (erc) and variants + +;;; Code: + +(eval-when-compile (require 'cl)) + +(defvar erc-sasl-use-sasl t + "Set to nil to disable SASL auth") + +(defvar erc-sasl-server-regexp-list '() + "List of regexps matching server host names for which sasl + should be used") + +(defun erc-sasl-use-sasl-p () + "Used internally to decide whether SASL should be used in the +current session" + (and erc-sasl-use-sasl + (boundp 'erc-session-server) + (cl-loop for re in erc-sasl-server-regexp-list + thereis (integerp (string-match re erc-session-server))))) + +(define-erc-response-handler (CAP) + "Client capability framework is used to request SASL auth, need + to wait for ACK to begin" nil + (let ((msg (erc-response.contents parsed))) + (when (string-match " *sasl" msg) + (erc-server-send "AUTHENTICATE PLAIN") + ;; now wait for AUTHENTICATE + + ))) + +(define-erc-response-handler (AUTHENTICATE) + "Handling empty server response indicating ready to receive + authentication." nil + (if erc-session-password + (let ((msg (erc-response.contents parsed))) + (when (string= "+" msg) + ;; plain auth + (erc-server-send + (format "AUTHENTICATE %s" + (base64-encode-string + (concat "\0" (erc-current-nick) + "\0" erc-session-password) t))))) + (progn + (erc-display-message + parsed 'error + (if erc-server-connected 'active proc) + "You must set a password in order to use SASL authentication.") + ;; aborting SASL auth + (erc-server-send (erc-server-send "AUTHENTICATE *"))))) + +(define-erc-response-handler (903) + "Handling a successful SASL authentication." nil + (erc-server-send "CAP END")) + +(provide 'erc-sasl) + +;;; erc-sasl.el ends here +;; Local Variables: +;; indent-tabs-mode: nil +;; End: diff --git a/layers/+chat/erc/local/erc-tex/erc-tex.el b/layers/+chat/erc/local/erc-tex/erc-tex.el new file mode 100644 index 0000000..5b316b1 --- /dev/null +++ b/layers/+chat/erc/local/erc-tex/erc-tex.el @@ -0,0 +1,176 @@ +;;; erc-tex.el --- LaTeX mathematical expressions rendering for ERC + +;; Copyright (C) 2009 David Vazquez + +;; Last-modified: <2009-09-14 02:11:53 david> + +;; Authors: David Vazquez +;; Created: 12 Sep 2009 +;; Keywords: comm, tex + +;; 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: + +;; erc-tex is a tiny ERC module which render LaTeX mathematical expressions +;; in your ERC chats. You will need both latex and dvipng in order to use this +;; module. +;; +;; Once erc-tex is avalaible for your Emacs, you can use `erc-tex-mode' to +;; toggle the module. This will render the text between $...$ as a LaTeX +;; expression. Indeed, you can use `erc-tex-image-edit', bound to `RET' on TeX +;; formulas to edit the TeX code in the prompt and resend the image. + +;;; TODO: +;; - Highlight the formulas according to ERC faces as erc-track. + +;;; Code: + +(eval-when-compile (require 'cl)) +(require 'erc) + + +(defvar erc-tex-latex-program "latex" + "Program name for invoking LaTeX.") + +(defvar erc-tex-dvipng-program "dvipng" + "Program name for invoking dvipng.") + +(defvar erc-tex-image-size 1.2 + "Ratio of magnification.") + + +;; Error condition signaled when it cannot render a LaTeX expression. +(put 'erc-tex-bad-expression-error + 'error-conditions '(error erc-tex-bad-expression-error)) + + +(defsubst erc-tex-run-latex (&rest arguments) + "Launch LaTeX program with some arguments." + (unless (zerop (apply #'call-process erc-tex-latex-program nil nil nil arguments)) + (signal 'erc-tex-bad-expression-error nil))) + +(defsubst erc-tex-run-dvipng (&rest arguments) + "Launch dvipng program with some arguments." + (unless (zerop (apply #'call-process erc-tex-dvipng-program nil nil nil arguments)) + (signal 'erc-tex-bad-expression-error nil))) + +;; Call to latex and dvipng in order to build a PNG image from the LaTeX +;; expression MATH-STRING. Return the image descriptor if it was sucessful, +;; NIL otherwise. +(defun erc-tex-make-image (math-expression fg bg) + (condition-case nil + (let* ((prefix (concat temporary-file-directory (make-temp-name "erc-tex-"))) + (tex-file (concat prefix ".tex")) + (dvi-file (concat prefix ".dvi")) + (png-file (concat prefix ".png"))) + + (with-temp-file tex-file + (insert "\\documentclass{article}\n" + "\\pagestyle{empty}\n" + "\\usepackage{amsmath, amssymb, amsthm}\n" + "\\begin{document}\n" + "\\par\n" + "$" math-expression "$" + "\\end{document}\n")) + + (erc-tex-run-latex (concat "-output-directory=" temporary-file-directory) tex-file) + + (cl-flet ((colorize (color) + ;; Return a string which stand for COLOR in the format that + ;; dvipng understands. + (let ((max (car (color-values "#ffffff")))) + (destructuring-bind (r g b) + (color-values color) + (format "rgb %.02f %.02f %.02f" + (/ (float r) max) + (/ (float g) max) + (/ (float b) max)))))) + + (erc-tex-run-dvipng "-x" (number-to-string (floor (* 1000 erc-tex-image-size))) + "-T" "tight" + "-fg" (colorize fg) + "-bg" (colorize bg) + "-o" png-file + dvi-file)) + (delete-file tex-file) + (delete-file dvi-file) + (create-image png-file 'png nil :margin '(0 . 5) :ascent 'center)) + + ((erc-tex-bad-expression-error) + ;; We do not delete auxiliary files if any error ocurred. + ))) + + + +(defvar erc-tex-image-keymap + (let ((keymap (make-sparse-keymap))) + (define-key keymap (kbd "RET") 'erc-tex-image-edit) + keymap)) + +(defun erc-tex-image-edit () + (interactive) + (let* ((start (point)) + (i start) + (prop (get-char-property i 'display))) + (while (eq prop (get-char-property i 'display)) + (setq i (1+ i))) + (goto-char (point-max)) + (insert (buffer-substring-no-properties start i)))) + +(defun erc-tex-render (&optional fg bg) + (let ((fg (or fg (face-foreground 'default))) + (bg (or bg (face-background 'default)))) + (goto-char (point-min)) + (while (re-search-forward "\\$[^$]*\\$" nil t) + (let* ((match (match-string-no-properties 0)) + (descp (erc-tex-make-image match fg bg))) + (when descp + (let (start end) + (delete-region (match-beginning 0) (match-end 0)) + (setq start (point)) + (insert-image descp match) + (setq end (point)) + (put-text-property start end 'keymap erc-tex-image-keymap))))))) + + +;;; Minor mode + +(defun erc-tex-render-insert () + (erc-tex-render)) + +(defun erc-tex-render-send () + (erc-tex-render + (face-foreground 'erc-input-face) + (face-background 'erc-input-face))) + +(define-erc-module tex latex + "Display LaTeX mathematical expressions as images in ERC." + ((add-hook 'erc-insert-modify-hook 'erc-tex-render-insert t) + (add-hook 'erc-send-modify-hook 'erc-tex-render-send t)) + ((remove-hook 'erc-insert-modify-hook 'erc-tex-render-insert) + (remove-hook 'erc-send-modify-hook 'erc-tex-render-send))) + + +(provide 'erc-tex) + +;; Local variables: +;; fill-column: 78 +;; indent-tabs-mode: nil +;; time-stamp-pattern: "10/^;; Last-modified: <%%>$" +;; End: + +;;; erc-tex.el ends here diff --git a/layers/+chat/erc/local/erc-yank/README.md b/layers/+chat/erc/local/erc-yank/README.md new file mode 100644 index 0000000..29e2410 --- /dev/null +++ b/layers/+chat/erc/local/erc-yank/README.md @@ -0,0 +1,19 @@ +# erc-yank + +Automagically create a Gist if pasting more than 5 lines + +Hook in as follows: + + (add-hook 'erc-mode-hook + (lambda () (define-key erc-mode-map [(control ?y)] 'erc-yank))) + +Or, if you want to use my `use-package' macro: + + (use-package erc + :commands erc + :config + (use-package erc-yank + :init + (bind-key "C-y" 'erc-yank erc-mode-map))) + +This module requires gist.el, from: https://github.com/defunkt/gist.el diff --git a/layers/+chat/erc/local/erc-yank/erc-yank.el b/layers/+chat/erc/local/erc-yank/erc-yank.el new file mode 100644 index 0000000..62a49bf --- /dev/null +++ b/layers/+chat/erc/local/erc-yank/erc-yank.el @@ -0,0 +1,106 @@ +;;; erc-yank --- Automagically create a Gist if pasting more than 5 lines + +;; Copyright (C) 2012 John Wiegley + +;; Author: John Wiegley +;; Created: 17 Jun 2012 +;; Version: 1.0 +;; Keywords: erc yank gist +;; X-URL: https://github.com/jwiegley/erc-yank + +;; 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 2, 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 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: + +;; Automagically create a Gist if pasting more than 5 lines. +;; +;; Hook in as follows: +;; +;; (add-hook 'erc-mode-hook +;; (lambda () (define-key erc-mode-map [(control ?y)] 'erc-yank))) +;; +;; Or, if you want to use my `use-package' macro: +;; +;; (use-package erc +;; :commands erc +;; :config +;; (use-package erc-yank +;; :init +;; (bind-key "C-y" 'erc-yank erc-mode-map))) +;; +;; This module requires gist.el, from: https://github.com/defunkt/gist.el + +;;; Code: + +(require 'gist) + +(defgroup erc-yank nil + "Automagically create a Gist if pasting more than 5 lines" + :group 'erc) + +(defcustom erc-yank-flood-limit 5 + "Maximum number of lines allowed to yank to an erc buffer." + :type 'integer + :group 'erc-yank) + +(defcustom erc-yank-query-before-gisting t + "If non-nil, ask the user before creating a new Gist." + :type 'boolean + :group 'erc-yank) + +(defcustom erc-yank-display-text-on-prompt t + "If non-nil, show the text to yank in another buffer when prompting." + :type 'boolean + :group 'erc-yank) + +(defun erc-yank (&optional arg) + "Yank or make a gist depending on the size of the yanked text." + (interactive "*P") + (let* ((kill-text (current-kill (cond + ((listp arg) 0) + ((eq arg '-) -2) + (t (1- arg))))) + (lines (length (split-string kill-text "\n")))) + (if (and (> lines erc-yank-flood-limit) + (or (not erc-yank-query-before-gisting) + (let ((query + (format (concat "Text to yank is %d lines;" + " create a Gist instead? ") lines))) + (if erc-yank-display-text-on-prompt + (save-window-excursion + (with-current-buffer (get-buffer-create "*Yank*") + (delete-region (point-min) (point-max)) + (insert kill-text) + (goto-char (point-min)) + (display-buffer (current-buffer)) + (fit-window-to-buffer + (get-buffer-window (current-buffer))) + (unwind-protect + (y-or-n-p query) + (kill-buffer (current-buffer))))) + (y-or-n-p query))))) + (let ((buf (current-buffer))) + (with-temp-buffer + (insert kill-text) + (gist-region (point-min) (point-max) nil + `(lambda (gist) + (with-current-buffer ,buf + (insert (oref gist :html-url))))))) + (yank arg)))) + +(provide 'erc-yank) + +;;; erc-yank.el ends here diff --git a/layers/+chat/erc/packages.el b/layers/+chat/erc/packages.el new file mode 100644 index 0000000..c539b0d --- /dev/null +++ b/layers/+chat/erc/packages.el @@ -0,0 +1,247 @@ +;;; packages.el --- erc Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq erc-packages + '( + company + company-emoji + emoji-cheat-sheet-plus + erc + (erc-gitter :location (recipe + :fetcher github + :repo "jleechpe/erc-gitter") + :excluded t) + erc-hl-nicks + erc-image + (erc-sasl :location local) + erc-social-graph + (erc-tex :location local) + erc-view-log + (erc-yank :location local :excluded t) + erc-yt + linum + persp-mode + )) + +(when (spacemacs/system-is-mac) + (push 'erc-terminal-notifier erc-packages)) + +(defun erc/post-init-company () + (spacemacs|add-company-hook erc-mode) + (push 'company-capf company-backends-erc-mode)) + +(defun erc/post-init-company-emoji () + (push 'company-emoji company-backends-erc-mode)) + +(defun erc/post-init-emoji-cheat-sheet-plus () + (add-hook 'erc-mode-hook 'emoji-cheat-sheet-plus-display-mode)) + +(defun erc/init-erc () + "Initialize ERC" + (use-package erc + :defer t + :init + (progn + (spacemacs/set-leader-keys + "aie" 'erc + "aiE" 'erc-tls + "aii" 'erc-track-switch-buffer + "aiD" 'erc/default-servers) + ;; utf-8 always and forever + (setq erc-server-coding-system '(utf-8 . utf-8))) + :config + (progn + (use-package erc-autoaway + :defer t + :init + (setq erc-auto-discard-away t + erc-autoaway-idle-seconds 600 + erc-autoaway-use-emacs-idle t)) + (erc-services-mode 1) + (defun erc-list-command () + "execute the list command" + (interactive) + (insert "/list") + (erc-send-current-line)) + (setq erc-kill-buffer-on-part t + erc-kill-queries-on-quit t + erc-kill-server-buffer-on-quit t) + (add-hook 'erc-connect-pre-hook (lambda (x) (erc-update-modules))) + (erc-track-mode t) + (setq erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT" "MODE") + erc-server-coding-system '(utf-8 . utf-8)) + (setq erc-prompt (lambda () (concat "[" (buffer-name) "]"))) + + (require 'notifications) + (defun erc-global-notify (match-type nick message) + "Notify when a message is recieved." + (notifications-notify + :title nick + :body message + :app-icon (concat spacemacs-assets-directory "spacemacs.svg") + :urgency 'low)) + + ;; osx doesn't have dbus support + (when (boundp 'dbus-compiled-version) + (add-hook 'erc-text-matched-hook 'erc-global-notify)) + + ;; keybindings + (spacemacs/set-leader-keys-for-major-mode 'erc-mode + "d" 'erc-input-action + "j" 'erc-join-channel + "n" 'erc-channel-names + "l" 'erc-list-command + "p" 'erc-part-from-channel + "q" 'erc-quit-server)))) + +(defun erc/init-erc-gitter () + (use-package erc-gitter + :config + (add-to-list 'erc-modules 'gitter))) + + +(defun erc/init-erc-hl-nicks () + (spacemacs|use-package-add-hook erc + :post-config + (use-package erc-hl-nicks))) + +(defun erc/init-erc-sasl () + (spacemacs|use-package-add-hook erc + :post-config + (use-package erc-sasl + :defer t + :if erc-enable-sasl-auth + ;; Following http://www.emacswiki.org/emacs/ErcSASL + ;; Maybe an advice would be better? + :config + (progn + ;; Add any server like this + ;; (add-to-list 'erc-sasl-server-regexp-list "host\\.server\\.com") + (add-to-list 'erc-sasl-server-regexp-list "irc\\.freenode\\.net") + (defun erc-login () + "Perform user authentication at the IRC server." + (erc-log (format "login: nick: %s, user: %s %s %s :%s" + (erc-current-nick) + (user-login-name) + (or erc-system-name (system-name)) + erc-session-server + erc-session-user-full-name)) + (if erc-session-password + (erc-server-send (format "PASS %s" erc-session-password)) + (message "Logging in without password")) + (when (and (featurep 'erc-sasl) (erc-sasl-use-sasl-p)) + (erc-server-send "CAP REQ :sasl")) + (erc-server-send (format "NICK %s" (erc-current-nick))) + (erc-server-send + (format "USER %s %s %s :%s" + ;; hacked - S.B. + (if erc-anonymous-login erc-email-userid (user-login-name)) + "0" "*" + erc-session-user-full-name)) + (erc-update-mode-line)))))) + +(defun erc/init-erc-social-graph () + (spacemacs|use-package-add-hook erc + :post-config + (use-package erc-social-graph + :init + (progn + ;; does not exist ? + ;; (erc-social-graph-enable) + (setq erc-social-graph-dynamic-graph t) + (spacemacs/set-leader-keys-for-major-mode 'erc-mode + "D" 'erc-social-graph-draw))))) + +(defun erc/init-erc-tex () + (spacemacs|use-package-add-hook erc + :post-config + (require 'erc-tex))) + +(defun erc/init-erc-yt () + (spacemacs|use-package-add-hook erc + :post-config + (use-package erc-yt + :init (with-eval-after-load 'erc + (add-to-list 'erc-modules 'youtube))))) + +(defun erc/init-erc-yank () + (spacemacs|use-package-add-hook erc + :post-config + (use-package erc-yank + :if (configuration-layer/package-usedp 'gist) + :init (evil-define-key 'normal erc-mode-map "p" 'erc-yank)))) + +(defun erc/init-erc-view-log () + (use-package erc-view-log + :defer t + :init + (progn + (setq erc-log-channels-directory + (expand-file-name + (concat spacemacs-cache-directory + "erc-logs"))) + (unless (file-exists-p erc-log-channels-directory) + (make-directory erc-log-channels-directory)) + (add-to-list 'auto-mode-alist + `(,(format "%s/.*\\.[log|txt]" + (regexp-quote + (expand-file-name + erc-log-channels-directory))) . erc-view-log-mode)) + (with-eval-after-load 'erc (add-to-list 'erc-modules 'log))) + :config + ;; ERC Logging + (progn + ;; Following https://raw.githubusercontent.com/Niluge-KiWi/erc-view-log/master/erc-view-log.el + ;; installation instructions + (add-hook 'erc-view-log-mode-hook 'turn-on-auto-revert-tail-mode) + + (spacemacs|define-transient-state erc-log + :title "ERC Log Transient State" + :doc "\n[_r_] reload the log file [_>_/_<_] go to the next/prev mention" + :evil-leader-for-mode (erc-mode . ".") + :bindings + ("r" erc-view-log-reload-file) + (">" erc-view-log-next-mention) + ("<" erc-view-log-previous-mention))))) + +(defun erc/init-erc-image () + (use-package erc-image + :defer t + :init (with-eval-after-load 'erc + (require 'erc-image) + (add-to-list 'erc-modules 'image)))) + +(defun erc/init-erc-terminal-notifier () + (use-package erc-terminal-notifier + :if (executable-find "terminal-notifier"))) + +(defun erc/post-init-linum () + (spacemacs/add-to-hooks 'spacemacs/no-linum '(erc-mode-hook + erc-insert-pre-hook))) + +(defun erc/post-init-persp-mode () + ;; do not save erc buffers + (with-eval-after-load 'persp-mode + (push (lambda (b) (with-current-buffer b (eq major-mode 'erc-mode))) + persp-filter-save-buffers-functions)) + + (spacemacs|define-custom-layout erc-spacemacs-layout-name + :binding erc-spacemacs-layout-binding + :body + (progn + (defun spacemacs-layouts/add-erc-buffer-to-persp () + (persp-add-buffer (current-buffer) + (persp-get-by-name + erc-spacemacs-layout-name))) + (add-hook 'erc-mode-hook #'spacemacs-layouts/add-erc-buffer-to-persp) + (if erc-server-list + (erc/default-servers) + (call-interactively 'erc))))) diff --git a/layers/+chat/jabber/README.org b/layers/+chat/jabber/README.org new file mode 100644 index 0000000..6c11922 --- /dev/null +++ b/layers/+chat/jabber/README.org @@ -0,0 +1,78 @@ +#+TITLE: Jabber contribution layer for Spacemacs + +[[file:img/jabber-logo.gif]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + - [[#jabber-roster][Jabber Roster]] + - [[#hipchat][HipChat]] + - [[#authentication][Authentication]] + - [[#joining-rooms][Joining rooms]] + +* Description +This layer adds keybindings for jabber.el. jabber.el is a Jabber (XMPP) client for Emacs + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =jabber= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key bindings + +| Key Binding | Description | +| ~SPC a j~ | Connect all accounts | + +** Jabber Roster +| Key Binding | Description | +| ~SPC m a~ | Jabber send presence | +| ~SPC m b~ | Jabber get browse | +| ~SPC m d~ | Jabber disconnect | +| ~SPC m e~ | Jabber roster edit action at point | +| ~SPC m g~ | Jabber display roster | +| ~SPC m i~ | Jabber get disco items | +| ~SPC m j~ | Jabber muc join | +| ~SPC m q~ | bury buffer | +| ~SPC m r~ | Jabber roster toggle offline display | +| ~SPC m s~ | Jabber send subscription request | +| ~SPC m v~ | Jabber get version | +| ~SPC m RET~ | Jabber roster ret action at point | + +* HipChat +** Authentication +To find YOUR_JABBER_ID visit "XMPP/Jabber info" section on your profile page at hipchat.com + #+begin_src emacs-lisp + + (setq ssl-program-name "gnutls-cli" + ssl-program-arguments '("--insecure" "-p" service host) + ssl-certificate-verification-policy 1) + + (setq jabber-account-list '(("YOUR_JABBER_ID@chat.hipchat.com" + (:port . 5223) + (:password . "YOUR_PASS") + (:connection-type . ssl)))) + #+end_src + +** Joining rooms +To simplify joining rooms, you can use something like this: + + #+begin_src emacs-lisp + (defvar hipchat-room-list '( + ("HIPCHAT NAME" . "XMPP/JABBER NAME") + )) + + (defvar hipchat-number "") + (defvar hipchat-nickname "YOU_NICKNAME") + (defun hipchat-join () + (interactive) + (let* ((room-list (sort (mapcar 'car hipchat-room-list) 'string-lessp)) + (selected-room (completing-read "Room name: " room-list)) + (hipchat-mapping (cdr (assoc selected-room hipchat-room-list)))) + (jabber-groupchat-join + (jabber-read-account) + (concat hipchat-number "" hipchat-mapping "@conf.hipchat.com") + hipchat-nickname + t))) + + #+end_src diff --git a/layers/+chat/jabber/funcs.el b/layers/+chat/jabber/funcs.el new file mode 100644 index 0000000..9511581 --- /dev/null +++ b/layers/+chat/jabber/funcs.el @@ -0,0 +1,20 @@ +;;; funcs.el --- Jabber layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs/jabber-connect-hook (jc) + (jabber-send-presence "" "Online" 10) + (jabber-whitespace-ping-start) + ;; Disable the minibuffer getting jabber messages when active + ;; See http://www.emacswiki.org/JabberEl + (define-jabber-alert echo "Show a message in the echo area" + (lambda (msg) + (unless (minibuffer-prompt) + (message "%s" msg))))) diff --git a/layers/+chat/jabber/img/attribution.md b/layers/+chat/jabber/img/attribution.md new file mode 100644 index 0000000..a10bad9 --- /dev/null +++ b/layers/+chat/jabber/img/attribution.md @@ -0,0 +1,5 @@ +This image (jabber-logo.gif) is a derivative of an image owned and +copyrighted by the Jabber Software Foundation and released under the +[CC-BY 2.5 license](http://creativecommons.org/licenses/by/2.5/), +which is available at +[at Wikimedia Commons](http://commons.wikimedia.org/wiki/File:Jabber_logo.png). diff --git a/layers/+chat/jabber/img/jabber-logo.gif b/layers/+chat/jabber/img/jabber-logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..5077a9823d1bb057025f277c7fced5fc95b668b8 GIT binary patch literal 6030 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 IF@*pCI|u9rZU6uP literal 0 HcmV?d00001 diff --git a/layers/+chat/jabber/packages.el b/layers/+chat/jabber/packages.el new file mode 100644 index 0000000..60092ae --- /dev/null +++ b/layers/+chat/jabber/packages.el @@ -0,0 +1,39 @@ +;;; packages.el --- jabber Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Tosh Lyons +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq jabber-packages '(jabber)) + +(defun jabber/init-jabber () + (use-package jabber + :defer t + :init + (progn + (add-hook 'jabber-post-connect-hooks 'spacemacs/jabber-connect-hook) + (spacemacs/set-leader-keys "aj" 'jabber-connect-all)) + :config + (progn + (spacemacs/set-leader-keys-for-major-mode 'jabber-roster-mode + "a" 'jabber-send-presence + "b" 'jabber-get-browse + "d" 'jabber-disconnect + "e" 'jabber-roster-edit-action-at-point + "g" 'jabber-display-roster + "i" 'jabber-get-disco-items + "j" 'jabber-muc-join + "q" 'bury-buffer + "r" 'jabber-roster-toggle-offline-display + "s" 'jabber-send-subscription-request + "v" 'jabber-get-version + "RET" 'jabber-roster-ret-action-at-point) + (evilified-state-evilify jabber-roster-mode jabber-roster-mode-map + "j" 'jabber-go-to-next-roster-item + "k" 'jabber-go-to-previous-roster-item)))) + diff --git a/layers/+chat/rcirc/README.org b/layers/+chat/rcirc/README.org new file mode 100644 index 0000000..45f5982 --- /dev/null +++ b/layers/+chat/rcirc/README.org @@ -0,0 +1,193 @@ +#+TITLE: RCIRC layer + +[[file:img/irc.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#configuration][Configuration]] + - [[#storing-the-credentials-in-your-dotfile][Storing the credentials in your dotfile]] + - [[#example][Example:]] + - [[#storing-the-credentials-in-your-dropbox][Storing the credentials in your Dropbox]] + - [[#example][Example:]] + - [[#storing-the-credentials-in-authinfo][Storing the credentials in authinfo]] + - [[#connecting-behind-a-znc-bouncer-and-storing-the-credentials-in-authinfo][Connecting behind a ZNC bouncer and storing the credentials in authinfo]] + - [[#disclaimer][Disclaimer]] + - [[#note][Note]] + - [[#key-bindings][Key Bindings]] + - [[#rcirc-documentation][Rcirc documentation]] + - [[#spacemacs-layout-support][Spacemacs Layout Support]] + +* Description +This layer provide support for [[http://www.gnu.org/software/emacs/manual/html_mono/rcirc.html][rcirc]] with optional support for authinfo +and ZNC. + +* Features +- Store channel logs into =~/.emacs.d/.cache/rcirc-logs/= +- Support for credentials stored in =~/.authinfo.gpg= (need to have gnutls) +- Support ZNC support (with optional =~/.authinfo.gpg=) +- Colored nicknames +- WIP: Real time change when people use =/s/foo/bar= in the chats +- Completion of Emojis using [[https://github.com/dunn/company-emoji][company-emoji]] (still needs a way of showing, either + using the =emoji= layer or having a proper font) :clap: + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =rcirc= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Configuration +There are several ways to configure rcirc supported by the layer: +- By storing your credentials in =rcirc-server-alist= in your dotfile (not + secured) +- By storing your credentials in =rcirc-server-alist= in your Dropbox (better + but still not secured) +- By storing your credentials in authinfo (secured) +- By using a ZNC bouncer _and_ storing your credentials (secured) + +*** Storing the credentials in your dotfile +You can store your servers configuration along with your credentials in the +=dotspacemacs/user-config= of your dotfile. + +*Important:* This method is the less secured and it is not recommended since +your dotfile is often stored in a public repository and is not crypted. This +is convenient but not recommended. + +**** Example: +#+BEGIN_SRC emacs-lisp +(setq rcirc-server-alist + '(("irc.freenode.net" + :user "spacemacs_user" + :port "1337" + :password "le_passwd" + :channels ("#emacs")))) +#+END_SRC + +*** Storing the credentials in your Dropbox +You can store your servers configuration along with your credentials in +your dropbox in the file =~/Dropbox/emacs/pinit-rcirc.el=. + +*Important:* This method is more secured since your file is stored in +a private location but it is still not crypted on your drive. Moreover +since Dropbox automatically sync your files you may have a lot of copies +of the file containing your credentials. This is convenient but not +recommended. + +**** Example: +#+BEGIN_SRC emacs-lisp +(setq rcirc-server-alist + '(("irc.freenode.net" + :user "spacemacs_user" + :port "1337" + :password "le_passwd" + :channels ("#emacs")))) +#+END_SRC + +*** Storing the credentials in authinfo +This method is considered secured and is the recommended way to configure +rcirc. + +1) If you want to use =authinfo.gpg= you have to enable the support for it by + setting =rcirc-enable-authinfo-support= to =t= in your dotfile: + + #+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (rcirc :variables rcirc-enable-authinfo-support t))) + #+END_SRC + +2) In your =~/.authinfo.gpg= file store your credentials like this: + + #+BEGIN_EXAMPLE + machine irc.freenode.net port nickserv user password + #+END_EXAMPLE + +3) At last you need to provide your servers configuration in the + =dotspacemacs/user-config= function of your dotfile: + + #+BEGIN_SRC emacs-lisp + (setq rcirc-server-alist + '(("irc.freenode.net" + :user "spacemacs_user" + :port "1337" + :channels ("#emacs")))) + #+END_SRC + +*** Connecting behind a ZNC bouncer and storing the credentials in authinfo +This methods is also secured since it uses authinfo _but_ you must secure your +ZNC server configuration as well! + +ZNC is a popular bouncer which is easy to setup. A bouncer is a proxy that +connects to your IRC channels on your behalf, instead of connecting to the IRC +server you connect to your ZNC server. The ZNC server can store the discussions +in a buffer while you are not connected. + +**** Disclaimer +This assumes that you are familiar with ZNC and you have a ZNC server properly +setup. If it is not the case then it is recommended to read about ZNC +[[http://wiki.znc.in/ZNC][here]]. There is also an installation guide for Ubuntu [[https://www.digitalocean.com/community/tutorials/how-to-install-znc-an-irc-bouncer-on-an-ubuntu-vps][here]]. + +**** Note +For now authinfo is mandatory to use the ZNC configuration. + +1) To enable ZNC support set the variable =rcirc-enable-znc-support= to =t= in + your dotfile: + + #+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (rcirc :variables rcirc-enable-znc-support t))) + #+END_SRC + +2) In your =~/.authinfo.gpg= file store your credentials like this: + + #+BEGIN_EXAMPLE + machine freenode.spacemacsserver.me port irc user spacemacs_user/freenode password ZNC_PASSWORD + machine geekshed.spacemacsserver.me port irc user spacemacs_user/geekshed password ZNC_PASSWORD + #+END_EXAMPLE + + *Important* =port= must be set to =irc=. This is a convention of the layer to + retrieve the credentials for the ZNC configuration. + +3) Then setup your servers configuration using subdomains in the + =dotspacemacs/user-config= function of your dotfile. The =:auth= keyword arguments + will be replaced by the credentials stored in your =~/.authinfo.gpg=. + + #+BEGIN_SRC emacs-lisp + (setq rcirc-server-alist + ;; This will replace :auth with the correct thing, see the doc for that function + '(("freenode" + :host "freenode.spacemacsserver.me" + :port "1337" + :auth "spacemacs_user/freenode" + :channels ("#emacs")) + ("geekshed" + :host "geekshed.spacemacsserver.me" + :port "1337" + :auth "spacemacs_user/geekshed" + :channels ("#jupiterbroadcasting")))) + #+END_SRC + +* Key Bindings + +| Key Binding | Description | +|-------------+-------------------------------------------------------------------------------| +| ~SPC a i r~ | Open rcirc | +| ~SPC l o i~ | Open rcirc in a custom perspective "@RICRC" (need perspectives layer enabled) | + +In normal state: + +| Key Binding | Description | +|-------------+--------------------------| +| ~C-j~ | next item in history | +| ~C-k~ | previous item in history | + +* Rcirc documentation +The rcirc documentation can be found [[http://www.gnu.org/software/emacs/manual/html_mono/rcirc.html][here]]. + +* Spacemacs Layout Support + +RCIRC buffers are added automatically to the default layout for RCIRC controlled by +the variable ~rcirc-spacemacs-layout-name~ (defaults to "@RCIRC") and the default +binding ("i") is controlled by ~rcirc-spacemacs-layout-binding~ diff --git a/layers/+chat/rcirc/config.el b/layers/+chat/rcirc/config.el new file mode 100644 index 0000000..d8549e1 --- /dev/null +++ b/layers/+chat/rcirc/config.el @@ -0,0 +1,26 @@ +;;; config.el --- rcirc Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar rcirc-enable-authinfo-support nil + "if non nil then authentication uses authinfo.") + +(defvar rcirc-enable-znc-support nil + "if non nil then znc is enabled.") + +(defvar rcirc-spacemacs-layout-name "@RCIRC" + "Name used in the setup for `spacemacs-layouts' micro-state") + +(defvar rcirc-spacemacs-layout-binding "i" + "Binding used in the setup for `spacemacs-layouts' micro-state") + +(spacemacs|defvar-company-backends rcirc-mode) diff --git a/layers/+chat/rcirc/funcs.el b/layers/+chat/rcirc/funcs.el new file mode 100644 index 0000000..58502c5 --- /dev/null +++ b/layers/+chat/rcirc/funcs.el @@ -0,0 +1,83 @@ +;;; funcs.el --- rcirc Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; authinfo ------------------------------------------------------------------ + +(defun spacemacs//rcirc-authinfo-config () + "Initialize authinfo. +Allow rcirc to read authinfo from ~/.authinfo.gpg via the auth-source API. +This doesn't support the chanserv auth method. " + (require 'auth-source) + (dolist (p (auth-source-search :port '("nickserv" "bitlbee" "quakenet") + :require '(:port :user :secret))) + (let ((secret (plist-get p :secret)) + (method (intern (plist-get p :port)))) + (add-to-list + 'rcirc-authinfo + (list (plist-get p :host) method (plist-get p :user) + (if (functionp secret) (funcall secret) secret)))))) + + +;; ZNC with authinfo --------------------------------------------------------- + +(defun spacemacs//znc-auth-source-fetch-password (server) + "Given a server with at least :host :port :login, return the :password" + (destructuring-bind (&key host auth &allow-other-keys) + (cdr server) + (destructuring-bind (&key secret &allow-other-keys) + (car (auth-source-search :host host + :port "irc" + :user auth + :require '(:user :secret))) + (if (functionp secret) (funcall secret) secret)))) + +;; (setq auth (auth-source--aput :host "")) +;; build rcirc-authinfo from rcirc-server-alist and authinfo +(defun spacemacs//znc-rcirc-server-alist-get-authinfo (server-alist) + "replace :auth in rcirc-server-alist with :password \"user:password\" + from .authinfo.gpg" + (dolist (server server-alist server-alist) + (let* ((host (car server)) + (plist (cdr server)) + (auth (plist-get plist :auth)) + (pass (spacemacs//znc-auth-source-fetch-password server))) + (when auth + (plist-put plist :password (format "%s:%s" auth pass)))))) + +;; rcirc does not know how to connect to the same server more than once, so +;; we build our own connection routine from our own rcirc-server-alist, +;; using :host rather than the server name for connecting. +(defun spacemacs//znc-rcirc-connect () + "Connect to rcirc-server-alist servers." + (loop + for s in rcirc-server-alist + collect + (destructuring-bind (&key host + (port rcirc-default-port) + (nick rcirc-default-nick) + (user-name rcirc-default-user-name) + (full-name rcirc-default-full-name) + channels + password + encryption + &allow-other-keys + &aux contact (server (car s))) + (cdr s) + (let ((host (or host server)) ; catter with server without :host + (connected + (loop for p in (rcirc-process-list) + thereis (string= server (process-get p :rcirc-server))))) + (unless connected + (let ((process + (rcirc-connect host port nick user-name + full-name channels password encryption))) + (process-put process :rcirc-server server))))))) diff --git a/layers/+chat/rcirc/img/irc.png b/layers/+chat/rcirc/img/irc.png new file mode 100644 index 0000000000000000000000000000000000000000..6132b89703597024ad6f29c2961be7c4b93c0f64 GIT binary patch literal 14450 zcmb`uWmp`+vo}gY!s6}@3GVI|JOp@q?xMjHSRe#&XvCL3w5j)HCulQhz6IHkCG=_ti$q^?CT@9J(xFT^d#&C4i_ zNl#BN>27N;uA`vz-_?A54czk?(xP1h;UELjc_{7A-czF4F`1!ez6kHw< z7f&lNmy5@%|6=lg`6$?V*ti4TJb|t*^#Ax;S-X09N-;A2Yv_M||J6@Vp#A^Tl8eWG zi-i=B=id_^K5kx~|KW|SD*3NeT+ zWv~fqBicutKa{0H|62t=XC`EA_5~%}Duqod4bD#Ef?%LU=Vqa+)u1O69#jzpo0leS zp1}R9MOW8&-@Wf8{J6WdrQ);YXp~wm^@hw|kHNoDG~EMaYA>_kvZZC8@IA4qUxj3Y z*S}!ptvyo3^as9r^-2wYTy9>4v`Dn6H> zz7}U$$JPFp08*QKQPZt2ICn|`u!i^}zA;59#q zHXveYLrXT(%;(7wf4rE|biDpzqgujA(nKNu={fMJvLIIc(|n!n;5Vkh?r^LGF^{c_gV*|$ z+9E4EbhB%A&iPvHbq~XTqW4d1n*ty2Y!4S22c@o;5|%&%H1NXy1gZ$HRE_5V6I3bc zzy)B*@=A1q6A>=sODo`|JM^!ek;&onm$9 zB1|b3fsiw#_$=h6+0+rWOO)MFYce&UAeR0h0pH$WuNwD>JD)|$(yxM z83B*2k%Qc2={-I-0^dV&}qo25QbK7V-UlyTW-n`;~~6cd%Y%$PB^g%(275uneB7 z9S?iwo*OVcK^QQQ8v+w<-H>>2()^8~3ZVduTND{{F|H#V}jCL?Sq zxFNwnG{f*%ZhH8yN`rlfTZXjvRFZwBdh|_hp&Jx^OT3AXDh2%aj7(rQ?^k~Xc zTjwQ!&y@Y_+HzXVm4+w#5WEjQ-BTk09n$N6XvC9jS6c7WRdCIc>$#R2ZROl!GN_7T zrqya>s8iN&h9hK7O}J;Q59#|Z1g%)BtstidpPMzNZ}|C>DtmmhwRmb7ogpy{Wh=Tf zi{8^<@8Uh-p)-f}FD(m35-PTnM0ppbs?7u%VQ}BY6Uw&#^z4H2BOn;9IYRft8rnn+ zj33GJ2T~tAk5`nleqRYgr^_exS0#3OQ@$5mMfK{RmtYf3D8+Y>cKs1hA>h*g^nF1E z_AsyLnpJiR;fE~p2tXS{6DLgYyoRvLkbH6+J_DC8o8Wz9@j%Ap{>IS4m_Wq_cIa!; z=|!dK8^#FQ>pZ6{LFx9%Jt=fSQ340XYKCM!LRTtte+nCpDWx=VJ6jH&l5DwLCR~*y zjdhxnvQt55+2Y9=&nu#RJ(@j=LTenqe{bSdM{`Ws=|O07Or00(uFL_yx}O?+oQp@< z0VVLg*J_I4KNO9qLalVbFU^laB>A8Ka4crrB$D-cC)7I2$(xN1e9?lHL{)T}e12Mo z`|kUlI*pqSL|->)3q5f{h8on&v$Z5t3c1AIDsU%W;-->mGQhmhaAXJqSOtw<$~A@( z>*>)}e3ZAn&lZ+6x*Yvi_bLzDJYd(*OhScDa91d??9{GJkbqxZfy(Y~rBY)WcRet} zTg0l}juL;oPStBJS-sr(w9ZbL%Z$377Nl4MdT*-iZ;gG~z90>5j_bdxO<`ukE@$czn~ zd2x`9w`fejnmfoe#iC|*XU6j%2YW92Tdsb!2&m2EX{cXP@4np6DR+)KLNB`VaP8{wi`c|_8V?q4jhu?cplBhQj< z(X9;N8OuSp!xqdp>xZf1G$-c(2;+7VSpqv10%1X{Ik4sIaTH-~HJ} zi+_04uxd!wofJ-q(Z34E6;ZzB-{+`mv4(nl#jAznp)1)$N}If{zdb z(&A7Je6r@&#cNy!%z0`q76TLS$>;e^LlDk_U8Dozmoa1wLJ9+4mx74|AEz=cvm*Y=K^!@qM+ zTSGi*U9v+F1o5978q8quUJ`U7NVjE@86%WbK3R*jKl!rBD?MxGq3-_lcpa%}bzD0@ zYm-^1Le;Bslz+qTHPir)XTjO`!ry^-Zhex^eEyQIXZ(E^MuZ&QI(Bz8^b9qP`bD6C zOIOHChO8N|dbt6rJ8u6&_RZbpK2hLZdh8njoIiD=;qht_0BF6KR7>!IZO~XPfvpR4 z5#jtw653v8wmdpV?)W2=@C197Ot)^U9a}ft-Y&5n;)5H8NNU2F20d{=UW%&#@vdwP zTk$jQtQNctj6--NorXcRc~*sSJ@dTFkHhDvv9t1cQpDV5uq~l#&}eDjYjQ<(=Iz|x zaGDo18wY&u>t9&7W$!k4AH=l4Zn*3@hRQ1^5h7ul9Oo5!kzLb2*ZZOqnADPA%iPb8 zhZLMB^#5cct3Ehv-Oh%;9xyI6J)!iQzHzBb=HfV@hdukO6j2NHr6ay;PUTZt<5ka2 z+8Rkqpa%644CX6FhfwRh*kGLUG=}f{O5=Qx6lFHM>o|>Z#TJmP-U4B_Uih93vLs}< zc8JXfTrc+=bSGFWkbi_mzts}zD5W+x(+0qs`y*?6(<9jK5YFMJ+_!?_zoJMu`b8s& z%jP)rVycx;De)*d@Ww6xG@e@S`<2bi`!khTeuOJzw^KQP6P@O27~uNSe)`cm>S1|) zi=|4Y1!h=cpRZ`$BHn8|A72?WjnHPsUN5?K{*0lSqW}66hC4Y8%3vPbiY|1{A|K~( z>}d$;`_ex*>AYa=lujOz@9f!Q+M!><7Af_ImZy-~|DDaDMCI;{Q|(vc<=zU-~f zvAh3T{Hig7B;|WTUpd{y8(eGYpMNDi*ZQ0Rz>^{L*}8=tReJAl`-WrOUgXoC9M+_a z+gekJ=G3PoSUjv>`%!7EKPc&S8@GtHzEegqf|5w1FXUf5S| z#K+?@261?w;cgD`znD-Skg}s+fq+IjSHWlJP4O)92Cc(#KW!z%g2~TJ#6wA1q(_FAd~zO=1- zprjFxtI(md{N+$@c(Rc-^m4alV7AECid@qc;PfN(>($kA=(XjK82OP%HSRIS^q8SN zzO9Ubl8^r8_liUBagpxwkH&Na{ei!UF+m>ltA2qwT28MCSO1Z?du;AdFc%wM`!TqnW_(DGdx-N*J25`o>y9rP zyl`bHL~OTrQBVb*Yw^Y}kKqQ6=R#_n>fXXqe8@=j*h>};OJM8sYDhB{dj&%^U|Q*s zz*!tVi0`k?*n@%3*mX-Xupe2=X$qrBqj8P2Go6QY2SV+rjKPz`qFa8J+g|gQni=W#zhh}iC{~+{Xfa5Nm zLiUrD`2tJ|XxnlCX93xwd79@Ty>lf5+7)_okojLr@1^WVP{M5iaXb*+t!dCk8lWT?j3zL&LC8BAq!k z-?F38Z0C2^Zq8nF?&*=}*I+{uRIziC9KhcTtqke>5&K+!XwpSQyl0xW5I%S+i$_0O&-zmi!fcvI>*>CLRc zoXcF|o5H!Kl+s6>rkd2S&C?`~Vse|7U3P;#@fW*Xy2~rx!XldiYV&}XIZS|E@j}Ob zU<7bDO=BZXss8e8h^xu@Cb-x4+ZWgB?Q%T|l^(1X<&&AalIMB7ETj! z;2NR{O^TF*$g@*Fo?1*`J?dE6JP`zx<>7{?NA*Z{6Db#mJZ)n^0v3*?wP1W18am8Fv&*6>D-G zv`)Ye~T;c$(0m9dSBdGFt6TI*)!4N7YSP8E;Uu?)``rJ!*D z2=Gov${cok%d&Td1nh5JgYFkMhd8RS>xs`Eo-YXgYJRz!Qy<$gS#hVhQMpckpf$19 z^{oUs&v6M|t2w*tJNY>$iLIr0U1x8^DO3X!)4UWN;dOP;fA_Eig-W-Cq+?a>p%KAcz%*1z>n zf|VyOziO_5wptkd@OE||6`FmaZ1wjODlR&eck-0wuHaIEo6NUn;Os$HM;&*H;`Ne; z=GjRPo==DCU|oJNzuVRNEO;<7r_$xv^@C;4hqxS;?UB>YUqtt@%&{N~WgBDj(h)i9 z>RFUcj9z!Vnds_o*SUjlAW<)3llr6Y;0Lw#qvTZ z{ddhU1ed&9tWG`PUOO#Rg#sFlhL8(Hrm26!J!LbNilXSQU5@O7~jg z80JyuxvPVPrA9IO+G$q&%bAJ!cg7T@pugui34PIIi{tOeM2Pu9Fn+Ri2U9px(h!V+ zq@pxKJSvp#@k_K9#OB@=8P-aoBKk=Ch)OoZ+U-liE>Fg{ggXjZEoKrqH(CpIktmRA z!WY32OdN9Rtk)y>ePM-@~ZHie`*nQ|eOB=pzWyKOgA~ z!5t&DobKfm7WBJ10G8g9#|HJi3?nJY3A~&B8ak%kzx$^W-;h64OI6ak4+?C}`a+T( zQ7ed?OmDDZD(7w?ejwzSZw(6FI|bA{*@zAy4EG9bCn2sej9FNk7L6o)H^ES z@Xe=v|Gm|rYgU*52F~LbmTZ+4P8*4Ixm0@zC>?SL{3ebezhPd0;QMRH{xv5akrh84 z8TZ})^u)2?dw^we(>-O2z5-9=~@03$^Q zWNGS|>;3!8ndU4duib6HG+fbUjJzcmCEjn*wXjhn50?;6Azd~fQd1$Ia>H)-Jw$|t z5mz*N{ALXx(;_AOgX|xW#y2GMjC%a)RjO)w^OCz-3*Ze4eCxe?JedQIIIexRTQ3ap zE?2||&#Ot^k4H983YsOHCV~2!;l_!Cj!y2;%%4+!;vr1zGqI6EO<9f8V$ULS-uNWd z+5TEyXaU*O;4L{xpb89DrP9PkgbG@XWTkC#SlqrfaydkXGQ@m4DH`3OafQ7w)qy}} z%Ue_fN$)USDLUi1M`!=sny+0Rq@nWh>UMcIW2J@YdRi5QoCdU<5Ml&})AUV6VBZD* zXvKcFJWU1|jP1*jO zCZww$ix@IqDK7jCIM08Z4rQBwbDMO-FHTxCM8a?-MFbCiLjr*lWk4~#WDM`a6Z zqP;mG8;ZPhX(g(YO~k6{AxoZc*;`p-Alwm zoL_Mdv|}zP6V)s4BW=+wXCYP2--{B>p5jMV(E%bO_m?biCi9`6OyeS*x1*bRk+hfs zXtza!{Y7N13Jd&&c#?ai1zVp61R`mDSsf~W3oi-+#qd;u$66+}zJwCTrw-L(4wdVo z5w<8cddBMn+P&z`-Rt`1aWN$a>j`Z0cY;2?9aKf-dDV&g2VV1lPypKbwo7ej%X5`$iNa zMQhYL0X zvS%$haDK-Zu}!aRP33NB11=^A4is%O+&_sj3l_7D*LA$Wm>{!7hL!HVdJL>6M@3QB4x4Z4E?I8-7lU>hvI zaGILTHlmF4r#i^_77<@`MWn|G9)*>`noiWU0(bkxw-7N+ltjPl?*PB{P|q|4RAoC$J0^Dxw(&cPt3Do4pY9$ zH(HMxiXW&yBscpwpL=Hhe#$|gsfB(a8$VkJ-*uG7<^R!yS7+_9rL zsVmv-zElP~oHwBK;Pk&Rw$*bd?h6iF4Y+QsA%hptd7O5}4@jS!D2YyUbj+`PYMQ3hB7zv0N(|924TU*n;04u_92T+FYF z2Lurm0{G*(z6Gs`t8b}a7iEE7Q+}F7@8{cnQyS$%(b`@IK7Id3s|}t10~$OqBtpS7 zUapUiF5LBmkHD$Q0d|&Dof$WJ%L8Xs-grB`SbNZxt?}!g+1b2jDd)Ggmi^%;|DGaY zOU-T_$CttfRM+zkbfb)%hM(=|rDBp5;~-y-Q^Dn;pJ!3Zx)Z8XuE`G(wlG+EcX>{f zNAD4_(WC?#wH&>|bjq`b@MU zO=#hVtHvezOVUjG?-D@zB)DiUPV#ckuv6Sw=8du4&Nr4~zG} z@ojH}xmt+-2U|OK9SIemihntTI_~@vl(3#{3((ghkKRgg+zCjO}b2 z$o4snf$JF$en(k8EAt@*?;;CE?sqkV?#Pe2a~=m|{+=Eh`9As_hy+fU`wD@l%a`3+ z&cZ!WH6}w6sAJn$>ao>Y2$l*HIi0}+Vw2d}u6Zik%*G_JA|s2B$4F<-?O+`Y~-W$ zC;^`BC-op9n%a*mo7G>L$v!M(4wKutnW6DjBEIg>c(Wm%sVR5yK`E?+p@F2-;XFxy z@u+3M$9}8#gpz1a!lL`Dc}^5`7H|QRuQpgmHJYIt{%3PGaqVP&>BF^jY0(mQnZVbP z)?dX1Gnx>E0>t_H>-2h}aTNknrT)?-mNaJ1qWVk(0LUP zn@%Fz2SMuHK+EH<_YdxdJqMwtPIkJT5jg2PD{}ca*zV;DW zK2u2c;U6w_#Zd$HRpd9U^EtJYtYvwcQPPG8jC2>Rih<4kGJG2A<2*lZN$9{_^jWB03E6pqWUf~JH3Z+^$zPb$F9_VUGs zO!=5VD4n6?{z>?_>tO7jo0878mppR><37&)?>vM)h;(dA9g6{mt9#Zp7jVTp^*+TQr0)Y-Y?~`xq^h3yEjg`LYonrW_cLct)-tWXL-p16tjO!EO^&9EscSK9EbwFkT_{cp49S1$#`wU3iGAEmu zuF;!Gvl&S*e_-FIG~A=trzH17AVC9Ph~Fu#v82(EHnZ)ajGGXf*~h-W^t}Xrw0fECU?~}M*S%$4yc08-{sK;D(JrRHEH9h)B(g7 zLTYExkwAp-2RA|sw&5uc14wc#I2^;vRyHa$oza|Kx57F@Q>|pe`tP%zB4R8sgv>AT z#Q-)8QA;8gdD91C*TfHx9!|qU#s+!a5ZkP@Kj4|4rIN7#42vR8^Of3c7$jErZHE6o z1I}kY2Yg!0HpX7}4Exs6lA-AsL#U7(TL zaJP55mzavFRn}0j-_W<$>hooSDrg2pocd?U-1j6K@!!URdiscLN-4rt?+di;D3Z%~ z$9m@6Gn%}je@l@^bA4-iJPnX7d2|{hM*~KnC{u=Fv}=M2LGNwa^oT~na>Lb9#_f<)~vsMZlJ z_^h9=(4FF-!fJ|B?Yok@eJQ2|iG_FXnZ5Xo+>&v0+;G|00B*Ok*o_>OTI53(#S72a zAMY7edqG#9LKp?3wHJ;ICvUJ)4DCTcpc+y22>9W<^vkGY*h}`Y*FpWGuZoT1FtMX> z!e2K$0>($fnvK75r}HjbTi<`VK8Zr?6&>Y@0}$&T`tC0-37*E+ew22XV98=_L=mkn z&^_G@JZQ+F^4OpYU`z^D1=8tBLCSCtcE3K3Pb%sHRUtQO5)w^Oo*G z2a1Ys=5ZeA#9&#^H7&fMRI$V>2cybK&#(Z1NFZ7UZrF2~%SMszq+0s#)MiK6Ecd+)hR(pR2oeWPfwV zR;^BjKtnBxzvB2M7j?3Ma=u@ZSdF_&`P&Gjc=BWQQ6mRj9FGH^AQbO?tiXt5jB)Vc z4klLFumW-`r<*yy@?WcMdV3Wb*kDpx?XcL$s9J&R!wF0Q>>&}F^7WANyx`~6X zYQ<&GDRnuE9gbDjH$oL%PLC)=&JJ+;3ABTWn3+nbq!Qp!EO2CB3u3a8JTF))9Oo4D zh5=xuI~VzaGx1)E)%jJXmH6Z7CvgX7@um zcx`Gji`+vqsoUG zfuJN(TvwJ;dmb&ES+^a4zwNbJpZFmmK-g7dbvxD5PI{ccXnE^E?y05jN^Tt_GNIZd zUfZOP?Bi=d7>gLHYZC(l-;*jy}A7*ts=F>sc z@#YloTKKdvuOI0q1OBSYz!%SMj`TZrGlm>kKPC!(z>}tef*^>boVKQ9lsuGVW9ZuV@XjjCWm>vh=`OO+4u%S8Z%ls{c zX2B%B*x{sR^5XAQ*$p+4TlBbcuKr@(Ccia$Y&N%_@w@NjMGAx9b{8Y00^~Wz_B+c% z{T`IEZ{g}~NiE!J&e|aK{q~z}`6*1%vBUA>a5T zRO$vqg4SebgIj}hiZDyA$K@gSM|w|K_lzre!2}IIb4J=|4f-W3hT6T_;QIYW4;0ZZ zKw+8`4!Qx+XF_}$>N~GTD2>>I=zJkk9WpnHW<#qXARJd`fGZlisWObrO1c=MJXMm} z>tu{xyg(>-gtUWAga(;ALP>cuqAYVaF`T#aXqBnv#@SQLgXTaxbW>wm@tUwy0awyy zs20Cvcf_3(?wbZQH3UwGdHlXXs_!m+tZV;%3D6Y`@eyr!NkNCk4Rf`)Z1RQ%Y6BiI z<*F@7&kM)+w4supH%NEZ40^AtEII>)RtV2tP}`t&-1BvVghD=KD%9EKtM9gyhW_d% z(PfJ{ACqu>;bT&=5qE_HE4}f_Jzevu--c)4pIfF1)I4CmbeqIQ?}j5+t~r6zM{W57M|2xR==>R}pzOzU#P zUgm1{wUWwkHKf?~&(~}f9hWPl?$i63D!9tp75cVcsr8HcDX(y!=JRXtGiMM*7tnWW zK>Df{C!N6vFLaRg#e~(LEF7^+)jk^K5Qeb*JHz*0`uwgdu$pbzWzs7_94B$ZuDtQy zNk>%nx>e)QRrsO}P;FPJdUacvR;?h%g6aH-_%s zmd6&cIWH2p4D}h~T9YIu(<(c1w1z)ni_{Ee1lz@S)GupOjveJ?+Y^ZsS2fFo&bA$( z$!|q>Jx`AP8TV%cd;a?{{}%A(>SK~UuGj#Hq1gloSFhOPgvxIgnE?98(j_L`zNcTk z@T?v^ogDsc_^MzknXs2Ni*&%@gj{~Rp@E!k`_Onb*;xE`Uh>K>OE^&}2Ng%Hn9pbu zWDSHu1yvo!K@1M6s~*1tDcuP51$&>wtoiFzy+`z&5%^xnXnZ}%;S#*Hv0wO)Fn zGw7Ybi=qxB{B7UvV0nRM`3`G`{BzIs-VXhWjWkhL}w6 z0}LwMllXFyV3X(mWg;f%bF7*H` zWz=JPoci#}!UlVst=6!ctL9FcDuYw`c%!zLuizuW#t4%osV98tb1$-NrEI|V+K3f` zDH+U1d>bX8#pew)|>nft)M*Ouf)4$JYA%fwK z@m(Wv+8Tk#Bqokgdne<}lGAz1n0U{OX5e(~KV{S`bDEg6o^aMP#AGYgdnIc07^hE0 z>BoU6N0T+%JVgL(3l!{3xcO|fx?_psS&i9PRx(hZiT@@B-Ib0)~ukD$eY z>a)RYWBK#Ki3T)%O;x0A<=qlQ1!)h`{BT^lt6^tDYl5)umytk_d~908IH6Rm)Bpt-^U_T31D820 zwYsl4h0g|qsngoj1qd>UmGd<*@po$d;3bJ6wC08H7tzqau_t~Ul-s>!2wNvP4)J(k z8KX5bKXvDFAUk3szY*k>*2_6rL8CL=9(gWF6KdFTGeWk%6!s*V84@>T5yM^&r=F^P zsxd5oEnv+4xj!}UvmBO$$%Yufs>9S6+H90@6rr0IGqtyH7FfuV9~1b?m?F*v_YHy= z6e5`UAxeVgXFFctxYZPaGIcFE)gGS5Dhhz2OXvIGWA8HnHGYkm2B?26XhkgHH*kj> z9j5)uc*B_UJ9qCpPiATJCwlwr!`n}cneu+Pi%pYIiVAt#qA$8q#m@M2YBmd#QmMQ= z*MGLhL56H>uPO7X4YdfeL?lup-$2}4dbvz;Dc2hS$>{j|aJ6Dkt17Nxh_z^bN zl|r?V{dpnErd!2kXA8gJb8TmtNOF31y-^19!d8;O(zrXG<|SigY!OBZ88UTdz@t2Q zAT}3fjhT{6stzI@o20r)S;Oz}dF+jpzQ~(}$LX(z)Q;omKIa~vqyT?O7I^VQIwT{D z+`YjU5u5s%M%(kw1DCep$EOsx)7`4W8e`XW3n(QyN1U^S2H7ByF0%^hG*^0aOWiKa z7l;4~4so|xwRt1+n3J54LrVnx;Ffb6x;eS4 zQ;e#YP5S7f;Hj|dRMW_0k^yxy5V^QDN!CvS=Ooi@Qwc%MOr#_XJ#W=a6}2gP`&(oO z5(+SAV;4i1W}M9W9~BnGTH=pHl~H1)mz1~BSBLwdd?AQGA300LdY&Y>d(^vFKtv#1 zS})gib#~Yw>+K)mdEVYz?LCi9Aj05k`)i+Wt+bv%vELb~sqo=Y>zqbo*x%z!}{d$wd1K zLC}zZ^Cc5>h$(cGOg%va6`4k%>@kkudJpUaNllOpAl9Xd);R&SS2Fze#P;PD$Om%;np4 zvlaUr15NGuKsm)`D~_zBu2Xu@Glu>GT6NBtrnSHUCs_0KljZ6uvna|n&J?&YipqU6 zDDHv8NaKCjkF_QL^XXIhx!>b&MoK&n38P*&5|pGl)F28HJx${It%mxSvDqp)<499{ zh8OD?fmeJuDM}pWajM4Ei-a7N^0nQzU!nRl-6IoDs|n;?g!`}DK8u{Xh}q-+CCiKj zadFQE0%A`KcmhwO{i8*Du>ayDVsH+&BNdG(Z6Sk!K+Z=@I)gpt}f ztrX7}k1jTFMejoFI9KgMX63B=v|4Me&}{kx;qyrxh8-Bvr`2ZKU3|hnRRcqA-iY?c zvSTqawQ4!m<(dgk?sL9KiGnduQ4fn&@Qvz_uhQnM>_JX>V>7C&ZqAAywQSgLXx!Gi zLDRtEn;bcJe@bWx$pw^B8*3ojpH9dFYz;q67`fMG0ufwgtmNqKPzp-HzNcSN|$^*@c#l4nhWUJLGjN;|sFsJActP`pDPC_^Km2D3CN$;R8xuz6O zj8|N=EuuLQss-^m&xeQ6OhuCWdIYLnOdzCO#nRB@z)svk6rujZxQ< z>s`90pnFhuOMU}q#R9vIOYNhE!>;V1ZBofZ^zTXDkL9sgAL&PLFbxiId(NVoC19b6 zOq!HZG0b^wNdyUo+|rMqqjz$tm@6w-E9uT$rzDvtweG&}NVXb}y&C<>s%+Ltm3)&g z=kNSOnC4vj$1?BokaeI}$2jHhPgiM&vNh)yqoJewnFF~}b1?7yGfctXnmwhmuwcuy u;(~=5fc1xu4F9{IVEzAo*Hwe|SB7}K4~5)}v*6#CeX5EY3RQ0`L;eqxLr~=a literal 0 HcmV?d00001 diff --git a/layers/+chat/rcirc/local/helm-rcirc/README.md b/layers/+chat/rcirc/local/helm-rcirc/README.md new file mode 100644 index 0000000..1ecebe5 --- /dev/null +++ b/layers/+chat/rcirc/local/helm-rcirc/README.md @@ -0,0 +1,4 @@ +helm-rcirc +========== + +An Helm interface for rcirc diff --git a/layers/+chat/rcirc/local/helm-rcirc/helm-rcirc.el b/layers/+chat/rcirc/local/helm-rcirc/helm-rcirc.el new file mode 100644 index 0000000..8a567ff --- /dev/null +++ b/layers/+chat/rcirc/local/helm-rcirc/helm-rcirc.el @@ -0,0 +1,39 @@ +(require 'rcirc) + +(defun helm-rcirc-auto-join-channels-alist () + "Return an alist where key is a server and value is a list of defined +channels to auto join." + (mapcar (lambda (server) + (cons (car server) (plist-get (cdr server) :channels))) + rcirc-server-alist) +) + +(defun helm-rcirc-auto-join-channels-source (entry) + "Construct the Helm source given an ENTRY. + +ENTRY is a key value pair where key is the server and value is a list of +channels." + (let ((server (car entry)) + (chans (cdr entry))) + (list (cons 'name (format "Server: %s" (car entry))) + (cons 'candidates (mapcar (lambda (chan) + (cons chan (cons server chan))) chans)) + (cons 'action 'helm-rcirc-open-channel-buffer)))) + +(defun helm-rcirc-open-channel-buffer (selected-value) + "Open the buffer corresponding to SELECTED-VALUE if any. + +SELECTED-VALUE is a key value pair where key is the server and value is the +channel name." + (let ((buf (format "%s@%s" (cdr selected-value) (car selected-value)))) + (if (bufferp (get-buffer buf)) + (switch-to-buffer buf) + (message (format "Cannot find buffer %s" buf))))) + +;;;###autoload +(defun helm-rcirc-auto-join-channels () + "rcirc auto join channels selection with helm interface." + (interactive) + (helm :buffer "*helm: Auto Join Channels (rcirc)*" + :sources (mapcar 'helm-rcirc-auto-join-channels-source + (helm-rcirc-auto-join-channels-alist)))) diff --git a/layers/+chat/rcirc/local/rcirc-late-fix/rcirc-late-fix.el b/layers/+chat/rcirc/local/rcirc-late-fix/rcirc-late-fix.el new file mode 100644 index 0000000..eb79375 --- /dev/null +++ b/layers/+chat/rcirc/local/rcirc-late-fix/rcirc-late-fix.el @@ -0,0 +1,90 @@ +;;; rcirc-late-fix.el -- Replace s/wrong/right strings on rcirc buffers +;; Copyright 2007 Hugo Schmitt + +;; 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 2 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, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; The idea is to detect messages like 's/tset/test' and overwrite the +;; wrong word with the correction, on the original phrase, using +;; overlays. + +;; Please mail me (hugows@gmail.com) about any improvements or bug +;; reports you have regarding this file. + +;;; Changes (11/12/2007) (Tks tsdh for the suggestions) + +;; [x] Exclude the nicknames from correction. +;; [x] Strip the / from the replacement text. +;; [x] With s/foo/bar the last occurence of foo is replaced with bar, not the first. +;; [x] Support s/foo/bar/g to replace all occurences of foo with bar. +;; [ ] Use rcirc-response-formats for building the name string +;; [ ] A variable could control whether only whole words are changed (then +;; just concat "<" word ">") +;; [ ] Support s/word// and s/word//g for removing matching text + +;;; Bugs : + +;; This fails, probably caused by some missed detail about overlapping overlays: +;; Having the line aaaaaaaa and the replacement s/a/b/g results in a +;; _single_ b. + +;;; Code: + +(require 'rcirc) + +(add-hook 'rcirc-print-hooks 'rcirc-late-fix-hook) + +(defface rcirc-late-fix-face '((t (:underline t :foreground "Blue"))) + "Face for showing fixed words on the channel buffer.") + +(defun rcirc-late-fix-apply (beg end string) + (save-excursion + (let ((overlay (make-overlay beg end (current-buffer) nil t))) + (overlay-put overlay 'face 'rcirc-late-fix-face) + (overlay-put overlay 'display string)))) + +(defun rcirc-late-fix-hook (process sender response target text) + (save-excursion + (when (string-equal response "PRIVMSG") + (let (from to global matches) + (when (or (and (string-match "^s/\\(.+\\)/\\(.+\\)/g" text) + (setq from (match-string 1 text) + to (match-string 2 text) + global t)) + (and (string-match "^s/\\(.+\\)/\\([^/]+\\)" text) + (setq from (match-string 1 text) + to (match-string 2 text)))) + (set-buffer (rcirc-late-fix-matching-buffer target)) + (goto-char (point-max)) + (when (search-backward (concat "<" sender ">") nil t 2) + (goto-char (match-end 0)) ;; skip nickname + (while (search-forward from (point-at-eol) t) ;; make a list of the points from each match + (setf matches (cons (list (match-beginning 0) (match-end 0)) matches))) + (when (not (null matches)) ;; there was at least one match + (if global ;; global = replace all matches + (mapc '(lambda (x) (rcirc-late-fix-apply (car x) (cadr x) to)) matches) + (rcirc-late-fix-apply (caar matches) (cadar matches) to))))))))) + +(defun rcirc-late-fix-matching-buffer (name) + "Find buffer (channel) that starts with NAME." + (find-if '(lambda (x) (string-match (concat "^" name) x)) + (mapcar 'buffer-name (buffer-list)))) + + + +;;; rcirc-late-fix.el ends here +(provide 'rcirc-late-fix) diff --git a/layers/+chat/rcirc/local/rcirc-reconnect/rcirc-reconnect.el b/layers/+chat/rcirc/local/rcirc-reconnect/rcirc-reconnect.el new file mode 100644 index 0000000..0bc1d84 --- /dev/null +++ b/layers/+chat/rcirc/local/rcirc-reconnect/rcirc-reconnect.el @@ -0,0 +1,113 @@ +;;;; Auto reconnect +;;;; Taken from http://www.emacswiki.org/emacs/rcircReconnect +(defun-rcirc-command reconnect (arg) + "Reconnect the server process." + (interactive "i") + (if (buffer-live-p rcirc-server-buffer) + (with-current-buffer rcirc-server-buffer + (let ((reconnect-buffer (current-buffer)) + (server (or rcirc-server rcirc-default-server)) + (port (if (boundp 'rcirc-port) rcirc-port rcirc-default-port)) + (nick (or rcirc-nick rcirc-default-nick)) + channels) + (dolist (buf (buffer-list)) + (with-current-buffer buf + (when (equal reconnect-buffer rcirc-server-buffer) + (remove-hook 'change-major-mode-hook + 'rcirc-change-major-mode-hook) + (let ((server-plist (cdr (assoc-string server rcirc-server-alist)))) + (when server-plist + (setq channels (plist-get server-plist :channels)))) + ))) + (if process (delete-process process)) + (rcirc-connect server port nick + nil + nil + channels))))) + +;; the following minor mode does not work + +;; ;;; Attempt reconnection at increasing intervals when a connection is +;; ;;; lost. + +;; (defvar rcirc-reconnect-attempts 0) + +;; ;;;###autoload +;; (define-minor-mode rcirc-reconnect-mode +;; nil +;; nil +;; " Auto-Reconnect" +;; nil +;; (if rcirc-reconnect-mode +;; (progn +;; (make-local-variable 'rcirc-reconnect-attempts) +;; (add-hook 'rcirc-sentinel-functions +;; 'rcirc-reconnect-schedule nil t)) +;; (remove-hook 'rcirc-sentinel-functions +;; 'rcirc-reconnect-schedule t))) +;; ;; (if rcirc-reconnect-mode +;; ;; (add-hook 'rcirc-sentinel-functions 'sds-rcirc-sentinel) +;; ;; (remove-hook 'rcirc-sentinel-functions 'sds-rcirc-sentinel))) + +;; (defun rcirc-reconnect-schedule (process &optional sentinel seconds) +;; (condition-case err +;; (when (and (eq 'closed (process-status process)) +;; (buffer-live-p (process-buffer process))) +;; (with-rcirc-process-buffer process +;; (unless seconds +;; (setq seconds (exp (1+ rcirc-reconnect-attempts)))) +;; (rcirc-print +;; process "my-rcirc.el" "ERROR" rcirc-target +;; (format "scheduling reconnection attempt in %s second(s)." seconds) t) +;; (run-with-timer +;; seconds +;; nil +;; 'rcirc-reconnect-perform-reconnect +;; process))) +;; (error +;; (rcirc-print process "RCIRC" "ERROR" nil +;; (format "%S" err) t)))) + +;; (defun rcirc-reconnect-perform-reconnect (process) +;; (when (and (eq 'closed (process-status process)) +;; (buffer-live-p (process-buffer process)) +;; ) +;; (with-rcirc-process-buffer process +;; (when rcirc-reconnect-mode +;; (if (get-buffer-process (process-buffer process)) +;; ;; user reconnected manually +;; (setq rcirc-reconnect-attempts 0) +;; (let ((msg (format "attempting reconnect to %s..." +;; (process-name process) +;; ))) +;; (rcirc-print process "my-rcirc.el" "ERROR" rcirc-target +;; msg t)) +;; ;; remove the prompt from buffers +;; (condition-case err +;; (progn +;; (save-window-excursion +;; (save-excursion +;; (rcirc-cmd-reconnect nil))) +;; (setq rcirc-reconnect-attempts 0)) +;; ((quit error) +;; (incf rcirc-reconnect-attempts) +;; (rcirc-print process "my-rcirc.el" "ERROR" rcirc-target +;; (format "reconnection attempt failed: %s" err) t) +;; (rcirc-reconnect-schedule process)))))))) + +;; (defvar sds-rcirc-sentinel-last (current-time) "last reconnect attempt time") +;; (defun sds-rcirc-sentinel (process sentinel) +;; (let* ((now (current-time)) +;; (delay (float-time (time-subtract (current-time) +;; sds-rcirc-sentinel-last)))) +;; (message "%s sds-rcirc-sentinel: %s %s %s (last: %s, %s ago)" +;; (format-time-string "%F %R") process +;; (process-status process) sentinel +;; (format-time-string "%F %R" sds-rcirc-sentinel-last) +;; (sds-difftime-to-string delay)) +;; (when (and (string= sentinel "deleted") +;; (< 60 delay)) ; do not try to reconnect more than once a minute +;; (setq sds-rcirc-sentinel-last now) +;; (rcirc-cmd-reconnect nil)))) + +(provide 'rcirc-reconnect) diff --git a/layers/+chat/rcirc/packages.el b/layers/+chat/rcirc/packages.el new file mode 100644 index 0000000..3cb8b2d --- /dev/null +++ b/layers/+chat/rcirc/packages.el @@ -0,0 +1,171 @@ +(setq rcirc-packages + '( + company + company-emoji + emoji-cheat-sheet-plus + flyspell + (helm-rcirc :location local + :toggle (configuration-layer/package-usedp 'helm)) + persp-mode + rcirc + rcirc-color + rcirc-notify + )) + +(defun rcirc/post-init-company () + (spacemacs|add-company-hook rcirc-mode) + (push 'company-capf company-backends-rcirc-mode)) + +(defun rcirc/post-init-company-emoji () + (push 'company-emoji company-backends-rcirc-mode)) + +(defun rcirc/post-init-emoji-cheat-sheet-plus () + (add-hook 'rcirc-mode-hook 'emoji-cheat-sheet-plus-display-mode)) + +(defun rcirc/post-init-flyspell () + (spell-checking/add-flyspell-hook 'rcirc-mode-hook)) + +(defun rcirc/init-helm-rcirc () + (use-package helm-rcirc + :commands helm-rcirc-auto-join-channels + :init + (spacemacs/set-leader-keys "irc" 'helm-rcirc-auto-join-channels))) + +(defun rcirc/post-init-persp-mode () + ;; do not save rcirc buffers + (with-eval-after-load 'persp-mode + (push (lambda (b) (with-current-buffer b (eq major-mode 'rcirc-mode))) + persp-filter-save-buffers-functions)) + + (spacemacs|define-custom-layout rcirc-spacemacs-layout-name + :binding rcirc-spacemacs-layout-binding + :body + (progn + (defun spacemacs-layouts/add-rcirc-buffer-to-persp () + (persp-add-buffer (current-buffer) + (persp-get-by-name + rcirc-spacemacs-layout-name))) + (add-hook 'rcirc-mode-hook #'spacemacs-layouts/add-rcirc-buffer-to-persp) + (call-interactively 'spacemacs/rcirc)))) + +(defun rcirc/init-rcirc () + (use-package rcirc + :defer t + :init + (progn + (spacemacs/add-to-hook 'rcirc-mode-hook '(rcirc-omit-mode + rcirc-track-minor-mode)) + + (defun spacemacs//rcirc-with-authinfo (arg) + "Fire rcirc with support for authinfo." + (unless arg + (if (file-exists-p "~/.authinfo.gpg") + (spacemacs//rcirc-authinfo-config) + (message "Cannot find file ~/.authinfo.gpg"))) + (rcirc arg)) + + (defun spacemacs//rcirc-with-znc (arg) + "Fire rcirc with support for znc." + (if arg + (rcirc arg) + (setq rcirc-server-alist + ;; This will replace :auth with the correct thing, see the + ;; doc for that function + (spacemacs//znc-rcirc-server-alist-get-authinfo + rcirc-server-alist)) + (spacemacs//znc-rcirc-connect))) + + (spacemacs/set-leader-keys "air" 'spacemacs/rcirc) + (defun spacemacs/rcirc (arg) + "Launch rcirc." + (interactive "P") + (require 'rcirc) + ;; dispatch to rcirc launcher with appropriate support + (cond + (rcirc-enable-authinfo-support (spacemacs//rcirc-with-authinfo arg)) + (rcirc-enable-znc-support (spacemacs//rcirc-with-znc arg)) + (t (rcirc arg)))) + (evil-set-initial-state 'rcirc-mode 'insert)) + :config + (progn + ;; (set-input-method "latin-1-prefix") + (set (make-local-variable 'scroll-conservatively) 8192) + + (setq rcirc-fill-column 80 + rcirc-buffer-maximum-lines 2048 + rcirc-omit-responses '("JOIN" "PART" "QUIT" "NICK" "AWAY" "MODE") + rcirc-time-format "%Y-%m-%d %H:%M " + rcirc-omit-threshold 20) + + ;; Exclude rcirc properties when yanking, in order to be able to send mails + ;; for example. + (add-to-list 'yank-excluded-properties 'rcirc-text) + + ;; rcirc-reconnect + (let ((dir (configuration-layer/get-layer-local-dir 'rcirc))) + (require 'rcirc-reconnect + (concat dir "rcirc-reconnect/rcirc-reconnect.el"))) + + ;; load this file from the dropbox location load-path + ;; this is where you can store personal information + (require 'pinit-rcirc nil 'noerror) + + (evil-define-key 'normal rcirc-mode-map + (kbd "C-j") 'rcirc-insert-prev-input + (kbd "C-k") 'rcirc-insert-next-input) + + ;; add a key for EMMS integration + (when (boundp 'emms-track-description) + (defun rcirc/insert-current-emms-track () + (interactive) + (insert (emms-track-description (emms-playlist-current-selected-track)))) + (define-key rcirc-mode-map (kbd "C-c C-e") 'rcirc/insert-current-emms-track)) + + ;; Minimal logging to `~/.emacs.d/.cache/rcirc-logs/' + ;; by courtesy of Trent Buck. + (setq rcirc-log-directory (concat spacemacs-cache-directory "/rcirc-logs/")) + (setq rcirc-log-flag t) + (defun rcirc-write-log (process sender response target text) + (when rcirc-log-directory + (when (not (file-directory-p rcirc-log-directory)) + (make-directory rcirc-log-directory)) + (with-temp-buffer + ;; Sometimes TARGET is a buffer :-( + (when (bufferp target) + (setq target (with-current-buffer buffer rcirc-target))) + ;; Sometimes buffer is not anything at all! + (unless (or (null target) (string= target "")) + ;; Print the line into the temp buffer. + (insert (format-time-string "%Y-%m-%d %H:%M ")) + (insert (format "%-16s " (rcirc-user-nick sender))) + (unless (string= response "PRIVMSG") + (insert "/" (downcase response) " ")) + (insert text "\n") + ;; Append the line to the appropriate logfile. + (let ((coding-system-for-write 'no-conversion)) + (write-region (point-min) (point-max) + (concat rcirc-log-directory (downcase target)) + t 'quietly)))))) + (add-hook 'rcirc-print-hooks 'rcirc-write-log) + + ;; dependencies + ;; will autoload rcirc-notify + (rcirc-notify-add-hooks) + (require 'rcirc-color)))) + +(defun rcirc/init-rcirc-color () + (use-package rcirc-color :defer t)) + +(defun rcirc/init-rcirc-notify () + (use-package rcirc-notify + :defer t + :config + (progn + (defun spacemacs/rcirc-notify-beep (msg) + "Beep when notifying." + (let ((player "mplayer") + (sound (concat spacemacs-start-directory "site-misc/startup.ogg"))) + (when (and (executable-find player) + (file-exists-p sound))) + (start-process "beep-process" nil player sound))) + (add-hook 'rcirc-notify-page-me-hooks 'spacemacs/rcirc-notify-beep)))) diff --git a/layers/+chat/slack/README.org b/layers/+chat/slack/README.org new file mode 100644 index 0000000..f41a7d7 --- /dev/null +++ b/layers/+chat/slack/README.org @@ -0,0 +1,69 @@ +#+TITLE: Slack layer + +[[file:img/slack.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#configuration][Configuration]] + - [[#key-bindings][Key bindings]] + +* Description +This layer provides an interface to the Slack chat service via the emacs-slack +package. Where possible, this layer aims to reuse keybindings from the IRC +packages in Spacemacs. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =slack= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Configuration + +Follow the instructions in the [[https://github.com/yuya373/emacs-slack/blob/master/README.md][emacs-slack]] package for obtaining your client ID, +client secret, and token. + +To test that eveyrthing is alright put the following snippet in your +=dotspacemacs/user-config()= replacing =client-id=, =client-secret= and =token= +with your info. + +*Important* Do not keep private data in your dotfile. You can put your private +stuff elsewhere (like Dropbox for instance) and load the file in your dotfile. + +#+begin_src emacs-lisp +(slack-register-team + :name "emacs-slack" + :default t + :client-id "my@email.address" + :client-secret "mypassword" + :token "token" + :subscribed-channels '(general slackbot)) +#+end_src + +* Key bindings + +| Key Binding | Description | +|-------------+--------------------------| +| ~SPC a C s~ | (Re)connects to Slack | +| ~SPC a C j~ | Join a channel | +| ~SPC a C d~ | Direct message someone | +| ~SPC a C q~ | Close connection | +| ~SPC m j~ | Join a channel | +| ~SPC m d~ | Direct message someone | +| ~SPC m p~ | Load previous messages | +| ~SPC m e~ | Edit message at point | +| ~SPC m q~ | Quit Slack | +| ~SPC m m~ | Embed mention of user | +| ~SPC m c~ | Embed mention of channel | + +The following bindings are provided to mimic bindings in the official Slack +client. + +| Key Binding | Description | +|-------------+--------------------------| +| ~ m k~ | Join a channel | +| ~ m @~ | Embed mention of user | +| ~ m #~ | Embed mention of channel | + +In insert state, one can also use ~@~ and ~#~ directly without the leader key +prefix. diff --git a/layers/+chat/slack/img/slack.png b/layers/+chat/slack/img/slack.png new file mode 100644 index 0000000000000000000000000000000000000000..fb4de28af132c071973eba278b04a32143f9ba68 GIT binary patch literal 58238 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

*pyF*CH1oic`yj!du)gLP{5#R! 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 literal 0 HcmV?d00001 diff --git a/layers/+chat/slack/packages.el b/layers/+chat/slack/packages.el new file mode 100644 index 0000000..6a18c67 --- /dev/null +++ b/layers/+chat/slack/packages.el @@ -0,0 +1,88 @@ +;;; packages.el --- slack layer packages file for Spacemacs. +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Kosta Harlan +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;;; Commentary: + +;;; Code: + +;; TODO: Integrate company-emoji. + +(defconst slack-packages + '( + alert + emoji-cheat-sheet-plus + flyspell + linum + persp-mode + slack + )) + +(defun slack/init-alert () + (use-package alert + :defer t + :init (setq alert-default-style 'notifier))) + +(defun slack/post-init-emoji-cheat-sheet-plus () + (add-hook 'slack-mode-hook 'emoji-cheat-sheet-plus-display-mode)) + +(defun slack/post-init-flyspell () + (add-hook 'lui-mode-hook 'flyspell-mode)) + +(defun slack/post-init-linum () + (add-hook 'slack-mode-hook 'spacemacs/no-linum)) + +(defun slack/post-init-persp-mode () + (spacemacs|define-custom-layout "@Slack" + :binding "s" + :body + (progn + (add-hook 'slack-mode #'(lambda () + (persp-add-buffer (current-buffer)))) + ;; TODO: We don't want to slack-start every time someone types ` l o s` + (call-interactively 'slack-start) + (call-interactively 'slack-channel-select))) + ;; Do not save slack buffers + (spacemacs|use-package-add-hook persp-mode + :post-config + (push (lambda (b) (with-current-buffer b (eq major-mode 'slack-mode))) + persp-filter-save-buffers-functions))) + +(defun slack/init-slack () + "Initialize Slack" + (use-package slack + :commands (slack-start) + :defer t + :init + (progn + (spacemacs/set-leader-keys + "aCs" 'slack-start + "aCj" 'slack-channel-select + "aCd" 'slack-im-select + "aCq" 'slack-ws-close) + (setq slack-enable-emoji t)) + :config + (progn + (spacemacs/set-leader-keys-for-major-mode 'slack-mode + "j" 'slack-channel-select + "d" 'slack-im-select + "p" 'slack-room-load-prev-messages + "e" 'slack-message-edit + "q" 'slack-ws-close + "mm" 'slack-message-embed-mention + "mc" 'slack-message-embed-channel + "k" 'slack-channel-select + "@" 'slack-message-embed-mention + "#" 'slack-message-embed-channel) + (evil-define-key 'insert slack-mode-map + (kbd "@") 'slack-message-embed-mention + (kbd "#") 'slack-message-embed-channel)))) + +;;; packages.el ends here diff --git a/layers/+checkers/spell-checking/README.org b/layers/+checkers/spell-checking/README.org new file mode 100644 index 0000000..96b5560 --- /dev/null +++ b/layers/+checkers/spell-checking/README.org @@ -0,0 +1,99 @@ +#+TITLE: Spell Checking layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#spell-checker-configuration][Spell Checker Configuration]] + - [[#disabling-by-default][Disabling by default]] + - [[#enabling-auto-dictionary-mode][Enabling auto-dictionary-mode]] + - [[#enable-auto-completion-popup][Enable auto-completion popup]] + - [[#key-bindings][Key Bindings]] + +* Description +This layer provides spell checking using [[http://www-sop.inria.fr/members/Manuel.Serrano/flyspell/flyspell.html][Flyspell]] and [[https://github.com/nschum/auto-dictionary-mode][auto-dictionary-mode]]. + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =spell-checking= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Spell Checker Configuration +The built-in Emacs variable that controls which external spell-checking program +is used is =ispell-program-name=, which can be set in your +=dotspacemacs/user-init= function if you do not like the default. It will give +priority to =aspell= if it is installed on your system. Another important +variable to be aware of is =ispell-dictionary= which will control the default +dictionary used by =ispell-program-name= (instead of using this variable you can +also use the key binding ~SPC S d~). + +** Disabling by default +By default, =spell-checking= is enabled in all available major modes and may be +toggled off with ~SPC t S~. You can default this to off by setting the variable +=spell-checking-enable-by-default= to =nil=: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((spell-checking :variables spell-checking-enable-by-default nil))) +#+END_SRC + +** Enabling auto-dictionary-mode +=auto-dictionary-mode= tries to detect the current language from the buffer +content, and activate the corresponding dictionary. You can enable it by setting +the variable =spell-checking-enable-auto-dictionary= to something other than +=nil=: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((spell-checking :variables spell-checking-enable-auto-dictionary t))) +#+END_SRC + +Some people encountered bugs with =auto-dictionary-mode=, especially in *daemon +mode* where new =emacsclient= open directly freezed. If so, no other workaround +have been found yet than disabling =auto-dictionary-mode= completely. + +Not all languages are supported by =auto-dictionary-list=. The supported +languages are listed in the =adict-language-list= variable, that can be checked +with =spacemacs/describe-variable=. For convenience, here is the list of +currently supported language: + +| Language | +|-------------------| +| catalan | +| classical greek | +| danish | +| english | +| esperanto | +| french | +| german | +| hindi | +| hungarian | +| modern greek | +| norwegian bokmål | +| norwegian nynorsk | +| portuguese | +| romanian | +| slovak | +| slovene | +| spanish | +| swedish | + +** Enable auto-completion popup +To enable auto-completion popup when the point is idle on a misspelled word +set the layer variable =enable-flyspell-auto-completion= to t: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((spell-checking :variables =enable-flyspell-auto-completion= t))) +#+END_SRC + +* Key Bindings + +| Key Binding | Description | +|-------------+--------------------------| +| ~SPC S b~ | flyspell whole buffer | +| ~SPC S c~ | flyspell correct | +| ~SPC S d~ | change dictionary | +| ~SPC S n~ | flyspell goto next error | +| ~SPC t S~ | toggle flyspell | diff --git a/layers/+checkers/spell-checking/config.el b/layers/+checkers/spell-checking/config.el new file mode 100644 index 0000000..96664d2 --- /dev/null +++ b/layers/+checkers/spell-checking/config.el @@ -0,0 +1,19 @@ +;;; config.el --- Spell Checking Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar spell-checking-enable-by-default t + "Enable spell checking by default.") + +(defvar spell-checking-enable-auto-dictionary nil + "Specify if auto-dictionary should be enabled or not.") + +(defvar enable-flyspell-auto-completion nil + "If not nil, show speeling suggestions in popups.") diff --git a/layers/+checkers/spell-checking/funcs.el b/layers/+checkers/spell-checking/funcs.el new file mode 100644 index 0000000..cf8a36c --- /dev/null +++ b/layers/+checkers/spell-checking/funcs.el @@ -0,0 +1,24 @@ +;;; funcs.el --- Spell Checking Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spell-checking/add-flyspell-hook (hook) + "Add `flyspell-mode' to the given HOOK, if +`spell-checking-enable-by-default' is true." + (when spell-checking-enable-by-default + (add-hook hook 'flyspell-mode))) + +(defun spell-checking/change-dictionary () + "Change the dictionary. Use the ispell version if +auto-dictionary is not used, use the adict version otherwise." + (interactive) + (if (fboundp 'adict-change-dictionary) + (adict-change-dictionary) + (call-interactively 'ispell-change-dictionary))) diff --git a/layers/+checkers/spell-checking/packages.el b/layers/+checkers/spell-checking/packages.el new file mode 100644 index 0000000..f103430 --- /dev/null +++ b/layers/+checkers/spell-checking/packages.el @@ -0,0 +1,92 @@ +;;; packages.el --- Spell Checking Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spell-checking-packages + '( + auto-dictionary + flyspell + flyspell-correct + (flyspell-correct-ivy :toggle (configuration-layer/layer-usedp 'ivy)) + (flyspell-correct-helm :toggle (configuration-layer/layer-usedp 'helm)) + (flyspell-correct-popup :toggle (and (not (configuration-layer/layer-usedp 'ivy)) + (not (configuration-layer/layer-usedp 'helm)))) + (flyspell-popup :toggle enable-flyspell-auto-completion))) + +(defun spell-checking/init-auto-dictionary () + (use-package auto-dictionary + :defer t + :if spell-checking-enable-auto-dictionary + :init + (progn + (add-hook 'flyspell-mode-hook 'auto-dictionary-mode) + ;; Select the buffer local dictionary if it was set, otherwise + ;; auto-dictionary will replace it with a guessed one at each activation. + ;; https://github.com/nschum/auto-dictionary-mode/issues/5 + (defun spacemacs//adict-set-local-dictionary () + "Set the local dictionary if not nil." + (when (and (fboundp 'adict-change-dictionary) + ispell-local-dictionary) + (adict-change-dictionary ispell-local-dictionary))) + (add-hook 'auto-dictionary-mode-hook + 'spacemacs//adict-set-local-dictionary 'append)))) + +(defun spell-checking/init-flyspell () + (use-package flyspell + :defer t + :commands (spell-checking/change-dictionary) + :init + (progn + (spell-checking/add-flyspell-hook 'text-mode-hook) + (when spell-checking-enable-by-default + (add-hook 'prog-mode-hook 'flyspell-prog-mode)) + + (spacemacs|add-toggle spelling-checking + :status flyspell-mode + :on (if (derived-mode-p 'prog-mode) + (flyspell-prog-mode) + (flyspell-mode)) + :off (progn + (flyspell-mode-off) + ;; Also disable auto-dictionary when disabling spell-checking. + (when (fboundp 'auto-dictionary-mode) (auto-dictionary-mode -1))) + :documentation "Enable automatic spell checking." + :evil-leader "tS") + + (spacemacs/declare-prefix "S" "spelling") + (spacemacs/set-leader-keys + "Sb" 'flyspell-buffer + "Sd" 'spell-checking/change-dictionary + "Sn" 'flyspell-goto-next-error)) + :config (spacemacs|diminish flyspell-mode " Ⓢ" " S"))) + +(defun spell-checking/init-flyspell-correct () + (use-package flyspell-correct + :commands (flyspell-correct-word-generic + flyspell-correct-previous-word-generic) + :init + (spacemacs/set-leader-keys "Sc" 'flyspell-correct-previous-word-generic))) + +(defun spell-checking/init-flyspell-correct-ivy () + (use-package flyspell-correct-ivy)) + +(defun spell-checking/init-flyspell-correct-helm () + (use-package flyspell-correct-helm)) + +(defun spell-checking/init-flyspell-correct-popup () + (use-package flyspell-correct-popup)) + +(defun spell-checking/init-flyspell-popup () + (use-package flyspell-popup + :defer t + :init + (progn + (setq flyspell-popup-correct-delay 0.8) + (add-hook 'flyspell-mode-hook 'flyspell-popup-auto-correct-mode)))) diff --git a/layers/+checkers/syntax-checking/README.org b/layers/+checkers/syntax-checking/README.org new file mode 100644 index 0000000..a4c9aa6 --- /dev/null +++ b/layers/+checkers/syntax-checking/README.org @@ -0,0 +1,68 @@ +#+TITLE: Syntax Checking layer + +[[file:img/flycheck.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#enablingdisabling-tooltips][Enabling/Disabling tooltips]] + - [[#disabling-by-default][Disabling by default]] + - [[#bitmaps][Bitmaps]] + - [[#key-bindings][Key Bindings]] + +* Description +This layer provides on the fly syntax checking using [[http://www.flycheck.org/][Flycheck]]. + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =syntax-checking= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Enabling/Disabling tooltips +By default tooltips are enabled and used whenever it is possible. +You can disable them by setting the variable =syntax-checking-enable-tooltips= +to =nil=: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((syntax-checking :variables syntax-checking-enable-tooltips nil))) +#+END_SRC + +** Disabling by default +By default, syntax-checking is enabled in all available major modes and may be +toggled off with ~SPC t s~. You can default this to off by setting the variable +=syntax-checking-enable-by-default= to =nil=: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((syntax-checking :variables syntax-checking-enable-by-default nil))) +#+END_SRC + +If you want more fine-grained control, you can configure the variable +=flycheck-global-modes= instead. Note that this variable should be manipulated +in =dotspacemacs/user-config=. + +** Bitmaps +If the original flycheck fringe bitmaps are more to your liking, you can set the +variable =syntax-checking-use-original-bitmaps= to =t=: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((syntax-checking :variables syntax-checking-use-original-bitmaps t))) +#+END_SRC + +* Key Bindings + +| Key Binding | Description | +|-------------+--------------------------------------------------------------| +| ~SPC e c~ | clear errors | +| ~SPC e h~ | describe flycheck checker | +| ~SPC e l~ | display a list of all the errors | +| ~SPC e L~ | display a list of all the errors and focus the errors buffer | +| ~SPC e e~ | explain the error at point | +| ~SPC e s~ | set flycheck checker | +| ~SPC e S~ | set flycheck checker executable | +| ~SPC e v~ | verify flycheck setup | +| ~SPC t s~ | toggle flycheck | diff --git a/layers/+checkers/syntax-checking/config.el b/layers/+checkers/syntax-checking/config.el new file mode 100644 index 0000000..65c495e --- /dev/null +++ b/layers/+checkers/syntax-checking/config.el @@ -0,0 +1,24 @@ +;;; config.el --- Syntax Checking Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar syntax-checking-enable-tooltips t + "If non nil some feedback are displayed in tooltips.") + +(defvar syntax-checking-enable-by-default t + "Enable syntax-checking by default.") + +(defvar syntax-checking-use-original-bitmaps nil + "If non-nil, use the original bitmaps from flycheck.") + +;; Command Prefixes + diff --git a/layers/+checkers/syntax-checking/funcs.el b/layers/+checkers/syntax-checking/funcs.el new file mode 100644 index 0000000..be0f54b --- /dev/null +++ b/layers/+checkers/syntax-checking/funcs.el @@ -0,0 +1,18 @@ +;;; funcs.el --- Syntax Checking Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs/add-flycheck-hook (mode) + "Use flycheck in MODE by default, if `syntax-checking-enable-by-default' is +true." + (when (and syntax-checking-enable-by-default + (listp flycheck-global-modes) + (not (eq 'not (car flycheck-global-modes)))) + (push mode flycheck-global-modes))) diff --git a/layers/+checkers/syntax-checking/img/flycheck.png b/layers/+checkers/syntax-checking/img/flycheck.png new file mode 100644 index 0000000000000000000000000000000000000000..baa06a367a99e299e60a25301fb493c24a3407aa GIT binary patch literal 3989 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 literal 0 HcmV?d00001 diff --git a/layers/+checkers/syntax-checking/packages.el b/layers/+checkers/syntax-checking/packages.el new file mode 100644 index 0000000..874fade --- /dev/null +++ b/layers/+checkers/syntax-checking/packages.el @@ -0,0 +1,127 @@ +;;; packages.el --- Syntax Checking Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq syntax-checking-packages + '( + flycheck + flycheck-pos-tip + popwin + )) + +(defun syntax-checking/init-flycheck () + (use-package flycheck + :defer t + :init + (progn + (setq flycheck-standard-error-navigation nil + flycheck-global-modes nil) + + (spacemacs|add-toggle syntax-checking + :mode flycheck-mode + :documentation "Enable error and syntax checking." + :evil-leader "ts") + + (spacemacs|diminish flycheck-mode " ⓢ" " s") + + (when syntax-checking-enable-by-default + (global-flycheck-mode 1)) + + ;; Custom fringe indicator + (when (and (fboundp 'define-fringe-bitmap) + (not syntax-checking-use-original-bitmaps)) + (define-fringe-bitmap 'my-flycheck-fringe-indicator + (vector #b00000000 + #b00000000 + #b00000000 + #b00000000 + #b00000000 + #b00000000 + #b00000000 + #b00011100 + #b00111110 + #b00111110 + #b00111110 + #b00011100 + #b00000000 + #b00000000 + #b00000000 + #b00000000 + #b00000000))) + + (let ((bitmap (if syntax-checking-use-original-bitmaps + 'flycheck-fringe-bitmap-double-arrow + 'my-flycheck-fringe-indicator))) + (flycheck-define-error-level 'error + :severity 2 + :overlay-category 'flycheck-error-overlay + :fringe-bitmap bitmap + :fringe-face 'flycheck-fringe-error) + (flycheck-define-error-level 'warning + :severity 1 + :overlay-category 'flycheck-warning-overlay + :fringe-bitmap bitmap + :fringe-face 'flycheck-fringe-warning) + (flycheck-define-error-level 'info + :severity 0 + :overlay-category 'flycheck-info-overlay + :fringe-bitmap bitmap + :fringe-face 'flycheck-fringe-info)) + + ;; toggle flycheck window + (defun spacemacs/toggle-flycheck-error-list () + "Toggle flycheck's error list window. +If the error list is visible, hide it. Otherwise, show it." + (interactive) + (-if-let (window (flycheck-get-error-list-window)) + (quit-window nil window) + (flycheck-list-errors))) + + (defun spacemacs/goto-flycheck-error-list () + "Open and go to the error list buffer." + (interactive) + (unless (get-buffer-window (get-buffer flycheck-error-list-buffer)) + (flycheck-list-errors) + (switch-to-buffer-other-window flycheck-error-list-buffer))) + + (evilified-state-evilify-map flycheck-error-list-mode-map + :mode flycheck-error-list-mode + :bindings + "RET" 'flycheck-error-list-goto-error + "j" 'flycheck-error-list-next-error + "k" 'flycheck-error-list-previous-error) + + ;; key bindings + (spacemacs/set-leader-keys + "ec" 'flycheck-clear + "eh" 'flycheck-describe-checker + "el" 'spacemacs/toggle-flycheck-error-list + "eL" 'spacemacs/goto-flycheck-error-list + "ee" 'flycheck-explain-error-at-point + "es" 'flycheck-select-checker + "eS" 'flycheck-set-checker-executable + "ev" 'flycheck-verify-setup)))) + +(defun syntax-checking/init-flycheck-pos-tip () + (use-package flycheck-pos-tip + :if syntax-checking-enable-tooltips + :defer t + :init + (with-eval-after-load 'flycheck + (flycheck-pos-tip-mode)))) + +(defun syntax-checking/post-init-popwin () + (push '("^\\*Flycheck.+\\*$" + :regexp t + :dedicated t + :position bottom + :stick t + :noselect t) + popwin:special-display-config)) diff --git a/layers/+completion/auto-completion/README.org b/layers/+completion/auto-completion/README.org new file mode 100644 index 0000000..0b46a63 --- /dev/null +++ b/layers/+completion/auto-completion/README.org @@ -0,0 +1,256 @@ +#+TITLE: Auto-completion layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#configuration][Configuration]] + - [[#key-bindings][Key bindings]] + - [[#snippets-directories][Snippets directories]] + - [[#show-snippets-in-auto-completion-popup][Show snippets in auto-completion popup]] + - [[#tooltips][Tooltips]] + - [[#sort-results-by-usage][Sort results by usage]] + - [[#enable-company-or-auto-complete-globally][Enable company or auto-complete globally]] + - [[#replacing-company-by-auto-complete][Replacing company by auto-complete]] + - [[#add-auto-completion-in-a-layer][Add auto-completion in a layer]] + - [[#in-configel][In =config.el=]] + - [[#in-packagesel][In =packages.el=]] + - [[#completion-back-ends][Completion back ends]] + - [[#improved-faces][Improved faces]] + - [[#key-bindings-1][Key Bindings]] + - [[#company][Company]] + - [[#auto-complete][Auto-complete]] + - [[#yasnippet][Yasnippet]] + - [[#auto-yasnippet][Auto-yasnippet]] + +* Description +This layer provides auto-completion to Spacemacs. + +The following completion engines are supported: +- [[http://company-mode.github.io/][company]] +- [[http://auto-complete.org/][auto-complete]] + +Snippets are supported via [[https://github.com/capitaomorte/yasnippet][yasnippet]] and [[https://github.com/abo-abo/auto-yasnippet][auto-yasnippet]]. + +This layer also configures =hippie-expand=. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =auto-completion= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Configuration +** Key bindings +You can customize the user experience of auto-completion with the following +layer variables: + +1. =auto-completion-return-key-behavior= set the action to perform when the + ~RET~ key is pressed, the possible values are: + - =complete= completes with the current selection + - =nil= does nothing + +2. =auto-completion-tab-key-behavior= set the action to perform when the ~TAB~ + key is pressed, the possible values are: + - =complete= completes with the current selection + - =cycle= completes the common prefix and cycle between candidates + - =nil= does nothing + +3. =auto-completion-complete-with-key-sequence= is a string of two characters + denoting a key sequence that will perform a =complete= action if the sequence + as been entered quickly enough. If its value is =nil= then the feature is + disabled. + +4. =auto-completion-complete-with-key-sequence-delay= is the number of seconds + to wait for the auto-completion key sequence to be entered. The default value + is 0.1 seconds. + +The default configuration of the layer is: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers '( + (auto-completion :variables + auto-completion-return-key-behavior 'complete + auto-completion-tab-key-behavior 'cycle + auto-completion-complete-with-key-sequence nil + auto-completion-complete-with-key-sequence-delay 0.1 + auto-completion-private-snippets-directory nil) + )) +#+END_SRC + +~jk~ is a good candidate for =auto-completion-complete-with-key-sequence= if +you don't use it already. + +** Snippets directories +The following directories are added by default: +- ~/.emacs.d/elpa/yasnippet-xxxxx/snippets +- ~/.emacs.d/layers/auto-completion/snippets +- ~/.emacs.d/private/snippets (conditional to the value of =auto-completion-private-snippets-directory=) +- ~/.spacemacs.d/snippets (conditional to the existence of =~/.spacemacs.d= directory) + +You can provide additional directories by setting the variable +=auto-completion-private-snippets-directory= which can take a string in case of +a single path or a list of paths. +If its value is =nil= then the path =~/.emacs.d/private/snippets= is used. + +** Show snippets in auto-completion popup +By default, snippets are not shown in the auto-completion popup. To show them in +the popup, set the variable =auto-completion-enable-snippets-in-popup= to =t=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers + '((auto-completion :variables + auto-completion-enable-snippets-in-popup t))) +#+END_SRC + +** Tooltips +To enable automatic docstring tooltips set =auto-completion-enable-help-tooltip= +to =t=. + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((auto-completion :variables + auto-completion-enable-help-tooltip t))) +#+END_SRC + +To enable manual non-automatic invocation of docstring tooltips, set it to +=manual=. The tooltip can be invoked manually by pressing ~M-h~. + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((auto-completion :variables + auto-completion-enable-help-tooltip 'manual))) +#+END_SRC + +** Sort results by usage +To enable sorting auto-completion results by their usage frequency set +=auto-completion-enable-sort-by-usage= to =t=. +This feature is provided by the [[https://github.com/company-mode/company-statistics][company-statistics]] package when =company= +is used. +The variable has no effect when =auto-complete= is used. + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((auto-completion :variables + auto-completion-enable-sort-by-usage t))) +#+END_SRC + +** Enable company or auto-complete globally +By default Spacemacs enables auto-completion explicitly for each supported +major-mode, it means that =company= and =auto-complete= are not enabled +globally, it allows more flexibility to choose an auto-completion engine +for a given mode. + +You may want to enable company globally to get auto-completion +everywhere even in the modes which are not configured by Spacemacs. To do +so, you just have to add =(global-company-mode)= in the +=dotspacemacs/user -config= function of your dotfile. + +Note that if you want to enable =auto-complete= globally you will have to +disable =company= first, see the next section to do so. + +** Replacing company by auto-complete +You can disable =company= by adding it to the =dotspacemacs-excluded-packages= +variable, then you are free to enable =auto-complete= globally. + +** Add auto-completion in a layer +Here is an example to add =company= auto-completion to python buffer: + +*** In =config.el= +#+BEGIN_SRC emacs-lisp + ;; Define the buffer local company backend variable + (spacemacs|defvar-company-backends python-mode) +#+END_SRC + +*** In =packages.el= +#+BEGIN_SRC emacs-lisp + ;; Add the relevant packages to the layer + (setq python-packages + '(... + company + (company-anaconda :toggle (configuration-layer/package-usedp 'company)) + ...)) + + ;; Hook company to python-mode + (defun python/post-init-company () + (spacemacs|add-company-hook python-mode)) + + ;; Add the backend to the major-mode specific backend list + (defun python/init-company-anaconda () + (use-package company-anaconda + :defer t + :init (push 'company-anaconda company-backends-python-mode))) +#+END_SRC + +** Completion back ends +Many spacemacs layers (e.g., python, html, haskell) configure company mode +backends to provide mode-specific completion. These modes will include +completion backends specified in the `spacemacs-default-company-backends` +variable. The defaults should work well, but you can configure this variable in +your ~.spacemacs~ file with (e.g.) +#+BEGIN_SRC emacs-lisp + (setq-default + dotspacemacs-configuration-layers + '((auto-completion :variables + spacemacs-default-company-backends '(company-files company-capf)))) +#+END_SRC + +** Improved faces +For nicer-looking faces, try adding the following to `custom-set-faces` in your dotspacemacs file. + +#+BEGIN_SRC emacs-lisp +(custom-set-faces + '(company-tooltip-common + ((t (:inherit company-tooltip :weight bold :underline nil)))) + '(company-tooltip-common-selection + ((t (:inherit company-tooltip-selection :weight bold :underline nil))))) +#+END_SRC + +* Key Bindings +** Company + +| Key Binding | Description | +|-------------+------------------------------------------------------------------------------------------------------| +| ~C-d~ | open minibuffer with documentation of thing at point in company dropdown | +| ~C-/~ | show candidates in Helm (for fuzzy searching) | +| ~C-M-/~ | filter the company dropdown menu | +| ~M-h~ | show current candidate's documentation in a tooltip (requires =auto-completion-enable-help-tooltip=) | + +Vim Style: + +| Key Binding | Description | +|-------------+----------------------------------------------| +| ~C-j~ | (vim style) go down in company dropdown menu | +| ~C-k~ | (vim style) go up in company dropdown menu | +| ~C-l~ | (vim style) complete selection | + +Emacs style: + +| Key Binding | Description | +|-------------+------------------------------------------------| +| ~C-f~ | (emacs style) complete selection | +| ~C-n~ | (emacs style) go down in company dropdown menu | +| ~C-p~ | (emacs style) go up in company dropdown menu | + +** Auto-complete + +| Key Binding | Description | +|-------------+----------------------------------------------------------------------| +| ~C-j~ | select next candidate | +| ~C-k~ | select previous candidate | +| ~TAB~ | expand selection or select next candidate | +| ~S-TAB~ | select previous candidate | +| ~return~ | complete word, if word is already completed insert a carriage return | + +** Yasnippet + +| Key Binding | Description | +|-------------+----------------------------------------------------------------| +| ~M-/~ | Expand a snippet if text before point is a prefix of a snippet | +| ~SPC i s~ | List all current yasnippets for inserting | + +** Auto-yasnippet + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------------| +| ~SPC i S c~ | create a snippet from an active region | +| ~SPC i S e~ | Expand the snippet just created with ~SPC i y~ | +| ~SPC i S w~ | Write the snippet inside =private/snippets= directory for future sessions | diff --git a/layers/+completion/auto-completion/config.el b/layers/+completion/auto-completion/config.el new file mode 100644 index 0000000..6e63c8e --- /dev/null +++ b/layers/+completion/auto-completion/config.el @@ -0,0 +1,53 @@ +;;; config.el --- Auto-completion configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Company ------------------------------------------------------------------- + +(defvar-local auto-completion-front-end 'company + "Which auto-completion front end to use.") + +(defvar auto-completion-return-key-behavior 'complete + "What the RET key should do when auto-completion menu is active. +Possible values are `complete' or `nil'.") + +(defvar auto-completion-tab-key-behavior 'cycle + "What the TAB key should do when auto-completion menu is active. +Possible values are `complete', `cycle' or `nil'.") + +(defvar auto-completion-complete-with-key-sequence nil + "Provide a key sequence (string) to complete the current +selection.") + +(defvar auto-completion-complete-with-key-sequence-delay 0.1 + "Timeout (seconds) when waiting for the second key of +`auto-completion-complete-with-key-sequence'.") + +(defvar auto-completion-enable-snippets-in-popup nil + "If non nil show snippets in the auto-completion popup.") + +(defvar auto-completion-enable-sort-by-usage nil + "If non nil suggestions are sorted by how often they are used.") + +(defvar auto-completion-enable-help-tooltip nil + "If non nil the docstring appears in a tooltip. +If set to `manual', help tooltip appears only when invoked +manually.") + +(defvar company-mode-completion-cancel-keywords + '("do" + "then" + "begin" + "case") + "Keywords on which to cancel completion so that you can use RET +to complet without blocking common line endings.") + +(defvar auto-completion-private-snippets-directory nil + "Configurable private snippets directory.") diff --git a/layers/+completion/auto-completion/funcs.el b/layers/+completion/auto-completion/funcs.el new file mode 100644 index 0000000..ceb2cea --- /dev/null +++ b/layers/+completion/auto-completion/funcs.el @@ -0,0 +1,271 @@ +;;; funcs.el --- Auto-completion functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + + +(spacemacs|add-toggle auto-completion + :status + (if (eq 'company auto-completion-front-end) + (bound-and-true-p company-mode) + (bound-and-true-p auto-complete-mode)) + :on + (progn + (if (eq 'company auto-completion-front-end) + (company-mode) + (auto-complete-mode)) + (message "Enabled auto-completion (using %S)." + auto-completion-front-end)) + :off + (progn + (if (eq 'company auto-completion-front-end) + (company-mode -1) + (auto-complete-mode -1)) + (message "Disabled auto-completion.")) + :documentation "Enable auto-completion." + :evil-leader "ta") + + +;; auto-completion key bindings functions + +(defun spacemacs//auto-completion-set-RET-key-behavior (package) + "Bind RET key appropriately for the given PACKAGE and value of +`auto-completion-return-key-behavior'." + (cond + ((eq 'company package) + (let ((map company-active-map)) + (cond + ((eq 'complete auto-completion-return-key-behavior) + (define-key map [return] 'company-complete-selection) + (define-key map (kbd "RET") 'company-complete-selection)) + (t + (define-key map [return] 'nil) + (define-key map (kbd "RET") 'nil))))) + (t (message "Not yet implemented for package %S" package)))) + +(defun spacemacs//auto-completion-set-TAB-key-behavior (package) + "Bind TAB key appropriately for the given PACKAGE and value of +`auto-completion-tab-key-behavior'." + (cond + ((eq 'company package) + (let ((map company-active-map)) + (cond + ((eq 'complete auto-completion-tab-key-behavior) + (define-key map (kbd "TAB") 'company-complete-selection) + (define-key map (kbd "") 'company-complete-selection)) + ((eq 'cycle auto-completion-tab-key-behavior) + (define-key map (kbd "TAB") 'company-complete-common-or-cycle) + (define-key map (kbd "") 'company-complete-common-or-cycle) + (define-key map (kbd "") + 'spacemacs//company-complete-common-or-cycle-backward) + (define-key map (kbd "") + 'spacemacs//company-complete-common-or-cycle-backward)) + (t + (define-key map (kbd "TAB") nil) + (define-key map (kbd "") nil))))) + (t (message "Not yet implemented for package %S" package)))) + +(defun spacemacs//auto-completion-setup-key-sequence (package) + "Setup the key sequence to complete current selection." + (when auto-completion-complete-with-key-sequence + (let ((first-key (elt auto-completion-complete-with-key-sequence 0))) + (cond ((eq 'company package) + (define-key company-active-map (kbd (char-to-string first-key)) + 'spacemacs//auto-completion-key-sequence-start)) + (t (message "Not yet implemented for package %S" package)))))) + + +;; key sequence to complete selection + +(defvar spacemacs--auto-completion-time nil) +(defvar spacemacs--auto-completion-complete-last-candidate nil) +(defvar spacemacs--auto-completion-shadowed-insert-binding nil) +(defvar spacemacs--auto-completion-shadowed-emacs-binding nil) +(defvar spacemacs--auto-completion-shadowed-hybrid-binding nil) + +(defun spacemacs//auto-completion-key-sequence-start () + "Initiate auto-completion sequence." + (interactive) + (self-insert-command 1) + (setq spacemacs--auto-completion-complete-last-candidate + (cond + ((bound-and-true-p company-mode) + (nth company-selection company-candidates)))) + ;; enable second key of the sequence + (let ((second-key (kbd (char-to-string + (elt auto-completion-complete-with-key-sequence 1))))) + (setq spacemacs--auto-completion-shadowed-insert-binding + (lookup-key evil-insert-state-map second-key)) + (setq spacemacs--auto-completion-shadowed-emacs-binding + (lookup-key evil-emacs-state-map second-key)) + (setq spacemacs--auto-completion-shadowed-hybrid-binding + (lookup-key evil-hybrid-state-map second-key)) + (define-key + evil-insert-state-map + second-key + 'spacemacs//auto-completion-key-sequence-end) + (define-key + evil-emacs-state-map + second-key + 'spacemacs//auto-completion-key-sequence-end) + (define-key + evil-hybrid-state-map + second-key + 'spacemacs//auto-completion-key-sequence-end)) + ;; set a timer to restore the old bindings + (run-at-time auto-completion-complete-with-key-sequence-delay + nil + 'spacemacs//auto-completion-key-sequence-restore) + (when spacemacs--auto-completion-complete-last-candidate + (setq spacemacs--auto-completion-time (current-time)))) + +(defun spacemacs//auto-completion-key-sequence-end () + "Check if the auto-completion key sequence has been entered." + (interactive) + (if (or (null spacemacs--auto-completion-time) + (< auto-completion-complete-with-key-sequence-delay + (float-time (time-since spacemacs--auto-completion-time)))) + (self-insert-command 1) + (cond + ((bound-and-true-p company-mode) + (unless company-candidates + ;; if the auto-completion menu is still active then we don't need to + ;; delete the last inserted first key of the sequence + (delete-char -1)) + (let ((company-idle-delay)) + (company-auto-begin) + (company-finish spacemacs--auto-completion-complete-last-candidate))))) + (spacemacs//auto-completion-key-sequence-restore) + (setq spacemacs--auto-completion-time nil)) + +(defun spacemacs//auto-completion-key-sequence-restore () + "Restore the shadowed key bindings used to auto-complete." + (let ((second-key (kbd (char-to-string + (elt auto-completion-complete-with-key-sequence 1))))) + (define-key + evil-insert-state-map + second-key + spacemacs--auto-completion-shadowed-insert-binding) + (define-key + evil-emacs-state-map + second-key + spacemacs--auto-completion-shadowed-emacs-binding) + (define-key + evil-hybrid-state-map + second-key + spacemacs--auto-completion-shadowed-hybrid-binding))) + + +;; Editing style + +(defun spacemacs//company-active-navigation (style) + "Set navigation for the given editing STYLE." + (cond + ((or (eq 'vim style) + (and (eq 'hybrid style) + hybrid-mode-enable-hjkl-bindings)) + (let ((map company-active-map)) + (define-key map (kbd "C-j") 'company-select-next) + (define-key map (kbd "C-k") 'company-select-previous) + (define-key map (kbd "C-l") 'company-complete-selection)) + (when (require 'company-quickhelp nil 'noerror) + (evil-define-key 'insert company-quickhelp-mode-map (kbd "C-k") 'company-select-previous))) + (t + (let ((map company-active-map)) + (define-key map (kbd "C-n") 'company-select-next) + (define-key map (kbd "C-p") 'company-select-previous) + (define-key map (kbd "C-f") 'company-complete-selection))))) + + +;; Transformers + +(defun spacemacs//company-transformer-cancel (candidates) + "Cancel completion if prefix is in the list +`company-mode-completion-cancel-keywords'" + (unless (member company-prefix company-mode-completion-cancel-keywords) + candidates)) + + + +(defvar-local company-fci-mode-on-p nil) + +(defun company-turn-off-fci (&rest ignore) + (when (boundp 'fci-mode) + (setq company-fci-mode-on-p fci-mode) + (when fci-mode (fci-mode -1)))) + +(defun company-maybe-turn-on-fci (&rest ignore) + (when company-fci-mode-on-p (fci-mode 1))) + + +;; helm-yas + +(defun spacemacs/helm-yas () + "Properly lazy load helm-c-yasnipper." + (interactive) + (spacemacs/load-yasnippet) + (require 'helm-c-yasnippet) + (call-interactively 'helm-yas-complete)) + + +;; Yasnippet + +(defun spacemacs/load-yasnippet () + (unless yas-global-mode (yas-global-mode 1)) + (yas-minor-mode 1)) + +(defun spacemacs/force-yasnippet-off () + (yas-minor-mode -1) + (setq yas-dont-activate t)) + + +;; Auto-Yasnippet + +(defun spacemacs/auto-yasnippet-expand () + "Call `yas-expand' and switch to `insert state'" + (interactive) + (call-interactively 'aya-expand) + (unless holy-mode (evil-insert-state))) + + +;; Yasnippet and Smartparens + +;; If enabled, smartparens will mess snippets expanded by `hippie-expand`. +;; We want to temporarily disable Smartparens during the snippet expansion and +;; switch it back to the initial state when done. +;; +;; However, there is an asymmetry in Yasnippet's hooks: +;; * `yas-before-expand-snippet-hook' is called for all snippet expansions, +;; including the nested ones. +;; * `yas-after-exit-snippet-hook' is called only for the top level snippet, +;; but NOT for the nested ones. +;; +;; That's why we introduce `spacemacs--yasnippet-expanding' below. + +(defvar spacemacs--smartparens-enabled-initially t + "Stored whether smartparens is originally enabled or not.") +(defvar spacemacs--yasnippet-expanding nil + "Whether the snippet expansion is in progress.") + +(defun spacemacs//smartparens-disable-before-expand-snippet () + "Handler for `yas-before-expand-snippet-hook'. +Disable smartparens and remember its initial state." + ;; Remember the initial smartparens state only once, when expanding a top-level snippet. + (unless spacemacs--yasnippet-expanding + (setq spacemacs--yasnippet-expanding t + spacemacs--smartparens-enabled-initially smartparens-mode)) + (smartparens-mode -1)) + +(defun spacemacs//smartparens-restore-after-exit-snippet () + "Handler for `yas-after-exit-snippet-hook'. + Restore the initial state of smartparens." + (setq spacemacs--yasnippet-expanding nil) + (when spacemacs--smartparens-enabled-initially + (smartparens-mode 1))) diff --git a/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/.yas-parents b/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/.yas-parents new file mode 100644 index 0000000..75d003f --- /dev/null +++ b/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/.yas-parents @@ -0,0 +1 @@ +prog-mode diff --git a/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/.yas-setup.el b/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/.yas-setup.el new file mode 100644 index 0000000..fb3704d --- /dev/null +++ b/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/.yas-setup.el @@ -0,0 +1,6 @@ +(defun spacemacs/get-parent-dir () + (car (cdr ; Last item + (reverse + (split-string + (file-name-sans-extension (buffer-file-name)) + "/"))))) diff --git a/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/micro-state b/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/micro-state new file mode 100644 index 0000000..7b2b44a --- /dev/null +++ b/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/micro-state @@ -0,0 +1,12 @@ +# -*- mode: snippet; require-final-newline: nil -*- +# name: micro-state +# key: micro +# binding: direct-keybinding +# -- +(spacemacs|define-micro-state ${1:micro-state-name} + ${2::doc (spacemacs//$1-ms-documentation)} + ${3::use-minibuffer t} + ${4::evil-leader "${5:Leader-key}"} + :bindings + ${} + ) \ No newline at end of file diff --git a/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/new-package b/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/new-package new file mode 100644 index 0000000..f287727 --- /dev/null +++ b/layers/+completion/auto-completion/local/snippets/emacs-lisp-mode/new-package @@ -0,0 +1,15 @@ +# -*- mode: snippet; require-final-newline: nil -*- +# contributor: Diego Berrocal (cestdiego 4t gm4il d0t com) +# name: new-package +# key: newp +# binding: direct-keybinding +# -- +(defun `(spacemacs/get-parent-dir)`/init-${2:package-name} () + ${3:(use-package $2 + ${4::defer t + }${5::init + ${;; This block executes before the package has been loaded} + }${:config + ${;; This block executes after the package has been loaded} + })}) +$0 \ No newline at end of file diff --git a/layers/+completion/auto-completion/packages.el b/layers/+completion/auto-completion/packages.el new file mode 100644 index 0000000..5420240 --- /dev/null +++ b/layers/+completion/auto-completion/packages.el @@ -0,0 +1,253 @@ +;;; packages.el --- Auto-completion Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq auto-completion-packages + '( + auto-complete + ac-ispell + company + (company-quickhelp :toggle auto-completion-enable-help-tooltip) + company-statistics + (helm-company :toggle (configuration-layer/package-usedp 'helm)) + (helm-c-yasnippet :toggle (configuration-layer/package-usedp 'helm)) + hippie-exp + yasnippet + auto-yasnippet + smartparens + )) + +;; TODO replace by company-ispell which comes with company +;; to be moved to spell-checking layer as well +(defun auto-completion/init-ac-ispell () + (use-package ac-ispell + :defer t + :init + (progn + (setq ac-ispell-requires 4) + (with-eval-after-load 'auto-complete + (ac-ispell-setup)) + ;; (add-hook 'markdown-mode-hook 'ac-ispell-ac-setup) + ))) + +(defun auto-completion/init-auto-complete () + (use-package auto-complete + :defer t + :init + (setq ac-auto-start 0 + ac-delay 0.2 + ac-quick-help-delay 1. + ac-use-fuzzy t + ac-fuzzy-enable t + ac-comphist-file (concat spacemacs-cache-directory "ac-comphist.dat") + ;; use 'complete when auto-complete is disabled + tab-always-indent 'complete + ac-dwim t) + :config + (progn + (require 'auto-complete-config) + (setq-default ac-sources '(ac-source-abbrev + ac-source-dictionary + ac-source-words-in-same-mode-buffers)) + (when (configuration-layer/package-usedp 'yasnippet) + (push 'ac-source-yasnippet ac-sources)) + (add-to-list 'completion-styles 'initials t) + (define-key ac-completing-map (kbd "C-j") 'ac-next) + (define-key ac-completing-map (kbd "C-k") 'ac-previous) + (define-key ac-completing-map (kbd "") 'ac-previous) + (spacemacs|diminish auto-complete-mode " ⓐ" " a")))) + +(defun auto-completion/init-company () + (use-package company + :defer t + :init + (progn + (setq company-idle-delay 0.2 + company-minimum-prefix-length 2 + company-require-match nil + company-dabbrev-ignore-case nil + company-dabbrev-downcase nil) + + (add-hook 'company-completion-started-hook 'company-turn-off-fci) + (add-hook 'company-completion-finished-hook 'company-maybe-turn-on-fci) + (add-hook 'company-completion-cancelled-hook 'company-maybe-turn-on-fci)) + :config + (progn + (spacemacs|diminish company-mode " ⓐ" " a") + + ;; key bindings + (defun spacemacs//company-complete-common-or-cycle-backward () + "Complete common prefix or cycle backward." + (interactive) + (company-complete-common-or-cycle -1)) + (spacemacs//auto-completion-set-RET-key-behavior 'company) + (spacemacs//auto-completion-set-TAB-key-behavior 'company) + (spacemacs//auto-completion-setup-key-sequence 'company) + + (let ((map company-active-map)) + (define-key map (kbd "C-/") 'company-search-candidates) + (define-key map (kbd "C-M-/") 'company-filter-candidates) + (define-key map (kbd "C-d") 'company-show-doc-buffer)) + (add-hook 'spacemacs-editing-style-hook 'spacemacs//company-active-navigation) + ;; ensure that the correct bindings are set at startup + (spacemacs//company-active-navigation dotspacemacs-editing-style) + + (setq company-transformers '(spacemacs//company-transformer-cancel + company-sort-by-occurrence))))) + +(defun auto-completion/init-company-statistics () + (use-package company-statistics + :if auto-completion-enable-sort-by-usage + :defer t + :init + (progn + (setq company-statistics-file (concat spacemacs-cache-directory + "company-statistics-cache.el")) + (add-hook 'company-mode-hook 'company-statistics-mode)))) + +(defun auto-completion/init-company-quickhelp () + (use-package company-quickhelp + :commands company-quickhelp-manual-begin + :init + (spacemacs|do-after-display-system-init + (with-eval-after-load 'company + (setq company-frontends (delq 'company-echo-metadata-frontend company-frontends)) + (define-key company-active-map (kbd "M-h") #'company-quickhelp-manual-begin) + (unless (eq auto-completion-enable-help-tooltip 'manual) + (company-quickhelp-mode)))))) + +(defun auto-completion/init-helm-c-yasnippet () + (use-package helm-c-yasnippet + :defer t + :init + (progn + (spacemacs/set-leader-keys "is" 'spacemacs/helm-yas) + (setq helm-c-yas-space-match-any-greedy t)))) + +(defun auto-completion/init-helm-company () + (use-package helm-company + :if (configuration-layer/package-usedp 'company) + :defer t + :init + (with-eval-after-load 'company + (define-key company-active-map (kbd "C-/") 'helm-company)))) + +(defun auto-completion/init-hippie-exp () + ;; replace dabbrev-expand + (global-set-key (kbd "M-/") 'hippie-expand) + (define-key evil-insert-state-map [remap evil-complete-previous] 'hippie-expand) + (setq hippie-expand-try-functions-list + '( + ;; Try to expand word "dynamically", searching the current buffer. + try-expand-dabbrev + ;; Try to expand word "dynamically", searching all other buffers. + try-expand-dabbrev-all-buffers + ;; Try to expand word "dynamically", searching the kill ring. + try-expand-dabbrev-from-kill + ;; Try to complete text as a file name, as many characters as unique. + try-complete-file-name-partially + ;; Try to complete text as a file name. + try-complete-file-name + ;; Try to expand word before point according to all abbrev tables. + try-expand-all-abbrevs + ;; Try to complete the current line to an entire line in the buffer. + try-expand-list + ;; Try to complete the current line to an entire line in the buffer. + try-expand-line + ;; Try to complete as an Emacs Lisp symbol, as many characters as + ;; unique. + try-complete-lisp-symbol-partially + ;; Try to complete word as an Emacs Lisp symbol. + try-complete-lisp-symbol)) + (when (configuration-layer/package-usedp 'yasnippet) + ;; Try to expand yasnippet snippets based on prefix + (push 'yas-hippie-try-expand hippie-expand-try-functions-list))) + +(defun auto-completion/init-yasnippet () + (use-package yasnippet + :commands (yas-global-mode yas-minor-mode) + :init + (progn + ;; We don't want undefined variable errors + (defvar yas-global-mode nil) + (setq yas-triggers-in-field t + yas-wrap-around-region t + helm-yas-display-key-on-candidate t) + ;; on multiple keys, fall back to completing read + ;; typically this means helm + (setq yas-prompt-functions '(yas-completing-prompt)) + ;; disable yas minor mode map + ;; use hippie-expand instead + (setq yas-minor-mode-map (make-sparse-keymap)) + ;; this makes it easy to get out of a nested expansion + (define-key yas-minor-mode-map (kbd "M-s-/") 'yas-next-field) + ;; configure snippet directories + (let* ((spacemacs--auto-completion-dir + (configuration-layer/get-layer-local-dir 'auto-completion)) + (private-yas-dir (if auto-completion-private-snippets-directory + auto-completion-private-snippets-directory + (concat + configuration-layer-private-directory + "snippets/"))) + (spacemacs-layer-snippets-dir (expand-file-name + "snippets" + spacemacs--auto-completion-dir)) + (dotspacemacs-directory-snippets-dir (when dotspacemacs-directory + (expand-file-name + "snippets" + dotspacemacs-directory)))) + (setq yas-snippet-dirs nil) + ;; ~/.emacs.d/layers/auto-completion/snippets + (push spacemacs-layer-snippets-dir yas-snippet-dirs) + ;; ~/.emacs.d/elpa/yasnippet-xxxxx/snippets + (push 'yas-installed-snippets-dir yas-snippet-dirs) + ;; ~/.spacemacs.d/snippets + (when dotspacemacs-directory-snippets-dir + (push dotspacemacs-directory-snippets-dir yas-snippet-dirs)) + ;; arbitrary directories in `auto-completion-private-snippets-directory' + (when private-yas-dir + (if (listp private-yas-dir) + (setq yas-snippet-dirs (append yas-snippet-dirs private-yas-dir)) + (push private-yas-dir yas-snippet-dirs)))) + + (spacemacs/add-to-hooks 'spacemacs/load-yasnippet '(prog-mode-hook + markdown-mode-hook + org-mode-hook)) + (spacemacs|add-toggle yasnippet + :mode yas-minor-mode + :documentation "Enable snippets." + :evil-leader "ty") + + (spacemacs/add-to-hooks + 'spacemacs/force-yasnippet-off '(term-mode-hook + shell-mode-hook + eshell-mode-hook))) + :config (spacemacs|diminish yas-minor-mode " ⓨ" " y"))) + +(defun auto-completion/init-auto-yasnippet () + (use-package auto-yasnippet + :defer t + :init + (progn + (setq aya-persist-snippets-dir + (or auto-completion-private-snippets-directory + (concat configuration-layer-private-directory "snippets/"))) + (spacemacs/declare-prefix "iS" "auto-yasnippet") + (spacemacs/set-leader-keys + "iSc" 'aya-create + "iSe" 'spacemacs/auto-yasnippet-expand + "iSw" 'aya-persist-snippet)))) + +(defun auto-completion/post-init-smartparens () + (with-eval-after-load 'smartparens + (add-hook 'yas-before-expand-snippet-hook + #'spacemacs//smartparens-disable-before-expand-snippet) + (add-hook 'yas-after-exit-snippet-hook + #'spacemacs//smartparens-restore-after-exit-snippet))) diff --git a/layers/+completion/helm/funcs.el b/layers/+completion/helm/funcs.el new file mode 100644 index 0000000..65e8923 --- /dev/null +++ b/layers/+completion/helm/funcs.el @@ -0,0 +1,215 @@ +;;; funcs.el --- Helm Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + + +(defvar spacemacs--helm-popwin-mode nil + "Temp variable to store `popwin-mode''s value.") + +(defun spacemacs//helm-cleanup () + "Cleanup some helm related states when quitting." + ;; deactivate any running transient map (transient-state) + (setq overriding-terminal-local-map nil)) + +(defun spacemacs//helm-prepare-display () + "Prepare necessary settings to make Helm display properly." + (setq spacemacs-display-buffer-alist display-buffer-alist) + ;; the only buffer to display is Helm, nothing else we must set this + ;; otherwise Helm cannot reuse its own windows for copyinng/deleting + ;; etc... because of existing popwin buffers in the alist + (setq display-buffer-alist nil) + (setq spacemacs--helm-popwin-mode popwin-mode) + (when popwin-mode + (popwin-mode -1))) + +(defun spacemacs//helm-restore-display () + ;; we must enable popwin-mode first then restore `display-buffer-alist' + ;; Otherwise, popwin keeps adding up its own buffers to + ;; `display-buffer-alist' and could slow down Emacs as the list grows + (when spacemacs--helm-popwin-mode + (popwin-mode)) + (setq display-buffer-alist spacemacs-display-buffer-alist)) + + +;; REPLs integration + +(defun helm-available-repls () + "Show all the repls available." + (interactive) + (let ((helm-available-repls + `((name . "HELM available REPLs") + (candidates . ,(mapcar #'car spacemacs-repl-list)) + (action . (lambda (candidate) + (let ((repl (cdr (assoc candidate spacemacs-repl-list)))) + (require (car repl)) + (call-interactively (cdr repl)))))))) + (helm :sources '(helm-available-repls) + :buffer "*helm repls*"))) + + +;; Search tools integration + +(defun spacemacs//helm-do-grep-region-or-symbol + (&optional targs use-region-or-symbol-p) + "Version of `helm-do-grep' with a default input." + (interactive) + (require 'helm) + (cl-letf* + (((symbol-function 'this-fn) (symbol-function 'helm-do-grep-1)) + ((symbol-function 'helm-do-grep-1) + (lambda (targets &optional recurse zgrep exts + default-input region-or-symbol-p) + (let* ((new-input (when region-or-symbol-p + (if (region-active-p) + (buffer-substring-no-properties + (region-beginning) (region-end)) + (thing-at-point 'symbol t)))) + (quoted-input (when new-input + (rxt-quote-pcre new-input)))) + (this-fn targets recurse zgrep exts + default-input quoted-input)))) + (preselection (or (dired-get-filename nil t) + (buffer-file-name (current-buffer)))) + (targets (if targs + targs + (helm-read-file-name + "Search in file(s): " + :marked-candidates t + :preselect (if helm-ff-transformer-show-only-basename + (helm-basename preselection) + preselection))))) + (helm-do-grep-1 targets nil nil nil nil use-region-or-symbol-p))) + +(defun spacemacs/helm-file-do-grep () + "Search in current file with `grep' using a default input." + (interactive) + (spacemacs//helm-do-grep-region-or-symbol + (list (buffer-file-name (current-buffer))) nil)) + +(defun spacemacs/helm-file-do-grep-region-or-symbol () + "Search in current file with `grep' using a default input." + (interactive) + (spacemacs//helm-do-grep-region-or-symbol + (list (buffer-file-name (current-buffer))) t)) + +(defun spacemacs/helm-files-do-grep () + "Search in files with `grep'." + (interactive) + (spacemacs//helm-do-grep-region-or-symbol nil nil)) + +(defun spacemacs/helm-files-do-grep-region-or-symbol () + "Search in files with `grep' using a default input." + (interactive) + (spacemacs//helm-do-grep-region-or-symbol nil t)) + +(defun spacemacs/helm-buffers-do-grep () + "Search in opened buffers with `grep'." + (interactive) + (let ((buffers (cl-loop for buffer in (buffer-list) + when (buffer-file-name buffer) + collect (buffer-file-name buffer)))) + (spacemacs//helm-do-grep-region-or-symbol buffers nil))) + +(defun spacemacs/helm-buffers-do-grep-region-or-symbol () + "Search in opened buffers with `grep' with a default input." + (interactive) + (let ((buffers (cl-loop for buffer in (buffer-list) + when (buffer-file-name buffer) + collect (buffer-file-name buffer)))) + (spacemacs//helm-do-grep-region-or-symbol buffers t))) + +(defun spacemacs/resume-last-search-buffer () + "open last helm-ag or hgrep buffer." + (interactive) + (cond ((get-buffer "*helm ag results*") + (switch-to-buffer-other-window "*helm ag results*")) + ((get-buffer "*helm-ag*") + (helm-resume "*helm-ag*")) + ((get-buffer "*hgrep*") + (switch-to-buffer-other-window "*hgrep*")) + (t + (message "No previous search buffer found")))) + +(defun spacemacs/helm-find-files (arg) + "Custom spacemacs implementation for calling helm-find-files-1. +Removes the automatic guessing of the initial value based on thing at point. " + (interactive "P") + (let* ((hist (and arg helm-ff-history (helm-find-files-history))) + (default-input hist) + (input (cond ((and (eq major-mode 'dired-mode) default-input) + (file-name-directory default-input)) + ((and (not (string= default-input "")) + default-input)) + (t (expand-file-name (helm-current-directory)))))) + (set-text-properties 0 (length input) nil input) + (helm-find-files-1 input))) + + +;; Key bindings + +(defmacro spacemacs||set-helm-key (keys func) + "Define a key bindings for FUNC using KEYS. +Ensure that helm is required before calling FUNC." + (let ((func-name (intern (format "spacemacs/%s" (symbol-name func))))) + `(progn + (defun ,func-name () + ,(format "Wrapper to ensure that `helm' is loaded before calling %s." + (symbol-name func)) + (interactive) + (require 'helm) + (call-interactively ',func)) + (spacemacs/set-leader-keys ,keys ',func-name)))) + +(defun spacemacs//helm-find-files-edit (candidate) + "Opens a dired buffer and immediately switches to editable mode." + (dired (file-name-directory candidate)) + (dired-goto-file candidate) + (dired-toggle-read-only)) + +(defun spacemacs/helm-find-files-edit () + "Exits helm, opens a dired buffer and immediately switches to editable mode." + (interactive) + (helm-exit-and-execute-action 'spacemacs//helm-find-files-edit)) + +(defun spacemacs/helm-jump-in-buffer () + "Jump in buffer using `imenu' facilities and helm." + (interactive) + (call-interactively + (cond + ((eq major-mode 'org-mode) 'helm-org-in-buffer-headings) + (t 'helm-semantic-or-imenu)))) + + +;; Generalized next-error interface + +(defun spacemacs//gne-init-helm-ag (&rest args) + (with-current-buffer "*helm ag results*" + (setq spacemacs--gne-min-line 5 + spacemacs--gne-max-line (save-excursion + (goto-char (point-max)) + (previous-line) + (line-number-at-pos)) + spacemacs--gne-line-func + (lambda (c) + (helm-ag--find-file-action + c 'find-file helm-ag--search-this-file-p)) + next-error-function 'spacemacs/gne-next))) + +(defun spacemacs//gne-init-helm-grep (&rest args) + (with-current-buffer "*hgrep*" + (setq spacemacs--gne-min-line 5 + spacemacs--gne-max-line + (save-excursion + (goto-char (point-max)) + (previous-line) + (line-number-at-pos)) + spacemacs--gne-line-func 'helm-grep-action + next-error-function 'spacemacs/gne-next))) diff --git a/layers/+completion/helm/local/helm-spacemacs-help/helm-spacemacs-help.el b/layers/+completion/helm/local/helm-spacemacs-help/helm-spacemacs-help.el new file mode 100644 index 0000000..e4c5375 --- /dev/null +++ b/layers/+completion/helm/local/helm-spacemacs-help/helm-spacemacs-help.el @@ -0,0 +1,415 @@ +;;; helm-spacemacs-help.el --- Spacemacs layer exploration with `helm'. + +;; Author: Sylvain Benner +;; 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 configuration +;; layers thanks to helm. + +;;; Code: + +(require 'cl) +(require 'ht) +(require 'helm) +(require 'helm-command) +(require 'helm-org) +(require 'core-configuration-layer) + +(defvar helm-spacemacs--initialized nil + "Non nil if helm-spacemacs is initialized.") + +;;;###autoload +(define-minor-mode helm-spacemacs-help-mode + "Layers discovery with helm interface." + :group 'spacemacs + :global t) + +(defun helm-spacemacs-help//init (&optional arg) + (when (or arg (null helm-spacemacs--initialized)) + (let ((configuration-layer--load-packages-files t) + (configuration-layer--package-properties-read-onlyp t) + (configuration-layer--inhibit-warnings t)) + (configuration-layer/discover-layers) + (configuration-layer/declare-layers (configuration-layer/get-layers-list)) + (configuration-layer/make-all-packages) + (setq helm-spacemacs--initialized t)))) + +;;;###autoload +(defun helm-spacemacs-help (arg) + "Layers discovery with helm interface." + (interactive "P") + (helm-spacemacs-help-mode) + (helm-spacemacs-help//init arg) + (helm :buffer "*helm: spacemacs*" + :sources `(,(helm-spacemacs-help//documentation-source) + ,(helm-spacemacs-help//layer-source) + ,(helm-spacemacs-help//package-source) + ,(helm-spacemacs-help//dotspacemacs-source) + ,(helm-spacemacs-help//toggle-source) + ,(helm-spacemacs-help//faq-source)))) + +;;;###autoload +(defun helm-spacemacs-help-dotspacemacs () + "Helm session to search for dotfile variables." + (interactive) + (helm-spacemacs-help-mode) + (helm :buffer "*helm: spacemacs*" + :sources `(,(helm-spacemacs-help//dotspacemacs-source)))) + +;;;###autoload +(defun helm-spacemacs-help-layers () + "Helm session to search for layers." + (interactive) + (helm-spacemacs-help-mode) + (helm :buffer "*helm: spacemacs*" + :sources `(,(helm-spacemacs-help//layer-source)))) + +;;;###autoload +(defun helm-spacemacs-help-packages (arg) + "Helm session to search for packages." + (interactive "P") + (helm-spacemacs-help-mode) + (helm-spacemacs-help//init arg) + (helm :buffer "*helm: spacemacs*" + :sources `(,(helm-spacemacs-help//package-source)))) + +;;;###autoload +(defun helm-spacemacs-help-docs () + "Helm session to search for documentation." + (interactive) + (helm-spacemacs-help-mode) + (helm :buffer "*helm: spacemacs*" + :sources `(,(helm-spacemacs-help//documentation-source)))) + +;;;###autoload +(defun helm-spacemacs-help-toggles () + "Helm session to search for toggles." + (interactive) + (helm-spacemacs-help-mode) + (helm :buffer "*helm: spacemacs*" + :sources `(,(helm-spacemacs-help//toggle-source)))) + +;;;###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//documentation-source () + "Construct the helm source for the documentation section." + (helm-build-sync-source "Spacemacs Documentation" + :candidates #'helm-spacemacs-help//documentation-candidates + :persistent-action #'helm-spacemacs-help//documentation-action-open-file + :keymap helm-map + :action (helm-make-actions + "Open Documentation" #'helm-spacemacs-help//documentation-action-open-file))) + +(defun helm-spacemacs-help//documentation-candidates () + (let (result file-extension) + (dolist (filename (directory-files spacemacs-docs-directory)) + (setq file-extension (file-name-extension filename)) + (when (or (equal file-extension "md") + (equal file-extension "org")) + (push filename result))) + + ;; CONTRIBUTING.org is a special case as it should be at the root of the + ;; repository to be linked as the contributing guide on Github. + (push "CONTRIBUTING.org" result) + + ;; delete DOCUMENTATION.org to make it the first guide + (delete "DOCUMENTATION.org" result) + (push "DOCUMENTATION.org" result) + + ;; give each document an appropriate title + (mapcar (lambda (r) + (cond + ((string-equal r "CONTRIBUTING.org") + `("How to contribute to Spacemacs" . ,r)) + ((string-equal r "CONVENTIONS.org") + `("Spacemacs conventions" . ,r)) + ((string-equal r "DOCUMENTATION.org") + `("Spacemacs documentation" . ,r)) + ((string-equal r "FAQ.org") + `("Spacemacs FAQ" . ,r)) + ((string-equal r "LAYERS.org") + `("Tips on writing layers for Spacemacs" . ,r)) + ((string-equal r "QUICK_START.org") + `("Quick start guide for Spacemacs" . ,r)) + ((string-equal r "VIMUSERS.org") + `("Vim users migration guide" . ,r)) + (t + `(,r . ,r)))) + result))) + +(defun helm-spacemacs-help//documentation-action-open-file (candidate) + "Open documentation FILE." + (let ((file (if (string= candidate "CONTRIBUTING.org") + ;; CONTRIBUTING.org is a special case as it should be at the + ;; root of the repository to be linked as the contributing + ;; guide on Github. + (concat spacemacs-start-directory candidate) + (concat spacemacs-docs-directory candidate)))) + (cond ((and (equal (file-name-extension file) "md") + (not helm-current-prefix-arg)) + (condition-case-unless-debug nil + (with-current-buffer (find-file-noselect file) + (gh-md-render-buffer) + (spacemacs/kill-this-buffer)) + ;; if anything fails, fall back to simply open file + (find-file file))) + ((equal (file-name-extension file) "org") + (spacemacs/view-org-file file "^" 'all)) + (t + (find-file file))))) + +(defun helm-spacemacs-help//layer-source () + "Construct the helm source for the layer section." + `((name . "Layers") + (candidates . ,(sort (configuration-layer/get-layers-list) 'string<)) + (candidate-number-limit) + (keymap . ,helm-spacemacs-help--layer-map) + (action . (("Open README.org" + . helm-spacemacs-help//layer-action-open-readme) + ("Open packages.el" + . helm-spacemacs-help//layer-action-open-packages) + ("Open config.el" + . helm-spacemacs-help//layer-action-open-config) + ("Install Layer" + . helm-spacemacs-help//layer-action-install-layer) + ("Open README.org (for editing)" + . helm-spacemacs-help//layer-action-open-readme-edit))))) + +(defvar helm-spacemacs-help--layer-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map helm-map) + (define-key map (kbd "") '(lambda () (interactive) + ;; Add Layer + (helm-select-nth-action 3))) + (define-key map (kbd "") '(lambda () (interactive) + ;; Open packages.el + (helm-select-nth-action 1))) + map) + "Keymap for Spacemacs Layers sources") + +(defun helm-spacemacs-help//package-source () + "Construct the helm source for the packages." + `((name . "Packages") + (candidates . ,(helm-spacemacs-help//package-candidates)) + (candidate-number-limit) + (action . (("Go to configuration function" + . helm-spacemacs-help//package-action-goto-config-func) + ("Describe" + . helm-spacemacs-help//package-action-decribe))))) + +(defun helm-spacemacs-help//package-candidates () + "Return the sorted candidates for package source." + (let (result) + (dolist (pkg-name (configuration-layer/get-packages-list)) + (let* ((pkg (configuration-layer/get-package pkg-name)) + (owner (cfgl-package-get-safe-owner pkg)) + ;; the notion of owner does not make sense if the layer is not used + (init-type (if (configuration-layer/layer-usedp owner) + "owner" "init"))) + (when owner + (push (format "%s (%s: %S layer)" + (propertize (symbol-name (oref pkg :name)) + 'face 'font-lock-type-face) + init-type + owner) + result)) + (dolist (initfuncs `((,(oref pkg :owners) "init") + (,(oref pkg :pre-layers) "pre-init") + (,(oref pkg :post-layers) "post-init"))) + (dolist (layer (car initfuncs)) + (unless (and owner (eq owner layer)) + (push (format "%s (%s: %S layer)" + (propertize (symbol-name (oref pkg :name)) + 'face 'font-lock-type-face) + (cadr initfuncs) + layer) + result)))))) + (sort result 'string<))) + +(defun helm-spacemacs-help//toggle-source () + "Construct the helm source for the toggles." + (let ((candidates (helm-spacemacs-help//toggle-candidates))) + (helm-build-sync-source "Toggles" + :candidates candidates + :persistent-action #'helm-spacemacs-help//toggle + :keymap helm-map + :action (helm-make-actions "Toggle" #'helm-spacemacs-help//toggle)))) + +(defun helm-spacemacs-help//toggle-candidates () + "Return the sorted candidates for toggle source." + (let (result) + (dolist (toggle spacemacs-toggles) + (let* ((toggle-symbol (symbol-name (car toggle))) + (toggle-status (funcall (plist-get (cdr toggle) :predicate))) + (toggle-name (capitalize (replace-regexp-in-string "-" " " toggle-symbol))) + (toggle-doc (format "(%s) %s: %s" + (if toggle-status "+" "-") + toggle-name + (propertize + (or (plist-get (cdr toggle) :documentation) "") + 'face 'font-lock-doc-face)))) + (when (plist-member (cdr toggle) :evil-leader) + (let ((key (key-description + (kbd (concat dotspacemacs-leader-key " " + (plist-get (cdr toggle) :evil-leader)))))) + (setq toggle-doc + (format "%s (%s)" + toggle-doc + (propertize key 'face 'helm-M-x-key))))) + (if (plist-member (cdr toggle) :documentation) + (push `(,toggle-doc . ,toggle-symbol) result) + (push `(,toggle-name . ,toggle-symbol) result)))) + (setq result (cl-sort result 'string< :key 'car)) + result)) + +(defun helm-spacemacs-help//dotspacemacs-source () + `((name . "Dotfile") + (candidates . ,(helm-spacemacs-help//dotspacemacs-candidates)) + (candidate-number-limit) + (action . (("Go to variable" . helm-spacemacs-help//go-to-dotfile-variable))))) + +(defun helm-spacemacs-help//dotspacemacs-candidates () + "Return the sorted candidates for all the dospacemacs variables." + (sort (dotspacemacs/get-variable-string-list) 'string<)) + +(defun helm-spacemacs-help//layer-action-open-file + (file candidate &optional edit) + "Open FILE of the passed CANDIDATE. If EDIT is false, open in view mode." + (let ((path (configuration-layer/get-layer-path (intern candidate)))) + (if (and (equal (file-name-extension file) "org") + (not helm-current-prefix-arg)) + (if edit + (find-file (concat path file)) + (spacemacs/view-org-file (concat path file) "^" 'all)) + (let ((filepath (concat path file))) + (if (file-exists-p filepath) + (find-file filepath) + (message "%s does not have %s" candidate file)))))) + +(defun helm-spacemacs-help//layer-action-open-readme (candidate) + "Open the `README.org' file of the passed CANDIDATE for reading." + (helm-spacemacs-help//layer-action-open-file "README.org" candidate)) + +(defun helm-spacemacs-help//layer-action-install-layer (candidate-layer) + "Add CANDIDATE-LAYER to dotspacemacs file and reloads configuration" + (when (dotspacemacs/add-layer (intern candidate-layer)) + (dotspacemacs/sync-configuration-layers))) + +(defun helm-spacemacs-help//layer-action-open-readme-edit (candidate) + "Open the `README.org' file of the passed CANDIDATE for editing." + (helm-spacemacs-help//layer-action-open-file "README.org" candidate t)) + +(defun helm-spacemacs-help//layer-action-open-packages (candidate) + "Open the `packages.el' file of the passed CANDIDATE." + (helm-spacemacs-help//layer-action-open-file "packages.el" candidate)) + +(defun helm-spacemacs-help//layer-action-open-config (candidate) + "Open the `config.el' file of the passed CANDIDATE." + (helm-spacemacs-help//layer-action-open-file "config.el" candidate)) + +(defun helm-spacemacs-help//package-action-decribe (candidate) + "Describe the passed package using Spacemacs describe function." + (save-match-data + (string-match "^\\(.+\\)\s(\\(.+\\) layer)$" candidate) + (let* ((package (match-string 1 candidate))) + (configuration-layer/describe-package (intern package))))) + +(defun helm-spacemacs-help//package-action-goto-config-func (candidate) + "Open the file `packages.el' and go to the init function." + (save-match-data + (string-match "^\\(.+\\)\s(\\(.*\\):\s\\(.+\\) layer.*)$" candidate) + (let* ((package (match-string 1 candidate)) + (init-type (match-string 2 candidate)) + (layer (match-string 3 candidate)) + (path (file-name-as-directory + (configuration-layer/get-layer-path (intern layer)))) + (filename (concat path "packages.el"))) + (when (string-match-p "owner" init-type) + (setq init-type "init")) + (find-file filename) + (goto-char (point-min)) + (re-search-forward (format "%s-%s" init-type package)) + (beginning-of-line)))) + +(defun helm-spacemacs-help//toggle (candidate) + "Toggle candidate." + (let ((toggle (assq (intern candidate) spacemacs-toggles))) + (when toggle + (funcall (plist-get (cdr toggle) :function))))) + +(defun helm-spacemacs-help//go-to-dotfile-variable (candidate) + "Go to candidate in the dotfile." + (find-file dotspacemacs-filepath) + (goto-char (point-min)) + ;; try to exclude comments + (re-search-forward (format "^[a-z\s\\(\\-]*%s" candidate)) + (beginning-of-line)) + +(defvar helm-spacemacs-help--faq-filename + (concat spacemacs-docs-directory "FAQ.org") + "Location of the FAQ file.") + +(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-help) + +;;; helm-spacemacs-help.el ends here diff --git a/layers/+completion/helm/packages.el b/layers/+completion/helm/packages.el new file mode 100644 index 0000000..c4d13be --- /dev/null +++ b/layers/+completion/helm/packages.el @@ -0,0 +1,595 @@ +;;; packages.el --- Helm Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq helm-packages + '( + ace-jump-helm-line + auto-highlight-symbol + bookmark + helm + helm-ag + helm-descbinds + helm-flx + helm-make + helm-mode-manager + helm-projectile + helm-swoop + helm-themes + (helm-spacemacs-help :location local) + imenu + popwin + projectile + )) + +;; Initialization of packages + +(defun helm/init-ace-jump-helm-line () + (use-package ace-jump-helm-line + :defer t + :init + (with-eval-after-load 'helm + (define-key helm-map (kbd "C-q") 'ace-jump-helm-line)))) + +(defun helm/pre-init-auto-highlight-symbol () + (spacemacs|use-package-add-hook auto-highlight-symbol + :post-init + ;; add some functions to ahs transient states + (setq spacemacs--symbol-highlight-transient-state-doc + (concat spacemacs--symbol-highlight-transient-state-doc + " [_b_] search buffers [_/_] search proj [_f_] search files") + spacemacs-symbol-highlight-transient-state-add-bindings + '(("/" spacemacs/helm-project-smart-do-search-region-or-symbol :exit t) + ("b" spacemacs/helm-buffers-smart-do-search-region-or-symbol :exit t) + ("f" spacemacs/helm-files-smart-do-search-region-or-symbol :exit t))))) + +(defun helm/post-init-bookmark () + (spacemacs/set-leader-keys "fb" 'helm-filtered-bookmarks)) + +(defun helm/init-helm () + (use-package helm + :defer 1 + :commands (spacemacs/helm-find-files) + :init + (progn + (add-hook 'helm-cleanup-hook #'spacemacs//helm-cleanup) + ;; key bindings + ;; Use helm to provide :ls, unless ibuffer is used + (unless (configuration-layer/package-usedp 'ibuffer) + (evil-ex-define-cmd "buffers" 'helm-buffers-list)) + ;; use helm by default for M-x, C-x C-f, and C-x b + (unless (configuration-layer/package-usedp 'smex) + (global-set-key (kbd "M-x") 'helm-M-x)) + (global-set-key (kbd "C-x C-f") 'spacemacs/helm-find-files) + (global-set-key (kbd "C-x b") 'helm-buffers-list) + ;; use helm everywhere + (spacemacs/set-leader-keys + "" 'helm-apropos + "a'" 'helm-available-repls + "bb" 'helm-mini + "Cl" 'helm-colors + "ff" 'spacemacs/helm-find-files + "fF" 'helm-find-files + "fL" 'helm-locate + "fr" 'helm-recentf + "hdd" 'helm-apropos + "hdF" 'spacemacs/helm-faces + "hi" 'helm-info-at-point + "hm" 'helm-man-woman + "iu" 'helm-ucs + "jI" 'helm-imenu-in-all-buffers + "rm" 'helm-all-mark-rings + "rl" 'helm-resume + "rr" 'helm-register + "rs" 'spacemacs/resume-last-search-buffer + "ry" 'helm-show-kill-ring + "sl" 'spacemacs/resume-last-search-buffer + "sj" 'spacemacs/helm-jump-in-buffer) + ;; search with grep + (spacemacs/set-leader-keys + "sgb" 'spacemacs/helm-buffers-do-grep + "sgB" 'spacemacs/helm-buffers-do-grep-region-or-symbol + "sgf" 'spacemacs/helm-files-do-grep + "sgF" 'spacemacs/helm-files-do-grep-region-or-symbol + "sgg" 'spacemacs/helm-file-do-grep + "sgG" 'spacemacs/helm-file-do-grep-region-or-symbol) + ;; various key bindings + (spacemacs||set-helm-key "fel" helm-locate-library) + (spacemacs||set-helm-key "hdm" describe-mode) + (spacemacs||set-helm-key "sww" helm-wikipedia-suggest) + (spacemacs||set-helm-key "swg" helm-google-suggest) + (with-eval-after-load 'helm-files + (define-key helm-find-files-map + (kbd "C-c C-e") 'spacemacs/helm-find-files-edit)) + ;; Add minibuffer history with `helm-minibuffer-history' + (define-key minibuffer-local-map (kbd "C-c C-l") 'helm-minibuffer-history) + ;; define the key binding at the very end in order to allow the user + ;; to overwrite any key binding + (add-hook 'emacs-startup-hook + (lambda () + (unless (configuration-layer/package-usedp 'smex) + (spacemacs/set-leader-keys + dotspacemacs-emacs-command-key 'helm-M-x))))) + :config + (progn + (helm-mode) + (advice-add 'helm-grep-save-results-1 :after 'spacemacs//gne-init-helm-grep) + ;; helm-locate uses es (from everything on windows which doesnt like fuzzy) + (helm-locate-set-command) + (setq helm-locate-fuzzy-match (string-match "locate" helm-locate-command)) + ;; alter helm-bookmark key bindings to be simpler + ;; TODO check if there is a more elegant solution to setup these bindings + (defun simpler-helm-bookmark-keybindings () + (define-key helm-bookmark-map (kbd "C-d") 'helm-bookmark-run-delete) + (define-key helm-bookmark-map (kbd "C-e") 'helm-bookmark-run-edit) + (define-key helm-bookmark-map + (kbd "C-f") 'helm-bookmark-toggle-filename) + (define-key helm-bookmark-map + (kbd "C-o") 'helm-bookmark-run-jump-other-window) + (define-key helm-bookmark-map (kbd "C-/") 'helm-bookmark-help)) + (add-hook 'helm-mode-hook 'simpler-helm-bookmark-keybindings) + (with-eval-after-load 'helm-mode ; required + (spacemacs|hide-lighter helm-mode))))) + +(defun helm/init-helm-ag () + (use-package helm-ag + :defer t + :init + (progn + (defun spacemacs//helm-do-ag-region-or-symbol (func &optional dir) + "Search with `ag' with a default input." + (require 'helm-ag) + (cl-letf* (((symbol-value 'helm-ag-insert-at-point) 'symbol) + ;; make thing-at-point choosing the active region first + ((symbol-function 'this-fn) (symbol-function 'thing-at-point)) + ((symbol-function 'thing-at-point) + (lambda (thing) + (let ((res (if (region-active-p) + (buffer-substring-no-properties + (region-beginning) (region-end)) + (this-fn thing)))) + (when res (rxt-quote-pcre res)))))) + (funcall func dir))) + + (defun spacemacs//helm-do-search-find-tool (base tools default-inputp) + "Create a cond form given a TOOLS string list and evaluate it." + (eval + `(cond + ,@(mapcar + (lambda (x) + `((executable-find ,x) + ',(let ((func + (intern + (format (if default-inputp + "spacemacs/%s-%s-region-or-symbol" + "spacemacs/%s-%s") + base x)))) + (if (fboundp func) + func + (intern (format "%s-%s" base x)))))) + tools) + (t 'helm-do-grep)))) + + ;; Search in current file ---------------------------------------------- + + (defun spacemacs/helm-file-do-ag (&optional _) + "Wrapper to execute `helm-ag-this-file.'" + (interactive) + (helm-ag-this-file)) + + (defun spacemacs/helm-file-do-ag-region-or-symbol () + "Search in current file with `ag' using a default input." + (interactive) + (spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-file-do-ag)) + + (defun spacemacs/helm-file-smart-do-search (&optional default-inputp) + "Search in current file using `dotspacemacs-search-tools'. +Search for a search tool in the order provided by `dotspacemacs-search-tools' +If DEFAULT-INPUTP is non nil then the current region or symbol at point +are used as default input." + (interactive) + (call-interactively + (spacemacs//helm-do-search-find-tool "helm-file-do" + dotspacemacs-search-tools + default-inputp))) + + (defun spacemacs/helm-file-smart-do-search-region-or-symbol () + "Search in current file using `dotspacemacs-search-tools' with + default input. +Search for a search tool in the order provided by `dotspacemacs-search-tools'." + (interactive) + (spacemacs/helm-file-smart-do-search t)) + + ;; Search in files ----------------------------------------------------- + + (defun spacemacs/helm-files-do-ag (&optional dir) + "Search in files with `ag' using a default input." + (interactive) + (helm-do-ag dir)) + + (defun spacemacs/helm-files-do-ag-region-or-symbol () + "Search in files with `ag' using a default input." + (interactive) + (spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-ag)) + + (defun spacemacs/helm-files-do-ack (&optional dir) + "Search in files with `ack'." + (interactive) + (let ((helm-ag-base-command "ack --nocolor --nogroup")) + (helm-do-ag dir))) + + (defun spacemacs/helm-files-do-ack-region-or-symbol () + "Search in files with `ack' using a default input." + (interactive) + (spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-ack)) + + (defun spacemacs/helm-files-do-pt (&optional dir) + "Search in files with `pt'." + (interactive) + (let ((helm-ag-base-command "pt -e --nocolor --nogroup")) + (helm-do-ag dir))) + + (defun spacemacs/helm-files-do-pt-region-or-symbol () + "Search in files with `pt' using a default input." + (interactive) + (spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-files-do-pt)) + + (defun spacemacs/helm-files-smart-do-search (&optional default-inputp) + "Search in opened buffers using `dotspacemacs-search-tools'. +Search for a search tool in the order provided by `dotspacemacs-search-tools' +If DEFAULT-INPUTP is non nil then the current region or symbol at point +are used as default input." + (interactive) + (call-interactively + (spacemacs//helm-do-search-find-tool "helm-files-do" + dotspacemacs-search-tools + default-inputp))) + + (defun spacemacs/helm-files-smart-do-search-region-or-symbol () + "Search in opened buffers using `dotspacemacs-search-tools'. +with default input. +Search for a search tool in the order provided by `dotspacemacs-search-tools'." + (interactive) + (spacemacs/helm-files-smart-do-search t)) + + ;; Search in buffers --------------------------------------------------- + + (defun spacemacs/helm-buffers-do-ag (&optional _) + "Wrapper to execute `helm-ag-buffers.'" + (interactive) + (helm-do-ag-buffers)) + + (defun spacemacs/helm-buffers-do-ag-region-or-symbol () + "Search in opened buffers with `ag' with a default input." + (interactive) + (spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-buffers-do-ag)) + + (defun spacemacs/helm-buffers-do-ack (&optional _) + "Search in opened buffers with `ack'." + (interactive) + (let ((helm-ag-base-command "ack --nocolor --nogroup")) + (helm-do-ag-buffers))) + + (defun spacemacs/helm-buffers-do-ack-region-or-symbol () + "Search in opened buffers with `ack' with a default input." + (interactive) + (spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-buffers-do-ack)) + + (defun spacemacs/helm-buffers-do-pt (&optional _) + "Search in opened buffers with `pt'." + (interactive) + (let ((helm-ag-base-command "pt -e --nocolor --nogroup")) + (helm-do-ag-buffers))) + + (defun spacemacs/helm-buffers-do-pt-region-or-symbol () + "Search in opened buffers with `pt' using a default input." + (interactive) + (spacemacs//helm-do-ag-region-or-symbol 'spacemacs/helm-buffers-do-pt)) + + (defun spacemacs/helm-buffers-smart-do-search (&optional default-inputp) + "Search in opened buffers using `dotspacemacs-search-tools'. +Search for a search tool in the order provided by `dotspacemacs-search-tools' +If DEFAULT-INPUTP is non nil then the current region or symbol at point +are used as default input." + (interactive) + (call-interactively + (spacemacs//helm-do-search-find-tool "helm-buffers-do" + dotspacemacs-search-tools + default-inputp))) + + (defun spacemacs/helm-buffers-smart-do-search-region-or-symbol () + "Search in opened buffers using `dotspacemacs-search-tools' with +default input. +Search for a search tool in the order provided by `dotspacemacs-search-tools'." + (interactive) + (spacemacs/helm-buffers-smart-do-search t)) + + ;; Search in project --------------------------------------------------- + + (defun spacemacs/helm-project-do-ag () + "Search in current project with `ag'." + (interactive) + (let ((dir (projectile-project-root))) + (if dir + (helm-do-ag dir) + (message "error: Not in a project.")))) + + (defun spacemacs/helm-project-do-ag-region-or-symbol () + "Search in current project with `ag' using a default input." + (interactive) + (let ((dir (projectile-project-root))) + (if dir + (spacemacs//helm-do-ag-region-or-symbol 'helm-do-ag dir) + (message "error: Not in a project.")))) + + (defun spacemacs/helm-project-do-ack () + "Search in current project with `ack'." + (interactive) + (let ((dir (projectile-project-root))) + (if dir + (spacemacs/helm-files-do-ack dir) + (message "error: Not in a project.")))) + + (defun spacemacs/helm-project-do-ack-region-or-symbol () + "Search in current project with `ack' using a default input." + (interactive) + (let ((dir (projectile-project-root))) + (if dir + (spacemacs//helm-do-ag-region-or-symbol + 'spacemacs/helm-files-do-ack dir) + (message "error: Not in a project.")))) + + (defun spacemacs/helm-project-do-pt () + "Search in current project with `pt'." + (interactive) + (let ((dir (projectile-project-root))) + (if dir + (spacemacs/helm-files-do-pt dir) + (message "error: Not in a project.")))) + + (defun spacemacs/helm-project-do-pt-region-or-symbol () + "Search in current project with `pt' using a default input." + (interactive) + (let ((dir (projectile-project-root))) + (if dir + (spacemacs//helm-do-ag-region-or-symbol + 'spacemacs/helm-files-do-pt dir) + (message "error: Not in a project.")))) + + (defun spacemacs/helm-project-smart-do-search (&optional default-inputp) + "Search in current project using `dotspacemacs-search-tools'. +Search for a search tool in the order provided by `dotspacemacs-search-tools' +If DEFAULT-INPUTP is non nil then the current region or symbol at point +are used as default input." + (interactive) + (let ((projectile-require-project-root nil)) + (call-interactively + (spacemacs//helm-do-search-find-tool "helm-project-do" + dotspacemacs-search-tools + default-inputp)))) + + (defun spacemacs/helm-project-smart-do-search-region-or-symbol () + "Search in current project using `dotspacemacs-search-tools' with + default input. +Search for a search tool in the order provided by `dotspacemacs-search-tools'." + (interactive) + (spacemacs/helm-project-smart-do-search t)) + + ;; This overrides the default C-s action in helm-projectile-switch-project + ;; to search using ag/pt/whatever instead of just grep + (with-eval-after-load 'helm-projectile + (defun spacemacs/helm-project-smart-do-search-in-dir (dir) + (interactive) + (let ((default-directory dir)) + (spacemacs/helm-project-smart-do-search))) + (define-key helm-projectile-projects-map + (kbd "C-s") + (lambda () + (interactive) + (helm-exit-and-execute-action + 'spacemacs/helm-project-smart-do-search-in-dir)))) + + ;; evilify the helm-grep buffer + (evilified-state-evilify helm-grep-mode helm-grep-mode-map + (kbd "RET") 'helm-grep-mode-jump-other-window + (kbd "q") 'quit-window) + + (spacemacs/set-leader-keys + ;; helm-ag marks + "s`" 'helm-ag-pop-stack + ;; opened buffers scope + "sb" 'spacemacs/helm-buffers-smart-do-search + "sB" 'spacemacs/helm-buffers-smart-do-search-region-or-symbol + "sab" 'helm-do-ag-buffers + "saB" 'spacemacs/helm-buffers-do-ag-region-or-symbol + "skb" 'spacemacs/helm-buffers-do-ack + "skB" 'spacemacs/helm-buffers-do-ack-region-or-symbol + "stb" 'spacemacs/helm-buffers-do-pt + "stB" 'spacemacs/helm-buffers-do-pt-region-or-symbol + ;; current file scope + "ss" 'spacemacs/helm-file-smart-do-search + "sS" 'spacemacs/helm-file-smart-do-search-region-or-symbol + "saa" 'helm-ag-this-file + "saA" 'spacemacs/helm-file-do-ag-region-or-symbol + ;; files scope + "sf" 'spacemacs/helm-files-smart-do-search + "sF" 'spacemacs/helm-files-smart-do-search-region-or-symbol + "saf" 'helm-do-ag + "saF" 'spacemacs/helm-files-do-ag-region-or-symbol + "skf" 'spacemacs/helm-files-do-ack + "skF" 'spacemacs/helm-files-do-ack-region-or-symbol + "stf" 'spacemacs/helm-files-do-pt + "stF" 'spacemacs/helm-files-do-pt-region-or-symbol + ;; current project scope + "/" 'spacemacs/helm-project-smart-do-search + "*" 'spacemacs/helm-project-smart-do-search-region-or-symbol + "sp" 'spacemacs/helm-project-smart-do-search + "sP" 'spacemacs/helm-project-smart-do-search-region-or-symbol + "sap" 'spacemacs/helm-project-do-ag + "saP" 'spacemacs/helm-project-do-ag-region-or-symbol + "skp" 'spacemacs/helm-project-do-ack + "skP" 'spacemacs/helm-project-do-ack-region-or-symbol + "stp" 'spacemacs/helm-project-do-pt + "stP" 'spacemacs/helm-project-do-pt-region-or-symbol)) + :config + (progn + (advice-add 'helm-ag--save-results :after 'spacemacs//gne-init-helm-ag) + (evil-define-key 'normal helm-ag-map "SPC" spacemacs-default-map) + (evilified-state-evilify helm-ag-mode helm-ag-mode-map + (kbd "RET") 'helm-ag-mode-jump-other-window + (kbd "gr") 'helm-ag--update-save-results + (kbd "q") 'quit-window)))) + +(defun helm/init-helm-descbinds () + (use-package helm-descbinds + :defer t + :init + (progn + (setq helm-descbinds-window-style 'split) + (add-hook 'helm-mode-hook 'helm-descbinds-mode) + (spacemacs/set-leader-keys "?" 'helm-descbinds)))) + +(defun helm/init-helm-flx () + (use-package helm-flx + :defer t) + (spacemacs|use-package-add-hook helm + :pre-config + (progn + ;; Disable for helm-find-files until performance issues are sorted + ;; https://github.com/PythonNut/helm-flx/issues/9 + (setq helm-flx-for-helm-find-files nil) + (helm-flx-mode)))) + +(defun helm/init-helm-make () + (use-package helm-make + :defer t + :init + (spacemacs/set-leader-keys + "cc" 'helm-make-projectile + "cm" 'helm-make))) + +(defun helm/init-helm-mode-manager () + (use-package helm-mode-manager + :defer t + :init + (spacemacs/set-leader-keys + "hM" 'helm-switch-major-mode + ;; "hm" 'helm-disable-minor-mode + "h C-m" 'helm-enable-minor-mode))) + +(defun helm/init-helm-projectile () + (use-package helm-projectile + :commands (helm-projectile-switch-to-buffer + helm-projectile-find-dir + helm-projectile-dired-find-dir + helm-projectile-recentf + helm-projectile-find-file + helm-projectile-grep + helm-projectile + helm-projectile-switch-project) + :init + (progn + ;; needed for smart search if user's default tool is grep + (defalias 'spacemacs/helm-project-do-grep 'helm-projectile-grep) + (defalias + 'spacemacs/helm-project-do-grep-region-or-symbol + 'helm-projectile-grep) + ;; overwrite projectile settings + (spacemacs|use-package-add-hook projectile + :post-init + (progn + (setq projectile-switch-project-action 'helm-projectile) + (spacemacs/set-leader-keys + "pb" 'helm-projectile-switch-to-buffer + "pd" 'helm-projectile-find-dir + "pf" 'helm-projectile-find-file + "pF" 'helm-projectile-find-file-dwim + "ph" 'helm-projectile + "pp" 'helm-projectile-switch-project + "pr" 'helm-projectile-recentf + "sgp" 'helm-projectile-grep)))))) + +(defun helm/init-helm-spacemacs-help () + (use-package helm-spacemacs-help + :commands (helm-spacemacs-help-dotspacemacs + helm-spacemacs-help + helm-spacemacs-help-faq + helm-spacemacs-help-layers + helm-spacemacs-help-packages + helm-spacemacs-help-docs + helm-spacemacs-help-toggles) + :init + (progn + (defun spacemacs-base/helm-spacemacs-deprecated (arg) + "Provide helm-spacemacs with a binding's depreciation message." + (interactive "P") + (warn (concat "The 'SPC f e h' (or 'M-m f e h') binding is now " + "deprecated and will be remove in the next release. " + "Please use 'SPC h SPC' (or 'M-m h SPC') instead.")) + (helm-spacemacs arg)) + (spacemacs/set-leader-keys "feh" 'spacemacs-base/helm-spacemacs-deprecated) + (spacemacs/set-leader-keys "fef" 'helm-spacemacs-help-faq) + (spacemacs/set-leader-keys + "h ." 'helm-spacemacs-help-dotspacemacs + "h SPC" 'helm-spacemacs-help + "h f" 'helm-spacemacs-help-faq + "h l" 'helm-spacemacs-help-layers + "h p" 'helm-spacemacs-help-packages + "h r" 'helm-spacemacs-help-docs + "h t" 'helm-spacemacs-help-toggles)))) + +(defun helm/init-helm-swoop () + (use-package helm-swoop + :defer t + :init + (progn + (setq helm-swoop-split-with-multiple-windows t + helm-swoop-split-direction 'split-window-vertically + helm-swoop-speed-or-color t + helm-swoop-split-window-function 'helm-default-display-buffer + helm-swoop-pre-input-function (lambda () "")) + + (defun spacemacs/helm-swoop-region-or-symbol () + "Call `helm-swoop' with default input." + (interactive) + (let ((helm-swoop-pre-input-function + (lambda () + (if (region-active-p) + (buffer-substring-no-properties (region-beginning) + (region-end)) + (let ((thing (thing-at-point 'symbol t))) + (if thing thing "")))))) + (call-interactively 'helm-swoop))) + + (spacemacs/set-leader-keys + "ss" 'helm-swoop + "sS" 'spacemacs/helm-swoop-region-or-symbol + "s C-s" 'helm-multi-swoop-all) + (defadvice helm-swoop (before add-evil-jump activate) + (evil-set-jump))))) + +(defun helm/init-helm-themes () + (use-package helm-themes + :defer t + :init + (spacemacs/set-leader-keys + "Ts" 'helm-themes))) + +(defun helm/post-init-imenu () + (spacemacs/set-leader-keys "ji" 'spacemacs/helm-jump-in-buffer)) + +(defun helm/post-init-popwin () + ;; disable popwin-mode while Helm session is running + (add-hook 'helm-after-initialize-hook #'spacemacs//helm-prepare-display) + ;; Restore popwin-mode after a Helm session finishes. + (add-hook 'helm-cleanup-hook #'spacemacs//helm-restore-display)) + +(defun helm/post-init-projectile () + (setq projectile-completion-system 'helm)) diff --git a/layers/+completion/ivy/config.el b/layers/+completion/ivy/config.el new file mode 100644 index 0000000..c2aa029 --- /dev/null +++ b/layers/+completion/ivy/config.el @@ -0,0 +1,45 @@ +;;; config.el --- Ivy Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; Variables + +(defvar spacemacs--counsel-commands + '(("ag" . "ag --nocolor --nogroup %s %S .") + ("pt" . "pt -e --nocolor --nogroup %s %S .") + ("ack" . "ack --nocolor --nogroup %s %S .") + ("grep" . "grep -nrP %s %S .")) + "Alist of search commands and their corresponding commands +with options to run in the shell.") + +(defvar spacemacs--counsel-search-max-path-length 30 + "Truncate the current path in counsel search if it is longer +than this amount.") + +(defvar spacemacs--counsel-initial-number-cand 100) + +(defvar spacemacs--ivy-file-actions + '(("f" find-file-other-frame "other frame") + ("w" find-file-other-window "other window") + ("v" spacemacs/find-file-vsplit "in vertical split") + ("s" spacemacs/find-file-split "in horizontal split") + ("l" find-file-literally "literally") + ("d" spacemacs/delete-file "delete file") + ("r" spacemacs/rename-file "rename file")) + "Default ivy actions for files.") + +(defvar spacemacs--ivy-grep-actions + (loop for j in spacemacs--ivy-file-actions + for key = (nth 0 j) + for func = (nth 1 j) + for desc = (nth 2 j) + collect `(,key (lambda (x) (spacemacs//counsel-with-git-grep (quote ,func) x)) ,desc)) + "Default ivy actions to be used with git-grep output.") diff --git a/layers/+completion/ivy/funcs.el b/layers/+completion/ivy/funcs.el new file mode 100644 index 0000000..94973f9 --- /dev/null +++ b/layers/+completion/ivy/funcs.el @@ -0,0 +1,395 @@ +;;; funcs.el --- Ivy Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; Counsel + +;; async + +(defvar spacemacs--counsel-initial-cands-shown nil) + +(defun spacemacs//counsel-async-command (cmd) + (let* ((counsel--process " *counsel*") + (proc (get-process counsel--process)) + (buff (get-buffer counsel--process))) + (when proc + (delete-process proc)) + (when buff + (kill-buffer buff)) + (setq proc (start-process-shell-command + counsel--process + counsel--process + cmd)) + (setq spacemacs--counsel-initial-cands-shown nil) + (setq counsel--async-time (current-time)) + (set-process-sentinel proc #'counsel--async-sentinel) + (set-process-filter proc #'spacemacs//counsel-async-filter))) + +(defun spacemacs//counsel-async-filter (process str) + (with-current-buffer (process-buffer process) + (insert str)) + (when (or (null spacemacs--counsel-initial-cands-shown) + (time-less-p + ;; 0.5s + '(0 0 500000 0) + (time-since counsel--async-time))) + (let (size display-now) + (with-current-buffer (process-buffer process) + (goto-char (point-min)) + (setq size (- (buffer-size) (forward-line (buffer-size)))) + (when (and (null spacemacs--counsel-initial-cands-shown) + (> size spacemacs--counsel-initial-number-cand)) + (setq ivy--all-candidates + (split-string (buffer-string) "\n" t)) + (setq display-now t) + (setq spacemacs--counsel-initial-cands-shown t))) + (let ((ivy--prompt + (format (ivy-state-prompt ivy-last) + size))) + (if display-now + (ivy--insert-minibuffer + (ivy--format ivy--all-candidates)) + (ivy--insert-prompt)))) + (setq counsel--async-time (current-time)))) + +;; search + +(defvar spacemacs--counsel-search-cmd) + +;; see `counsel-ag-function' +(defun spacemacs//make-counsel-search-function (tool) + (lexical-let ((base-cmd + (cdr (assoc-string tool spacemacs--counsel-commands)))) + (lambda (string &optional _pred &rest _unused) + "Grep in the current directory for STRING." + (if (< (length string) 3) + (counsel-more-chars 3) + (let* ((default-directory counsel--git-grep-dir) + (args (if (string-match-p " -- " string) + (let ((split (split-string string " -- "))) + (prog1 (pop split) + (setq string (mapconcat #'identity split " -- ")))) + "")) + (regex (counsel-unquote-regex-parens + (setq ivy--old-re + (ivy--regex string))))) + (setq spacemacs--counsel-search-cmd (format base-cmd args regex)) + (spacemacs//counsel-async-command spacemacs--counsel-search-cmd) + nil))))) + +(defun spacemacs//counsel-save-in-buffer () + (interactive) + (ivy-quit-and-run + (let ((buf "*ivy results*")) + (with-current-buffer (get-buffer-create buf) + (erase-buffer) + (dolist (c ivy--all-candidates) + (insert c "\n")) + (spacemacs//gne-init-counsel)) + (pop-to-buffer buf)))) + +(defun spacemacs//gne-init-counsel () + (with-current-buffer "*ivy results*" + (setq spacemacs--gne-min-line 1 + spacemacs--gne-max-line + (save-excursion + (goto-char (point-max)) + (previous-line) + (line-number-at-pos)) + spacemacs--gne-line-func + (lambda (c) + (let ((counsel--git-grep-dir default-directory)) + (counsel-git-grep-action c))) + next-error-function 'spacemacs/gne-next))) + +(defvar spacemacs--counsel-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "") 'spacemacs//counsel-save-in-buffer) + map)) + +;; see `counsel-ag' +(defun spacemacs/counsel-search + (&optional tools use-initial-input initial-directory) + "Search using the first available tool in TOOLS. Default tool +to try is grep. If INPUT is non nil, use the region or the symbol +around point as the initial input. If DIR is non nil start in +that directory." + (interactive) + (require 'counsel) + (letf* ((initial-input (if use-initial-input + (if (region-active-p) + (buffer-substring-no-properties + (region-beginning) (region-end)) + (thing-at-point 'symbol t)) + "")) + (tool (catch 'tool + (dolist (tool tools) + (when (and (assoc-string tool spacemacs--counsel-commands) + (executable-find tool)) + (throw 'tool tool))) + (throw 'tool "grep")))) + (setq counsel--git-grep-dir + (or initial-directory + (read-directory-name "Start from directory: "))) + (ivy-read + (concat ivy-count-format + (format "%s from [%s]: " + tool + (if (< (length counsel--git-grep-dir) + spacemacs--counsel-search-max-path-length) + counsel--git-grep-dir + (concat + "..." (substring counsel--git-grep-dir + (- (length counsel--git-grep-dir) + spacemacs--counsel-search-max-path-length) + (length counsel--git-grep-dir)))))) + (spacemacs//make-counsel-search-function tool) + :initial-input (rxt-quote-pcre initial-input) + :dynamic-collection t + :history 'counsel-git-grep-history + :action #'counsel-git-grep-action + :caller 'spacemacs/counsel-search + :keymap spacemacs--counsel-map + :unwind (lambda () + (counsel-delete-process) + (swiper--cleanup))))) + +;; Define search functions for each tool +(cl-loop + for (tools tool-name) in '((dotspacemacs-search-tools "auto") + ((list "ag") "ag") + ((list "pt") "pt") + ((list "ack") "ack") + ((list "grep") "grep")) + do + (eval + `(progn + (defun ,(intern (format "spacemacs/search-%s" tool-name)) () + ,(format + "Use `spacemacs/counsel-search' to search in the current + directory with %s." (if (string= tool-name "auto") + "a tool selected from `dotspacemacs-search-tools'." + tool-name)) + (interactive) + (spacemacs/counsel-search ,tools)) + (defun ,(intern (format "spacemacs/search-%s-region-or-symbol" + tool-name)) () + ,(format + "Use `spacemacs/counsel-search' to search for + the selected region or the symbol around point in the current + directory with %s." (if (string= tool-name "auto") + "a tool selected from `dotspacemacs-search-tools'." + tool-name)) + (interactive) + (spacemacs/counsel-search ,tools t)) + (defun ,(intern (format "spacemacs/search-project-%s" tool-name)) () + ,(format + "Use `spacemacs/counsel-search' to search in the current + project with %s." (if (string= tool-name "auto") + "a tool selected from `dotspacemacs-search-tools'." + tool-name)) + (interactive) + (spacemacs/counsel-search ,tools nil (projectile-project-root))) + (defun ,(intern (format "spacemacs/search-project-%s-region-or-symbol" + tool-name)) () + ,(format + "Use `spacemacs/counsel-search' to search for + the selected region or the symbol around point in the current + project with %s." (if (string= tool-name "auto") + "a tool selected from `dotspacemacs-search-tools'." + tool-name)) + (interactive) + (spacemacs/counsel-search ,tools t (projectile-project-root)))))) + +(defun spacemacs/counsel-git-grep-region-or-symbol () + "Use `counsel-git-grep' to search for the selected region or + the symbol around point in the current project with git grep." + (interactive) + (let ((input (if (region-active-p) + (buffer-substring-no-properties + (region-beginning) (region-end)) + (thing-at-point 'symbol t)))) + (counsel-git-grep nil input))) + +(defun spacemacs/counsel-search-docs () + "Search spacemacs docs using `spacemacs/counsel-search'" + (interactive) + (spacemacs/counsel-search dotspacemacs-search-tools + nil spacemacs-docs-directory)) + +(defun spacemacs//counsel-occur () + "Generate a custom occur buffer for `counsel-git-grep'." + (ivy-occur-grep-mode) + (setq default-directory counsel--git-grep-dir) + (let ((cands ivy--old-cands)) + ;; Need precise number of header lines for `wgrep' to work. + (insert (format "-*- mode:grep; default-directory: %S -*-\n\n\n" + default-directory)) + (insert (format "%d candidates:\n" (length cands))) + (ivy--occur-insert-lines + (mapcar + (lambda (cand) (concat "./" cand)) + ivy--old-cands)))) + +(defun spacemacs/counsel-up-directory-no-error () + "`counsel-up-directory' ignoring errors." + (interactive) + (ignore-errors + (call-interactively 'counsel-up-directory))) + +(when (configuration-layer/package-usedp 'counsel) + (with-eval-after-load 'counsel + (defun spacemacs/describe-mode () + "Dummy wrapper to prevent an key binding error from helm. + +By default the emacs leader is M-m, turns out that Helm does this: + (cl-dolist (k (where-is-internal 'describe-mode global-map)) + (define-key map k 'helm-help)) +after doing this: + (define-key map (kbd \"M-m\") 'helm-toggle-all-marks) +So when Helm is loaded we get the error: + Key sequence M-m h d m starts with non-prefix key M-m + +To prevent this error we just wrap `describe-mode' to defeat the + Helm hack." + (interactive) + (call-interactively 'describe-mode)))) + +(defun spacemacs//counsel-with-git-grep (func x) + (when (string-match "\\`\\(.*?\\):\\([0-9]+\\):\\(.*\\)\\'" x) + (with-ivy-window + (let ((file-name (match-string-no-properties 1 x)) + (line-number (match-string-no-properties 2 x))) + (funcall func + (expand-file-name file-name counsel--git-grep-dir)) + (goto-char (point-min)) + (forward-line (1- (string-to-number line-number))) + (re-search-forward (ivy--regex ivy-text t) (line-end-position) t) + (unless (eq ivy-exit 'done) + (swiper--cleanup) + (swiper--add-overlays (ivy--regex ivy-text))))))) + +;; Ivy + +(defun spacemacs//ivy-command-not-implemented-yet (key) + (lexical-let ((-key key)) + (spacemacs/set-leader-keys + -key (lambda () + (interactive) + (message (concat "The command usually bound to %s %s has " + "not been implemented for the `ivy' layer yet.") + dotspacemacs-leader-key -key))))) + +(defun spacemacs/ivy-available-repls () + "Show available repls." + (interactive) + (ivy-read "Repls: " + (mapcar #'car spacemacs-repl-list) + :action (lambda (candidate) + (let ((repl (cdr (assoc candidate spacemacs-repl-list)))) + (require (car repl)) + (call-interactively (cdr repl)))))) + +;; Evil + +(defun spacemacs/ivy-evil-registers () + "Show evil registers" + (interactive) + (let ((ivy-height 24)) + (ivy-read "Evil Registers:" + (cl-loop for (key . val) in (evil-register-list) + collect (eval `(format "%s : %s" (propertize ,(char-to-string key) 'face 'font-lock-builtin-face) + ,(or (and val + (stringp val) + (replace-regexp-in-string "\n" "^J" val)) + "")))) + :action #'spacemacs/ivy-insert-evil-register))) + +(defun spacemacs/ivy-insert-evil-register (candidate) + (insert (replace-regexp-in-string "\\^J" "\n" + (substring-no-properties candidate 4)))) + +;; Layouts + +(defun spacemacs/ivy-spacemacs-layouts () + "Control Panel for Spacemacs layouts. Has many actions. +If match is found +\(default) Select layout +c: Close Layout(s) <- mark with C-SPC to close more than one-window +k: Kill Layout(s) + +If match is not found + Creates layout + +Closing doesn't kill buffers inside the layout while killing layouts does." + (interactive) + (ivy-read "Layouts: " + (persp-names) + :caller 'spacemacs/ivy-spacemacs-layouts + :action (lambda (name) + (let ((persp-reset-windows-on-nil-window-conf t)) + (persp-switch name) + (unless + (member name + (persp-names-current-frame-fast-ordered)) + (spacemacs/home)))))) + +(defun spacemacs/ivy-spacemacs-layout-buffer () + "Switch to layout buffer using ivy." + (interactive) + (let (ivy-use-virtual-buffers) + (with-persp-buffer-list () + (call-interactively 'ivy-switch-buffer)))) + +(defun spacemacs/ivy-spacemacs-layout-close-other () + "Kills layouts without killing the buffers" + (interactive) + (ivy-read (format "Close layout [current %s]: " + (spacemacs//current-layout-name)) + (persp-names) + :action 'persp-kill-without-buffers)) + +(defun spacemacs/ivy-spacemacs-layout-kill-other () + "Kills layouts with all their buffers" + (interactive) + (ivy-read (format "Kill layout [current %s]: " + (spacemacs//current-layout-name)) + (persp-names) + :action 'persp-kill)) + + +;; Swiper + +(defun spacemacs/swiper-region-or-symbol () + "Run `swiper' with the selected region or the symbol +around point as the initial input." + (interactive) + (let ((input (if (region-active-p) + (buffer-substring-no-properties + (region-beginning) (region-end)) + (thing-at-point 'symbol t)))) + (swiper input))) + +(defun spacemacs/swiper-all-region-or-symbol () + "Run `swiper-all' with the selected region or the symbol +around point as the initial input." + (interactive) + (ivy-read "Swiper: " (swiper--multi-candidates + (cl-remove-if-not + #'buffer-file-name + (buffer-list))) + :initial-input (if (region-active-p) + (buffer-substring-no-properties + (region-beginning) (region-end)) + (thing-at-point 'symbol t)) + :action 'swiper-multi-action-2 + :unwind #'swiper--cleanup + :caller 'swiper-multi)) diff --git a/layers/+completion/ivy/layers.el b/layers/+completion/ivy/layers.el new file mode 100644 index 0000000..865828a --- /dev/null +++ b/layers/+completion/ivy/layers.el @@ -0,0 +1,15 @@ +;;; layers.el --- Ivy Layer layers File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; smex is handled by the `ivy' layer and we don't want +;; to use the ownership mechanism of layers because it is dependent +;; on the order of layer declaration +(configuration-layer/remove-layer 'smex) diff --git a/layers/+completion/ivy/local/ivy-spacemacs-help/ivy-spacemacs-help.el b/layers/+completion/ivy/local/ivy-spacemacs-help/ivy-spacemacs-help.el new file mode 100644 index 0000000..fdef1af --- /dev/null +++ b/layers/+completion/ivy/local/ivy-spacemacs-help/ivy-spacemacs-help.el @@ -0,0 +1,397 @@ +;;; ivy-spacemacs-help.el --- Spacemacs layer exploration with `ivy'. + +;; Author: Justin Burkett +;; Keywords: ivy, spacemacs +;; Version: 0.1 +;; Package-Requires: ((ivy "0.7")) + +;; 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 configuration +;; layers thanks to ivy. + +;;; Code: + +(require 'cl) +(require 'ht) +(require 'ivy) +(require 'core-configuration-layer) + +(defvar ivy-spacemacs--initialized nil + "Non nil if ivy-spacemacs is initialized.") + +;; (defvar ivy-spacemacs-help-all-layers nil +;; "Alist of all configuration layers.") + +;; (defvar ivy-spacemacs-help-all-packages nil +;; "Hash table of all packages in all layers.") + +(defun ivy-spacemacs-help//init (&optional arg) + (when (or arg (null ivy-spacemacs--initialized)) + (let ((configuration-layer--load-packages-files t) + (configuration-layer--package-properties-read-onlyp t) + (configuration-layer--inhibit-warnings t)) + (configuration-layer/discover-layers) + (configuration-layer/declare-layers (configuration-layer/get-layers-list)) + (configuration-layer/make-all-packages) + (setq ivy-spacemacs--initialized t)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Docs + +(defun ivy-spacemacs-help//documentation-candidates () + (let (result file-extension) + (dolist (filename (directory-files spacemacs-docs-directory)) + (setq file-extension (file-name-extension filename)) + (when (or (equal file-extension "md") + (equal file-extension "org")) + (push filename result))) + + ;; CONTRIBUTING.org is a special case as it should be at the root of the + ;; repository to be linked as the contributing guide on Github. + (push "CONTRIBUTING.org" result) + + ;; delete DOCUMENTATION.org to make it the first guide + (delete "DOCUMENTATION.org" result) + (push "DOCUMENTATION.org" result) + + ;; give each document an appropriate title + (mapcar (lambda (r) + (cond + ((string-equal r "CONTRIBUTING.org") + `("How to contribute to Spacemacs" . ,r)) + ((string-equal r "CONVENTIONS.org") + `("Spacemacs conventions" . ,r)) + ((string-equal r "DOCUMENTATION.org") + `("Spacemacs documentation" . ,r)) + ((string-equal r "FAQ.org") + `("Spacemacs FAQ" . ,r)) + ((string-equal r "LAYERS.org") + `("Tips on writing layers for Spacemacs" . ,r)) + ((string-equal r "QUICK_START.org") + `("Quick start guide for Spacemacs" . ,r)) + ((string-equal r "VIMUSERS.org") + `("Vim users migration guide" . ,r)) + (t + `(r . ,r)))) + result))) + +(defun ivy-spacemacs-help//documentation-action-open-file (candidate) + "Open documentation FILE." + (let* ((candidate (cdr candidate)) + (file (if (string= candidate "CONTRIBUTING.org") + ;; CONTRIBUTING.org is a special case as it should be at the + ;; root of the repository to be linked as the contributing + ;; guide on Github. + (concat spacemacs-start-directory candidate) + (concat spacemacs-docs-directory candidate)))) + (cond ((equal (file-name-extension file) "md") + (condition-case-unless-debug nil + (with-current-buffer (find-file-noselect file) + (gh-md-render-buffer) + (spacemacs/kill-this-buffer)) + ;; if anything fails, fall back to simply open file + (find-file file))) + ((equal (file-name-extension file) "org") + (spacemacs/view-org-file file "^" 'all)) + (t + (find-file file))))) + +;;;###autoload +(defun ivy-spacemacs-help-docs (arg) + (interactive "P") + (ivy-spacemacs-help//init arg) + (ivy-read "Spacemacs Documentation: " + (ivy-spacemacs-help//documentation-candidates) + :action #'ivy-spacemacs-help//documentation-action-open-file)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Layers + +(defun ivy-spacemacs-help//layer-candidates () + (sort (mapcar 'symbol-name (configuration-layer/get-layers-list)) + 'string<)) + +(defun ivy-spacemacs-help//layer-action-get-directory (candidate) + "Get directory of layer passed CANDIDATE." + (configuration-layer/get-layer-path (intern candidate))) + +(defun ivy-spacemacs-help//layer-action-open-file (file candidate &optional edit) + "Open FILE of the passed CANDIDATE. If EDIT is false, open in view mode." + (let ((path (configuration-layer/get-layer-path (intern candidate)))) + (if (equal (file-name-extension file) "org") + (if edit + (find-file (concat path file)) + (spacemacs/view-org-file (concat path file) "^" 'all)) + (let ((filepath (concat path file))) + (if (file-exists-p filepath) + (find-file filepath) + (message "%s does not have %s" candidate file)))))) + +(defun ivy-spacemacs-help//layer-action-open-readme (candidate) + "Open the `README.org' file of the passed CANDIDATE for reading." + (ivy-spacemacs-help//layer-action-open-file "README.org" candidate)) + +(defun ivy-spacemacs-help//layer-action-add-layer (candidate) + "Adds layer to dotspacemacs file and reloads configuration" + (if (configuration-layer/layer-usedp (intern candidate)) + (message "Layer already added.") + (let ((dotspacemacs (find-file-noselect (dotspacemacs/location)))) + (with-current-buffer dotspacemacs + (beginning-of-buffer) + (let ((insert-point (re-search-forward + "dotspacemacs-configuration-layers *\n?.*\\((\\)"))) + (insert (format "\n%s\n" candidate)) + (indent-region insert-point (+ insert-point (length candidate))) + (save-current-buffer))) + (dotspacemacs/sync-configuration-layers)))) + +(defun ivy-spacemacs-help//layer-action-open-dired (candidate) + "Open dired at the location of the passed layer CANDIDATE." + (dired + (ivy-spacemacs-help//layer-action-get-directory candidate))) + +(defun ivy-spacemacs-help//layer-action-open-readme-edit (candidate) + "Open the `README.org' file of the passed CANDIDATE for editing." + (ivy-spacemacs-help//layer-action-open-file "README.org" candidate t)) + +(defun ivy-spacemacs-help//layer-action-open-config (candidate) + "Open the `config.el' file of the passed CANDIDATE." + (ivy-spacemacs-help//layer-action-open-file "config.el" candidate)) + +(defun ivy-spacemacs-help//layer-action-open-packages (candidate) + "Open the `packages.el' file of the passed CANDIDATE." + (ivy-spacemacs-help//layer-action-open-file "packages.el" candidate)) + +;;;###autoload +(defun ivy-spacemacs-help-layers () + (interactive) + (ivy-spacemacs-help//init) + (ivy-read "Spacemacs Layers: " + (ivy-spacemacs-help//layer-candidates) + :action 'ivy-spacemacs-help//layer-action-open-readme + :caller 'ivy-spacemacs-help-layers)) + +(ivy-set-actions + 'ivy-spacemacs-help-layers + '(("a" ivy-spacemacs-help//layer-action-add-layer "add layer") + ("d" ivy-spacemacs-help//layer-action-open-dired "open dired at layer location") + ("e" ivy-spacemacs-help//layer-action-open-readme-edit "open readme for editing") + ("c" ivy-spacemacs-help//layer-action-open-config "open config.el") + ("p" ivy-spacemacs-help//layer-action-open-packages "open packages.el") + ("r" ivy-spacemacs-help//layer-action-open-readme "open readme"))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Layers and packages + +(defun ivy-spacemacs-help//help-candidates () + "Return the sorted candidates for package source." + (let (result + (left-column-width + (number-to-string + (cl-reduce + (lambda (a x) (max (length (symbol-name x)) a)) + (configuration-layer/get-layers-list) :initial-value 0))) + (owners (cl-remove-duplicates + (mapcar (lambda (pkg) + (let ((obj (configuration-layer/get-package pkg))) + (car (oref obj :owners)))) + (configuration-layer/get-packages-list))))) + (dolist (pkg-name (configuration-layer/get-packages-list)) + (let ((pkg (configuration-layer/get-package pkg-name))) + (push (list (format (concat "%-" left-column-width "S %s %s") + (car (oref pkg :owners )) + (propertize (symbol-name (oref pkg :name)) + 'face 'font-lock-type-face) + (propertize + (if (package-installed-p (oref pkg :name)) + "[installed]" "") + 'face 'font-lock-comment-face)) + (symbol-name + (car (oref pkg :owners ))) + (symbol-name (oref pkg :name))) + result))) + (dolist (layer (delq nil + (cl-remove-if + (lambda (x) (memq x owners)) + (configuration-layer/get-layers-list)))) + (push (list (format (concat "%-" left-column-width "S %s") + layer + (propertize "no packages" + 'face 'warning)) + layer + nil) + result)) + (sort result (lambda (a b) (string< (car a) (car b)))))) + +(defun ivy-spacemacs-help//help-action (args) + "Open the file `packages.el' and go to the init function." + (if (null (caddr args)) + (message "There are no packages associated with this layer.") + (let* ((layer-str (cadr args)) + (layer-sym (intern layer-str)) + (package-str (caddr args)) + (path (configuration-layer/get-layer-path layer-sym)) + (filename (concat path "packages.el"))) + (find-file filename) + (goto-char (point-min)) + (re-search-forward (format "init-%s" package-str)) + (beginning-of-line)))) + +(defun ivy-spacemacs-help//help-action-describe-package (args) + "Describe the passed package using Spacemacs describe function." + (if (null (caddr args)) + (message "There are no packages associated with this layer.") + (let ((package-str (caddr args))) + (configuration-layer/describe-package (intern package-str))))) + +(defun ivy-spacemacs-help//help-action-open-dired (args) + "Open the `packages.el' file of the passed `car' of ARGS." + (dired + (ivy-spacemacs-help//layer-action-get-directory (cadr args)))) + +(defun ivy-spacemacs-help//help-action-open-config (args) + "Open the `packages.el' file of the passed CANDIDATE." + (ivy-spacemacs-help//layer-action-open-file "config.el" (cadr args))) + +(defun ivy-spacemacs-help//help-action-open-packages (args) + "Open the `packages.el' file of the passed CANDIDATE." + (ivy-spacemacs-help//layer-action-open-file "packages.el" (cadr args))) + +(defun ivy-spacemacs-help//help-action-open-readme (args) + "Open the `README.org' file of the passed CANDIDATE for reading." + (ivy-spacemacs-help//layer-action-open-file "README.org" (cadr args))) + +(defun ivy-spacemacs-help//help-action-open-readme-edit (args) + "Open the `README.org' file of the passed CANDIDATE for editing." + (ivy-spacemacs-help//layer-action-open-file "README.org" (cadr args) t)) + +(defun ivy-spacemacs-help//help-action-add-layer (args) + "Adds layer to dotspacemacs file and reloads configuration" + (if (configuration-layer/layer-usedp (intern (cadr args))) + (message "Layer already added.") + (let ((dotspacemacs (find-file-noselect (dotspacemacs/location)))) + (with-current-buffer dotspacemacs + (beginning-of-buffer) + (let ((insert-point (re-search-forward + "dotspacemacs-configuration-layers *\n?.*\\((\\)"))) + (insert (format "\n%s\n" (cadr args))) + (indent-region insert-point (+ insert-point (length (cadr args)))) + (save-current-buffer))) + (dotspacemacs/sync-configuration-layers)))) + +;;;###autoload +(defun ivy-spacemacs-help () + (interactive) + (ivy-spacemacs-help//init) + (ivy-read "Spacemacs Layers and Packages: " + (ivy-spacemacs-help//help-candidates) + :action 'ivy-spacemacs-help//help-action + :caller 'ivy-spacemacs-help)) + +(ivy-set-actions + 'ivy-spacemacs-help + '(("a" ivy-spacemacs-help//help-action-add-layer "add layer") + ("d" ivy-spacemacs-help//help-action-open-dired "open dired at layer location") + ("D" ivy-spacemacs-help//help-action-describe-package "describe package") + ("e" ivy-spacemacs-help//help-action-open-readme-edit "open readme for editing") + ("c" ivy-spacemacs-help//help-action-open-config "open config.el") + ("p" ivy-spacemacs-help//help-action-open-packages "open packages.el") + ("r" ivy-spacemacs-help//help-action-open-readme "open readme"))) + +;;;###autoload +(defalias 'ivy-spacemacs-help-packages 'ivy-spacemacs-help) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Toggles + +(defun ivy-spacemacs-help//toggle-candidates () + "Return the sorted candidates for toggle source." + (let (result) + (dolist (toggle spacemacs-toggles) + (let* ((toggle-symbol (symbol-name (car toggle))) + (toggle-status (funcall (plist-get (cdr toggle) :predicate))) + (toggle-name (capitalize (replace-regexp-in-string "-" " " toggle-symbol))) + (toggle-doc (format "(%s) %s: %s" + (if toggle-status "+" "-") + toggle-name + (propertize + (or (plist-get (cdr toggle) :documentation) "") + 'face 'font-lock-doc-face)))) + (when (plist-member (cdr toggle) :evil-leader) + (let ((key (key-description + (kbd (concat dotspacemacs-leader-key " " + (plist-get (cdr toggle) :evil-leader)))))) + (setq toggle-doc + (format "%s (%s)" + toggle-doc + (propertize key 'face 'font-lock-keyword-face))))) + (if (plist-member (cdr toggle) :documentation) + (push `(,toggle-doc . ,toggle-symbol) result) + (push `(,toggle-name . ,toggle-symbol) result)))) + (setq result (cl-sort result 'string< :key 'car)) + result)) + +(defun ivy-spacemacs-help//toggle (candidate) + "Toggle candidate." + (let ((toggle (assq (intern candidate) spacemacs-toggles))) + (when toggle + (funcall (plist-get (cdr toggle) :function))))) + +;;;###autoload +(defun ivy-spacemacs-help-toggles () + (interactive) + (ivy-read "Spacemacs Toggles: " + (ivy-spacemacs-help//toggle-candidates) + :action 'ivy-spacemacs-help//toggle)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; .spacemacs vars + +(defun ivy-spacemacs-help//dotspacemacs-candidates () + "Return the sorted candidates for all the dospacemacs variables." + (sort (dotspacemacs/get-variable-string-list) 'string<)) + +(defun ivy-spacemacs-help//go-to-dotfile-variable (candidate) + "Go to candidate in the dotfile." + (find-file dotspacemacs-filepath) + (goto-char (point-min)) + ;; try to exclude comments + (re-search-forward (format "^[a-z\s\\(\\-]*%s" candidate)) + (beginning-of-line)) + +;;;###autoload +(defun ivy-spacemacs-help-dotspacemacs () + (interactive) + (ivy-read ".spacemacs variables: " + (ivy-spacemacs-help//dotspacemacs-candidates) + :action 'ivy-spacemacs-help//go-to-dotfile-variable)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; FAQ + +;;;###autoload +(defun ivy-spacemacs-help-faq () + "Show FAQ and launch swiper session." + (interactive) + (find-file-read-only + (expand-file-name "FAQ.org" spacemacs-docs-directory)) + (swiper "\\*\\* ")) + +(provide 'ivy-spacemacs-help) + +;;; ivy-spacemacs-help.el ends here diff --git a/layers/+completion/ivy/packages.el b/layers/+completion/ivy/packages.el new file mode 100644 index 0000000..5881475 --- /dev/null +++ b/layers/+completion/ivy/packages.el @@ -0,0 +1,246 @@ +;;; packages.el --- Ivy Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq ivy-packages + '( + auto-highlight-symbol + counsel + (counsel-projectile :toggle (configuration-layer/package-usedp 'projectile)) + evil + flx + helm-make + imenu + ivy + ivy-hydra + (ivy-spacemacs-help :location local) + persp-mode + projectile + smex + swiper + wgrep + )) + +(defun ivy/pre-init-auto-highlight-symbol () + (spacemacs|use-package-add-hook auto-highlight-symbol + :post-init + ;; add some functions to ahs transient states + (setq spacemacs--symbol-highlight-transient-state-doc + (concat spacemacs--symbol-highlight-transient-state-doc + " [_b_] search buffers [_/_] search proj [_f_] search files") + spacemacs-symbol-highlight-transient-state-add-bindings + '(("/" spacemacs/search-project-auto-region-or-symbol :exit t) + ("b" spacemacs/swiper-all-region-or-symbol :exit t) + ("f" spacemacs/search-auto-region-or-symbol :exit t))))) + +(defun ivy/init-counsel () + (use-package counsel + :config + (progn + (define-key counsel-find-file-map (kbd "C-h") 'counsel-up-directory) + (spacemacs/set-leader-keys + dotspacemacs-emacs-command-key 'counsel-M-x + ;; files + "ff" 'counsel-find-file + "fL" 'counsel-locate + ;; help + "?" 'counsel-descbinds + "hdf" 'counsel-describe-function + "hdm" 'spacemacs/describe-mode + "hdv" 'counsel-describe-variable + "hR" 'spacemacs/counsel-search-docs + ;; insert + "iu" 'counsel-unicode-char + ;; jump + ;; register/ring + "ry" 'counsel-yank-pop + ;; jumping + "sj" 'counsel-imenu + ;; themes + "Ts" 'counsel-load-theme + ;; search + "/" 'spacemacs/search-project-auto + "*" 'spacemacs/search-project-auto-region-or-symbol + "sf" 'spacemacs/search-auto + "sF" 'spacemacs/search-auto-region-or-symbol + "sp" 'spacemacs/search-project-auto + "sP" 'spacemacs/search-project-auto-region-or-symbol + "saf" 'spacemacs/search-ag + "saF" 'spacemacs/search-ag-region-or-symbol + "sap" 'spacemacs/search-project-ag + "saP" 'spacemacs/search-project-ag-region-or-symbol + "stf" 'spacemacs/search-pt + "stF" 'spacemacs/search-pt-region-or-symbol + "stp" 'spacemacs/search-project-pt + "stP" 'spacemacs/search-project-pt-region-or-symbol + "sgf" 'spacemacs/search-grep + "sgF" 'spacemacs/search-grep-region-or-symbol + "sgp" 'counsel-git-grep + "sgP" 'spacemacs/counsel-git-grep-region-or-symbol + "skf" 'spacemacs/search-ack + "skF" 'spacemacs/search-ack-region-or-symbol + "skp" 'spacemacs/search-project-ack + "skP" 'spacemacs/search-project-ack-region-or-symbol) + + ;; set additional ivy actions + (ivy-set-actions + 'counsel-find-file + spacemacs--ivy-file-actions) + + ;; remaps built-in commands that have a counsel replacement + (counsel-mode 1) + (spacemacs|hide-lighter counsel-mode) + ;; TODO Commands to port + (spacemacs//ivy-command-not-implemented-yet "jI") + ;; Set syntax highlighting for counsel search results + (ivy-set-display-transformer 'spacemacs/counsel-search 'counsel-git-grep-transformer)))) + +(defun ivy/init-counsel-projectile () + (use-package counsel-projectile + :defer t + :init + ;; overwrite projectile settings + (spacemacs|use-package-add-hook projectile + :post-init + (progn + (setq projectile-switch-project-action 'counsel-projectile-find-file) + (spacemacs/set-leader-keys + "p SPC" 'counsel-projectile + "pb" 'counsel-projectile-switch-to-buffer + "pd" 'counsel-projectile-find-dir + "pp" 'counsel-projectile-switch-project + "pf" 'counsel-projectile-find-file + "pr" 'projectile-recentf))))) + +(defun ivy/post-init-evil () + (spacemacs/set-leader-keys + "re" 'spacemacs/ivy-evil-registers)) + +(defun ivy/init-flx ()) + +(defun ivy/init-helm-make () + (use-package helm-make + :defer t + :init + (progn + (setq helm-make-completion-method 'ivy) + (spacemacs/set-leader-keys + "cc" 'helm-make-projectile + "cm" 'helm-make)))) + +(defun ivy/post-init-imenu () + (spacemacs/set-leader-keys "ji" 'counsel-imenu)) + +(defun ivy/init-ivy () + (use-package ivy + :config + (progn + (with-eval-after-load 'recentf + ;; merge recentf and bookmarks into buffer switching. If we set this + ;; before recentf loads, then ivy-mode loads recentf for us, + ;; which messes up the spacemacs version of recentf. + (setq ivy-use-virtual-buffers t)) + ;; Key bindings + (spacemacs/set-leader-keys + "a'" 'spacemacs/ivy-available-repls + "fr" 'counsel-recentf + "rl" 'ivy-resume + "bb" 'ivy-switch-buffer) + + ;; custom actions for recentf + (ivy-set-actions + 'counsel-recentf + spacemacs--ivy-file-actions) + + (ivy-mode 1) + (global-set-key (kbd "C-c C-r") 'ivy-resume) + (global-set-key (kbd "") 'ivy-resume) + ;; Occur + (evil-make-overriding-map ivy-occur-mode-map 'normal) + (ivy-set-occur 'spacemacs/counsel-search + 'spacemacs//counsel-occur) + (spacemacs/set-leader-keys-for-major-mode 'ivy-occur-grep-mode + "w" 'ivy-wgrep-change-to-wgrep-mode) + ;; Why do we do this ? + (ido-mode -1)))) + +(defun ivy/init-ivy-hydra () + (use-package ivy-hydra)) + +(defun ivy/post-init-persp-mode () + ;; based on https://gist.github.com/Bad-ptr/1aca1ec54c3bdb2ee80996eb2b68ad2d#file-persp-ivy-el + (add-hook 'ivy-ignore-buffers #'spacemacs//layout-not-contains-buffer-p) + (setq ivy-sort-functions-alist + (append ivy-sort-functions-alist + '((persp-kill-buffer . nil) + (persp-remove-buffer . nil) + (persp-add-buffer . nil) + (persp-switch . nil) + (persp-window-switch . nil) + (persp-frame-switch . nil)))) + + (ivy-set-actions + 'spacemacs/ivy-spacemacs-layouts + '(("c" persp-kill-without-buffers "Close layout(s)") + ("k" persp-kill "Kill layout(s)"))) + (setq spacemacs-layouts-transient-state-remove-bindings + '("b" "l" "C" "X")) + (setq spacemacs-layouts-transient-state-add-bindings + '(("b" spacemacs/ivy-spacemacs-layout-buffer) + ("l" spacemacs/ivy-spacemacs-layouts :exit t) + ("C" spacemacs/ivy-spacemacs-layout-close-other :exit t) + ("X" spacemacs/ivy-spacemacs-layout-kill-other :exit t)))) + +(defun ivy/post-init-projectile () + (setq projectile-completion-system 'ivy) + (spacemacs/set-leader-keys + "pv" 'projectile-vc)) + +(defun ivy/init-smex () + (use-package smex + :defer t + :init (setq-default smex-history-length 32 + smex-save-file (concat spacemacs-cache-directory + ".smex-items")))) + +(defun ivy/init-ivy-spacemacs-help () + (use-package ivy-spacemacs-help + :commands (ivy-spacemacs-help-dotspacemacs + ivy-spacemacs-help + ivy-spacemacs-help-faq + ivy-spacemacs-help-layers + ivy-spacemacs-help-packages + ivy-spacemacs-help-docs + ivy-spacemacs-help-toggles) + :init (spacemacs/set-leader-keys + "h ." 'ivy-spacemacs-help-dotspacemacs + "h SPC" 'ivy-spacemacs-help + "h f" 'ivy-spacemacs-help-faq + "h l" 'ivy-spacemacs-help-layers + "h p" 'ivy-spacemacs-help-packages + "h r" 'ivy-spacemacs-help-docs + "h t" 'ivy-spacemacs-help-toggles))) + +(defun ivy/init-swiper () + (use-package swiper + :config + (progn + (spacemacs/set-leader-keys + "ss" 'swiper + "sS" 'spacemacs/swiper-region-or-symbol + "sb" 'swiper-all + "sB" 'spacemacs/swiper-all-region-or-symbol) + (global-set-key "\C-s" 'swiper)))) + +(defun ivy/init-wgrep () + (evil-define-key 'normal wgrep-mode-map ",," 'wgrep-finish-edit) + (evil-define-key 'normal wgrep-mode-map ",c" 'wgrep-finish-edit) + (evil-define-key 'normal wgrep-mode-map ",a" 'wgrep-abort-changes) + (evil-define-key 'normal wgrep-mode-map ",k" 'wgrep-abort-changes)) diff --git a/layers/+distributions/spacemacs-base/config.el b/layers/+distributions/spacemacs-base/config.el new file mode 100644 index 0000000..8fededb --- /dev/null +++ b/layers/+distributions/spacemacs-base/config.el @@ -0,0 +1,211 @@ +;;; config.el --- Spacemacs Base Layer configuration File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; --------------------------------------------------------------------------- +;; Navigation +;; --------------------------------------------------------------------------- + +;; Auto refresh +(global-auto-revert-mode 1) +;; Also auto refresh dired, but be quiet about it +(setq global-auto-revert-non-file-buffers t + auto-revert-verbose nil) + +;; Make dired "guess" target directory for some operations, like copy to +;; directory visited in other split buffer. +(setq dired-dwim-target t) + +;; Regexp for useful and useless buffers for smarter buffer switching +(defvar spacemacs-useless-buffers-regexp '("*\.\+") + "Regexp used to determine if a buffer is not useful.") +(defvar spacemacs-useful-buffers-regexp '("\\*scratch\\*") + "Regexp used to define buffers that are useful despite matching +`spacemacs-useless-buffers-regexp'.") + +;; no beep pleeeeeease ! (and no visual blinking too please) +(setq ring-bell-function 'ignore + visible-bell nil) + +;; Hack to fix a bug with tabulated-list.el +;; see: http://redd.it/2dgy52 +(defun tabulated-list-revert (&rest ignored) + "The `revert-buffer-function' for `tabulated-list-mode'. +It runs `tabulated-list-revert-hook', then calls `tabulated-list-print'." + (interactive) + (unless (derived-mode-p 'tabulated-list-mode) + (error "The current buffer is not in Tabulated List mode")) + (run-hooks 'tabulated-list-revert-hook) + ;; hack is here + ;; (tabulated-list-print t) + (tabulated-list-print)) + +;; Mouse cursor in terminal mode +(xterm-mouse-mode 1) + +;; Highlight and allow to open http link at point in programming buffers +;; goto-address-prog-mode only highlights links in strings and comments +(add-hook 'prog-mode-hook 'goto-address-prog-mode) +;; Highlight and follow bug references in comments and strings +(add-hook 'prog-mode-hook 'bug-reference-prog-mode) + +;; Keep focus while navigating help buffers +(setq help-window-select 't) + +;; Scroll compilation to first error or end +(setq compilation-scroll-output 'first-error) + +;; Don't try to ping things that look like domain names +(setq ffap-machine-p-known 'reject) + +;; --------------------------------------------------------------------------- +;; Edit +;; --------------------------------------------------------------------------- + +;; start scratch in text mode (usefull to get a faster Emacs load time +;; because it avoids autoloads of elisp modes) +(setq initial-major-mode 'text-mode) + +;; use only spaces and no tabs +(setq-default indent-tabs-mode nil + tab-width 2) + +;; Text +(setq longlines-show-hard-newlines t) + +;; Use system trash for file deletion +;; should work on Windows and Linux distros +;; on OS X, see contrib/osx layer +(setq delete-by-moving-to-trash t) + +;; auto fill breaks line beyond buffer's fill-column +(setq-default fill-column 80) +(spacemacs|diminish auto-fill-function " Ⓕ" " F") + +;; persistent abbreviation file +(setq abbrev-file-name (concat spacemacs-cache-directory "abbrev_defs")) + +;; Save clipboard contents into kill-ring before replace them +(setq save-interprogram-paste-before-kill t) + +;; Single space between sentences is more widespread than double +(setq-default sentence-end-double-space nil) + +;; The C-d rebinding that most shell-like buffers inherit from +;; comint-mode assumes non-evil configuration with its +;; `comint-delchar-or-maybe-eof' function, so we disable it +(with-eval-after-load 'comint + (define-key comint-mode-map (kbd "C-d") nil)) + +;; Prompt to open file literally if large file. +(add-hook 'find-file-hook 'spacemacs/check-large-file) + +;; --------------------------------------------------------------------------- +;; UI +;; --------------------------------------------------------------------------- + +;; important for golden-ratio to better work +(setq window-combination-resize t) +;; Show column number in mode line +(setq column-number-mode t) + +;; highlight current line +(global-hl-line-mode t) +;; no blink +(blink-cursor-mode 0) +;; When emacs asks for "yes" or "no", let "y" or "n" suffice +(fset 'yes-or-no-p 'y-or-n-p) +;; draw underline lower +(setq x-underline-at-descent-line t) +;; don't let the cursor go into minibuffer prompt +;; Tip taken from Xah Lee: http://ergoemacs.org/emacs/emacs_stop_cursor_enter_prompt.html +(setq minibuffer-prompt-properties + '(read-only t point-entered minibuffer-avoid-prompt face minibuffer-prompt)) +;; Fullscreen/maximize frame on startup +(if dotspacemacs-fullscreen-at-startup + ;; spacemacs/toggle-fullscreen-frame-on is NOT available during the startup, + ;; but IS available during the subsequent config reloads + (if (fboundp 'spacemacs/toggle-fullscreen-frame-on) + (spacemacs/toggle-fullscreen-frame-on) + (spacemacs/toggle-frame-fullscreen)) + (if dotspacemacs-maximized-at-startup + (add-hook 'window-setup-hook 'toggle-frame-maximized))) + +(setq ns-use-native-fullscreen (not dotspacemacs-fullscreen-use-non-native)) + +;; make `next-buffer', `other-buffer', etc. ignore useless buffers (see +;; `spacemacs/useless-buffer-p') +(let ((buf-pred-entry (assq 'buffer-predicate default-frame-alist))) + (if buf-pred-entry + ;; `buffer-predicate' entry exists, modify it + (setcdr buf-pred-entry #'spacemacs/useful-buffer-p) + ;; `buffer-predicate' entry doesn't exist, create it + (push '(buffer-predicate . spacemacs/useful-buffer-p) default-frame-alist))) + +;; --------------------------------------------------------------------------- +;; Session +;; --------------------------------------------------------------------------- + +;; save custom variables in ~/.spacemacs +(unless (bound-and-true-p custom-file) + (setq custom-file (dotspacemacs/location))) +;; scratch buffer empty +(setq initial-scratch-message nil) +;; don't create backup~ files +(setq make-backup-files nil) + +;; Auto-save file +(setq auto-save-default (not (null dotspacemacs-auto-save-file-location))) +(setq auto-save-list-file-prefix (concat spacemacs-auto-save-directory)) +;; always save TRAMP URLs to cache directory no matter what is the value +;; of `dotspacemacs-auto-save-file-location' +(let ((autosave-dir (concat spacemacs-auto-save-directory "dist/"))) + (setq auto-save-file-name-transforms + `(("\\`/[^/]*:\\([^/]*/\\)*\\([^/]*\\)\\'" ,autosave-dir t))) + (unless (or (file-exists-p autosave-dir) + (null dotspacemacs-auto-save-file-location)) + (make-directory autosave-dir t))) +;; Choose auto-save location +(cl-case dotspacemacs-auto-save-file-location + (cache (let ((autosave-dir (concat spacemacs-auto-save-directory "site/"))) + (add-to-list 'auto-save-file-name-transforms + `(".*" ,autosave-dir t) 'append) + (unless (file-exists-p autosave-dir) + (make-directory autosave-dir t)))) + (original (setq auto-save-visited-file-name t)) + (_ (setq auto-save-default nil + auto-save-list-file-prefix nil))) + +;; remove annoying ellipsis when printing sexp in message buffer +(setq eval-expression-print-length nil + eval-expression-print-level nil) + +;; cache files +(setq tramp-persistency-file-name (concat spacemacs-cache-directory "tramp")) + +;; seems pointless to warn. There's always undo. +(put 'narrow-to-region 'disabled nil) +(put 'upcase-region 'disabled nil) +(put 'downcase-region 'disabled nil) +(put 'erase-buffer 'disabled nil) +(put 'scroll-left 'disabled nil) +(put 'dired-find-alternate-file 'disabled nil) +;; remove prompt if the file is opened in other clients +(defun server-remove-kill-buffer-hook () + (remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)) +(add-hook 'server-visit-hook 'server-remove-kill-buffer-hook) + +;; --------------------------------------------------------------------------- +;; Other +;; --------------------------------------------------------------------------- + +;; hook into `hack-local-variables' in order to allow switching spacemacs +;; configurations based on local variables +(add-hook 'hack-local-variables-hook #'spacemacs//run-local-vars-mode-hook) diff --git a/layers/+distributions/spacemacs-base/funcs.el b/layers/+distributions/spacemacs-base/funcs.el new file mode 100644 index 0000000..c4550ab --- /dev/null +++ b/layers/+distributions/spacemacs-base/funcs.el @@ -0,0 +1,910 @@ +;;; funcs.el --- Spacemacs Base Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(require 'cl-lib) + +(defun spacemacs//run-local-vars-mode-hook () + "Run a hook for the major-mode after the local variables have been processed." + (run-hooks (intern (format "%S-local-vars-hook" major-mode)))) + +(defun spacemacs/split-and-new-line () + "Split a quoted string or s-expression and insert a new line with +auto-indent." + (interactive) + (sp-split-sexp 1) + (sp-newline)) + +(defun spacemacs/push-mark-and-goto-beginning-of-line () + "Push a mark at current location and go to the beginning of the line." + (interactive) + (push-mark (point)) + (evil-beginning-of-line)) + +(defun spacemacs/push-mark-and-goto-end-of-line () + "Push a mark at current location and go to the end of the line." + (interactive) + (push-mark (point)) + (evil-end-of-line)) + +(defun spacemacs/evil-insert-line-above (count) + "Insert one or several lines above the current point's line without changing +the current state and point position." + (interactive "p") + (dotimes (_ count) (save-excursion (evil-insert-newline-above)))) + +(defun spacemacs/evil-insert-line-below (count) + "Insert one or several lines below the current point's line without changing +the current state and point position." + (interactive "p") + (dotimes (_ count) (save-excursion (evil-insert-newline-below)))) + +(defun spacemacs/evil-goto-next-line-and-indent (&optional count) + (interactive "p") + (let ((counter (or count 1))) + (while (> counter 0) + (join-line 1) + (newline-and-indent) + (setq counter (1- counter))))) + +;; from Prelude +;; TODO: dispatch these in the layers +(defvar spacemacs-indent-sensitive-modes + '(coffee-mode + elm-mode + haml-mode + haskell-mode + slim-mode + makefile-mode + makefile-bsdmake-mode + makefile-gmake-mode + makefile-imake-mode + python-mode + yaml-mode) + "Modes for which auto-indenting is suppressed.") + +(defcustom spacemacs-yank-indent-threshold 1000 + "Threshold (# chars) over which indentation does not automatically occur." + :type 'number + :group 'spacemacs) + +(defcustom spacemacs-large-file-modes-list + '(archive-mode tar-mode jka-compr git-commit-mode image-mode + doc-view-mode doc-view-mode-maybe ebrowse-tree-mode + pdf-view-mode) + "Major modes which `spacemacs/check-large-file' will not be +automatically applied to." + :group 'spacemacs + :type '(list symbol)) + + +(defun spacemacs/indent-region-or-buffer () + "Indent a region if selected, otherwise the whole buffer." + (interactive) + (unless (member major-mode spacemacs-indent-sensitive-modes) + (save-excursion + (if (region-active-p) + (progn + (indent-region (region-beginning) (region-end)) + (message "Indented selected region.")) + (progn + (evil-indent (point-min) (point-max)) + (message "Indented buffer."))) + (whitespace-cleanup)))) + +;; from https://gist.github.com/3402786 +(defun spacemacs/toggle-maximize-buffer () + "Maximize buffer" + (interactive) + (if (and (= 1 (length (window-list))) + (assoc ?_ register-alist)) + (jump-to-register ?_) + (progn + (window-configuration-to-register ?_) + (delete-other-windows)))) + +;; https://tsdh.wordpress.com/2007/03/28/deleting-windows-vertically-or-horizontally/ +(defun spacemacs/maximize-horizontally () + "Delete all windows left or right of the current window." + (interactive) + (require 'windmove) + (save-excursion + (while (condition-case nil (windmove-left) (error nil)) + (delete-window)) + (while (condition-case nil (windmove-right) (error nil)) + (delete-window)))) + +(defun spacemacs/toggle-centered-buffer-mode () + "Toggle `spacemacs-centered-buffer-mode'." + (interactive) + (when (require 'centered-buffer-mode nil t) + (call-interactively 'spacemacs-centered-buffer-mode))) + +(defun spacemacs/centered-buffer-mode-full-width () + "Center buffer in the frame." + (interactive) + (when (require 'centered-buffer-mode nil t) + (spacemacs/maximize-horizontally) + (call-interactively 'spacemacs-centered-buffer-mode))) + +(defun spacemacs/useful-buffer-p (buffer) + "Determines if a buffer is useful." + (let ((buf-name (buffer-name buffer))) + (or (with-current-buffer buffer + (derived-mode-p 'comint-mode)) + (cl-loop for useful-regexp in spacemacs-useful-buffers-regexp + thereis (string-match-p useful-regexp buf-name)) + (cl-loop for useless-regexp in spacemacs-useless-buffers-regexp + never (string-match-p useless-regexp buf-name))))) + +(defun spacemacs/useless-buffer-p (buffer) + "Determines if a buffer is useless." + (not (spacemacs/useful-buffer-p buffer))) + +;; from magnars modified by ffevotte for dedicated windows support +(defun spacemacs/rotate-windows (count) + "Rotate each window forwards. +A negative prefix argument rotates each window backwards. +Dedicated (locked) windows are left untouched." + (interactive "p") + (let* ((non-dedicated-windows (remove-if 'window-dedicated-p (window-list))) + (num-windows (length non-dedicated-windows)) + (i 0) + (step (+ num-windows count))) + (cond ((not (> num-windows 1)) + (message "You can't rotate a single window!")) + (t + (dotimes (counter (- num-windows 1)) + (let* ((next-i (% (+ step i) num-windows)) + + (w1 (elt non-dedicated-windows i)) + (w2 (elt non-dedicated-windows next-i)) + + (b1 (window-buffer w1)) + (b2 (window-buffer w2)) + + (s1 (window-start w1)) + (s2 (window-start w2))) + (set-window-buffer w1 b2) + (set-window-buffer w2 b1) + (set-window-start w1 s2) + (set-window-start w2 s1) + (setq i next-i))))))) + +(defun spacemacs/rotate-windows-backward (count) + "Rotate each window backwards. +Dedicated (locked) windows are left untouched." + (interactive "p") + (spacemacs/rotate-windows (* -1 count))) + +(defun spacemacs/rename-file (filename &optional new-filename) + "Rename FILENAME to NEW-FILENAME. + +When NEW-FILENAME is not specified, asks user for a new name. + +Also renames associated buffer (if any exists), invalidates +projectile cache when it's possible and update recentf list." + (interactive "f") + (when (and filename (file-exists-p filename)) + (let* ((buffer (find-buffer-visiting filename)) + (short-name (file-name-nondirectory filename)) + (new-name (if new-filename new-filename + (read-file-name + (format "Rename %s to: " short-name))))) + (cond ((get-buffer new-name) + (error "A buffer named '%s' already exists!" new-name)) + (t + (let ((dir (file-name-directory new-name))) + (when (and (not (file-exists-p dir)) (yes-or-no-p (format "Create directory '%s'?" dir))) + (make-directory dir t))) + (rename-file filename new-name 1) + (when buffer + (kill-buffer buffer) + (find-file new-name)) + (when (fboundp 'recentf-add-file) + (recentf-add-file new-name) + (recentf-remove-if-non-kept filename)) + (when (and (configuration-layer/package-usedp 'projectile) + (projectile-project-p)) + (call-interactively #'projectile-invalidate-cache)) + (message "File '%s' successfully renamed to '%s'" short-name (file-name-nondirectory new-name))))))) + +;; from magnars +(defun spacemacs/rename-current-buffer-file () + "Renames current buffer and file it is visiting." + (interactive) + (let* ((name (buffer-name)) + (filename (buffer-file-name)) + (dir (file-name-directory filename))) + (if (not (and filename (file-exists-p filename))) + (error "Buffer '%s' is not visiting a file!" name) + (let ((new-name (read-file-name "New name: " dir))) + (cond ((get-buffer new-name) + (error "A buffer named '%s' already exists!" new-name)) + (t + (let ((dir (file-name-directory new-name))) + (when (and (not (file-exists-p dir)) (yes-or-no-p (format "Create directory '%s'?" dir))) + (make-directory dir t))) + (rename-file filename new-name 1) + (rename-buffer new-name) + (set-visited-file-name new-name) + (set-buffer-modified-p nil) + (when (fboundp 'recentf-add-file) + (recentf-add-file new-name) + (recentf-remove-if-non-kept filename)) + (when (and (configuration-layer/package-usedp 'projectile) + (projectile-project-p)) + (call-interactively #'projectile-invalidate-cache)) + (message "File '%s' successfully renamed to '%s'" name (file-name-nondirectory new-name)))))))) + +(defun spacemacs/delete-file (filename &optional ask-user) + "Remove specified file or directory. + +Also kills associated buffer (if any exists) and invalidates +projectile cache when it's possible. + +When ASK-USER is non-nil, user will be asked to confirm file +removal." + (interactive "f") + (when (and filename (file-exists-p filename)) + (let ((buffer (find-buffer-visiting filename))) + (when buffer + (kill-buffer buffer))) + (when (or (not ask-user) + (yes-or-no-p "Are you sure you want to delete this file? ")) + (delete-file filename) + (when (and (configuration-layer/package-usedp 'projectile) + (projectile-project-p)) + (call-interactively #'projectile-invalidate-cache))))) + +;; from magnars +(defun spacemacs/delete-current-buffer-file () + "Removes file connected to current buffer and kills buffer." + (interactive) + (let ((filename (buffer-file-name)) + (buffer (current-buffer)) + (name (buffer-name))) + (if (not (and filename (file-exists-p filename))) + (ido-kill-buffer) + (when (yes-or-no-p "Are you sure you want to delete this file? ") + (delete-file filename t) + (kill-buffer buffer) + (when (and (configuration-layer/package-usedp 'projectile) + (projectile-project-p)) + (call-interactively #'projectile-invalidate-cache)) + (message "File '%s' successfully removed" filename))))) + +;; from magnars +(defun spacemacs/sudo-edit (&optional arg) + (interactive "p") + (let ((fname (if (or arg (not buffer-file-name)) + (read-file-name "File: ") + buffer-file-name))) + (find-file + (cond ((string-match-p "^/ssh:" fname) + (with-temp-buffer + (insert fname) + (search-backward ":") + (let ((last-match-end nil) + (last-ssh-hostname nil)) + (while (string-match "@\\\([^:|]+\\\)" fname last-match-end) + (setq last-ssh-hostname (or (match-string 1 fname) + last-ssh-hostname)) + (setq last-match-end (match-end 0))) + (insert (format "|sudo:%s" (or last-ssh-hostname "localhost")))) + (buffer-string))) + (t (concat "/sudo:root@localhost:" fname)))))) + +;; check when opening large files - literal file open +(defun spacemacs/check-large-file () + (let* ((filename (buffer-file-name)) + (size (nth 7 (file-attributes filename)))) + (when (and + (not (memq major-mode spacemacs-large-file-modes-list)) + size (> size (* 1024 1024 dotspacemacs-large-file-size)) + (y-or-n-p (format (concat "%s is a large file, open literally to " + "avoid performance issues?") + filename))) + (setq buffer-read-only t) + (buffer-disable-undo) + (fundamental-mode)))) + +(defun spacemacs/delete-window (&optional arg) + "Delete the current window. +If the universal prefix argument is used then kill the buffer too." + (interactive "P") + (if (equal '(4) arg) + (kill-buffer-and-window) + (delete-window))) + +(defun spacemacs/ace-delete-window (&optional arg) + "Ace delete window. +If the universal prefix argument is used then kill the buffer too." + (interactive "P") + (require 'ace-window) + (aw-select + " Ace - Delete Window" + (lambda (window) + (when (equal '(4) arg) + (with-selected-window window + (spacemacs/kill-this-buffer arg))) + (aw-delete-window window)))) + +;; our own implementation of kill-this-buffer from menu-bar.el +(defun spacemacs/kill-this-buffer (&optional arg) + "Kill the current buffer. +If the universal prefix argument is used then kill also the window." + (interactive "P") + (if (window-minibuffer-p) + (abort-recursive-edit) + (if (equal '(4) arg) + (kill-buffer-and-window) + (kill-buffer)))) + +(defun spacemacs/ace-kill-this-buffer (&optional arg) + "Ace kill visible buffer in a window. +If the universal prefix argument is used then kill also the window." + (interactive "P") + (require 'ace-window) + (let (golden-ratio-mode) + (aw-select + " Ace - Kill buffer in Window" + (lambda (window) + (with-selected-window window + (spacemacs/kill-this-buffer arg)))))) + +;; found at http://emacswiki.org/emacs/KillingBuffers +(defun spacemacs/kill-other-buffers (&optional arg) + "Kill all other buffers. +If the universal prefix argument is used then will the windows too." + (interactive "P") + (when (yes-or-no-p (format "Killing all buffers except \"%s\"? " + (buffer-name))) + (mapc 'kill-buffer (delq (current-buffer) (buffer-list))) + (when (equal '(4) arg) (delete-other-windows)) + (message "Buffers deleted!"))) + +;; from http://dfan.org/blog/2009/02/19/emacs-dedicated-windows/ +(defun spacemacs/toggle-current-window-dedication () + "Toggle dedication state of a window." + (interactive) + (let* ((window (selected-window)) + (dedicated (window-dedicated-p window))) + (set-window-dedicated-p window (not dedicated)) + (message "Window %sdedicated to %s" + (if dedicated "no longer " "") + (buffer-name)))) + +;; http://camdez.com/blog/2013/11/14/emacs-show-buffer-file-name/ +(defun spacemacs/show-and-copy-buffer-filename () + "Show and copy the full path to the current file in the minibuffer." + (interactive) + ;; list-buffers-directory is the variable set in dired buffers + (let ((file-name (or (buffer-file-name) list-buffers-directory))) + (if file-name + (message (kill-new file-name)) + (error "Buffer not visiting a file")))) + +;; adapted from bozhidar +;; http://emacsredux.com/blog/2013/05/18/instant-access-to-init-dot-el/ +(defun spacemacs/find-user-init-file () + "Edit the `user-init-file', in the current window." + (interactive) + (find-file-existing user-init-file)) + +(defun spacemacs/find-dotfile () + "Edit the `dotfile', in the current window." + (interactive) + (find-file-existing (dotspacemacs/location))) + +(defun spacemacs/ediff-dotfile-and-template () + "ediff the current `dotfile' with the template" + (interactive) + (ediff-files (dotspacemacs/location) + (concat dotspacemacs-template-directory ".spacemacs.template"))) + +(defun spacemacs/new-empty-buffer () + "Create a new buffer called untitled()" + (interactive) + (let ((newbuf (generate-new-buffer-name "untitled"))) + (switch-to-buffer newbuf))) + +;; from https://gist.github.com/timcharper/493269 +(defun spacemacs/split-window-vertically-and-switch () + (interactive) + (split-window-vertically) + (other-window 1)) + +(defun spacemacs/split-window-horizontally-and-switch () + (interactive) + (split-window-horizontally) + (other-window 1)) + +(defun spacemacs/layout-triple-columns () + " Set the layout to triple columns. " + (interactive) + (delete-other-windows) + (dotimes (i 2) (split-window-right)) + (balance-windows)) + +(defun spacemacs/layout-double-columns () + " Set the layout to double columns. " + (interactive) + (delete-other-windows) + (split-window-right)) + +(defun spacemacs/insert-line-above-no-indent (count) + "Insert a new line above with no indentation." + (interactive "p") + (let ((p (+ (point) count))) + (save-excursion + (if (eq (line-number-at-pos) 1) + (evil-move-beginning-of-line) + (progn + (evil-previous-line) + (evil-move-end-of-line))) + (while (> count 0) + (insert "\n") + (setq count (1- count)))) + (goto-char p))) + +(defun spacemacs/insert-line-below-no-indent (count) + "Insert a new line below with no indentation." + (interactive "p") + (save-excursion + (evil-move-end-of-line) + (while (> count 0) + (insert "\n") + (setq count (1- count))))) + +;; from https://github.com/gempesaw/dotemacs/blob/emacs/dg-defun.el +(defun spacemacs/kill-matching-buffers-rudely (regexp &optional internal-too) + "Kill buffers whose name matches the specified REGEXP. This +function, unlike the built-in `kill-matching-buffers` does so +WITHOUT ASKING. The optional second argument indicates whether to +kill internal buffers too." + (interactive "sKill buffers matching this regular expression: \nP") + (dolist (buffer (buffer-list)) + (let ((name (buffer-name buffer))) + (when (and name (not (string-equal name "")) + (or internal-too (/= (aref name 0) ?\s)) + (string-match regexp name)) + (kill-buffer buffer))))) + +;; advise to prevent server from closing + +(defvar spacemacs-really-kill-emacs nil + "prevent window manager close from closing instance.") + +(defun spacemacs//persistent-server-running-p () + "Requires spacemacs-really-kill-emacs to be toggled and +dotspacemacs-persistent-server to be t" + (and (fboundp 'server-running-p) + (server-running-p) + dotspacemacs-persistent-server)) + +(defadvice kill-emacs (around spacemacs-really-exit activate) + "Only kill emacs if a prefix is set" + (if (and (not spacemacs-really-kill-emacs) + (spacemacs//persistent-server-running-p)) + (spacemacs/frame-killer) + ad-do-it)) + +(defadvice save-buffers-kill-emacs (around spacemacs-really-exit activate) + "Only kill emacs if a prefix is set" + (if (or spacemacs-really-kill-emacs (not dotspacemacs-persistent-server)) + ad-do-it + (spacemacs/frame-killer))) + +(defun spacemacs/save-buffers-kill-emacs () + "Save all changed buffers and exit Spacemacs" + (interactive) + (setq spacemacs-really-kill-emacs t) + (save-buffers-kill-emacs)) + +(defun spacemacs/kill-emacs () + "Lose all changes and exit Spacemacs" + (interactive) + (setq spacemacs-really-kill-emacs t) + (kill-emacs)) + +(defun spacemacs/prompt-kill-emacs () + "Prompt to save changed buffers and exit Spacemacs" + (interactive) + (setq spacemacs-really-kill-emacs t) + (save-some-buffers) + (kill-emacs)) + +(defun spacemacs/frame-killer () + "Kill server buffer and hide the main Emacs window" + (interactive) + (condition-case-unless-debug nil + (delete-frame nil 1) + (error + (make-frame-invisible nil 1)))) + +(defun spacemacs/toggle-frame-fullscreen () + "Respect the `dotspacemacs-fullscreen-use-non-native' variable when +toggling fullscreen." + (interactive) + (if dotspacemacs-fullscreen-use-non-native + (spacemacs/toggle-frame-fullscreen-non-native) + (toggle-frame-fullscreen))) + +(defun spacemacs/toggle-fullscreen () + "Toggle full screen on X11 and Carbon" + (interactive) + (cond + ((eq window-system 'x) + (set-frame-parameter nil 'fullscreen + (when (not (frame-parameter nil 'fullscreen)) + 'fullboth))) + ((eq window-system 'mac) + (set-frame-parameter + nil 'fullscreen + (when (not (frame-parameter nil 'fullscreen)) 'fullscreen))))) + +(defun spacemacs/toggle-frame-fullscreen-non-native () + "Toggle full screen non-natively. Uses the `fullboth' frame paramerter + rather than `fullscreen'. Useful to fullscreen on OSX w/o animations." + (interactive) + (modify-frame-parameters + nil + `((maximized + . ,(unless (memq (frame-parameter nil 'fullscreen) '(fullscreen fullboth)) + (frame-parameter nil 'fullscreen))) + (fullscreen + . ,(if (memq (frame-parameter nil 'fullscreen) '(fullscreen fullboth)) + (if (eq (frame-parameter nil 'maximized) 'maximized) + 'maximized) + 'fullboth))))) + +;; taken from Prelude: https://github.com/bbatsov/prelude +(defmacro spacemacs|advise-commands (advice-name commands class &rest body) + "Apply advice named ADVICE-NAME to multiple COMMANDS. +The body of the advice is in BODY." + `(progn + ,@(mapcar (lambda (command) + `(defadvice ,command + (,class ,(intern (format "%S-%s" command advice-name)) + activate) + ,@body)) + commands))) + +(defun spacemacs/safe-revert-buffer () + "Prompt before reverting the file." + (interactive) + (revert-buffer nil nil)) + +(defun spacemacs/safe-erase-buffer () + "Prompt before erasing the content of the file." + (interactive) + (if (y-or-n-p (format "Erase content of buffer %s ? " (current-buffer))) + (erase-buffer))) + +(defun spacemacs//find-ert-test-buffer (ert-test) + "Return the buffer where ERT-TEST is defined." + (car (find-definition-noselect (ert-test-name ert-test) 'ert-deftest))) + +(defun spacemacs/ert-run-tests-buffer () + "Run all the tests in the current buffer." + (interactive) + (save-buffer) + (load-file (buffer-file-name)) + (let ((cbuf (current-buffer))) + (ert '(satisfies (lambda (test) + (eq cbuf (spacemacs//find-ert-test-buffer test))))))) + +(defun spacemacs//open-in-external-app (file-path) + "Open `file-path' in external application." + (cond + ((spacemacs/system-is-mswindows) (w32-shell-execute "open" (replace-regexp-in-string "/" "\\\\" file-path))) + ((spacemacs/system-is-mac) (shell-command (format "open \"%s\"" file-path))) + ((spacemacs/system-is-linux) (let ((process-connection-type nil)) + (start-process "" nil "xdg-open" file-path))))) + +(defun spacemacs/open-file-or-directory-in-external-app (arg) + "Open current file in external application. +If the universal prefix argument is used then open the folder +containing the current file by the default explorer." + (interactive "P") + (if arg + (spacemacs//open-in-external-app (expand-file-name default-directory)) + (let ((file-path (if (derived-mode-p 'dired-mode) + (dired-get-file-for-visit) + buffer-file-name))) + (if file-path + (spacemacs//open-in-external-app file-path) + (message "No file associated to this buffer."))))) + +(defun spacemacs/switch-to-minibuffer-window () + "switch to minibuffer window (if active)" + (interactive) + (when (active-minibuffer-window) + (select-window (active-minibuffer-window)))) + +;; http://stackoverflow.com/a/10216338/4869 +(defun spacemacs/copy-whole-buffer-to-clipboard () + "Copy entire buffer to clipboard" + (interactive) + (clipboard-kill-ring-save (point-min) (point-max))) + +(defun spacemacs/copy-clipboard-to-whole-buffer () + "Copy clipboard and replace buffer" + (interactive) + (delete-region (point-min) (point-max)) + (clipboard-yank) + (deactivate-mark)) + +;; BEGIN align functions + +;; modified function from http://emacswiki.org/emacs/AlignCommands +(defun spacemacs/align-repeat (start end regexp &optional justify-right after) + "Repeat alignment with respect to the given regular expression. +If JUSTIFY-RIGHT is non nil justify to the right instead of the +left. If AFTER is non-nil, add whitespace to the left instead of +the right." + (interactive "r\nsAlign regexp: ") + (let* ((ws-regexp (if (string-empty-p regexp) + "\\(\\s-+\\)" + "\\(\\s-*\\)")) + (complete-regexp (if after + (concat regexp ws-regexp) + (concat ws-regexp regexp))) + (group (if justify-right -1 1))) + (message "%S" complete-regexp) + (align-regexp start end complete-regexp group 1 t))) + +;; Modified answer from http://emacs.stackexchange.com/questions/47/align-vertical-columns-of-numbers-on-the-decimal-point +(defun spacemacs/align-repeat-decimal (start end) + "Align a table of numbers on decimal points and dollar signs (both optional)" + (interactive "r") + (require 'align) + (align-region start end nil + '((nil (regexp . "\\([\t ]*\\)\\$?\\([\t ]+[0-9]+\\)\\.?") + (repeat . t) + (group 1 2) + (spacing 1 1) + (justify nil t))) + nil)) + +(defmacro spacemacs|create-align-repeat-x (name regexp &optional justify-right default-after) + (let ((new-func (intern (concat "spacemacs/align-repeat-" name)))) + `(defun ,new-func (start end switch) + (interactive "r\nP") + (let ((after (not (eq (if switch t nil) (if ,default-after t nil))))) + (spacemacs/align-repeat start end ,regexp ,justify-right after))))) + +(spacemacs|create-align-repeat-x "comma" "," nil t) +(spacemacs|create-align-repeat-x "semicolon" ";" nil t) +(spacemacs|create-align-repeat-x "colon" ":" nil t) +(spacemacs|create-align-repeat-x "equal" "=") +(spacemacs|create-align-repeat-x "math-oper" "[+\\-*/]") +(spacemacs|create-align-repeat-x "ampersand" "&") +(spacemacs|create-align-repeat-x "bar" "|") +(spacemacs|create-align-repeat-x "left-paren" "(") +(spacemacs|create-align-repeat-x "right-paren" ")" t) +(spacemacs|create-align-repeat-x "backslash" "\\\\") + +;; END align functions + +(defun spacemacs/dos2unix () + "Converts the current buffer to UNIX file format." + (interactive) + (set-buffer-file-coding-system 'undecided-unix nil)) + +(defun spacemacs/unix2dos () + "Converts the current buffer to DOS file format." + (interactive) + (set-buffer-file-coding-system 'undecided-dos nil)) + +(defun spacemacs/copy-file () + "Write the file under new name." + (interactive) + (call-interactively 'write-file)) + +(defun spacemacs/uniquify-lines () + "Remove duplicate adjacent lines in region or current buffer" + (interactive) + (save-excursion + (save-restriction + (let ((beg (if (region-active-p) (region-beginning) (point-min))) + (end (if (region-active-p) (region-end) (point-max)))) + (goto-char beg) + (while (re-search-forward "^\\(.*\n\\)\\1+" end t) + (replace-match "\\1")))))) + +(defun spacemacs/sort-lines () + "Sort lines in region or current buffer" + (interactive) + (let ((beg (if (region-active-p) (region-beginning) (point-min))) + (end (if (region-active-p) (region-end) (point-max)))) + (sort-lines nil beg end))) + +;; BEGIN linum mouse helpers + +(defvar spacemacs-linum-mdown-line nil + "Define persistent variable for linum selection") + +(defun spacemacs//line-at-click () + "Determine the visual line at click" + (save-excursion + (let ((click-y (cddr (mouse-position))) + (debug-on-error t) + (line-move-visual t)) + (goto-char (window-start)) + (next-line (1- click-y)) + (1+ (line-number-at-pos)) + ))) + +(defun spacemacs/md-select-linum (event) + "Set point as spacemacs-linum-mdown-line" + (interactive "e") + (mouse-select-window event) + (goto-line (spacemacs//line-at-click)) + (set-mark (point)) + (setq spacemacs-linum-mdown-line + (line-number-at-pos))) + +(defun spacemacs/mu-select-linum () + "Select code block between point and spacemacs-linum-mdown-line" + (interactive) + (when spacemacs-linum-mdown-line + (let (mu-line) + (setq mu-line (spacemacs//line-at-click)) + (goto-line (max spacemacs-linum-mdown-line mu-line)) + (set-mark (line-end-position)) + (goto-line (min spacemacs-linum-mdown-line mu-line)) + (setq spacemacs-linum-mdown-line nil)))) + +(defun spacemacs/select-current-block () + "Select the current block of text between blank lines." + (interactive) + (let (p1 p2) + (progn + (if (re-search-backward "\n[ \t]*\n" nil "move") + (progn (re-search-forward "\n[ \t]*\n") + (setq p1 (point))) + (setq p1 (point))) + (if (re-search-forward "\n[ \t]*\n" nil "move") + (progn (re-search-backward "\n[ \t]*\n") + (setq p2 (point))) + (setq p2 (point)))) + (set-mark p1))) + +;; END linum mouse helpers + +;; From http://xugx2007.blogspot.ca/2007/06/benjamin-rutts-emacs-c-development-tips.html +(setq compilation-finish-function + (lambda (buf str) + + (if (or (string-match "exited abnormally" str) + (string-match "FAILED" (buffer-string))) + + ;; there were errors + (message "There were errors. SPC-e-n to visit.") + (unless (or (string-match "Grep finished" (buffer-string)) + (string-match "Ag finished" (buffer-string)) + (string-match "nosetests" (buffer-name))) + + ;; no errors + (message "compilation ok."))))) + +;; from http://www.emacswiki.org/emacs/WordCount +(defun spacemacs/count-words-analysis (start end) + "Count how many times each word is used in the region. + Punctuation is ignored." + (interactive "r") + (let (words alist_words_compare (formated "")) + (save-excursion + (goto-char start) + (while (re-search-forward "\\w+" end t) + (let* ((word (intern (match-string 0))) + (cell (assq word words))) + (if cell + (setcdr cell (1+ (cdr cell))) + (setq words (cons (cons word 1) words)))))) + (defun alist_words_compare (a b) + "Compare elements from an associative list of words count. +Compare them on count first,and in case of tie sort them alphabetically." + (let ((a_key (car a)) + (a_val (cdr a)) + (b_key (car b)) + (b_val (cdr b))) + (if (eq a_val b_val) + (string-lessp a_key b_key) + (> a_val b_val)))) + (setq words (cl-sort words 'alist_words_compare)) + (while words + (let* ((word (pop words)) + (name (car word)) + (count (cdr word))) + (setq formated (concat formated (format "[%s: %d], " name count))))) + (when (interactive-p) + (if (> (length formated) 2) + (message (substring formated 0 -2)) + (message "No words."))) + words)) + +;; indent on paste +;; from Prelude: https://github.com/bbatsov/prelude +(defun spacemacs/yank-advised-indent-function (beg end) + "Do indentation, as long as the region isn't too large." + (if (<= (- end beg) spacemacs-yank-indent-threshold) + (indent-region beg end nil))) + +(spacemacs|advise-commands + "indent" (yank yank-pop evil-paste-before evil-paste-after) around + "If current mode is not one of spacemacs-indent-sensitive-modes + indent yanked text (with universal arg don't indent)." + (evil-start-undo-step) + ad-do-it + (if (and (not (equal '(4) (ad-get-arg 0))) + (not (member major-mode spacemacs-indent-sensitive-modes)) + (or (derived-mode-p 'prog-mode) + (member major-mode spacemacs-indent-sensitive-modes))) + (let ((transient-mark-mode nil) + (save-undo buffer-undo-list)) + (spacemacs/yank-advised-indent-function (region-beginning) + (region-end)))) + (evil-end-undo-step)) + +;; find file functions in split +(defun spacemacs//display-in-split (buffer alist) + "Split selected window and display BUFFER in the new window. +BUFFER and ALIST have the same form as in `display-buffer'. If ALIST contains +a split-side entry, its value must be usable as the SIDE argument for +`split-window'." + (let ((window (split-window nil nil (cdr (assq 'split-side alist))))) + (window--display-buffer buffer window 'window alist) + window)) + +(defun spacemacs/find-file-vsplit (file) + "find file in vertical split" + (interactive "FFind file (vsplit): ") + (let ((buffer (find-file-noselect file))) + (pop-to-buffer buffer '(spacemacs//display-in-split (split-side . right))))) + +(defun spacemacs/find-file-split (file) + "find file in horizontal split" + (interactive "FFind file (split): ") + (let ((buffer (find-file-noselect file))) + (pop-to-buffer buffer '(spacemacs//display-in-split (split-side . below))))) + +(defun spacemacs/switch-to-scratch-buffer () + "Switch to the `*scratch*' buffer. Create it first if needed." + (interactive) + (let ((exists (get-buffer "*scratch*"))) + (switch-to-buffer (get-buffer-create "*scratch*")) + (when (and (not exists) + (not (eq major-mode dotspacemacs-scratch-mode)) + (fboundp dotspacemacs-scratch-mode)) + (funcall dotspacemacs-scratch-mode)))) + +(defun spacemacs/close-compilation-window () + "Close the window containing the '*compilation*' buffer." + (interactive) + (when compilation-last-buffer + (delete-windows-on compilation-last-buffer))) + +(defun spacemacs/no-linum (&rest ignore) + "Disable linum if current buffer." + (when (or 'linum-mode global-linum-mode) + (linum-mode 0))) + +(defun spacemacs/linum-update-window-scale-fix (win) + "Fix linum for scaled text in the window WIN." + (set-window-margins win + (ceiling (* (if (boundp 'text-scale-mode-step) + (expt text-scale-mode-step + text-scale-mode-amount) 1) + (if (car (window-margins)) + (car (window-margins)) 1))))) + diff --git a/layers/+distributions/spacemacs-base/keybindings.el b/layers/+distributions/spacemacs-base/keybindings.el new file mode 100644 index 0000000..bb214fb --- /dev/null +++ b/layers/+distributions/spacemacs-base/keybindings.el @@ -0,0 +1,633 @@ +;;; keybindings.el --- Spacemacs Base Layer key-bindings File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; --------------------------------------------------------------------------- +;; Prefixes +;; --------------------------------------------------------------------------- + +;; We define prefix commands only for the sake of which-key +(setq spacemacs/key-binding-prefixes '(("a" "applications") + ("ai" "irc") + ("as" "shells") + ("b" "buffers") + ("c" "compile/comments") + ("C" "capture/colors") + ("e" "errors") + ("f" "files") + ("fC" "files/convert") + ("fe" "emacs(spacemacs)") + ("fv" "variables") + ("g" "git/versions-control") + ("h" "help") + ("hd" "help-describe") + ("i" "insertion") + ("j" "jump/join/split") + ("k" "lisp") + ("kd" "delete") + ("kD" "delete-backward") + ("k`" "hybrid") + ("n" "narrow/numbers") + ("p" "projects") + ("p$" "projects/shell") + ("q" "quit") + ("r" "registers/rings/resume") + ("Re" "elisp") + ("Rp" "pcre") + ("s" "search/symbol") + ("sa" "ag") + ("sg" "grep") + ("sk" "ack") + ("st" "pt") + ("sw" "web") + ("t" "toggles") + ("tC" "colors") + ("tE" "editing-styles") + ("th" "highlight") + ("tm" "modeline") + ("T" "UI toggles/themes") + ("C-t" "other toggles") + ("w" "windows") + ("wp" "popup") + ("x" "text") + ("xa" "align") + ("xd" "delete") + ("xg" "google-translate") + ("xl" "lines") + ("xm" "move") + ("xt" "transpose") + ("xw" "words") + ("z" "zoom"))) +(mapc (lambda (x) (apply #'spacemacs/declare-prefix x)) + spacemacs/key-binding-prefixes) + +;; instantly display current keystrokes in mini buffer +(setq echo-keystrokes 0.02) +;; auto-indent on RET +(define-key global-map (kbd "RET") 'newline-and-indent) + +;; improve delete-other-windows +(define-key global-map (kbd "C-x 1") 'spacemacs/toggle-maximize-buffer) + +;; alternate binding to search next occurrence with isearch without +;; exiting isearch +(define-key isearch-mode-map (kbd "S-") 'isearch-repeat-forward) +(define-key isearch-mode-map (kbd "M-S-") 'isearch-repeat-backward) +;; Escape from isearch-mode("/" and "?" in evil-mode) like vim +(define-key isearch-mode-map (kbd "") 'isearch-cancel) + +;; Make quit as much as possible +(define-key minibuffer-local-map (kbd "") 'keyboard-escape-quit) +(define-key minibuffer-local-ns-map (kbd "") 'keyboard-escape-quit) +(define-key minibuffer-local-completion-map (kbd "") 'keyboard-escape-quit) +(define-key minibuffer-local-must-match-map (kbd "") 'keyboard-escape-quit) +(define-key minibuffer-local-isearch-map (kbd "") 'keyboard-escape-quit) + +;; linum margin bindings------------------------------------------------------- +(global-set-key (kbd " ") 'spacemacs/md-select-linum) +(global-set-key (kbd " ") 'spacemacs/mu-select-linum) +(global-set-key (kbd " ") 'spacemacs/select-current-block) +(global-set-key (kbd " ") 'spacemacs/mu-select-linum) + +;; --------------------------------------------------------------------------- +;; spacemacs leader key bindings +;; --------------------------------------------------------------------------- + +;; Universal argument --------------------------------------------------------- +(spacemacs/set-leader-keys "u" 'universal-argument) +(when (memq dotspacemacs-editing-style '(vim hybrid)) + (define-key universal-argument-map + (kbd (concat dotspacemacs-leader-key " u")) + 'universal-argument-more)) +;; shell command ------------------------------------------------------------- +(spacemacs/set-leader-keys "!" 'shell-command) +;; applications --------------------------------------------------------------- +(spacemacs/set-leader-keys + "ac" 'calc-dispatch + "ap" 'list-processes + "aP" 'proced + "au" 'undo-tree-visualize) +;; buffers -------------------------------------------------------------------- +(spacemacs/set-leader-keys + "TAB" 'spacemacs/alternate-buffer + "bd" 'spacemacs/kill-this-buffer + "be" 'spacemacs/safe-erase-buffer + "bh" 'spacemacs/home + "b C-d" 'spacemacs/kill-matching-buffers-rudely + "bn" 'next-buffer + "bm" 'spacemacs/kill-other-buffers + "bN" 'spacemacs/new-empty-buffer + "bP" 'spacemacs/copy-clipboard-to-whole-buffer + "bp" 'previous-buffer + "bR" 'spacemacs/safe-revert-buffer + "bs" 'spacemacs/switch-to-scratch-buffer + "bY" 'spacemacs/copy-whole-buffer-to-clipboard + "bw" 'read-only-mode) +;; Cycling settings ----------------------------------------------------------- +(spacemacs/set-leader-keys "Tn" 'spacemacs/cycle-spacemacs-theme) +;; errors --------------------------------------------------------------------- +(spacemacs/set-leader-keys + "en" 'spacemacs/next-error + "eN" 'spacemacs/previous-error + "ep" 'spacemacs/previous-error) +(spacemacs|define-transient-state error + :title "Error transient state" + :hint-is-doc t + :dynamic-hint + (let ((sys (spacemacs/error-delegate))) + (cond + ((eq 'flycheck sys) + "\nBrowsing flycheck errors from this buffer.") + ((eq 'emacs sys) + (let ((buf (next-error-find-buffer))) + (if buf + (concat "\nBrowsing entries from \"" + (buffer-name buf) + "\"" + (with-current-buffer buf + (when spacemacs--gne-line-func + (format " (%d of %d)" + (max 1 (1+ (- spacemacs--gne-cur-line + spacemacs--gne-min-line))) + (1+ (- spacemacs--gne-max-line + spacemacs--gne-min-line)))))) + "\nNo next-error capable buffer found."))))) + :bindings + ("n" spacemacs/next-error "next") + ("p" spacemacs/previous-error "prev") + ("q" nil "quit" :exit t) + :evil-leader "e.") +;; file ----------------------------------------------------------------------- +(spacemacs/set-leader-keys + "fc" 'spacemacs/copy-file + "fD" 'spacemacs/delete-current-buffer-file + "fei" 'spacemacs/find-user-init-file + "fed" 'spacemacs/find-dotfile + "feD" 'spacemacs/ediff-dotfile-and-template + "feR" 'dotspacemacs/sync-configuration-layers + "fev" 'spacemacs/display-and-copy-version + "fCd" 'spacemacs/unix2dos + "fCu" 'spacemacs/dos2unix + "fg" 'rgrep + "fl" 'find-file-literally + "fE" 'spacemacs/sudo-edit + "fo" 'spacemacs/open-file-or-directory-in-external-app + "fR" 'spacemacs/rename-current-buffer-file + "fS" 'evil-write-all + "fs" 'save-buffer + "fvd" 'add-dir-local-variable + "fvf" 'add-file-local-variable + "fvp" 'add-file-local-variable-prop-line + "fy" 'spacemacs/show-and-copy-buffer-filename) +;; help ----------------------------------------------------------------------- +(spacemacs/set-leader-keys + "hdb" 'describe-bindings + "hdc" 'describe-char + "hdf" 'describe-function + "hdk" 'describe-key + "hdl" 'spacemacs/describe-last-keys + "hdp" 'describe-package + "hdP" 'configuration-layer/describe-package + "hds" 'spacemacs/describe-system-info + "hdt" 'describe-theme + "hdv" 'describe-variable + "hI" 'spacemacs/report-issue + "hn" 'view-emacs-news) +;; insert stuff --------------------------------------------------------------- +(spacemacs/set-leader-keys + "iJ" 'spacemacs/insert-line-below-no-indent + "iK" 'spacemacs/insert-line-above-no-indent + "ik" 'spacemacs/evil-insert-line-above + "ij" 'spacemacs/evil-insert-line-below) +;; format --------------------------------------------------------------------- +;; `SPC j k' key binding for a frequent action: go and indent line below the point +;; `SPC J' split the current line at point and indent it +(spacemacs/set-leader-keys + "jo" 'open-line + "j=" 'spacemacs/indent-region-or-buffer + "jS" 'spacemacs/split-and-new-line + "jk" 'spacemacs/evil-goto-next-line-and-indent) + +;; navigation/jumping --------------------------------------------------------- +(spacemacs/set-leader-keys + "j0" 'spacemacs/push-mark-and-goto-beginning-of-line + "j$" 'spacemacs/push-mark-and-goto-end-of-line + "jf" 'find-function + "jv" 'find-variable) + +;; Compilation ---------------------------------------------------------------- +(spacemacs/set-leader-keys + "cC" 'compile + "ck" 'kill-compilation + "cr" 'recompile + "cd" 'spacemacs/close-compilation-window) +(with-eval-after-load 'compile + (define-key compilation-mode-map "r" 'recompile) + (define-key compilation-mode-map "g" nil)) +;; narrow & widen ------------------------------------------------------------- +(spacemacs/set-leader-keys + "nr" 'narrow-to-region + "np" 'narrow-to-page + "nf" 'narrow-to-defun + "nw" 'widen) +;; toggle --------------------------------------------------------------------- +(spacemacs|add-toggle highlight-current-line-globally + :mode global-hl-line-mode + :documentation "Globally highlight the current line." + :evil-leader "thh") +(spacemacs|add-toggle truncate-lines + :status truncate-lines + :on (toggle-truncate-lines) + :off (toggle-truncate-lines -1) + :documentation "Truncate long lines (no wrap)." + :evil-leader "tl") +(spacemacs|add-toggle visual-line-navigation + :status visual-line-mode + :on + (progn + (visual-line-mode) + (evil-define-minor-mode-key 'motion 'visual-line-mode "j" 'evil-next-visual-line) + (evil-define-minor-mode-key 'motion 'visual-line-mode "k" 'evil-previous-visual-line) + (when (bound-and-true-p evil-escape-mode) + (evil-escape-mode -1) + (setq evil-escape-motion-state-shadowed-func nil) + (evil-define-minor-mode-key 'motion 'visual-line-mode "j" 'evil-next-visual-line) + (evil-define-minor-mode-key 'motion 'visual-line-mode "k" 'evil-previous-visual-line) + (evil-escape-mode)) + (evil-normalize-keymaps)) + :off + (progn + (visual-line-mode -1) + (evil-normalize-keymaps)) + :documentation "Move point according to visual lines." + :evil-leader "tL") +(spacemacs|add-toggle auto-fill-mode + :status auto-fill-function + :on (auto-fill-mode) + :off (auto-fill-mode -1) + :documentation "Break line beyond `current-fill-column` while editing." + :evil-leader "tF") +(spacemacs|add-toggle debug-on-error + :status debug-on-error + :on (setq debug-on-error t) + :off (setq debug-on-error nil) + :documentation "Toggle display of backtrace when an error happens." + :evil-leader "tD") +(spacemacs|add-toggle fringe + :status (not (equal fringe-mode 0)) + :on (call-interactively 'fringe-mode) + :off (fringe-mode 0) + :documentation "Display the fringe in GUI mode." + :evil-leader "Tf") +(spacemacs|add-toggle fullscreen-frame + :status (memq (frame-parameter nil 'fullscreen) '(fullscreen fullboth)) + :on (spacemacs/toggle-frame-fullscreen) + :off (spacemacs/toggle-frame-fullscreen) + :documentation "Display the current frame in full screen." + :evil-leader "TF") +(spacemacs|add-toggle maximize-frame + :status (eq (frame-parameter nil 'fullscreen) 'maximized) + :on (toggle-frame-maximized) + :off (toggle-frame-maximized) + :documentation "Maximize the current frame." + :evil-leader "TM") +(spacemacs|add-toggle mode-line + :status (not hidden-mode-line-mode) + :on (hidden-mode-line-mode -1) + :off (hidden-mode-line-mode) + :documentation "Toggle the visibility of modeline." + :evil-leader "tmt") +(spacemacs|add-toggle transparent-frame + :status nil + :on (spacemacs/toggle-transparency) + :documentation "Make the current frame non-opaque." + :evil-leader "TT") +(spacemacs|add-toggle tool-bar + :if window-system + :mode tool-bar-mode + :documentation "Display the tool bar in GUI mode." + :evil-leader "Tt") +(spacemacs|add-toggle menu-bar + :if window-system + :mode menu-bar-mode + :documentation "Display the menu bar." + :evil-leader "Tm") +(spacemacs|add-toggle semantic-stickyfunc + :mode semantic-stickyfunc-mode + :documentation "Enable semantic-stickyfunc." + :evil-leader "TS") +(spacemacs|add-toggle semantic-stickyfunc-globally + :mode global-semantic-stickyfunc-mode + :documentation "Enable semantic-stickyfunc globally." + :evil-leader "T C-S") +;; quit ----------------------------------------------------------------------- +(spacemacs/set-leader-keys + "qs" 'spacemacs/save-buffers-kill-emacs + "qq" 'spacemacs/prompt-kill-emacs + "qQ" 'spacemacs/kill-emacs + "qz" 'spacemacs/frame-killer) +;; window --------------------------------------------------------------------- +(defun split-window-below-and-focus () + "Split the window vertically and focus the new window." + (interactive) + (split-window-below) + (windmove-down) + (when (and (boundp 'golden-ratio-mode) + (symbol-value golden-ratio-mode)) + (golden-ratio))) + +(defun split-window-right-and-focus () + "Split the window horizontally and focus the new window." + (interactive) + (split-window-right) + (windmove-right) + (when (and (boundp 'golden-ratio-mode) + (symbol-value golden-ratio-mode)) + (golden-ratio))) + +(spacemacs/set-leader-keys + "w2" 'spacemacs/layout-double-columns + "w3" 'spacemacs/layout-triple-columns + "wb" 'spacemacs/switch-to-minibuffer-window + "wd" 'spacemacs/delete-window + "wt" 'spacemacs/toggle-current-window-dedication + "wf" 'follow-mode + "wF" 'make-frame + "wH" 'evil-window-move-far-left + "w " 'evil-window-move-far-left + "wh" 'evil-window-left + "w " 'evil-window-left + "wJ" 'evil-window-move-very-bottom + "w " 'evil-window-move-very-bottom + "wj" 'evil-window-down + "w " 'evil-window-down + "wK" 'evil-window-move-very-top + "w " 'evil-window-move-very-top + "wk" 'evil-window-up + "w " 'evil-window-up + "wL" 'evil-window-move-far-right + "w " 'evil-window-move-far-right + "wl" 'evil-window-right + "w " 'evil-window-right + "wm" 'spacemacs/toggle-maximize-buffer + "wc" 'spacemacs/toggle-centered-buffer-mode + "wC" 'spacemacs/centered-buffer-mode-full-width + "wo" 'other-frame + "wr" 'spacemacs/rotate-windows + "wR" 'spacemacs/rotate-windows-backward + "ws" 'split-window-below + "wS" 'split-window-below-and-focus + "w-" 'split-window-below + "wU" 'winner-redo + "wu" 'winner-undo + "wv" 'split-window-right + "wV" 'split-window-right-and-focus + "ww" 'other-window + "w/" 'split-window-right + "w=" 'balance-windows + "w_" 'spacemacs/maximize-horizontally) +;; text ----------------------------------------------------------------------- +(defalias 'count-region 'count-words-region) + +(spacemacs/set-leader-keys + "xa&" 'spacemacs/align-repeat-ampersand + "xa(" 'spacemacs/align-repeat-left-paren + "xa)" 'spacemacs/align-repeat-right-paren + "xa," 'spacemacs/align-repeat-comma + "xa." 'spacemacs/align-repeat-decimal + "xa:" 'spacemacs/align-repeat-colon + "xa;" 'spacemacs/align-repeat-semicolon + "xa=" 'spacemacs/align-repeat-equal + "xa\\" 'spacemacs/align-repeat-backslash + "xaa" 'align + "xac" 'align-current + "xam" 'spacemacs/align-repeat-math-oper + "xar" 'spacemacs/align-repeat + "xa|" 'spacemacs/align-repeat-bar + "xc" 'count-region + "xdw" 'delete-trailing-whitespace + "xjc" 'set-justification-center + "xjf" 'set-justification-full + "xjl" 'set-justification-left + "xjn" 'set-justification-none + "xjr" 'set-justification-right + "xls" 'spacemacs/sort-lines + "xlu" 'spacemacs/uniquify-lines + "xtc" 'transpose-chars + "xtl" 'transpose-lines + "xtw" 'transpose-words + "xU" 'upcase-region + "xu" 'downcase-region + "xwc" 'spacemacs/count-words-analysis + "x TAB" 'indent-rigidly) + +(define-key indent-rigidly-map "h" 'indent-rigidly-left) +(define-key indent-rigidly-map "l" 'indent-rigidly-right) +(define-key indent-rigidly-map "H" 'indent-rigidly-left-to-tab-stop) +(define-key indent-rigidly-map "L" 'indent-rigidly-right-to-tab-stop) + +;; shell ---------------------------------------------------------------------- +(with-eval-after-load 'shell + (evil-define-key 'insert comint-mode-map [up] 'comint-previous-input) + (evil-define-key 'insert comint-mode-map [down] 'comint-next-input)) + +;; --------------------------------------------------------------------------- +;; Transient-states +;; --------------------------------------------------------------------------- + +;; Buffer transient state + +(spacemacs|define-transient-state buffer + :title "Buffer Selection Transient State" + :bindings + ("n" next-buffer "next") + ("N" previous-buffer "previous") + ("p" previous-buffer "previous") + ("K" spacemacs/kill-this-buffer "kill") + ("q" nil "quit" :exit t)) +(spacemacs/set-leader-keys "b." 'spacemacs/buffer-transient-state/body) + +;; end of Buffer transient state + +;; Window Manipulation Transient State + +(defun spacemacs/shrink-window-horizontally (delta) + "Wrap `spacemacs/shrink-window-horizontally'." + (interactive "p") + (shrink-window delta t)) + +(defun spacemacs/shrink-window (delta) + "Wrap `spacemacs/shrink-window'." + (interactive "p") + (shrink-window delta)) + +(defun spacemacs/enlarge-window (delta) + "Wrap `spacemacs/enlarge-window'." + (interactive "p") + (enlarge-window delta)) + +(defun spacemacs/enlarge-window-horizontally (delta) + "Wrap `spacemacs/enlarge-window-horizontally'." + (interactive "p") + (enlarge-window delta t)) + +(spacemacs|define-transient-state window-manipulation + :title "Window Manipulation Transient State" + :doc (concat " + Select^^^^ Move^^^^ Split^^ Resize^^ Other^^ + ──────^^^^───────────── ────^^^^───────────── ─────^^─────────────── ──────^^──────────────────── ─────^^────────────────────────────── + [_j_/_k_] down/up [_J_/_K_] down/up [_s_] vertical [_[_] shrink horizontally [_q_] quit + [_h_/_l_] left/right [_H_/_L_] left/right [_S_] vert & follow [_]_] enlarge horizontally [_u_] restore prev layout + [_0_-_9_] window N [_r_]^^ rotate fwd [_v_] horizontal [_{_] shrink vertically [_U_] restore next layout + [_w_]^^ other window [_R_]^^ rotate bwd [_V_] horiz & follow [_}_] enlarge vertically [_d_] close current + [_o_]^^ other frame ^^^^ ^^ ^^ [_D_] close other" + (if (configuration-layer/package-usedp 'golden-ratio) + "\n ^^^^ ^^^^ ^^ ^^ [_g_] golden-ratio %`golden-ratio-mode" + "")) + :bindings + ("q" nil :exit t) + ("0" select-window-0) + ("1" select-window-1) + ("2" select-window-2) + ("3" select-window-3) + ("4" select-window-4) + ("5" select-window-5) + ("6" select-window-6) + ("7" select-window-7) + ("8" select-window-8) + ("9" select-window-9) + ("-" split-window-below-and-focus) + ("/" split-window-right-and-focus) + ("[" spacemacs/shrink-window-horizontally) + ("]" spacemacs/enlarge-window-horizontally) + ("{" spacemacs/shrink-window) + ("}" spacemacs/enlarge-window) + ("d" delete-window) + ("D" delete-other-windows) + ("h" evil-window-left) + ("" evil-window-left) + ("j" evil-window-down) + ("" evil-window-down) + ("k" evil-window-up) + ("" evil-window-up) + ("l" evil-window-right) + ("" evil-window-right) + ("H" evil-window-move-far-left) + ("" evil-window-move-far-left) + ("J" evil-window-move-very-bottom) + ("" evil-window-move-very-bottom) + ("K" evil-window-move-very-top) + ("" evil-window-move-very-top) + ("L" evil-window-move-far-right) + ("" evil-window-move-far-right) + ("o" other-frame) + ("r" spacemacs/rotate-windows) + ("R" spacemacs/rotate-windows-backward) + ("s" split-window-below) + ("S" split-window-below-and-focus) + ("u" winner-undo) + ("U" winner-redo) + ("v" split-window-right) + ("V" split-window-right-and-focus) + ("w" other-window)) +(spacemacs/set-leader-keys "w." + 'spacemacs/window-manipulation-transient-state/body) + +;; end of Window Manipulation Transient State + +;; text Manipulation Transient State + +(defun spacemacs/scale-up-or-down-font-size (direction) + "Scale the font. If DIRECTION is positive or zero the font is scaled up, +otherwise it is scaled down." + (interactive) + (let ((scale 0.5)) + (if (eq direction 0) + (text-scale-set 0) + (if (< direction 0) + (text-scale-decrease scale) + (text-scale-increase scale))))) + +(defun spacemacs/scale-up-font () + "Scale up the font." + (interactive) + (spacemacs/scale-up-or-down-font-size 1)) + +(defun spacemacs/scale-down-font () + "Scale up the font." + (interactive) + (spacemacs/scale-up-or-down-font-size -1)) + +(defun spacemacs/reset-font-size () + "Reset the font size." + (interactive) + (spacemacs/scale-up-or-down-font-size 0)) + +(spacemacs|define-transient-state scale-font + :title "Font Scaling Transient State" + :doc "\n[_+_/_=_] scale up [_-_] scale down [_0_] reset font [_q_] quit" + :bindings + ("+" spacemacs/scale-up-font) + ("=" spacemacs/scale-up-font) + ("-" spacemacs/scale-down-font) + ("0" spacemacs/reset-font-size) + ("q" nil :exit t)) +(spacemacs/set-leader-keys "zx" 'spacemacs/scale-font-transient-state/body) + +;; end of Text Manipulation Transient State + +;; Transparency transient-state + +(defun spacemacs/toggle-transparency (&optional frame) + "Toggle between transparent and opaque state for FRAME. +If FRAME is nil, it defaults to the selected frame." + (interactive) + (let* ((alpha (frame-parameter frame 'alpha)) + (dotfile-setting (cons dotspacemacs-active-transparency + dotspacemacs-inactive-transparency))) + (set-frame-parameter + frame 'alpha + (if (not (equal alpha dotfile-setting)) + dotfile-setting + '(100 . 100))))) + +(defun spacemacs/increase-transparency (&optional frame) + "Increase transparency for FRAME. +If FRAME is nil, it defaults to the selected frame." + (interactive) + (let* ((current-alpha (car (frame-parameter frame 'alpha))) + (increased-alpha (- current-alpha 5))) + (when (>= increased-alpha frame-alpha-lower-limit) + (set-frame-parameter frame 'alpha + (cons increased-alpha increased-alpha))))) + +(defun spacemacs/decrease-transparency (&optional frame) + "Decrease transparency for FRAME. +If FRAME is nil, it defaults to the selected frame." + (interactive) + (let* ((current-alpha (car (frame-parameter frame 'alpha))) + (decreased-alpha (+ current-alpha 5))) + (when (<= decreased-alpha 100) + (set-frame-parameter frame 'alpha + (cons decreased-alpha decreased-alpha))))) + +(spacemacs|define-transient-state scale-transparency + :title "Frame Transparency Transient State" + :doc "\n[_+_/_=_] increase transparency [_-_] decrease [_T_] toggle [_q_] quit" + :bindings + ("+" spacemacs/increase-transparency) + ("=" spacemacs/increase-transparency) + ("-" spacemacs/decrease-transparency) + ("T" spacemacs/toggle-transparency) + ("q" nil :exit t)) +(spacemacs/set-leader-keys "TT" + 'spacemacs/scale-transparency-transient-state/spacemacs/toggle-transparency) + +;; end of Transparency Transient State diff --git a/layers/+distributions/spacemacs-base/local/centered-buffer-mode/centered-buffer-mode.el b/layers/+distributions/spacemacs-base/local/centered-buffer-mode/centered-buffer-mode.el new file mode 100644 index 0000000..3682cb5 --- /dev/null +++ b/layers/+distributions/spacemacs-base/local/centered-buffer-mode/centered-buffer-mode.el @@ -0,0 +1,269 @@ +;;; centered-buffer-mode.el --- Minor mode for centering buffers. + +;; Copyright (C) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Eugene "JAremko" Yaremenko +;; Keywords: centering buffer minor-mode +;; Created: 1 July 2016 +;; Version: 1.01 +;; Package-Requires: ((emacs "24.4")) +;; URL: https://github.com/syl20bnr/spacemacs + +;; This file is not part of GNU Emacs. + +;; 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 . + +;;; Code: +(require 'face-remap) + +(defgroup spacemacs-centered-buffer-mode nil "Minor mode to center buffer in its window." + :group 'convenience) + +(defcustom spacemacs-centered-buffer-mode-min-fringe-width 50 + "Minimal fringe width." + :type 'integer + :group 'spacemacs-centered-buffer-mode) + +(defcustom spacemacs-centered-buffer-mode-safety-gap-width 20 + "Add extra width to the modified buffer to make sure +that differed modifications won't cause an overflow." + :type 'integer + :group 'spacemacs-centered-buffer-mode) + +(defcustom spacemacs-centered-buffer-mode-fringe-color "black" + "Color of the fringes." + :type 'color + :group 'spacemacs-centered-buffer-mode) + +(defvar-local spacemacs--centered-buffer-mode-origin-buffer nil) +(defvar-local spacemacs--centered-buffer-mode-indirect-buffer nil) +(defvar-local spacemacs--centered-buffer-mode-text-pixel-size nil) +(defvar spacemacs-centered-buffer-mode-default-fringe-color (face-background 'fringe)) +(defvar spacemacs--centered-buffer-mode-indirect-buffers (list)) + +(define-minor-mode spacemacs-centered-buffer-mode + "Minor mode to center buffer in its window." + :init-value nil + :group 'spacemacs-centered-buffer-mode + (if spacemacs-centered-buffer-mode + (if (not (window-dedicated-p)) + (spacemacs//centered-buffer-mode-enable-branch (called-interactively-p 'any)) + (setq spacemacs-centered-buffer-mode nil) + (when (called-interactively-p 'any) + (message "Can't center in dedicated window!"))) + (spacemacs//centered-buffer-mode-disable-branch))) + +(defun spacemacs//centered-buffer-mode-enable-branch (interact) + "Used it `spacemacs-centered-buffer-mode'. +Assume to be called interactively when INTERACT has non nil value." + ;; Mode will be applied to the indirect buffer. + (setq spacemacs-centered-buffer-mode nil) + ;; Don't run if the mode is enabled(we are in the indirect buffer). + (unless spacemacs--centered-buffer-mode-origin-buffer + (let* ((window (selected-window)) + (origin-buffer (window-buffer window)) + (indirect-buffer + (if (buffer-live-p + spacemacs--centered-buffer-mode-indirect-buffer) + spacemacs--centered-buffer-mode-indirect-buffer + (setq spacemacs--centered-buffer-mode-indirect-buffer + (make-indirect-buffer origin-buffer + (format "%s(centered)" + origin-buffer) + t))))) + (spacemacs//centered-buffer-mode-buffer-fringr-color-toggle origin-buffer t) + (setq spacemacs--centered-buffer-mode-indirect-buffer + indirect-buffer + spacemacs-centered-buffer-mode-default-fringe-color + (face-background 'fringe)) + (when (derived-mode-p 'org-mode) + (setq-local org-startup-folded nil) + (outline-show-all)) + (switch-to-buffer indirect-buffer nil t) + (with-mode-disabled + page-break-lines-mode + (let* ((fringe-w (spacemacs//centered-buffer-calc-fringe + window))) + (if (> fringe-w spacemacs-centered-buffer-mode-min-fringe-width) + (progn + ;; Fix visual glitch. + (spacemacs/toggle-line-numbers) + (spacemacs/toggle-line-numbers) + ;; + (setq spacemacs--centered-buffer-mode-indirect-buffers + (append (list indirect-buffer) + spacemacs--centered-buffer-mode-indirect-buffers) + spacemacs--centered-buffer-mode-origin-buffer origin-buffer + spacemacs-centered-buffer-mode t + indicate-empty-lines nil + fringes-outside-margins t + left-fringe-width fringe-w + right-fringe-width fringe-w + ;; looks better with some margin. + left-margin-width (if (or (not left-margin-width) + (= left-margin-width 0)) + 1 + left-margin-width) + spacemacs--centered-buffer-mode-text-pixel-size + (car (window-text-pixel-size window))) + (face-remap-add-relative 'fringe :background + spacemacs-centered-buffer-mode-fringe-color) + (set-window-buffer window indirect-buffer) + (advice-add 'previous-buffer + :before + #'spacemacs//centered-buffer-mode-prev-next-buffer-advice) + (advice-add 'next-buffer + :before + #'spacemacs//centered-buffer-mode-prev-next-buffer-advice) + (add-hook 'after-change-functions + #'spacemacs//centered-buffer-after-change-function + nil + t) + (add-hook 'buffer-list-update-hook + 'spacemacs//centered-buffer-buffer-list-update-fringes) + (add-hook 'window-configuration-change-hook + 'spacemacs//centered-buffer-buffer-list-update-fringes)) + (setq spacemacs--centered-buffer-mode-origin-buffer nil) + (set-buffer origin-buffer) + (spacemacs//centered-buffer-mode-buffer-fringr-color-toggle origin-buffer nil) + (kill-buffer indirect-buffer) + (setq spacemacs--centered-buffer-mode-indirect-buffer nil) + (when interact + (message "Not enough space to center the buffer!")))))))) + +(defun spacemacs//centered-buffer-mode-prev-next-buffer-advice () + "Disables `spacemacs-centered-buffer-mode' when `spacemacs/previous-buffer' +or `spacemacs/next-buffer' is called." + (when (bound-and-true-p spacemacs-centered-buffer-mode) + (spacemacs-centered-buffer-mode -1))) + +(defun spacemacs//centered-buffer-mode-disable-branch () + "Used in `spacemacs-centered-buffer-mode'." + ;; Don't run if the mode is disabled(we are not in the indirect buffer). + (when spacemacs--centered-buffer-mode-origin-buffer + (let* ((window (selected-window)) + (origin-buffer spacemacs--centered-buffer-mode-origin-buffer) + (indirect-buffer (window-buffer window))) + (setq spacemacs--centered-buffer-mode-origin-buffer nil) + (switch-to-buffer origin-buffer nil t) + (spacemacs//centered-buffer-mode-buffer-fringr-color-toggle origin-buffer nil) + (setq spacemacs--centered-buffer-mode-indirect-buffer nil) + (when (buffer-live-p indirect-buffer) + (dolist (window (get-buffer-window-list indirect-buffer 2)) + (set-window-buffer window origin-buffer)) + (kill-buffer indirect-buffer))))) + +(defun spacemacs//centered-buffer-mode-buffer-fringr-color-toggle (buffer flag) + "Change fringe color of the BUFFER if FLAG has non-nil value. +Revert changes Otherwise." + (with-current-buffer buffer + (if flag + (face-remap-add-relative 'fringe :background + spacemacs-centered-buffer-mode-fringe-color) + (face-remap-reset-base 'fringe) + (face-remap-add-relative 'fringe + :background + spacemacs-centered-buffer-mode-default-fringe-color)))) + +(defun spacemacs//centered-buffer-calc-fringe (&optional window text-pixel-size) + "Calculate fringe width for `spacemacs-centered-buffer-mode'. +Uses text-pixel-size if provided, otherwise calculates it with `window-pixel-width'." + (-(/ (- (window-pixel-width window) + (or text-pixel-size + (car (window-text-pixel-size window)))) + 2) + (if (bound-and-true-p org-indent-mode) 40 + spacemacs-centered-buffer-mode-safety-gap-width))) + +(defun spacemacs//centered-buffer-buffer-update-window-fringes (window) + "Update fringe width of WINDOW if it displays `centered-buffer-mode' buffer." + (when (and (buffer-local-value 'spacemacs--centered-buffer-mode-origin-buffer + (window-buffer window)) + ;; Might be needed because + ;; (spacemacs-centered-buffer-mode -1) kills buffers. + (buffer-live-p (window-buffer window))) + (let ((fringe-w (spacemacs//centered-buffer-calc-fringe + window + spacemacs--centered-buffer-mode-text-pixel-size))) + (if (> fringe-w spacemacs-centered-buffer-mode-min-fringe-width) + (set-window-fringes window fringe-w fringe-w t) + (spacemacs-centered-buffer-mode -1) + (when spacemacs--centered-buffer-mode-indirect-buffers + (spacemacs//centered-buffer-prune-indirect-buffer-list)))))) + +(defun spacemacs//centered-buffer-buffer-list-update-fringes () + "Update fringe width of all `centered-buffer-mode' fringes." + (dolist (frame (frame-list)) + (when (frame-live-p frame) + (dolist (window (window-list frame 2)) + (spacemacs//centered-buffer-buffer-update-window-fringes window))))) + +(defun spacemacs//centered-buffer-after-change-function (begin end length) + "Reduce `centered-buffer-mode' fringe width in case of buffer content overflow." + (dolist (window (get-buffer-window-list (current-buffer) 2 t)) + (save-excursion + (let* ((min-pos (progn (goto-char begin) + (point-at-bol))) + (max-pos (progn (goto-char end) + (point-at-eol))) + (updated-segment-max-width (car (window-text-pixel-size window min-pos max-pos)))) + (when (> updated-segment-max-width + spacemacs--centered-buffer-mode-text-pixel-size) + (setq spacemacs--centered-buffer-mode-text-pixel-size updated-segment-max-width) + (spacemacs//centered-buffer-buffer-update-window-fringes window)))))) + +(defun spacemacs//centered-buffer-prune-indirect-buffer-list () + "Remove indirect buffer from the `spacemacs--centered-buffer-mode-indirect-buffers' +if the buffer hasn't at least one live window. Disables `centered-buffer-mode' hooks +and advices if `spacemacs--centered-buffer-mode-indirect-buffers' has no elements left to +minimize the performance hit when the mode isn't used." + (dolist (buffer spacemacs--centered-buffer-mode-indirect-buffers) + (unless (or (and (buffer-live-p buffer) + (window-live-p (get-buffer-window buffer t))) + (not spacemacs--centered-buffer-mode-indirect-buffers)) + (let ((origin-buffer (buffer-local-value + 'spacemacs--centered-buffer-mode-origin-buffer + buffer))) + (when (ignore-errors (kill-buffer buffer)) + (setq spacemacs--centered-buffer-mode-indirect-buffers + (delete buffer spacemacs--centered-buffer-mode-indirect-buffers)) + (when (buffer-live-p origin-buffer) + (spacemacs//centered-buffer-mode-buffer-fringr-color-toggle origin-buffer nil) + (with-current-buffer origin-buffer + (setq spacemacs--centered-buffer-mode-indirect-buffers nil))))))) + ;; Remove hooks and advices when they are not needed anymore. + (unless spacemacs--centered-buffer-mode-indirect-buffers + (advice-remove 'previous-buffer + #'spacemacs//centered-buffer-mode-prev-next-buffer-advice) + (advice-remove 'next-buffer + #'spacemacs//centered-buffer-mode-prev-next-buffer-advice) + (remove-hook 'after-change-functions + #'spacemacs//centered-buffer-after-change-function) + (remove-hook 'buffer-list-update-hook + 'spacemacs//centered-buffer-buffer-list-update-fringes) + (remove-hook 'window-configuration-change-hook + 'spacemacs//centered-buffer-buffer-list-update-fringes))) + +(defmacro with-mode-disabled (mode &rest body) + "Evaluate BODY with MODE disabled." + (declare (indent 1) (debug t)) + `(if (not (bound-and-true-p ,mode)) + (progn ,@body) + (,mode -1) + ,@body + (,mode +1))) + +(provide 'centered-buffer-mode) + +;;; centered-buffer-mode.el ends here diff --git a/layers/+distributions/spacemacs-base/local/evil-evilified-state/evil-evilified-state.el b/layers/+distributions/spacemacs-base/local/evil-evilified-state/evil-evilified-state.el new file mode 100644 index 0000000..2e1d127 --- /dev/null +++ b/layers/+distributions/spacemacs-base/local/evil-evilified-state/evil-evilified-state.el @@ -0,0 +1,339 @@ +;;; evil-evilified-state.el --- A minimalistic evil state +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; Keywords: convenience editing evil spacemacs +;; Created: 22 Mar 2015 +;; Version: 1.0 +;; Package-Requires: ((evil "1.0.9")) + +;; This file is not part of GNU Emacs. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; Define a `evilified' evil state inheriting from `emacs' state and +;; setting a minimalist list of Vim key bindings (like navigation, search, ...) + +;; The shadowed original mode key bindings are automatically reassigned +;; following a set of rules: +;; Keys such as +;; /,:,h,j,k,l,n,N,v,V,gg,G,C-f,C-b,C-d,C-e,C-u,C-y and C-z +;; are working as in Evil. +;; Other keys will be moved according to this pattern: +;; a -> A -> C-a -> C-A +;; The first unreserved key will be used. +;; There is an exception for g, which will be directly +;; bound to C-G, since G and C-g (latest being an important escape key in Emacs) +;; are already being used. + +;;; Code: + +(require 'evil) +(require 'bind-map) + +(defvar evilified-state--evil-surround nil + "Evil surround mode variable backup.") +(make-variable-buffer-local 'evilified-state--evil-surround) + +(defvar evilified-state--normal-state-map nil + "Local backup of normal state keymap.") +(make-variable-buffer-local 'evilified-state--normal-state-map) + +(evil-define-state evilified + "Evilified state. + Hybrid `emacs state' with carrefully selected Vim key bindings. + See spacemacs conventions for more info." + :tag " " + :enable (emacs) + :message "-- EVILIFIED BUFFER --" + :cursor box) + +(bind-map spacemacs-default-map + :prefix-cmd spacemacs-cmds + :evil-keys (dotspacemacs-leader-key) + :evil-states (evilified) + :override-minor-modes t + :override-mode-name spacemacs-leader-override-mode) + +(evil-define-command evil-force-evilified-state () + "Switch to evilified state without recording current command." + :repeat abort + :suppress-operator t + (evil-evilified-state)) + +(defun evilified-state--pre-command-hook () + "Redirect key bindings to `evilified-state'. +Needed to bypass keymaps set as text properties." + (unless (bound-and-true-p isearch-mode) + (when (memq evil-state '(evilified visual)) + (let* ((map (get-char-property (point) 'keymap)) + (evilified-map (when map (cdr (assq 'evilified-state map)))) + (command (when (and evilified-map + (eq 1 (length (this-command-keys)))) + (lookup-key evilified-map (this-command-keys))))) + (when command (setq this-command command)))))) + +(defun evilified-state--setup-normal-state-keymap () + "Setup the normal state keymap." + (unless evilified-state--normal-state-map + (setq-local evilified-state--normal-state-map + (copy-keymap evil-normal-state-map))) + (setq-local evil-normal-state-map + (copy-keymap evilified-state--normal-state-map)) + (define-key evil-normal-state-map [escape] 'evil-evilified-state)) + +(defun evilified-state--restore-normal-state-keymap () + "Restore the normal state keymap." + (setq-local evil-normal-state-map evilified-state--normal-state-map)) + +(defun evilified-state--clear-normal-state-keymap () + "Clear the normal state keymap." + (setq-local evil-normal-state-map (cons 'keymap nil)) + (evil-normalize-keymaps)) + +(defun evilified-state--setup-visual-state-keymap () + "Setup the normal state keymap." + (setq-local evil-visual-state-map + (cons 'keymap (list (cons ?y 'evil-yank) + (cons 'escape 'evil-exit-visual-state))))) + +(defun evilified-state--evilified-state-on-entry () + "Setup evilified state." + (when (derived-mode-p 'magit-mode) + ;; Courtesy of evil-magit package + ;; without this set-mark-command activates visual-state which is just + ;; annoying ;; and introduces possible bugs + (remove-hook 'activate-mark-hook 'evil-visual-activate-hook t)) + (when (bound-and-true-p evil-surround-mode) + (make-local-variable 'evil-surround-mode) + (evil-surround-mode -1)) + (evilified-state--setup-normal-state-keymap) + (evilified-state--setup-visual-state-keymap) + (add-hook 'pre-command-hook 'evilified-state--pre-command-hook nil 'local) + (add-hook 'evil-visual-state-entry-hook + 'evilified-state--visual-state-on-entry nil 'local) + (add-hook 'evil-visual-state-exit-hook + 'evilified-state--visual-state-on-exit nil 'local)) + +(defun evilified-state--visual-state-on-entry () + "Setup visual state." + ;; we need to clear temporarily the normal state keymap in order to reach + ;; the mode keymap + (when (eq 'evilified evil-previous-state) + (evilified-state--clear-normal-state-keymap))) + +(defun evilified-state--visual-state-on-exit () + "Clean visual state" + (evilified-state--restore-normal-state-keymap)) + +(add-hook 'evil-evilified-state-entry-hook + 'evilified-state--evilified-state-on-entry) + +;; default key bindings for all evilified buffers +(define-key evil-evilified-state-map "/" 'evil-search-forward) +(define-key evil-evilified-state-map ":" 'evil-ex) +(define-key evil-evilified-state-map "h" 'evil-backward-char) +(define-key evil-evilified-state-map "j" 'evil-next-visual-line) +(define-key evil-evilified-state-map "k" 'evil-previous-visual-line) +(define-key evil-evilified-state-map "l" 'evil-forward-char) +(define-key evil-evilified-state-map "n" 'evil-search-next) +(define-key evil-evilified-state-map "N" 'evil-search-previous) +(define-key evil-evilified-state-map "v" 'evil-visual-char) +(define-key evil-evilified-state-map "V" 'evil-visual-line) +(define-key evil-evilified-state-map "gg" 'evil-goto-first-line) +(define-key evil-evilified-state-map "G" 'evil-goto-line) +(define-key evil-evilified-state-map (kbd "C-f") 'evil-scroll-page-down) +(define-key evil-evilified-state-map (kbd "C-b") 'evil-scroll-page-up) +(define-key evil-evilified-state-map (kbd "C-e") 'evil-scroll-line-down) +(define-key evil-evilified-state-map (kbd "C-y") 'evil-scroll-line-up) +(define-key evil-evilified-state-map (kbd "C-d") 'evil-scroll-down) +(define-key evil-evilified-state-map (kbd "C-u") 'evil-scroll-up) +(define-key evil-evilified-state-map (kbd "C-z") 'evil-emacs-state) +(setq evil-evilified-state-map-original (copy-keymap evil-evilified-state-map)) + +;; old macro +;;;###autoload +(defmacro evilified-state-evilify (mode map &rest body) + "Set `evilified state' as default for MODE. + +BODY is a list of additional key bindings to apply for the given MAP in +`evilified state'." + (let ((defkey (when body `(evil-define-key 'evilified ,map ,@body)))) + `(progn (unless ,(null mode) + (unless (or (bound-and-true-p holy-mode) + (eq 'evilified (evil-initial-state ',mode))) + (evil-set-initial-state ',mode 'evilified))) + (unless ,(null defkey) (,@defkey))))) +(put 'evilified-state-evilify 'lisp-indent-function 'defun) + +;; new macro +;;;###autoload +(defmacro evilified-state-evilify-map (map &rest props) + "Evilify MAP. + +Avaiblabe PROPS: + +`:mode SYMBOL' +A mode SYMBOL associated with MAP. Used to add SYMBOL to the list of modes +defaulting to `evilified-state'. + +`:evilified-map SYMBOL' +A map SYMBOL of an alternate evilified map, if nil then +`evil-evilified-state-map' is used. + +`:eval-after-load SYMBOL' +If specified the evilification of MAP is deferred to the loading of the feature +bound to SYMBOL. May be required for some lazy-loaded maps. + +`:pre-bindings EXPRESSIONS' +One or several EXPRESSIONS with the form `KEY FUNCTION': + KEY1 FUNCTION1 + KEY2 FUNCTION2 +These bindings are set in MAP before the evilification happens. + +`:bindings EXPRESSIONS' +One or several EXPRESSIONS with the form `KEY FUNCTION': + KEY1 FUNCTION1 + KEY2 FUNCTION2 +These bindings are set directly in evil-evilified-state-map submap. + ... +Each pair KEYn FUNCTIONn is defined in MAP after the evilification of it." + (declare (indent 1)) + (let* ((mode (plist-get props :mode)) + (evilified-map (or (plist-get props :evilified-map) + 'evil-evilified-state-map-original)) + (eval-after-load (plist-get props :eval-after-load)) + (pre-bindings (evilified-state--mplist-get props :pre-bindings)) + (bindings (evilified-state--mplist-get props :bindings)) + (defkey (when bindings `(evil-define-key 'evilified ,map ,@bindings))) + (body + (progn + (evilified-state--define-pre-bindings map pre-bindings) + `( + ;; we need to work on a local copy of the evilified keymap to + ;; prevent the original keymap from being mutated. + (setq evil-evilified-state-map (copy-keymap ,evilified-map)) + (let* ((sorted-map (evilified-state--sort-keymap + evil-evilified-state-map)) + processed) + (mapc (lambda (map-entry) + (unless (member (car map-entry) processed) + (setq processed (evilified-state--evilify-event + ,map ',map evil-evilified-state-map + (car map-entry) (cdr map-entry))))) + sorted-map) + (unless ,(null defkey) + (,@defkey))) + (unless ,(null mode) + (evilified-state--configure-default-state ',mode)))))) + (if (null eval-after-load) + `(progn ,@body) + `(with-eval-after-load ',eval-after-load (progn ,@body))))) +(put 'evilified-state-evilify-map 'lisp-indent-function 'defun) + +(defun evilified-state--define-pre-bindings (map pre-bindings) + "Define PRE-BINDINGS in MAP." + (while pre-bindings + (let ((key (pop pre-bindings)) + (func (pop pre-bindings))) + (eval `(define-key ,map key ,func))))) + +(defun evilified-state--configure-default-state (mode) + "Configure default state for the passed mode." + (evil-set-initial-state mode 'evilified)) + +(defun evilified-state--evilify-event (map map-symbol evil-map event evil-value + &optional processed pending-funcs) + "Evilify EVENT in MAP and return a list of PROCESSED events." + (if (and event (or evil-value pending-funcs)) + (let* ((kbd-event (kbd (single-key-description event))) + (map-value (lookup-key map kbd-event)) + (evil-value (or evil-value + (lookup-key evil-map kbd-event) + (car (pop pending-funcs))))) + (when evil-value + (evil-define-key 'evilified map kbd-event evil-value)) + (when map-value + (add-to-list 'pending-funcs (cons map-value event) 'append)) + (push event processed) + (setq processed (evilified-state--evilify-event + map map-symbol evil-map + (evilified-state--find-new-event event) nil + processed pending-funcs))) + (when pending-funcs + (spacemacs-buffer/warning + (concat (format (concat "Auto-evilication could not remap these " + "functions in map `%s':\n") + map-symbol) + (mapconcat (lambda (x) + (format " - `%s' originally mapped on `%s'" + (car x) (single-key-description (cdr x)))) + pending-funcs "\n"))))) + processed) + +(defun evilified-state--find-new-event (event) + "Return a new event for the evilified EVENT." + (when event + (cond + ((equal event ?\a) nil) ; C-g (cannot remap C-g) + ((equal event 32) ?') ; space + ((equal event ?/) ?\\) + ((equal event ?:) ?|) + ((and (numberp event) (<= ?a event) (<= event ?z)) (- event 32)) + ((equal event ?G) (+ (expt 2 25) ?\a)) ; G is mapped directly to C-S-g + ((and (numberp event) (<= ?A event) (<= event ?Z)) (- event 64)) + ((and (numberp event) (<= 1 event) (<= event 26)) (+ (expt 2 25) event))))) + +(defun evilified-state--sort-keymap (map) + "Sort MAP following the order: `s' > `S' > `C-s' > `C-S-s'" + (let (list) + (map-keymap (lambda (a b) (push (cons a b) list)) map) + (sort list + (lambda (a b) + (setq a (car a) b (car b)) + (if (integerp a) + (if (integerp b) + (if (and (< a 256) (< b 256)) + (> a b) + (< a b)) + t) + (if (integerp b) nil + (string< a b))))))) + +(defun evilified-state--mplist-get (plist prop) + "Get the values associated to PROP in PLIST, a modified plist. + +A modified plist is one where keys are keywords and values are +all non-keywords elements that follow it. + +If there are multiple properties with the same keyword, only the first property +and its values is returned. + +Currently this function infloops when the list is circular." + (let ((tail plist) + result) + (while (and (consp tail) (not (eq prop (car tail)))) + (pop tail)) + ;; pop the found keyword + (pop tail) + (while (and (consp tail) (not (keywordp (car tail)))) + (push (pop tail) result)) + (nreverse result))) + +(provide 'evil-evilified-state) + +;;; core-evilified-state.el ends here diff --git a/layers/+distributions/spacemacs-base/local/holy-mode/holy-mode.el b/layers/+distributions/spacemacs-base/local/holy-mode/holy-mode.el new file mode 100644 index 0000000..c5ece18 --- /dev/null +++ b/layers/+distributions/spacemacs-base/local/holy-mode/holy-mode.el @@ -0,0 +1,104 @@ +;;; holy-mode.el --- Enter the church of Emacs + +;; Copyright (C) 2014-2015 syl20bnr +;; +;; Author: Sylvain Benner +;; Keywords: convenience editing +;; Created: 18 Mar 2015 +;; Version: 1.00 +;; Package-Requires: ((emacs "24") (evil "1.0.9")) +;; URL: https://github.com/syl20bnr/spacemacs + +;; This file is not part of GNU Emacs. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;;; Code: + +(defadvice evil-insert-state (around holy-insert-to-emacs-state disable) + "Forces Emacs state." + (if (equal -1 (ad-get-arg 0)) + ad-do-it + (evil-emacs-state))) + +(defadvice evil-motion-state (around holy-motion-to-emacs-state disable) + "Forces Emacs state." + (if (equal -1 (ad-get-arg 0)) + ad-do-it + (evil-emacs-state))) + +(defadvice evil-normal-state (around holy-normal-to-emacs-state disable) + "Forces Emacs state." + (if (equal -1 (ad-get-arg 0)) + ad-do-it + (evil-emacs-state))) + +;;;###autoload +(define-minor-mode holy-mode + "Global minor mode to repulse the evil from spacemacs. + +The `insert state' is replaced by the `emacs state'." + :global t + :lighter " holy" + :group 'spacemacs + (if holy-mode + (in-nominus-patris-et-filii-et-sipritus-sancti) + (amen))) + +(defun in-nominus-patris-et-filii-et-sipritus-sancti () + "Enter the church of Emacs (wash your hands)." + ;; make all buffers' initial state emacs + (push '("." . emacs) evil-buffer-regexps) + ;; replace evil states by `emacs state' + (ad-enable-advice 'evil-insert-state 'around 'holy-insert-to-emacs-state) + (ad-enable-advice 'evil-motion-state 'around 'holy-motion-to-emacs-state) + (ad-enable-advice 'evil-normal-state 'around 'holy-normal-to-emacs-state) + (ad-activate 'evil-insert-state) + (ad-activate 'evil-motion-state) + (ad-activate 'evil-normal-state) + ;; key bindings hooks for dynamic switching of editing styles + (run-hook-with-args 'spacemacs-editing-style-hook 'emacs) + ;; initiate `emacs state' and enter the church + (holy-mode//update-states-for-current-buffers 'emacs)) + +(defun amen () + "May the force be with you my son (or not)." + ;; restore defaults + (setq evil-buffer-regexps (delete '("." . emacs) evil-buffer-regexps)) + ;; restore evil states + (ad-disable-advice 'evil-insert-state 'around 'holy-insert-to-emacs-state) + (ad-disable-advice 'evil-motion-state 'around 'holy-motion-to-emacs-state) + (ad-disable-advice 'evil-normal-state 'around 'holy-normal-to-emacs-state) + (ad-activate 'evil-insert-state) + (ad-activate 'evil-motion-state) + (ad-activate 'evil-normal-state) + ;; restore key bindings + (run-hook-with-args 'spacemacs-editing-style-hook 'vim) + ;; restore the states + (holy-mode//update-states-for-current-buffers 'vim)) + +(defun holy-mode//update-states-for-current-buffers (style) + "Update the active state in all current buffers given current STYLE." + (dolist (buffer (buffer-list)) + (with-current-buffer buffer + (cond + ((eq 'emacs style) (evil-emacs-state)) + ((and (eq 'vim style) + (eq 'emacs evil-state)) + (cond + ((memq major-mode evil-evilified-state-modes) (evil-evilified-state)) + ((memq major-mode evil-motion-state-modes) (evil-motion-state)) + (t (evil-normal-state)))))))) diff --git a/layers/+distributions/spacemacs-base/local/hybrid-mode/hybrid-mode.el b/layers/+distributions/spacemacs-base/local/hybrid-mode/hybrid-mode.el new file mode 100644 index 0000000..4d61798 --- /dev/null +++ b/layers/+distributions/spacemacs-base/local/hybrid-mode/hybrid-mode.el @@ -0,0 +1,165 @@ +;;; hybrid-mode.el --- Put one foot in the church of Emacs + +;; Copyright (C) 2012-2016 Sylvain Benner & Contributors +;; +;; Authors: Justin Burkett +;; Chris Ewald +;; Keywords: convenience editing +;; Created: 12 Aug 2015 +;; Version: 1.00 +;; Package-Requires: ((emacs "24") (evil "1.0.9")) +;; URL: https://github.com/syl20bnr/spacemacs + +;; This file is not part of GNU Emacs. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;;; Code: + +(require 'evil) + +(defvar hybrid-mode-enable-hjkl-bindings) + +(defcustom hybrid-mode-default-state 'normal + "Value of `evil-default-state' for hybrid-mode." + :group 'spacemacs + :type 'symbol) + +(defcustom hybrid-mode-enable-hjkl-bindings nil + "If non nil then packages configuration should enable hjkl navigation." + :group 'spacemacs + :type 'boolean) + +(defcustom hybrid-mode-enable-evilified-state t + "If non nil then evilified states is enabled in buffer supporting it." + :group 'spacemacs + :type 'boolean) + +(defvar hybrid-mode-default-state-backup evil-default-state + "Backup of `evil-default-state'.") + +(defadvice evil-insert-state (around hybrid-insert-to-hybrid-state disable) + "Forces Hybrid state." + (evil-hybrid-state)) + +(defadvice evil-evilified-state (around hybrid-evilified-to-hybrid-state disable) + "Forces Hybrid state." + (if (equal -1 (ad-get-arg 0)) + ad-do-it + (if hybrid-mode-enable-evilified-state + ad-do-it + ;; seems better to set the emacs state instead of hybrid for evilified + ;; buffers + (evil-emacs-state)))) + +;;;###autoload +(define-minor-mode hybrid-mode + "Global minor mode to replace insert state by hybrid state." + :global t + :lighter " hybrid" + :group 'spacemacs + (if hybrid-mode + (enable-hybrid-editing-style) + (disable-hybrid-editing-style))) + +(defun enable-hybrid-editing-style () + "Enable the hybrid editing style." + (setq hybrid-mode-default-state-backup evil-default-state + evil-default-state hybrid-mode-default-state) + ;; replace evil states by `hybrid state' + (ad-enable-advice 'evil-insert-state + 'around 'hybrid-insert-to-hybrid-state) + (ad-enable-advice 'evil-evilified-state + 'around 'hybrid-evilified-to-hybrid-state) + (ad-activate 'evil-insert-state) + (ad-activate 'evil-evilified-state) + ;; key bindings hooks for dynamic switching of editing styles + (run-hook-with-args 'spacemacs-editing-style-hook 'hybrid) + ;; initiate `hybrid state' + (hybrid-mode//update-states-for-current-buffers 'hybrid)) + +(defun disable-hybrid-editing-style () + "Disable the hybrid editing style (reverting to 'vim style)." + (setq evil-default-state hybrid-mode-default-state-backup) + ;; restore evil states + (ad-disable-advice 'evil-insert-state + 'around 'hybrid-insert-to-hybrid-state) + (ad-disable-advice 'evil-evilified-state + 'around 'hybrid-evilified-to-hybrid-state) + (ad-activate 'evil-insert-state) + (ad-activate 'evil-evilified-state) + ;; restore key bindings + (run-hook-with-args 'spacemacs-editing-style-hook 'vim) + ;; restore the states + (hybrid-mode//update-states-for-current-buffers 'vim)) + +;; This code is from evil insert state definition, any change upstream +;; should be reflected here +;; see https://bitbucket.org/lyro/evil/src/a25b848c90c7942fe89d9ec283c6bb44fb7b3cf4/evil-states.el?fileviewer=file-view-default#evil-states.el-74 +(evil-define-state hybrid + "Hybrid state for hybrid mode." + :tag " " + :cursor (bar . 2) + :message "-- HYBRID --" + :entry-hook (evil-start-track-last-insertion) + :exit-hook (evil-cleanup-insert-state evil-stop-track-last-insertion) + :input-method t + (cond + ((evil-hybrid-state-p) + (add-hook 'post-command-hook #'evil-maybe-remove-spaces) + (add-hook 'pre-command-hook #'evil-insert-repeat-hook) + (setq evil-maybe-remove-spaces t) + (unless (eq evil-want-fine-undo t) + (evil-start-undo-step))) + (t + (remove-hook 'post-command-hook #'evil-maybe-remove-spaces) + (remove-hook 'pre-command-hook #'evil-insert-repeat-hook) + (evil-maybe-remove-spaces t) + (setq evil-insert-repeat-info evil-repeat-info) + (evil-set-marker ?^ nil t) + (unless (eq evil-want-fine-undo t) + (evil-end-undo-step)) + (when evil-move-cursor-back + (when (or (evil-normal-state-p evil-next-state) + (evil-motion-state-p evil-next-state)) + (evil-move-cursor-back)))))) + +(define-key evil-hybrid-state-map [escape] 'evil-normal-state) + +;; Override stock evil function `evil-insert-state-p' +(defun evil-insert-state-p (&optional state) + "Whether the current state is insert." + (and evil-local-mode + (memq (or state evil-state) '(insert hybrid)))) + +(defun hybrid-mode//update-states-for-current-buffers (style) + "Update the active state in all current buffers given current STYLE." + (dolist (buffer (buffer-list)) + (with-current-buffer buffer + (cond + ((eq 'hybrid style) + (if (memq major-mode evil-evilified-state-modes) + (evil-evilified-state) + (funcall (intern (format "evil-%S-state" + hybrid-mode-default-state))))) + ((and (eq 'vim style) + (memq evil-state '(hybrid emacs))) + (cond + ((memq major-mode evil-evilified-state-modes) (evil-evilified-state)) + ((memq major-mode evil-motion-state-modes) (evil-motion-state)) + (t (evil-normal-state)))))))) + +(provide 'hybrid-mode) diff --git a/layers/+distributions/spacemacs-base/packages.el b/layers/+distributions/spacemacs-base/packages.el new file mode 100644 index 0000000..af212ec --- /dev/null +++ b/layers/+distributions/spacemacs-base/packages.el @@ -0,0 +1,531 @@ +;;; packages.el --- Spacemacs Base Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-base-packages + '( + (abbrev :location built-in) + ace-window + (archive-mode :location built-in) + (bookmark :location built-in) + (centered-buffer-mode :location local) + (conf-mode :location built-in) + (dired :location built-in) + (dired-x :location built-in) + (electric-indent-mode :location built-in) + (ediff :location built-in) + (eldoc :location built-in) + evil-escape + (evil-evilified-state :location local :step pre :protected t) + evil-visualstar + ;; some packages need to look for binaries, + ;; which means the path must be ready by then + (exec-path-from-shell :step pre) + help-fns+ + (hi-lock :location built-in) + (holy-mode :location local :step pre) + (hybrid-mode :location local :step pre) + (image-mode :location built-in) + (imenu :location built-in) + (linum :location built-in) + (occur-mode :location built-in) + (package-menu :location built-in) + ;; page-break-lines is shipped with spacemacs core + (page-break-lines :location built-in) + pcre2el + (process-menu :location built-in) + projectile + (recentf :location built-in) + (savehist :location built-in) + (saveplace :location built-in) + spacemacs-theme + (subword :location built-in) + (tar-mode :location built-in) + (uniquify :location built-in) + (url :location built-in) + (visual-line-mode :location built-in) + (whitespace :location built-in) + (winner :location built-in) + )) + +;; Initialization of packages + +(defun spacemacs-base/init-abbrev () + (spacemacs|hide-lighter abbrev-mode)) + +(defun spacemacs-base/init-ace-window () + (use-package ace-window + :defer t + :init + (progn + (spacemacs/set-leader-keys + "bD" 'spacemacs/ace-kill-this-buffer + ;; FIXME: Needs new binding. + ;; "wC" 'spacemacs/ace-center-window + "wD" 'spacemacs/ace-delete-window + "wM" 'ace-swap-window + "wW" 'ace-window) + ;; set ace-window keys to home-row + (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l))))) + +(defun spacemacs-base/init-archive-mode () + (evilified-state-evilify-map archive-mode-map + :mode archive-mode + :eval-after-load archive-mode)) + +(defun spacemacs-base/init-bookmark () + (use-package bookmark + :defer t + :init + (progn + (setq bookmark-default-file (concat spacemacs-cache-directory "bookmarks") + ;; autosave each change + bookmark-save-flag 1) + (spacemacs/set-leader-keys "fb" 'bookmark-jump)))) + +(defun spacemacs-base/init-conf-mode () + :init + ;; explicitly derive conf-mode from text-mode major-mode + (add-hook 'conf-mode-hook 'spacemacs/run-text-mode-hooks)) + +(defun spacemacs-base/init-dired () + (spacemacs/set-leader-keys + "ad" 'dired + "fj" 'dired-jump + "jd" 'dired-jump + "jD" 'dired-jump-other-window)) + +(defun spacemacs-base/init-dired-x () + (use-package dired-x + :commands (dired-jump + dired-jump-other-window + dired-omit-mode))) + +(defun spacemacs-base/init-electric-indent-mode () + (electric-indent-mode)) + +(defun spacemacs-base/init-visual-line-mode () + (spacemacs|diminish visual-line-mode " Ⓛ" " L")) + +;; notes from mijoharas +;; We currently just set a few variables to make it look nicer. +;; Here is my first attempt at evilifying the buffer, does not work correctly, help is very much welcome. + +;; ``` +;; (defun ediff/setup-ediff-keymaps () +;; "setup the evil ediff keymap" +;; (progn +;; (add-to-list 'evil-emacs-state-modes 'Ediff) +;; (evilified-state-evilify ediff-mode-map) +;; (spacemacs/activate-evil-leader-for-map 'ediff-mode-map) +;; ) +;; ) + +;; ;; inside the use-package function +;; (add-hook 'ediff-keymap-setup-hook 'ediff/setup-ediff-keymaps) +;; ``` +(defun spacemacs-base/init-ediff () + (use-package ediff + :defer t + :init + (progn + ;; first we set some sane defaults + (setq-default + ediff-window-setup-function 'ediff-setup-windows-plain + ;; emacs is evil and decrees that vertical shall henceforth be horizontal + ediff-split-window-function 'split-window-horizontally + ediff-merge-split-window-function 'split-window-horizontally) + ;; show org ediffs unfolded + (require 'outline) + (add-hook 'ediff-prepare-buffer-hook #'show-all) + ;; restore window layout when done + (add-hook 'ediff-quit-hook #'winner-undo)))) + +(defun spacemacs-base/init-eldoc () + (use-package eldoc + :defer t + :config + (progn + ;; enable eldoc in `eval-expression' + (add-hook 'eval-expression-minibuffer-setup-hook #'eldoc-mode) + ;; enable eldoc in IELM + (add-hook 'ielm-mode-hook #'eldoc-mode) + ;; don't display eldoc on modeline + (spacemacs|hide-lighter eldoc-mode)))) + +(defun spacemacs-base/init-evil-escape () + (use-package evil-escape + :init (evil-escape-mode) + :config (spacemacs|hide-lighter evil-escape-mode))) + +(defun spacemacs-base/init-evil-evilified-state () + (use-package evil-evilified-state) + (define-key evil-evilified-state-map (kbd dotspacemacs-leader-key) + spacemacs-default-map)) + +(defun spacemacs-base/init-evil-visualstar () + (use-package evil-visualstar + :commands (evil-visualstar/begin-search-forward + evil-visualstar/begin-search-backward) + :init + (progn + (define-key evil-visual-state-map (kbd "*") + 'evil-visualstar/begin-search-forward) + (define-key evil-visual-state-map (kbd "#") + 'evil-visualstar/begin-search-backward)))) + +(defun spacemacs-base/init-exec-path-from-shell () + (use-package exec-path-from-shell + :init (when (or (spacemacs/system-is-mac) + (spacemacs/system-is-linux) + (memq window-system '(x))) + (exec-path-from-shell-initialize)))) + +(defun spacemacs-base/init-help-fns+ () + (use-package help-fns+ + :commands (describe-keymap) + :init (spacemacs/set-leader-keys "hdK" 'describe-keymap))) + +(defun spacemacs-base/init-hi-lock () + (with-eval-after-load 'hi-lock + (spacemacs|hide-lighter hi-lock-mode))) + +(defun spacemacs-base/init-holy-mode () + (use-package holy-mode + :commands holy-mode + :init + (progn + (when (eq 'emacs dotspacemacs-editing-style) + (holy-mode)) + (spacemacs|add-toggle holy-mode + :status holy-mode + :on (progn (when (bound-and-true-p hybrid-mode) + (hybrid-mode -1)) + (holy-mode)) + :off (holy-mode -1) + :documentation "Globally toggle holy mode." + :evil-leader "tEe") + (spacemacs|diminish holy-mode " Ⓔe" " Ee")))) + +(defun spacemacs-base/init-hybrid-mode () + (use-package hybrid-mode + :config + (progn + (when (eq 'hybrid dotspacemacs-editing-style) (hybrid-mode)) + (spacemacs|add-toggle hybrid-mode + :status hybrid-mode + :on (progn (when (bound-and-true-p holy-mode) + (holy-mode -1)) + (hybrid-mode)) + :off (hybrid-mode -1) + :documentation "Globally toggle hybrid mode." + :evil-leader "tEh") + (spacemacs|diminish hybrid-mode " Ⓔh" " Eh")))) + +(defun spacemacs-base/init-image-mode () + (use-package image-mode + :config (evilified-state-evilify-map image-mode-map + :mode image-mode))) + +(defun spacemacs-base/init-imenu () + (use-package imenu + :defer t + :init (spacemacs/set-leader-keys "ji" 'imenu))) + +(defun spacemacs-base/init-linum () + (when dotspacemacs-line-numbers + (add-hook 'prog-mode-hook 'linum-mode) + (add-hook 'text-mode-hook 'linum-mode)) + (setq linum-format "%4d") + (spacemacs|add-toggle line-numbers + :mode linum-mode + :documentation "Show the line numbers." + :evil-leader "tn") + (advice-add #'linum-update-window + :after #'spacemacs/linum-update-window-scale-fix)) + +(defun spacemacs-base/init-occur-mode () + (evilified-state-evilify-map occur-mode-map + :mode occur-mode)) + +(defun spacemacs-base/init-package-menu () + (evilified-state-evilify-map package-menu-mode-map + :mode package-menu-mode)) + +(defun spacemacs-base/init-page-break-lines () + (require 'page-break-lines) + (global-page-break-lines-mode t) + (spacemacs|hide-lighter page-break-lines-mode)) + +(defun spacemacs-base/init-pcre2el () + (use-package pcre2el + :defer t + :init + (progn + (spacemacs/declare-prefix "xr" "regular expressions") + (spacemacs/declare-prefix "xre" "elisp") + (spacemacs/declare-prefix "xrp" "pcre") + (spacemacs/set-leader-keys + "xr/" 'rxt-explain + "xr'" 'rxt-convert-to-strings + "xrt" 'rxt-toggle-elisp-rx + "xrx" 'rxt-convert-to-rx + "xrc" 'rxt-convert-syntax + "xre/" 'rxt-explain-elisp + "xre'" 'rxt-elisp-to-strings + "xrep" 'rxt-elisp-to-pcre + "xret" 'rxt-toggle-elisp-rx + "xrex" 'rxt-elisp-to-rx + "xrp/" 'rxt-explain-pcre + "xrp'" 'rxt-pcre-to-strings + "xrpe" 'rxt-pcre-to-elisp + "xrpx" 'rxt-pcre-to-rx)))) + +(defun spacemacs-base/init-process-menu () + (evilified-state-evilify process-menu-mode process-menu-mode-map)) + +(defun spacemacs-base/init-projectile () + (use-package projectile + :commands (projectile-ack + projectile-ag + projectile-compile-project + projectile-dired + projectile-find-dir + projectile-find-file + projectile-find-tag + projectile-test-project + projectile-grep + projectile-invalidate-cache + projectile-kill-buffers + projectile-multi-occur + projectile-project-p + projectile-project-root + projectile-recentf + projectile-regenerate-tags + projectile-replace + projectile-replace-regexp + projectile-run-async-shell-command-in-root + projectile-run-shell-command-in-root + projectile-switch-project + projectile-switch-to-buffer + projectile-vc) + :init + (progn + ;; note for Windows: GNU find or Cygwin find must be in path to enable + ;; fast indexing + (when (and (spacemacs/system-is-mswindows) (executable-find "find")) + (setq projectile-indexing-method 'alien + projectile-generic-command "find . -type f")) + (setq projectile-sort-order 'recentf + projectile-cache-file (concat spacemacs-cache-directory + "projectile.cache") + projectile-known-projects-file (concat spacemacs-cache-directory + "projectile-bookmarks.eld")) + (spacemacs/set-leader-keys + "pb" 'projectile-switch-to-buffer + "pd" 'projectile-find-dir + "pf" 'projectile-find-file + "pF" 'projectile-find-file-dwim + "ph" 'helm-projectile + "pr" 'projectile-recentf + "pp" 'projectile-switch-project + "pv" 'projectile-vc) + (spacemacs/set-leader-keys + "p!" 'projectile-run-shell-command-in-root + "p&" 'projectile-run-async-shell-command-in-root + "p%" 'projectile-replace-regexp + "pa" 'projectile-toggle-between-implementation-and-test + "pc" 'projectile-compile-project + "pD" 'projectile-dired + "pg" 'projectile-find-tag + "p C-g" 'projectile-regenerate-tags + "pI" 'projectile-invalidate-cache + "pk" 'projectile-kill-buffers + "pR" 'projectile-replace + "pT" 'projectile-test-project)) + :config + (progn + (projectile-global-mode) + (spacemacs|hide-lighter projectile-mode)))) + +(defun spacemacs-base/init-recentf () + (use-package recentf + :defer t + :init + (progn + ;; lazy load recentf + (add-hook 'find-file-hook (lambda () (unless recentf-mode + (recentf-mode) + (recentf-track-opened-file)))) + (setq recentf-save-file (concat spacemacs-cache-directory "recentf") + recentf-max-saved-items 1000 + recentf-auto-cleanup 'never + recentf-auto-save-timer (run-with-idle-timer 600 t + 'recentf-save-list))) + :config + (progn + (add-to-list 'recentf-exclude + (expand-file-name spacemacs-cache-directory)) + (add-to-list 'recentf-exclude (expand-file-name package-user-dir)) + (add-to-list 'recentf-exclude "COMMIT_EDITMSG\\'")))) + +(defun spacemacs-base/init-savehist () + (use-package savehist + :init + (progn + ;; Minibuffer history + (setq savehist-file (concat spacemacs-cache-directory "savehist") + enable-recursive-minibuffers t ; Allow commands in minibuffers + history-length 1000 + savehist-additional-variables '(mark-ring + global-mark-ring + search-ring + regexp-search-ring + extended-command-history) + savehist-autosave-interval 60) + (savehist-mode t)))) + +(defun spacemacs-base/init-saveplace () + (use-package saveplace + :init + (progn + (if (fboundp 'save-place-mode) + ;; Emacs 25 has a proper mode for `save-place' + (save-place-mode) + (setq save-place t)) + ;; Save point position between sessions + (setq save-place-file (concat spacemacs-cache-directory "places"))))) + +(defun spacemacs-base/init-spacemacs-theme () + (use-package spacemacs-theme + :defer t + :init + (progn + (setq spacemacs-theme-comment-bg t) + (setq spacemacs-theme-org-height t)))) + +(defun spacemacs-base/init-subword () + (use-package subword + :defer t + :init + (progn + (unless (category-docstring ?U) + (define-category ?U "Uppercase") + (define-category ?u "Lowercase")) + (modify-category-entry (cons ?A ?Z) ?U) + (modify-category-entry (cons ?a ?z) ?u) + (make-variable-buffer-local 'evil-cjk-word-separating-categories) + (defun spacemacs//subword-enable-camel-case () + "Add support for camel case to subword." + (if subword-mode + (push '(?u . ?U) evil-cjk-word-separating-categories) + (setq evil-cjk-word-separating-categories + (default-value 'evil-cjk-word-separating-categories)))) + (add-hook 'subword-mode-hook 'spacemacs//subword-enable-camel-case) + (spacemacs|add-toggle camel-case-motion + :mode subword-mode + :documentation "Toggle CamelCase motions." + :evil-leader "tc") + (spacemacs|add-toggle camel-case-motion-globally + :mode global-subword-mode + :documentation "Globally toggle CamelCase motions." + :evil-leader "t C-c")) + :config + (spacemacs|diminish subword-mode " ⓒ" " c"))) + +(defun spacemacs-base/init-tar-mode () + (evilified-state-evilify-map tar-mode-map + :mode tar-mode + :eval-after-load tar-mode)) + +(defun spacemacs-base/init-uniquify () + (require 'uniquify) + ;; When having windows with repeated filenames, uniquify them + ;; by the folder they are in rather those annoying <2>,<3>,.. etc + (setq uniquify-buffer-name-style 'post-forward-angle-brackets + ;; don't screw special buffers + uniquify-ignore-buffers-re "^\\*")) + +(defun spacemacs-base/init-url () + ;; gravatars from magit use this to store their cache + (setq url-configuration-directory (concat spacemacs-cache-directory "url/"))) + +(defun spacemacs-base/init-whitespace () + (use-package whitespace + :defer t + :init + (progn + (setq spacemacs-show-trailing-whitespace t) + (defun spacemacs//show-trailing-whitespace () + (when spacemacs-show-trailing-whitespace + (set-face-attribute 'trailing-whitespace nil + :background + (face-attribute 'font-lock-comment-face + :foreground)) + (setq show-trailing-whitespace 1))) + (add-hook 'prog-mode-hook 'spacemacs//show-trailing-whitespace) + + (spacemacs|add-toggle whitespace + :mode whitespace-mode + :documentation "Display whitespace." + :evil-leader "tw") + (spacemacs|add-toggle whitespace-globally + :mode global-whitespace-mode + :documentation "Display whitespace globally." + :evil-leader "t C-w") + + (defun spacemacs//set-whitespace-style-for-diff () + "Whitespace configuration for `diff-mode'" + (setq-local whitespace-style '(face + tabs + tab-mark + spaces + space-mark + trailing + indentation::space + indentation::tab + newline + newline-mark))) + (add-hook 'diff-mode-hook 'whitespace-mode) + (add-hook 'diff-mode-hook 'spacemacs//set-whitespace-style-for-diff)) + :config + (progn + (set-face-attribute 'whitespace-space nil + :background nil + :foreground (face-attribute 'font-lock-warning-face + :foreground)) + (set-face-attribute 'whitespace-tab nil + :background nil) + (set-face-attribute 'whitespace-indentation nil + :background nil) + (spacemacs|diminish whitespace-mode " ⓦ" " w") + (spacemacs|diminish global-whitespace-mode " ⓦ" " w")))) + +(defun spacemacs-base/init-winner () + (use-package winner + :init + (progn + (winner-mode t) + (setq spacemacs/winner-boring-buffers '("*Completions*" + "*Compile-Log*" + "*inferior-lisp*" + "*Fuzzy Completions*" + "*Apropos*" + "*Help*" + "*cvs*" + "*Buffer List*" + "*Ibuffer*" + "*esh command on file*" + )) + (setq winner-boring-buffers + (append winner-boring-buffers spacemacs/winner-boring-buffers)) + (winner-mode t)))) + +(defun spacemacs-base/init-centered-buffer-mode ()) diff --git a/layers/+distributions/spacemacs-bootstrap/config.el b/layers/+distributions/spacemacs-bootstrap/config.el new file mode 100644 index 0000000..c18890a --- /dev/null +++ b/layers/+distributions/spacemacs-bootstrap/config.el @@ -0,0 +1,46 @@ +;;; config.el --- Spacemacs Bootstrap Layer configuration File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Thanks to `editorconfig-emacs' for many of these +(defvar spacemacs--indent-variable-alist + ;; Note that derived modes must come before their sources + '(((awk-mode c-mode c++-mode java-mode groovy-mode + idl-mode java-mode objc-mode pike-mode) . c-basic-offset) + (python-mode . python-indent-offset) + (cmake-mode . cmake-tab-width) + (coffee-mode . coffee-tab-width) + (cperl-mode . cperl-indent-level) + (css-mode . css-indent-offset) + (elixir-mode . elixir-smie-indent-basic) + ((emacs-lisp-mode lisp-mode) . lisp-indent-offset) + (enh-ruby-mode . enh-ruby-indent-level) + (erlang-mode . erlang-indent-level) + (js2-mode . js2-basic-offset) + (js3-mode . js3-indent-level) + ((js-mode json-mode) . js-indent-level) + (latex-mode . (LaTeX-indent-level tex-indent-basic)) + (livescript-mode . livescript-tab-width) + (mustache-mode . mustache-basic-offset) + (nxml-mode . nxml-child-indent) + (perl-mode . perl-indent-level) + (puppet-mode . puppet-indent-level) + (ruby-mode . ruby-indent-level) + (rust-mode . rust-indent-offset) + (scala-mode . scala-indent:step) + (sgml-mode . sgml-basic-offset) + (sh-mode . sh-basic-offset) + (typescript-mode . typescript-indent-level) + (web-mode . web-mode-markup-indent-offset) + (yaml-mode . yaml-indent-offset)) + "An alist where each key is either a symbol corresponding +to a major mode, a list of such symbols, or the symbol t, +acting as default. The values are either integers, symbols +or lists of these.") diff --git a/layers/+distributions/spacemacs-bootstrap/funcs.el b/layers/+distributions/spacemacs-bootstrap/funcs.el new file mode 100644 index 0000000..f186f77 --- /dev/null +++ b/layers/+distributions/spacemacs-bootstrap/funcs.el @@ -0,0 +1,138 @@ +;;; funcs.el --- Spacemacs Bootstrap Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + + +(defun spacemacs/state-color-face (state) + "Return the symbol of the face for the given STATE." + (intern (format "spacemacs-%s-face" (symbol-name state)))) + +(defun spacemacs/state-color (state) + "Return the color string associated to STATE." + (face-background (spacemacs/state-color-face state))) + +(defun spacemacs/current-state-color () + "Return the color string associated to the current state." + (face-background (spacemacs/state-color-face evil-state))) + +(defun spacemacs/state-face (state) + "Return the face associated to the STATE." + (spacemacs/state-color-face state)) + +(defun spacemacs/current-state-face () + "Return the face associated to the current state." + (let ((state (if (eq evil-state 'operator) + evil-previous-state + evil-state))) + (spacemacs/state-color-face state))) + +(defun spacemacs/set-state-faces () + (cl-loop for (state color cursor) in spacemacs-evil-cursors + do + (set-face-attribute (intern (format "spacemacs-%s-face" state)) + nil + :foreground (face-background 'mode-line)))) + +(defun evil-insert-state-cursor-hide () + (setq evil-insert-state-cursor '((hbar . 0)))) + +(defun spacemacs/evil-smart-doc-lookup () + "Version of `evil-lookup' that attempts to use + the mode specific goto-definition binding, + i.e. `SPC m h h`, to lookup the source of the definition, + while falling back to `evil-lookup'" + (interactive) + (let ((binding (key-binding (kbd (concat dotspacemacs-leader-key " mhh"))))) + (if (commandp binding) + (call-interactively binding) + (evil-lookup)))) + +(defun spacemacs//set-evil-shift-width () + "Set the value of `evil-shift-width' based on the indentation settings of the +current major mode." + (let ((shift-width + (catch 'break + (dolist (test spacemacs--indent-variable-alist) + (let ((mode (car test)) + (val (cdr test))) + (when (or (and (symbolp mode) (derived-mode-p mode)) + (and (listp mode) (apply 'derived-mode-p mode)) + (eq 't mode)) + (when (not (listp val)) + (setq val (list val))) + (dolist (v val) + (cond + ((integerp v) (throw 'break v)) + ((and (symbolp v) (boundp v)) + (throw 'break (symbol-value v)))))))) + (throw 'break (default-value 'evil-shift-width))))) + (when (and (integerp shift-width) + (< 0 shift-width)) + (setq-local evil-shift-width shift-width)))) + +(defmacro spacemacs|define-text-object (key name start end) + "Define a text object and a surround pair. +START and END are strings (not regular expressions) that define +the boundaries of the text object." + `(progn + (spacemacs|define-text-object-regexp ,key ,name + ,(regexp-quote start) + ,(regexp-quote end)) + (with-eval-after-load 'evil-surround + (push (cons (string-to-char ,key) + (if ,end + (cons ,start ,end) + ,start)) + evil-surround-pairs-alist)))) + +(defmacro spacemacs|define-text-object-regexp (key name start-regexp end-regexp) + "Define a text object. +START-REGEXP and END-REGEXP are the boundaries of the text object." + (let ((inner-name (make-symbol (concat "evil-inner-" name))) + (outer-name (make-symbol (concat "evil-outer-" name)))) + `(progn + (evil-define-text-object ,inner-name (count &optional beg end type) + (evil-select-paren ,start-regexp ,end-regexp beg end type count nil)) + (evil-define-text-object ,outer-name (count &optional beg end type) + (evil-select-paren ,start-regexp ,end-regexp beg end type count t)) + (define-key evil-inner-text-objects-map ,key (quote ,inner-name)) + (define-key evil-outer-text-objects-map ,key (quote ,outer-name))))) + +;; need to delay this macro since it relies on evil key maps to be defined +(with-eval-after-load 'evil + (defmacro evil-map (state key seq) + "Map for a given STATE a KEY to a sequence SEQ of keys. + +Can handle recursive definition only if KEY is the first key of SEQ. +Example: (evil-map visual \"<\" \" +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-bootstrap-packages + '( + (async :step bootstrap) + (bind-map :step bootstrap) + (bind-key :step bootstrap) + (diminish :step bootstrap) + (evil :step bootstrap) + (hydra :step bootstrap) + (use-package :step bootstrap) + (which-key :step bootstrap) + )) + +;; Note: `use-package' cannot be used for bootstrap packages configuration + +(defun spacemacs-bootstrap/init-async ()) + +(defun spacemacs-bootstrap/init-bind-key ()) + +(defun spacemacs-bootstrap/init-diminish () + (when (not (configuration-layer/package-usedp 'spaceline)) + (add-hook 'after-load-functions 'spacemacs/diminish-hook))) + +(defun spacemacs-bootstrap/init-bind-map () + (require 'bind-map) + (bind-map spacemacs-default-map + :prefix-cmd spacemacs-cmds + :keys (dotspacemacs-emacs-leader-key) + :evil-keys (dotspacemacs-leader-key) + :override-minor-modes t + :override-mode-name spacemacs-leader-override-mode)) + +(defun spacemacs-bootstrap/init-evil () + ;; evil-mode is mandatory for Spacemacs to work properly + ;; evil must be require explicitly, the autoload seems to not + ;; work properly sometimes. + (require 'evil) + (evil-mode 1) + + ;; Use evil as a default jump handler + (push 'evil-goto-definition spacemacs-default-jump-handlers) + + (require 'cl) + ;; State cursors + (defvar spacemacs-evil-cursors '(("normal" "DarkGoldenrod2" box) + ("insert" "chartreuse3" (bar . 2)) + ("emacs" "SkyBlue2" box) + ("hybrid" "SkyBlue2" (bar . 2)) + ("replace" "chocolate" (hbar . 2)) + ("evilified" "LightGoldenrod3" box) + ("visual" "gray" (hbar . 2)) + ("motion" "plum3" box) + ("lisp" "HotPink1" box) + ("iedit" "firebrick1" box) + ("iedit-insert" "firebrick1" (bar . 2))) + "Colors assigned to evil states with cursor definitions.") + + (cl-loop for (state color cursor) in spacemacs-evil-cursors + do + (eval `(defface ,(intern (format "spacemacs-%s-face" state)) + `((t (:background ,color + :foreground ,(face-background 'mode-line) + :inherit 'mode-line))) + (format "%s state face." state) + :group 'spacemacs)) + (set (intern (format "evil-%s-state-cursor" state)) + (list (when dotspacemacs-colorize-cursor-according-to-state color) + cursor))) + + (add-hook 'spacemacs-post-theme-change-hook 'spacemacs/set-state-faces) + + ;; put back refresh of the cursor on post-command-hook see status of: + ;; https://bitbucket.org/lyro/evil/issue/502/cursor-is-not-refreshed-in-some-cases + ;; (add-hook 'post-command-hook 'evil-refresh-cursor) + + ;; evil ex-command + (define-key evil-normal-state-map (kbd dotspacemacs-ex-command-key) 'evil-ex) + (define-key evil-visual-state-map (kbd dotspacemacs-ex-command-key) 'evil-ex) + (define-key evil-motion-state-map (kbd dotspacemacs-ex-command-key) 'evil-ex) + (setq evil-ex-substitute-global dotspacemacs-ex-substitute-global) + + ;; evil-want-Y-yank-to-eol must be set via customize to have an effect + (customize-set-variable 'evil-want-Y-yank-to-eol dotspacemacs-remap-Y-to-y$) + + ;; bind evil-jump-forward for GUI only. + (define-key evil-motion-state-map [C-i] 'evil-jump-forward) + + ;; Make the current definition and/or comment visible. + (define-key evil-normal-state-map "zf" 'reposition-window) + ;; toggle maximize buffer + (define-key evil-window-map (kbd "o") 'spacemacs/toggle-maximize-buffer) + (define-key evil-window-map (kbd "C-o") 'spacemacs/toggle-maximize-buffer) + ;; make cursor keys work + (define-key evil-window-map (kbd "") 'evil-window-left) + (define-key evil-window-map (kbd "") 'evil-window-right) + (define-key evil-window-map (kbd "") 'evil-window-up) + (define-key evil-window-map (kbd "") 'evil-window-down) + (spacemacs/set-leader-keys "re" 'evil-show-registers) + ;; motions keys for help buffers + (evil-define-key 'motion help-mode-map (kbd "") 'quit-window) + (evil-define-key 'motion help-mode-map (kbd "") 'forward-button) + (evil-define-key 'motion help-mode-map (kbd "S-") 'backward-button) + (evil-define-key 'motion help-mode-map (kbd "]") 'help-go-forward) + (evil-define-key 'motion help-mode-map (kbd "gf") 'help-go-forward) + (evil-define-key 'motion help-mode-map (kbd "[") 'help-go-back) + (evil-define-key 'motion help-mode-map (kbd "gb") 'help-go-back) + (evil-define-key 'motion help-mode-map (kbd "gh") 'help-follow-symbol) + + ;; It's better that the default value is too small than too big + (setq-default evil-shift-width 2) + ;; After major mode has changed, reset evil-shift-width + (add-hook 'after-change-major-mode-hook 'spacemacs//set-evil-shift-width 'append) + + ;; Keep the region active when shifting + (when dotspacemacs-retain-visual-state-on-shift + (evil-map visual "<" "" ">gv")) + + ;; move selection up and down + (when dotspacemacs-visual-line-move-text + (define-key evil-visual-state-map "J" (concat ":m '>+1" (kbd "RET") "gv=gv")) + (define-key evil-visual-state-map "K" (concat ":m '<-2" (kbd "RET") "gv=gv"))) + + (evil-ex-define-cmd "enew" 'spacemacs/new-empty-buffer) + + (define-key evil-normal-state-map (kbd "K") 'spacemacs/evil-smart-doc-lookup) + (define-key evil-normal-state-map (kbd "gd") 'spacemacs/jump-to-definition) + + ;; scrolling transient state + (spacemacs|define-transient-state scroll + :title "Scrolling Transient State" + :bindings + ("," evil-scroll-page-up "page up") + ("." evil-scroll-page-down "page down") + ;; half page + ("<" evil-scroll-up "half page up") + (">" evil-scroll-down "half page down")) + (spacemacs/set-leader-keys + "n," 'spacemacs/scroll-transient-state/evil-scroll-page-up + "n." 'spacemacs/scroll-transient-state/evil-scroll-page-down + "n<" 'spacemacs/scroll-transient-state/evil-scroll-up + "n>" 'spacemacs/scroll-transient-state/evil-scroll-down) + + ;; pasting transient-state + (evil-define-command spacemacs//transient-state-0 () + :keep-visual t + :repeat nil + (interactive) + (if current-prefix-arg + (progn + (setq this-command #'digit-argument) + (call-interactively #'digit-argument)) + (setq this-command #'evil-beginning-of-line + hydra-deactivate t) + (call-interactively #'evil-beginning-of-line))) + + (spacemacs|define-transient-state paste + :title "Pasting Transient State" + :doc "\n[%s(length kill-ring-yank-pointer)/%s(length kill-ring)] \ + [_C-j_/_C-k_] cycles through yanked text, [_p_/_P_] pastes the same text \ + above or below. Anything else exits." + :bindings + ("C-j" evil-paste-pop) + ("C-k" evil-paste-pop-next) + ("p" evil-paste-after) + ("P" evil-paste-before) + ("0" spacemacs//transient-state-0)) + + (when dotspacemacs-enable-paste-transient-state + (define-key evil-normal-state-map + "p" 'spacemacs/paste-transient-state/evil-paste-after) + (define-key evil-normal-state-map + "P" 'spacemacs/paste-transient-state/evil-paste-before)) + ;; fold transient state + (when (eq 'evil dotspacemacs-folding-method) + (spacemacs|define-transient-state fold + :title "Code Fold Transient State" + :doc " + Close^^ Open^^ Toggle^^ Other^^ + ───────^^────── ─────^^─────────── ─────^^──────────── ─────^^─── + [_c_] at point [_o_] at point [_a_] around point [_q_] quit + ^^ [_O_] recursively ^^ + [_m_] all [_r_] all" + :foreign-keys run + :bindings + ("a" evil-toggle-fold) + ("c" evil-close-fold) + ("o" evil-open-fold) + ("O" evil-open-fold-rec) + ("r" evil-open-folds) + ("m" evil-close-folds) + ("q" nil :exit t) + ("C-g" nil :exit t) + ("" nil :exit t))) + (spacemacs/set-leader-keys "z." 'spacemacs/fold-transient-state/body) + + ;; define text objects + (spacemacs|define-text-object "$" "dollar" "$" "$") + (spacemacs|define-text-object "*" "star" "*" "*") + (spacemacs|define-text-object "8" "block-star" "/*" "*/") + (spacemacs|define-text-object "|" "bar" "|" "|") + (spacemacs|define-text-object "%" "percent" "%" "%") + (spacemacs|define-text-object "/" "slash" "/" "/") + (spacemacs|define-text-object "_" "underscore" "_" "_") + (spacemacs|define-text-object "-" "hyphen" "-" "-") + (spacemacs|define-text-object "~" "tilde" "~" "~") + (spacemacs|define-text-object "=" "equal" "=" "=") + (evil-define-text-object evil-pasted (count &rest args) + (list (save-excursion (evil-goto-mark ?\[) (point)) + (save-excursion (evil-goto-mark ?\]) (point)))) + (define-key evil-inner-text-objects-map "P" 'evil-pasted) + ;; define text-object for entire buffer + (evil-define-text-object evil-inner-buffer (count &optional beg end type) + (list (point-min) (point-max))) + (define-key evil-inner-text-objects-map "g" 'evil-inner-buffer) + + ;; turn off evil in corelv buffers + (push '("\\*LV\\*") evil-buffer-regexps) + + ;; replace `dired-goto-file' with `helm-find-files', since `helm-find-files' + ;; can do the same thing and with fuzzy matching and other features. + (with-eval-after-load 'dired + (evil-define-key 'normal dired-mode-map "J" 'spacemacs/helm-find-files) + (define-key dired-mode-map "j" 'spacemacs/helm-find-files) + (evil-define-key 'normal dired-mode-map (kbd dotspacemacs-leader-key) + spacemacs-default-map)) + + ;; support smart 1parens-strict-mode + (when (configuration-layer/package-usedp 'smartparens) + (defadvice evil-delete-backward-char-and-join + (around spacemacs/evil-delete-backward-char-and-join activate) + (if (bound-and-true-p smartparens-strict-mode) + (call-interactively 'sp-backward-delete-char) + ad-do-it))) + + ;; Define history commands for comint + (when (eq dotspacemacs-editing-style 'vim) + (evil-define-key 'insert comint-mode-map + (kbd "C-k") 'comint-previous-input + (kbd "C-j") 'comint-next-input)) + (evil-define-key 'normal comint-mode-map + (kbd "C-k") 'comint-previous-input + (kbd "C-j") 'comint-next-input)) + +(defun spacemacs-bootstrap/init-hydra () + (require 'hydra) + (setq hydra-key-doc-function 'spacemacs//hydra-key-doc-function + hydra-head-format "[%s] ")) + +(defun spacemacs-bootstrap/init-use-package () + (require 'use-package) + (setq use-package-verbose init-file-debug + ;; inject use-package hooks for easy customization of stock package + ;; configuration + use-package-inject-hooks t)) + +(defun spacemacs-bootstrap/init-which-key () + (require 'which-key) + + (spacemacs|add-toggle which-key + :mode which-key-mode + :documentation + "Display a buffer with available key bindings." + :evil-leader "tK") + + (spacemacs/set-leader-keys "hk" 'which-key-show-top-level) + + ;; Replace rules for better naming of functions + (let ((new-descriptions + ;; being higher in this list means the replacement is applied later + '( + ("spacemacs/\\(.+\\)" . "\\1") + ("spacemacs/toggle-\\(.+\\)" . "\\1") + ("select-window-\\([0-9]\\)" . "window \\1") + ("spacemacs/alternate-buffer" . "last buffer") + ("spacemacs/toggle-mode-line-\\(.+\\)" . "\\1") + ("avy-goto-word-or-subword-1" . "avy word") + ("shell-command" . "shell cmd") + ("spacemacs/default-pop-shell" . "open shell") + ("spacemacs/helm-project-smart-do-search-region-or-symbol" . "smart search w/input") + ("spacemacs/helm-project-smart-do-search" . "smart search") + ("spacemacs/search-project-auto-region-or-symbol" . "search project w/input") + ("spacemacs/search-project-auto" . "search project") + ("helm-descbinds" . "show keybindings") + ("sp-split-sexp" . "split sexp") + ("avy-goto-line" . "avy line") + ("universal-argument" . "universal arg") + ("er/expand-region" . "expand region") + ("helm-apropos" . "apropos") + ("spacemacs/toggle-hybrid-mode" . "hybrid (hybrid-mode)") + ("spacemacs/toggle-holy-mode" . "emacs (holy-mode)") + ("evil-lisp-state-\\(.+\\)" . "\\1") + ("\\(.+\\)-transient-state/\\(.+\\)" . "\\2") + ("\\(.+\\)-transient-state/body" . "\\1-transient-state")))) + (dolist (nd new-descriptions) + ;; ensure the target matches the whole string + (push (cons (concat "\\`" (car nd) "\\'") (cdr nd)) + which-key-description-replacement-alist))) + + (dolist (leader-key `(,dotspacemacs-leader-key ,dotspacemacs-emacs-leader-key)) + (which-key-add-key-based-replacements + (concat leader-key " m") "major mode commands" + (concat leader-key " " dotspacemacs-emacs-command-key) "M-x")) + + (which-key-declare-prefixes + dotspacemacs-leader-key '("root" . "Spacemacs root") + dotspacemacs-emacs-leader-key '("root" . "Spacemacs root") + (concat dotspacemacs-leader-key " m") + '("major-mode-cmd" . "Major mode commands") + (concat dotspacemacs-emacs-leader-key " m") + '("major-mode-cmd" . "Major mode commands")) + + ;; disable special key handling for spacemacs, since it can be + ;; disorienting if you don't understand it + (pcase dotspacemacs-which-key-position + (`right (which-key-setup-side-window-right)) + (`bottom (which-key-setup-side-window-bottom)) + (`right-then-bottom (which-key-setup-side-window-right-bottom))) + + (setq which-key-special-keys nil + which-key-use-C-h-for-paging t + which-key-prevent-C-h-from-cycling t + which-key-echo-keystrokes 0.02 + which-key-max-description-length 32 + which-key-sort-order 'which-key-key-order-alpha + which-key-idle-delay dotspacemacs-which-key-delay + which-key-allow-evil-operators t) + + (which-key-mode) + (spacemacs|diminish which-key-mode " Ⓚ" " K")) diff --git a/layers/+distributions/spacemacs/layers.el b/layers/+distributions/spacemacs/layers.el new file mode 100644 index 0000000..eb652d8 --- /dev/null +++ b/layers/+distributions/spacemacs/layers.el @@ -0,0 +1,28 @@ +;;; layers.el --- Spacemacs Layer layers File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(configuration-layer/declare-layers '(spacemacs-base + spacemacs-completion + spacemacs-layouts + spacemacs-editing + spacemacs-editing-visual + spacemacs-evil + spacemacs-language + spacemacs-misc + spacemacs-ui + spacemacs-ui-visual + spacemacs-org)) +;; If the user has not explicitly declared `helm' or `ivy' +;; and they are using the standard distribution, assume they +;; want `helm' completion. +(unless (or (configuration-layer/layer-usedp 'ivy) + (configuration-layer/layer-usedp 'helm)) + (configuration-layer/declare-layers '(helm))) diff --git a/layers/+emacs/better-defaults/README.org b/layers/+emacs/better-defaults/README.org new file mode 100644 index 0000000..fb7f9a4 --- /dev/null +++ b/layers/+emacs/better-defaults/README.org @@ -0,0 +1,75 @@ +#+TITLE: Better Defaults layer + +[[file:img/emacs.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#smart-line-navigation][Smart line navigation]] + - [[#spacemacsbackward-kill-word-or-region][=spacemacs/backward-kill-word-or-region=]] + - [[#fill-or-unfill-paragraph][Fill or unfill paragraph]] + - [[#install][Install]] + - [[#configuration][Configuration]] + - [[#key-bindings][Key bindings]] + +* Description +This layer enhances the default commands of Emacs and is primarily intended to +be used with the =emacs= editing style as it does not change anything in the Vim +key bindings. + +However the =emacs= editing style is not required, you can still use this layer +while you are using the =vim= editing style if you have some kind of mixed +style. + +The commands defined in this layer are taken from various sources like [[https://github.com/bbatsov/prelude][Prelude]]. + +* Features +** Smart line navigation +Subsequent presses of ~C-a~ toggles between the beginning of the line and the +first non-whitespace character. + +Similarly, subsequent presses of ~C-e~ will toggle between the end of the code +and the end of the comments. + +** =spacemacs/backward-kill-word-or-region= +A combination of =kill-region= and =backward-kill-word=, depending on whether +there is an active region. If there's an active region kill that. If not kill +the preceding word. + +** Fill or unfill paragraph +Pressing ~M-q~ for the first time fills current paragraph and pressing ~M-q~ for +the second time unfills it. Note that some modes override this key binding so +it's not available everywhere. Due to implementation details unfilling doesn't +work when called twice via ~M-x~. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =better-defaults= to the existing =dotspacemacs-configuration-layers= list in +this file. + +* Configuration +Choose if ~C-a~ first brings you to the beginning of the line or the beginning of +the code (first non-whitespace character). + +#+BEGIN_SRC emacs-lisp + (better-defaults :variables + better-defaults-move-to-beginning-of-code-first t) +#+END_SRC + +Choose if ~C-e~ first brings you to the end of the line or the end of the code +(before or after comments). + +#+BEGIN_SRC emacs-lisp + (better-defaults :variables + better-defaults-move-to-end-of-code-first nil) +#+END_SRC + +* Key bindings + +| Key Binding | Description | +|-------------+----------------------------------------------------------------------------------| +| ~C-a~ | move to beginning of line or code | +| ~C-e~ | move to end of line or code | +| ~C-w~ | backward kill word or region | +| ~C-y~ | Automatically indenting after pasting. With prefix argument, paste text as it is | +| ~M-q~ | fill or unfill current paragraph | diff --git a/layers/+emacs/better-defaults/config.el b/layers/+emacs/better-defaults/config.el new file mode 100644 index 0000000..8741cc8 --- /dev/null +++ b/layers/+emacs/better-defaults/config.el @@ -0,0 +1,20 @@ +;;; config.el --- Better Emacs Defaults Layer configuration variables File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Thomas de Beauchêne +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar better-defaults-move-to-beginning-of-code-first t + "when t, first stroke of C-a will move the cursor to the beginning of code. +When nil, first stroke will go to the beginning of line. +Subsequent strokes will toggle between beginning of line and beginning of code.") + +(defvar better-defaults-move-to-end-of-code-first nil + "when t, first stroke of C-e will move the cursor to the end of code (before comments). +When nil, first stroke will go to the end of line (after comments). +Subsequent strokes will toggle between end of line and end of code.") diff --git a/layers/+emacs/better-defaults/funcs.el b/layers/+emacs/better-defaults/funcs.el new file mode 100644 index 0000000..b46ae55 --- /dev/null +++ b/layers/+emacs/better-defaults/funcs.el @@ -0,0 +1,32 @@ +;;; funcs.el --- Better Emacs Defaults Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs/backward-kill-word-or-region (&optional arg) + "Calls `kill-region' when a region is active and +`backward-kill-word' otherwise. ARG is passed to +`backward-kill-word' if no region is active." + (interactive "p") + (if (region-active-p) + ;; call interactively so kill-region handles rectangular selection + ;; correctly (see https://github.com/syl20bnr/spacemacs/issues/3278) + (call-interactively #'kill-region) + (backward-kill-word arg))) + +;; http://endlessparentheses.com/fill-and-unfill-paragraphs-with-a-single-key.html +(defun spacemacs/fill-or-unfill () + "Like `fill-paragraph', but unfill if used twice." + (interactive) + (let ((fill-column + (if (eq last-command 'spacemacs/fill-or-unfill) + (progn (setq this-command nil) + (point-max)) + fill-column))) + (call-interactively #'fill-paragraph))) diff --git a/layers/+emacs/better-defaults/img/emacs.png b/layers/+emacs/better-defaults/img/emacs.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab43d704be287392c52fd10d6b4fb2bc35a4a0f GIT binary patch literal 13462 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 Eg2&h3=l}o! literal 0 HcmV?d00001 diff --git a/layers/+emacs/better-defaults/keybindings.el b/layers/+emacs/better-defaults/keybindings.el new file mode 100644 index 0000000..68c6862 --- /dev/null +++ b/layers/+emacs/better-defaults/keybindings.el @@ -0,0 +1,13 @@ +;;; keybindings.el --- Better Emacs Defaults Layer key bindings File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(global-set-key (kbd "C-w") 'spacemacs/backward-kill-word-or-region) +(global-set-key [remap fill-paragraph] #'spacemacs/fill-or-unfill) diff --git a/layers/+emacs/better-defaults/packages.el b/layers/+emacs/better-defaults/packages.el new file mode 100644 index 0000000..ef7fb2b --- /dev/null +++ b/layers/+emacs/better-defaults/packages.el @@ -0,0 +1,27 @@ +;;; packages.el --- Better Emacs Defaults Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Thomas de Beauchêne +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defconst better-defaults-packages + '(mwim) + "The list of Lisp packages required by the mwim layer.") + +(defun better-defaults/init-mwim () + (use-package mwim + :defer t + :init + (progn + (if better-defaults-move-to-beginning-of-code-first + (global-set-key (kbd "C-a") 'mwim-beginning-of-code-or-line) + (global-set-key (kbd "C-a") 'mwim-beginning-of-line-or-code)) + + (if better-defaults-move-to-end-of-code-first + (global-set-key (kbd "C-e") 'mwim-end-of-code-or-line) + (global-set-key (kbd "C-e") 'mwim-end-of-line-or-code))))) diff --git a/layers/+emacs/ibuffer/README.org b/layers/+emacs/ibuffer/README.org new file mode 100644 index 0000000..b351f37 --- /dev/null +++ b/layers/+emacs/ibuffer/README.org @@ -0,0 +1,44 @@ +#+TITLE: IBuffer layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#grouping-buffers][Grouping buffers]] + - [[#key-bindings][Key bindings]] + +* Description + +This layer configures Emacs ibuffer for Spacemacs. + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =ibuffer= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Grouping buffers + +Buffers can be grouped by major-modes or projectile projects. +By default buffers are grouped by major-modes. + +To change how buffers are grouped set the layer variable +=ibuffer-group-buffers-by= to one of the following supported values: +- =modes= to group buffers by major-modes (default) +- =projects= to group buffers by projectile projects +- =nil= to not group buffers + +Example: + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (ibuffer :variables ibuffer-group-buffers-by 'projects))) +#+END_SRC + +* Key bindings + +| Key Binding | Description | +|-------------+-------------------| +| ~SPC b B~ | open ibuffer menu | + +*Note:* The layer will also replace regular ~C-x C-b~ by ibuffer. diff --git a/layers/+emacs/ibuffer/config.el b/layers/+emacs/ibuffer/config.el new file mode 100644 index 0000000..ec0a67f --- /dev/null +++ b/layers/+emacs/ibuffer/config.el @@ -0,0 +1,15 @@ +;;; config.el --- ibuffer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Aleksandr Guljajev +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar ibuffer-group-buffers-by 'modes + "If non nil ibuffer will group the buffers according to the passed symbol. +The supported values are `modes' to group by major-modes and `projects' to +group by projectile projects.") diff --git a/layers/+emacs/ibuffer/funcs.el b/layers/+emacs/ibuffer/funcs.el new file mode 100644 index 0000000..0ded243 --- /dev/null +++ b/layers/+emacs/ibuffer/funcs.el @@ -0,0 +1,46 @@ +;;; funcs.el --- ibuffer Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Aleksandr Guljajev +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs//ibuffer-get-major-modes-ibuff-rules-list (mm-list result-list) + (if mm-list + (let* ((cur-mm (car mm-list)) + (next-res-list-el `(,(symbol-name cur-mm) (mode . ,cur-mm)))) + (spacemacs//ibuffer-get-major-modes-ibuff-rules-list + (cdr mm-list) (cons next-res-list-el result-list))) + result-list)) + +(defun spacemacs//ibuffer-get-major-modes-list () + (mapcar + (function (lambda (buffer) + (buffer-local-value 'major-mode (get-buffer buffer)))) + (buffer-list (selected-frame)))) + +(defun spacemacs//ibuffer-create-buffs-group () + (interactive) + (let* ((ignore-modes '(Buffer-menu-mode + compilation-mode + minibuffer-inactive-mode + ibuffer-mode + magit-process-mode + messages-buffer-mode + fundamental-mode + completion-list-mode + help-mode + Info-mode)) + (cur-bufs + (list (cons "Home" + (spacemacs//ibuffer-get-major-modes-ibuff-rules-list + (cl-set-difference + (remove-duplicates + (spacemacs//ibuffer-get-major-modes-list)) + ignore-modes) '()))))) + (setq ibuffer-saved-filter-groups cur-bufs) + (ibuffer-switch-to-saved-filter-groups "Home"))) diff --git a/layers/+emacs/ibuffer/packages.el b/layers/+emacs/ibuffer/packages.el new file mode 100644 index 0000000..944f229 --- /dev/null +++ b/layers/+emacs/ibuffer/packages.el @@ -0,0 +1,48 @@ +;;; packages.el --- ibuffer Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Aleksandr Guljajev +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq ibuffer-packages + '( + ibuffer + ibuffer-projectile + )) + +(defun ibuffer/init-ibuffer() + (use-package ibuffer + :defer t + :init + (progn + (spacemacs/set-leader-keys "bB" 'ibuffer) + (global-set-key (kbd "C-x C-b") 'ibuffer) + (defun spacemacs//ibuffer-group-by-modes () + "Group buffers by modes." + (when (eq 'modes ibuffer-group-buffers-by) + (spacemacs//ibuffer-create-buffs-group))) + (add-hook 'ibuffer-hook 'spacemacs//ibuffer-group-by-modes) + + ;; Use ibuffer to provide :ls + (evil-ex-define-cmd "buffers" 'ibuffer)) + :config + (evilified-state-evilify-map ibuffer-mode-map + :mode ibuffer-mode))) + +(defun ibuffer/init-ibuffer-projectile() + (use-package ibuffer-projectile + :defer t + :init + (progn + (defun spacemacs//ibuffer-group-by-projects () + "Group buffers by projects." + (when (eq 'projects ibuffer-group-buffers-by) + (ibuffer-projectile-set-filter-groups) + (unless (eq ibuffer-sorting-mode 'alphabetic) + (ibuffer-do-sort-by-alphabetic)))) + (add-hook 'ibuffer-hook 'spacemacs//ibuffer-group-by-projects)))) diff --git a/layers/+emacs/org/README.org b/layers/+emacs/org/README.org new file mode 100644 index 0000000..0b64c02 --- /dev/null +++ b/layers/+emacs/org/README.org @@ -0,0 +1,493 @@ +#+TITLE: Org layer + +[[file:img/org.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features:]] + - [[#bibtex][BibTeX]] + - [[#important-note][Important Note]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#github-support][Github support]] + - [[#twitter-bootstrap-support][Twitter Bootstrap support]] + - [[#gnuplot-support][Gnuplot support]] + - [[#revealjs-support][Reveal.js support]] + - [[#different-bullets][Different bullets]] + - [[#project-support][Project support]] + - [[#mode-line-support][Mode line support]] + - [[#key-bindings][Key bindings]] + - [[#org][Org]] + - [[#org-with-evil-org-mode][Org with evil-org-mode]] + - [[#tables][Tables]] + - [[#tree][Tree]] + - [[#element-insertion][Element insertion]] + - [[#links][Links]] + - [[#emphasis][Emphasis]] + - [[#tagging][Tagging]] + - [[#navigating-in-calendar][Navigating in calendar]] + - [[#capture-buffers-and-src-blocks][Capture buffers and src blocks]] + - [[#org-agenda][Org agenda]] + - [[#keybindings][Keybindings]] + - [[#org-agenda-transient-state][Org agenda transient state]] + - [[#pomodoro][Pomodoro]] + - [[#presentation][Presentation]] + - [[#org-mime][Org-MIME]] + - [[#org-download][Org-download]] + - [[#org-projectile][Org-projectile]] + +* Description +This layer enables [[http://orgmode.org/][org mode]] for Spacemacs. + +** Features: +- Vim inspired key bindings are provided by [[https://github.com/edwtjo/evil-org-mode][evil-org-mode]] +- Nicer bullet via [[https://github.com/sabof/org-bullets][org-bullets]] +- A [[http://pomodorotechnique.com/][pomodoro method]] integration via [[https://github.com/lolownia/org-pomodoro][org-pomodoro]] +- Presentation mode via [[https://github.com/rlister/org-present][org-present]] +- Insertion of images via [[https://github.com/abo-abo/org-download][org-download]] +- Project-specific TODOs via [[https://github.com/IvanMalison/org-projectile][org-projectile]] + +** BibTeX +For more extensive support of references through BibTeX files, have a look at +the [[../+lang/bibtex][BibTeX layer]]. + +** Important Note +Since version 0.104, spacemacs uses the =org= version from the org ELPA +repository instead of the one shipped with emacs. Then, any =org= related code +should not be loaded before =dotspacemacs/user-config=, otherwise both versions +will be loaded and will conflict. + +Because of autoloading, calling to =org= functions will trigger the loading up +of the =org= shipped with emacs which will induce conflicts. +One way to avoid conflict is to wrap your =org= config code in a +=with-eval-after-load= block like this: + +#+BEGIN_SRC emacs-lisp + (with-eval-after-load 'org + ;; here goes your Org config :) + ;; .... + ) +#+END_SRC + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =org= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Github support +To install Github related extensions like [[https://github.com/larstvei/ox-gfm][ox-gfm]] to export to Github +flavored markdown set the variable =org-enable-github-support= to =t=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (org :variables org-enable-github-support t))) +#+END_SRC + +** Twitter Bootstrap support +To install the Twitter Boostrap extension (from [[https://github.com/marsmining/ox-twbs][ox-twbs]]), which enables twitter +bootstrap formatted html, then set the variable =org-enable-bootstrap-support= +to =t=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (org :variables + org-enable-bootstrap-support t))) +#+END_SRC + +** Gnuplot support +Org-mode support the plotting of data within tables through [[http://www.gnuplot.info/][Gnuplot]] as +demonstrated [[http://orgmode.org/worg/org-tutorials/org-plot.html][here]]; unfortunately, this is [[https://github.com/bruceravel/gnuplot-mode/issues/15][not terribly well supported]] on Windows +at this stage. It is possible to disable the configuration of gnuplot support +as usual by adding the package =gnuplot= to your =dotspacemacs-excluded-packages= +variable. + +** Reveal.js support +To enable the export of your org file as a [[http://lab.hakim.se/reveal-js/][reveal.js]] presentation, set the +variable =org-enable-reveal-js-support= to =t=. This will install the [[https://github.com/yjwen/org-reveal/][org-reveal]] +extension. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers + '((org :variables org-enable-reveal-js-support t))) +#+END_SRC + +In order to be able to use org-reveal, download =reveal.js= from its +[[http://lab.hakim.se/reveal-js/#/][homepage]] and set =org-reveal-js= to the +download path, as described in the [[https://github.com/yjwen/org-reveal#obtain-revealjs][manual]]. Alternatively, add the following line +to each =.org= file you want to process: + +#+BEGIN_EXAMPLE +#+REVEAL_ROOT: http://cdn.jsdelivr.net/reveal.js/3.0.0/ +#+END_EXAMPLE + +** Different bullets +You can tweak the bullets displayed in the org buffer in the function +=dotspacemacs/user-config= of your dotfile by setting the variable +=org-bullets-bullet-list=. By default the list is set to =("◉" "○" "✸" "✿")=. + +#+BEGIN_SRC emacs-lisp + (setq org-bullets-bullet-list '("■" "◆" "▲" "▶")) +#+END_SRC + +** Project support +Set the layer variable =org-projectile-file= to the filename where you want to +store project-specific TODOs. If this is an absolute path, all todos will be +stored in the same file (organized by project), whereas if it is just a single +filename, todos will be stored in each project root. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers + '((org :variables org-projectile-file "TODOs.org"))) +#+END_SRC + +The TODO files are not added to the agenda automatically. You can do this with +the following snippet. Note that this may have unintended consequences until +[[https://github.com/IvanMalison/org-projectile/issues/10][this bug]] is fixed. + +#+BEGIN_SRC emacs-lisp + (with-eval-after-load 'org-agenda + (require 'org-projectile) + (push (org-projectile:todo-files) org-agenda-files)) +#+END_SRC + +** Mode line support +To temporarily enable mode line display of org clock, press ~SPC t m c~. + +To permanently enable mode line display of org clock, add this snippet to your +=dotspacemacs/user-config= function: + +#+BEGIN_SRC elisp + (setq spaceline-org-clock-p t) +#+END_SRC + +* Key bindings +** Org + +| Key Binding | Description | +|-------------+--------------------------------| +| ~SPC a o #~ | org agenda list stuck projects | +| ~SPC a o /~ | org occur in agenda files | +| ~SPC a o a~ | org agenda list | +| ~SPC a o c~ | org capture | +| ~SPC a o e~ | org store agenda views | +| ~SPC a o l~ | org store link | +| ~SPC a o m~ | org tags view | +| ~SPC a o o~ | org agenda | +| ~SPC a o O~ | org clock out | +| ~SPC a o s~ | org search view | +| ~SPC a o t~ | org todo list | +| ~SPC C c~ | org-capture | + +** Org with evil-org-mode + +| Key Binding | Description | +|----------------------------------------------+----------------------------------------------| +| ~SPC m ~ | org-ctrl-c-ctrl-c | +| ~SPC m *~ | org-ctrl-c-star | +| ~SPC m RET~ | org-ctrl-c-ret | +| ~SPC m -~ | org-ctrl-c-minus | +| ~SPC m '​~ | org-edit-special | +| ~SPC m ^~ | org-sort | +| ~SPC m /~ | org-sparse-tree | +| ~SPC m .~ | org-time-stamp | +| ~SPC m !~ | org-time-stamp-inactive | +| ~SPC m a~ | org-agenda | +| ~SPC m b~ | org-tree-to-indirect-buffer | +| ~SPC m A~ | org-archive-subtree | +| ~SPC m c~ | org-capture | +| ~SPC m C~ | evil-org-recompute-clocks | +| ~SPC m d~ | org-deadline | +| ~SPC m D~ | org-insert-drawer | +| ~SPC m e~ | org-export-dispatch | +| ~SPC m f~ | org-set-effort | +| ~SPC m I~ | org-clock-in | +| ~SPC m l~ | org-open-at-point | +| ~SPC m n~ | org-narrow-to-subtree | +| ~SPC m N~ | widen | +| ~SPC m O~ | org-clock-out | +| ~SPC m P~ | org-set-property | +| ~SPC m q~ | org-clock-cancel | +| ~SPC m R~ | org-refile | +| ~SPC m s~ | org-schedule | +| ~SPC m T~ | org-show-todo-tree | +| ~SPC m L~ | org-shiftright | +| ~SPC m H~ | org-shiftleft | +| ~SPC m K~ | org-shiftup | +| ~SPC m J~ | org-shiftdown | +| ~SPC m C-S-l~ | org-shiftcontrolright | +| ~SPC m C-S-h~ | org-shiftcontrolleft | +| ~SPC m C-S-j~ | org-shiftcontroldown | +| ~SPC m C-S-k~ | org-shiftcontrolup | +| ~SPC s j~ | spacemacs/jump-in-buffer (jump to a heading) | + +*** Tables + +| Key Binding | Description | +|---------------+----------------------------------------------------------------------------| +| ~SPC m t a~ | Align the table at point by aligning all vertical bars | +| ~SPC m t b~ | Blank the current table field or active region | +| ~SPC m t c~ | Convert from =org-mode= table to table.el and back | +| ~SPC m t d c~ | Delete a column from the table | +| ~SPC m t d r~ | Delete the current row or horizontal line from the table | +| ~SPC m t e~ | Replace the table field value at the cursor by the result of a calculation | +| ~SPC m t E~ | Export table to a file, with configurable format | +| ~SPC m t h~ | Go to the previous field in the table | +| ~SPC m t H~ | Move column to the left | +| ~SPC m t i c~ | Insert a new column into the table | +| ~SPC m t i h~ | Insert a horizontal-line below the current line into the table | +| ~SPC m t i H~ | Insert a hline and move to the row below that line | +| ~SPC m t i r~ | Insert a new row above the current line into the table | +| ~SPC m t I~ | Import a file as a table | +| ~SPC m t j~ | Go to the next row (same column) in the current table | +| ~SPC m t J~ | Move table row down | +| ~SPC m t K~ | Move table row up | +| ~SPC m t l~ | Go to the next field in the current table, creating new lines as needed | +| ~SPC m t L~ | Move column to the right | +| ~SPC m t n~ | Query for a size and insert a table skeleton | +| ~SPC m t N~ | Use the table.el package to insert a new table | +| ~SPC m t p~ | Plot the table using org-plot/gnuplot | +| ~SPC m t r~ | Recalculate the current table line by applying all stored formulas | +| ~SPC m t s~ | Sort table lines according to the column at point | +| ~SPC m t t f~ | Toggle the formula debugger in tables | +| ~SPC m t t o~ | Toggle the display of Row/Column numbers in tables | +| ~SPC m t w~ | Wrap several fields in a column like a paragraph | + +*** Tree + +| Key Binding | Description | +|-------------+-----------------------| +| ~SPC m S l~ | org-demote-subtree | +| ~SPC m S h~ | org-promote-subtree | +| ~SPC m S k~ | org-move-subtree-up | +| ~SPC m S j~ | org-move-subtree-down | + +| Key Binding | Description | +|-------------+---------------------------------| +| ~TAB~ | org-cycle | +| ~$~ | org-end-of-line | +| ~^~ | org-beginning-of-line | +| ~<~ | org-metaleft | +| ~>~ | org-metaright | +| ~gh~ | outline-up-heading | +| ~gj~ | org-forward-heading-same-level | +| ~gk~ | org-backward-heading-same-level | +| ~gl~ | outline-next-visible-heading | +| ~t~ | org-todo | +| ~T~ | org-insert-todo-heading nil | +| ~H~ | org-beginning-of-line | +| ~L~ | org-end-of-line | +| ~o~ | always-insert-item | +| ~O~ | org-open-above | + +| Key Binding | Description | +|-------------+--------------------------------------------| +| ~M-l~ | org-metaright | +| ~M-h~ | org-metaleft | +| ~M-k~ | org-metaup | +| ~M-j~ | org-metadown | +| ~M-L~ | org-shiftmetaright | +| ~M-H~ | org-shiftmetaleft | +| ~M-K~ | org-shiftmetaup | +| ~M-J~ | org-shiftmetadown | +| ~M-o~ | org-insert-heading+org-metaright | +| ~M-t~ | org-insert-todo-heading nil+ org-metaright | + +*** Element insertion + +| Key Binding | Description | +|-------------+----------------------------------| +| ~SPC m h i~ | org-insert-heading-after-current | +| ~SPC m h I~ | org-insert-heading | +| ~SPC m h s~ | org-insert-subheading | +| ~SPC m i f~ | org-insert-footnote | +| ~SPC m i l~ | org-insert-link | + +*** Links + +| Key Binding | Description | +|-------------+-------------------| +| ~RET~ | org-open-at-point | + +*** Emphasis + +| Key Binding | Description | +|-------------+----------------------------| +| ~SPC m x b~ | make region bold | +| ~SPC m x c~ | make region code | +| ~SPC m x i~ | make region italic | +| ~SPC m x r~ | clear region emphasis | +| ~SPC m x s~ | make region strike-through | +| ~SPC m x u~ | make region underline | +| ~SPC m x v~ | make region verbose | + +*** Tagging + +| Key Binding | Description | +|-------------+--------------| +| ~SPC m :~ | org-set-tags | + +*** Navigating in calendar + +| Key Binding | Description | +|-------------+--------------------| +| ~M-l~ | One day forward | +| ~M-h~ | One day backward | +| ~M-j~ | One week forward | +| ~M-k~ | One week backward | +| ~M-L~ | One month forward | +| ~M-H~ | One month backward | +| ~M-J~ | One year forward | +| ~M-K~ | One year backward | + +** Capture buffers and src blocks +=org-capture-mode= and =org-src-mode= both support the confirm and abort +conventions. + +| Key Binding | Description | +|----------------------------------------------+----------------------------------------| +| ~SPC m ~ | confirm in =org-capture-mode= | +| ~SPC m '​~ | confirm in =org-src-mode= | +| ~SPC m c~ | confirm | +| ~SPC m a~ | abort | +| ~SPC m k~ | abort | +| ~SPC m r~ | org-capture-refile in org-capture-mode | + +** Org agenda + +*** Keybindings +The evilified org agenda supports the following bindings: + +| Key Binding | Description | +|----------------------+-----------------------------------| +| ~M-SPC~ or ~s-M-SPC~ | org-agenda transient state | +| ~SPC m :~ | org-agenda-set-tags | +| ~SPC m a~ | org-agenda | +| ~SPC m d~ | org-agenda-deadline | +| ~SPC m f~ | org-agenda-set-effort | +| ~SPC m I~ | org-agenda-clock-in | +| ~SPC m O~ | org-agenda-clock-out | +| ~SPC m p~ | org-pomodoro (if package is used) | +| ~SPC m P~ | org-agenda-set-property | +| ~SPC m q~ | org-agenda-refile | +| ~SPC m Q~ | org-agenda-clock-cancel | +| ~SPC m s~ | org-agenda-schedule | +| ~M-j~ | next item | +| ~M-k~ | previous item | +| ~M-h~ | earlier view | +| ~M-l~ | later view | +| ~gr~ | refresh | +| ~gd~ | toggle grid | +| ~C-v~ | change view | +| ~RET~ | org-agenda-goto | +| ~M-RET~ | org-agenda-show-and-scroll-up | + +*** Org agenda transient state +Use ~M-SPC~ or ~s-M-SPC~ in an org agenda buffer to activate its transient state. +The transient state aims to list the most useful org agenda commands and +visually organize them by category. The commands associated with each binding +are listed bellow. + +| Keybinding | Description | Command | +|-------------+---------------------+-----------------------------------| +| Entry | | | +|-------------+---------------------+-----------------------------------| +| ~ht~ | set status | org-agenda-todo | +| ~hk~ | kill | org-agenda-kill | +| ~hr~ | refile | org-agenda-refile | +| ~hA~ | archive | org-agenda-archive-default | +| ~hT~ | set tags | org-agenda-set-tags | +| ~hp~ | set priority | org-agenda-priority | +|-------------+---------------------+-----------------------------------| +| Visit entry | | | +|-------------+---------------------+-----------------------------------| +| ~SPC~ | in other window | org-agenda-show-and-scroll-up | +| ~TAB~ | & go to location | org-agenda-goto | +| ~RET~ | & del other windows | org-agenda-switch-to | +| ~o~ | link | link-hint-open-link | +|-------------+---------------------+-----------------------------------| +| Filter | | | +|-------------+---------------------+-----------------------------------| +| ~ft~ | by tag | org-agenda-filter-by-tag | +| ~fr~ | refine by tag | org-agenda-filter-by-tag-refine | +| ~fc~ | by category | org-agenda-filter-by-category | +| ~fh~ | by top headline | org-agenda-filter-by-top-headline | +| ~fx~ | by regexp | org-agenda-filter-by-regexp | +| ~fd~ | delete all filters | org-agenda-filter-remove-all | +|-------------+---------------------+-----------------------------------| +| Date | | | +|-------------+---------------------+-----------------------------------| +| ~ds~ | schedule | org-agenda-schedule | +| ~dd~ | set deadline | org-agenda-deadline | +| ~dt~ | timestamp | org-agenda-date-prompt | +| ~+~ | do later | org-agenda-do-date-later | +| ~-~ | do earlier | org-agenda-do-date-earlier | +|-------------+---------------------+-----------------------------------| +| Toggle | | | +|-------------+---------------------+-----------------------------------| +| ~tf~ | follow | org-agenda-follow-mode | +| ~tl~ | log | org-agenda-log-mode | +| ~ta~ | archive | org-agenda-archives-mode | +| ~tr~ | clock report | org-agenda-clockreport-mode | +| ~td~ | diaries | org-agenda-toggle-diary | +|-------------+---------------------+-----------------------------------| +| View | | | +|-------------+---------------------+-----------------------------------| +| ~vd~ | day | org-agenda-day-view | +| ~vw~ | week | org-agenda-week-view | +| ~vt~ | fortnight | org-agenda-fortnight-view | +| ~vm~ | month | org-agenda-month-view | +| ~vy~ | year | org-agenda-year-view | +| ~vn~ | next span | org-agenda-later | +| ~vp~ | prev span | org-agenda-earlier | +| ~vr~ | reset | org-agenda-reset-view | +|-------------+---------------------+-----------------------------------| +| Clock | | | +|-------------+---------------------+-----------------------------------| +| ~ci~ | in | org-agenda-clock-in | +| ~co~ | out | org-agenda-clock-out | +| ~ck~ | cancel | org-agenda-clock-cancel | +| ~cj~ | jump | org-agenda-clock-goto | +|-------------+---------------------+-----------------------------------| +| Other | | | +|-------------+---------------------+-----------------------------------| +| ~gr~ | reload | org-agenda-redo | +| ~.~ | go to today | org-agenda-goto-today | +| ~gd~ | go to date | org-agenda-goto-date | + +** Pomodoro + +| Key Binding | Description | +|-------------+-------------------| +| ~SPC m p~ | starts a pomodoro | + +** Presentation +org-present must be activated explicitly by typing: ~SPC SPC org-present~ + +| Key Binding | Description | +|-------------+----------------| +| ~h~ | previous slide | +| ~l~ | next slide | +| ~q~ | quit | + +** Org-MIME + +| Key Binding | Description | +|-------------+---------------------------------------------------| +| ~SPC m M~ | in =message-mode= buffers convert into html email | +| ~SPC m m~ | send current buffer as HTML email message | + +** Org-download + +| Key Binding | Description | +|-------------+-----------------| +| ~SPC m i s~ | Take screenshot | +| ~SPC m i y~ | Yank image url | + +** Org-projectile + +| Key Binding | Description | +|-------------------+---------------------------------------------------------| +| ~SPC a o p~ | Capture a TODO for the current project | +| ~SPC u SPC a o p~ | Capture a TODO for any given project (choose from list) | +| ~SPC p o~ | Go to the TODOs for the current project | diff --git a/layers/+emacs/org/config.el b/layers/+emacs/org/config.el new file mode 100644 index 0000000..72dfc32 --- /dev/null +++ b/layers/+emacs/org/config.el @@ -0,0 +1,29 @@ +;;; config.el --- Org configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar org-enable-bootstrap-support nil + "If non-nil Twitter Bootstrap related packages are configured.") + +(defvar org-enable-github-support nil + "If non-nil Github related packages are configured.") + +(defvar org-enable-reveal-js-support nil + "If non-nil, enable export to reveal.js.") + +(defvar org-projectile-file "TODOs.org" + "The file to store project TODOs in. If this is a relative +path, one file per project is used (and the path is relative to +the project root). If it an absolute path, one global file is +used.") + +(spacemacs|defvar-company-backends org-mode) diff --git a/layers/+emacs/org/funcs.el b/layers/+emacs/org/funcs.el new file mode 100644 index 0000000..38669ea --- /dev/null +++ b/layers/+emacs/org/funcs.el @@ -0,0 +1,37 @@ +;;; funcs.el --- Org Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun org-projectile/capture (&optional arg) + (interactive "P") + (if arg + (org-projectile:project-todo-completing-read nil :empty-lines 1) + (org-projectile:capture-for-current-project nil :empty-lines 1))) + +(defun org-projectile/goto-todos () + (interactive) + (org-projectile:location-for-project (projectile-project-name))) + + + +(defun spacemacs/ob-fix-inline-images () + "Fix redisplay of inline images after a code block evaluation." + (when org-inline-image-overlays + (org-redisplay-inline-images))) + + + +(defun spacemacs//surround-drawer () + (let ((dname (read-from-minibuffer "" ""))) + (cons (format ":%s:" (upcase (or dname ""))) ":END:"))) + +(defun spacemacs//surround-code () + (let ((dname (read-from-minibuffer "" ""))) + (cons (format "#+BEGIN_SRC %s" (or dname "")) "#+END_SRC"))) diff --git a/layers/+emacs/org/img/org.png b/layers/+emacs/org/img/org.png new file mode 100644 index 0000000000000000000000000000000000000000..059212a021b595927a348669e192890044bcd794 GIT binary patch literal 29971 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 Y2hR)&Ugs@VUjP6A07*qoM6N<$g2hi>fdBvi literal 0 HcmV?d00001 diff --git a/layers/+emacs/org/local/evil-org/evil-org.el b/layers/+emacs/org/local/evil-org/evil-org.el new file mode 100644 index 0000000..ea8e419 --- /dev/null +++ b/layers/+emacs/org/local/evil-org/evil-org.el @@ -0,0 +1,182 @@ +;;; evil-org.el --- evil keybindings for org-mode + +;; Copyright (C) 2012-2014 by Edward Tjörnhammar +;; Author: Edward Tjörnhammar +;; URL: https://github.com/edwtjo/evil-org-mode.git +;; Package-Version: 20150513.1610 +;; Git-Repository; git://github.com/edwtjo/evil-org-mode.git +;; Created: 2012-06-14 +;; Version: 0.1.1 +;; Package-Requires: ((evil "0") (org "0")) +;; Keywords: evil vim-emulation org-mode key-bindings presets + +;; This file is not part of GNU Emacs + +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: +;; +;; Known Bugs: +;; See, https://github.com/edwtjo/evil-org-mode/issues +;; +;;; Code: +(require 'evil) +(require 'org) + +(define-minor-mode evil-org-mode + "Buffer local minor mode for evil-org" + :init-value nil + :lighter " EvilOrg" + :keymap (make-sparse-keymap) ; defines evil-org-mode-map + :group 'evil-org) + +(add-hook 'org-mode-hook 'evil-org-mode) ;; only load with org-mode + +(defun clever-insert-item () + "Clever insertion of org item." + (if (not (org-in-item-p)) + (insert "\n") + (org-insert-item)) + ) + +(defun evil-org-eol-call (fun) + "Go to end of line and call provided function. +FUN function callback" + (end-of-line) + (funcall fun) + (evil-append nil) + ) + +;; recompute clocks in visual selection +(evil-define-operator evil-org-recompute-clocks (beg end type register yank-handler) + :keep-visual t + :move-point nil + (interactive "") + (progn + (message "start!" ) + (save-excursion + (while (< (point) end) + (org-evaluate-time-range) + (next-line) + (message "at position %S" (point)) + )))) + +;; open org-mode links in visual selection +(defun evil-org-generic-open-links (beg end type register yank-handler incog) + (progn + (save-excursion + (goto-char beg) + (catch 'break + (while t + (org-next-link) + ;;; break from outer loop when there are no more + ;;; org links + (when (or + (not (< (point) end)) + (not (null org-link-search-failed))) + (throw 'break 0)) + + (if (not (null incog)) + (let* ((new-arg + ;;; if incog is true, decide which incognito settings to + ;;; use dependening on the browser + (cond ((not (null (string-match "^.*\\(iceweasel\\|firefox\\).*$" browse-url-generic-program))) "--private-window") + ((not (null (string-match "^.*\\(chrome\\|chromium\\).*$" browse-url-generic-program))) "--incognito" ) + (t "") + )) + (old-b (list browse-url-generic-args " " )) + (browse-url-generic-args (add-to-ordered-list 'old-b new-arg 0))) + (progn + (org-open-at-point))) + (let ((browse-url-generic-args '(""))) + (org-open-at-point))) + ))))) + + +;;; open links in visual selection +(evil-define-operator evil-org-open-links (beg end type register yank-handler) + :keep-visual t + :move-point nil + (interactive "") + (evil-org-generic-open-links beg end type register yank-handler nil) +) + +;;; open links in visual selection in incognito mode +(evil-define-operator evil-org-open-links-incognito (beg end type register yank-handler) + :keep-visual t + :move-point nil + (interactive "") + (evil-org-generic-open-links beg end type register yank-handler t) +) + +;; normal state shortcuts +(evil-define-key 'normal evil-org-mode-map + "gh" 'outline-up-heading + "gp" 'outline-previous-heading + "gj" (if (fboundp 'org-forward-same-level) ;to be backward compatible with older org version + 'org-forward-same-level + 'org-forward-heading-same-level) + "gk" (if (fboundp 'org-backward-same-level) + 'org-backward-same-level + 'org-backward-heading-same-level) + "gl" 'outline-next-visible-heading + "t" 'org-todo + "T" '(lambda () (interactive) (evil-org-eol-call (lambda() (org-insert-todo-heading nil)))) + "o" '(lambda () (interactive) (evil-org-eol-call 'clever-insert-item)) + "O" '(lambda () (interactive) (evil-org-eol-call 'org-insert-heading)) + "$" 'org-end-of-line + "^" 'org-beginning-of-line + "<" 'org-metaleft + ">" 'org-metaright + "-" 'org-cycle-list-bullet + (kbd "TAB") 'org-cycle) + +;; normal & insert state shortcuts. +(mapc (lambda (state) + (evil-define-key state evil-org-mode-map + (kbd "M-l") 'org-metaright + (kbd "M-h") 'org-metaleft + (kbd "M-k") 'org-metaup + (kbd "M-j") 'org-metadown + (kbd "M-L") 'org-shiftmetaright + (kbd "M-H") 'org-shiftmetaleft + (kbd "M-K") 'org-shiftmetaup + (kbd "M-J") 'org-shiftmetadown + (kbd "M-o") '(lambda () (interactive) + (evil-org-eol-call + '(lambda() + (org-insert-heading) + (org-metaright)))) + (kbd "M-t") '(lambda () (interactive) + (evil-org-eol-call + '(lambda() + (org-insert-todo-heading nil) + (org-metaright)))) + )) + '(normal insert)) + +;; vim-like confirm/abort for capture and src +(with-eval-after-load 'org-capture + (define-key org-capture-mode-map [remap evil-save-and-close] 'org-capture-finalize) + (define-key org-capture-mode-map [remap evil-save-modified-and-close] 'org-capture-finalize) + (define-key org-capture-mode-map [remap evil-quit] 'org-capture-kill)) + +(with-eval-after-load 'org-src + (define-key org-src-mode-map [remap evil-save-and-close] 'org-edit-src-exit) + (define-key org-src-mode-map [remap evil-save-modified-and-close] 'org-edit-src-exit) + (define-key org-src-mode-map [remap evil-quit] 'org-edit-src-abort)) + + +(provide 'evil-org) +;;; evil-org.el ends here diff --git a/layers/+emacs/org/local/org-async-init.el b/layers/+emacs/org/local/org-async-init.el new file mode 100644 index 0000000..1f70489 --- /dev/null +++ b/layers/+emacs/org/local/org-async-init.el @@ -0,0 +1,10 @@ +(require 'package) +(setq package-enable-at-startup nil) +(package-initialize) + +(require 'org) +(require 'ox) +(require 'ox-beamer) +(require 'ox-latex) +(require 'cl) +(setq org-export-async-debug nil) diff --git a/layers/+emacs/org/local/ox-gfm/ox-gfm.el b/layers/+emacs/org/local/ox-gfm/ox-gfm.el new file mode 100644 index 0000000..408166a --- /dev/null +++ b/layers/+emacs/org/local/ox-gfm/ox-gfm.el @@ -0,0 +1,191 @@ +;;; ox-gfm.el --- Github Flavored Markdown Back-End for Org Export Engine + +;; Copyright (C) 2014 Lars Tveito + +;; Author: Lars Tveito +;; Keywords: org, wp, markdown, github +;; Package-Version: 20141211.240 + +;; This file is not part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; This library implements a Markdown back-end (github flavor) for Org +;; exporter, based on the `md' back-end. + +;;; Code: + +(require 'ox-md) + + + +;;; User-Configurable Variables + +(defgroup org-export-gfm nil + "Options specific to Markdown export back-end." + :tag "Org Github Flavored Markdown" + :group 'org-export + :version "24.4" + :package-version '(Org . "8.0")) + + +;;; Define Back-End + +(org-export-define-derived-backend 'gfm 'md + :export-block '("GFM" "GITHUB FLAVORED MARKDOWN") + :filters-alist '((:filter-parse-tree . org-md-separate-elements)) + :menu-entry + '(?g "Export to Github Flavored Markdown" + ((?G "To temporary buffer" + (lambda (a s v b) (org-gfm-export-as-markdown a s v))) + (?g "To file" (lambda (a s v b) (org-gfm-export-to-markdown a s v))) + (?o "To file and open" + (lambda (a s v b) + (if a (org-gfm-export-to-markdown t s v) + (org-open-file (org-gfm-export-to-markdown nil s v))))))) + :translate-alist '((inner-template . org-gfm-inner-template) + (strike-through . org-gfm-strike-through) + (src-block . org-gfm-src-block))) + + + +;;; Transcode Functions + +;;;; Src Block + +(defun org-gfm-src-block (src-block contents info) + "Transcode SRC-BLOCK element into Github Flavored Markdown +format. CONTENTS is nil. INFO is a plist used as a communication +channel." + (let* ((lang (org-element-property :language src-block)) + (code (org-export-format-code-default src-block info)) + (prefix (concat "```" lang "\n")) + (suffix "```")) + (concat prefix code suffix))) + + +;;;; Strike-Through + +(defun org-gfm-strike-through (strike-through contents info) + "Transcode STRIKE-THROUGH from Org to Markdown (GFM). +CONTENTS is the text with strike-through markup. INFO is a plist +holding contextual information." + (format "~~%s~~" contents)) + +;;;; Table of contents + +(defun org-gfm-format-toc (headline) + "Return an appropriate table of contents entry for HEADLINE. INFO is a +plist used as a communication channel." + (let* ((title (org-export-data + (org-export-get-alt-title headline info) info)) + (level (1- (org-element-property :level headline))) + (indent (concat (make-string (* level 2) ? ))) + (anchor (or (org-element-property :custom_id headline) + (concat "sec-" (mapconcat 'number-to-string + (org-export-get-headline-number + headline info) "-"))))) + (concat indent "- [" title "]" "(#" anchor ")"))) + + + + +;;;; Template + +(defun org-gfm-inner-template (contents info) + "Return body of document after converting it to Markdown syntax. +CONTENTS is the transcoded contents string. INFO is a plist +holding export options." + (let* ((depth (plist-get info :with-toc)) + (headlines (and depth (org-export-collect-headlines info depth))) + (toc-string (or (mapconcat 'org-gfm-format-toc headlines "\n") "")) + (toc-tail (if headlines "\n\n" ""))) + (concat toc-string toc-tail contents))) + + + +;;; Interactive function + +;;;###autoload +(defun org-gfm-export-as-markdown (&optional async subtreep visible-only) + "Export current buffer to a Github Flavored Markdown buffer. + +If narrowing is active in the current buffer, only export its +narrowed part. + +If a region is active, export that region. + +A non-nil optional argument ASYNC means the process should happen +asynchronously. The resulting buffer should be accessible +through the `org-export-stack' interface. + +When optional argument SUBTREEP is non-nil, export the sub-tree +at point, extracting information from the headline properties +first. + +When optional argument VISIBLE-ONLY is non-nil, don't export +contents of hidden elements. + +Export is done in a buffer named \"*Org GFM Export*\", which will +be displayed when `org-export-show-temporary-export-buffer' is +non-nil." + (interactive) + (org-export-to-buffer 'gfm "*Org GFM Export*" + async subtreep visible-only nil nil (lambda () (text-mode)))) + + +;;;###autoload +(defun org-gfm-convert-region-to-md () + "Assume the current region has org-mode syntax, and convert it +to Github Flavored Markdown. This can be used in any buffer. +For example, you can write an itemized list in org-mode syntax in +a Markdown buffer and use this command to convert it." + (interactive) + (org-export-replace-region-by 'gfm)) + + +;;;###autoload +(defun org-gfm-export-to-markdown (&optional async subtreep visible-only) + "Export current buffer to a Github Flavored Markdown file. + +If narrowing is active in the current buffer, only export its +narrowed part. + +If a region is active, export that region. + +A non-nil optional argument ASYNC means the process should happen +asynchronously. The resulting file should be accessible through +the `org-export-stack' interface. + +When optional argument SUBTREEP is non-nil, export the sub-tree +at point, extracting information from the headline properties +first. + +When optional argument VISIBLE-ONLY is non-nil, don't export +contents of hidden elements. + +Return output file's name." + (interactive) + (let ((outfile (org-export-output-file-name ".md" subtreep))) + (org-export-to-file 'gfm outfile async subtreep visible-only))) + +(provide 'ox-gfm) + +;; Local variables: +;; generated-autoload-file: "org-loaddefs.el" +;; End: + +;;; ox-gfm.el ends here diff --git a/layers/+emacs/org/packages.el b/layers/+emacs/org/packages.el new file mode 100644 index 0000000..4963f4a --- /dev/null +++ b/layers/+emacs/org/packages.el @@ -0,0 +1,542 @@ +;;; packages.el --- Org Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq org-packages + '( + company + company-emoji + emoji-cheat-sheet-plus + (evil-org :location local) + evil-surround + gnuplot + htmlize + mu4e + ;; ob, org and org-agenda are installed by `org-plus-contrib' + (ob :location built-in) + (org :location built-in) + (org-agenda :location built-in) + org-download + ;; org-mime is installed by `org-plus-contrib' + (org-mime :location built-in) + org-pomodoro + org-present + (org-projectile :toggle (configuration-layer/package-usedp 'projectile)) + (ox-twbs :toggle org-enable-bootstrap-support) + ;; use a for of ox-gfm to fix index generation + (ox-gfm :location (recipe :fetcher github :repo "syl20bnr/ox-gfm") + :toggle org-enable-github-support) + (ox-reveal :toggle org-enable-reveal-js-support) + persp-mode + )) + +(defun org/post-init-company () + (spacemacs|add-company-hook org-mode) + (push 'company-capf company-backends-org-mode)) + +(defun org/post-init-company-emoji () + (push 'company-emoji company-backends-org-mode)) + +(defun org/post-init-emoji-cheat-sheet-plus () + (add-hook 'org-mode-hook 'spacemacs/delay-emoji-cheat-sheet-hook)) + +(defun org/init-evil-org () + (use-package evil-org + :commands (evil-org-mode evil-org-recompute-clocks) + :init (add-hook 'org-mode-hook 'evil-org-mode) + :config + (progn + (evil-define-key 'normal evil-org-mode-map + "O" 'evil-open-above) + (spacemacs/set-leader-keys-for-major-mode 'org-mode + "C" 'evil-org-recompute-clocks) + (spacemacs|diminish evil-org-mode " ⓔ" " e")))) + +(defun org/post-init-evil-surround () + (defun spacemacs/add-org-surrounds () + (push '(?: . spacemacs//surround-drawer) evil-surround-pairs-alist) + (push '(?# . spacemacs//surround-code) evil-surround-pairs-alist)) + (add-hook 'org-mode-hook 'spacemacs/add-org-surrounds)) + +(defun org/init-gnuplot () + (use-package gnuplot + :defer t + :init (spacemacs/set-leader-keys-for-major-mode 'org-mode + "tp" 'org-plot/gnuplot))) + +(defun org/init-htmlize () + (use-package htmlize + :defer t)) + +(defun org/pre-init-mu4e () + ;; Load org-mu4e when mu4e is actually loaded + (spacemacs|use-package-add-hook mu4e + :post-config (require 'org-mu4e nil 'noerror))) + +(defun org/init-ob () + (use-package ob + :defer t + :init + (progn + (defun spacemacs//org-babel-do-load-languages () + "Load all the languages declared in `org-babel-load-languages'." + (org-babel-do-load-languages 'org-babel-load-languages + org-babel-load-languages)) + (add-hook 'org-mode-hook 'spacemacs//org-babel-do-load-languages) + ;; Fix redisplay of inline images after a code block evaluation. + (add-hook 'org-babel-after-execute-hook 'spacemacs/ob-fix-inline-images)))) + +(defun org/init-org () + (use-package org + :defer t + :commands (orgtbl-mode) + :init + (progn + (setq org-clock-persist-file (concat spacemacs-cache-directory + "org-clock-save.el") + org-id-locations-file (concat spacemacs-cache-directory + ".org-id-locations") + org-publish-timestamp-directory (concat spacemacs-cache-directory + ".org-timestamps/") + org-log-done t + org-startup-with-inline-images t + org-image-actual-width nil + org-src-fontify-natively t + ;; this is consistent with the value of + ;; `helm-org-headings-max-depth'. + org-imenu-depth 8) + + (with-eval-after-load 'org-indent + (spacemacs|hide-lighter org-indent-mode)) + (let ((dir (configuration-layer/get-layer-local-dir 'org))) + (setq org-export-async-init-file (concat dir "org-async-init.el"))) + (defmacro spacemacs|org-emphasize (fname char) + "Make function for setting the emphasis in org mode" + `(defun ,fname () (interactive) + (org-emphasize ,char))) + + ;; Follow the confirm and abort conventions + (with-eval-after-load 'org-capture + (spacemacs/set-leader-keys-for-minor-mode 'org-capture-mode + dotspacemacs-major-mode-leader-key 'org-capture-finalize + "c" 'org-capture-finalize + "k" 'org-capture-kill + "a" 'org-capture-kill + "r" 'org-capture-refile)) + + (with-eval-after-load 'org-src + (spacemacs/set-leader-keys-for-minor-mode 'org-src-mode + "'" 'org-edit-src-exit + "c" 'org-edit-src-exit + "a" 'org-edit-src-abort + "k" 'org-edit-src-abort)) + + (let ((dir (configuration-layer/get-layer-local-dir 'org))) + (setq org-export-async-init-file (concat dir "org-async-init.el"))) + (defmacro spacemacs|org-emphasize (fname char) + "Make function for setting the emphasis in org mode" + `(defun ,fname () (interactive) + (org-emphasize ,char))) + + ;; Insert key for org-mode and markdown a la C-h k + ;; from SE endless http://emacs.stackexchange.com/questions/2206/i-want-to-have-the-kbd-tags-for-my-blog-written-in-org-mode/2208#2208 + (defun spacemacs/insert-keybinding-org (key) + "Ask for a key then insert its description. +Will work on both org-mode and any mode that accepts plain html." + (interactive "kType key sequence: ") + (let* ((tag "@@html:@@ %s @@html:@@")) + (if (null (equal key "\r")) + (insert + (format tag (help-key-description key nil))) + (insert (format tag "")) + (forward-char -8)))) + + (dolist (prefix '(("mx" . "text") + ("mh" . "headings") + ("mi" . "insert") + ("mS" . "subtrees") + ("mt" . "tables") + ("mtd" . "delete") + ("mti" . "insert") + ("mtt" . "toggle"))) + (spacemacs/declare-prefix-for-mode 'org-mode (car prefix) (cdr prefix))) + (spacemacs/set-leader-keys-for-major-mode 'org-mode + "'" 'org-edit-special + "c" 'org-capture + "d" 'org-deadline + "D" 'org-insert-drawer + "e" 'org-export-dispatch + "f" 'org-set-effort + "P" 'org-set-property + ":" 'org-set-tags + + "a" 'org-agenda + "b" 'org-tree-to-indirect-buffer + "A" 'org-archive-subtree + "l" 'org-open-at-point + "T" 'org-show-todo-tree + + "." 'org-time-stamp + "!" 'org-time-stamp-inactive + + ;; headings + "hi" 'org-insert-heading-after-current + "hI" 'org-insert-heading + "hs" 'org-insert-subheading + + ;; More cycling options (timestamps, headlines, items, properties) + "L" 'org-shiftright + "H" 'org-shiftleft + "J" 'org-shiftdown + "K" 'org-shiftup + + ;; Change between TODO sets + "C-S-l" 'org-shiftcontrolright + "C-S-h" 'org-shiftcontrolleft + "C-S-j" 'org-shiftcontroldown + "C-S-k" 'org-shiftcontrolup + + ;; Subtree editing + "Sl" 'org-demote-subtree + "Sh" 'org-promote-subtree + "Sj" 'org-move-subtree-down + "Sk" 'org-move-subtree-up + + ;; tables + "ta" 'org-table-align + "tb" 'org-table-blank-field + "tc" 'org-table-convert + "tdc" 'org-table-delete-column + "tdr" 'org-table-kill-row + "te" 'org-table-eval-formula + "tE" 'org-table-export + "th" 'org-table-previous-field + "tH" 'org-table-move-column-left + "tic" 'org-table-insert-column + "tih" 'org-table-insert-hline + "tiH" 'org-table-hline-and-move + "tir" 'org-table-insert-row + "tI" 'org-table-import + "tj" 'org-table-next-row + "tJ" 'org-table-move-row-down + "tK" 'org-table-move-row-up + "tl" 'org-table-next-field + "tL" 'org-table-move-column-right + "tn" 'org-table-create + "tN" 'org-table-create-with-table.el + "tr" 'org-table-recalculate + "ts" 'org-table-sort-lines + "ttf" 'org-table-toggle-formula-debugger + "tto" 'org-table-toggle-coordinate-overlays + "tw" 'org-table-wrap-region + + ;; Multi-purpose keys + (or dotspacemacs-major-mode-leader-key ",") 'org-ctrl-c-ctrl-c + "*" 'org-ctrl-c-star + "RET" 'org-ctrl-c-ret + "-" 'org-ctrl-c-minus + "^" 'org-sort + "/" 'org-sparse-tree + + "I" 'org-clock-in + "n" 'org-narrow-to-subtree + "N" 'widen + "O" 'org-clock-out + "q" 'org-clock-cancel + "R" 'org-refile + "s" 'org-schedule + + ;; insertion of common elements + "il" 'org-insert-link + "if" 'org-footnote-new + "ik" 'spacemacs/insert-keybinding-org + + ;; images and other link types have no commands in org mode-line + ;; could be inserted using yasnippet? + ;; region manipulation + "xb" (spacemacs|org-emphasize spacemacs/org-bold ?*) + "xc" (spacemacs|org-emphasize spacemacs/org-code ?~) + "xi" (spacemacs|org-emphasize spacemacs/org-italic ?/) + "xr" (spacemacs|org-emphasize spacemacs/org-clear ? ) + "xs" (spacemacs|org-emphasize spacemacs/org-strike-through ?+) + "xu" (spacemacs|org-emphasize spacemacs/org-underline ?_) + "xv" (spacemacs|org-emphasize spacemacs/org-verbose ?=)) + + ;; Add global evil-leader mappings. Used to access org-agenda + ;; functionalities – and a few others commands – from any other mode. + (spacemacs/declare-prefix "ao" "org") + (spacemacs/set-leader-keys + ;; org-agenda + "ao#" 'org-agenda-list-stuck-projects + "ao/" 'org-occur-in-agenda-files + "aoa" 'org-agenda-list + "aoe" 'org-store-agenda-views + "aom" 'org-tags-view + "aoo" 'org-agenda + "aos" 'org-search-view + "aot" 'org-todo-list + ;; other + "aoO" 'org-clock-out + "aoc" 'org-capture + "aol" 'org-store-link) + + (define-key global-map "\C-cl" 'org-store-link) + (define-key global-map "\C-ca" 'org-agenda) + (define-key global-map "\C-cc" 'org-capture)) + :config + (progn + (setq org-default-notes-file "notes.org") + + ;; We add this key mapping because an Emacs user can change + ;; `dotspacemacs-major-mode-emacs-leader-key' to `C-c' and the key binding + ;; C-c ' is shadowed by `spacemacs/default-pop-shell', effectively making + ;; the Emacs user unable to exit src block editing. + (define-key org-src-mode-map + (kbd (concat dotspacemacs-major-mode-emacs-leader-key " '")) + 'org-edit-src-exit) + + (spacemacs/set-leader-keys "Cc" 'org-capture) + + ;; Evilify the calendar tool on C-c . + (unless (eq 'emacs dotspacemacs-editing-style) + (define-key org-read-date-minibuffer-local-map (kbd "M-h") + (lambda () (interactive) + (org-eval-in-calendar '(calendar-backward-day 1)))) + (define-key org-read-date-minibuffer-local-map (kbd "M-l") + (lambda () (interactive) + (org-eval-in-calendar '(calendar-forward-day 1)))) + (define-key org-read-date-minibuffer-local-map (kbd "M-k") + (lambda () (interactive) + (org-eval-in-calendar '(calendar-backward-week 1)))) + (define-key org-read-date-minibuffer-local-map (kbd "M-j") + (lambda () (interactive) + (org-eval-in-calendar '(calendar-forward-week 1)))) + (define-key org-read-date-minibuffer-local-map (kbd "M-H") + (lambda () (interactive) + (org-eval-in-calendar '(calendar-backward-month 1)))) + (define-key org-read-date-minibuffer-local-map (kbd "M-L") + (lambda () (interactive) + (org-eval-in-calendar '(calendar-forward-month 1)))) + (define-key org-read-date-minibuffer-local-map (kbd "M-K") + (lambda () (interactive) + (org-eval-in-calendar '(calendar-backward-year 1)))) + (define-key org-read-date-minibuffer-local-map (kbd "M-J") + (lambda () (interactive) + (org-eval-in-calendar '(calendar-forward-year 1)))))))) + +(defun org/init-org-agenda () + (use-package org-agenda + :defer t + :init + (progn + (setq org-agenda-restore-windows-after-quit t) + (spacemacs/set-leader-keys-for-major-mode 'org-agenda-mode + ":" 'org-agenda-set-tags + "a" 'org-agenda + "d" 'org-agenda-deadline + "f" 'org-agenda-set-effort + "I" 'org-agenda-clock-in + "O" 'org-agenda-clock-out + "P" 'org-agenda-set-property + "q" 'org-agenda-refile + "Q" 'org-agenda-clock-cancel + "s" 'org-agenda-schedule) + (spacemacs|define-transient-state org-agenda + :title "Org-agenda transient state" + :on-enter (setq which-key-inhibit t) + :on-exit (setq which-key-inhibit nil) + :foreign-keys run + :doc + " +Headline^^ Visit entry^^ Filter^^ Date^^ Toggle mode^^ View^^ Clock^^ Other^^ +--------^^--------- -----------^^------------ ------^^----------------- ----^^------------- -----------^^------ ----^^--------- -----^^------ -----^^----------- +[_ht_] set status [_SPC_] in other window [_ft_] by tag [_ds_] schedule [_tf_] follow [_vd_] day [_ci_] in [_gr_] reload +[_hk_] kill [_TAB_] & go to location [_fr_] refine by tag [_dd_] set deadline [_tl_] log [_vw_] week [_co_] out [_._] go to today +[_hr_] refile [_RET_] & del other windows [_fc_] by category [_dt_] timestamp [_ta_] archive [_vt_] fortnight [_ck_] cancel [_gd_] go to date +[_hA_] archive [_o_] link [_fh_] by top headline [_+_] do later [_tr_] clock report [_vm_] month [_cj_] jump ^^ +[_hT_] set tags ^^ [_fx_] by regexp [_-_] do earlier [_td_] diaries [_vy_] year ^^ ^^ +[_hp_] set priority ^^ [_fd_] delete all filters ^^ ^^ [_vn_] next span ^^ ^^ +^^ ^^ ^^ ^^ ^^ [_vp_] prev span ^^ ^^ +^^ ^^ ^^ ^^ ^^ [_vr_] reset ^^ ^^ +[_q_] quit +" + :bindings + ;; Entry + ("ht" org-agenda-todo) + ("hk" org-agenda-kill) + ("hr" org-agenda-refile) + ("hA" org-agenda-archive-default) + ("hT" org-agenda-set-tags) + ("hp" org-agenda-priority) + + ;; Visit entry + ("SPC" org-agenda-show-and-scroll-up) + ("" org-agenda-goto :exit t) + ("TAB" org-agenda-goto :exit t) + ("RET" org-agenda-switch-to :exit t) + ("o" link-hint-open-link :exit t) + + ;; Date + ("ds" org-agenda-schedule) + ("dd" org-agenda-deadline) + ("dt" org-agenda-date-prompt) + ("+" org-agenda-do-date-later) + ("-" org-agenda-do-date-earlier) + + ;; View + ("vd" org-agenda-day-view) + ("vw" org-agenda-week-view) + ("vt" org-agenda-fortnight-view) + ("vm" org-agenda-month-view) + ("vy" org-agenda-year-view) + ("vn" org-agenda-later) + ("vp" org-agenda-earlier) + ("vr" org-agenda-reset-view) + + ;; Toggle mode + ("tf" org-agenda-follow-mode) + ("tl" org-agenda-log-mode) + ("ta" org-agenda-archives-mode) + ("tr" org-agenda-clockreport-mode) + ("td" org-agenda-toggle-diary) + + ;; Filter + ("ft" org-agenda-filter-by-tag) + ("fr" org-agenda-filter-by-tag-refine) + ("fc" org-agenda-filter-by-category) + ("fh" org-agenda-filter-by-top-headline) + ("fx" org-agenda-filter-by-regexp) + ("fd" org-agenda-filter-remove-all) + + ;; Clock + ("ci" org-agenda-clock-in :exit t) + ("co" org-agenda-clock-out) + ("ck" org-agenda-clock-cancel) + ("cj" org-agenda-clock-goto :exit t) + + ;; Other + ("q" nil :exit t) + ("gr" org-agenda-redo) + ("." org-agenda-goto-today) + ("gd" org-agenda-goto-date))) + :config + (evilified-state-evilify-map org-agenda-mode-map + :mode org-agenda-mode + :bindings + "j" 'org-agenda-next-line + "k" 'org-agenda-previous-line + (kbd "M-j") 'org-agenda-next-item + (kbd "M-k") 'org-agenda-previous-item + (kbd "M-h") 'org-agenda-earlier + (kbd "M-l") 'org-agenda-later + (kbd "gd") 'org-agenda-toggle-time-grid + (kbd "gr") 'org-agenda-redo + (kbd "M-RET") 'org-agenda-show-and-scroll-up + (kbd "M-SPC") 'spacemacs/org-agenda-transient-state/body + (kbd "s-M-SPC") 'spacemacs/org-agenda-transient-state/body))) + +(defun org/init-org-download () + (use-package org-download + :commands (org-download-enable + org-download-yank + org-download-screenshot) + :init + (progn + (add-hook 'org-mode-hook 'org-download-enable) + (spacemacs/set-leader-keys-for-major-mode 'org-mode + "iy" 'org-download-yank + "is" 'org-download-screenshot)))) + +(defun org/init-org-mime () + (use-package org-mime + :defer t + :commands (org-mime-htmlize org-mime-org-buffer-htmlize) + :init + (progn + (spacemacs/set-leader-keys-for-major-mode 'message-mode + "M" 'org-mime-htmlize) + (spacemacs/set-leader-keys-for-major-mode 'org-mode + "m" 'org-mime-org-buffer-htmlize)))) + +(defun org/init-org-pomodoro () + (use-package org-pomodoro + :defer t + :init + (progn + (when (spacemacs/system-is-mac) + (setq org-pomodoro-audio-player "/usr/bin/afplay")) + (spacemacs/set-leader-keys-for-major-mode 'org-mode + "p" 'org-pomodoro) + (spacemacs/set-leader-keys-for-major-mode 'org-agenda-mode + "p" 'org-pomodoro)))) + +(defun org/init-org-present () + (use-package org-present + :defer t + :init + (progn + (evilified-state-evilify nil org-present-mode-keymap + "h" 'org-present-prev + "l" 'org-present-next + "q" 'org-present-quit) + (defun spacemacs//org-present-start () + "Initiate `org-present' mode" + (org-present-big) + (org-display-inline-images) + (org-present-hide-cursor) + (org-present-read-only) + (evil-evilified-state)) + (defun spacemacs//org-present-end () + "Terminate `org-present' mode" + (org-present-small) + (org-remove-inline-images) + (org-present-show-cursor) + (org-present-read-write) + (evil-normal-state)) + (add-hook 'org-present-mode-hook 'spacemacs//org-present-start) + (add-hook 'org-present-mode-quit-hook 'spacemacs//org-present-end)))) + +(defun org/init-org-projectile () + (use-package org-projectile + :commands (org-projectile:location-for-project) + :init + (progn + (spacemacs/set-leader-keys + "aop" 'org-projectile/capture + "po" 'org-projectile/goto-todos) + (with-eval-after-load 'org-capture + (require 'org-projectile))) + :config + (if (file-name-absolute-p org-projectile-file) + (progn + (setq org-projectile:projects-file org-projectile-file) + (push (org-projectile:project-todo-entry + nil nil nil :empty-lines 1) + org-capture-templates)) + (org-projectile:per-repo) + (setq org-projectile:per-repo-filename org-projectile-file)))) + +(defun org/init-ox-twbs () + (spacemacs|use-package-add-hook org :post-config (require 'ox-twbs))) + +(defun org/init-ox-gfm () + (spacemacs|use-package-add-hook org :post-config (require 'ox-gfm))) + +(defun org/init-ox-reveal () + (spacemacs|use-package-add-hook org :post-config (require 'ox-reveal))) + +(defun org/post-init-persp-mode () + (spacemacs|define-custom-layout "@Org" + :binding "o" + :body + (let ((agenda-files (org-agenda-files))) + (if agenda-files + (find-file (first agenda-files)) + (user-error "Error: No agenda files configured, nothing to display."))))) diff --git a/layers/+emacs/semantic/README.org b/layers/+emacs/semantic/README.org new file mode 100644 index 0000000..c14b9fb --- /dev/null +++ b/layers/+emacs/semantic/README.org @@ -0,0 +1,45 @@ +#+TITLE: Semantic layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + +* Description + +CEDET is a *C*ollection of *E*macs *D*evelopment *E*nvironment *T*ools written +with the end goal of creating an advanced development environment in Emacs. +CEDET includes common features such as intelligent completion, source code +navigation, project management, code generation with templates. CEDET also +provides a framework for working with programming languages; support for new +programming languages can be added and use CEDET to provide IDE-like features. +This framework is called Semantic. + +Semantic is a package that provides a framework for writing parsers. Parsing is +a process of analyzing source code based on programming language syntax. The +packages relies on Semantic for analyzing source code and uses its results to +perform smart code refactoring that based on code structure of the analyzed +language, instead of plain text structure. Semantic is the core of CEDET. + +* Features + +- Display function or variable definition at the bottom. +- Display current function cursor is in at the top. See + [[https://github.com/tuhdo/semantic-stickyfunc-enhance][this page]] for demos in some programming languages. +- Support common C/C++ refactoring with [[https://github.com/tuhdo/semantic-refactor][semantic-refactor]]. See + [[https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos.org][this page]] for demonstration of refactoring features. +- Support Lisp source code formatting with [[https://github.com/tuhdo/semantic-refactor][semantic-refactor]].. See + [[https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos-elisp.org][this page]] for demonstration of Lisp formatting + features. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =semantic= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key Bindings + +| Key Binding | Description | +|-------------+-------------------------------------| +| ~SPC m r~ | srefactor: refactor thing at point. | diff --git a/layers/+emacs/semantic/config.el b/layers/+emacs/semantic/config.el new file mode 100644 index 0000000..f82430f --- /dev/null +++ b/layers/+emacs/semantic/config.el @@ -0,0 +1,17 @@ +;;; config.el --- semantic Layer configuration +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sebastian Wiesner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq semantic-packages + '( + (semantic :location built-in) + srefactor + stickyfunc-enhance + )) + +(defun semantic/init-semantic () + (use-package semantic + :defer t + :config + (progn + (add-to-list 'semantic-default-submodes + 'global-semantic-stickyfunc-mode) + (add-to-list 'semantic-default-submodes + 'global-semantic-idle-summary-mode)))) + +(defun semantic/init-srefactor () + (use-package srefactor + :defer t + :init + (progn + (defun spacemacs/lazy-load-srefactor () + "Lazy load the package." + (require 'srefactor) + ;; currently, evil-mode overrides key mapping of srefactor menu + ;; must expplicity enable evil-emacs-state. This is ok since + ;; srefactor supports j,k,/ and ? commands when Evil is + ;; available + (add-hook 'srefactor-ui-menu-mode-hook 'evil-emacs-state))))) + +(defun semantic/init-stickyfunc-enhance () + (use-package stickyfunc-enhance + :defer t + :init + (defun spacemacs/lazy-load-stickyfunc-enhance () + "Lazy load the package." + (require 'stickyfunc-enhance)))) diff --git a/layers/+emacs/smex/README.org b/layers/+emacs/smex/README.org new file mode 100644 index 0000000..db48b11 --- /dev/null +++ b/layers/+emacs/smex/README.org @@ -0,0 +1,25 @@ +#+TITLE: Smex layer + +[[file:img/smex.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + +* Description +This layer replaces =helm-M-x= by [[https://github.com/nonsequitur/smex][smex]] which is built on top of =ido=. +=ido= can perform flex matching with the [[https://github.com/lewang/flx][flx-ido]] mode which is already +activated in the Spacemacs layer. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =smex= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key bindings + +| Key Binding | Description | +|-------------+--------------------------------------------| +| ~SPC :~ | all Emacs commands (interactive functions) | +| ~SPC m :~ | current major mode commands | diff --git a/layers/+emacs/smex/funcs.el b/layers/+emacs/smex/funcs.el new file mode 100644 index 0000000..c46a801 --- /dev/null +++ b/layers/+emacs/smex/funcs.el @@ -0,0 +1,22 @@ +;;; funcs.el --- Smex Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs/smex () + "Execute smex with a better prompt." + (interactive) + (let ((smex-prompt-string "Emacs commands: ")) + (smex))) + +(defun spacemacs/smex-major-mode-commands () + "Reexecute smex with major mode commands only." + (interactive) + (let ((smex-prompt-string (format "%s commands: " major-mode))) + (smex-major-mode-commands))) diff --git a/layers/+emacs/smex/img/smex.png b/layers/+emacs/smex/img/smex.png new file mode 100644 index 0000000000000000000000000000000000000000..6293ddab5f6be73a77540d830d6095f8f89f36ab GIT binary patch literal 5161 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 aEBz6X;t=AApWL%Q01k6K*JvAf=l=kBC@#wY literal 0 HcmV?d00001 diff --git a/layers/+emacs/smex/packages.el b/layers/+emacs/smex/packages.el new file mode 100644 index 0000000..5ccf28b --- /dev/null +++ b/layers/+emacs/smex/packages.el @@ -0,0 +1,28 @@ +;;; packages.el --- smex Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq smex-packages '(smex)) + +(defun smex/init-smex () + (use-package smex + :defer t + :init + (progn + (setq-default smex-history-length 32 + smex-save-file (concat spacemacs-cache-directory + ".smex-items")) + ;; define the key binding at the very end in order to allow the user + ;; to overwrite any key binding + (add-hook 'emacs-startup-hook + (lambda () (spacemacs/set-leader-keys + dotspacemacs-emacs-command-key 'spacemacs/smex))) + (spacemacs/set-leader-keys ":" 'spacemacs/smex-major-mode-commands) + (global-set-key (kbd "M-x") 'spacemacs/smex)))) diff --git a/layers/+emacs/typography/README.org b/layers/+emacs/typography/README.org new file mode 100644 index 0000000..8256e95 --- /dev/null +++ b/layers/+emacs/typography/README.org @@ -0,0 +1,61 @@ +#+TITLE: Typography layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + - [[#typo-mode][Typo Mode]] + - [[#tildify-mode][Tildify Mode]] + +* Description +This layer provides support for typographic text editing in Spacemacs. It +provides modes to automatically insert and cycle among typographic characters: + +- [[https://github.com/jorgenschaefer/typoel][Typo Mode]] automatically inserts and cycles among typographic Unicode + characters on some keys. +- Tildify Mode automatically inserts non-breaking spaces where required. (Only + available on Emacs 25). + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =typography= to the existing =dotspacemacs-configuration-layers= list in this +file. + +Typographic editing however is disabled by default. To enable it by default set +=typography-enable-typographic-editing= to =t=: + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers + '(typography :variables typography-enable-typographic-editing t)) +#+END_SRC + +This setting enables automatic insertion of non-breaking spaces where required +and automatic insertion and cycling among of typographic quotes and dashes. + +* Key bindings + +| Key Bindings | Description | +|--------------+------------------------------------------------------------------| +| ~SPC t T~ | Toggle Typo Mode (automatic insertion of typographic characters) | +| ~SPC t ~~ | Toggle Tildify Mode (automatic insertion of non-breaking spaces) | +| ~SPC x ~~ | Insert non-breaking spaces in the current region | + +The following keybindings are available in insert state. + +** Typo Mode + +| Key Bindings | Description | +|--------------+------------------------------------------| +| ~​"​~ | Cycle among quotation marks | +| ~`~ | Cycle among left single quotation marks | +| ~​'​~ | Cycle among right single quotation marks | +| ~-~ | Cycle among dashes | +| ~.~ | Cycle among ellipsis | +| ~<~ | Cycle among left angle brackets | +| ~>~ | Cycle among right angle brackets | + +** Tildify Mode + +| Key bindings | Description | +|--------------+-----------------------------------------| +| ~SPC~ | Insert non-breaking space when required | diff --git a/layers/+emacs/typography/config.el b/layers/+emacs/typography/config.el new file mode 100644 index 0000000..2e57daf --- /dev/null +++ b/layers/+emacs/typography/config.el @@ -0,0 +1,13 @@ +;;; config.el --- typography Layer configuration +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sebastian Wiesner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq typography-packages + '( + (tildify :toggle (version<= "25" emacs-version)) + typo + )) + +(defun typography/init-typo () + (use-package typo + :defer t + :init + (progn + (when typography-enable-typographic-editing + (add-hook 'text-mode-hook 'typo-mode)) + + (spacemacs|add-toggle typographic-substitutions + :mode typo-mode + :documentation "Enable typographic substitutions" + :evil-leader "tT") + (spacemacs|diminish typo-mode " Ⓣ" " T")) + :config (setq-default typo-language "English"))) + +(defun typography/init-tildify () + (use-package tildify + :defer t + :init + (progn + (when typography-enable-typographic-editing + (add-hook 'text-mode-hook 'tildify-mode)) + + (spacemacs/set-leader-keys + "x~" 'tildify-region) + + ;; Use the symbolic non-breaking space for LaTeX + (defun typography/tildify-latex-space () + "Set tildify space for LaTeX" + (setq-local tildify-space-string "~")) + (add-hook 'LaTeX-mode-hook 'typography/tildify-latex-space) + + (spacemacs|add-toggle tildify-space + :mode tildify-mode + :documentation "Enable electric non-breaking space" + :evil-leader "t~") + (spacemacs|diminish tildify-mode " ~" " ~")))) diff --git a/layers/+email/gnus/README.org b/layers/+email/gnus/README.org new file mode 100644 index 0000000..30f798f --- /dev/null +++ b/layers/+email/gnus/README.org @@ -0,0 +1,119 @@ +#+TITLE: Gnus layer + +[[file:img/gnus.gif]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#install][Install]] + - [[#basic-concepts][Basic Concepts]] + - [[#adding-news-sources][Adding news sources]] + - [[#configuring-gmail][Configuring gmail]] + - [[#org-mime-in-org-layer][Org MIME in Org layer]] + - [[#keybindings][Keybindings]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =gnus= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Basic Concepts + +Gnus is a news reading application. The Gnus terminology can be confusing for +new users so the basics are listed here: + +- Group :: A Newsgroup but can also be a RSS Feed or a mail directory +- Topic :: Newsgroups can be assigned to topics which will be used to structure + the Group Buffer if Topic Mode is enabled(default). + +* Adding news sources + +Adding news sources can be done in your =.spacemacs= file by adding the +following: + +#+BEGIN_SRC emacs-lisp + ;; Get email, and store in nnml + (setq gnus-secondary-select-methods + '( + (nntp "gmane" + (nntp-address "news.gmane.org")) + (nntp "news.eternal-september.org") + (nntp "nntp.aioe.org") + (nntp "news.gwene.org") + )) +#+END_SRC + +For adding RSS Feeds please see the [[Keybindings][keybindings section]]. + +* Configuring gmail + +To configure Gnus with gmail support you can add the following to your +=.spacemacs= file. + +#+BEGIN_SRC emacs-lisp +;; Get email, and store in nnml +(setq gnus-secondary-select-methods +'( + (nnimap "gmail" + (nnimap-address + "imap.gmail.com") + (nnimap-server-port 993) + (nnimap-stream ssl)) + )) + +;; Send email via Gmail: +(setq message-send-mail-function 'smtpmail-send-it + smtpmail-default-smtp-server "smtp.gmail.com") + +;; Archive outgoing email in Sent folder on imap.gmail.com: +(setq gnus-message-archive-method '(nnimap "imap.gmail.com") + gnus-message-archive-group "[Gmail]/Sent Mail") + +;; set return email address based on incoming email address +(setq gnus-posting-styles + '(((header "to" "address@outlook.com") + (address "address@outlook.com")) + ((header "to" "address@gmail.com") + (address "address@gmail.com")))) + +;; store email in ~/gmail directory +(setq nnml-directory "~/gmail") +(setq message-directory "~/gmail") +#+END_SRC + +Authentication for your gmail account is best stored in an =authinfo= or +=authinfo.pgp= file. It must be of the form: + +#+BEGIN_EXAMPLE +machine smtp.gmail.com login name@gmail.com password SUPER_SECRET_PASS +machine imap.gmail.com login name@gmail.com port 993 password SUPER_SECRET_PASS +#+END_EXAMPLE + +If you use two-step verification the password has to be an [[https://support.google.com/accounts/answer/185833?hl=en][application specific +password]]. + +* Org MIME in Org layer + +It is possible to send beautiful HTML emails using org mode. + +Pressing ~SPC m M~ in a message buffer will convert the current message +from org mode to html. An org mode buffer can be sent via html email by pressing +~SPC m m~ in any org mode buffer. + +* Keybindings + +Gnus has very modal default keybindings. +Please see the [[http://www.gnus.org/manual.html][manual]] for a complete list. + +Basic and Spacemacs specific keybindings can be found in the following table. + +| Key Binding | Gnus mode - Description | +|-------------+-----------------------------------------------------| +| ~SPC a g~ | Starts Gnus | +| ~m~ | New Message | +| ~G R~ | Group Buffer - Add RSS feed | +| ~^~ | Open Server Buffer. Browse Newsgroups. | +| ~T n~ | Group Buffer - new Topic | +| ~T m~ | Group Buffer - Move Group to Topic | +| ~K~ | Article Buffer - Previous article | +| ~J~ | Article Buffer - Next article | +| ~RET~ | Summary Buffer(RSS) - Open article Link in browser | +| ~TAB~ | Summary Buffer(RSS) - Open article and switch to it | diff --git a/layers/+email/gnus/img/gnus.gif b/layers/+email/gnus/img/gnus.gif new file mode 100644 index 0000000000000000000000000000000000000000..701a8fd95d6af97539ade07f6d2aa46e8870caa2 GIT binary patch literal 6121 zcmb7H`#;l<|J`h3c5APf4Ux-oiQa{gcf8+~O(sNbBubZ|P$_gJs<{)fl}ox>7%H0k zJticQ%_Wp-h}>dAA$fh@pFiPyemFm!U(R_vp3lcQd+cp3wtK#Wy@Gv%!QT8V`Td-nPJ zKw00@Pv84X`|@SKW*|0@0nH4i|q`XEu! z;A7$7BPrDJ1$z4lYHJ;9}2R?sb6FRS?^L_e=jY4pC|0e z?w{z1}7K3t*xzzK39%IAA83;pLbv}9%tH={SC>wh69U7U2hJQd)gKMp? z7lci+g1*^~XMOjVp~WR=;TJS7kfcG-+8Xrd541WlKe`J2{td0H{`viFZse)tVb{0z zl|Re*k_UAkOKLwBi$~v7j|pl%7A^h$)j8Vw>-SGVXGZmaaCr9f(Cnv$<@xrJraq|t zJ@m2{s_TJjzb*~DT`qmISk$^G9E4tfgj!zDzxeP!<4uJh9v1XJc;0_s3cYJzEdK&^ ze1rPOpuW0^ysuENWb94thoa#>-PNNxBeKuGRu%>C?&iEpUtF25>@UcAmpZ>R_vCF# z+i)ZQ?VXbMd9S7QEz*}WKc}0ebpw+<(~xuu`tqVDdlLFQwJs`=8(La{el0^kbGz>f zBBWiuiLO^)s$X7QoaH-4@x=*s-Fw)(v5@#@;|Zwn*!gJmxVOIKExC1Y*Nt4n#}`{J=TH6Myb zWM6)+Eatqs+wrw!ab=-mB#ZwxWo}89+$DHf`;XX^~0PgC%~f9a|y{d$Y9jx^s1^R39FmPv~M_%{=|-reuTV zQ+6+^sxAK6KnX7N8VZ{x?q$!GTQ@{cDSxOz8VgUV(>16$hWB>I*|6?A zJ2p?ybsJpS^A$IC^>}xS?hkB``0+pZhL3Xk(Yx(+7A|#b7!Ppf8?GnEy&_y!9AKwx zBRQBwUbbKLb*A8UIVURDW_No!-Sva<={^r!?x03$qZ=%4)uj!&!fumVjCC$&HHYZz zis*>kggFsyZ0;Fui*kKu!6`SE`a^+mG=Ye)0wm41yT@Q}aJwVOB`ziHC3 z#PBNN@9i-g8T<=TdFVL{R|9WJFxT>cz4N=>D#1Z$*P^hYHy)3|fc8R3YTQS>ZMaUO z>s3b|qS{1V&KP}w_D`zO1L{Q`SF@&wsA@O5(q80;H(+}`%(zjSoaNeZdh5BsKr*11 zfq2N88g1 zU9pzu_1x9YIJTb3%Ihj|rsO?o182i895gzGOY!^nfg&LOf=#- zi|1Rw96mrXb5y$+5}D|oZ&-#iFIceV8otd_k3y)Z>7{*Jx@--*8u!*of{&xgone$N zdjZuhPFH$|?s$c~E)yj(7wNeR;j^ubW;y(VS}0h3`4;m4-RZeole<&Q(xZz#jF*u@ zZ<}H})Q*&5xV}NQ%6(abN2X`WzXmyo)8a_@->q~+B@M69kiJQf`%sPD5WEhsUBBeZ z(>TG`_li?tH29L{P+5cmce~i9)cR-0B+A-s@ZL=`v9bG*S%~*6I~a^7cL_hYQ`L^b zV;eNw>u*H6KIaE0-;N|)+Gl8>O5QEUk$Z-WBqzH!s;3MSVk;ZhKThzt$Q7Y14Q)VM z>K?KlCkBuWkW+wsj2Xn+qmIs)cO}s5*K$ik)6V@hz$~BBKOKQD%CtlF9YmK&};>F7I6nr#^H@I!jUVV`fboJ ziq+zEVW>AXHy2c+qCNXBsMfFDZ_|jAM1_xgsUG5bT5H4F_8j2g9Sqqv!e#VX`K-ri zPmZ(CdX42e#yVVRE2PPPZCR@qOR{9_NcFNh#{jd{d$X*Kh#h;}8}NTzQH$}eLTzCw}s5dQb^^T_`9ni^tIvgpVX{}Te!E@o#;(mp88$|F}2feaDPi?gP z=DEiFs8fz2^rUreF_IX!sO?;XQTsKVRuM(rsKiN9PxExTg3KbR88S8~rXnpH2+1xi zq{_i|)Ik;s{RqDnqxFOh^eCT9FV5L&P2%(y--BH@&#*O+G2G&gI4L@0MA8yrA8w^s zub*txjchwOnD+AZSrJ=)vys=)qc0gG>?!Mj_?Czt#SQ$utS!5ROr;&qsj5T;qzj@7asbG3Sn76NaezEh-NiLkU z{`h6toweOYKhZ23AD!2EO(>F=TkS^Y2OMH6SyQ0l9@kB9td6U>Sv<;y>1@nn7FBQI z`@}MzYlv$7Z7YAq9X8oSc|sOk{P?4p{WU{H)NwIf@uoP}C<>RP+0JUH3?R=eMA{bgJEKXKVdPzn1CapzOd@4b~7 zxjAcZYglhIOxYq+zsn?m|KfIhxMO%{uBgDd?H1sti~=RW*wPyt6StxLQRwe5OY_?V zMOMz$51JDm5rKaxC{+X_Gd`Vikj9@l%D@xr;*$P*t_Lh>6*meu)Oa`H4RebnyYR_J6H&}Bt@Yj5k~i0NkUG1Kl-a` zZhX^ET=93Z+mN=c@bMM_7=GiLwKpyH0&63zTX&ISkT)u7v`%_(K{rMv^m@l|={2{` zf$$#r_)XhlOm6Op@MA#3K|(_p)g>JSJwGKDuQj z>|25}A-?Ryu4H%kp&MvmfShxpmLqrd*euVnJNdjORb%#A02sM*SRvcw;yTl{8SX`P zmBA+&!fYi_@TqB&Ze3+lhPfah=UmfHb4l}eZ;ha|u-%*Qa_Q)kc;0RG995ICQ%WX` z8c(=xkYYe2ivquqOv4J(m{ua4YL3eWZ5YuL_1TwXMng1kcbU)Q9WwuV;mOefQ1>(C z1K_yRney_oi`rCOhACEr#HGu?%1k{wFDD}Fj7zxx6v8pU1W654({%?qfl(YWLXT>Y zoQc0u>|{KIGRY>j(d-FS!j20;(;{r(Hdbyp&R0dZm_^#RQ{ z%KC`WCR<%RSyVx&6BpsDj0xr6d}c@7G>?{Y6}|gF)XBfiD~XL<0#|rkZ5(FRyble> zFw!uO#^ajfh`un5GBzQOthzP)Vg<@iY{%J|XB3ucb0(0yn;rWlnCNCk$jOXba|J8s z(M7N;@^F-r(E2R@;B^BcXL~Z6p4hA^|8EJwTRY@HH<<5Bq7w0Mw-YP4`xheo_ezMh zIixcs+(mcdwkS9z(<{FP-0n?kK4B2e4Pb|Rw9$}8t;FFR(tg@)JxgMA9Q=G9 z>ADysjHr5WQ0|;_E_0rQJ#q)fi6~{-eEU**eVyn48(VB=k6|!8;vwz)3xdRJ)nB}N&Ub} zJwXX7bA&))x-kVM2aDan_pa~^%C`ic*=wOW#)udolt$hrQ<`x}(cs^&Wd}|Bfb|2$ zqGjcG+896pG+UC@*2cg>rc+Y|phUbez(!8>_)&m|HUAZzOr!nfz`!ArK2yP%5@MBt za?1p!dpWh4eq)MYqnPlrT%}kWAH)uf8I$v91!fN^Z4n;aGK8EXSxALw+jp>PvjBI>%#r}isq^F$V*vIr{vynI3lFht8@9ojPYgfoqXHW-draq~v3W@Q%n+(F zOz{JNJ^lCQ(_pxwMWkF7fsYXUK+_tq>+&MEQbLY%wq0pBqnU4X+5nujhixY%=y(P_ zdXLRgi6M)kXfn)+W_jTo@U{vrph1qheVYyQhSuDp^`>!pbSHI8*q=N9NO`FJaluw} z1uW9N7GG)q< zfr%;q0IJ&YZk~!XI30{KZs#h>n`G-2DI^dPNoC0!DJV7uEipu^1|^mf9j}d(7&6W~ zP83aqd&*2;G=N29+!-S5eJT$ON|cH{47srVMKCxK##&a=$zg5;ZaV<5P8KOio2f)U z#qaS*YD))!{dG-XW*~VZo6s_hzvx0Di3MSd7s|kXm?e0^RlzCK`xfVna*#PZl#JOc zBzp?C@Dw!+JZfooP8pb~jyuzimsqdCFJE-Br9`?F33RbQ zrVyv>2igXbXJL_DQ3SOhEF&C;2qgb?sH76u&+(CGP!!cA&gCX4B3Y7Mg8D4+8HcvX zT!M~`0GOe{B9j2uP!&!(Io?^x4g=&IAeA$-z5Xrtoy&H;U|KKMYxg0Y{p}wZs`4U_ zbWMoII4gZF0U~V)kutc$P-$}ilo38KjB+k zNjw=K_!!zYTralcR_it>uwY*=Ka_)G)Md))Or|wQUNeYqPC@i+5+Nx#q$xo4~DnY z7lj?nWy$LXB_<0yCkHzPQ^`Af9?4UL2l6!jV$-VV#$!~n&o+AuTp;4SVuYicih^C>is{barf$OKEYb&5laxg| zFy1J~&*g+SF+4BU2A*RS5z3{lK6u)xTjUKp$y>sLu%i5dlh{HOGOPo8lm;hBQFqkA z$HR!05v0p})<6x*oPsrL^uo+3Yh{X0_=88;h@(HYgLSpu!fXZwuW}#*O-*&6AZ+<) z-XCz9rid8AP;NCoJM1+}F2KUe-*KBO{*VfVHSINpww|`T%89nj?44_3=kHHdS(&x9 zXEdqv@38<5pnISm=lNWhlVm>h zLRLq{`jdDhoFV&}cbQ2Nn{?~r7aFfQnTT-v27mmNI3wI=$VFeTKw%2WqYYa3@}uw) z0YmJ$^WhL3{vxW|8<|ABosMugOd6yQ(*%4x#*ffhaSVy2P69C_ z%~vYP-m#{%OMEL?h`wQ>tiu_=uu9)@VP1!oXhefOGvJz=ml>iS!`t!d;OMKs&O`4& z{XVG=0;hSbxV#nnovCz`IcCJWY&+zyH%Xj#HIKhAxOV;>u=N}%L}+WXO3bstPtO?w z4d1R60tZAnj*cbxA-U6SSP~*6!3g|sEt~ylCk)BWxlW|-0##`}02k*CPgUZ<`UdpB z3cL6O@C%LfxH3^$qQClQQVXbNP_WjKWXnT9sx~r_Go{5>Jbd26fnKIcMg5{rYZR4d zOy3hvPkRhWk^{GDHe~c9DU*qBo~^2^R($t?zi}B-30LVJeo1Z_eowqR<1;sATZDd> zCZ{klVN1rmuo5ho~h9XKjQ8U_~M*8=5< rI7{^vEgmA?_dk|9R=A?df(?FKQTN1XZ2nz-<9Frb-xy6I?BD+bh$akd literal 0 HcmV?d00001 diff --git a/layers/+email/gnus/packages.el b/layers/+email/gnus/packages.el new file mode 100644 index 0000000..2cb717f --- /dev/null +++ b/layers/+email/gnus/packages.el @@ -0,0 +1,83 @@ +;;; packages.el --- gnus Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq gnus-packages '(gnus)) + +(defun gnus/init-gnus () + "Initialize my package" + (use-package gnus + :defer t + :commands gnus + :init + (spacemacs/set-leader-keys "ag" 'gnus) + :config + (progn + ;; No primary server + (setq gnus-select-method '(nnnil "")) + + ;; Use topics per default + (add-hook 'gnus-group-mode-hook 'gnus-topic-mode) + + (setq gnus-visible-headers + "^From:\\|^Reply-To\\|^Organization:\\|^To:\\|^Cc:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Gnus") + + ;; Show the article headers in this order. + (setq gnus-sorted-header-list + '("^From:" "^Reply-To" "^Organization:" "^To:" "^Cc:" "^Newsgroups:" + "^Subject:" "^Date:" "^Gnus")) + + (setq-default + gnus-summary-line-format "%U%R%z %(%&user-date; %-15,15f %B (%c) %s%)\n" + gnus-user-date-format-alist '((t . "%Y-%m-%d %H:%M")) + gnus-group-line-format "%M%S%p%P%5y:%B %G\n";;"%B%(%g%)" + gnus-summary-thread-gathering-function 'gnus-gather-threads-by-references + gnus-thread-sort-functions '(gnus-thread-sort-by-most-recent-date) + gnus-ignored-newsgroups "^to\\.\\|^[0-9. ]+\\( \\|$\\)\\|^[\”]\”[#’()]" + gnus-sum-thread-tree-false-root "" + gnus-sum-thread-tree-indent " " + gnus-sum-thread-tree-leaf-with-other "├► " + gnus-sum-thread-tree-root "" + gnus-sum-thread-tree-single-leaf "╰► " + gnus-sum-thread-tree-vertical "│" + gnus-article-browse-delete-temp t + gnus-treat-strip-trailing-blank-lines 'last + gnus-keep-backlog 'nil + gnus-summary-display-arrow nil ; Don't show that annoying arrow: + gnus-mime-display-multipart-related-as-mixed t ; Show more MIME-stuff: + gnus-auto-select-first nil ; Don't get the first article automatically: + smiley-style 'medium + gnus-keep-backlog '0) + + (require 'browse-url) + (require 'nnrss) + (defun spacemacs/browse-nnrss-url (arg) + "Open RSS Article directy in the browser" + (interactive "p") + (let ((url (assq nnrss-url-field + (mail-header-extra + (gnus-data-header + (assq (gnus-summary-article-number) + gnus-newsgroup-data)))))) + (if url + (progn + (browse-url (cdr url)) + (gnus-summary-mark-as-read-forward 1)) + (gnus-summary-scroll-up arg)))) + (add-to-list 'nnmail-extra-headers nnrss-url-field) + + (evilified-state-evilify gnus-group-mode gnus-group-mode-map) + (evilified-state-evilify gnus-server-mode gnus-server-mode-map) + (evilified-state-evilify gnus-browse-mode gnus-browse-mode-map) + (evilified-state-evilify gnus-article-mode gnus-article-mode-map) + (evilified-state-evilify gnus-summary-mode gnus-summary-mode-map + (kbd "J") 'gnus-summary-next-article + (kbd "K") 'gnus-summary-prev-article + (kbd "") 'spacemacs/browse-nnrss-url)))) diff --git a/layers/+email/mu4e/README.org b/layers/+email/mu4e/README.org new file mode 100644 index 0000000..40965d7 --- /dev/null +++ b/layers/+email/mu4e/README.org @@ -0,0 +1,210 @@ +#+TITLE: Mu4e layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#install][Install]] + - [[#commands][Commands]] + - [[#global-bindings][Global bindings]] + - [[#headers-mode][Headers mode]] + - [[#view-mode][View mode]] + - [[#configuration][Configuration]] + - [[#maildirs-extension][Maildirs extension]] + - [[#multiple-accounts][Multiple Accounts]] + - [[#example-configuration][Example configuration]] + - [[#notifications][Notifications]] + - [[#os-notifications][OS notifications]] + - [[#mode-line-notifications][Mode-line notifications]] + - [[#see-also][See also]] + +* Install +In order to use this layer you must install mu and mu4e separately. Typically +mu4e will be bundled with mu (this is the case on many Linux distributions). + +If you're on OS X and install mu using Homebrew, you must specify the +location of your Emacs binary at install time using the EMACS environment +variable, as well as passing the --with-emacs option: + +#+begin_src shell +brew install mu --with-emacs +#+end_src + +If the installation directory of mu4e is not in Emacs’ load path, you can set +the layer variable =mu4e-installation-path=, for example: + +#+begin_src emacs-lisp + (setq-default dotspacemacs-configuration-layers + '((mu4e :variables + mu4e-installation-path "/usr/share/emacs/site-lisp"))) +#+end_src + +Then add this layer to your =~/.spacemacs=. You will need to add =mu4e= to the +existing =dotspacemacs-configuration-layers= list in this file. + +* Commands + +** Global bindings + +| Keybinding | Command | +|------------+------------| +| SPC a M | Start mu4e | + +** Headers mode + +| Keybinding | Command | +|------------+-------------------------------------------------------------| +| J | Go to next unread thread marking other mail read on the way | +| C-j | Next header | +| C-k | Previous header | + +** View mode + +| Keybinding | Command | +|------------+-------------------------------------------------------------| +| J | Go to next unread thread marking other mail read on the way | +| C-j | Next header | +| C-k | Previous header | + +* Configuration +Configuration varies too much to give precise instructions. What follows is one +example configuration. Refer to mu4e's manual for more detailed configuration +instructions. + +** Maildirs extension +The maildirs extension adds a list of all your maildirs to the main mu4e view +that by default shows the unread and total mail counts for all your mail under +your base mail directory. + +This extension is enabled by default, you can deactivate (and uninstall) it by +adding the package == to your dotfile variable =dotspacemacs-excluded-packages=. + +** Multiple Accounts +This layer includes support for multiple sending accounts. +If you have only one account you do not need to define this variable. +If you have multiple accounts, configure the =mu4e-account-alist= variable: + +#+BEGIN_SRC emacs-lisp + (setq mu4e-account-alist + '(("gmail" + ;; Under each account, set the account-specific variables you want. + (mu4e-sent-messages-behavior delete) + (mu4e-sent-folder "/gmail/[Gmail]/.Sent Mail") + (mu4e-drafts-folder "/gmail/[Gmail]/.Drafts") + (user-mail-address "billy@gmail.com") + (user-full-name "Billy")) + ("college" + (mu4e-sent-messages-behavior sent) + (mu4e-sent-folder "/college/Sent Items") + (mu4e-drafts-folder "/college/Drafts") + (user-mail-address "bb15@college.edu") + (user-full-name "Billy Bob 15")))) + (mu4e/mail-account-reset) +#+END_SRC + +The first account listed will be the default account, so variables like +=user-full-name=, which is used by other parts of Emacs, will have their value +reset for the default account after sending each email. + +Note that the mu4e layer expects =mu4e-account-alist= to be defined before the +layer is loaded. For example, you can set =mu4e-account-alist= to a dummy +setting in =dotspacemacs/layers=: + +#+BEGIN_SRC emacs-lisp +(mu4e :variables mu4e-account-alist t) +#+END_SRC + +and then actually set =mu4e-account-alist= later in =dotspacemacs/user-config=. + +Make sure you call =mu4e/mail-account-reset= afterward, which will initialize +the given account variables. + +If you have mu 0.9.16 or later, you can use mu4e's built-in contexts feature +instead (see [[http://www.djcbsoftware.nl/code/mu/mu4e/Contexts.html#Contexts][mu4e's manual]]). + +** Example configuration +#+BEGIN_SRC emacs-lisp + ;;; Set up some common mu4e variables + (setq mu4e-maildir "~/.mail" + mu4e-trash-folder "/Trash" + mu4e-refile-folder "/Archive" + mu4e-get-mail-command "mbsync -a" + mu4e-update-interval nil + mu4e-compose-signature-auto-include nil + mu4e-view-show-images t + mu4e-view-show-addresses t) + + ;;; Mail directory shortcuts + (setq mu4e-maildir-shortcuts + '(("/gmail/INBOX" . ?g) + ("/college/INBOX" . ?c))) + + ;;; Bookmarks + (setq mu4e-bookmarks + `(("flag:unread AND NOT flag:trashed" "Unread messages" ?u) + ("date:today..now" "Today's messages" ?t) + ("date:7d..now" "Last 7 days" ?w) + ("mime:image/*" "Messages with images" ?p) + (,(mapconcat 'identity + (mapcar + (lambda (maildir) + (concat "maildir:" (car maildir))) + mu4e-maildir-shortcuts) " OR ") + "All inboxes" ?i))) +#+END_SRC + +** Notifications +~mu4e-alert~ is an extension that provides desktop notifications and adds the +count of unread messages to the modeline. + +[[https://raw.githubusercontent.com/iqbalansari/mu4e-alert/master/screenshots/mu4e-alert-in-action.png]] + +For an extended documentation of the available customizations please refer to +[[https://github.com/iqbalansari/mu4e-alert#customizations][mu4e-alert's documentation]] + +*** OS notifications +To enable notifications about new messages, add the following line to your +~dotspacemacs/user-config~: + +#+BEGIN_SRC emacs-lisp + (setq mu4e-enable-notifications t) +#+END_SRC + +or use layer variables when you add the layer to +=dotspacemacs-configuration-layers=: + +#+BEGIN_SRC emacs-lisp + (mu4e :variables mu4e-enable-notifications t) +#+END_SRC + +By default, notifications will be shown in the ~*Messages*~ buffer. To enable +desktop notifications about new messages, add the following lines to +your ~dotspacemacs/user-config~, according to your operating system and the +installed libraries: + +#+BEGIN_SRC emacs-lisp + (with-eval-after-load 'mu4e-alert + ;; Enable Desktop notifications + (mu4e-alert-set-default-style 'notifications)) ; For linux + ;; (mu4e-alert-set-default-style 'libnotify)) ; Alternative for linux + ;; (mu4e-alert-set-default-style 'notifier)) ; For Mac OSX (through the + ; terminal notifier app) + ;; (mu4e-alert-set-default-style 'growl)) ; Alternative for Mac OSX +#+END_SRC + +*** Mode-line notifications +To enable mode-line display about new messages, add the following line to +your ~dotspacemacs/user-config~: + +#+BEGIN_SRC emacs-lisp + (setq mu4e-enable-mode-line t) +#+END_SRC + +or use layer variables when you add the layer to +=dotspacemacs-configuration-layers=: + +#+BEGIN_SRC emacs-lisp + (mu4e :variables mu4e-enable-mode-line t) +#+END_SRC + +* See also +Refer to the official mu and mu4e documentation for additional info. + +- [[http://www.djcbsoftware.nl/code/mu/mu4e/index.html][mu4e Manual]] diff --git a/layers/+email/mu4e/config.el b/layers/+email/mu4e/config.el new file mode 100644 index 0000000..89fc8ac --- /dev/null +++ b/layers/+email/mu4e/config.el @@ -0,0 +1,25 @@ +;;; config.el --- mu4e Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar mu4e-installation-path nil + "Installation path for mu4e.") + +(defvar mu4e-account-alist nil + "Account alist for custom multi-account compose.") + +(defvar mu4e-enable-notifications nil + "If non-nil, enable desktop notifications for unread emails.") + +(defvar mu4e-enable-mode-line nil + "If non-nil, enable display of unread emails in mode-line.") + +(when mu4e-installation-path + (push mu4e-installation-path load-path)) diff --git a/layers/+email/mu4e/funcs.el b/layers/+email/mu4e/funcs.el new file mode 100644 index 0000000..b70da44 --- /dev/null +++ b/layers/+email/mu4e/funcs.el @@ -0,0 +1,53 @@ +;;; funcs.el --- mu4e Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun mu4e//search-account-by-mail-address (mailto) + "Return the account given an email address in MAILTO." + (car (rassoc-if (lambda (x) + (equal (cadr (assoc 'user-mail-address x)) (car mailto))) + mu4e-account-alist))) + +(defun mu4e/set-account () + "Set the account for composing a message. +This function tries to guess the correct account from the email address first +then fallback to the maildir." + (let* ((account + (if mu4e-compose-parent-message + (let* ((mailtos + (mu4e-message-field mu4e-compose-parent-message :to)) + (mailto-account + (car (cl-remove-if-not + 'identity + (mapcar 'mu4e//search-account-by-mail-address + mailtos)))) + (maildir + (mu4e-message-field mu4e-compose-parent-message :maildir)) + (maildir-account + (progn + (string-match "/\\(.*?\\)/" maildir) + (match-string 1 maildir)))) + (or mailto-account maildir-account)) + (funcall mu4e-completing-read-function + "Compose with account:" + (mapcar (lambda (var) (car var)) mu4e-account-alist)))) + (account-vars (cdr (assoc account mu4e-account-alist)))) + (if account-vars + (mu4e//map-set account-vars) + (error "No email account found")))) + +(defun mu4e//map-set (vars) + "Setq an alist VARS of variables and values." + (mapc (lambda (var) (set (car var) (cadr var))) + vars)) + +(defun mu4e/mail-account-reset () + "Reset mail account info to first." + (mu4e//map-set (cdar mu4e-account-alist))) diff --git a/layers/+email/mu4e/packages.el b/layers/+email/mu4e/packages.el new file mode 100644 index 0000000..86b5f34 --- /dev/null +++ b/layers/+email/mu4e/packages.el @@ -0,0 +1,81 @@ +;;; packages.el --- mu4e Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq mu4e-packages + '( + (mu4e :location site) + mu4e-alert + mu4e-maildirs-extension + org + )) + +(defun mu4e/init-mu4e () + (use-package mu4e + :commands (mu4e mu4e-compose-new) + :init + (progn + (spacemacs/set-leader-keys "a M" 'mu4e) + (global-set-key (kbd "C-x m") 'mu4e-compose-new)) + :config + (progn + (evilified-state-evilify-map mu4e-main-mode-map + :mode mu4e-main-mode + :bindings + (kbd "j") 'mu4e~headers-jump-to-maildir) + + (evilified-state-evilify-map + mu4e-headers-mode-map + :mode mu4e-headers-mode + :bindings + (kbd "C-j") 'mu4e-headers-next + (kbd "C-k") 'mu4e-headers-prev + (kbd "J") (lambda () + (interactive) + (mu4e-headers-mark-thread nil '(read)))) + + (evilified-state-evilify-map + mu4e-view-mode-map + :mode mu4e-view-mode + :bindings + (kbd "C-j") 'mu4e-view-headers-next + (kbd "C-k") 'mu4e-view-headers-prev + (kbd "J") (lambda () + (interactive) + (mu4e-view-mark-thread '(read)))) + + (setq mu4e-completing-read-function 'completing-read) + + (add-to-list 'mu4e-view-actions + '("View in browser" . mu4e-action-view-in-browser) t) + + (when mu4e-account-alist + (add-hook 'mu4e-compose-pre-hook 'mu4e/set-account) + (add-hook 'message-sent-hook 'mu4e/mail-account-reset))))) + +(defun mu4e/init-mu4e-alert () + (use-package mu4e-alert + :defer t + :init (with-eval-after-load 'mu4e + (when mu4e-enable-notifications + (mu4e-alert-enable-notifications)) + (when mu4e-enable-mode-line + (mu4e-alert-enable-mode-line-display))))) + +(defun mu4e/init-mu4e-maildirs-extension () + (use-package mu4e-maildirs-extension + :defer t + :init (with-eval-after-load 'mu4e (mu4e-maildirs-extension-load)))) + +(defun mu4e/post-init-org () + ;; load org-mu4e when org is actually loaded + (with-eval-after-load 'org (require 'org-mu4e nil 'noerror))) + + diff --git a/layers/+frameworks/django/README.org b/layers/+frameworks/django/README.org new file mode 100644 index 0000000..0cbcdda --- /dev/null +++ b/layers/+frameworks/django/README.org @@ -0,0 +1,83 @@ +#+TITLE: Django layer + +[[file:img/django.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + - [[#fabric][Fabric]] + - [[#files][Files]] + - [[#interactive][Interactive]] + - [[#server][Server]] + - [[#southsyncdb][South/Syncdb]] + - [[#test][Test]] + +* Description +This layer adds support for the Python [[https://www.djangoproject.com/][Django]] framework via [[https://github.com/davidmiller/pony-mode][pony-mode]]. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =django= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key Bindings +Django related key bindings uses [[https://github.com/davidmiller/pony-mode][pony-mode]] and are behind the prefix ~SPC m j~. + +Configuration options for pony-mode are documented at +[[http://www.deadpansincerity.com/docs/pony/configuration.html][deadpansincerity.com]] + +Manage Django with ~SPC m j m~. + +** Fabric + +| Key Binding | Description | +|---------------+----------------------------------| +| ~SPC m j a f~ | Run a fabric command | +| ~SPC m j a d~ | Deploy project with =fab deploy= | + +** Files + +| Key Binding | Description | +|---------------+---------------------------------------------------------------| +| ~SPC m j f s~ | Open the =settings.py= for this project | +| ~SPC m j f c~ | Interactively display a setting value in the minibuffer | +| ~SPC m j f t~ | Jump to template at point | +| ~SPC m j f r~ | Jump to the view file that the URL resolves to (experimental) | + +** Interactive + +| Key Binding | Description | +|---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ~SPC m j i d~ | Run interpreter for this project's default database as an inferior process | +| ~SPC m j i s~ | Open a Python shell with the current pony project's context loaded. If the project has the django_extras package installed, then use the excellent =shell_plus= command. Otherwise, fall back to =manage.py shell= | + +** Server + +| Key Binding | Description | +|---------------+-------------------------------------------------------------------| +| ~SPC m j r d~ | Stop the dev server | +| ~SPC m j r o~ | Open a tab at the dev server | +| ~SPC m j r r~ | Restart the dev server (works better with django_extras/werkzeug) | +| ~SPC m j r u~ | Start or open the dev server | +| ~SPC m j r t~ | Open a second server with a "throwaway" host/port | + +** South/Syncdb + +| Key Binding | Description | +|---------------+--------------------------------------------| +| ~SPC m j s c~ | Convert an existing app to south | +| ~SPC m j s h~ | Create migration for modification | +| ~SPC m j s i~ | Run the initial south migration for an app | +| ~SPC m j s m~ | Migrate an app | +| ~SPC m j s s~ | Run syncdb on the current project | + +** Test + +| Key Binding | Description | +|---------------+------------------------------------------------------------------| +| ~SPC m j t d~ | Move down the traceback one level | +| ~SPC m j t e~ | Go to the file and line of the last stack trace in a test buffer | +| ~SPC m j t o~ | Open the file in a traceback at the line specified | +| ~SPC m j t t~ | Run the test(s) given by =command= | +| ~SPC m j t u~ | Move up the traceback one level | diff --git a/layers/+frameworks/django/img/django.png b/layers/+frameworks/django/img/django.png new file mode 100644 index 0000000000000000000000000000000000000000..a7160736c74c6fa6c08037505d9b70ec6822f7d8 GIT binary patch literal 39548 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 )a4I9P5ok_Zx4_Np1AsjrQ#5O_e8 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 +;; URL: https://github.com/axyz +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Prerequisites + +(configuration-layer/declare-layer 'python) diff --git a/layers/+frameworks/django/packages.el b/layers/+frameworks/django/packages.el new file mode 100644 index 0000000..6ddb736 --- /dev/null +++ b/layers/+frameworks/django/packages.el @@ -0,0 +1,55 @@ +;;; packages.el --- Django Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq django-packages + '( + pony-mode + )) + +(defun django/init-pony-mode () + (use-package pony-mode + :defer t + :init (progn + (spacemacs/set-leader-keys-for-major-mode 'python-mode + ; d*j*ango f*a*bric + "jaf" 'pony-fabric + "jad" 'pony-fabric-deploy + ; d*j*ango *f*iles + "jfs" 'pony-goto-settings + "jfc" 'pony-setting + "jft" 'pony-goto-template + "jfr" 'pony-resolve + ; d*j*ango *i*nteractive + "jid" 'pony-db-shell + "jis" 'pony-shell + ; d*j*ango *m*anage + ; not including one-off management commands like "flush" and + ; "startapp" even though they're implemented in pony-mode, + ; because this is much handier + "jm" 'pony-manage + ; d*j*ango *r*unserver + "jrd" 'pony-stopserver + "jro" 'pony-browser + "jrr" 'pony-restart-server + "jru" 'pony-runserver + "jrt" 'pony-temp-server + ; d*j*ango *s*outh/*s*yncdb + "jsc" 'pony-south-convert + "jsh" 'pony-south-schemamigration + "jsi" 'pony-south-initial + "jsm" 'pony-south-migrate + "jss" 'pony-syncdb + ; d*j*ango *t*est + "jtd" 'pony-test-down + "jte" 'pony-test-goto-err + "jto" 'pony-test-open + "jtt" 'pony-test + "jtu" 'pony-test-up)))) diff --git a/layers/+frameworks/react/README.org b/layers/+frameworks/react/README.org new file mode 100644 index 0000000..f71c764 --- /dev/null +++ b/layers/+frameworks/react/README.org @@ -0,0 +1,136 @@ +#+TITLE: React layer + +[[file:img/react.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#optional-configuration][Optional Configuration]] + - [[#key-bindings][Key Bindings]] + - [[#formatting-web-beautify][Formatting (web-beautify)]] + - [[#documentation-js-doc][Documentation (js-doc)]] + - [[#auto-complete-and-documentation-tern][Auto-complete and documentation (tern)]] + +* Description + +ES6 and JSX ready configuration layer for React +It will automatically recognize =.jsx= and =.react.js= files + +It will also recognize =/** @jsx React.DOM */= if it is the first line. + +** Features +- on-the-fly syntax checking +- proper syntax highlight and indentation with jsx +- ternjs turbocharged autocompletion as in js2-mode +- jsfmt automatic formatting +- js2-refactor +- js-doc + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =react= to the existing =dotspacemacs-configuration-layers= list in this +file. + +You will also need to install =tern= to use the auto-completion and +documentation features: +#+BEGIN_SRC sh + $ npm install -g tern +#+END_SRC + +To use the on-the-fly syntax checking, install =eslint= with babel and react support: +#+BEGIN_SRC sh + $ npm install -g eslint babel-eslint eslint-plugin-react +#+END_SRC + +If your project do not use a custom =.eslintrc= file I strongly advice you to try out this one by Airbnb: +[[https://github.com/airbnb/javascript/blob/master/linters/.eslintrc][.eslintrc]] + +In order to use automatic code formatting you need to install ~js-beautify~ with: +#+BEGIN_SRC sh + $ npm install -g js-beautify +#+END_SRC + +Be sure to have the ~e4x~ option set to ~true~ on your ~.jsbeautifyrc~ here it is my configuration as an example: +#+BEGIN_SRC json + { + "indent_size": 2, + "indent_char": " ", + "eol": "\n", + "indent_level": 0, + "indent_with_tabs": false, + "preserve_newlines": true, + "max_preserve_newlines": 2, + "jslint_happy": false, + "space_after_anon_function": false, + "brace_style": "collapse", + "keep_array_indentation": false, + "keep_function_indentation": false, + "space_before_conditional": true, + "break_chained_methods": true, + "eval_code": false, + "unescape_strings": false, + "wrap_line_length": 80, + "wrap_attributes": "auto", + "wrap_attributes_indent_size": 2, + "e4x": true, + "end_with_newline": true + } +#+END_SRC + +* Optional Configuration + +You may refer to the =web-mode= configuration for fine tuning the indenting behaviour. + +For example to have a consistent 2 spaces indenting both on =js= and =jsx= you may use these settings: + +#+begin_src emacs-lisp + (setq-default + ;; js2-mode + js2-basic-offset 2 + ;; web-mode + css-indent-offset 2 + web-mode-markup-indent-offset 2 + web-mode-css-indent-offset 2 + web-mode-code-indent-offset 2 + web-mode-attr-indent-offset 2) +#+end_src + +And if you want to have 2 space indent also for element's attributes, concatenations and contiguous function calls: +#+begin_src emacs-lisp + (with-eval-after-load 'web-mode + (add-to-list 'web-mode-indentation-params '("lineup-args" . nil)) + (add-to-list 'web-mode-indentation-params '("lineup-concats" . nil)) + (add-to-list 'web-mode-indentation-params '("lineup-calls" . nil))) +#+end_src + +* Key Bindings + +** Formatting (web-beautify) + +| Key Binding | Description | +|-------------+--------------------------------------------------------------| +| ~SPC m =~ | beautify code in js2-mode, json-mode, web-mode, and css-mode | + +*** Documentation (js-doc) + +You can check more [[https://github.com/mooz/js-doc/][here]] + +| Key Binding | Description | +|---------------+---------------------------------------| +| ~SPC m r d b~ | insert JSDoc comment for current file | +| ~SPC m r d f~ | insert JSDoc comment for function | +| ~SPC m r d t~ | insert tag to comment | +| ~SPC m r d h~ | show list of available jsdoc tags | + +** Auto-complete and documentation (tern) + +| Key Binding | Description | +|---------------+------------------------------------------------------------------------------------------| +| ~SPC m C-g~ | brings you back to last place you were when you pressed M-.. | +| ~SPC m g g~ | jump to the definition of the thing under the cursor | +| ~SPC m g G~ | jump to definition for the given name | +| ~SPC m h d~ | find docs of the thing under the cursor. Press again to open the associated URL (if any) | +| ~SPC m h t~ | find the type of the thing under the cursor | +| ~SPC m r r V~ | rename variable under the cursor using tern | + diff --git a/layers/+frameworks/react/config.el b/layers/+frameworks/react/config.el new file mode 100644 index 0000000..f510019 --- /dev/null +++ b/layers/+frameworks/react/config.el @@ -0,0 +1,16 @@ +;;; config.el --- react Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Andrea Moretti +;; URL: https://github.com/axyz +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(spacemacs|defvar-company-backends react-mode) + +(spacemacs|define-jump-handlers react-mode) diff --git a/layers/+frameworks/react/img/react.png b/layers/+frameworks/react/img/react.png new file mode 100644 index 0000000000000000000000000000000000000000..15ea421f4f694898521030c9de6c427cb37c56bc GIT binary patch literal 13425 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 F{{a-d;-mlo literal 0 HcmV?d00001 diff --git a/layers/+frameworks/react/layers.el b/layers/+frameworks/react/layers.el new file mode 100644 index 0000000..e071ef2 --- /dev/null +++ b/layers/+frameworks/react/layers.el @@ -0,0 +1,12 @@ +;;; layers.el --- react Layer layers File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Andrea Moretti +;; URL: https://github.com/axyz +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(configuration-layer/declare-layers '(html javascript)) diff --git a/layers/+frameworks/react/packages.el b/layers/+frameworks/react/packages.el new file mode 100644 index 0000000..4dd354e --- /dev/null +++ b/layers/+frameworks/react/packages.el @@ -0,0 +1,96 @@ +;;; packages.el --- react Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Andrea Moretti +;; URL: https://github.com/axyz +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq react-packages + '( + company + company-tern + emmet-mode + evil-matchit + flycheck + js-doc + smartparens + tern + web-beautify + web-mode + )) + +(defun react/post-init-company () + (spacemacs|add-company-hook react-mode)) + +(defun react/post-init-company-tern () + (push 'company-tern company-backends-react-mode)) + +(defun react/post-init-emmet-mode () + (add-hook 'react-mode-hook 'emmet-mode)) + +(defun react/post-init-evil-matchit () + (with-eval-after-load 'evil-matchit + (plist-put evilmi-plugins 'react-mode '((evilmi-simple-get-tag evilmi-simple-jump) + (evilmi-javascript-get-tag evilmi-javascript-jump) + (evilmi-html-get-tag evilmi-html-jump))))) + +(defun react/post-init-flycheck () + (with-eval-after-load 'flycheck + (dolist (checker '(javascript-eslint javascript-standard)) + (flycheck-add-mode checker 'react-mode))) + (defun react/use-eslint-from-node-modules () + (let* ((root (locate-dominating-file + (or (buffer-file-name) default-directory) + "node_modules")) + (global-eslint (executable-find "eslint")) + (local-eslint (expand-file-name "node_modules/.bin/eslint" + root)) + (eslint (if (file-executable-p local-eslint) + local-eslint + global-eslint))) + (setq-local flycheck-javascript-eslint-executable eslint))) + + (add-hook 'react-mode-hook #'react/use-eslint-from-node-modules) + + (spacemacs/add-flycheck-hook 'react-mode)) + +(defun react/post-init-js-doc () + (add-hook 'react-mode-hook 'spacemacs/js-doc-require) + (spacemacs/js-doc-set-key-bindings 'react-mode)) + +(defun react/post-init-smartparens () + (if dotspacemacs-smartparens-strict-mode + (add-hook 'react-mode-hook #'smartparens-strict-mode) + (add-hook 'react-mode-hook #'smartparens-mode))) + +(defun react/post-init-tern () + (add-hook 'react-mode-hook 'tern-mode) + (spacemacs//set-tern-key-bindings 'react-mode)) + +(defun react/post-init-web-beautify () + (spacemacs/set-leader-keys-for-major-mode 'react-mode "=" 'web-beautify-js)) + +(defun react/post-init-web-mode () + (define-derived-mode react-mode web-mode "react") + (add-to-list 'auto-mode-alist '("\\.jsx\\'" . react-mode)) + (add-to-list 'auto-mode-alist '("\\.react.js\\'" . react-mode)) + (add-to-list 'auto-mode-alist '("\\index.android.js\\'" . react-mode)) + (add-to-list 'auto-mode-alist '("\\index.ios.js\\'" . react-mode)) + (add-to-list 'magic-mode-alist '("/\\*\\* @jsx React\\.DOM \\*/" . react-mode)) + (add-to-list 'magic-mode-alist '("^import React" . react-mode)) + (defun spacemacs//setup-react-mode () + "Adjust web-mode to accommodate react-mode" + (emmet-mode 0) + ;; See https://github.com/CestDiego/emmet-mode/commit/3f2904196e856d31b9c95794d2682c4c7365db23 + (setq-local emmet-expand-jsx-className? t) + ;; Enable js-mode snippets + (yas-activate-extra-mode 'js-mode) + ;; Force jsx content type + (web-mode-set-content-type "jsx") + ;; Don't auto-quote attribute values + (setq-local web-mode-enable-auto-quoting nil)) + (add-hook 'react-mode-hook 'spacemacs//setup-react-mode)) diff --git a/layers/+frameworks/ruby-on-rails/README.org b/layers/+frameworks/ruby-on-rails/README.org new file mode 100644 index 0000000..dbeec77 --- /dev/null +++ b/layers/+frameworks/ruby-on-rails/README.org @@ -0,0 +1,83 @@ +#+TITLE: Ruby on Rails layer + +[[file:img/ror.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + - [[#code-navigation][Code Navigation]] + - [[#refactoring][Refactoring]] + - [[#run-commands][RUN commands]] + - [[#ex-commands][Ex-commands]] + +* Description +This layer aims at providing support for the Ruby on Rails framework. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =ruby-on-rails= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key bindings +** Code Navigation + +| Key binding | Description | +|---------------+-----------------------------------------------------------------| +| ~SPC m r f a~ | find localization file | +| ~SPC m r f c~ | find controller | +| ~SPC m r f e~ | find environment file | +| ~SPC m r f f~ | find feature | +| ~SPC m r f h~ | find helper | +| ~SPC m r f i~ | find initializer | +| ~SPC m r f j~ | find javascript file | +| ~SPC m r f l~ | find library | +| ~SPC m r f m~ | find model | +| ~SPC m r f n~ | find migration | +| ~SPC m r f o~ | find log | +| ~SPC m r f p~ | find spec file | +| ~SPC m r f r~ | find rake task | +| ~SPC m r f s~ | find stylesheet file | +| ~SPC m r f t~ | find test | +| ~SPC m r f u~ | find fixture | +| ~SPC m r f v~ | find view | +| ~SPC m r f y~ | find layout | +| ~SPC m r f @~ | find mailer | +| ~SPC m r g c~ | go to current controller | +| ~SPC m r g d~ | go to DB schema | +| ~SPC m r g e~ | go to DB seeds | +| ~SPC m r g h~ | go to current helper | +| ~SPC m r g j~ | go to current javascript | +| ~SPC m r g g~ | go to Gemfile | +| ~SPC m r g m~ | go to current model | +| ~SPC m r g n~ | go to current migration | +| ~SPC m r g p~ | go to current spec | +| ~SPC m r g r~ | go to routes | +| ~SPC m r g s~ | go to current stylesheet | +| ~SPC m r g t~ | go to current test | +| ~SPC m r g u~ | go to current fixture | +| ~SPC m r g v~ | go to current view | +| ~SPC m r g z~ | go to spec helper | +| ~SPC m r g .~ | go to file at point (faster but less powerful than ~SPC m g g~) | + +** Refactoring + +| Key binding | Description | +|---------------+-----------------------------| +| ~SPC m r R x~ | extract region into partial | + +** RUN commands + +| Key binding | Description | +|---------------+----------------------| +| ~SPC m r :~ | run rake task | +| ~SPC m r c c~ | run rails generator | +| ~SPC m r i~ | start rails console | +| ~SPC m r s r~ | reload Rails project | +| ~SPC m r x s~ | start rails server | + +** Ex-commands + +| Key binding | Description | +|-------------+-----------------------------------------| +| ~:A~ | Switch between implementation and tests | diff --git a/layers/+frameworks/ruby-on-rails/img/ror.png b/layers/+frameworks/ruby-on-rails/img/ror.png new file mode 100644 index 0000000000000000000000000000000000000000..b58beb451934d28ec88a502bc7564780bf61398f GIT binary patch literal 7568 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 +;; URL: https://github.com/axyz +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Prerequisites + +(configuration-layer/declare-layer 'ruby) diff --git a/layers/+frameworks/ruby-on-rails/packages.el b/layers/+frameworks/ruby-on-rails/packages.el new file mode 100644 index 0000000..860c7f8 --- /dev/null +++ b/layers/+frameworks/ruby-on-rails/packages.el @@ -0,0 +1,89 @@ +;;; packages.el --- Ruby on Rails Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq ruby-on-rails-packages + '( + feature-mode + projectile-rails + which-key + )) + +(defun ruby-on-rails/init-projectile-rails () + (use-package projectile-rails + :defer t + :init + (progn + (add-hook 'projectile-mode-hook 'projectile-rails-on)) + :config + (progn + (spacemacs|diminish projectile-rails-mode " ⇋" " RoR") + + ;; Find files + (dolist (mode '(ruby-mode enh-ruby-mode)) + (spacemacs/set-leader-keys-for-major-mode mode + "rfa" 'projectile-rails-find-locale + "rfc" 'projectile-rails-find-controller + "rfe" 'projectile-rails-find-environment + "rff" 'projectile-rails-find-feature + "rfh" 'projectile-rails-find-helper + "rfi" 'projectile-rails-find-initializer + "rfj" 'projectile-rails-find-javascript + "rfl" 'projectile-rails-find-lib + "rfm" 'projectile-rails-find-model + "rfn" 'projectile-rails-find-migration + "rfo" 'projectile-rails-find-log + "rfp" 'projectile-rails-find-spec + "rfr" 'projectile-rails-find-rake-task + "rfs" 'projectile-rails-find-stylesheet + "rft" 'projectile-rails-find-test + "rfu" 'projectile-rails-find-fixture + "rfv" 'projectile-rails-find-view + "rfy" 'projectile-rails-find-layout + "rf@" 'projectile-rails-find-mailer + ;; Goto file + "rgc" 'projectile-rails-find-current-controller + "rgd" 'projectile-rails-goto-schema + "rge" 'projectile-rails-goto-seeds + "rgh" 'projectile-rails-find-current-helper + "rgj" 'projectile-rails-find-current-javascript + "rgg" 'projectile-rails-goto-gemfile + "rgm" 'projectile-rails-find-current-model + "rgn" 'projectile-rails-find-current-migration + "rgp" 'projectile-rails-find-current-spec + "rgr" 'projectile-rails-goto-routes + "rgs" 'projectile-rails-find-current-stylesheet + "rgt" 'projectile-rails-find-current-test + "rgu" 'projectile-rails-find-current-fixture + "rgv" 'projectile-rails-find-current-view + "rgz" 'projectile-rails-goto-spec-helper + "rg." 'projectile-rails-goto-file-at-point + ;; Rails external commands + "r:" 'projectile-rails-rake + "rcc" 'projectile-rails-generate + "ri" 'projectile-rails-console + "rxs" 'projectile-rails-server + ;; Refactoring 'projectile-rails-mode + "rRx" 'projectile-rails-extract-region) + (spacemacs/declare-prefix-for-mode mode "mr" "rails/rubocop") + (spacemacs/declare-prefix-for-mode mode "mrf" "file") + (spacemacs/declare-prefix-for-mode mode "mrg" "goto")) + + ;; Ex-commands + (evil-ex-define-cmd "A" 'projectile-toggle-between-implementation-and-test)))) + +(defun ruby-on-rails/init-feature-mode () + "Initialize Cucumber feature mode" + (use-package feature-mode + :mode (("\\.feature\\'" . feature-mode)))) + +(defun ruby-on-rails/post-init-which-key () + (push '("projectile-rails-\\(.+\\)" . "\\1") + which-key-description-replacement-alist)) diff --git a/layers/+fun/emoji/README.org b/layers/+fun/emoji/README.org new file mode 100644 index 0000000..2f02168 --- /dev/null +++ b/layers/+fun/emoji/README.org @@ -0,0 +1,38 @@ +#+TITLE: Emoji layer + +[[file:img/emojis.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + - [[#emoji-dedicated-buffer][Emoji dedicated buffer]] + +* Description +This layer adds support for Emoji emoticons from [[http://www.emoji-cheat-sheet.com/][emoji-cheat-sheet.com]]. + +** Features +- Browse Emoji in a dedicated buffer +- Display Emoji images in buffer +- Insert one or several Emoji with an helm front-end +- Completion of Emojis using [[https://github.com/dunn/company-emoji][company-emoji]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =emoji= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key bindings + +| Key Binding | Description | +|-------------+-----------------------------------------| +| ~SPC a E~ | open a dedicated buffer to browse Emoji | +| ~SPC i e~ | insert Emoji via an helm buffer | + +** Emoji dedicated buffer + +| Key Binding | Description | +|-------------+-------------------------| +| ~RET~ | copy current Emoji code | +| ~q~ | quit | diff --git a/layers/+fun/emoji/img/emojis.png b/layers/+fun/emoji/img/emojis.png new file mode 100644 index 0000000000000000000000000000000000000000..fd58e1b0017e44f471d354e873d9421445846e82 GIT binary patch literal 22124 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 Y{8U#rq47Kk76nC9Rad1>$?oI-06yBzB>(^b literal 0 HcmV?d00001 diff --git a/layers/+fun/emoji/packages.el b/layers/+fun/emoji/packages.el new file mode 100644 index 0000000..50e584a --- /dev/null +++ b/layers/+fun/emoji/packages.el @@ -0,0 +1,42 @@ +;;; packages.el --- emoji Layer Packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq emoji-packages + '( + emoji-cheat-sheet-plus + (company-emoji :toggle (configuration-layer/package-usedp 'company)) + )) + +(defun emoji/init-emoji-cheat-sheet-plus () + (use-package emoji-cheat-sheet-plus + :commands (emoji-cheat-sheet-plus-insert + emoji-cheat-sheet-plus-buffer + emoji-cheat-sheet-plus-display-mode) + :init + (progn + (spacemacs/set-leader-keys "aE" 'emoji-cheat-sheet-plus-buffer) + (spacemacs/set-leader-keys "ie" 'emoji-cheat-sheet-plus-insert) + (evilified-state-evilify emoji-cheat-sheet-plus-buffer-mode + emoji-cheat-sheet-plus-buffer-mode-map + "" 'emoji-cheat-sheet-plus-echo-and-copy) + + (defun spacemacs/delay-emoji-cheat-sheet-hook () + "Work-around for org buffers." + ;; we need to wait for org buffer to be fully loaded before + ;; calling the emoji mode. + ;; If we directly call the emoji mode at hook runtime then some + ;; text properties are not applied correctly. + (run-at-time 0.1 nil 'emoji-cheat-sheet-plus-display-mode))))) + +(defun emoji/init-company-emoji () + (use-package company-emoji + :defer t + :init (setq company-emoji-insert-unicode nil))) diff --git a/layers/+fun/games/README.org b/layers/+fun/games/README.org new file mode 100644 index 0000000..efe8ba2 --- /dev/null +++ b/layers/+fun/games/README.org @@ -0,0 +1,96 @@ +#+TITLE: Games layer + +[[file:img/games.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#games-instructions][Games instructions]] + - [[#2048][2048]] + - [[#pacmacs][Pacmacs]] + - [[#tetris][Tetris]] + - [[#typit][Typit]] + - [[#create-a-new-dictionary][Create a new dictionary]] + +* Description +This layer allows you to play evilified games in spacemacs. + +The games available now are: +- 2048-game +- Pacmacs (Pacman for Emacs) +- Tetris +- Typit + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =games= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Games instructions +To run a game: + +| Key Binding | Description | +|-------------+----------------------------------------| +| ~SPC a G~ | Open an =helm= buffer to select a game | + +Possible helm actions: +- run (default) +- quit +- reset + +** 2048 + +| Key Binding | Description | +|-------------+----------------------| +| ~h~ | Move the tiles left | +| ~j~ | Move the tiles down | +| ~k~ | Move the tiles up | +| ~l~ | Move the tiles right | + +** Pacmacs + +| Key Binding | Description | +|-------------+-------------| +| ~h~ | Move left | +| ~j~ | Move down | +| ~k~ | Move up | +| ~l~ | Move right | +| | | + +** Tetris + +| Key Binding | Description | +|-------------+--------------------------------| +| ~h~ | Move block to the left | +| ~i~ | Rotate block counter-clockwise | +| ~j~ | Move block to the bottom | +| ~k~ | Rotate block clockwise | +| ~l~ | Move block to the right | +| ~n~ | Start a new game | +| ~p~ | Pause the game | +| ~q~ | Quit the game | + +** Typit +There is no specific key bindings for this game, just launch it and begin +typing. Use ~C-g~ to exit the game at any time. + +There are two difficulties: +- beginner: use 200 most common words +- expert: use 1000 most common words + +By default a game duration is one minute. + +The game can be customized with the following variables: + +| Vsariable | Description | +|---------------------+-------------------------------------------------------| +| =typit-dict= | Language dictionary to use (default is =english.txt=) | +| =typit-dict-dir= | A directory path where to find dictionaries | +| =typit-line-length= | Length of generated lines (default 80) | +| =typit-test-time= | Duration of a game in seconds (default 60) | + +*** Create a new dictionary +To add a new dictionary, you need to create a text file named your-language.txt +and put it under the dict directory. That file should contain 1000 most common +words from the language, a word per line. Please make sure that it uses +Unix-style (that is, LF) end-of-line sequence and the file ends with a newline. diff --git a/layers/+fun/games/config.el b/layers/+fun/games/config.el new file mode 100644 index 0000000..a78697c --- /dev/null +++ b/layers/+fun/games/config.el @@ -0,0 +1,22 @@ +;;; config.el --- Games Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variable + +(defvar spacemacs-games-cache-directory + (concat spacemacs-cache-directory "games/") + "Directory where to store games data.") + +;; create the game cache directory +(unless (file-exists-p spacemacs-games-cache-directory) + (make-directory spacemacs-games-cache-directory)) + +(setq helm-games-list nil) diff --git a/layers/+fun/games/funcs.el b/layers/+fun/games/funcs.el new file mode 100644 index 0000000..91faea6 --- /dev/null +++ b/layers/+fun/games/funcs.el @@ -0,0 +1,44 @@ +;;; funcs.el --- Games Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + + +(defun spacemacs/tetris-quit-game () + "Correctly quit tetris by killng the game buffer." + (interactive) + (tetris-pause-game) + (if (yes-or-no-p "Do you really want to quit ? ") + (progn + (tetris-end-game) + (kill-buffer "*Tetris*")) + (tetris-pause-game))) + + + +(defun spacemacs/games-start-typit-beginner () + "Start `typit' game in beginner difficulty." + (interactive) + (spacemacs//games-start-typit 'basic)) + +(defun spacemacs/games-start-typit-expert () + "Start `typit' game in expert difficulty." + (interactive) + (spacemacs//games-start-typit 'advanced)) + +(defun spacemacs//games-start-typit (type) + "Start a `typit' game with TYPE difficulty." + (with-current-buffer (get-buffer-create "*typit*") + (let ((evil-escape-inhibit t) + (golden-ratio-mode nil)) + (evil-insert-state) + (funcall (intern (format "typit-%S-test" type)))))) + + diff --git a/layers/+fun/games/img/games.png b/layers/+fun/games/img/games.png new file mode 100644 index 0000000000000000000000000000000000000000..8e62caaa46f7f38eac29e4a25b25ac64cc9f47f1 GIT binary patch literal 18610 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 literal 0 HcmV?d00001 diff --git a/layers/+fun/games/local/helm-games/helm-games.el b/layers/+fun/games/local/helm-games/helm-games.el new file mode 100644 index 0000000..9233d13 --- /dev/null +++ b/layers/+fun/games/local/helm-games/helm-games.el @@ -0,0 +1,82 @@ +;;; helm-games.el --- Games selection with `helm'. + +;; Author: Sylvain Benner +;; Keywords: helm, spacemacs, games +;; 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 configuration +;; layers thanks to helm. + +;;; Code: + +(require 'helm) + +(defvar helm-games-list '() + "List of game candidates to pass to helm.") + +;;;###autoload +(defun helm-games () + "Games selection with helm interface." + (interactive) + (helm :buffer "*helm: games*" + :sources `(,(helm-games//games-source)))) + +(defun helm-games//games-source () + "Construct the helm source for the games." + `((name . "Games") + (candidates . ,(helm-games//game-candidates)) + (candidate-number-limit) + (action . (("Run" . helm-games//run-game) + ("Quit" . helm-games//quit-game) + ("Reset" . helm-games//reset-game))))) + +(defun helm-games//game-candidates () + "Return the list of game candidates." + (setq helm-games-list (sort helm-games-list + (lambda (x y) + (string< (car x) (car y))))) + helm-games-list) + +(defun helm-games//run-game (candidate) + "Run the selected game." + (message "%s" candidate) + (let ((func (car candidate))) + (when func + (call-interactively func)))) + +(defun helm-games//quit-game (candidate) + "Quit the selected game." + (let ((func (plist-get (cdr candidate) :quit))) + (when func + (if (listp func) + (eval func) + (funcall func))))) + +(defun helm-games//reset-game (candidate) + "Reset the selected game." + (let ((func (plist-get (cdr candidate) :reset))) + (when func + (if (listp func) + (eval func) + (funcall func))))) + +(provide 'helm-games) + +;;; helm-games.el ends here diff --git a/layers/+fun/games/packages.el b/layers/+fun/games/packages.el new file mode 100644 index 0000000..ee9fdb7 --- /dev/null +++ b/layers/+fun/games/packages.el @@ -0,0 +1,89 @@ +;;; packages.el --- games Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq games-packages + '( + 2048-game + (helm-games :location local + :toggle (configuration-layer/package-usedp 'helm)) + pacmacs + (tetris :location built-in) + typit + )) + +(defun games/init-2048-game () + (use-package 2048-mode + :defer t + :init + (progn + (push '("2048" . (2048-game :quit (kill-buffer-ask (get-buffer "2048")) + :reset 2048-init)) helm-games-list) + (evilified-state-evilify 2048-mode 2048-mode-map + "j" '2048-down + "k" '2048-up + "h" '2048-left + "l" '2048-right)))) + +(defun games/init-helm-games () + (use-package helm-games + :commands helm-games + :init + (progn + (spacemacs/declare-prefix "aG" "games") + (spacemacs/set-leader-keys "aG" 'helm-games)))) + +(defun games/init-pacmacs () + (use-package pacmacs + :defer t + :init + (push '("pacmacs" . (pacmacs-start + :quit (kill-buffer-ask (get-buffer "*Pacmacs*")) + :reset pacmacs-start)) helm-games-list) + (evilified-state-evilify pacmacs-mode pacmacs-mode-map + "h" 'pacmacs-left + "j" 'pacmacs-down + "k" 'pacmacs-up + "l" 'pacmacs-right))) + +(defun games/init-tetris () + (use-package tetris + :defer t + :init + (progn + (push '("Tetris" . (tetris :quit spacemacs/tetris-quit-game + :reset tetris-start-game)) helm-games-list) + (setq tetris-score-file (concat spacemacs-games-cache-directory + "tetris-scores.txt"))) + :config + (progn + (evilified-state-evilify tetris-mode tetris-mode-map + "h" 'tetris-move-left + "i" 'tetris-rotate-prev + "j" 'tetris-move-bottom + "k" 'tetris-rotate-next + "l" 'tetris-move-right + "q" 'spacemacs/tetris-quit-game)))) + +(defun games/init-typit () + (use-package typit + :defer t + :init + (progn + (push '("typit (beginner)" . + (spacemacs/games-start-typit-beginner + :quit (kill-buffer-ask (get-buffer "*typit*")) + :reset spacemacs/games-start-typit-beginner)) + helm-games-list) + (push '("typit (expert)" . + (spacemacs/games-start-typit-expert + :quit (kill-buffer-ask (get-buffer "*typit*")) + :reset spacemacs/games-start-typit-expert)) + helm-games-list)))) diff --git a/layers/+fun/selectric/README.org b/layers/+fun/selectric/README.org new file mode 100644 index 0000000..6cd5d60 --- /dev/null +++ b/layers/+fun/selectric/README.org @@ -0,0 +1,28 @@ +#+TITLE: selectric layer + +[[file:img/typewriter.jpg]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + +* Description +This layer makes your Emacs sound like an IBM Selectric typewriter, for those +moments when your loud, clicky mechanical keyboard is not at hand, yet, you'd +still wish to enjoy the sound. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =selectric= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key Bindings + +| Key Binding | Description | +|-------------+--------------------------| +| ~SPC C-t t~ | Toggle clicky key sounds | + +* Notes + +IBM Selectric image by Oliver Kurmis diff --git a/layers/+fun/selectric/img/typewriter.jpg b/layers/+fun/selectric/img/typewriter.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5dac2042c12d3a38022b2d9c69d6e3d7e7e6b4e GIT binary patch literal 22897 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq xkcd-packages '(xkcd)) + +(defun xkcd/init-xkcd () + (use-package xkcd-mode + :defer t + :init + (progn + (setq xkcd-cache-dir (concat spacemacs-cache-directory "xkcd/")) + (when (not (file-directory-p xkcd-cache-dir)) + (make-directory xkcd-cache-dir)) + (spacemacs/set-leader-keys + "ax" 'xkcd) + (evilified-state-evilify xkcd-mode xkcd-mode-map + "h" 'xkcd-prev + "j" 'xkcd-next + "k" 'xkcd-prev + "l" 'xkcd-next)))) diff --git a/layers/+intl/chinese/README.org b/layers/+intl/chinese/README.org new file mode 100644 index 0000000..ad3bd82 --- /dev/null +++ b/layers/+intl/chinese/README.org @@ -0,0 +1,137 @@ +#+TITLE: Chinese layer + +[[file:img/China.png]] [[file:img/Chinese.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#configuration][Configuration]] + - [[#configure-the-default-input-method配置默认中文输入法][Configure the Default Input Method(配置默认中文输入法)]] + - [[#configure-the-chinese-pyim-input-method配置中文拼音输入法][Configure the =Chinese-pyim= Input Method(配置中文拼音输入法)]] + - [[#enable-fcitx][Enable fcitx]] + - [[#requirement][Requirement]] + - [[#enable-youdao有道-dictionary激活有道字典][Enable YouDao(有道) Dictionary(激活有道字典)]] + - [[#set-monospaced-font-size设置等宽字体][Set monospaced font size(设置等宽字体)]] + - [[#enabledisable-ace-pinyin-in-avy-goto-char][Enable/Disable ace-pinyin in =avy-goto-char=]] + - [[#key-bindings][Key Bindings]] + - [[#youdao-dictionary][Youdao Dictionary]] + - [[#find-by-pinyin-dired][Find-by-pinyin-dired]] + +* Description +This Layer adds Chinese related packages: +- [[https://github.com/tumashu/chinese-pyim][chinese-pyim]] : The best Chinese Pinyin(拼音) input method. +- [[https://github.com/andyque/chinese-wbim][chinese-wbim]]: The best Chinese Wubi(五笔) input method. +- [[https://github.com/cute-jumper/fcitx.el][cute-jumper/fcitx.el]]: This package provides a set of functions to make fcitx work better in Emacs. +- [[https://github.com/xuchunyang/youdao-dictionary.el][youdao-dictionary]]: The Youdao(有道) Dictionary interface for Emacs. +- [[https://github.com/redguardtoo/find-by-pinyin-dired][find-by-pinyin-dired]]: Find file by first Pinyin characters of Chinese Hanzi. +- [[https://github.com/cute-jumper/ace-pinyin][ace-pinyin]]: Jump to Chinese character by pinyin with =ace-jump-mode=. +- [[https://github.com/coldnew/pangu-spacing][coldnew/pangu-spacing]] : emacs minor-mode to add space between Chinese and English characters. +- Join consecutive Chinese lines into a single long line without unwanted space when exporting org-mode to html. + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =chinese= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Configuration +*** Configure the Default Input Method(配置默认中文输入法) +The default Chinese input method is =Chinese-pyim=, if you are a Wubi(五笔) user, +you could set the variable =chinese-default-input-method= to =wubi=: +#+begin_src emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (chinese :variables chinese-default-input-method 'wubi))) +#+end_src + +*** Configure the =Chinese-pyim= Input Method(配置中文拼音输入法) +When the first time you use =Chinese-pyim=, you should install the lexicon(词库) +file. You could call =pyim-dicts-manager= to open up the settings buffer and +press =i e= to install the default lexicon. The lexicon is about 20M, so you +should be patient when downloading starts. After the lexicon file is downloaded, +just press =s= to save and =R= to restart configuration. + +*** Enable fcitx +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '((chinese :variables + chinese-enable-fcitx t))) +#+END_SRC +If you don’t need to type Chinese in minibuffer, you could temporarily disable fcitx in minibuffer +with the following configuration. + +#+BEGIN_SRC emacs-lisp + (fcitx-aggressive-setup) +#+END_SRC + +**** Requirement +***** Linux +You need use this with =fcitx= and make sure =fcitx-remote= is in your search path. + +***** Mac OS X +We don't have a =fcitx= in OS X yet but we already added an emulation called +=fcitx-remote= to make you happy with other Chinese input-methods. + +You can install [[https://github.com/CodeFalling/fcitx-remote-for-osx][fcitx-remote-for-osx]] from homebrew. + +#+BEGIN_SRC shell + brew install fcitx-remote-for-osx --with-input-method=baidu-pinyin +#+END_SRC + +=--with-input-method=baidu-pinyin= means install for Baidu-pinyin Input Method. + +You can use =brew info fcitx-remote-for-osx= to get more options info for input +method support. + +#+BEGIN_EXAMPLE +--with-input-method= + Select input method: baidu-pinyin(default), baidu-wubi, sogou-pinyin, qq-wubi, squirrel-rime, osx-pinyin +#+END_EXAMPLE + +***** Windows +In order to use =fcitx.el= in Windows, you should install [[https://github.com/cute-jumper/fcitx-remote-for-windows][fcitx-remote-for-windows]]. + +*** Enable YouDao(有道) Dictionary(激活有道字典) +The YouDao Dictionary is disabled by default, if you want enable it. +You should set =chinese-enable-youdao-dict= to =t=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '((chinese :variables + chinese-enable-youdao-dict t))) + +#+END_SRC + +*** Set monospaced font size(设置等宽字体) +If you are mixing Chinese words with English words, the text is not perfectly +aligned in org table. That's because normally the Chinese font size is not equal +to the English font size. You could call =spacemacs//set-monospaced-font= with +your own Chinese font name in =dotspacemacs/user-config= function. + +Example configuration: +#+BEGIN_SRC emacs-lisp +;; Note: The Hiragino Sans GB is bundled with MacOS X. +;; If you are not using MacOS X, you should change it to another Chinese font name. +(spacemacs//set-monospaced-font "Source Code Pro" "Hiragino Sans GB" 14 16) +#+END_SRC + +*** Enable/Disable ace-pinyin in =avy-goto-char= +You can use =avy-goto-char= with pinyin supported by default, if you want to +disable it.You can set =chinese-enable-avy-pinyin= to =nil=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '((chinese :variables + chinese-enable-avy-pinyin nil))) +#+END_SRC + +* Key Bindings +Currently, there are no built-in key bindings for this layer. You could define +your own preference. + +Here are a few suggested key bindings (remember that ~SPC o~ is reserved for +personal usage, spacemacs won´t put any binding under this prefix): + +** Youdao Dictionary +Bind ~SPC o y~ to =youdao-dictionary-search-at-point+=. + +** Find-by-pinyin-dired +Bind ~SPC o d~ to =find-by-pinyin-dired= + diff --git a/layers/+intl/chinese/config.el b/layers/+intl/chinese/config.el new file mode 100644 index 0000000..fc79f55 --- /dev/null +++ b/layers/+intl/chinese/config.el @@ -0,0 +1,38 @@ +;;; config.el --- Chinese Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar chinese-default-input-method 'pinyin + "The default chinese input method. Can be `wubi` or `pinyin`.") + +(defvar chinese-enable-youdao-dict nil + "Enable YouDao Dict translation service.") + +(defvar chinese-enable-avy-pinyin t + "Enable ace-pinyin in avy-goto-char") + +(defvar chinese-enable-fcitx nil + "Enable fcitx to help writing Chinese in Evil mode.") + +;; Set the monospaced font size when mixed Chinese and English words +(defun spacemacs//set-monospaced-font (english chinese english-size chinese-size) + (set-face-attribute 'default nil :font + (format "%s:pixelsize=%d" english english-size)) + (dolist (charset '(kana han cjk-misc bopomofo)) + (set-fontset-font (frame-parameter nil 'font) charset + (font-spec :family chinese :size chinese-size)))) + +;; If the Hiragino Sans GB font is not found in your system, you could call this +;; method in dotspacemacs/user-config function with a different Chinese font name. +;; If you are using mac, you could put the following code in your dotspacemacs/user-config function. +;; (when (spacemacs/system-is-mac) +;; (spacemacs//set-monospaced-font "Source Code Pro" "Hiragino Sans GB" 14 16)) diff --git a/layers/+intl/chinese/img/China.png b/layers/+intl/chinese/img/China.png new file mode 100644 index 0000000000000000000000000000000000000000..a2c4ea26996ffeab2a12a5b5ea1874796dfc7e45 GIT binary patch literal 1529 zcmVp5ZxIN|L6e!-2nX21Nz1V^sWf;oeAoB z4CGY~-!2gEl?v{X3g9;n=W7k~stEnl1OC_n?1T&9KM(e_2j^!E=3ouuP7dsc3+QhR z`p5<1Mi26(3FTZ4>wXOR!3FJ%3-Fr>cc5|>000FrNkllYp4!oN1ru9=UYAJH6mRkVhpQ`aB`)kz)&{ws}a12;keQxk&&x~E>5vj(;M6(tN!k*W)#M1BFxTJw3ULFWMYcNf2&&Zs235CK#+1X*E7>Ak;f#ccs`+%F#GctPlic@9Y_%qv8s?fign{` zJMvJ^VWR03S)|VCuC717|Lko<#$mo2*{bLE!Kl^zYI7bY_O`A*ZEjxg1w~B)BS=xB zH?)R9k$Pu1`6Bq_>t{l&?=OJmc0HKI`DD&pbqq>_&4Y^|+$UQ7KUEm1G-VSTlsFBA zY1OhpQT;>c8WJ;LPS5=~8HWjL>?fm6EvFvI-i*^w;Ze_V<4A5pKB9KWC|%2OV$o&F z{~QuCQ_jy^3(>D*CHX|@nfXIRh;=fl~uQ+o{MCi@A8L`dD$-Ai;!4!5#21c;h|s43H2dVqj{sKkYS19>K`?~Ra5G@ zx_uPdzA;XOH@hH}&|Bq%w`<>O{Ds@869m6GCUkUr-kJa6D@VXNccAU2vE2v{nS}p{%@WUJEsm$mz1r-VyN(4*@rG0rb@y+ zosZNpZEYX2-j0iLQ~HG))fHYGix#OvcsFb2B^~9f!f;9Z}uk$8G4vWoeXbaLgambAJ7PWduK;5nV>OcG%d~ji$UR0(779GRdQp^VtaD z>sqg=<q8++uCP(Pd)5ak z(u5Ajn0GUBD^K08T9_7Ml9SPB&$LPiZz3i+J3!2Mn8bw45R(Gk@qmY<+QFEwbheF4 zT0Ou2(?=O|dcnBTU>PfmoxrMr3Bz<`V}i8F$UQwKjCwJ`k9R8`Auk|o=6+K6TSyuD{2#Zf zQLlb{>)@eKO#lD@00000000000000000000000000000000000000000000000000 f000000N~PpPdYjY0_!KX00000NkvXXu0mjfETrZA literal 0 HcmV?d00001 diff --git a/layers/+intl/chinese/img/Chinese.png b/layers/+intl/chinese/img/Chinese.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac390c29c267c835e9c785c67f72d7f94260b0a GIT binary patch literal 4877 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; List of all packages to install and/or initialize. Built-in packages +;; which require an initialization must be listed explicitly in the list. +(setq chinese-packages + '( + (chinese-pyim :toggle (eq chinese-default-input-method 'pinyin)) + (chinese-wbim :toggle (eq chinese-default-input-method 'wubi)) + (fcitx :toggle chinese-enable-fcitx) + find-by-pinyin-dired + ace-pinyin + pangu-spacing + org + (youdao-dictionary :toggle chinese-enable-youdao-dict) + )) + +(defun chinese/init-fcitx () + (use-package fcitx + :init + (fcitx-evil-turn-on))) + +(defun chinese/init-chinese-wbim () + "Initialize chinese-wubi" + (use-package chinese-wbim + :if (eq 'wubi chinese-default-input-method) + :init + (progn + (autoload 'chinese-wbim-use-package "chinese-wubi" + "Another emacs input method") + ;; Tooptip is not good enough, so disable it here. + (setq chinese-wbim-use-tooltip nil) + (register-input-method + "chinese-wubi" "euc-cn" 'chinese-wbim-use-package + "五笔" "汉字五笔输入法" "wb.txt") + (require 'chinese-wbim-extra) + (global-set-key ";" 'chinese-wbim-insert-ascii) + (setq default-input-method 'chinese-wubi)))) + +(defun chinese/init-youdao-dictionary () + (use-package youdao-dictionary + :if chinese-enable-youdao-dict + :defer + :config + (progn + ;; Enable Cache + (setq url-automatic-caching t + ;; Set file path for saving search history + youdao-dictionary-search-history-file + (concat spacemacs-cache-directory ".youdao") + ;; Enable Chinese word segmentation support + youdao-dictionary-use-chinese-word-segmentation t)))) + +(defun chinese/init-chinese-pyim () + (use-package chinese-pyim + :if (eq 'pinyin chinese-default-input-method) + :init + (progn + (setq pyim-use-tooltip t + pyim-dicts-directory spacemacs-cache-directory + pyim-personal-file (concat spacemacs-cache-directory + "pyim-personal.txt") + default-input-method "chinese-pyim") + (evilified-state-evilify pyim-dicts-manager-mode pyim-dicts-manager-mode-map)))) + +(defun chinese/init-find-by-pinyin-dired () + (use-package find-by-pinyin-dired + :defer t)) + +(defun chinese/init-ace-pinyin () + (use-package ace-pinyin + :defer t + :init + (progn + (if chinese-enable-avy-pinyin + (setq ace-pinyin-use-avy t)) + (ace-pinyin-global-mode t) + (spacemacs|hide-lighter ace-pinyin-mode)))) + +(defun chinese/init-pangu-spacing () + (use-package pangu-spacing + :defer t + :init (progn (global-pangu-spacing-mode 1) + (spacemacs|hide-lighter pangu-spacing-mode) + ;; Always insert `real' space in org-mode. + (add-hook 'org-mode-hook + '(lambda () + (set (make-local-variable 'pangu-spacing-real-insert-separtor) t)))))) + +(defun chinese/post-init-org () + (defadvice org-html-paragraph (before org-html-paragraph-advice + (paragraph contents info) activate) + "Join consecutive Chinese lines into a single long line without +unwanted space when exporting org-mode to html." + (let* ((origin-contents (ad-get-arg 1)) + (fix-regexp "[[:multibyte:]]") + (fixed-contents + (replace-regexp-in-string + (concat + "\\(" fix-regexp "\\) *\n *\\(" fix-regexp "\\)") "\\1\\2" origin-contents))) + (ad-set-arg 1 fixed-contents)))) diff --git a/layers/+intl/keyboard-layout/README.org b/layers/+intl/keyboard-layout/README.org new file mode 100644 index 0000000..fa80bb6 --- /dev/null +++ b/layers/+intl/keyboard-layout/README.org @@ -0,0 +1,189 @@ +#+TITLE: keyboard-layout layer + +[[file:img/keyboard-layout.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#installation][Installation]] + - [[#configuration][Configuration]] + - [[#enabledisable-package-configurations][Enable/Disable package configurations]] + - [[#addoverride-key-bindings][Add/Override key bindings]] + - [[#concept][Concept]] + - [[#keyboard-layouts][Keyboard layouts]] + - [[#bepo][bepo]] + - [[#dvorak][dvorak]] + - [[#package-configurations][Package Configurations]] + - [[#keybindings][Keybindings]] + - [[#sources][Sources]] + +* Description +This layer configures some keybindings in spacemacs to make it compatible with +keyboard layouts that differs from the traditional =en-us= keymap. + +* Installation +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =keyboard-layout= to the existing =dotspacemacs-configuration-layers= list +in this file. You can then select the desired layout by specifying the +=kl-layout= variable: + +#+begin_src emacs-lisp +(setq-default dotspacemacs-configuration-layers '( + (keyboard-layout :variables kl-layout 'dvorak))) +#+end_src + +* Configuration +** Enable/Disable package configurations +This layer can be customized with two variables: +- kl-enabled-configurations +- kl-disabled-configurations + +The first one is used to set the list of configurations to activate, and the +second one to prevent loading certain configurations. If the +=kl-enabled-configurations= is nil (by default), all configurations are loaded. +Otherwise, only the listed configurations are loaded. Any configuration listed +in =kl-disabled-configurations= will never be loaded, whether it is in the +enabled list or not (empty by default). + +#+begin_src emacs-lisp +(setq-default dotspacemacs-configuration-layers '( + (keyboard-layout :variables + kl-layout 'dvorak + kl-disabled-configurations '(org magit)))) +#+end_src + +** Add/Override key bindings +It is possible to override or add bindings by defining functions named +=kl/pre-config-= and =kl/post-config-= in =dotspacemacs/user-init=. +They are respectively called just before and after the actual configuration of +keybindings in this layer, so *you don't have to think about when to apply the +configuration by yourself*. == is the name of the configuration you want +to customize, they are listed under the [[#configuration][Configuration]] section. + +Example: +#+begin_src emacs-lisp +(defun kl/post-config-company () + "Company delete backward." + (kl/set-in-state company-active-map (kbd "C-w") 'evil-delete-backward-word)) +#+end_src + +Note: If you define some of these functions in your own layer, be sure that the +=keyboard-layout= layer is placed _after_ it in the +=dotspacemacs-configuration-layers= list. + +* Concept +This package first switch traditional ~hjkl~ movement keys with their equivalent +in destination layout, and then try to correct the bugs introduced by these +changes in other parts of Spacemacs. This layer only tries to do these changes +when the letters are used for *doing a movement*. + +The equivalent remapping is also made for uppercase letters, ~CTRL+KEY~, +~META+KEY~ and leaders keybindings (~SPC …~) whenever it makes sense to make +such changes. + +In some cases the key remapping will not follow these conventions, mainly +because there are better alternatives, or because some moves don't make sense. + +#+begin_verse +Example: In the =magit= status buffer, the ~c~ is used for =commit= by default, +but if we want to follow the conventions, it should be remapped to "move left" +in bepo. As it is not useful to move left on =magit= because operations are done +line by line the ~c~ is not remapped. +#+end_verse + +* Keyboard layouts +The keyboard-layouts available with this layer are the following: + +** bepo +[[file:img/bepo-logo.png]] + +=bepo= is a keyboard layout optimized for the French language. + +[[file:img/bepo-keymap.png]] + +The mapping correction is the one proposed for vim on the official bepo [[http://bepo.fr/wiki/Vim#Principe][wiki]]. + +- Map the movements keys under the right hand's fingers: + - ~c → h~ + - ~t → j~ + - ~s → k~ + - ~r → l~ + +- Map lost functionalities back to some keys: + - ~h → r~ + - ~j → t~ + - ~k → s~ + - ~l → c~ + +Some bepo keys are not used in traditional mapping, mainly because they are not +on the =en-us= keyboard layout. They are used as aliases for other shortcuts: + +- Map unused ~é~ key as an alias of ~w~, more useful in vim mode: + - ~é → w~ + - ~É → W~ + +- Map indentation on direct-access keys: + - ~» → >~ + - ~« → <~ + +Some default configurations are also not optimal for vim, so the following +defaults are changed: + +- Change =evil-escape= escape combination to something faster to type, while + being nearly nonexistent in French or English words: + - ~fd → gq~ + +- In =avy=, the key used to select words/lines are remapped to the 8 characters + under the fingers: + - ~a u i e t s r n~ + +Note: One difference exists with the wiki version: the ~w~ is *not* remapped to +~C-w~ to avoid having to change its meaning in other modes. Spacemacs provides +already a ~SPC w~ key binding for working with windows. + +** dvorak +=dvorak= is a keyboard layout optimized for the English language. [[http://www.kaufmann.no/roland/dvorak/][dvorak +programmer]] is an optimized keyboard layout focused in programming and it's a +variant of the more general =dvorak= (us) keyboard layout. This configuration +will remap keybindings for the =dvorak-programmer= variant. + +[[file:img/dvorak-keymap.png]] + +* Package Configurations +The available configurations are: + +- ace-window +- avy +- comint +- company +- elfeed +- evil +- evil-escape +- evil-evilified-state +- evil-surround +- eyebrowse +- flycheck +- helm +- imenu-list +- ivy +- magit +- mu4e +- neotree +- org +- org-agenda +- ranger +- twittering-mode + +* Keybindings +This layer is using functions that try to /automatically/ remap keybindings in a +lot of modes, so it's difficult to list all changed keybindings. And + +- You chose to use a different keyboard layout. +- You chose to be on the dark side by using evil (because they have :cookie: obviously). +- You chose to use a layer, written with :heart:, that try to solve the induced mess. + +So the price you have to pay is the absence of a keybindings list. + +* Sources +The keyboard-layout logo is coming from [[https://openclipart.org/detail/202777/keyboard-layout][openclipart.org]] and is under the public +domain. The bepo logo and the keymap images are coming from the [[http://bepo.fr/][bepo]] official +website. They are licensed under the [[http://creativecommons.org/licenses/by-sa/3.0/deed.en][CC-BY-SA]]. diff --git a/layers/+intl/keyboard-layout/config.el b/layers/+intl/keyboard-layout/config.el new file mode 100644 index 0000000..c2be535 --- /dev/null +++ b/layers/+intl/keyboard-layout/config.el @@ -0,0 +1,75 @@ +;;; config.el --- keyboard-layout Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Fabien Dubosson +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;;------------------------------------------------------------------------------ +;; PUBLIC VARIABLES +;;------------------------------------------------------------------------------ + +(defvar kl-layout 'dvorak + "The keyboard-layout to use. Possible values are `dvorak' and `bepo'.") + +(defvar kl-enabled-configurations nil + "If non nil, `keyboard-layout' will enable configurations only +for the passed list of symbols. Configurations that are also in +`kl-disabled-configurations' will not be loaded.") + +(defvar kl-disabled-configurations nil + "If non nil, `keyboard-layout' will disable configurations for +the passed list of symbols. This list takes priority over +`kl-enabled-configurations', so they will not be loaded in +any case.") + +;;------------------------------------------------------------------------------ +;; PRIVATE VARIABLES +;;------------------------------------------------------------------------------ + +(defvar kl--base-rebinding-maps + '((bepo . (("c" . "h") + ("t" . "j") + ("s" . "k") + ("r" . "l") + ;; + ("h" . "r") + ("j" . "t") + ("k" . "s") + ("l" . "c"))) + (dvorak . (("h" . "h") + ("t" . "j") + ("n" . "k") + ("s" . "l") + ;; + ("h" . "h") + ("j" . "t") + ("k" . "n") + ("l" . "s")))) + "The base rebinding map. Dots should be read as `will behave + as'. It should be a bidirectional mapping, i.e. all present + keys should be once in each column.") + +(defvar kl--rebinding-maps + (mapcar (lambda (map) `(,(car map) . ,(kl//generate-full-rebinding-map (cdr map)))) + kl--base-rebinding-maps) + "The full rebinding map. Dots should be read as `will behave as'.") + +(with-eval-after-load 'evil + (defvar kl--all-evil-states + (list evil-normal-state-map + evil-visual-state-map + evil-insert-state-map + evil-emacs-state-map + evil-motion-state-map) + "The list of all evil states.") + + (defvar kl--all-evil-states-but-insert + (list evil-normal-state-map + evil-visual-state-map + evil-motion-state-map) + "The list of all evil states except insert.")) diff --git a/layers/+intl/keyboard-layout/funcs.el b/layers/+intl/keyboard-layout/funcs.el new file mode 100644 index 0000000..7928801 --- /dev/null +++ b/layers/+intl/keyboard-layout/funcs.el @@ -0,0 +1,206 @@ +;;; funcs.el --- keyboard-layout Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Fabien Dubosson +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Map multiple states at once. Courtesy of Michael Markert; +;; http://permalink.gmane.org/gmane.emacs.vim-emulation/1674 + +;;------------------------------------------------------------------------------ +;; PRIVATE FUNCTIONS +;;------------------------------------------------------------------------------ + +(defun kl//generate-full-rebinding-map (basemap) + "Generate the full rebinding map from a base map." + (mapcan (lambda (binding) + (let ((key1 (car binding)) + (key2 (cdr binding))) + (append + (list (cons (upcase key1) (upcase key2)) + (cons key1 key2)) + (mapcar + (lambda (modifier) + (cons (concat modifier key1) (concat modifier key2))) + '("" "C-" "M-" "C-S-"))))) + basemap)) + +(defun kl//define-key (maps key def bindings) + "Define a list of KEYS to their associated DEFINITIONS in all +the given MAPS." + (declare (indent 1)) + (while key + ;; Define the key + (dolist (map maps) + (define-key map (kbd key) def)) + ;; Get next keybinding + (setq key (pop bindings) + def (pop bindings)))) + +(defun kl//remap-key-as (map bindings) + "Define keys to the associated definitions of other ones. All +remapping are done atomically, i.e. if `a' -> `b' and `c' -> `a', +then `c' will be defined to the old `a' function, not to `b'." + (declare (indent 1)) + (let ((map-original (copy-tree map))) + (dolist (binding bindings) + (let ((key1 (kbd (car binding))) + (key2 (kbd (cdr binding)))) + (define-key map key1 (lookup-key map-original key2)))))) + +(defun kl//replace-in-list-rec (lst elem repl) + "Replace recursively all occurrences of `elem' by `repl' in the +list `lst'." + (declare (indent 0)) + (if (typep lst 'list) + (let* ((body-position (cl-position elem lst))) + (if body-position + ;; The element is in the list, replace it + (progn + (setf (nth body-position lst) repl) + lst) + ;; The element is not in the list, recurse + (dolist (l lst) + (kl//replace-in-list-rec l elem repl)))))) + +(defun kl//guess-rebindings (key) + "Tries to guess the rebindings needed to correct the given +key." + (let* ((key1 key) + (prefix nil) + (rebinding-map (cdr (assoc kl-layout kl--rebinding-maps)))) + ;; If key not existing as-is in the kl--rebinding-maps, try on last letter. + (when (not (assoc key1 rebinding-map)) + (setq key1 (substring key -1)) + (setq prefix (substring key 0 -1))) + (let* ((key2 (cdr (assoc key1 rebinding-map))) + (bind1 (assoc key1 rebinding-map)) + (bind2 (assoc key2 rebinding-map))) + (when prefix + (defun kl//guess-prefixit (bind) + `(,(concat prefix (car bind)) . ,(concat prefix (cdr bind)))) + (setq bind1 (kl//guess-prefixit bind1)) + (setq bind2 (kl//guess-prefixit bind2))) + `(,bind1 ,bind2)))) + +;;------------------------------------------------------------------------------ +;; HELPER FUNCTIONS +;;------------------------------------------------------------------------------ + +(defun kl/set-in-state (map key def &rest bindings) + "Define a list of keys with their associated functions in a +given state map." + (declare (indent 1)) + (kl//define-key (list map) key def bindings)) + +(defun kl/set-in-states (maps key def &rest bindings) + "Define a list of keys with their associated functions in all +given state maps." + (declare (indent 1)) + (kl//define-key maps key def bindings)) + +(defun kl/set-in-all-evil-states (key def &rest bindings) + "Define a list of keys with their associated functions in all +evil states." + (declare (indent 0)) + (kl//define-key kl--all-evil-states key def bindings)) + +(defun kl/set-in-all-evil-states-but-insert (key def &rest bindings) + "Define a list of keys with their associated functions in all +evil states, except insert." + (declare (indent 0)) + (kl//define-key kl--all-evil-states-but-insert key def bindings)) + +(defun kl/leader-alias-of (key1 key2) + "Define a leader key as an alias of another one." + (spacemacs/set-leader-keys key1 (lookup-key spacemacs-default-map key2))) + +(defun kl/leader-swap-keys (key1 key2) + "Invert the behaviour of two leader keys." + (let ((map1 (lookup-key spacemacs-default-map key1)) + (map2 (lookup-key spacemacs-default-map key2))) + (spacemacs/set-leader-keys key1 map2 key2 map1))) + +;;------------------------------------------------------------------------------ +;; CORRECTION FUNCTIONS +;;------------------------------------------------------------------------------ + +(defun kl/correct-keys (map &rest keys) + (declare (indent 1)) + (let ((bindings (mapcan #'kl//guess-rebindings keys))) + (kl//remap-key-as map (remove-if #'null bindings)))) + +(defun kl/evil-correct-keys (state map &rest keys) + (declare (indent 2)) + (apply #'kl/correct-keys (evil-get-auxiliary-keymap map state) keys)) + +(defun kl/leader-correct-keys (&rest keys) + (declare (indent 0)) + (apply #'kl/correct-keys spacemacs-default-map keys)) + +;;------------------------------------------------------------------------------ +;; MAIN MACRO +;;------------------------------------------------------------------------------ + +(defmacro kl|config (name &rest props) + "Macro used for structuring `keyboard-layout' configuration changes. + +Usage: + + (kl|config configuration-name + [:keyword option]...) + +:disable Boolean, whether the configuration is disabled or not. +:description String, documents what the configuration does. +:functions Code, functions definitions. +:loader Code, used to load the configuration. Must contains `BODY' + where the real configuration must be placed. +:config Code, the configuration code. +:special Code executed as-is at the end, without being wrapped inside + the `:loader'. + +All keywords are optional, except for `:config'. + +These configurations can be overridden by the user using a +`kl/pre-config-' or `kl/post-config-' +function (taking no argument). These functions will be called just +before or after the keyboard-layout's configurations." + (declare (indent 1)) + (let* ((disable (plist-get props :disable)) + (description (plist-get props :description)) + (functions (plist-get props :functions)) + (loader (plist-get props :loader)) + (common (plist-get props :common)) + (specific (plist-get props (intern (format ":%s" kl-layout)))) + (special (plist-get props :special)) + (preconf (intern (format "kl/pre-config-%s" name))) + (postconf (intern (format "kl/post-config-%s" name))) + (body `(progn + (when (fboundp ',preconf) (funcall ',preconf)) + ,common + ,specific + (when (fboundp ',postconf) (funcall ',postconf)) + ))) + ;; Use loader if defined + (when loader + (kl//replace-in-list-rec loader 'BODY body) + (setq body loader)) + ;; If the configuration is not disabled + (when (not disable) + ;; If the configuration is not in disabled-list + (when (not (member name kl-disabled-configurations)) + ;; If the package is in enabled-list, if any. + (when (or (not kl-enabled-configurations) (member name kl-enabled-configurations)) + (when init-file-debug + (message (format "[kl] Configuration enabled: '%s'" name))) + `(progn + ,functions + ,body + ,special + ,description + )))))) diff --git a/layers/+intl/keyboard-layout/img/bepo-keymap.png b/layers/+intl/keyboard-layout/img/bepo-keymap.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9d75a0fab1f1cd2a1a736ce27a2e2224f1fab1 GIT binary patch literal 12334 zcmb8VcRXCr8$Y_sVwJE&jbQcOMOby!mFN*IN`h>ZMDHzY)kv^GbRuk&Afm1AgXmU7 z4}uWAm*`^e=KH(%zV5$wc6QFpGv&;jc|Xs*&&+vcY^ZyK>J}9M0Jx!t&@u%8NTC1# zkP%Eu3{&Qk?T8tmXK({J08o`gef5M403i8mtZ$}GloK5j6B7U+2LQkTFxdYt|6+1- z#1ueKP*6@z4n~XtYybcx0EU#4vjN!H0FX#I8ygrBNtD{i5xpFem<=O}VK&5Exd;FZ z1F*pYkQe|G2SDNh$O!;)4iJc!K;k6=@h~LOPr#6KHgXY27{(NdMgk)16U5dlM?V5oFhItqrtz|zy@BCs$FPNJkl zqND~^Q2~g@10p5>>79UxRY2}8prR8{F)5Lamy76zMNGgjv#{JbiIR3$MJKFc5{5g4 zb#}r!Ct;mirYMwYBFZ#7+Xjn8qEJXwIue8NNksW%6XO*=CE3V|3Y&;-(=xmbw%fFZ z7_K5Qv&h_CWJM>kViJj)^=ZK)ai>Te0XaG8(~d_D6C+#5NkW7i00RSHZ2&kV(ZdJ; z0096azyJg!fB?e~kT~Kvun}@N3@jqT27^Iju{JmyvO7X<76T(-VBJ`oSsappL9SwL z2sk7r9rZRFg-Nf#RG=_8%-fpm%96y&l5AWB3RjVitEj-?aF_`E+jx8gwi|;x#o!2) z*?3$o(NExT1WacIW)_F*Ovg=DU{|p?0xqJv`z;=inVpU3Ud0R(FtY^A8UeFKsKn!O zlasjNQ`{^8N0`N~uHpz=I06A*lTB=ZfWr`QID8o%--4gTO%O|TcSp>2rq9k|@a-jd ze9i1+1+m_0cLZS;v)YX%OjZzPajUCX0s)7|x8w2n?(WsuSpxCby}CNPwmM575QgW7 z>DAS4!d54NFi9ZHuCA`Gt*sH(RtbbH0%7-<=+3SPgwqRR;lF2Bf3Jxb0^$1ln)p!v z|G80Cc}8Llps%Un1AzMK44~uN0RU*f{`&)aJxZL2LJD6! z18s_FFg=Z&s9K9hB>(^g=xM>t0%vx@UOV2_3!Y-)l_<(6Bd#IA6s^0cSvNYI$ovZWTY8HU^HN-d<7g?tVzrK;2zBy6> zkKEr@$FDy(7-Yz>AlxwXJH?v~k57$FjLjW=w`e{rnRsA(9QNNun0@O-SyGr-vR0>2 zIfVC2%UAk9gSmTFX_A6TvgpGzs|A@8r)V)rB`QkoF?{2bg1!(JQ9VRE^gVSnB2U3{NeSzV+A}nJa^QIib z?$140=v^V+ZWYHZpK7XK5;pQ_R3}7_$HaoS^~pnmvRPjll#0?c*;|F|CuT?HB#4_U zjq5=(q>RCfdQ87L)~qXQ_Sh(cuu5GZW~wJ6>=FH=-*wcSvv5<)smQ#~C0I$$ZwSG! z`1ASGF3SI+Au@%a&=Ix$x3v-@(nc@@ans>n)~#w(t4>Uq^#w@}yBlYmnWVdNH;r-E*Y)p5`US~Q zv*DT$_wPr&Q%~IZYR(nph|Tc?4Xw;eTbJA617j!aRbv`7X}jT8uV z)$^U7=m=Q*)rmTJnlctPCXsEG6lGo5C?9BWX1!c+9s07=kii@}I9cEc=T|-WvCjL9 zo0~5zC`N(0>cZJ&qkiYW9DZH?>Bn!GsNUL7_hp>#PX^D%ny)1=$!N@E1oJ58*I}f_ zCv4(Ahb%WZEXMh2VI}5qXXOPWqibINW{74F-Aais zm@Ssv+ydi&6Hx6I+nl1xz}`PW9n^Bqmg=p+k|h^^&E9>}#BW~O&d%o|Cq!L(PpolaUW3`z1L#o`PG zAkU=AB`uTOB)W#%Ev%APHN?`L^`p!X+E>*AK`7=7z7Hj3rG>W5H2Gf*v`*a;8hyha z3B6(+O9^Gvb$J?Xxc8!w#d}I5%4ll;!=l#-*UKJRxBPVx${U8sfbowm^o&dP$$V~_ zeDAi{{OTk@DKi-(>q%O^3iS6OA~GTOaXnMPK%`5x8Xfz8pV@pg!o8+3Z4j<~66WQM z7dQZ%_I4f9r-rqbjOVt8a$_w*6F{ciaEO{Hvz3WRjs0DdFX`}fWw$k>%+u<-^!HSB*A+vrkv zKj5~?n87RP-p@^HxSWCW(9EmXVXqNM@)gx$eyTz@jwmPnUo*qke;;m&d|Wxzh94G0 z#4F((o&w6YthI}+dp`(byINV7$C#>U4bVSxTo{~=y)x50DA0Ych3H-A`A|iE>ls0c z^wCf)J&a#3!%KMNCojR^L`(;Fa~br>Dv)!?E>?BlLz{Rcj`hRcsTzR_Mj%_2nnbs1Fi zUm1S6`}qMzI!woYGF`__yN0&^r1=IsPf=ut`mM1kB<@cPbT7>K(ajMIEvx~Xuo zc+ndhHC_#pJI{esGD5Nm8Hw}$LvhyTfpeJ0YfV2J7B12Hmn>Z)_TDY)LK5umCLdyo zyEYABn-bwKOauSGwZ)2mHCTe^*^({o;Ft;~qpgOXtOiTb$?x+H&uw#ZS@!U+4ox2q zO$amntUY^8*`*B$9x!RwJSgCioGEpsvQr>$N~AD0+4KEY1MRf|ZE#iJoSbb{1EXuX zL-fRW7pvHvKhx*c2qxUBN$Bdk>4ENwS~&XtDC#^a9_sY9^_$@KjS8;<$#NBH^-Z7SjLaLo?q%5%QwoEdOcRYRHquHuJh&dU>|luW70}D+vuZ4XZNOV7x>)j@pK; zR%QOGS$*5d7Ppw72a{dVG7h?9saYk$cv2PH)>`W;R^ zm*9`!rnbyo((k}5KCM$^nUMD@KTNJaJ=C$fV|UBiNKSk$ZplGO>)vFB))qXGhGzQG z1Y*n2#?4=V+nJjE>A?>7kGf&oxvDtH5>)lW7T)t`?E-%g-6OEZCL=p}Hp=>hXsc+N z{QO-#vUUw*;Nkh|Yt+6T!SSz0UqP+U?=@B_=KUvGr5}T|?B2ExOI~-XrC0LlGjV}q zbQ7L-ePENdIeoCT+2i~gx;o1<8NyP$S~OJ@;F|p#M!!6NNeln;LLlxNsLJv6p{Pa{ zD5&LjNAU9F%k-=%XW&8(Tnrngs2>-JkggaA^&BLhU4-;6!H! z3GJr3DWK1)D4S0o@+F{vLH9HrOfvcvRnAx>GFoh8vfc`#;#~c@n?ojJVA4ocZ<&X- zY5bMT6r{NQjXH?){_S5;{Y?AcUN?$A7Vr9z%bZ1%rS7 z@B(5oaP* zp(U9Lp+bjqkvOUS^KHh;(Jnle9w=pXbf|0|Lh;FfTGH85;PveqJ#YJ|FaTPW&y%Yf zpC5RSSwRMj@K88@v9u7&s^i6*H6V|k=5Y0h6T!=gNPS>R43&Hx>iAn}*~kdX-wPg0 z`|z=u&0gNmDCz|~b}dJQ(f{)TJ+Qy$%@sJ`e~A<$CPiw&KY&0|Pv1kJQV}~Ut&|D; z8?>=SO8ll%yMsqV4?lq=e^pQ$Kh;%NXV4RdPQ11GbPwx#w<6*;Wa$Tes1X~4E+xdRyJ%%#w%KmcE!4B%0o4`urA&~9UV`nMjMcfIs( z;iL@BfbqnK+|oQRZTiVl8A?&Pwme}rX?`r#{V2dRCvVaW3D1tB^({X26>H~Qx z^bbkpc|vS_{eB5;*IE@N0sPAJ> z@9i~`nDRGbWuWahrh-_`mPMVveYO7fNqtN~PqUG~TkRbQ@KrZ}IK^??^FR|RD@xB@ zNl*1RP+$a-W+-0MXY{~qb++f>Gu>HI?-V?U9BiS({DX{vA|XjFMSH>^jT%aMo>M!K z9Dn#cROcZZ=0u=O99p(;q*)ufAz$;bzOvxKUIXnz#W)cZK211aTg|>LRGd})S5VoK zMfgSb=0HY+D!5hb!H#1`mRRiM@C(<&_@BaoFuR#d7ZTjHdzI$}6=o)bk5ApQiIo+a zo#h|i-pk!|J^r-NqZhU9IzzeBRLgUf=DlNoN1NGuOX|3?KbVsf`b3mBTZSA0X?+P~ z(@Kd((J({*ei~TE2vcNqdG+-R)?RUor%R5M8K6RkuDF0eVClv#S0h(OPb$HPct6qs$Vc-(pe^o z$rghahPHCuj8(JLL{RPQGwNEjchZBbcl@3{-JkwU(Fb|dxb|!2{dx{}LbO#yK8LGw z^$gJaEauS;oXpUfE}xz35BK^wJp`o10XbFdGu*uumNsJ$x|Pen6jXC;aQHkk!9E>4 zlFn?+S#1!Lj`Tf}kbaq{6whk?i)%1hN=qK9H1^_-2{k}>i}$3WTLO4EExOWdF~H@V zB|zpBr_6J4Nb`UsB@kI^aHR5^9Pi^8d3Mq}a{#ATm5pj#$oKcD8PwDI zGAR4-45Drsf1?$CWmR48hg!x0KlI$nmBmLg1wwTF`;WssU7xwf+8#+}sF*Q`3HSAwE8=ijZgWcNNGw?vk|OxMMXPvV@$n5MhTz5Pk4 z!bddp^Ez^`EoEk-M4=R^?jtq6uE7bTq_CjJF_X(5IM@7(ge%IwcQaW(KK*g`4b#Qm z^o~2Q^H+nX#n|U|l&9n4*(kQpRRXz^k7!2NJcqLHi^ZU_bht*FRYAZ~(!=?8hee|xS)kXMi2-H zS5JgND?1q}6rM?f)oBInQO}SP18z0sdF_;34E>xG&uvjjH|Eg0x7%YS4fT$G=%NO? z6#;v!4|@1OOnyMD*S%RZ4Eo5&?X_{{>&IUsXhWScSC<2Xz)X6wZXym;BA#Heaqn@`&((@03&BUyS>8!8pWnIn_RwnY9e)uS9jwTlY|=9*CF z+HHBCiH0@sKLcyV8-_%DdQkk0?qXRmOh!2rK$2^){nzraHXCXba>M(Zqo=TI7i)z#V5%zdK?!PsTP z&I7d=_%`S5Lf6KmJ|&#}>TI0XWx+(rjh6c*vjxWF(osf5He}nqFp@jLw|bLkAYce} znf51dbjq{L8DmpTxq->-guv2KHt2#x>rr#oA)hG(+9@4nsNP4;x}_&A#0z|gC!}%f zO`P0ucoRzoK6p}H%|31I7&09<_1Jw@T!2636>H*y?Q8)3Qlk=}|6}~J;AjUhnam;e znWJ=a^8Bm8Vfp%{$w8hVGRNv|^T0mGgGqlRjLNMo1u<2Degq!P7fpTx-O^%>u3|Jlbf?ZbDI@#TX?jYZrNq~jChOFS32M@G;P1%t-2j@Jk$16Z zdJFs2MbbQ}D|6D2u^RnqIMc9u!%=fn^H7KWkeg)NfVkE^NjbLmM3r!E&8!-_M@DsH z;x1k#%zksP{O;$xc_LGYp({^+XSAe%{T=ay9QM^YpCU%VR977W0Ymgva6TiXfhKqQ zP>NBLKQM}q;J1T#Jvb2%8)2TDR1Ff?`e^L?fSoR*u z&_qrJAz}3KYO#WR_21#5QZ6f#MWBOI!~x(oXC4=6M%3zx)0lxok`Ec5lEd_vc_YZo(jAbkK7DOg;eE5~HThU|dt4 zY)?#adYD3^0~>{$$Iyunmr!?{KUmSqMk+E5*mfqfBW^n{+`aA9UvXfo-4kJw0Z zqkj!R`qnQU`e=Qb(ew)dqnhJhh;toPx$V+T!czSkif7d^${FRMDAd^zx96JR<(8w) zV^wTMvJ%xiMkn9e>D9RXh5zR4vZBkgYN~-&u^$Ao*+CMzHUFKb9pn$g+nQcPtuSN! zM6gRSPpds2vmPrr{jukPwu1Uzwh?XvH)cyy<|v3PhLk6VY{w#U;!!;WlMkQ|kWkor z?)vV6``7NqfoZQWdl}-XES}TFwNP&l zm!`LeNsVNR+0#g)cH)rTaP?0MBzv9%XGjDFwXBmbV9Xz_%vj&a0)6x>@(=d`8tAJV ze~6+HfZ|6>NtQZdL6qPma}DU4(8K0EyUCdXZ^=P23`4`yj6!-Y3P67;>1bQ}1T!S~ z-M6%j@(u0aXSZc0>VIRdbc#`-r|Hk$=P1rOqWb)MqsPRpRulCr zTzOD;Yf2TyMgwhT>6lrNnK!ZM`5-TZ`pGwp_S@tf8>HB*d;h(5OT8$4jU0r@cG9Q2 zfwA?Boh`fjCVk+Nk#4wyr_zF)6vJO%_cjrDUh|9gu05)yMd3`9&qm!pD6a7rz)ShL zaqfkXnlyJgljaZ#_dr_R{~a*s_`+oUX~JX@6D1I`L#Lti^N09x>ux|+PSb3y8Nok< z;70gdI{54zg||Vg8i1Re1nss729uzP-~%J1P=6{!3N?#vKh{vcV8HOOrtld-Fkb*4 zrX+^a7MiTXHC$w&Oh+$+E{N#V3`k#}000$_Y-?6hJmf1`XJ&8a*Ij`cfMZgqzd4~( z>iQ4al#TO4Jq9AKy0pr?jidNUX}VXd-wI1kMV2(r!b!Y0VxOtyd^AN)-G! z0vL+CmyFG)Mckf`Bg--CXQY0$mtz44UKBZ zF4sq)w0`bH=fWz31xmpP&cvVVP4%~ayxa0t^+KbHKc7$M{**=iIcS%XMf3XIX61nr zAML0nN)DH-FscRo{P)92(^aBpA?c0e!W&@7kAWA%i@Vy!5;uSw5KQ`7MDVLvEgt9y zkVGf^rtlJ8?n6hj_f#Flr-2{i-`EM@usFO-gz=rHO+Fk*gtisi%eQcEdf;1Dfgc&? z@>a(IZUGCHYHD5_Ayzv8FYY)5J%~?4UEn9POnd8u#N7N{&)aBH&Hqsz2n57uss87C z@`y)i?!e3o@*Tt@aNk?9s63Ko`=B3xVsjN82WNiBYA4A-o%98x@DOjClkePzaqELu zyE2!frepV8XSM9DzYkqOpf8xJj=s>wRn@IaKTtr0+KQ&16SDl_OEI1)RbyO=)M%b|T0^XxVx zkBi(Xk6Gw%lA8LoWDk`%KAWAkeq9rGr%`)&cch;b*1x;+#Y0N{j7TpJ=l4S2lbT*% zsR(PvmC{wq)u*L~Z>XzYb}-%jN3_ZM7~EFA zR-mr(9Mh89PLuS2iwU!&P`?;ujg5oq!EC|{sc7(wEH=vsESz~e|g_=uo`?z`4%L9W4*cc=TpaemR|1v={{&#eJJV`v_aGQ|(quuV6Z%TN>X))l9V1Y_HzAzHsQ+HMaM%(P@40nU`-cx$?>abF zH_?D0^L&XYn#c90#$&ZUU~nRl9u|^=Wd9&}Vj+RE-TM zcxeX9gVem>660?j@edPq`G2fz4~1A{XFUBzQSd1!gGzvUU1`6jQ1}=Kq_z88h0>y)KRECFuwC%?03$sAQlzbyz#7y zf`H6&Wu+VrH`kyy;ysBh4_?Q7qPn7Y3PH$xvIFNri|P*Cr$Q}VOzxD|Do!ZJf7ux_ zx|X%))ao~pX3qPo6wit6NpjJwSPAyn>6(;|O#Z7>A&}_GDKVI%mn;OX*6*vjyf76f z&p03SW&|xd7|McH8N2^zLnhji=KLQXZX55?GEr7LpL3AucJIWyOf#Lk*V(Pu6(!Tv zsl?rLT${MizW9CQ+WOym50qKO_wR;KRi^Zn&@HqO43h}1)?{jWPh0t$W3x$l0HOQD zJ4n9Hu-RG>``P(Iw}5!EfgWG~Fw0nKtMeNk7+Npx=aH`uVG17Kp5c1w{0{3}#H7+U z|6W8W1Y(N~HebzE&U1*XL$sF_mY@2Q`dIa~M&> zvvOk#Z|@d)Co}J9U~*~|$?iku0X{YvIXl=INR94}V5RUGi z-QGw`K)3v1-uNUtsQ)7?{MrQ_<)IW9pf$rE(QH|6E}pyLZ(E*hmL?DCzdxH_Mp0$s zu?{-;;KCHHrM6}~^v2>-rV}9$lM^8No$KbSx`PN3IA2@E9BbEQj?s9HWlpP#%1}1{ zJYI`ncyw~6-;75$86FK}r(VicsuURC#u8tM?u7q>fh8CV6cGOh8~+Che5Pp7(T_N} z=a1nfF~lG#UQrx0K0mi76M~ve~|Dq@{I2t9s2A5`Y6v4NXhQ6OQp#FHaHh5 z7P}PQZ|blt=%B_`1DmJOQKNx8)e@60 z&+A>!U2}C-&}VKu{SyC)lK5Bs*)h6~WT(D3V&@2g99tNN(T={O9G#8yErSQuH*nk- zeJH4~jZPJra;6b!&pJUw9GcLLvMF8bQ-C^LbaPfY@GkSH9w?ZV!6|PeHIha+z$@*(;cfln)6`$_^AH+7O}vn8%QxHu<$#z`0vX3;5Cnh zrem)E)i{Dm8s%8vzw%PJs0C^;1oQ^gA~ic}?E4ecCse_1f)cZlTLX0g8yA0 z{P2^Ag+!nC96hQ=7+$Y=J|YzRpj+_C;+chX zS*QP^IsXaTZ(^f4Bz{9ABYh|HxW=ZvgWi2pEm9t;wzq;kxK#fK=nN>wutU|!)yT@& z=~8r`EBdnQ;jBII?)BeX6V{oUl=W$g(d79yZEM@h*${8*W2;Y5G;-*u|uOz65;v2)I z(lc&wSr+A9rBI${v4p8OX1|hAV^YCm>q^CY)yu}lIII?n=z{eZ&3!Y~K z3md-PH-d!6+1pL$X(J$NvG$cCE?;s&A1FNowkJe8;U*V- ztZDbzsqoFH731M?MYy}nITFT;5UQ~ZchG-Cb-?+NrrEOKFx*W1ef~lDCM(}l8Ix9M z_YB!+_ofN@$0w=6Z^0g{L0rG_2#O8W&iD&f>?KEJiLNg0g|E4EYL21~-Fs*R&8U(< zpNLA(PCx&A|HZzzkMTE&lFE_uUq(l}Lm_JvhDYRP#*;pfu`gha;qpUz-Sdd>_~2mD;?4UstpzVh7u&I{-vzb9z6u{~bn?CPG}cUOT!YFrh_H(sKZId&}2+pcxvDMUq7uz;g!I$680 zefq{BRRz3pOrH|!I@1aFT%0^doNoj&#cT!yu_~rZ#|?9sA~5UEs?LJ${?&!3>iNza z(@yk|Q>+#4Lr)ZzTZmmExXc3rj+R90?POP&h<${ke`#?4vkCt*+W*v%sA2z-CcI$c zK5x``BL&U%-I6tNnL{uAnS8*J|->BhNT0{M!T614yG7sdH zj|%B&9I^SFDt&_R!+3-JU(Z4qHmq#JlN5@Js6tTRxtvpcvu^m&1NqfHr1clue?^Pnzr@;$|Yqk9S!$9tVX z@rMHbzu=+W)^FM)X->q_B+<+I)W4^rebpiF9U<>Ol(vd~C5WXhNFx|1N5#=XN~Dtx z59%h_Md0^d&4{I$!ml0c*II%_7dX4}x)002UglaazQ=+(qC4AcDTMj2J70eF`!~N% z-?cT+kKHuhVxV&m{|?@)7^$;4+RwL{BAQN&#Lcew(cf0Do3sA2G;0ngX{k6xfV;{& z`}GhQAa7rAnQg#CfwFrs1=_|e*6k({DjPCzrz>Zc@wFzpiA!(t=7?^lZV6_FE*7}_ zQ=&n_wv|IeY;N!_(v&HDM`K|>Qw$}${bCc=yO=*Z>VN=YoLF@5bK{# zYiJ9UfBY-u$092A6u$xy)cym7-8IH{kY|>aL&jFQo*`{ibvdN;D;< zcP+TOaR2brJ6dx?mFL%w#vb^u=bSh4_k5l?ywyiVDf1ZAsK@+gM{OuPDBSUkUd<`E z=i18I{_W0(-%Zzl0$#p*FVv)u+-?~>0T$Nj!ZpM)1>a6mR}au-LzDkhJ~~5#gwyw2 zXUL9z$NT*a+Q|z*pFL-->*=uW>6D?D#Y7huI@a~p2_h;?L~$-`@LMZ)IC1)kA-v$5 z4%?aUii=`*K2!yesqE_lHIzA2!c*S;Q2Za)4>?LDTsXuVGEc5AEr@<${+r%V^W)NI zbuJhxvJ3ZLpB`Wio5kJOLV=Xh$7nVeDfI9df%UkcCM*5}*uncesN&hpAiX@=LuE3;5Omh)S<3Gds*!2L) zWeGaZ>7}$Is@HN{0$dE8s#dwA@ehPKM2!BSgdd9Nf^JRHhq^2S7?#%|d@kePF#4H8 zFR_?1jxwj*le85<*@?D}q{x5ZO}q`qKmOj>qbsdyCtY1-^yVe6dmevUW$bI6f4M~z zY{D73f{7LiaIs|U;qn7!*~8-p@&DAfa1&k*?>RHFwwQPmG%gOO``1BB-Z$lnXMGbn zF+o~BRK5Q?wb~u^|26s805F<(vL{u|^S{%*|7W*A`|Y(FC)c#p%?Z0q;)lxsJ#9m+ J&l-=>{})y%;Bx=~ literal 0 HcmV?d00001 diff --git a/layers/+intl/keyboard-layout/img/bepo-logo.png b/layers/+intl/keyboard-layout/img/bepo-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..dac454481e2b804ee9ef69015eeefcaf2f0952d3 GIT binary patch literal 37552 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 literal 0 HcmV?d00001 diff --git a/layers/+intl/keyboard-layout/img/keyboard-layout.png b/layers/+intl/keyboard-layout/img/keyboard-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..4aea9596391ef3d6bd1325e3e035132e85a75be2 GIT binary patch literal 6334 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defconst keyboard-layout-packages + '( + ace-window + avy + comint + company + elfeed + evil + evil-escape + evil-evilified-state + evil-surround + eyebrowse + flycheck + helm + imenu-list + ivy + magit + mu4e + neotree + org + org-agenda + ranger + twittering-mode + )) + +(defun keyboard-layout/pre-init-ace-window () + (kl|config ace-window + :description + "Change `ace-window' keys to the central row." + :loader + (spacemacs|use-package-add-hook ace-window :post-init BODY) + :bepo + (setq aw-keys '(?a ?u ?i ?e ?t ?s ?r ?n)) + :dvorak + (setq aw-keys '(?a ?o ?e ?u ?h ?t ?n ?s)))) + +(defun keyboard-layout/pre-init-avy () + (kl|config avy + :description + "Change `avy' keys to the central row." + :loader + (spacemacs|use-package-add-hook avy :post-init BODY) + :bepo + (setq-default avy-keys '(?a ?u ?i ?e ?t ?s ?r ?n)) + :dvorak + (setq-default avy-keys '(?a ?o ?e ?u ?h ?t ?n ?s)))) + +(defun keyboard-layout/pre-init-comint () + (kl|config comint-mode + :description + "Remap `comint' bindings." + :loader + (with-eval-after-load 'shell BODY) + :common + (dolist (m '(normal insert)) + (eval `(kl/evil-correct-keys `,m comint-mode-map + "C-j" + "C-k"))))) + +(defun keyboard-layout/pre-init-company () + (kl|config company + :description + "Remap `company' bindings." + :loader + (spacemacs|use-package-add-hook company :post-config BODY) + :common + (kl/correct-keys company-active-map + "C-h" + "C-j" + "C-k" + "C-l"))) + +(defun keyboard-layout/pre-init-elfeed () + (kl|config elfeed + :description + "Remap `elfeed' bindings." + :loader + (spacemacs|use-package-add-hook elfeed :post-config BODY) + :common + (progn + (kl/evil-correct-keys 'evilified elfeed-search-mode-map + "j" + "k") + (kl/evil-correct-keys 'evilified elfeed-show-mode-map + "j" + "k" + "C-j" + "C-k")) + :bepo + ;; HACK: The auto correction doesn't work... mystery. + (evil-define-key 'evilified elfeed-search-mode-map + "k" 'elfeed-search-live-filter))) + +(defun keyboard-layout/pre-init-evil () + (kl|config evil + :description + "Remap `evil' bindings." + :loader + (with-eval-after-load 'evil BODY) + :common + (dolist (map kl--all-evil-states-but-insert) + (kl/correct-keys map + "h" + "j" + "k" + "l" + ;; + "H" + "J" + "K" + "L")) + :bepo + (progn + (kl/set-in-all-evil-states-but-insert + "é" 'evil-forward-word-begin + "É" 'evil-forward-WORD-begin) + (kl/set-in-state evil-inner-text-objects-map + "é" 'evil-inner-word + "É" 'evil-inner-WORD) + (kl/set-in-state evil-outer-text-objects-map + "é" 'evil-a-word + "É" 'evil-a-WORD) + (kl/set-in-all-evil-states-but-insert + "«" 'evil-shift-left + "»" 'evil-shift-right)) + :dvorak + ;; Invert it twice to reset `k' and `K' for searching + (dolist (map kl--all-evil-states-but-insert) + (kl/correct-keys map + "K"))) + + (kl|config evil-window + :description + "Remap `evil-window' bindings." + :loader + (with-eval-after-load 'evil-commands BODY) + :common + ;; FIXME: Not working + (kl/leader-correct-keys + "wh" + "wj" + "wk" + "wl" + ;; + "wH" + "wJ" + "wK" + "wL") + :bepo + (progn + (spacemacs/set-leader-keys + "wé" 'other-window + "wq" 'delete-window) + (kl/leader-alias-of "é" "w")))) + +(defun keyboard-layout/pre-init-evil-escape () + (kl|config evil-escape + :description + "Change `evil-escape' default escape combination for a better one than `fd'." + :loader + (spacemacs|use-package-add-hook evil-escape :post-init BODY) + :bepo + (setq-default evil-escape-key-sequence "gq"))) + +(defun keyboard-layout/pre-init-evil-evilified-state () + (kl|config evil-evilified-state + :description + "Remap `evil-evilified-state' bindings." + :loader + (with-eval-after-load 'evil-evilified-state BODY) + :common + (kl/correct-keys evil-evilified-state-map + "h" + "j" + "k" + "l"))) + +(defun keyboard-layout/pre-init-evil-surround () + (kl|config evil-surround + :description + "Remap `evil-surround' bindings." + :loader + (spacemacs|use-package-add-hook evil-surround :post-init BODY) + :common + (kl/evil-correct-keys 'visual evil-surround-mode-map "s"))) + +(defun keyboard-layout/pre-init-eyebrowse () + (kl|config eyebrowse + :description + "Remap `eyebrowse' keybindings conflicting with evil." + :loader + (spacemacs|use-package-add-hook eyebrowse :post-init BODY) + :common + (kl/correct-keys evil-motion-state-map "gj")) + + (kl|config eyebrowse + :description + "Remap `eyebrowse' keybindings conflicting with evil-commands." + :loader + (with-eval-after-load 'evil-commands BODY) + :common + (kl/correct-keys evil-motion-state-map "gJ"))) + +(defun keyboard-layout/pre-init-flycheck () + (kl|config flycheck-error-list + :description + "Remap `flycheck-error-list' bindings." + :loader + (spacemacs|use-package-add-hook flycheck :post-init BODY) + :common + (kl/evil-correct-keys 'evilified flycheck-error-list-mode-map + "j" + "k"))) + +(defun keyboard-layout/pre-init-helm () + (kl|config helm + :description + "Remap `helm' bindings." + :loader + (spacemacs|use-package-add-hook helm :post-config BODY) + :common + (kl/correct-keys helm-map + "C-h" + "C-j" + "C-k" + "C-l")) + + (kl|config helm-buffers + :description + "Remap `helm-buffers' bindings." + :loader + (with-eval-after-load 'helm-buffers BODY) + :bepo + ;; HACK: Forced to correct wrong behaviour + (kl/set-in-state helm-buffer-map "C-s" 'helm-previous-line)) + + (kl|config helm-files + :description + "Remap `helm-files' bindings." + :loader + (with-eval-after-load 'helm-files BODY) + :bepo + (progn + ;; HACK: Forced to correct wrong behaviour + (kl/set-in-state helm-find-files-map "C-s" 'helm-previous-line) + (kl/set-in-state helm-find-files-map "C-k" 'helm-ff-run-grep) + (kl/set-in-state helm-find-files-map "C-r" 'helm-maybe-exit-minibuffer) + (kl/set-in-state helm-read-file-map "C-s" 'helm-previous-line) + (kl/set-in-state helm-read-file-map "C-K" 'helm-previous-line))) + + (kl|config helm-locate + :description + "Remap `helm-locate' bindings." + :loader + (with-eval-after-load 'helm-locate BODY) + :bepo + (progn + ;; HACK: Forced to correct wrong behaviour + (kl/set-in-state helm-generic-files-map "C-s" 'helm-previous-line) + (kl/set-in-state helm-generic-files-map "C-k" 'helm-ff-run-grep)) + :bepo + (progn + ;; HACK: Forced to correct wrong behaviour + (kl/set-in-state helm-generic-files-map "C-n" 'helm-previous-line) + (kl/set-in-state helm-generic-files-map "C-k" 'helm-ff-run-grep)))) + +(defun keyboard-layout/pre-init-imenu-list () + (kl|config imenu-list + :description + "Remap `imenu-list' bindings." + :loader + (spacemacs|use-package-add-hook imenu-list :post-config BODY) + :common + (kl/evil-correct-keys 'evilified imenu-list-major-mode-map + "j" + "k"))) + +(defun keyboard-layout/pre-init-ivy () + (kl|config ivy + :description + "Remap `ivy' bindings." + :loader + (spacemacs|use-package-add-hook ivy :post-config BODY) + :common + (progn + (kl/correct-keys ivy-minibuffer-map + "C-h" + "C-j" + "C-k" + "C-l")))) + +(defun keyboard-layout/pre-init-magit () + (kl|config magit + :description + "Remap `magit' bindings." + :loader + (spacemacs|use-package-add-hook magit :post-config BODY) + :common + (progn + (kl/evil-correct-keys evil-magit-state magit-mode-map + "j" + "k" + "C-j" + "C-k") + (kl/evil-correct-keys 'normal evil-magit-toggle-text-minor-mode-map + "C-j") + (dolist (map (list magit-branch-section-map + magit-commit-section-map + magit-file-section-map + magit-hunk-section-map + magit-remote-section-map + magit-staged-section-map + magit-unstaged-section-map + magit-module-commit-section-map + magit-stash-section-map + magit-stashes-section-map + magit-tag-section-map + magit-unpulled-section-map + magit-unpushed-section-map + magit-untracked-section-map)) + (kl/correct-keys map + "j" + "k" + "C-j" + "C-k"))) + :bepo + (progn + (magit-change-popup-key 'magit-dispatch-popup :actions ?t ?j) + (magit-change-popup-key 'magit-dispatch-popup :actions ?s ?k) + (magit-change-popup-key 'magit-dispatch-popup :actions ?S ?K)))) + +(defun keyboard-layout/pre-init-mu4e () + (kl|config mu4e + :description + "Remap navigation keys in `mu4e' headers and view mode." + :loader + (spacemacs|use-package-add-hook mu4e :post-config BODY) + :common + (dolist (map (list mu4e-headers-mode-map + mu4e-view-mode-map)) + (kl/evil-correct-keys 'evilified map + "h" + "j" + "k" + "l" + "C-j" + "C-k")) + :bepo + (dolist (map (list mu4e-headers-mode-map + mu4e-view-mode-map)) + (evil-define-key 'evilified map + "è" 'mu4e-headers-mark-subthread + "/" 'mu4e-headers-search)))) + +(defun keyboard-layout/pre-init-neotree () + (kl|config neotree + :descripition + "Remap `neotree' bindings." + :loader + (spacemacs|use-package-add-hook neotree :post-config BODY) + :common + (kl/evil-correct-keys 'evilified neotree-mode-map + "h" + "j" + "k" + "l" + ;; + "H" + "J" + "K" + "L") + :bepo + (kl/set-in-state (evil-get-auxiliary-keymap neotree-mode-map 'evilified) + "h" 'neotree-hidden-file-toggle + "k" 'neotree-rename-node))) + +(defun keyboard-layout/pre-init-org () + (kl|config org + :description + "Remap keys in `org-mode'." + :loader + (with-eval-after-load 'org BODY) + :bepo + (progn + (evil-define-key 'normal evil-org-mode-map + "t" 'evil-next-line + "j" 'org-todo) + (dolist (m '(normal insert)) + (eval `(evil-define-key ',m evil-org-mode-map + ;; ctsr + (kbd "M-c") 'org-metaleft + (kbd "M-t") 'org-metadown + (kbd "M-s") 'org-metaup + (kbd "M-r") 'org-metaright + (kbd "M-C") 'org-shiftmetaleft + (kbd "M-T") 'org-shiftmetadown + (kbd "M-S") 'org-shiftmetaup + (kbd "M-R") 'org-shiftmetaright + ;; hjkl + (kbd "M-h") 'capitalize-word + (kbd "M-j") 'transpose-chars + (kbd "M-k") 'kill-sentence + (kbd "M-l") 'move-to-window-line-top-bottom + (kbd "M-H") 'capitalize-word + (kbd "M-J") 'transpose-chars + (kbd "M-K") 'kill-sentence + (kbd "M-L") 'move-to-window-line-top-bottom))) + (spacemacs/set-leader-keys-for-major-mode 'org-mode + ;; ctsr + "C-S-c" 'org-shiftcontrolleft + "C-S-t" 'org-shiftcontroldown + "C-S-s" 'org-shiftcontrolup + "C-S-r" 'org-shiftcontrolright + ;; hjkl + "C-S-h" nil + "C-S-j" nil + "C-S-k" nil + "C-S-l" nil) + (evil-define-key 'normal evil-org-mode-map + ;; ctsr + "gt" 'org-forward-heading-same-level + "gs" 'org-backward-heading-same-level + ;; hjkl + "gj" nil + "gk" nil + ;; additional + (kbd "«") 'org-metaleft + (kbd "»") 'org-metaright)))) + +(defun keyboard-layout/pre-init-org-agenda () + (kl|config org-agenda + :description + "Remap `org-agenda' bindings." + :loader + (spacemacs|use-package-add-hook org-agenda :post-config BODY) + :common + (kl/evil-correct-keys 'evilified org-agenda-mode-map + "j" + "k" + "M-h" + "M-j" + "M-k" + "M-l"))) + +(defun keyboard-layout/pre-init-ranger () + (kl|config ranger + :description + "Remap navigation keys in `ranger'." + :loader + (spacemacs|use-package-add-hook ranger :post-config BODY) + :common + (kl/correct-keys ranger-mode-map + "h" + "j" + "k" + "l"))) + +(defun kl/pre-init-twittering-mode () + (kl|config twittering-mode + :description + "Remap navigation keys in `twittering-mode'." + :loader + (spacemacs|use-package-add-hook twittering-mode :post-init BODY) + :config + (kl/correct-keys twittering-mode-map + "h" + "j" + "k" + "l" + ;; + "H" + "J" + "K" + "L"))) diff --git a/layers/+lang/agda/README.org b/layers/+lang/agda/README.org new file mode 100644 index 0000000..4e54814 --- /dev/null +++ b/layers/+lang/agda/README.org @@ -0,0 +1,80 @@ +#+TITLE: Agda layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#some-features][Some features:]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#agda][Agda]] + - [[#key-bindings][Key bindings]] + +* Description +This layer adds support for the [[http://wiki.portal.chalmers.se/agda/pmwiki.php][Agda]] programming language. + +** Some features: +- Faces redefined to correctly play with themes. +- Spacemacs bindings to Agda's interactive tools. + +*This layer is in construction, it needs your contributions and bug reports.* + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =agda= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Agda +Quick instructions to install Agda assuming you have cabal installed: + +#+BEGIN_SRC sh + cabal install alex happy "cpphs < 1.19" agda +#+END_SRC + +Then check that =agda= is available on your =$PATH= and seen by Emacs. For +information about setting up =$PATH=, check out the corresponding section in the +FAQ (~SPC h SPC $PATH RET~). + +By default the =agda-mode= executable bundled with most agda installations is +used to locate the agda-mode package. If you don't have it and want to use a +local agda-mode package, you can customize the layer variable =agda-mode-path= +to your needs. Set it to =nil= if =agda2.el= is already discoverable in Emacs’ +load path, otherwise set it to the path at which =agda2.el= can be found. For +example, + +#+BEGIN_SRC emacs-lisp + (agda2 :variables agda-mode-path "/some/path/to/agda2.el") +#+END_SRC + +* Key bindings +The key bindings of this layer don't follow the Spacemacs conventions, +we opted to a simple transcription of stock Agda mode key bindings to +Spacemacs leader key. + +All Agda specific bindings are prefixed with the major-mode leader +~SPC m~. + +| Key Binding | Description | +|-------------+-------------------------------------------------------------------------------------------------------------------------------------------| +| ~SPC m =~ | Show constraints. | +| ~SPC m ?~ | Show all goals. | +| ~SPC m ​,​~ | Shows the type of the goal at point and the currect context. | +| ~SPC m .~ | Shows the context, the goal and the given expression's inferred type. | +| ~SPC m a~ | Simple proof search. | +| ~SPC m b~ | Go to the previous goal, if any and activate goal-navigation transient-state. | +| ~SPC m c~ | Refine the pattern variables given in the goal. | +| ~SPC m d~ | Infers the type of the given expression. | +| ~SPC m e~ | Show the context of the goal at point. | +| ~SPC m f~ | Go to the next goal, if any and activate goal-navigation transient-state. | +| ~SPC m h~ | Compute the type of a hypothetical helper function. | +| ~SPC m l~ | Load current buffer. | +| ~SPC m n~ | Computes the normal form of the given expression, using the scope of the current goal or, if point is not in a goal, the top-level scope. | +| ~SPC m p~ | Shows all the top-level names in the given module. | +| ~SPC m r~ | Refine the goal at point. | +| ~SPC m s~ | Solves all goals that are already instantiated internally. | +| ~SPC m t~ | Show the type of the goal at point. | +| ~SPC m x c~ | Compile current module. | +| ~SPC m x d~ | Removes buffer annotations (overlays and text properties). | +| ~SPC m x h~ | Toggle display of implicit arguments. | +| ~SPC m x q~ | Quit and clean up after agda2. | +| ~SPC m x r~ | Kill and restart the *agda2* buffer and load =agda2-toplevel-module=. | +| ~SPC m w~ | Explains why a given name is in scope. | diff --git a/layers/+lang/agda/config.el b/layers/+lang/agda/config.el new file mode 100644 index 0000000..6e0ab3d --- /dev/null +++ b/layers/+lang/agda/config.el @@ -0,0 +1,19 @@ +;;; config.el --- Agda2 Layer config File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: FreeSalad +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar agda-mode-path 'use-helper + "Indicates the location of the agda-mode package (the file +`agda2.el') If `nil', it is assumed to be already available by +Emacs. If `use-helper', the `agda-mode' executable is used to +find its location.") + +(spacemacs|define-jump-handlers agda2-mode agda2-goto-definition-keyboard) +(spacemacs|defvar-company-backends agda2-mode) diff --git a/layers/+lang/agda/packages.el b/layers/+lang/agda/packages.el new file mode 100644 index 0000000..5f26af3 --- /dev/null +++ b/layers/+lang/agda/packages.el @@ -0,0 +1,90 @@ +;;; packages.el --- Agda2 Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Oliver Charles +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq agda-packages + '((agda :location local) + company + golden-ratio)) + +(defun agda/post-init-company () + (spacemacs|add-company-hook agda2-mode) + (push 'company-capf company-backends-agda2-mode)) + +(defun agda/init-agda () + (if (and (eq 'use-helper agda-mode-path) + (not (executable-find "agda-mode"))) + (spacemacs-buffer/warning + (concat "Couldn't find `agda-mode', make sure it is " + "available in your PATH or check the installation " + "instructions in the README file.")) + + (when (eq 'use-helper agda-mode-path) + (setq agda-mode-path (let ((coding-system-for-read 'utf-8)) + (shell-command-to-string "agda-mode locate")))) + + (use-package agda2-mode + :defer t + :init (when agda-mode-path (load-file agda-mode-path)) + (progn + (mapc + (lambda (x) (add-to-list 'face-remapping-alist x)) + '((agda2-highlight-datatype-face . font-lock-type-face) + (agda2-highlight-function-face . font-lock-type-face) + (agda2-highlight-inductive-constructor-face . font-lock-function-name-face) + (agda2-highlight-keyword-face . font-lock-keyword-face) + (agda2-highlight-module-face . font-lock-constant-face) + (agda2-highlight-number-face . nil) + (agda2-highlight-postulate-face . font-lock-type-face) + (agda2-highlight-primitive-type-face . font-lock-type-face) + (agda2-highlight-record-face . font-lock-type-face)))) + :config + (progn + (spacemacs|define-transient-state goal-navigation + :title "Goal Navigation Transient State" + :doc "\n[_f_] next [_b_] previous [_q_] quit" + :bindings + ("f" agda2-next-goal) + ("b" agda2-previous-goal) + ("q" nil :exit t)) + (spacemacs/set-leader-keys-for-major-mode 'agda2-mode + "f" 'spacemacs/goal-navigation-transient-state/agda2-next-goal + "b" 'spacemacs/goal-navigation-transient-state/agda2-previous-goal) + + (spacemacs/set-leader-keys-for-major-mode 'agda2-mode + "?" 'agda2-show-goals + "." 'agda2-goal-and-context-and-inferred + "," 'agda2-goal-and-context + "=" 'agda2-show-constraints + "SPC" 'agda2-give + "a" 'agda2-auto + "c" 'agda2-make-case + "d" 'agda2-infer-type-maybe-toplevel + "e" 'agda2-show-context + "gG" 'agda2-go-back + "h" 'agda2-helper-function-type + "l" 'agda2-load + "n" 'agda2-compute-normalised-maybe-toplevel + "p" 'agda2-module-contents-maybe-toplevel + "r" 'agda2-refine + "s" 'agda2-solveAll + "t" 'agda2-goal-type + "w" 'agda2-why-in-scope-maybe-toplevel + "xc" 'agda2-compile + "xd" 'agda2-remove-annotations + "xh" 'agda2-display-implicit-arguments + "xq" 'agda2-quit + "xr" 'agda2-restart))))) + +(defun idris/pre-init-golden-ratio () + (spacemacs|use-package-add-hook golden-ratio + :post-config + (add-to-list 'golden-ratio-exclude-buffer-names + "*Agda information*"))) diff --git a/layers/+lang/asciidoc/README.org b/layers/+lang/asciidoc/README.org new file mode 100644 index 0000000..f2b6116 --- /dev/null +++ b/layers/+lang/asciidoc/README.org @@ -0,0 +1,45 @@ +#+TITLE: Asciidoc layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#feature][Feature]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + - [[#element-insertion][Element insertion]] + - [[#promotion-demotion][Promotion, Demotion]] + +* Description +This layer adds [[https://asciidoctor.org][AsciiDoc]] markup language support to Spacemacs. + +** Feature +- asciidoc format support via [[https://github.com/sensorflo/adoc-mode][adoc-mode]] +- =.adoc= files are associated with =adoc-mode= by default + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =asciidoc= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key bindings +** Element insertion + +| Key Binding | Description | +|-------------+-----------------------------------------------| +| ~SPC m h 1~ | Insert title level 1 | +| ~SPC m h I~ | Insert title level 1 (the most important one) | +| ~SPC m h 2~ | Insert title level 2 | +| ~SPC m h i~ | Insert title level 2 (the most usual one) | +| ~SPC m h 3~ | Insert title level 3 | +| ~SPC m h 4~ | Insert title level 4 | +| ~SPC m h 5~ | Insert title level 5 | +| ~SPC m h 5~ | Insert title level 5 | +| ~SPC m x b~ | Boldface selected | +| ~SPC m x i~ | Italicize selected | + +** Promotion, Demotion + +| Key Binding | Description | +|-------------+---------------------| +| ~M-h~ | Promote title level | +| ~M-l~ | Demote title level | + diff --git a/layers/+lang/asciidoc/packages.el b/layers/+lang/asciidoc/packages.el new file mode 100644 index 0000000..390f6f5 --- /dev/null +++ b/layers/+lang/asciidoc/packages.el @@ -0,0 +1,46 @@ +;;; packages.el --- Asciidoc Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Mark Safronov +;; Author: Torben Hoffmann +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq asciidoc-packages '(adoc-mode)) + +(defun asciidoc/init-adoc-mode () + (use-package adoc-mode + ;; We will NOT default `.txt' files to AsciiDoc mode, + ;; and `.asciidoc' extension is just plain stupid. + :mode (("\\.adoc?\\'" . adoc-mode)) + :defer t + :config + (progn + ;; We have quite a lot of possible keybindings. + ;; See `adoc-mode.el', its bottom part where the huge easy-menu + ;; is defined and after that, where the various `tempo-template-*' + ;; functions are defined. + + ;; See /doc/CONVENTIONS.md#plain-text-markup-languages + (spacemacs/set-leader-keys-for-major-mode 'adoc-mode + "h1" 'tempo-template-adoc-title-1 + ;; Alternative method of inserting top-level heading + "hI" 'tempo-template-adoc-title-1 + "h2" 'tempo-template-adoc-title-2 + ;; Alternative method of inserting the most usual heading + "hi" 'tempo-template-adoc-title-2 + "h3" 'tempo-template-adoc-title-3 + "h4" 'tempo-template-adoc-title-4 + "h5" 'tempo-template-adoc-title-5 + "xb" 'tempo-template-adoc-strong + "xi" 'tempo-template-adoc-emphasis) + ;; yes, exactly like that. To "promote" title is to INCREASE its size. + ;; `adoc-demote' does the opposite: increases its LEVEL, + ;; which DECREASES its size. + (define-key adoc-mode-map (kbd "M-h") 'adoc-demote) + ;; see the comment about adoc-demote above + (define-key adoc-mode-map (kbd "M-l") 'adoc-promote)))) diff --git a/layers/+lang/asm/README.org b/layers/+lang/asm/README.org new file mode 100644 index 0000000..54642ea --- /dev/null +++ b/layers/+lang/asm/README.org @@ -0,0 +1,76 @@ +#+TITLE: asm layer + +[[file:img/asm.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#pdfs][PDFs]] + - [[#key-bindings][Key bindings]] + +* Description +This layer adds support for Assembly code. The built-in major mode for +editing assembly code in Emacs is =asm-mode=. + +The layer also adds =nasm-mode= for NASM-specific syntax. Although =nasm-mode= +is intended for NASM, it actually works well with other variants of Assembly +in general, and provides Imenu integration so you can jump around with ~SPC s j~. + +_Features_: +- Improved syntax highlighting. +- Automatic indentation. +- Auto-completion for symbol in opened buffers. +- Look up documentation for current instruction at cursor. +- Imenu integration. + +* Install +*** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =asm= to the existing =dotspacemacs-configuration-layers= list in this +file. + +*** PDFs +To look up the x86 instructions, two things are required: + +- the =pdftotext= command line tool from Poppler: + +#+begin_src sh + sudo apt-get install poppler-utils +#+end_src + +- [[http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html][Intel® 64 and IA-32 Architectures Software Developer Manuals]]. Any PDF that + contains the full instruction set reference will work, though volume 2 is the + best choice for x86-lookup. + +Then, set =x86-lookup-pdf= to the location of your PDF document (Tip: If you use +Helm as your completion of choice, you can use ~SPC f f~ to navigate to the +file, and press ~C-c i~ to insert the path). For example, something like this: + +#+begin_src emacs-lisp + (setq x86-lookup-pdf "~/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf") +#+end_src + +The first time you launch the command, it can take a while for indexing, this +is a one time operation and the result is cached for later use. + +* Key bindings + +| Key Binding | Description | +|-------------+----------------------------------------------------| +| ~SPC m h h~ | Look up the documentation for instruction at point | +| ~;~ | Insert a comment | + +_Note_: Quoted from the docstring of =asm-comment=, the command bound to ~;~: + +#+begin_src text +Convert an empty comment to a `larger' kind, or start a new one. +These are the known comment classes: + + 1 -- comment to the right of the code (at the comment-column) + 2 -- comment on its own line, indented like code + 3 -- comment on its own line, beginning at the left-most column. + +Suggested usage: while writing your code, trigger asm-comment +repeatedly until you are satisfied with the kind of comment. +#+end_src diff --git a/layers/+lang/asm/config.el b/layers/+lang/asm/config.el new file mode 100644 index 0000000..ed2f59f --- /dev/null +++ b/layers/+lang/asm/config.el @@ -0,0 +1,16 @@ +;;; config.el --- Asm Layer config File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Tu, Do Hoang +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables +(spacemacs|defvar-company-backends asm-mode) +(spacemacs|defvar-company-backends nasm-mode) + +(spacemacs|define-jump-handlers asm-mode) diff --git a/layers/+lang/asm/funcs.el b/layers/+lang/asm/funcs.el new file mode 100644 index 0000000..cbcba6a --- /dev/null +++ b/layers/+lang/asm/funcs.el @@ -0,0 +1,40 @@ +;;; funcs.el --- Asm Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Tu, Do Hoang +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun asm-generic-setup () + (setq indent-tabs-mode nil) ; use spaces to indent + (setq tab-stop-list (number-sequence 2 60 2))) ; 2 spaces per tab + +(defun asm-electric-indent-local-mode-off () + (electric-indent-local-mode -1)) + +;; when we press ':' character, it runs `asm-colon' command in asm-mode. +;; The command automatically removes the indentation ofcurrent line, since +;; every non-whitespace character before a colon is a label in asm and +;; label has to be at the beginning of a line. However, the problem is +;; that when deleting indentation, trailing spaces are left between the +;; colon and the original point the colon was inserted. +;; +;; These functions solve that problem. First, check whether we have any +;; space or tab after point. If so, don't do anything becuase the spaces are +;; there intentionally. If not, we delete all trailing spaces between +;; point and colon. +(defvar asm-colon-has-space nil) +(defun asm-colon-check-space () + (setq asm-colon-has-space nil) + (when (and (not (null (char-after))) + (member (string (char-after)) '(" " "\t"))) + (setq asm-colon-has-space t))) +(defun asm-colon-delete-spaces () + (unless asm-colon-has-space + (call-interactively 'delete-horizontal-space))) +(advice-add 'asm-colon :before 'asm-colon-check-space) +(advice-add 'asm-colon :after 'asm-colon-delete-spaces) diff --git a/layers/+lang/asm/img/asm.png b/layers/+lang/asm/img/asm.png new file mode 100644 index 0000000000000000000000000000000000000000..ece69d6b20a7259c68e4c963bedfe5653f74d415 GIT binary patch literal 59247 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%0Da)^LY~b#-<1mJ-az*4s2+ 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq asm-packages + '( + ;; package names go here + asm-mode + electric-indent-mode + ggtags + helm-gtags + nasm-mode + x86-lookup + )) + +(defun asm/init-asm-mode () + (use-package asm-mode + :init + (spacemacs/set-leader-keys-for-major-mode 'asm-mode "h" 'x86-lookup) + :config + (progn + ;; We need to insert a non-indented line, otherwise it's annoying + ;; everytime we insert a comment for a routine + (define-key asm-mode-map (kbd "C-j") 'newline) + (add-hook 'asm-mode-hook #'asm-generic-setup)))) + +(defun asm/post-init-electric-indent-mode () + (spacemacs/add-to-hooks 'asm-electric-indent-local-mode-off + '(asm-mode-hook nasm-mode-hook))) + +(defun asm/init-nasm-mode () + "Setup for built-in `nasm-mode', which could be thought as improved `asm-mode'" + (use-package nasm-mode + :init + (progn + (add-hook 'nasm-mode-hook #'asm-generic-setup) + (add-to-list 'auto-mode-alist '("\\.[n]*\\(asm\\|s\\)\\'" . nasm-mode)) + (spacemacs/set-leader-keys-for-major-mode 'nasm-mode "h" 'x86-lookup)) + :config + (progn + ;; We need to insert a non-indented line, otherwise it's annoying + ;; everytime we insert a comment for a routine + (define-key nasm-mode-map (kbd "C-j") 'newline) + ;; we use the advised `asm-colon' because `nasm-colon indents the whole line, even + ;; inside a comment + (define-key nasm-mode-map (kbd ":") 'asm-colon)))) + +(defun asm/init-x86-lookup () + (use-package x86-lookup + :init + (progn + ;; when a user installed `pdf-tools', use it for viewing PDF document. + (when (package-installed-p 'pdf-tools) + (setq x86-lookup-browse-pdf-function 'x86-lookup-browse-pdf-pdf-tools))))) + +(defun asm/post-init-company () + (spacemacs|add-company-hook asm-mode) + (spacemacs|add-company-hook nasm-mode)) + +(defun asm/post-init-ggtags () + (add-hook 'asm-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun asm/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'asm-mode)) diff --git a/layers/+lang/autohotkey/README.org b/layers/+lang/autohotkey/README.org new file mode 100644 index 0000000..0e8b34d --- /dev/null +++ b/layers/+lang/autohotkey/README.org @@ -0,0 +1,43 @@ +#+TITLE: Autohotkey layer + +[[file:img/ahk.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + +* Description + +Syntax highlighting and Emacs functions for use with [[http://www.autohotkey.com][AutoHotkey]] or +[[http://ahkscript.org][AutoHotkey_L]]. + +Using a combined implementation of ahk-mode from Xah Lee's =xahk-mode= +and Robert Widhopf-Fenk's =autohotkey-mode=. Updated with the latest +ahk and ahk_l commands found in the latest revision of +[[http://fincs.ahk4.net/scite4ahk/][SciTE4AutoHotkey]]. + +Contributed and maintained by [[https://www.github.com/ralesi][Rich Alesi]]. + +* Features + +- Auto-completion +- Documentation Lookup +- Execute Code Snippets +- Correct Indentation and Commenting + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =autohotkey= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key Bindings + +| Key Binding | Description | +|-------------+------------------------------------| +| ~SPC m c b~ | block comment | +| ~SPC m c c~ | line comment | +| ~SPC m e b~ | execute file with =autohotkey.exe= | +| ~SPC m h h~ | open documentation in =browser= | +| ~SPC m h H~ | open documentation in local =chm= | diff --git a/layers/+lang/autohotkey/img/ahk.png b/layers/+lang/autohotkey/img/ahk.png new file mode 100644 index 0000000000000000000000000000000000000000..d50e7765d96cf89073e1269f966251e919dd9e72 GIT binary patch literal 15564 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 a3ormM50NV-wMSV10000 +;; Author: Rich Alesi +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq autohotkey-packages + '(ahk-mode)) + +(defun autohotkey/init-ahk-mode () + (use-package ahk-mode + :mode "\\.ahk\\'" + :defer t + :init + (spacemacs/set-leader-keys-for-major-mode 'ahk-mode + "cb" 'ahk-comment-block-dwim + "cc" 'ahk-comment-dwim + "eb" 'ahk-run-script + "hh" 'ahk-lookup-web + "hH" 'ahk-lookup-chm))) diff --git a/layers/+lang/bibtex/README.org b/layers/+lang/bibtex/README.org new file mode 100644 index 0000000..8f84683 --- /dev/null +++ b/layers/+lang/bibtex/README.org @@ -0,0 +1,80 @@ +#+TITLE: BibTeX layer + +[[file:img/logo.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#configuration][Configuration]] + - [[#key-bindings][Key bindings]] + +* Description +BibTeX and BibLaTeX files are a common way to manage bibliographies. The format +was original designed to work with LaTeX files and subsequently has been adopted +by other markup formats such as MarkDown and Org mode. + +This layer adds support to manipulate BibTeX and BibLaTeX files and offer +utilities to automatically add new entries by DOI, arXiv identifier, ISBN, and +more. + +Once enabled, this layer also introduces additional shortcuts in other modes to +easily insert citations. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =bibtex= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Configuration +This layer also supports having a global BibTeX file. For a basic +configuration, add this to your =~/.spacemacs= inside +=dotspacemacs/user-config=: + +#+begin_src emacs-lisp + (setq org-ref-default-bibliography '("~/Papers/references.bib") + org-ref-pdf-directory "~/Papers/" + org-ref-bibliography-notes "~/Papers/notes.org") +#+end_src + +Certain modes, such as =latex-mode= with AucTeX, will automatically lookup +references in a document if any of the recognized bibliography commands are +used. Other modes may have a similar feature, or one could always set +file-local variables (through ~SPC f v f~). + +You can also customize which program is used to display the PDFs. For example, +to use Zathura: + +#+begin_src emacs-lisp + (setq org-ref-open-pdf-function + (lambda (fpath) + (start-process "zathura" "*helm-bibtex-zathura*" "/usr/bin/zathura" fpath))) +#+end_src + +More configuration options are available and are detailed in the =org-ref= and +=helm-bibtex= package documentations. + +* Key bindings +In a Bib(La)TeX file, the following key bindings are added: + +| Key Binding | Description | +|---------------------------+--------------------------------------------| +| ~SPC m j~ / ~g j~ / ~C-j~ | Next entry | +| ~SPC m k~ / ~g k~ / ~C-k~ | Previous entry | +| ~SPC m p~ | Open PDF | +| ~SPC m n~ | Open notes | +| ~SPC m b~ | Open browser | +| ~SPC m i~ | Insert new entry | +| ~SPC m s~ | Sort entry | +| ~SPC m h~ | Various actions on entry | +| ~SPC m l a~ | Lookup and add arXiv paper (don't get PDF) | +| ~SPC m l A~ | Lookup and add arXiv paper (download PDF) | +| ~SPC m l d~ | Lookup and add paper by DOI | +| ~SPC m l i~ | Lookup and add book by ISBN | +| ~SPC m l p~ | Lookup and add paper by PMID | + +In addition, =org-mode=, =latex-mode= and =markdown-mode= all have the following +key binding added: + +| Key Binding | Description | +|-------------+-----------------| +| ~SPC m i c~ | Insert citation | diff --git a/layers/+lang/bibtex/img/logo.png b/layers/+lang/bibtex/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fac271b8c0984e56358b0d3527084304aebb427c GIT binary patch literal 10831 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 KWoo3%gZ>YtCM0SA literal 0 HcmV?d00001 diff --git a/layers/+lang/bibtex/packages.el b/layers/+lang/bibtex/packages.el new file mode 100644 index 0000000..867fc59 --- /dev/null +++ b/layers/+lang/bibtex/packages.el @@ -0,0 +1,87 @@ +;;; packages.el --- BibTeX Layer packages file for Spacemacs. +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Joshua Ellis +;; URL: https://github.com/JP-Ellis +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defconst bibtex-packages + '( + auctex + org + org-ref + markdown-mode + helm-bibtex + biblio + biblio-core + )) + +(defun bibtex/post-init-auctex () + (spacemacs/set-leader-keys-for-major-mode 'latex-mode + "ic" 'org-ref-helm-insert-cite-link)) + +(defun bibtex/post-init-org () + (spacemacs/set-leader-keys-for-major-mode 'org-mode + "ic" 'org-ref-helm-insert-cite-link)) + +(defun bibtex/init-org-ref () + (use-package org-ref + :defer t + :commands (org-ref-bibtex-next-entry + org-ref-bibtex-previous-entry + org-ref-open-in-browser + org-ref-open-bibtex-notes + org-ref-open-bibtex-pdf + org-ref-bibtex-hydra/body + org-ref-bibtex-hydra/org-ref-bibtex-new-entry/body-and-exit + org-ref-sort-bibtex-entry + arxiv-add-bibtex-entry + arxiv-get-pdf-add-bibtex-entry + doi-utils-add-bibtex-entry-from-doi + isbn-to-bibtex + pubmed-insert-bibtex-from-pmid) + :init + (progn + (evil-define-key 'normal bibtex-mode-map + (kbd "C-j") 'org-ref-bibtex-next-entry + (kbd "C-k") 'org-ref-bibtex-previous-entry + "gj" 'org-ref-bibtex-next-entry + "gk" 'org-ref-bibtex-previous-entry) + + (spacemacs/set-leader-keys-for-major-mode 'bibtex-mode + ;; Navigation + "j" 'org-ref-bibtex-next-entry + "k" 'org-ref-bibtex-previous-entry + + ;; Open + "b" 'org-ref-open-in-browser + "n" 'org-ref-open-bibtex-notes + "p" 'org-ref-open-bibtex-pdf + + ;; Misc + "h" 'org-ref-bibtex-hydra/body + "i" 'org-ref-bibtex-hydra/org-ref-bibtex-new-entry/body-and-exit + "s" 'org-ref-sort-bibtex-entry + + ;; Lookup utilities + "la" 'arxiv-add-bibtex-entry + "lA" 'arxiv-get-pdf-add-bibtex-entry + "ld" 'doi-utils-add-bibtex-entry-from-doi + "li" 'isbn-to-bibtex + "lp" 'pubmed-insert-bibtex-from-pmid)))) + +(defun bibtex/post-init-org-ref () + (add-hook 'org-mode-hook (lambda () (require 'org-ref)))) + +(defun bibtex/post-init-markdown-mode () + (spacemacs/set-leader-keys-for-major-mode 'markdown-mode + "ic" 'org-ref-helm-insert-cite-link)) + +(defun bibtex/init-helm-bibtex ()) +(defun bibtex/init-biblio ()) +(defun bibtex/init-biblio-core ()) + diff --git a/layers/+lang/c-c++/README.org b/layers/+lang/c-c++/README.org new file mode 100644 index 0000000..1510679 --- /dev/null +++ b/layers/+lang/c-c++/README.org @@ -0,0 +1,106 @@ +#+TITLE: C/C++ layer + +[[file:img/ccpp.jpg]] +[[file:img/cmake.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#default-mode-for-header-files][Default mode for header files]] + - [[#enable-clang-support][Enable Clang support]] + - [[#clang-format][clang-format]] + - [[#company-clang-and-flycheck][Company-clang and flycheck]] + - [[#key-bindings][Key Bindings]] + +* Description +This layer adds configuration for C/C++ language as well support for [[http://www.cmake.org/][CMake]] +scripts. + +* Features +- Support syntax checking via flycheck with Clang. +- Support for disassembly of code with [[https://github.com/jart/disaster][disaster]]. +- Support code reformatting with [[http://clang.llvm.org/docs/ClangFormat.html][clang-format]]. +- Display function or variable definition at the bottom. (when =semantic= layer + is included) +- Display current function cursor is in at the top. See [[https://github.com/tuhdo/semantic-stickyfunc-enhance][stickyfunc-demos]] for + demos in some programming languages. (when =semantic= layer is included) +- Support common refactoring with [[https://github.com/tuhdo/semantic-refactor][semantic-refactor]] . See [[https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos.org][srefactor-demos]] for + demonstration of refactoring features. (when =semantic= layer is included) +- Support code navigation via cscope (when =cscope= layer is included) and gtags. +- Support auto-completion (when =auto-completion= layer is included) via + company-clang (when =c-c++-enable-clang-support= is turned on), or + company-ycmd (when =ycmd= layer is included). + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =c-c++= to the existing =dotspacemacs-configuration-layers= list in this +file. + +*Note:* [[https://github.com/tuhdo/semantic-refactor][semantic-refactor]] is only available for Emacs 24.4+ + +** Default mode for header files +By default header files are opened in =c-mode=, you can open them in =c++-mode= +by setting the variable =c-c++-default-mode-for-headers= to =c++-mode=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers + '((c-c++ :variables + c-c++-default-mode-for-headers 'c++-mode))) +#+END_SRC + +*Note:* To set the variable for a given project, create a directory local +variable at the root of your project. More info on directory local variables +can be found in the [[http://www.gnu.org/software/emacs/manual/html_node/elisp/Directory-Local-Variables.html][dir-locals]]. + +** Enable Clang support +To enable Clang support set the layer variable =c-c++-enable-clang-support= +to =t= in the dotfile: + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers + '((c-c++ :variables c-c++-enable-clang-support t))) +#+END_SRC + +*** clang-format +[[http://clang.llvm.org/docs/ClangFormat.html][clang-format]] allows reformatting either a selected region of code +(=clang-format-region=) or a whole buffer (=clang-format-buffer=) to make it +conform to a style defined in a =.clang-format= file. This file is either +located in the same directory as the file being edited, or in any of its parent +directories (otherwise a default style will be used). + +You can add snippets similar to the following to bind clang-format to either a +particular mode or all modes in your =dotspacemacs/user-config= (within your +=~/.spacemacs=): + +#+BEGIN_SRC emacs-lisp + ;; Bind clang-format-region to C-M-tab in all modes: + (global-set-key [C-M-tab] 'clang-format-region) + ;; Bind clang-format-buffer to tab on the c++-mode only: + (add-hook 'c++-mode-hook 'clang-format-bindings) + (defun clang-format-bindings () + (define-key c++-mode-map [tab] 'clang-format-buffer)) +#+END_SRC + +*** Company-clang and flycheck +This layer adds some fancy improvements to =company-clang=. +It includes a hook to load a projects =.clang_complete= file, which is +just a text file with one clang flag per line, a format also used by +other text editor clang plugins. + +Not only does this allow proper autocomplete on projects with extra +includes and flags, but there is also support for flycheck so that it +doesn't complain about missing header files. + +* Key Bindings + +| Key Binding | Description | +|-------------+------------------------------------------------------------------------| +| ~SPC m g a~ | open matching file (e.g. switch between .cpp and .h) | +| ~SPC m g A~ | open matching file in another window (e.g. switch between .cpp and .h) | +| ~SPC m D~ | disaster: disassemble c/c++ code | +| ~SPC m r~ | srefactor: refactor thing at point. | + +*Note:* [[https://github.com/tuhdo/semantic-refactor][semantic-refactor]] is only available for Emacs 24.4+ diff --git a/layers/+lang/c-c++/config.el b/layers/+lang/c-c++/config.el new file mode 100644 index 0000000..cec7c97 --- /dev/null +++ b/layers/+lang/c-c++/config.el @@ -0,0 +1,24 @@ +;;; config.el --- C/C++ Layer config File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(defvar c-c++-enable-clang-support nil + "If non nil Clang related packages and configuration are enabled.") + +(spacemacs|defvar-company-backends c-mode-common) +(spacemacs|defvar-company-backends cmake-mode) + +(spacemacs|define-jump-handlers c++-mode) +(spacemacs|define-jump-handlers c-mode) + +(defvar c-c++-default-mode-for-headers 'c-mode + "Default mode to open header files. Can be `c-mode' or `c++-mode'.") diff --git a/layers/+lang/c-c++/funcs.el b/layers/+lang/c-c++/funcs.el new file mode 100644 index 0000000..62149d9 --- /dev/null +++ b/layers/+lang/c-c++/funcs.el @@ -0,0 +1,52 @@ +;;; funcs.el --- C/C++ Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Based on the Sarcasm/irony-mode compilation database code. +(defun company-mode/find-clang-complete-file () + (when buffer-file-name + (let ((dir (locate-dominating-file buffer-file-name ".clang_complete"))) + (when dir + (concat (file-name-as-directory dir) ".clang_complete"))))) + +;; Based on the Sarcasm/irony-mode compilation database code. +(defun company-mode/load-clang-complete-file (cc-file) + "Load the flags from CC-FILE, one flag per line." + (let ((invocation-dir (expand-file-name (file-name-directory cc-file))) + (case-fold-search nil) + compile-flags) + (with-temp-buffer + (insert-file-contents cc-file) + ;; Replace relative paths with absolute paths (by @trishume) + ;; (goto-char (point-min)) + (while (re-search-forward "\\(-I\\|-isystem\n\\)\\(\\S-+\\)" nil t) + (replace-match (format "%s%s" (match-string 1) + (expand-file-name (match-string 2) invocation-dir)))) + ;; Turn lines into a list + (setq compile-flags + ;; remove whitespaces at the end of each line, if any + (mapcar #'(lambda (line) + (if (string-match "[ \t]+$" line) + (replace-match "" t t line) + line)) + (split-string (buffer-string) "\n" t)))) + compile-flags)) + +(defun c-c++/load-clang-args () + "Sets the arguments for company-clang, the system paths for company-c-headers +and the arguments for flyckeck-clang based on a project-specific text file." + (unless company-clang-arguments + (let* ((cc-file (company-mode/find-clang-complete-file)) + (flags (if cc-file (company-mode/load-clang-complete-file cc-file) '())) + (dirs (mapcar (lambda (f) (substring f 2)) + (remove-if-not (lambda (f) (string-prefix-p "-I" f)) flags)))) + (setq-local company-clang-arguments flags) + (setq-local company-c-headers-path-system (append '("/usr/include" "/usr/local/include") dirs)) + (setq-local flycheck-clang-args flags)))) diff --git a/layers/+lang/c-c++/img/ccpp.jpg b/layers/+lang/c-c++/img/ccpp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a39aa98aa1a86aa1b7bf2f9d84cea1034b4d3f6 GIT binary patch literal 38418 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/c-c++/img/cmake.png b/layers/+lang/c-c++/img/cmake.png new file mode 100644 index 0000000000000000000000000000000000000000..c9baf136701642e988bc4530c5eae6910eeb1123 GIT binary patch literal 14933 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq c-c++-packages + '( + cc-mode + disaster + clang-format + cmake-mode + company + (company-c-headers :toggle (configuration-layer/package-usedp 'company)) + company-ycmd + flycheck + gdb-mi + ggtags + helm-cscope + helm-gtags + semantic + srefactor + stickyfunc-enhance + ycmd + xcscope + )) + +(defun c-c++/init-cc-mode () + (use-package cc-mode + :defer t + :init + (progn + (add-to-list 'auto-mode-alist + `("\\.h\\'" . ,c-c++-default-mode-for-headers))) + :config + (progn + (require 'compile) + (c-toggle-auto-newline 1) + (spacemacs/set-leader-keys-for-major-mode 'c-mode + "ga" 'projectile-find-other-file + "gA" 'projectile-find-other-file-other-window) + (spacemacs/set-leader-keys-for-major-mode 'c++-mode + "ga" 'projectile-find-other-file + "gA" 'projectile-find-other-file-other-window)))) + +(defun c-c++/init-disaster () + (use-package disaster + :defer t + :commands (disaster) + :init + (progn + (spacemacs/set-leader-keys-for-major-mode 'c-mode + "D" 'disaster) + (spacemacs/set-leader-keys-for-major-mode 'c++-mode + "D" 'disaster)))) + +(defun c-c++/init-clang-format () + (use-package clang-format + :if c-c++-enable-clang-support)) + +(defun c-c++/init-cmake-mode () + (use-package cmake-mode + :mode (("CMakeLists\\.txt\\'" . cmake-mode) ("\\.cmake\\'" . cmake-mode)) + :init (push 'company-cmake company-backends-cmake-mode))) + +(defun c-c++/post-init-company () + (spacemacs|add-company-hook c-mode-common) + (spacemacs|add-company-hook cmake-mode) + + (when c-c++-enable-clang-support + (push 'company-clang company-backends-c-mode-common) + + (defun company-mode/more-than-prefix-guesser () + (c-c++/load-clang-args) + (company-clang-guess-prefix)) + + (setq company-clang-prefix-guesser 'company-mode/more-than-prefix-guesser) + (spacemacs/add-to-hooks 'c-c++/load-clang-args '(c-mode-hook c++-mode-hook)))) + +(defun c-c++/init-company-c-headers () + (use-package company-c-headers + :defer t + :init (push 'company-c-headers company-backends-c-mode-common))) + +(defun c-c++/post-init-flycheck () + (dolist (mode '(c-mode c++-mode)) + (spacemacs/add-flycheck-hook mode)) + (when c-c++-enable-clang-support + (spacemacs/add-to-hooks 'c-c++/load-clang-args '(c-mode-hook c++-mode-hook)))) + +(defun c-c++/post-init-ggtags () + (add-hook 'c-mode-local-vars-hook #'spacemacs/ggtags-mode-enable) + (add-hook 'c++-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun c-c++/init-gdb-mi () + (use-package gdb-mi + :defer t + :init + (setq + ;; use gdb-many-windows by default when `M-x gdb' + gdb-many-windows t + ;; Non-nil means display source file containing the main routine at startup + gdb-show-main t))) + +(defun c-c++/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'c-mode) + (spacemacs/helm-gtags-define-keys-for-mode 'c++-mode)) + +(defun c-c++/post-init-semantic () + (spacemacs/add-to-hooks 'semantic-mode '(c-mode-hook c++-mode-hook))) + +(defun c-c++/post-init-srefactor () + (spacemacs/set-leader-keys-for-major-mode 'c-mode "r" 'srefactor-refactor-at-point) + (spacemacs/set-leader-keys-for-major-mode 'c++-mode "r" 'srefactor-refactor-at-point) + (spacemacs/add-to-hooks 'spacemacs/lazy-load-srefactor '(c-mode-hook c++-mode-hook))) + +(defun c-c++/post-init-stickyfunc-enhance () + (spacemacs/add-to-hooks 'spacemacs/lazy-load-stickyfunc-enhance '(c-mode-hook c++-mode-hook))) + +(defun c-c++/post-init-ycmd () + (add-hook 'c++-mode-hook 'ycmd-mode) + (add-hook 'c-mode-hook 'ycmd-mode) + (add-to-list 'spacemacs-jump-handlers-c++-mode '(ycmd-goto :async t)) + (add-to-list 'spacemacs-jump-handlers-c-mode '(ycmd-goto :async t)) + (dolist (mode '(c++-mode c-mode)) + (spacemacs/set-leader-keys-for-major-mode mode + "gG" 'ycmd-goto-imprecise))) + +(defun c-c++/post-init-company-ycmd () + (push 'company-ycmd company-backends-c-mode-common)) + +(defun c-c++/pre-init-xcscope () + (spacemacs|use-package-add-hook xcscope + :post-init + (dolist (mode '(c-mode c++-mode)) + (spacemacs/set-leader-keys-for-major-mode mode "gi" 'cscope-index-files)))) + +(defun c-c++/pre-init-helm-cscope () + (spacemacs|use-package-add-hook xcscope + :post-init + (dolist (mode '(c-mode c++-mode)) + (spacemacs/setup-helm-cscope mode)))) diff --git a/layers/+lang/clojure/README.org b/layers/+lang/clojure/README.org new file mode 100644 index 0000000..f36f124 --- /dev/null +++ b/layers/+lang/clojure/README.org @@ -0,0 +1,315 @@ +#+TITLE: Clojure layer + +[[file:img/clojure.png]] [[file:img/cider.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#pretty-symbols][Pretty Symbols]] + - [[#cider-and-clj-refactor][CIDER and clj-refactor]] + - [[#quick-start-with-boot][Quick Start with boot]] + - [[#quick-start-with-lein][Quick Start with lein]] + - [[#more-details][More details]] + - [[#key-bindings][Key Bindings]] + - [[#working-with-clojure-files-barfage-slurpage--more][Working with clojure files (barfage, slurpage & more)]] + - [[#leader][Leader]] + - [[#documentation][Documentation]] + - [[#evaluation][Evaluation]] + - [[#goto][Goto]] + - [[#repl][REPL]] + - [[#tests][Tests]] + - [[#toggles][Toggles]] + - [[#debugging][Debugging]] + - [[#refactoring][Refactoring]] + - [[#reformatting][Reformatting]] + - [[#cider-buffers][CIDER Buffers]] + - [[#stacktrace-mode][stacktrace-mode]] + - [[#inspector-mode][inspector-mode]] + - [[#test-report-mode][test-report-mode]] + - [[#development-notes][Development Notes]] + - [[#indentation][Indentation]] + +* Description +This layer adds support for [[http://clojure.org][Clojure]] language using [[https://github.com/clojure-emacs/cider][CIDER]]. + +* Features +- REPL via [[https://github.com/clojure-emacs/cider][CIDER]] +- Code formatting via [[https://github.com/clojure-emacs/cider][CIDER]] using [[https://github.com/weavejester/cljfmt][Cljfmt]] +- Refactoring via [[https://github.com/clojure-emacs/clj-refactor.el][clj-refactor]] +- Aligning of code forms via [[https://github.com/clojure-emacs/clojure-mode][clojure-mode]] + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =clojure= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Pretty Symbols +Pretty symbols for anonymous functions, set literals and partial, like =(λ [a] +(+ a 5))=, =ƒ(+ % 5)=, =∈{2 4 6}= and =Ƥ=. + +To enable this feature, add the following snippet to the +=dotspacemacs/user-config= section of your =~/.spacemacs= file: + +#+BEGIN_SRC emacs-lisp + (setq clojure-enable-fancify-symbols t) +#+END_SRC + +Or set this variable when loading the configuration layer: +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers + '((clojure :variables clojure-enable-fancify-symbols t))) +#+END_SRC + +** CIDER and clj-refactor +Note that recent versions of CIDER automatically inject the required +dependencies into your boot or leiningen configuration when you connect to the +REPL. Thus, the configuration instructions below only apply to CIDER 0.10 and +older. Most users should be able to just run ~SPC m s i~ to connect to the CIDER +REPL and skip the rest of this section. + +*** Quick Start with boot +- Install =boot= (see https://github.com/boot-clj/boot#install) +- Create a file =~/.boot/profile.boot= with the following content: + +#+BEGIN_SRC clojure +(require 'boot.repl) + +(swap! boot.repl/*default-dependencies* conj + '[refactor-nrepl "1.2.0-SNAPSHOT"] + '[cider/cider-nrepl "0.10.0-SNAPSHOT"]) + +(swap! boot.repl/*default-middleware* conj + 'refactor-nrepl.middleware/wrap-refactor) +#+END_SRC + +- Run ~SPC m s i~ in any of the clojure source files to connect to the CIDER + REPL. Note that a build.boot file must be present in your working directory + for Cider to recognize the presence of boot. + +*** Quick Start with lein +- Install =lein= version 2.5.2 or newer (see http://leiningen.org/#install) +- Create a file =~/.lein/profiles.clj= with the following content: + +#+BEGIN_SRC clojure + {:repl {:plugins [[cider/cider-nrepl "0.10.0-SNAPSHOT"] + [refactor-nrepl "2.0.0-SNAPSHOT"]] + :dependencies [[alembic "0.3.2"] + [org.clojure/tools.nrepl "0.2.12"]]}} +#+END_SRC + +- After creating your project with ~lein new app ~ or + importing an existing project, run ~SPC m s i~ in any of the clojure + source files to connect to the CIDER REPL. + +*** More details +More info regarding installation of nREPL middleware can be found here: +- CIDER: [[https://github.com/clojure-emacs/cider#installation][cider_install]] +- clj-refactor: [[https://github.com/clojure-emacs/refactor-nrepl][refactor-nrepl]] + +* Key Bindings +** Working with clojure files (barfage, slurpage & more) +Spacemacs comes with a special ~lisp-state~ for working with lisp code that +supports slurpage, barfage and more tools you'll likely want when working with +lisp. + +As this state works the same for all files, the documentation is in global +[[https://github.com/syl20bnr/spacemacs/blob/master/doc/DOCUMENTATION.org#lisp-key-bindings][DOCUMENTATION.org]]. In general, use ~SPC k~ to interact with the lisp-state. + +** Leader +*** Documentation + +| Key Binding | Description | +|-------------+-----------------| +| ~SPC m h a~ | cider apropos | +| ~SPC m h g~ | cider grimoire | +| ~SPC m h h~ | cider doc | +| ~SPC m h j~ | cider javadoc | +| ~SPC m h n~ | cider browse ns | + +*** Evaluation + +| Key Binding | Description | +|-------------+-------------------------------------------------| +| ~SPC m e b~ | eval buffer | +| ~SPC m e e~ | eval last sexp | +| ~SPC m e f~ | eval function at point | +| ~SPC m e r~ | eval region | +| ~SPC m e m~ | cider macroexpand 1 | +| ~SPC m e M~ | cider macroexpand all | +| ~SPC m e p~ | print last sexp (clojure interaction mode only) | +| ~SPC m e w~ | eval last sexp and replace with result | + +*** Goto + +| Key Binding | Description | +|-------------+-----------------------| +| ~SPC m g b~ | go back | +| ~SPC m g C~ | browse classpath | +| ~SPC m g g~ | goto var | +| ~SPC m g e~ | goto error | +| ~SPC m g r~ | goto resource | +| ~SPC m g n~ | browse namespaces | +| ~SPC m g N~ | browse all namespaces | + +*** REPL + +| Key Binding | Description | +|-------------+--------------------------------------------------------------------------------| +| ~SPC m ,~ | handle shortcut (cider-repl-handle-shortcut) | +| ~SPC m s b~ | send and eval buffer in REPL | +| ~SPC m s B~ | send and eval buffer and switch to REPL in =insert state= | +| ~SPC m s c~ | connect to REPL (cider-connect) or clear repl buffer (cider-repl-clear-buffer) | +| ~SPC m s C~ | clear REPL (cider-find-and-clear-repl-output) | +| ~SPC m s e~ | send and eval last sexp in REPL | +| ~SPC m s E~ | send and eval last sexp and switch to REPL in =insert state= | +| ~SPC m s f~ | send and eval function in REPL | +| ~SPC m s F~ | send and eval function and switch to REPL in =insert state= | +| ~SPC m s i~ | start REPL (cider-jack-in) | +| ~SPC m s I~ | start clojurescript REPL (cider-jack-in-clojurescript) | +| ~SPC m s n~ | send and eval ns form in REPL | +| ~SPC m s N~ | send and eval ns form and switch to REPL in =insert state= | +| ~SPC m s q~ | kill REPL (cider-quit) | +| ~SPC m s o~ | switch to other repl instance (cider-repl-switch-to-other) | +| ~SPC m s r~ | send and eval region in REPL | +| ~SPC m s R~ | send and eval region and switch to REPL in =insert state= | +| ~SPC m s s~ | switch to REPL or jump to last file or last clj buffer from repl (cider-repl) | + +*** Tests + +| Key Binding | Description | +|-------------+------------------------------------| +| ~SPC m t a~ | run all tests in namespace | +| ~SPC m t r~ | re-run test failures for namespace | +| ~SPC m t t~ | run test at point | + +*** Toggles + +| Key Binding | Description | +|-------------+-----------------------------| +| ~SPC m T e~ | toggle englighten mode | +| ~SPC m T f~ | toggle REPL font-locking | +| ~SPC m T e~ | toggle cider-enlighten-mode | +| ~SPC m T p~ | toggle REPL pretty-printing | +| ~SPC m T i~ | toggle indentation style | +| ~SPC m T t~ | toggle auto test mode | + +*** Debugging + +| Key Binding | Description | +|-------------+--------------------------------| +| ~SPC m d r~ | reload namepspaces | +| ~SPC m d b~ | instrument expression at point | +| ~SPC m d e~ | display last stacktrace | +| ~SPC m d i~ | inspect expression at point | + +*** Refactoring + +| Key Binding | Description | +|---------------+-----------------------------| +| ~SPC m r ?~ | describe refactoring | +| ~SPC m r a d~ | add declaration | +| ~SPC m r a i~ | add import to ns | +| ~SPC m r a m~ | add missing libspec | +| ~SPC m r a p~ | add project dependency | +| ~SPC m r a r~ | add require to ns | +| ~SPC m r a u~ | add use to ns | +| ~SPC m r c c~ | cycle coll | +| ~SPC m r c i~ | cycle if | +| ~SPC m r c n~ | clean ns | +| ~SPC m r c p~ | cycle privacy | +| ~SPC m r d k~ | destructure keys | +| ~SPC m r e c~ | extract constant | +| ~SPC m r e d~ | extract definition | +| ~SPC m r e f~ | extract function | +| ~SPC m r e l~ | expand let | +| ~SPC m r f u~ | find usages | +| ~SPC m r f e~ | create fn from example | +| ~SPC m r h d~ | hotload dependency | +| ~SPC m r i l~ | introduce let | +| ~SPC m r i s~ | inline symbol | +| ~SPC m r m f~ | move form | +| ~SPC m r m l~ | move to let | +| ~SPC m r p c~ | project clean | +| ~SPC m r p f~ | promote function | +| ~SPC m r r d~ | remove debug fns | +| ~SPC m r r f~ | rename file | +| ~SPC m r r l~ | remove let | +| ~SPC m r r r~ | remove unused requires | +| ~SPC m r r s~ | rename symbol | +| ~SPC m r r u~ | replace use | +| ~SPC m r s n~ | sort ns | +| ~SPC m r s p~ | sort project dependencies | +| ~SPC m r s r~ | stop referring | +| ~SPC m r s c~ | show changelog | +| ~SPC m r t f~ | thread first all | +| ~SPC m r t h~ | thread | +| ~SPC m r t l~ | thread last all | +| ~SPC m r u a~ | unwind all | +| ~SPC m r u p~ | update project dependencies | +| ~SPC m r u w~ | unwind | + +*** Reformatting + +| Key Binding | Description | +|---------------------------+-------------------------| +| ~SPC m f l~ | realign current form | +| ~SPC m f b~ or ~SPC m =~ | reformat current buffer | + +** CIDER Buffers +In general, ~q~ should always quit the popped up buffer. + +*** stacktrace-mode + +| Key Binding | Description | +|-------------+---------------------| +| ~C-j~ | next cause | +| ~C-k~ | previous cause | +| ~TAB~ | cycle current cause | +| ~0~ | cycle all causes | +| ~1~ | cycle cause 1 | +| ~2~ | cycle cause 2 | +| ~3~ | cycle cause 3 | +| ~4~ | cycle cause 4 | +| ~5~ | cycle cause 5 | +| ~a~ | toggle all | +| ~c~ | toggle clj | +| ~d~ | toggle duplicates | +| ~J~ | toggle java | +| ~r~ | toggle repl | +| ~T~ | toggle tooling | + +*** inspector-mode + +| Key Binding | Description | +|-------------+---------------------------------| +| ~TAB~ | next inspectable object | +| ~Shift-TAB~ | previous inspectable object | +| ~RET~ | inspect object | +| ~L~ | pop to the parent object | +| ~n~ | next page in paginated view | +| ~N~ | previous page in paginated view | +| ~r~ | refresh | +| ~s~ | set a new page size | + +*** test-report-mode + +| Key Binding | Description | +|-------------+-------------------| +| ~C-j~ | next result | +| ~C-k~ | previous result | +| ~RET~ | jump to test | +| ~d~ | ediff test result | +| ~e~ | show stacktrace | +| ~r~ | rerun tests | +| ~t~ | run test | +| ~T~ | run tests | + +* Development Notes +** Indentation +With a [[https://github.com/clojure-emacs/cider/blob/master/doc/Indent-Spec.md#indent-specification][new]] functionality of Cider to read the custom indentation rules from the +var's metadata, it is better for consistency reasons to not add the custom +indentation rules to Spacemacs, but to add them to the metadata of those +specific vars. diff --git a/layers/+lang/clojure/config.el b/layers/+lang/clojure/config.el new file mode 100644 index 0000000..86a5564 --- /dev/null +++ b/layers/+lang/clojure/config.el @@ -0,0 +1,28 @@ +;;; config.el --- Clojure Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; --------------------------------------------------------------------------- +;; Prefixes +;; --------------------------------------------------------------------------- + +;; Variables + +(spacemacs|defvar-company-backends cider-mode) +(spacemacs|defvar-company-backends cider-repl-mode) + +(spacemacs|define-jump-handlers clojure-mode) +(spacemacs|define-jump-handlers clojurec-mode) +(spacemacs|define-jump-handlers clojurescript-mode) +(spacemacs|define-jump-handlers clojurex-mode) +(spacemacs|define-jump-handlers cider-repl-mode) + +(defvar clojure-enable-fancify-symbols nil + "If non nil the `fancify-symbols' function is enabled.") diff --git a/layers/+lang/clojure/funcs.el b/layers/+lang/clojure/funcs.el new file mode 100644 index 0000000..8759827 --- /dev/null +++ b/layers/+lang/clojure/funcs.el @@ -0,0 +1,172 @@ +;;; funcs.el --- Clojure Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun clojure/fancify-symbols (mode) + "Pretty symbols for Clojure's anonymous functions and sets, + like (λ [a] (+ a 5)), ƒ(+ % 5), and ∈{2 4 6}." + (font-lock-add-keywords mode + `(("(\\(fn\\)[\[[:space:]]" + (0 (progn (compose-region (match-beginning 1) + (match-end 1) "λ")))) + ("(\\(partial\\)[\[[:space:]]" + (0 (progn (compose-region (match-beginning 1) + (match-end 1) "Ƥ")))) + ("(\\(comp\\)[\[[:space:]]" + (0 (progn (compose-region (match-beginning 1) + (match-end 1) "∘")))) + ("\\(#\\)(" + (0 (progn (compose-region (match-beginning 1) + (match-end 1) "ƒ")))) + ("\\(#\\){" + (0 (progn (compose-region (match-beginning 1) + (match-end 1) "∈"))))))) + +(defun spacemacs//cider-eval-in-repl-no-focus (form) + "Insert FORM in the REPL buffer and eval it." + (while (string-match "\\`[ \t\n\r]+\\|[ \t\n\r]+\\'" form) + (setq form (replace-match "" t t form))) + (with-current-buffer (cider-current-repl-buffer) + (let ((pt-max (point-max))) + (goto-char pt-max) + (insert form) + (indent-region pt-max (point)) + (cider-repl-return)))) + +(defun spacemacs/cider-send-last-sexp-to-repl () + "Send last sexp to REPL and evaluate it without changing +the focus." + (interactive) + (spacemacs//cider-eval-in-repl-no-focus (cider-last-sexp))) + +(defun spacemacs/cider-send-last-sexp-to-repl-focus () + "Send last sexp to REPL and evaluate it and switch to the REPL in +`insert state'." + (interactive) + (cider-insert-last-sexp-in-repl t) + (evil-insert-state)) + +(defun spacemacs/cider-send-region-to-repl (start end) + "Send region to REPL and evaluate it without changing +the focus." + (interactive "r") + (spacemacs//cider-eval-in-repl-no-focus + (buffer-substring-no-properties start end))) + +(defun spacemacs/cider-send-region-to-repl-focus (start end) + "Send region to REPL and evaluate it and switch to the REPL in +`insert state'." + (interactive "r") + (cider-insert-in-repl + (buffer-substring-no-properties start end) t) + (evil-insert-state)) + +(defun spacemacs/cider-send-function-to-repl () + "Send current function to REPL and evaluate it without changing +the focus." + (interactive) + (spacemacs//cider-eval-in-repl-no-focus (cider-defun-at-point))) + +(defun spacemacs/cider-send-function-to-repl-focus () + "Send current function to REPL and evaluate it and switch to the REPL in +`insert state'." + (interactive) + (cider-insert-defun-in-repl t) + (evil-insert-state)) + +(defun spacemacs/cider-send-ns-form-to-repl () + "Send buffer's ns form to REPL and evaluate it without changing +the focus." + (interactive) + (spacemacs//cider-eval-in-repl-no-focus (cider-ns-form))) + +(defun spacemacs/cider-send-ns-form-to-repl-focus () + "Send ns form to REPL and evaluate it and switch to the REPL in +`insert state'." + (interactive) + (cider-insert-ns-form-in-repl t) + (evil-insert-state)) + +(defun spacemacs/cider-send-buffer-in-repl-and-focus () + "Send the current buffer in the REPL and switch to the REPL in +`insert state'." + (interactive) + (cider-load-buffer) + (cider-switch-to-repl-buffer) + (evil-insert-state)) + +(defun spacemacs/cider-test-run-focused-test () + "Run test around point." + (interactive) + (cider-load-buffer) + (cider-test-run-test)) + +(defalias 'spacemacs/cider-test-run-all-tests #'spacemacs/cider-test-run-ns-tests + "ns tests are not actually *all* tests; + cider-test-run-project-tests would be better here, but + there currently is a bug with the function. Replace once + it gets fixed.") + +(defun spacemacs/cider-test-run-ns-tests () + "Run namespace test." + (interactive) + (cider-load-buffer) + (cider-test-run-ns-tests nil)) + +(defun spacemacs/cider-test-run-loaded-tests () + "Run loaded tests." + (interactive) + (cider-load-buffer) + (cider-test-run-loaded-tests nil)) + +(defun spacemacs/cider-test-run-project-tests () + "Run project tests." + (interactive) + (cider-load-buffer) + (cider-test-run-project-tests nil)) + +(defun spacemacs/cider-test-rerun-tests () + "Run previous tests again." + (interactive) + (cider-load-buffer) + (cider-test-rerun-tests)) + +(defun spacemacs/cider-display-error-buffer (&optional arg) + "Displays the *cider-error* buffer in the current window. +If called with a prefix argument, uses the other-window instead." + (interactive "P") + (let ((buffer (get-buffer cider-error-buffer))) + (when buffer + (funcall (if (equal arg '(4)) + 'switch-to-buffer-other-window + 'switch-to-buffer) + buffer)))) + +(defun spacemacs/cider-toggle-repl-pretty-printing () + "Toggle REPL pretty printing on and off." + (interactive) + (setq cider-repl-use-pretty-printing + (if cider-repl-use-pretty-printing nil t)) + (message "Cider REPL pretty printing: %s" + (if cider-repl-use-pretty-printing "ON" "OFF"))) + +(defun spacemacs/cider-toggle-repl-font-locking () + "Toggle font locking in REPL." + (interactive) + (setq cider-repl-use-clojure-font-lock + (if cider-repl-use-pretty-printing nil t)) + (message "Cider REPL clojure-mode font-lock: %s" + (if cider-repl-use-clojure-font-lock "ON" "OFF"))) + +(defun spacemacs/cider-debug-setup () + "Initialize debug mode." + (when (memq dotspacemacs-editing-style '(hybrid vim)) + (evil-make-overriding-map cider--debug-mode-map 'normal) + (evil-normalize-keymaps))) diff --git a/layers/+lang/clojure/img/cider.png b/layers/+lang/clojure/img/cider.png new file mode 100644 index 0000000000000000000000000000000000000000..30dce6079e62d786184669886289feffa1375f3c GIT binary patch literal 23278 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/clojure/img/clojure.png b/layers/+lang/clojure/img/clojure.png new file mode 100644 index 0000000000000000000000000000000000000000..55226c7879b5c51377cdeb074446a8d7f2cd73e9 GIT binary patch literal 35786 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 | Show all known callees | +| ~SPC m h m~ | Show all usages of a macro | +| ~SPC m h r~ | Show references to global variable | +| ~SPC m h s~ | Show all methods specialized on a class | + +*** Evaluation + +| Key Binding | Description | +|-------------+---------------------------------| +| ~SPC m e b~ | Evaluate buffer | +| ~SPC m e e~ | Evaluate last expression | +| ~SPC m e f~ | Evaluate top level s-expression | +| ~SPC m e F~ | Undefine the function at point | +| ~SPC m e r~ | Evaluate region | + +*** REPL + +| Key Binding | Description | +|-------------+----------------------------------| +| ~SPC m s i~ | Start an inferior process | +| ~SPC m s e~ | Evaluate last expression in REPL | +| ~SPC m s q~ | Quit | + +*** Compile + +| Key Binding | Description | +|-------------+--------------------------| +| ~SPC m c c~ | Compile file | +| ~SPC m c C~ | Compile file and load it | +| ~SPC m c l~ | Load file | +| ~SPC m c n~ | Remove compilation notes | +| ~SPC m c f~ | Compile function | +| ~SPC m c r~ | Compile region | + +*** Navigation + +| Key Binding | Description | +|---------------------------+--------------------| +| ~SPC m g g~ | Inspect definition | +| ~SPC m g b~ | Go back | +| ~SPC m g n~ | Next note | +| ~SPC m g N~ or ~SPC m g p | Previous note | + +*** Macroexpansion + +| Key Binding | Description | +|-------------+-----------------------------------------------| +| ~SPC m m a~ | Macroexpand the expression at point completly | +| ~SPC m m o~ | Macroexpand the expression at point once | diff --git a/layers/+lang/common-lisp/config.el b/layers/+lang/common-lisp/config.el new file mode 100644 index 0000000..1bb0a5b --- /dev/null +++ b/layers/+lang/common-lisp/config.el @@ -0,0 +1,13 @@ +;;; config.el --- common-lisp Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|define-jump-handlers lisp-mode slime-inspect-definition) +(spacemacs|define-jump-handlers common-lisp-mode) diff --git a/layers/+lang/common-lisp/funcs.el b/layers/+lang/common-lisp/funcs.el new file mode 100644 index 0000000..5027c02 --- /dev/null +++ b/layers/+lang/common-lisp/funcs.el @@ -0,0 +1,25 @@ +;;; funcs.el --- Slime Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; Helm integration + +(defun spacemacs//slime-helm-source (&optional table) + (or table (setq table slime-lisp-implementations)) + `((name . "Slime") + (candidates . ,(mapcar #'car table)) + (action . (lambda (candidate) + (car (helm-marked-candidates)))))) + +(defun spacemacs/helm-slime () + (interactive) + (let ((command (helm :sources (spacemacs//slime-helm-source)))) + (and command (slime (intern command))))) diff --git a/layers/+lang/common-lisp/img/slime.png b/layers/+lang/common-lisp/img/slime.png new file mode 100644 index 0000000000000000000000000000000000000000..dc430816719ab059f916f90317820774f0beb902 GIT binary patch literal 17538 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 jr}qS12l{n-PtgAl +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq common-lisp-packages + '(auto-highlight-symbol + (common-lisp-snippets :toggle (configuration-layer/package-usedp 'yasnippet)) + ggtags + helm + helm-gtags + slime + slime-company)) + +(defun common-lisp/post-init-auto-highlight-symbol () + (with-eval-after-load 'auto-highlight-symbol + (add-to-list 'ahs-plugin-bod-modes 'lisp-mode))) + +(defun common-lisp/init-common-lisp-snippets ()) + +(defun common-lisp/post-init-helm () + (spacemacs/set-leader-keys-for-major-mode 'lisp-mode + "sI" 'spacemacs/helm-slime)) + +(defun common-lisp/post-init-ggtags () + (add-hook 'common-lisp-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun common-lisp/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'common-lisp-mode)) + +(defun common-lisp/init-slime-company () + (setq slime-company-completion 'fuzzy)) + +(defun common-lisp/init-slime () + (use-package slime + :commands slime-mode + :init + (progn + (spacemacs/register-repl 'slime 'slime) + (setq slime-contribs '(slime-fancy + slime-indentation + slime-sbcl-exts + slime-scratch) + inferior-lisp-program "sbcl") + (when (configuration-layer/package-usedp 'slime-company) + (push 'slime-company slime-contribs)) + ;; enable fuzzy matching in code buffer and SLIME REPL + (setq slime-complete-symbol*-fancy t) + (setq slime-complete-symbol-function 'slime-fuzzy-complete-symbol) + ;; enabel smartparen in code buffer and SLIME REPL + ;; (add-hook 'slime-repl-mode-hook #'smartparens-strict-mode) + (defun slime/disable-smartparens () + (smartparens-strict-mode -1) + (turn-off-smartparens-mode)) + (add-hook 'slime-repl-mode-hook #'slime/disable-smartparens) + (spacemacs/add-to-hooks 'slime-mode '(lisp-mode-hook))) + :config + (progn + (slime-setup) + ;; TODO: Add bindings for the SLIME debugger? + (spacemacs/set-leader-keys-for-major-mode 'lisp-mode + "'" 'slime + + "cc" 'slime-compile-file + "cC" 'slime-compile-and-load-file + "cl" 'slime-load-file + "cf" 'slime-compile-defun + "cr" 'slime-compile-region + "cn" 'slime-remove-notes + + "eb" 'slime-eval-buffer + "ef" 'slime-eval-defun + "eF" 'slime-undefine-function + "ee" 'slime-eval-last-expression + "er" 'slime-eval-region + + "gb" 'slime-pop-find-definition-stack + "gn" 'slime-next-note + "gN" 'slime-previous-note + + "ha" 'slime-apropos + "hA" 'slime-apropos-all + "hd" 'slime-disassemble-symbol + "hh" 'slime-describe-symbol + "hH" 'slime-hyperspec-lookup + "hp" 'slime-apropos-package + "ht" 'slime-toggle-trace-fdefinition + "hT" 'slime-untrace-all + "h<" 'slime-who-calls + "h>" 'slime-calls-who + ;; TODO: Add key bindings for who binds/sets globals? + "hr" 'slime-who-references + "hm" 'slime-who-macroexpands + "hs" 'slime-who-specializes + + "ma" 'slime-macroexpand-all + "mo" 'slime-macroexpand-1 + + "se" 'slime-eval-last-expression-in-repl + "si" 'slime + "sq" 'slime-quit-lisp + + "tf" 'slime-toggle-fancy-trace) + ;; prefix names for which-key + (mapc (lambda (x) + (spacemacs/declare-prefix-for-mode 'lisp-mode (car x) (cdr x))) + '(("mh" . "help") + ("me" . "eval") + ("ms" . "repl") + ("mc" . "compile") + ("mg" . "nav") + ("mm" . "macro") + ("mt" . "toggle")))))) diff --git a/layers/+lang/csharp/README.org b/layers/+lang/csharp/README.org new file mode 100644 index 0000000..26212e8 --- /dev/null +++ b/layers/+lang/csharp/README.org @@ -0,0 +1,146 @@ +#+TITLE: C# layer + +[[file:img/csharp.png]] [[file:img/dotnet.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#packages-included][Packages Included]] + - [[#install][Install]] + - [[#prerequisites][Prerequisites]] + - [[#aspnet-5][ASP.NET 5]] + - [[#curl][curl]] + - [[#omnisharp-server][Omnisharp server]] + - [[#caveats][Caveats]] + - [[#key-bindings][Key Bindings]] + - [[#compilation][Compilation]] + - [[#filesolutionproject-manipulation][File/Solution/Project manipulation]] + - [[#navigation][Navigation]] + - [[#helpers-documentation-info][Helpers (documentation, info)]] + - [[#refactoring][Refactoring]] + - [[#omnisharp-server-interaction][OmniSharp server interaction]] + - [[#tests][Tests]] + - [[#code-manipulation][Code manipulation]] + +* Description +This layer adds experimental support for C# language using [[https://github.com/OmniSharp/omnisharp-emacs][OmniSharp]]. + +* Packages Included +- [[https://github.com/OmniSharp/omnisharp-emacs][OmniSharp-emacs]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =csharp= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Prerequisites +*** ASP.NET 5 +Follow the instructions for your platform [[https://github.com/aspnet/home#getting-started][here]]. + +*** curl +You'll need [[http://curl.haxx.se/][curl]] to be able to use the Omnisharp package. Use your favorite +package manager to install it (on Windows you can use [[https://chocolatey.org/][chocolatey]]). + +Be sure to make the =curl= binary available to your PATH environment variable, +or set the variable =omnisharp--curl-executable-path= in your dotfile function +=dotspacemacs-config=: + +#+BEGIN_SRC emacs-lisp + (setq-default omnisharp--curl-executable-path "/PATH/TO/CURL/curl") +#+END_SRC + +*** Omnisharp server +You have to compile the OmniSharp server following the instructions which can +be found [[https://github.com/OmniSharp/omnisharp-server][here]]. + +Don't forget to add the server binary directory to your system PATH environment +variable. The full path the binary can also be directly referenced in the +variable =omnisharp-server-executable-path= (put this in your +=dotspacemacs-config= function): + +#+BEGIN_SRC emacs-lisp + (setq-default omnisharp-server-executable-path "/PATH/TO/OMNISHARP/OmniSharpServer") +#+END_SRC + +OmniSharp should now automatically load and start a server when you open a +=.cs= file. + +* Caveats +- It's currently not possible to create a C# solution outside of an IDE such as + [[http://www.monodevelop.com/][MonoDevelop]], it's therefore recommended that you install it to create your + solutions. + +- Debugging is possible using [[https://github.com/mono/sdb][SDB]]. + +* Key Bindings +** Compilation + +| Key Binding | Description | +|-------------+--------------------| +| ~SPC m c c~ | Build the solution | + +** File/Solution/Project manipulation + +| Key Binding | Description | +|-------------+-----------------------------------------------| +| ~SPC m f a~ | Add the current file to solution | +| ~SPC m f A~ | Add files selected in dired to solution | +| ~SPC m f r~ | Remove the current file from solution | +| ~SPC m f R~ | Removed files selected in dired from solution | +| ~SPC m p l~ | Add reference to solution | + +** Navigation + +| Key Binding | Description | +|-------------+-----------------------------------------------| +| ~SPC m g f~ | Go to solution file | +| ~SPC m g F~ | Go to solution file then member | +| ~SPC m g c~ | Go to member in current file | +| ~SPC m g g~ | Go to definition | +| ~SPC m g G~ | Go to definition in other window | +| ~SPC m g i~ | Find implementations | +| ~SPC m g I~ | Find implementations using ido | +| ~SPC m g m~ | Go to solution member | +| ~SPC m g M~ | Go to solution member in other window | +| ~SPC m g r~ | Go to region | +| ~SPC m g s~ | Find symbols using Helm | +| ~SPC m g u~ | Find usages of symbol under cursor using Helm | +| ~SPC m g U~ | Find usages of symbol under cursor using ido | + +** Helpers (documentation, info) + +| Key Binding | Description | +|-------------+------------------------------------------------------------------------| +| ~SPC m h t~ | Get type information for symbol under cursor | +| ~SPC m h T~ | Get type information for symbol under cursor and put it into kill-ring | + +** Refactoring + +| Key Binding | Description | +|-------------+------------------------------------------| +| ~SPC m r m~ | Rename symbol under cursor | +| ~SPC m r M~ | Rename symbol under cursor interactively | +| ~SPC m r r~ | Refactor symbol under cursor | + +** OmniSharp server interaction + +| Key Binding | Description | +|-------------+----------------------------| +| ~SPC m s r~ | Reload the solution | +| ~SPC m s s~ | Start the OmniSharp server | +| ~SPC m s S~ | Stop the OmniSharp server | + +** Tests + +| Key Binding | Description | +|-------------+---------------------------------------| +| ~SPC m t a~ | Run all tests in project | +| ~SPC m t b~ | Run all tests in current file/fixture | +| ~SPC m t t~ | Run test under cursor | + +** Code manipulation + +| Key Binding | Description | +|-------------+---------------------------| +| ~SPC m o~ | Auto complete overrides | +| ~SPC m i~ | Fix usings/imports | +| ~SPC m =~ | Format the current buffer | diff --git a/layers/+lang/csharp/config.el b/layers/+lang/csharp/config.el new file mode 100644 index 0000000..b6b974f --- /dev/null +++ b/layers/+lang/csharp/config.el @@ -0,0 +1,16 @@ +;;; packages.el --- C# Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|defvar-company-backends csharp-mode) + +(spacemacs|define-jump-handlers csharp-mode) diff --git a/layers/+lang/csharp/img/csharp.png b/layers/+lang/csharp/img/csharp.png new file mode 100644 index 0000000000000000000000000000000000000000..4694ededd5daca1c6d067cb36ddde18af3e72584 GIT binary patch literal 37705 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq csharp-packages + '( + company + csharp-mode + evil-matchit + ggtags + helm-gtags + omnisharp + )) + +(defun csharp/init-omnisharp () + ;; Load omnisharp-mode with csharp-mode, this should start the omnisharp server automatically + (add-hook 'csharp-mode-hook 'omnisharp-mode) + (use-package omnisharp + :defer t + :init + (progn + (when (configuration-layer/package-usedp 'company) + ;; needed to avoid an error when fetching doc using company + ;; Note: if you are using a roslyn based omnisharp server you can + ;; set back this variable to t. + (setq omnisharp-auto-complete-want-documentation nil)) + (push 'company-omnisharp company-backends-csharp-mode) + (add-to-list 'spacemacs-jump-handlers-csharp-mode + 'omnisharp-go-to-definition)) + :config + (progn + (spacemacs/declare-prefix-for-mode 'csharp-mode "mc" "csharp/compile") + (spacemacs/declare-prefix-for-mode 'csharp-mode "mf" "csharp/file") + (spacemacs/declare-prefix-for-mode 'csharp-mode "mg" "csharp/navigation") + (spacemacs/declare-prefix-for-mode 'csharp-mode "mh" "csharp/documentation") + (spacemacs/declare-prefix-for-mode 'csharp-mode "mr" "csharp/refactoring") + (spacemacs/declare-prefix-for-mode 'csharp-mode "ms" "csharp/server") + (spacemacs/declare-prefix-for-mode 'csharp-mode "mt" "csharp/tests") + (spacemacs/set-leader-keys-for-major-mode 'csharp-mode + ;; Compile + "cc" 'omnisharp-build-in-emacs ;; Only one compile command so use top-level + ;; Solution/project manipulation + "fa" 'omnisharp-add-to-solution-current-file + "fA" 'omnisharp-add-to-solution-dired-selected-files + "fr" 'omnisharp-remove-from-project-current-file + "fR" 'omnisharp-remove-from-project-dired-selected-files + "pl" 'omnisharp-add-reference + ;; Navigation + "gG" 'omnisharp-go-to-definition-other-window + "gu" 'omnisharp-helm-find-usages + "gU" 'omnisharp-find-usages-with-ido + "gs" 'omnisharp-helm-find-symbols + "gi" 'omnisharp-find-implementations + "gI" 'omnisharp-find-implementations-with-ido + "gr" 'omnisharp-navigate-to-region + "gm" 'omnisharp-navigate-to-solution-member + "gM" 'omnisharp-navigate-to-solution-member-other-window + "gf" 'omnisharp-navigate-to-solution-file + "gF" 'omnisharp-navigate-to-solution-file-then-file-member + "gc" 'omnisharp-navigate-to-current-file-member + ;; Help, documentation, info + "ht" 'omnisharp-current-type-information + "hT" 'omnisharp-current-type-information-to-kill-ring + ;; Refactoring + "rm" 'omnisharp-rename + "rM" 'omnisharp-rename-interactively + "rr" 'omnisharp-run-code-action-refactoring + ;; Server manipulation, inspired spacemacs REPL bindings since C# does not provice a REPL + "ss" 'omnisharp-start-omnisharp-server + "sS" 'omnisharp-stop-server + "sr" 'omnisharp-reload-solution + ;; Tests + "ta" 'omnisharp-unit-test-all + "tb" 'omnisharp-unit-test-fixture + "tt" 'omnisharp-unit-test-single + ;; Code manipulation + "u" 'omnisharp-auto-complete-overrides + "i" 'omnisharp-fix-usings + "=" 'omnisharp-code-format)))) + +(defun csharp/post-init-company () + (spacemacs|add-company-hook csharp-mode)) + +(defun csharp/init-csharp-mode () + (use-package csharp-mode + :defer t)) + +(defun csharp/post-init-evil-matchit () + (with-eval-after-load 'evil-matchit + (plist-put evilmi-plugins 'csharp-mode '((evilmi-simple-get-tag evilmi-simple-jump) + (evilmi-c-get-tag evilmi-c-jump)))) + (add-hook 'csharp-mode-hook 'turn-on-evil-matchit-mode)) + +(defun csharp/post-init-ggtags () + (add-hook 'csharp-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun csharp/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'csharp-mode)) diff --git a/layers/+lang/csv/README.org b/layers/+lang/csv/README.org new file mode 100644 index 0000000..eb6ef11 --- /dev/null +++ b/layers/+lang/csv/README.org @@ -0,0 +1,41 @@ +#+TITLE: CSV layer + +[[file:img/csv.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#key-bindings][Key Bindings]] + +* Description + +This layer adds tools for better integration of CSV files in Spacemacs. + +* Install + +** Layer + +To use this contribution add it to your =~/.spacemacs= + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '(csv)) +#+END_SRC + +* Key Bindings + +| Key Binding | Description | +|-------------+----------------------------------| +| ~SPC m a~ | Align fields | +| ~SPC m d~ | Kill fields | +| ~SPC m i~ | Toggle delimiter invisibility | +| ~SPC m n~ | Move forward 1 field | +| ~SPC m p~ | Move backwards 1 field | +| ~SPC m r~ | Reverse region | +| ~SPC m s f~ | Sort fields | +| ~SPC m s n~ | Sort fields numerically | +| ~SPC m s o~ | Toggle sort order | +| ~SPC m t~ | Transpose | +| ~SPC m v f~ | Paste killed fields | +| ~SPC m v t~ | Paste killed fields as new table | +| ~SPC m u~ | Unalign fields | diff --git a/layers/+lang/csv/img/csv.png b/layers/+lang/csv/img/csv.png new file mode 100644 index 0000000000000000000000000000000000000000..b45884b1f3569f999946a64dcee284a24762566d GIT binary patch literal 67077 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq csv-packages '(csv-mode)) + +(defun csv/init-csv-mode () + (use-package csv-mode + :defer t + :init + (progn + (spacemacs/declare-prefix-for-mode 'csv-mode "ms" "sort") + (spacemacs/declare-prefix-for-mode 'csv-mode "mv" "yank") + (spacemacs/set-leader-keys-for-major-mode 'csv-mode + "a" 'csv-align-fields + "d" 'csv-kill-fields + "i" 'csv-toggle-invisibility + "n" 'csv-forward-field + "p" 'csv-backward-field + "r" 'csv-reverse-region + "sf" 'csv-sort-fields + "sn" 'csv-sort-numeric-fields + "so" 'csv-toggle-descending + "t" 'csv-transpose + "u" 'csv-unalign-fields + "vf" 'csv-yank-fields + "vt" 'csv-yank-as-new-table)))) diff --git a/layers/+lang/d/README.org b/layers/+lang/d/README.org new file mode 100644 index 0000000..8d514af --- /dev/null +++ b/layers/+lang/d/README.org @@ -0,0 +1,32 @@ +#+TITLE: D language layer + +[[file:img/dlogo.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + +* Description +This simple layer adds support for the [[http://dlang.org/][D language]]. +It adds =d-mode= as well as integrating it with =auto-completion= and =syntax-checking=. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =d= to the existing =dotspacemacs-configuration-layers= list in this +file. + +To enable smart D completion, you need to install [[https://github.com/Hackerpilot/DCD][DCD]]. Here are [[https://github.com/Hackerpilot/DCD#setup][installation +instructions]]. After successfully built DCD, you need to copy the binary +=dcd-server= and =dcd-client= in =bin/= directory to somewhere in your $PATH e.g. +=/usr/local/bin= on Linux. + +* Key bindings + +| Key Binding | Description | +|-------------+-------------------------------------------------------| +| ~SPC m g g~ | Go to definition | +| ~SPC m g b~ | Jump back (after go to definition with above command) | +| ~SPC m g r~ | find references to all symbol at point | +|-------------+-------------------------------------------------------| + diff --git a/layers/+lang/d/config.el b/layers/+lang/d/config.el new file mode 100644 index 0000000..d92def0 --- /dev/null +++ b/layers/+lang/d/config.el @@ -0,0 +1,16 @@ +;;; config.el --- d Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(spacemacs|defvar-company-backends d-mode) + +(spacemacs|define-jump-handlers d-mode) diff --git a/layers/+lang/d/img/dlogo.png b/layers/+lang/d/img/dlogo.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e4a53034121ec8abcae994fee32905c1ba15df GIT binary patch literal 8154 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 Ae*gdg literal 0 HcmV?d00001 diff --git a/layers/+lang/d/packages.el b/layers/+lang/d/packages.el new file mode 100644 index 0000000..1a38df7 --- /dev/null +++ b/layers/+lang/d/packages.el @@ -0,0 +1,57 @@ +;;; packages.el --- d Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; List of all packages to install and/or initialize. Built-in packages +;; which require an initialization must be listed explicitly in the list. +(setq d-packages + '( + company + (company-dcd :toggle (configuration-layer/package-usedp 'company)) + d-mode + flycheck + (flycheck-dmd-dub :toggle (configuration-layer/package-usedp 'flycheck)) + ggtags + helm-gtags + )) + +(defun d/post-init-company () + ;; Need to convince company that this C-derived mode is a code mode. + (with-eval-after-load 'company-dabbrev-code (push 'd-mode company-dabbrev-code-modes)) + (spacemacs|add-company-hook d-mode)) + +(defun d/init-company-dcd () + (use-package company-dcd + :defer t + :init + (progn + (add-hook 'd-mode-hook 'company-dcd-mode) + (push 'company-dcd company-backends-d-mode) + (spacemacs/set-leader-keys-for-major-mode 'd-mode + "gg" 'company-dcd-goto-definition + "gb" 'company-dcd-goto-def-pop-marker + "hh" 'company-dcd-show-ddoc-with-buffer + "gr" 'company-dcd-ivy-search-symbol)))) + +(defun d/init-d-mode () + (use-package d-mode :defer t)) + +(defun d/post-init-flycheck () + (spacemacs/add-flycheck-hook 'd-mode)) + +(defun d/init-flycheck-dmd-dub () + (use-package flycheck-dmd-dub :defer t + :init (add-hook 'd-mode-hook 'flycheck-dmd-dub-set-include-path))) + +(defun d/post-init-ggtags () + (add-hook 'd-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun d/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'd-mode)) diff --git a/layers/+lang/elixir/README.org b/layers/+lang/elixir/README.org new file mode 100644 index 0000000..095d52b --- /dev/null +++ b/layers/+lang/elixir/README.org @@ -0,0 +1,187 @@ +#+TITLE: Elixir layer + +[[file:img/elixir.png]] with [[file:img/alchemist.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#configuration][Configuration]] + - [[#flycheck][Flycheck]] + - [[#credo][Credo]] + - [[#mix-compile][mix compile]] + - [[#key-bindings][Key bindings]] + - [[#refcard][Refcard]] + - [[#help][Help]] + - [[#mix][Mix]] + - [[#project][Project]] + - [[#evaluation-in-place][Evaluation in place]] + - [[#repl-interactions][REPL interactions]] + - [[#tests][Tests]] + - [[#compile][Compile]] + - [[#execute][Execute]] + - [[#code-definition-jump][Code Definition Jump]] + +* Description +This layer adds support for [[http://elixir-lang.org/][Elixir]] . + +[[https://github.com/tonini/alchemist.el][Alchemist]] brings the Elixir tooling to Emacs and comes with a bunch of +features like: +- Powerful IEx integration +- Mix integration +- Compile & Execution of Elixir code +- Inline code evaluation +- Documentation lookup +- Definition lookup +- Smart code completion +- Elixir project management +- Integration with [[http://company-mode.github.io/][company-mode]] +- Flycheck support for mix compile +- Flycheck support for [[https://github.com/rrrene/credo][credo]] +- Flycheck support for test results + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =elixir= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Configuration +** Flycheck +*Note:* since flycheck checkers are slow, the checks are enabled only at save +time. + +*** Credo +A flycheck checker for [[https://github.com/rrrene/credo][credo]] is installed. The check needs both =bunt= and +=credo= to be available, you can install them like this: + +#+BEGIN_SRC shell +git clone https://github.com/rrrene/bunt +cd bunt +mix archive.build +mix archive.install +#+END_SRC + +#+BEGIN_SRC shell +git clone https://github.com/rrrene/credo +cd credo +mix deps.get +mix archive.build +mix archive.install +#+END_SRC + +*** mix compile +*Important:* +Elixir compiler is based on macros and can execute arbitrary during compilation. +Therefore Spacemacs disable flycheck compilation checker by default. + +To enable flycheck support for compilation errors *globally* the variable +=elixir-enable-compilation-checking= can be set explicitly to =t= in your +dotfile but it is not recommended to do so because of the limitation described +above. + +Instead you should use directory local variables in order to enable the flycheck +checker only for certain projects. Directory local variables are stored in a +file named =.dir-local.el= usually at the root of a project. To easily add a +directory local variable use the key binding ~SPC f v d~ then choose the +=elixir-mode= and the variable name =elixir-enable-compilation-checking= with +a value of t. The result is a new file =.dir-local.el= with the following +contents: + +#+BEGIN_SRC elisp +;;; Directory Local Variables +;;; For more information see (info "(emacs) Directory Variables") + +((elixir-mode + (elixir-enable-compilation-checking . t))) +#+END_SRC + +Spacemacs marks the variable =elixir-enable-compilation-checking= as safe so +Emacs won't ask you if the variable is safe whenever an elixir file is opened. + +Remember that you can verify the flycheck checkers status with ~SPC e v~. + +* Key bindings +** Refcard +You find and overview of all the key-bindings on the [[file:alchemist-refcard.pdf][Alchemist-Refcard]]. + +** Help + +| Key Binding | Description | +|-------------+-------------------------------------| +| ~SPC m h :~ | Run custom search for help | +| ~SPC m h h~ | Show help of the current expression | +| ~SPC m h H~ | Toggle through search history | +| ~SPC m h r~ | Show help for current region | + +** Mix + +| Key Binding | Description | +|-------------+------------------------------------------------------------| +| ~SPC m m :~ | Prompt for a =mix= command | +| ~SPC m m c~ | Compile the whole application | +| ~SPC m m h~ | Show help for a specific =mix= command | +| ~SPC m m x~ | Run the given expression in the Elixir application context | + +** Project + +| Key Binding | Description | +|-------------+------------------------------------------------------------| +| ~SPC m p t~ | Open project test directory and list all test files. | +| ~SPC m g t~ | Toggle between a file and its tests in the current window. | +| ~SPC m g T~ | Toggle between a file and its tests in other window. | + +** Evaluation in place + +| Key Binding | Description | +|-------------+-----------------------------------------| +| ~SPC m e b~ | Evaluate buffer | +| ~SPC m e B~ | Evaluate buffer and insert result | +| ~SPC m e l~ | Evaluate current line | +| ~SPC m e L~ | Evaluate current line and insert result | +| ~SPC m e r~ | Evaluate region | +| ~SPC m e R~ | Evaluate region and insert result | + +** REPL interactions + +| Key Binding | Description | +|-------------+-----------------------------------------------------------------| +| ~SPC m s c~ | Compiles the current buffer in the IEx process. | +| ~SPC m s i~ | Start an =iex= inferior process | +| ~SPC m s I~ | Start an IEx process with mix (=iex -S mix=) | +| ~SPC m s l~ | Send current line to REPL buffer | +| ~SPC m s L~ | Send current line to REPL buffer and focus it in =insert state= | +| ~SPC m s m~ | Reloads the module in the current buffer in your IEx process | +| ~SPC m s r~ | Send region to REPL buffer | +| ~SPC m s R~ | Send region to REPL buffer and focus it in =insert state= | + +** Tests + +| Key Binding | Description | +|-------------+---------------------------------------| +| ~SPC m g t~ | Open the test file for current buffer | +| ~SPC m t a~ | Run all the tests | +| ~SPC m t b~ | Run all the tests from current buffer | +| ~SPC m t r~ | Rerun the last test | +| ~SPC m t t~ | Run test under point | + +** Compile + +| Key Binding | Description | +|-------------+----------------------------------------------------| +| ~SPC m c :~ | Run a custom compile command with =elixirc= | +| ~SPC m c b~ | Compile the current buffer with elixirc. =elixirc= | +| ~SPC m c f~ | Compile the given filename with =elixirc= | + +** Execute + +| Key Binding | Description | +|-------------+--------------------------------------------| +| ~SPC m x :~ | Run a custom execute command with =elixir= | +| ~SPC m x b~ | Run the current buffer through =elixir= | +| ~SPC m x f~ | Run =elixir= with the given filename | + +** Code Definition Jump + +| Key Binding | Description | +|-------------+----------------------------------------------------| +| ~SPC m g g~ | Jump to the elixir expression definition at point. | +| ~SPC m ​,​~ | Pop back to where ~SPC m g g~ was last invoked. | diff --git a/layers/+lang/elixir/alchemist-refcard.pdf b/layers/+lang/elixir/alchemist-refcard.pdf new file mode 100644 index 0000000000000000000000000000000000000000..35338f67a5ee2759b59c6333f16ebc41cab646ad GIT binary patch literal 21290 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/elixir/alchemist-refcard.tex b/layers/+lang/elixir/alchemist-refcard.tex new file mode 100644 index 0000000..c4a8c5b --- /dev/null +++ b/layers/+lang/elixir/alchemist-refcard.tex @@ -0,0 +1,126 @@ +\documentclass[a4paper,8pt]{extarticle} + +\usepackage{textcomp} +\usepackage{fullpage} +\usepackage{boxedminipage} +\usepackage{multicol} +\usepackage[a4paper,left=0.8cm,right=0.8cm,top=1.5cm,bottom=2cm]{geometry} +\pagestyle{empty} + +\marginparwidth = 10pt + +\usepackage[T1]{fontenc} +\newcommand{\changefont}[3]{ +\fontfamily{#1} \fontseries{#2} \fontshape{#3} \selectfont} + +\newcommand{\docheading}{\Huge\centering{Alchemist Quick Reference Card [Spacemacs Version]}\normalsize\bigskip} +\newcommand{\helpgroup}[1]{\par\noindent\centering{\textbf{\large#1}\medskip}} +\newcommand{\helpkey}[2]{\par~~\noindent\textbf{#1}\hfill{#2}~~} +\newcommand{\group}[1]{\bigskip\par\noindent\textbf{\large#1}\bigskip} +\newcommand{\subgroup}[1]{\medskip\par\noindent\textbf{#1}\medskip} +\newcommand{\key}[2]{\par\noindent\textbf{#1}\hfill{#2}} +\newcommand{\meta}[1]{\textlangle{#1}\textrangle} + +\begin{document} + +\changefont{pag}{m}{n} + +\renewcommand{\baselinestretch}{1.2} + +\docheading + +\bigskip + +\begin{boxedminipage}[t]{11cm} + +\medskip + +\helpgroup{Getting help in Emacs} + +\helpkey{SPC h d f}{describe a function} +\helpkey{SPC h d v}{describe a variable} +\helpkey{SPC h d k}{describe a key} +\helpkey{SPC h d m}{describe current modes} +\helpkey{SPC h d p}{describe a package} +\helpkey{SPC h m}{search available man pages} + +\medskip + +\end{boxedminipage} + +\setlength{\bigskipamount}{1cm} + +\bigskip +\bigskip + +\setlength{\columnsep}{1cm} + +\begin{multicols}{2} + +\group{Mix} + +\key{SPC m m :}{alchemist-mix} +\key{SPC m t a}{alchemist-mix-test} +\key{SPC m m c}{alchemist-mix-compile} +\key{SPC m t f}{alchemist-mix-test-file} +\key{SPC m t b}{alchemist-mix-test-this-buffer} +\key{SPC m t t}{alchemist-mix-test-at-point} + +\group{Compilation} + +\key{SPC m c :}{alchemist-compile} +\key{SPC m c f}{alchemist-compile-file} +\key{SPC m c b}{alchemist-compile-this-buffer} + +\group{Execution} + +\key{SPC m x :}{alchemist-execute} +\key{SPC m x f}{alchemist-execute-file} +\key{SPC m x b}{alchemist-execute-this-buffer} + +\group{IEx} + +\key{SPC m s i}{alchemist-iex-run} +\key{SPC m s I}{alchemist-iex-project-run} +\key{SPC m s l}{alchemist-iex-send-current-line} +\key{SPC m s L}{alchemist-iex-send-current-line-and-go} +\key{SPC m s r}{alchemist-iex-send-region} +\key{SPC m s R}{alchemist-iex-send-region-and-go} +\key{SPC m s c}{alchemist-iex-compile-this-buffer} + +\group{Documentation Lookup} + +\key{SPC m h :}{alchemist-help} +\key{SPC m h H}{alchemist-help-history} +\key{SPC m h h}{alchemist-help-search-at-point} +\key{SPC m h r}{alchemist-help-search-marked-region} + +\group{Project} + +\key{SPC m p t}{alchemist-project-find-test} +\key{SPC m g t}{alchemist-project-toggle-file-and-tests} +\key{SPC m g T}{alchemist-project-toggle-file-and-tests-other-window} + +\group{Eval} + +\key{SPC m e l}{alchemist-eval-current-line} +\key{SPC m e L}{alchemist-eval-print-current-line} +\key{SPC m e j}{alchemist-eval-quoted-current-line} +\key{SPC m e J}{alchemist-eval-print-quoted-current-line} +\key{SPC m e r}{alchemist-eval-region} +\key{SPC m e R}{alchemist-eval-print-region} +\key{SPC m e u}{alchemist-eval-quoted-region} +\key{SPC m e U}{alchemist-eval-print-quoted-region} +\key{SPC m e b}{alchemist-eval-buffer} +\key{SPC m e B}{alchemist-eval-print-buffer} +\key{SPC m e v}{alchemist-eval-quoted-buffer} +\key{SPC m e V}{alchemist-eval-print-quoted-buffer} + +\group{Definition Lookup} + +\key{SPC m g g}{alchemist-goto-definition-at-point} +\key{SPC m ,}{alchemist-goto-jump-back} + +\end{multicols} + +\end{document} diff --git a/layers/+lang/elixir/config.el b/layers/+lang/elixir/config.el new file mode 100644 index 0000000..a109c1a --- /dev/null +++ b/layers/+lang/elixir/config.el @@ -0,0 +1,23 @@ +;;; config.el --- Elixir Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar elixir-enable-compilation-checking nil + "If non-nil syntax checking is enable for compilation. +Default is nil because Elixir compilation is based on macros and thus it +is unsafe. Activate this option only for trusted code, usage of a +directory variable is recommended.") + +(spacemacs|defvar-company-backends elixir-mode) +(spacemacs|defvar-company-backends alchemist-iex-mode) + +(spacemacs|define-jump-handlers elixir-mode) diff --git a/layers/+lang/elixir/funcs.el b/layers/+lang/elixir/funcs.el new file mode 100644 index 0000000..979e070 --- /dev/null +++ b/layers/+lang/elixir/funcs.el @@ -0,0 +1,21 @@ +;;; funcs.el --- Elixir Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs//elixir-do-end-close-action (id action context) + (when (eq action 'insert) + (newline-and-indent) + (forward-line -1) + (indent-according-to-mode))) + +(defun spacemacs//elixir-enable-compilation-checking () + "Enable compile checking if `elixir-enable-compilation-checking' is non nil." + (when (or elixir-enable-compilation-checking) + (flycheck-mix-setup))) diff --git a/layers/+lang/elixir/img/alchemist.png b/layers/+lang/elixir/img/alchemist.png new file mode 100644 index 0000000000000000000000000000000000000000..46d9d0d9efe5fc60b35df433c68572a1394ccee5 GIT binary patch literal 8057 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/elixir/img/elixir.png b/layers/+lang/elixir/img/elixir.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc895cfea979c7d7fcdbf15660ee4c3e30233dd GIT binary patch literal 9282 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq elixir-packages + '( + alchemist + company + elixir-mode + flycheck + flycheck-mix + ggtags + helm-gtags + ob-elixir + popwin + smartparens + )) + +(defun elixir/post-init-company () + (spacemacs|add-company-hook elixir-mode) + (spacemacs|add-company-hook alchemist-iex-mode)) + +(defun elixir/init-alchemist () + (use-package alchemist + :defer t + :init + (progn + (spacemacs/register-repl 'alchemist 'alchemist-iex-run "alchemist") + (add-hook 'elixir-mode-hook 'alchemist-mode) + (setq alchemist-project-compile-when-needed t + alchemist-test-status-modeline nil) + ;; setup company backends + (push 'alchemist-company company-backends-elixir-mode) + (push 'alchemist-company company-backends-alchemist-iex-mode) + (add-to-list 'spacemacs-jump-handlers-elixir-mode + 'alchemist-goto-definition-at-point)) + :config + (spacemacs/declare-prefix-for-mode 'elixir-mode "mc" "compile") + (spacemacs/declare-prefix-for-mode 'elixir-mode "me" "eval") + (spacemacs/declare-prefix-for-mode 'elixir-mode "mp" "project") + (spacemacs/declare-prefix-for-mode 'elixir-mode "mh" "help") + (spacemacs/declare-prefix-for-mode 'elixir-mode "mt" "test") + (spacemacs/declare-prefix-for-mode 'elixir-mode "ms" "iex") + (spacemacs/declare-prefix-for-mode 'elixir-mode "mm" "mix") + (spacemacs/declare-prefix-for-mode 'elixir-mode "mx" "execute") + (spacemacs/declare-prefix-for-mode 'elixir-mode "mg" "goto") + (spacemacs/set-leader-keys-for-major-mode 'elixir-mode + "el" 'alchemist-eval-current-line + "eL" 'alchemist-eval-print-current-line + "er" 'alchemist-eval-region + "eR" 'alchemist-eval-print-region + "eb" 'alchemist-eval-buffer + "eB" 'alchemist-eval-print-buffer + "ej" 'alchemist-eval-quoted-current-line + "eJ" 'alchemist-eval-print-quoted-current-line + "eu" 'alchemist-eval-quoted-region + "eU" 'alchemist-eval-print-quoted-region + "ev" 'alchemist-eval-quoted-buffer + "eV" 'alchemist-eval-print-quoted-buffer + + "pt" 'alchemist-project-find-test + "gt" 'alchemist-project-toggle-file-and-tests + "gT" 'alchemist-project-toggle-file-and-tests-other-window + + "h:" 'alchemist-help + "hH" 'alchemist-help-history + "hh" 'alchemist-help-search-at-point + "hr" 'alchemist-help-search-marked-region + + "m:" 'alchemist-mix + "mc" 'alchemist-mix-compile + "mx" 'alchemist-mix-run + "mh" 'alchemist-mix-help + + "'" 'alchemist-iex-run + "sc" 'alchemist-iex-compile-this-buffer + "si" 'alchemist-iex-run + "sI" 'alchemist-iex-project-run + "sl" 'alchemist-iex-send-current-line + "sL" 'alchemist-iex-send-current-line-and-go + "sm" 'alchemist-iex-reload-module + "sr" 'alchemist-iex-send-region + "sR" 'alchemist-iex-send-region-and-go + + "ta" 'alchemist-mix-test + "tb" 'alchemist-mix-test-this-buffer + "tt" 'alchemist-mix-test-at-point + "tf" 'alchemist-test-file + "tn" 'alchemist-test-jump-to-next-test + "tp" 'alchemist-test-jump-to-previous-test + "tr" 'alchemist-mix-rerun-last-test + + "xb" 'alchemist-execute-this-buffer + "xf" 'alchemist-execute-file + "x:" 'alchemist-execute + + "cb" 'alchemist-compile-this-buffer + "cf" 'alchemist-compile-file + "c:" 'alchemist-compile + + "," 'alchemist-goto-jump-back) + + (dolist (mode (list alchemist-compile-mode-map + alchemist-eval-mode-map + alchemist-execute-mode-map + alchemist-message-mode-map + alchemist-help-minor-mode-map + alchemist-mix-mode-map + alchemist-macroexpand-mode-map + alchemist-refcard-mode-map + alchemist-test-report-mode-map)) + (evil-define-key 'normal mode + (kbd "q") 'quit-window)))) + +(defun elixir/init-flycheck-mix () + (use-package flycheck-mix + :commands (flycheck-mix-setup) + :init + (progn + (add-to-list 'safe-local-variable-values + (cons 'elixir-enable-compilation-checking nil)) + (add-to-list 'safe-local-variable-values + (cons 'elixir-enable-compilation-checking t)) + (add-hook 'elixir-mode-local-vars-hook + 'spacemacs//elixir-enable-compilation-checking)))) + +(defun elixir/init-elixir-mode () + (use-package elixir-mode + :defer t)) + +(defun elixir/post-init-flycheck () + (spacemacs/add-flycheck-hook 'elixir-mode)) + +(defun elixir/pre-init-org () + (spacemacs|use-package-add-hook org + :post-config (add-to-list 'org-babel-load-languages '(elixir . t)))) + +(defun elixir/init-ob-elixir () + (spacemacs|use-package-add-hook org + :post-config + (use-package ob-elixir + :init (add-to-list 'org-babel-load-languages '(elixir . t))))) + + +(defun elixir/pre-init-popwin () + (spacemacs|use-package-add-hook popwin + :post-config + (push '("*mix*" :tail t :noselect t) popwin:special-display-config))) + +(defun elixir/pre-init-smartparens () + (spacemacs|use-package-add-hook smartparens + :post-config + (progn + (sp-with-modes '(elixir-mode) + (sp-local-pair + "->" "end" + :when '(("RET")) + :post-handlers '(:add spacemacs//elixir-do-end-close-action) + :actions '(insert))) + (sp-with-modes '(elixir-mode) + (sp-local-pair + "do" "end" + :when '(("SPC" "RET")) + :post-handlers '(:add spacemacs//elixir-do-end-close-action) + :actions '(insert)))))) + +(defun elixir/post-init-ggtags () + (add-hook 'elixir-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun elixir/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'elixir-mode)) diff --git a/layers/+lang/elm/README.org b/layers/+lang/elm/README.org new file mode 100644 index 0000000..8dd6396 --- /dev/null +++ b/layers/+lang/elm/README.org @@ -0,0 +1,208 @@ +#+TITLE: Elm layer + +[[file:img/elm.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#elm-platform][Elm Platform]] + - [[#os-x-and-windows-installers][OS X and Windows installers]] + - [[#universal-installer-using-npm][Universal installer using npm]] + - [[#source-code][Source code]] + - [[#elm-oracle][elm-oracle]] + - [[#elm-format][elm-format]] + - [[#basic-usage-tips][Basic usage tips]] + - [[#compilation][Compilation]] + - [[#reactor][Reactor]] + - [[#sort-imports-on-save][Sort imports on save]] + - [[#key-bindings][Key bindings]] + - [[#elm-make][elm-make]] + - [[#elm-repl][elm-repl]] + - [[#elm-reactor][elm-reactor]] + - [[#elm-package][elm-package]] + - [[#package-list-buffer][package list buffer]] + - [[#elm-oracle-1][elm-oracle]] + - [[#elm-format-1][elm-format]] + - [[#refactoring][Refactoring]] + +* Description +This layer adds support for [[http://elm-lang.org][Elm]]. + +It relies on [[https://github.com/jcollard/elm-mode][elm-mode]] and [[https://github.com/bsermons/flycheck-elm][flycheck-elm]] to provide the following features: +- Syntax highlighting. +- Intelligent indentation +- Auto-completion integration for company (default) or auto-complete modes, + with using elm-oracle +- Syntax checking support using flycheck +- Integration with elm-make +- Integration with elm-repl +- Integration with elm-reactor +- Integration with elm-package + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =elm= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Elm Platform +The ~elm-platform~ is a bundle of tools, including the ~elm-compiler~, +~elm-make~, ~elm-reactor~, ~elm-repl~ and ~elm-package~. + +Depending on the method of installation, the ~elm-mode~ package would need to be +able to access commands such as ~elm-reactor~ or ~elm-make~. + +*** OS X and Windows installers +Official installers for these operating systems are available from: +[[http://elm-lang.org/install][http://elm-lang.org/install]] + +*** Universal installer using npm +A npm based installer is available to, and provides pre-compiled binaries for +certain operating system and architectures. +#+BEGIN_SRC sh + npm install --global elm +#+END_SRC +Also, note that you might need to set the ~ELM_HOME~ environment variables to +the corresponding directory created by the installer. + +If you are facing problems with previewing a buffer with ~elm-reactor~ ensure +that the absolute path of the npm global bin file is on your path within emacs + +OS X Users facing problems with ~elm-reactor~ failing to properly install or +run, see this issue [[https://github.com/kevva/elm-bin/issues/28][https://github.com/kevva/elm-bin/issues/28]]. + +*** Source code +To build from source, see instructions here: +[[https://github.com/elm-lang/elm-platform][https://github.com/elm-lang/elm-platform]] + +** elm-oracle +~elm-oracle~ can be used to show type signatures and docs for tokens under the +cursor and provide support for auto-completion, but it is not part of the +standard elm-platform. + +Both the "company" and "auto-complete" backends are supported, but this layer +is configured with company. + +To install ~elm-oracle~, install ~node.js~ and ~npm~, then +run this command: + +#+BEGIN_SRC sh + npm install -g elm-oracle +#+END_SRC + +** elm-format +~elm-format~ can be used to format elm code according to a standard set of +rules. + +To install ~elm-format~ follow the the instructions for the version of elm +installed: https://github.com/avh4/elm-format + +Also, note that if you use homebrew to install ~elm-format~ the installed exe +has a version suffix, the installed command name can be set in your +=~/spacemacs=: + +#+BEGIN_SRC emacs-lisp + (elm :variables + elm-format-command "elm-format-0.17") +#+END_SRC + +* Basic usage tips +** Compilation +To control the name of the compiled JavaScript file, use ~SPC m c B~ instead of +~SPC m c b~. This will overwrite the ~--output~ parameter of ~elm-make~ to +~[buffer-name].js~ instead of the default. + +** Reactor +~elm-reactor~ is an interactive development tool, used to develop and debug Elm +programs. It will automatically compile an Elm program, and run it in the +browser, with editor agnostic support for hot-swapping and time-travel +debugging. + +To preview ~Main.elm~, press ~C-c C-m~ (or ~SPC m R m~). +Alternatively, to preview from buffer, press ~C-u C-c C-n~ (or ~SPC m R +n~). To preview in debug mode, prefix with ~C-u~ (or ~SPC u~). + +By default, ~elm-reactor~ with launch with its own generated index.html. To use +a custom html, you'd need to load the debuger excplictly and use an http daemon +to serve your custom file. + +If needed, default values for host and port used by for the elm-reactor server +can be controlled by passing in these variables in your =~/.spacemacs=: + +#+BEGIN_SRC emacs-lisp + (elm :variables + elm-reactor-port "3000" ; default 8000 + elm-reactor-address "0.0.0.0") ; default 127.0.0.1 +#+END_SRC + +** Sort imports on save +Set ~elm-sort-imports-on-save~ to ~t~ to sort the imports in the current file on +every save. + +#+BEGIN_SRC emacs-lisp + (elm :variables elm-sort-imports-on-save t) +#+END_SRC + +* Key bindings +** elm-make + +| Key Binding | Description | +|-------------+----------------------------------------------| +| ~SPC m c b~ | elm-compile-buffer | +| ~SPC m c B~ | spacemacs/elm-compile-buffer-override-output | +| ~SPC m c m~ | elm-compile-main | + +** elm-repl + +| Key Binding | Description | +|-------------+------------------------------------------------------------| +| ~SPC m s i~ | elm-repl-load | +| ~SPC m s f~ | send current function to REPL | +| ~SPC m s F~ | send current function to REPL and focus it in insert state | +| ~SPC m s r~ | send current region to REPL | +| ~SPC m s R~ | send current region to REPL and focus it in insert state | + +** elm-reactor + +| Key Binding | Description | +|-------------+--------------------| +| ~SPC m R n~ | elm-preview-buffer | +| ~SPC m R m~ | elm-preview-main | + +** elm-package + +| Key Binding | Description | +|-------------+--------------------------| +| ~SPC m p i~ | elm-import | +| ~SPC m p c~ | elm-package-catalog | +| ~SPC m p d~ | elm-documentation-lookup | + +*** package list buffer + +| Key Binding | Description | +|-------------+---------------------| +| ~g~ | elm-package-refresh | +| ~v~ | elm-package-view | +| ~m~ | elm-package-mark | +| ~u~ | elm-package-unmark | +| ~x~ | elm-package-install | +| ~q~ | quit-window | + +** elm-oracle + +| Key Binding | Description | +|-------------+--------------------------| +| ~SPC m h h~ | elm-oracle-doc-at-point | +| ~SPC m h t~ | elm-oracle-type-at-point | + +** elm-format + +| Key Binding | Description | +| ~SPC m = b~ | elm-mode-format-buffer | + +** Refactoring + +| Key Binding | Description | +|-------------+------------------| +| ~SPC m r i~ | elm-sort-imports | diff --git a/layers/+lang/elm/config.el b/layers/+lang/elm/config.el new file mode 100644 index 0000000..f2ef182 --- /dev/null +++ b/layers/+lang/elm/config.el @@ -0,0 +1,12 @@ +;;; config.el --- elm Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|defvar-company-backends elm-mode) diff --git a/layers/+lang/elm/funcs.el b/layers/+lang/elm/funcs.el new file mode 100644 index 0000000..722a844 --- /dev/null +++ b/layers/+lang/elm/funcs.el @@ -0,0 +1,34 @@ +;;; funcs.el --- Elm Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; elm-mode + +(defun spacemacs//elm-find-root () + (setq default-directory (elm--find-dependency-file-path))) + +(defun spacemacs/elm-compile-buffer-output () + (interactive) + (let* ((fname (format "%s.js" (downcase (file-name-base (buffer-file-name)))))) + (elm-compile--file (elm--buffer-local-file-name) fname))) + +(defun spacemacs/elm-repl-push-decl-focus () + "Send current function to the REPL and focus it in insert state." + (interactive) + (elm-repl-push-decl) + (run-elm-interactive) + (evil-insert-state)) + +(defun spacemacs/elm-repl-push-focus () + "Send current region to the REPL and focus it in insert state." + (elm-repl-push) + (run-elm-interactive) + (evil-insert-state)) diff --git a/layers/+lang/elm/img/elm.png b/layers/+lang/elm/img/elm.png new file mode 100644 index 0000000000000000000000000000000000000000..ab9154bac9b000d6e53459ad4fb79e763493ac45 GIT binary patch literal 37678 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 z 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq elm-packages + '( + company + elm-mode + flycheck + (flycheck-elm :toggle (configuration-layer/package-usedp 'flycheck)) + popwin + smartparens + )) + +(defun elm/post-init-company () + (spacemacs|add-company-hook elm-mode) + (add-hook 'elm-mode-hook 'elm-oracle-setup-completion) + (push 'company-elm company-backends-elm-mode)) + +(defun elm/post-init-flycheck () + (add-hook 'elm-mode-hook 'flycheck-mode) + (add-hook 'elm-mode-hook 'spacemacs//elm-find-root)) + +(defun elm/init-flycheck-elm () + "Initialize flycheck-elm" + (use-package flycheck-elm + :defer t + :init (add-hook 'flycheck-mode-hook 'flycheck-elm-setup t))) + +(defun elm/init-elm-mode () + "Initialize elm-mode" + (use-package elm-mode + :mode ("\\.elm\\'" . elm-mode) + :init + (progn + (spacemacs/register-repl 'elm-mode 'elm-repl-load "elm") + + (defun spacemacs/init-elm-mode () + "Disable electric-indent-mode and let indentation cycling feature work" + (if (fboundp 'electric-indent-local-mode) + (electric-indent-local-mode -1))) + + (add-hook 'elm-mode-hook 'spacemacs/init-elm-mode)) + :config + (progn + (push "\\*elm\\*" spacemacs-useful-buffers-regexp) + + (spacemacs/set-leader-keys-for-major-mode 'elm-mode + ;; format + "=b" 'elm-mode-format-buffer + ;; make + "cb" 'elm-compile-buffer + "cB" 'spacemacs/elm-compile-buffer-output + "cm" 'elm-compile-main + ;; oracle + "hh" 'elm-oracle-doc-at-point + "ht" 'elm-oracle-type-at-point + ;; refactoring + "ri" 'elm-sort-imports + ;; repl + "'" 'elm-repl-load + "si" 'elm-repl-load + "sf" 'elm-repl-push-decl + "sF" 'spacemacs/elm-repl-push-decl-focus + "sr" 'elm-repl-push + "sR" 'spacemacs/elm-repl-push-focus + ;; reactor + "Rn" 'elm-preview-buffer + "Rm" 'elm-preview-main + ;; package + "pi" 'elm-import + "pc" 'elm-package-catalog + "pd" 'elm-documentation-lookup) + + (dolist (x '(("m=" . "format") + ("mc" . "compile") + ("mh" . "help") + ("mp" . "package") + ("mR" . "reactor") + ("mr" . "refactor") + ("ms" . "repl"))) + (spacemacs/declare-prefix-for-mode 'elm-mode (car x) (cdr x))) + + (evilified-state-evilify elm-package-mode elm-package-mode-map + "g" 'elm-package-refresh + "v" 'elm-package-view + "m" 'elm-package-mark + "u" 'elm-package-unmark + "x" 'elm-package-install + "q" 'quit-window)))) + +(defun elm/pre-init-popwin () + (spacemacs|use-package-add-hook popwin + :post-config + (push '("*elm*" :tail t :noselect t) popwin:special-display-config) + (push '("*elm-make*" :tail t :noselect t) popwin:special-display-config))) + +(defun elm/post-init-smartparens () + (if dotspacemacs-smartparens-strict-mode + (add-hook 'elm-mode-hook #'smartparens-strict-mode) + (add-hook 'elm-mode-hook #'smartparens-mode))) diff --git a/layers/+lang/emacs-lisp/README.org b/layers/+lang/emacs-lisp/README.org new file mode 100644 index 0000000..358e38f --- /dev/null +++ b/layers/+lang/emacs-lisp/README.org @@ -0,0 +1,73 @@ +#+TITLE: Emacs Lisp layer + +[[file:img/emacs.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#auto-compile][Auto-compile]] + - [[#key-bindings][Key bindings]] + - [[#working-with-lisp-files-barfage-slurpage--more][Working with lisp files (barfage, slurpage & more)]] + - [[#leader][Leader]] + - [[#srefactor][srefactor]] + +* Description +This layer gathers all the configuration related to emacs-lisp. This should +always be in your dotfile, it is not recommended to uninstall it. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =emacs-lisp= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Auto-compile +This layer adds the [[https://github.com/tarsius/auto-compile][auto-compile]] package to automatically keep the byte-compiled +version of your Emacs lisp files synced with the uncompiled version on every +save. If there are any compiler errors in the file, you will see a counter show +up in the mode line. You can hover over these numbers to get a description or +view the compiler output with the ~SPC m c l~ key binding. To disable the +feature use this line in your =dotspacemacs/user-config= function. + +#+BEGIN_SRC emacs-lisp + (remove-hook 'emacs-lisp-mode-hook 'auto-compile-mode) +#+END_SRC + +You can also exclude the =auto-compile= package. + +* Key bindings +** Working with lisp files (barfage, slurpage & more) +Spacemacs comes with a special ~lisp-state~ for working with lisp code that +supports slurpage, barfage and more tools you'll likely want when working with +lisp. + +As this state works the same for all files, the documentation is in global +[[https://github.com/syl20bnr/spacemacs/blob/master/doc/DOCUMENTATION.org#lisp-key-bindings][DOCUMENTATION.org]]. In general, use ~SPC k~ to interact with the lisp-state. + +** Leader + +| Key Binding | Description | +|----------------------------+------------------------------------------------------------| +| ~SPC m g g~ | go to definition of symbol under point | +| ~SPC m h h~ | describe symbol at point | +| ~SPC m c c~ | byte compile the current file | +| ~SPC m c l~ | popup compile-log buffer | +| ~SPC m e $~ or ~SPC m e l~ | go to end of current line and evaluate | +| ~SPC m e b~ | evaluate current buffer | +| ~SPC m e c~ | evaluate current form (start with =defun=, =setq=, etc...) | +| ~SPC m e e~ | evaluate sexp before point | +| ~SPC m e r~ | evaluate current region | +| ~SPC m e f~ | evaluation current function | +| ~SPC m ​,​~ | toggle =lisp state= | +| ~SPC m t b~ | run tests of current buffer | +| ~SPC m t q~ | run =ert= | +| ~SPC m d m~ | open [[https://github.com/joddie/macrostep][macrostep]] transient-state | + +** srefactor +The [[file:../../semantic/README.org][semantic]] layer should be installed for these key bindings to become active. + +| Key Binding | Description | +|-------------+-------------------------| +| ~SPC m = b~ | format current buffer | +| ~SPC m = f~ | format current function | +| ~SPC m = o~ | format all on one line | +| ~SPC m = s~ | format current sexp | diff --git a/layers/+lang/emacs-lisp/config.el b/layers/+lang/emacs-lisp/config.el new file mode 100644 index 0000000..2404f5e --- /dev/null +++ b/layers/+lang/emacs-lisp/config.el @@ -0,0 +1,18 @@ +;;; config.el --- Emacs Lisp Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(spacemacs|defvar-company-backends emacs-lisp-mode) +(spacemacs|defvar-company-backends ielm-mode) + +(spacemacs|define-jump-handlers emacs-lisp-mode) +(spacemacs|define-jump-handlers lisp-interaction-mode) diff --git a/layers/+lang/emacs-lisp/funcs.el b/layers/+lang/emacs-lisp/funcs.el new file mode 100644 index 0000000..4b07d98 --- /dev/null +++ b/layers/+lang/emacs-lisp/funcs.el @@ -0,0 +1,31 @@ +;;; funcs.el --- Emacs Lisp functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + + +;; idea from http://www.reddit.com/r/emacs/comments/312ge1/i_created_this_function_because_i_was_tired_of/ +(defun spacemacs/eval-current-form () + "Looks for the current def* or set* command then evaluates, unlike `eval-defun', does not go to topmost function" + (interactive) + (save-excursion + (search-backward-regexp "(def\\|(set") + (forward-list) + (call-interactively 'eval-last-sexp))) + +(defun spacemacs/nav-find-elisp-thing-at-point-other-window () + "Find thing under point and go to it another window." + (interactive) + (let ((symb (variable-at-point))) + (if (and symb + (not (equal symb 0)) + (not (fboundp symb))) + (find-variable-other-window symb) + (find-function-at-point)))) diff --git a/layers/+lang/emacs-lisp/img/emacs.png b/layers/+lang/emacs-lisp/img/emacs.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab43d704be287392c52fd10d6b4fb2bc35a4a0f GIT binary patch literal 13462 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 Eg2&h3=l}o! literal 0 HcmV?d00001 diff --git a/layers/+lang/emacs-lisp/packages.el b/layers/+lang/emacs-lisp/packages.el new file mode 100644 index 0000000..277b042 --- /dev/null +++ b/layers/+lang/emacs-lisp/packages.el @@ -0,0 +1,202 @@ +;;; packages.el --- Emacs Lisp Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq emacs-lisp-packages + '( + auto-compile + company + eldoc + elisp-slime-nav + (emacs-lisp :location built-in) + evil + flycheck + ggtags + helm-gtags + (ielm :location built-in) + macrostep + semantic + smartparens + srefactor)) + +(defun emacs-lisp/init-ielm () + (use-package ielm + :defer t + :init + (progn + (spacemacs/register-repl 'ielm 'ielm) + (dolist (mode '(emacs-lisp-mode lisp-interaction-mode)) + (spacemacs/declare-prefix-for-mode mode "ms" "ielm") + (spacemacs/set-leader-keys-for-major-mode mode + "'" 'ielm + "si" 'ielm))) + :config + (defun ielm-indent-line () + (interactive) + (let ((current-point (point))) + (save-restriction + (narrow-to-region (search-backward-regexp "^ELISP>") (goto-char current-point)) + (lisp-indent-line)))))) + +(defun emacs-lisp/post-init-company () + (spacemacs|add-company-hook ielm-mode) + (push '(company-files company-capf) company-backends-ielm-mode)) + +(defun emacs-lisp/post-init-eldoc () + (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)) + +(defun emacs-lisp/init-auto-compile () + (use-package auto-compile + :defer t + :diminish (auto-compile-mode . "") + :init + (progn + (setq auto-compile-display-buffer nil + ;; lets spaceline manage the mode-line + auto-compile-use-mode-line nil + auto-compile-mode-line-counter t) + (add-hook 'emacs-lisp-mode-hook 'auto-compile-mode)) + :config + (progn + (spacemacs/set-leader-keys-for-major-mode 'emacs-lisp-mode + "cl" 'auto-compile-display-log)))) + +(defun emacs-lisp/init-elisp-slime-nav () + ;; Elisp go-to-definition with M-. and back again with M-, + (use-package elisp-slime-nav + :defer t + :diminish elisp-slime-nav-mode + :init + (progn + (add-hook 'emacs-lisp-mode-hook 'elisp-slime-nav-mode) + (dolist (mode '(emacs-lisp-mode lisp-interaction-mode)) + (spacemacs/declare-prefix-for-mode mode "mg" "find-symbol") + (spacemacs/declare-prefix-for-mode mode "mh" "help") + (spacemacs/set-leader-keys-for-major-mode mode + "hh" 'elisp-slime-nav-describe-elisp-thing-at-point) + (let ((jumpl (intern (format "spacemacs-jump-handlers-%S" mode)))) + (add-to-list jumpl 'elisp-slime-nav-find-elisp-thing-at-point)))))) + +(defun emacs-lisp/init-emacs-lisp () + (dolist (mode '(emacs-lisp-mode lisp-interaction-mode)) + (spacemacs/declare-prefix-for-mode mode "mc" "compile") + (spacemacs/declare-prefix-for-mode mode "me" "eval") + (spacemacs/declare-prefix-for-mode mode "mt" "tests") + (spacemacs/set-leader-keys-for-major-mode mode + "cc" 'emacs-lisp-byte-compile + "e$" 'lisp-state-eval-sexp-end-of-line + "eb" 'eval-buffer + "ee" 'eval-last-sexp + "er" 'eval-region + "ef" 'eval-defun + "el" 'lisp-state-eval-sexp-end-of-line + "gG" 'spacemacs/nav-find-elisp-thing-at-point-other-window + "," 'lisp-state-toggle-lisp-state + "tb" 'spacemacs/ert-run-tests-buffer + "tq" 'ert)) + ;; company support + (push 'company-capf company-backends-emacs-lisp-mode) + (spacemacs|add-company-hook emacs-lisp-mode)) + +(defun emacs-lisp/init-macrostep () + (use-package macrostep + :defer t + :mode ("\\*.el\\'" . emacs-lisp-mode) + :init + (progn + (evil-define-key 'normal macrostep-keymap "q" 'macrostep-collapse-all) + (spacemacs|define-transient-state macrostep + :title "MacroStep Transient State" + :doc "\n[_e_] expand [_c_] collapse [_n_/_N_] next/previous [_q_] quit" + :foreign-keys run + :bindings + ("e" macrostep-expand) + ("c" macrostep-collapse) + ("n" macrostep-next-macro) + ("N" macrostep-prev-macro) + ("q" macrostep-collapse-all :exit t)) + (spacemacs/set-leader-keys-for-major-mode 'emacs-lisp-mode + "dm" 'spacemacs/macrostep-transient-state/body)))) + +(defun emacs-lisp/post-init-evil () + (add-hook 'emacs-lisp-mode-hook + (lambda () + (spacemacs|define-text-object ";" "elisp-comment" ";; " "")))) + +(defun emacs-lisp/post-init-flycheck () + ;; Don't activate flycheck by default in elisp + ;; because of too much false warnings + ;; (spacemacs/add-flycheck-hook 'emacs-lisp-mode) + + ;; Make flycheck recognize packages in loadpath + ;; i.e (require 'company) will not give an error now + (setq flycheck-emacs-lisp-load-path 'inherit)) + +(defun emacs-lisp/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'emacs-lisp-mode)) + +(defun emacs-lisp/post-init-ggtags () + (add-hook 'emacs-lisp-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun emacs-lisp/post-init-semantic () + (add-hook 'emacs-lisp-mode-hook 'semantic-mode) + (with-eval-after-load 'semantic + (semantic-default-elisp-setup))) + +(defun emacs-lisp/post-init-srefactor () + (add-hook 'emacs-lisp-mode-hook 'spacemacs/lazy-load-srefactor) + (use-package srefactor-lisp + :commands (srefactor-lisp-format-buffer + srefactor-lisp-format-defun + srefactor-lisp-format-sexp + srefactor-lisp-one-line) + :init + (dolist (mode '(emacs-lisp-mode lisp-interaction-mode)) + (spacemacs/declare-prefix-for-mode mode "m=" "srefactor") + (spacemacs/set-leader-keys-for-major-mode mode + "=b" 'srefactor-lisp-format-buffer + "=d" 'srefactor-lisp-format-defun + "=o" 'srefactor-lisp-one-line + "=s" 'srefactor-lisp-format-sexp)))) + +(defun emacs-lisp/post-init-smartparens () + (advice-remove 'elisp--preceding-sexp 'evil--preceding-sexp) + + (defun spacemacs/eval-current-form-sp (&optional arg) + "Call `eval-last-sexp' after moving out of one level of +parentheses. Will exit any strings and/or comments first. +Requires smartparens because all movement is done using +`sp-up-sexp'. An optional ARG can be used which is passed to +`sp-up-sexp' to move out of more than one sexp." + (interactive "p") + (require 'smartparens) + (save-excursion + (let ((max 10)) + (while (and (> max 0) + (sp-point-in-string-or-comment)) + (decf max) + (sp-up-sexp))) + (sp-up-sexp arg) + (call-interactively 'eval-last-sexp))) + + (defun spacemacs/eval-current-symbol-sp () + "Call `eval-last-sexp' on the symbol around point. Requires +smartparens because all movement is done using +`sp-forward-symbol'." + (interactive) + (require 'smartparens) + (save-excursion + (sp-forward-symbol) + (call-interactively 'eval-last-sexp))) + + (dolist (mode '(emacs-lisp-mode lisp-interaction-mode)) + (spacemacs/set-leader-keys-for-major-mode mode + "ec" 'spacemacs/eval-current-form-sp + "es" 'spacemacs/eval-current-symbol-sp))) diff --git a/layers/+lang/erlang/README.org b/layers/+lang/erlang/README.org new file mode 100644 index 0000000..56b0d72 --- /dev/null +++ b/layers/+lang/erlang/README.org @@ -0,0 +1,17 @@ +#+TITLE: Erlang layer + +[[file:img/erlang.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + +* Description + +Very basic layer for Erlang with support for basic =syntax-checking= and +=auto-completion= with the corresponding layers. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =erlang= to the existing =dotspacemacs-configuration-layers= list in this +file. diff --git a/layers/+lang/erlang/config.el b/layers/+lang/erlang/config.el new file mode 100644 index 0000000..b47e5df --- /dev/null +++ b/layers/+lang/erlang/config.el @@ -0,0 +1,14 @@ +;;; packages.el --- Erlang Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|define-jump-handlers erlang-mode) diff --git a/layers/+lang/erlang/img/erlang.png b/layers/+lang/erlang/img/erlang.png new file mode 100644 index 0000000000000000000000000000000000000000..6d603467d1ba18fd45ff854c12c9ff4d09e72b83 GIT binary patch literal 5019 zcmZ{ocTkhx(#M}9geIK;q4!=AIs{aDl_FgPBm@khMhIOnh|+silp+cU(wiVHR7IsJ z2#P`k5d@`ILA~)e_s-n+&b;%?IXipybH4lR?tdrA+R~Vjo`)U)07g?20~?BsqpUz$ zYRW#&8(cy$R9IaLT>xmzICF}IQhZRbjjKSaSye)Exle!ry;(QJWH=_Aoa#0RH^_O1mp_C?|AylS{!AYx2)B8u2{`04&3% z2D*0PAAS@?<+|EOKRrCf2bgB6LQynG=91PdtlBznJpfmF{0lhi82c_%^y% zJ_cV|d5!9A-FP`#6gB>SiREh=!d zWGj(W6ay;Yci%ehkle`PWW#R3^mXN0_msm6%%DGXE;KDh?RFsV5qn_=Af9MXDr^V$ zv6lZJRgvamn~Cb)tS!fOUxX&kXftcmf1ER1sfVWOeJs96gi{AV#y|?G;Z<2Kd6*8~ zBN-$M#&n{3TTKiCM}$idzMdd#ks>WfMYMA@0$9 zu|g=wk=oYNCg$pLx@_12&;z_qWf!_1ajZ^$Z*=psFga96&{jwe8j$tduXfwNVkGz{ z7+)iLdr^eH%>)JG0mVZ|qdH+17>AT&>w%Q@@JUTzs>aR$JI9kxfxdVwY(K|J6R-*SQ43!W3V5*?rxd$d;;91V0q!%R~&mo zrGxt{T}_HK3t)+BO2*p{J%aCGC4~pxqDc(`vzFI!Os&kC#``i7gPG?Ogg?qKnW341 z!=X|9-lUOS$i2Wtc$3pnm{|NNH?_b_Z-)=5VJ=t_bK!i>+-2__4JAb=g!Jd-*L(Ji z@M4Jy!@9BX9gBSWM)69y04|3xCE4mxB>41Z_*Y?@>QpB1$rD8(X3)JPY?7l{-lPuv zu!#>|oL6TmeXJs7&&tiv*`Rckn{5^Gp5a)^UCJHG7AGzEobg8neY|ds_I0sk^v+rO zi&rMD=Y#bTTQ{x|q-~QgB+x!Kl!nF!)JVs{^W!REY2dh^a#BME{rZZH*||LM04O)Z zWZHl}9^&L7S`K3%R2Cc1Q&Zi9sGL7@$A+;Q`r_dRhjk9;bCh zuGGjx^0beG95+*iA75DZXDN5Hj?J%TCh^z76U9(Vni$E}z?a#MvD2nHX;&5cnD0W* z5&g$=BF}w3npSh`BNE8B2*vBXSQGm4){GEpeF3p;e^)q92T8Nc39Oc z*uG+>B|5rq0?cq?tpU@Vc-nzSvPa(cZ*eAxXs$ zl@w;X)ea1(xO=$J{1}|OGUPmFTP+Gt&mkm6>3$cs8!EE-MM7S#Z=cZ-pe{DAZ0vE@ zcnQ&eEj|DUN7C9>Gcm9e7sR>yD*3BeFI_=;#^xkFcQe)9qY^$4Fp);VNo`Z+dg&g_ z+w(*}7a|(uU=)I^|(+HC``!`pZTK=aJknP$z3 zWIA8QKH!*ZyWs)8vp=hmuHFUyNOj7mrSjt}X{9mF%a{jB-5~PvE}i>q!1s?e+eQ)O z&e?*aVDDiwiq8!3qa=Vc$t4@G&w8FN6(jLkN6KAtudeK-{`=_C zcDL-s=4_a%R$v*wR$P@lsM>=!l!VPLANVy3s;)O$9-?pi(kfLK=9jEv%BpsV576^q z5^d^vDgmSIh5oL~En)$|M8QL8*)RdA_-fDqm|S)XN#MoHj>slNF&**B5gnS}fCQy_ z#H>#fMSfMG`!e&|@0I}HfY8%TS2}S2F6jyy8#PrPKbUpD+v&R$I|l<$33|0SW`A}s zrc_qA?rSi(pJy$6qU&u(jCAOp$TabR1y^BS=5!nD5rcyYuj2=%Q*pdx$j9!5tS^-i z!3qPMUipwL7T8Sgy!Q>cZz)&2z&?Nu0M3boyi3IJNk9Z4oDS<2;VP_0nOH3`9ajd> zLUsyAfy5_WG7Twj_OrrqB)IQV%PTK!8(Cy{*;l1f@r}!LDI?LO(V+JSDiJ0KnfR@1 za(xDI#0Hblk;ztSeWp42<=0|xCMKZ($hluVMb=62uMPxZ)Ion3wTb%#hM74vDbTIEPGxIf%=T`m z66m*Z-xde&W0#4GEDn|j4U3XRkrm1fEx#CyPAr3W#%Wah5*o8x3OpGC@>OQ*dR2F) zdL78)u_?007b{Z6WMk`bh6bwXbp?6acfN?y-IsFZb(noCtkZIa#TM2KC#hL}dSW<% zIHzKdLM`<&XtAOEp6G+x6^-}r1%*p}WUARHQ!cU7(U^W`y!W91DHLa45uHqX7SZZc zqQxoO5gBa5@N(OLsn=>)r0&c^7fJIUZR?k$CJB-Bi50+SDml%=io^n+5p)!vwz>aL z(F$-0@EbInL&c1_KjA6Y)t%{G3F9Ib^WoLEp759@GT=o09^!y@=&J#Pa(!uDTQlkM zTpP;PFkH-a?Ul7QdMUcNufHKqxK8WhjC^P}x~wF2df5BP6jNLmR#iWx4%aWiR zP0*{{?#34uyF62zpbRsVZLWp?!}!xVK6euF&tJI&n6@P(Faeh9+NZC;SUUB#in;k$O!Oz**Wn{Crqw-PXqE|C{@ z_I^s{T@aCTIgcQRMJ#OY2$$@N48g~CW5cZ3S{6DiIiCa{$>2L4hNe_BL^Tvy|BTMb z<>=q#u>64BVt22+)08{u-1W_AXv+EKVX)k-Q#l!(0#I;t$vEUU@k7hHYog&*N9(z0 zv3!pqWl4>aebefX^3(VlU{}qE-RW)Pt#_d{NUmGg9WDHZ*#vA=a2vihiG3Dtgu2%E zJ<1(dd1g##B5!Pheya?I%<*?$CMhMaOea1FZjka*Y>ear-F{@aN>wx5ccWI{sl8_^ zhRYE}jR84Hc3(-ZIJU#;QZLf~8m*^B%#`i+XaT1=lCUOm1N-`kxuq!nr1mxX^r=gu zv!C9lXV3ab$fH|C9+PGRmX&=qdZbB`v1fb;-Co%mb-0KWAkmW%!*=SNA6v$c@a|U;ASNA z#lz3ILu&GE4d;xR-^?ekp!)hOGiUxj<-(y^>JM?^kNWLimc$jYnh4epUX`)~wI6b3 zu}MW9i5JemI|s3R=M)?nF6}suKq28N>=%+flsz9kIWMboUrc>d+3DKF@+Uvx3mzM? zped+R?ZCFUUomG*$I8GEX-mf8{JtsCKW`^-k^_gi%7<|VRyC(@veYfMtGlWnFNMS>%1+%=)a zYK^kK$kHw6vBHj_O}*OCf{tE}CFjA_5T~sA0+O>t*8Jt6=rhTTaxBaeGHyGja*phr zEQpuB-eDe0&B?Q>`q`oSW52M+U71|OK9{7v1N&oAjQP(frx}|B(c%KgLTQ9nvpmKx zyq&S#IreVquMz_42hWT;Mni;e&)O}WTZupGCXl`2b`@?Q5QI?Pa z&R;s_dHCS4i;86ZkV&W4%4Qjp9(7Eo7-Gv#MCz0M_B*w;X1*f;_^|-^p)2+ zj-QK|V`R2YoC^UxzF^1TF%ec0BK&AVb209uQxyE(tY&}v?P65P zX4D~u<6Jir=))`$_M`bnTBieck*OPA# zQ{{Qy%LJD4!B2^2%q&B;J}`WNP$krKGinx>6BI8tj^Bu@k9qj!;90{E^1afbQ)NOZ zPSfE_HsgZ;nKWFxifbd(@!2PR{GEu}@p;WGvdohUS*5m`A7mYa^{E{9Elr6D5&qdS zwg%JnZ_AuEXG+dGNjwoHjlNpFs#`}+99#=9dfTTJ-I#n&_3;Rkd-~Ou<3xx^tq8LC4sfd(ED#;@??2w8mC1sQ%QWl9sA(0Cm{Ez?71^+-# z+|`Kx|3clDav0@;;ol6wfmaD(=pZk^)E|xYvOr^T7+)bZ1vLdFc{L$QN=133vOH2# z=%U7d$_Wb#Q^5U&DT@OCEhbDeBAOxy|0`(c9pdkSLKy^NLjHCHg|eog!GL1rpH9U8 zF#n`Pp}f6tSZ@NLq@fv?A;v*rxc*D$-;5*9li&>~s~}Sn*JvmR_kST4l&%sY@Ls?_ ze}$m5@O+bl<^Skd*ik4zQAtfzRZ~e(6ZzeJF`R<1{g;j{E|NkhD=3-k?a`ldQlkHK z=-&m|+n54Z|BefRK==m`5FvQKK(wdYKXb(Yo$7z)j8H+SC?Wo5s4uR`EK>vlQ$tIG JIz9KB{{kJa-+ll9 literal 0 HcmV?d00001 diff --git a/layers/+lang/erlang/packages.el b/layers/+lang/erlang/packages.el new file mode 100644 index 0000000..646f03a --- /dev/null +++ b/layers/+lang/erlang/packages.el @@ -0,0 +1,52 @@ +;;; packages.el --- Erlang Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq erlang-packages + '( + company + erlang + ggtags + helm-gtags + flycheck + )) + +(defun erlang/post-init-company () + (add-hook 'erlang-mode-hook 'company-mode)) + +(defun erlang/init-erlang () + (use-package erlang + :defer t + :init + (progn + ;; explicitly run prog-mode hooks since erlang mode does is not + ;; derived from prog-mode major-mode + (add-hook 'erlang-mode-hook 'spacemacs/run-prog-mode-hooks) + ;; (setq erlang-root-dir "/usr/lib/erlang/erts-5.10.3") + ;; (add-to-list 'exec-path "/usr/lib/erlang/erts-5.10.3/bin") + ;; (setq erlang-man-root-dir "/usr/lib/erlang/erts-5.10.3/man") + ;; (add-hook 'erlang-mode-hook + ;; (lambda () + ;; (setq mode-name "Erlang") + ;; ;; when starting an Erlang shell in Emacs, with a custom node name + ;; (setq inferior-erlang-machine-options '("-sname" "syl20bnr")) + ;; )) + (setq erlang-compile-extra-opts '(debug_info))) + :config + (require 'erlang-start))) + +(defun erlang/post-init-flycheck () + (spacemacs/add-flycheck-hook 'erlang-mode)) + +(defun erlang/post-init-ggtags () + (add-hook 'erlang-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun erlang/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'erlang-mode)) diff --git a/layers/+lang/ess/README.org b/layers/+lang/ess/README.org new file mode 100644 index 0000000..8d65028 --- /dev/null +++ b/layers/+lang/ess/README.org @@ -0,0 +1,69 @@ +#+TITLE: ESS (R) layer + +[[file:img/r.jpg]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + - [[#inferior-repl-process][Inferior REPL process]] + - [[#helpers][Helpers]] + - [[#options][Options]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =ess= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key Bindings + +** Inferior REPL process +Send code to inferior process with these commands: + +| Key Binding | Description | +|-------------+------------------------------------------------------------------| +| ~SPC m c c~ | send knitr/sweave chunk and keep buffer focused | +| ~SPC m c C~ | send knitr/sweave chunk and switch to REPL in insert mode | +| ~SPC m c d~ | send knitr/sweave chunk and step to next chunk | +| ~SPC m c m~ | mark knitr/sweave chunk around point | +| ~SPC m c n~ | next knitr/sweave chunk | +| ~SPC m c N~ | previous knitr/sweave chunk | +| ~SPC m s b~ | send buffer and keep code buffer focused | +| ~SPC m s B~ | send buffer and switch to REPL in insert mode | +| ~SPC m s d~ | send region or line and step (debug) | +| ~SPC m s D~ | send function or paragraph and step (debug) | +| ~SPC m s i~ | start an inferior REPL process | +| ~SPC m s l~ | send line and keep code buffer focused | +| ~SPC m s L~ | send line and switch to REPL in insert mode | +| ~SPC m s r~ | send region and keep code buffer focused | +| ~SPC m s R~ | send region and switch to REPL in insert mode | +| ~SPC m s t~ | send thing at point (function) and keep code buffer focused | +| ~SPC m s T~ | send thing at point (function) and switch to REPL in insert mode | +| ~CTRL+j~ | next item in REPL history | +| ~CTRL+k~ | previous item in REPL history | + +** Helpers +Helpers for inspecting objects at point are available in R buffers only. + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------| +| ~SPC m h d~ | view data under point using [ess-R-data-view][ess-R-data-view] | +| ~SPC m h i~ | object introspection popup [ess-R-object-popup][ess-R-object-popup] | +| ~SPC m h t~ | view table using [ess-R-data-view][ess-R-data-view] | + +* Options +=ess-smart-equals= is disabled by default. In order to enable it, set in your +=~/.spacemacs= + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '((ess :variables + ess-enable-smart-equals t))) +#+END_SRC + +To turn off the automatic replacement of underscores by =<-=, add the following +hook: + +#+begin_src emacs-lisp + (add-hook 'ess-mode-hook + (lambda () + (ess-toggle-underscore nil))) +#+end_src diff --git a/layers/+lang/ess/config.el b/layers/+lang/ess/config.el new file mode 100644 index 0000000..a599c3f --- /dev/null +++ b/layers/+lang/ess/config.el @@ -0,0 +1,15 @@ +;;; config.el --- ESS Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar ess-enable-smart-equals nil + "If non-nil smart-equal support is enabled") diff --git a/layers/+lang/ess/img/r.jpg b/layers/+lang/ess/img/r.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4177910e76bc4d7b261db7c3d39e5585c3d2b55 GIT binary patch literal 4173 zcmd^?XH-+$w#Ro!AQTm1=q*TZqEbYVj&zVBNEH-NnxGUz2SKWUNEf9F2!b@Jp-PwH z0jZ$~1gW7I5HN(0T<$sNopHx|SzKW z5CDKqAAmdyL;zF}N-9bS6%{2F6iP)+%Roy@Lqp4Wj{Xb-3nMEl3nMc#JC^{0or8~) znVCnNhfh#QL{x+gaq;p+;mZQTBEldj6iQ1?3#X-p3$rt`3;)MP{sh3N0V^OK41xg^ zFc269B6ow{p87}$`rUv(4MYJx^%Y7@Lrcd1P=LT-3J92z5&}708GQN;fWRovU$~-5 z1vkD2<@IEg3`@$V=2NTgU^4lN+}xhi{2PG0?nhNhOb zj_xf}v)kqtmR1gq_a8VpySRG$JVE;U`3F3Uh>VJkiG7}&lA4yD@hbE6+k(QPcf}>| zOF!1s*3~yOqMACpx_f&2KKBodj*U-DPNAn~FiYQ;S60{7H?X^VKlcv~f8mb^AOQRa z&guIPpnu^x1qV?;AYcgepFAK6-_rqxK`1X=p*pW>487+G=amejW>ibcukN7XlQO|E z*?WDZW#*U02<-k7>35=k4=DWqMD!QXUp(X);0zdadSGA}pbQY+J*5SNfjo-8oAxSa z5=q*IvF+PaWI*?A9=+M=T81nm3WZp97NnVqq(v4;chP%_bag~L)_j~Vtq=F2xge8Kqa?~SV)1xs2^knEX|yR>VA|Fqc6!8+fr>c2R}u#FJqbKnHWpY|V5BC3 zz#OV87rr`~y$kL#AA-qT!*~;AfgVBwqWpUN2IjR~f#n6CnArU_23FqHdFkqS!BRdv!(di3-{um&TBODu?`4HX^3Y{8)FC$D zog82N^Ue$=gc`)(eHknjrW0n0kGtvpv@F-D=pOYH!3U3x#z}vwD{_@>GHpXXdq3#W zmwXxkv0zhND1&n&cOvFdoZf0t@$*G%q!7g(?6`(RI3&a;7MVEcAH?~8&!JuozmYCv zG_c;07PhX+2{SbomSY5rKq{2L=>$y+84ul43o;-B9_<7(CLkd7qquQxGDAs$w-hG; zy`{o!u(ZI?hB}OPA@${3d+p45>L^r)r@B@X(4t9KW zlIp4F>EVhszzl;eel$A1-sEIq>n8*ET`a`C(plQ1@CjG!=r&flWRYWmUP!g;j{{E_ z;hTm=@&NlHTpbkqV@I=+h8ZOX2B9MMK|a0>2A} zQhA9S%c6ZXOYy##&vyz8ala|OBm?pxUk)kxO`CDPUDhwvt=D%0JA79{*TqG=^s4T# zvV_tq$OZM0V8aXw@B>(;2}YSmJ)|~U4oO!Kzbh0@RL87mVUcCQccHRZkDeG~yV&fy z9p)yH&Z>*b9CLWd9qG(v6mILw@n^y-8j>{0(MQ=<VG1W(j6igtu}_P&vg*W z*vk=kQ}8+1^E3B?RTx)gLR}yN@UtGMH#_eDuK%@TSoID{gL{KnCMh?Ofry&kC>`ly zuZLT+eA}$b{$v0R%_E6>_gPgTv}Ze*>RKMp_9m&bM{0jJDlL@grf9FGR9nqY*`YG+pRVs|e`AvVrF?8sn`);i z@!+OUJ1p`0NIQ;&4AhUi5j#qz##+>#i4#~b&N{@1+AVa&&~eNY_vxG|Jyf4F({>?| z<^hDnDDUO4DvzKh>a^fawv5~)hdm3WVwR7!q^#g0Yh{-j6ny%4QCO4u52KQ(3E~aB zzl*nvL>UHe>??7!U2vTIPR_AUec?qbYO{;q-M)D1sA90j7}vTS`MR4fPA%Y-&7M+N zB1v)E;4F8)>EC6$)-J_SIq|_>PW>dd{{W~uG0+nz$i>4SCU{;P!xWlcOqr5?$(Mv5 z`iM_lVvfU{>?GZ>QGYnp-pSQ#jYAAXHx3tXmGjiphR;mOM9o7iz9$5ThCPKYijG)h z;e?^pKatI3;KCgtQd?#Fq3%8zNaOq{iccpjb#+S@vf^RH&Rn<)tPL9m4`OH7mZ$dRd*iPbdk@w3y|?TuaHiQk?6)+7EVaO-h* zh**zOfl^9+qdg0`5Wew>=`rV7fnR2sulTyemjT# zxuP?-zBaOUd`Bm=>4+n}6cD>*y*$SINx)+)+|W)+WOzi=()`v0%r)%R|)aL3y#;EPb&}PS^kOVzF?TtnsuXx zPpjn;>UKEcTYXbbG1tj4qPHgCJW^KnYMa>Cgz|NS^K9*l$mo(^c@89YJc`KMk0Apv z6loC3oY9((`1$38MUmdayH8KwSFv8i#KL&#z8{+6LorXHgNkha&ljzy>FqA|M|vMH z@5iyis zoo0T)=pAZJ7H$R~Q{o`9vn!!a{~4##!sx!aTaP!-<(+PCk@ecT4v!CTqCz>z3VB=f z_AYck;wn$>d+XUx_c#k#gOd^H&Z*1#p#4d zFf+?rtdnn#vSq?Q^2Pm7eRI41YiO-wjb@IH5S_%HoX{$S{pWqb%+a?WysdW9oQkl% zR>%~;jLE>D+1uvdQk4UEwQiltGcLu=iqs#BnGqA28s!oRr7cn#!L9>rx6Noo6P;`e zLu=1IT+F1^XhrlWNlp|-cQ!e`+i~eXR>*)qG)-g^nEi1XjMogwGN-gcKAb;~+9Ctz zLbzxAj2&B>v#?et1KW*lNuH5pAjh*3C)8l#ulTfw9lfKad-uPj324Qx4ncgG3lE*G zB&BJnaF?l2YdTYKH0uQp`iAeYu7&k-%P~q;{enKHbofG4$9dmqLuP0;HjX+eY#YvN zLLq~1EVpJjv{*~2eyXK=ER{?_+JDuxQqM{dP96lo#1hV~qM=BKN!016z1*>K@uV4Yu)5 z6?~kEFmawKnzbDE3emRVW8rzy=iXlKt6QFY*%KAFWC%|%*Fb%Y>uSnw{(LP|R1I1T z37jx38wyh!B1kRHnW*C$I(NTtXz`+Z*;pA=`|>N;JUm|XaUY0z<|+l<8bfr>^SEs9 z9}hNjpfrX=+~9Ir!@m^+7;PaO-)OVT#7L*HoL(hU(L}Sxr3jfj#Z5g|RS!6yd~x2q z7;9YJjMM9GkT;CyAImiuUmUH|1jHwIAW}ZJ`&m1V+cS#1#$8@_6SRFk82r_2{7=cg zVuyEDjwJ*8QlZO{m1KY;4@_dGUkW`rvv735jSTdz17slT89tW`sLPVHt;oP`6QGRA zBMF`M7hg{0KXW_L<0<|BvrWKaJ<6;tzDwn_o0?N~3w0X}*Mra@eUQNVswYQjAcW+z Kj%^hLdHNq2yu(2N literal 0 HcmV?d00001 diff --git a/layers/+lang/ess/packages.el b/layers/+lang/ess/packages.el new file mode 100644 index 0000000..2278af4 --- /dev/null +++ b/layers/+lang/ess/packages.el @@ -0,0 +1,137 @@ +;;; packages.el --- ESS (R) Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq ess-packages + '( + ess + ess-R-data-view + ess-R-object-popup + ess-smart-equals + golden-ratio + org)) + +(defun ess/init-ess () + (use-package ess-site + :mode (("\\.sp\\'" . S-mode) + ("/R/.*\\.q\\'" . R-mode) + ("\\.[qsS]\\'" . S-mode) + ("\\.ssc\\'" . S-mode) + ("\\.SSC\\'" . S-mode) + ("\\.[rR]\\'" . R-mode) + ("\\.[rR]nw\\'" . Rnw-mode) + ("\\.[sS]nw\\'" . Snw-mode) + ("\\.[rR]profile\\'" . R-mode) + ("NAMESPACE\\'" . R-mode) + ("CITATION\\'" . R-mode) + ("\\.omg\\'" . omegahat-mode) + ("\\.hat\\'" . omegahat-mode) + ("\\.lsp\\'" . XLS-mode) + ("\\.do\\'" . STA-mode) + ("\\.ado\\'" . STA-mode) + ("\\.[Ss][Aa][Ss]\\'" . SAS-mode) + ("\\.jl\\'" . ess-julia-mode) + ("\\.[Ss]t\\'" . S-transcript-mode) + ("\\.Sout" . S-transcript-mode) + ("\\.[Rr]out" . R-transcript-mode) + ("\\.Rd\\'" . Rd-mode) + ("\\.[Bb][Uu][Gg]\\'" . ess-bugs-mode) + ("\\.[Bb][Oo][Gg]\\'" . ess-bugs-mode) + ("\\.[Bb][Mm][Dd]\\'" . ess-bugs-mode) + ("\\.[Jj][Aa][Gg]\\'" . ess-jags-mode) + ("\\.[Jj][Oo][Gg]\\'" . ess-jags-mode) + ("\\.[Jj][Mm][Dd]\\'" . ess-jags-mode)) + :commands (R stata julia SAS) + :init + (progn + (spacemacs/register-repl 'ess-site 'julia) + (spacemacs/register-repl 'ess-site 'R) + (spacemacs/register-repl 'ess-site 'SAS) + (spacemacs/register-repl 'ess-site 'stata) + ;; Explicitly run prog-mode hooks since ess-mode does not derive from + ;; prog-mode major-mode + (add-hook 'ess-mode-hook 'spacemacs/run-prog-mode-hooks) + (when (configuration-layer/package-usedp 'company) + (add-hook 'ess-mode-hook 'company-mode)))) + + ;; R -------------------------------------------------------------------------- + (with-eval-after-load 'ess-site + ;; Follow Hadley Wickham's R style guide + (setq ess-first-continued-statement-offset 2 + ess-continued-statement-offset 0 + ess-expression-offset 2 + ess-nuke-trailing-whitespace-p t + ess-default-style 'DEFAULT) + + (defun spacemacs/ess-start-repl () + "Start a REPL corresponding to the ess-language of the current buffer." + (interactive) + (cond + ((string= "S" ess-language) (call-interactively 'R)) + ((string= "STA" ess-language) (call-interactively 'stata)) + ((string= "SAS" ess-language) (call-interactively 'SAS)))) + + (spacemacs/set-leader-keys-for-major-mode 'ess-julia-mode + "'" 'julia + "si" 'julia) + (spacemacs/set-leader-keys-for-major-mode 'ess-mode + "'" 'spacemacs/ess-start-repl + "si" 'spacemacs/ess-start-repl + ;; noweb + "cC" 'ess-eval-chunk-and-go + "cc" 'ess-eval-chunk + "cd" 'ess-eval-chunk-and-step + "cm" 'ess-noweb-mark-chunk + "cN" 'ess-noweb-previous-chunk + "cn" 'ess-noweb-next-chunk + ;; REPL + "sB" 'ess-eval-buffer-and-go + "sb" 'ess-eval-buffer + "sD" 'ess-eval-function-or-paragraph-and-step + "sd" 'ess-eval-region-or-line-and-step + "sL" 'ess-eval-line-and-go + "sl" 'ess-eval-line + "sR" 'ess-eval-region-and-go + "sr" 'ess-eval-region + "sT" 'ess-eval-function-and-go + "st" 'ess-eval-function + ;; R helpers + "hd" 'ess-R-dv-pprint + "hi" 'ess-R-object-popup + "ht" 'ess-R-dv-ctable + ) + (define-key ess-mode-map (kbd "") 'ess-eval-line) + (define-key inferior-ess-mode-map (kbd "C-j") 'comint-next-input) + (define-key inferior-ess-mode-map (kbd "C-k") 'comint-previous-input))) + +(defun ess/init-ess-R-data-view ()) + +(defun ess/init-ess-R-object-popup ()) + +(defun ess/init-ess-smart-equals () + (use-package ess-smart-equals + :defer t + :if ess-enable-smart-equals + :init + (progn + (add-hook 'ess-mode-hook 'ess-smart-equals-mode) + (add-hook 'inferior-ess-mode-hook 'ess-smart-equals-mode)))) + +(defun ess/pre-init-golden-ratio () + (spacemacs|use-package-add-hook golden-ratio + :post-config + (dolist (f '(ess-eval-buffer-and-go + ess-eval-function-and-go + ess-eval-line-and-go)) + (add-to-list 'golden-ratio-extra-commands f)))) + +(defun ess/pre-init-org () + (spacemacs|use-package-add-hook org + :post-config (add-to-list 'org-babel-load-languages '(R . t)))) diff --git a/layers/+lang/extra-langs/README.org b/layers/+lang/extra-langs/README.org new file mode 100644 index 0000000..acd4ca4 --- /dev/null +++ b/layers/+lang/extra-langs/README.org @@ -0,0 +1,18 @@ +#+TITLE: Extra Languages + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + +* Description + +Adds many more language modes for less common languages, some more niche than others. + +These include: +- Arduino +- Julia +- MATLAB +- QML +- OpenScad +- Stan +- Thrift +- Wolfram Language / Mathematica diff --git a/layers/+lang/extra-langs/packages.el b/layers/+lang/extra-langs/packages.el new file mode 100644 index 0000000..2cd85d0 --- /dev/null +++ b/layers/+lang/extra-langs/packages.el @@ -0,0 +1,43 @@ +(setq extra-langs-packages + '( + arduino-mode + julia-mode + matlab-mode + qml-mode + scad-mode + stan-mode + thrift + wolfram-mode + )) + +(defun extra-langs/init-arduino-mode () + (use-package arduino-mode :defer t)) + +(defun extra-langs/init-scad-mode () + (use-package scad-mode :defer t)) + +(defun extra-langs/init-qml-mode () + (use-package qml-mode :defer t :mode "\\.qml\\'")) + +(defun extra-langs/init-julia-mode () + (use-package julia-mode :defer t)) + +(defun extra-langs/init-matlab-mode () + (use-package matlab-mode + :defer t + :init + ;; Explicitly run prog-mode hooks since matlab-mode does not derive from + ;; prog-mode major-mode + (add-hook 'matlab-mode-hook 'spacemacs/run-prog-mode-hooks))) + +(defun extra-langs/init-stan-mode () + (use-package stan-mode :defer t)) + +(defun extra-langs/init-thrift () + (use-package thrift :defer t)) + +;; no associated extension because conflicts with more common Objective-C, manually invoke for .m files. +(defun extra-langs/init-wolfram-mode () + (use-package wolfram-mode + :defer t + :interpreter "\\(Wolfram\\|Mathematica\\)Script\\( -script\\)?")) diff --git a/layers/+lang/faust/README.org b/layers/+lang/faust/README.org new file mode 100644 index 0000000..cc6a088 --- /dev/null +++ b/layers/+lang/faust/README.org @@ -0,0 +1,27 @@ +#+TITLE: faust layer + +[[file:img/faust.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + +* Description +This simple layer adds support for the [[http://faust.grame.fr/][faust language]]. +It adds =faust-mode= as well as integrating it with =auto-completion= layer. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =faust= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key bindings + +| Key Binding | Description | +|-------------+---------------------------------------| +| ~SPC m c f~ | Compile to SVG and open in Firefox | +| ~SPC m c g~ | Compile a jack-gtk program and run it | +| ~SPC m c q~ | Compile a jack-qt program and run it | +| ~SPC m g b~ | Jump back to previous location | +| ~SPC m g g~ | Jump to definition around point | diff --git a/layers/+lang/faust/config.el b/layers/+lang/faust/config.el new file mode 100644 index 0000000..7d20f68 --- /dev/null +++ b/layers/+lang/faust/config.el @@ -0,0 +1,16 @@ +;;; config.el --- faust Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Bart Brouns +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(spacemacs|defvar-company-backends faust-mode) + +(spacemacs|define-jump-handlers faust-mode) diff --git a/layers/+lang/faust/funcs.el b/layers/+lang/faust/funcs.el new file mode 100644 index 0000000..2accd4f --- /dev/null +++ b/layers/+lang/faust/funcs.el @@ -0,0 +1,45 @@ +;;; funcs.el -- Faust Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs/faust-to-firefox () + "Compile a block-diagram and show it in the browser." + (interactive) + (set-process-sentinel + (start-process-shell-command "faust2svg" "faust-compile" + (concat "faust2svg " buffer-file-name)) + 'spacemacs//faust2svg-sentinel)) + +(defun spacemacs/faust-to-jack-gtk () + "Compile a jack-gtk program and run it." + (interactive) + (set-process-sentinel + (start-process-shell-command "faust2jack" "faust-compile" + (concat "faust2jack " buffer-file-name)) + 'spacemacs//faust-run-sentinel)) + +(defun spacemacs/faust-to-jack-qt () + "Compile a jack-qt program and run it." + (interactive) + (set-process-sentinel + (start-process-shell-command "faust2jaqt" "faust-compile" + (concat "faust2jaqt " buffer-file-name)) + 'spacemacs//faust-run-sentinel)) + +(defun spacemacs//faust2svg-sentinel (process event) + "Show block-diagram in browser" + (browse-url-of-file (concat (file-name-sans-extension buffer-file-name) + "-svg/process.svg"))) + +(defun spacemacs//faust-run-sentinel (process event) + "Run the program" + (start-process-shell-command "faust-run" nil + (file-name-sans-extension (buffer-file-name))) + (switch-to-buffer-other-window "faust-compile")) diff --git a/layers/+lang/faust/img/faust.png b/layers/+lang/faust/img/faust.png new file mode 100644 index 0000000000000000000000000000000000000000..c722ddcf04236c7f663a561cabf39b68e4b22acf GIT binary patch literal 11060 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;;; Code: + +(defconst faust-packages + '(company + faust-mode + yasnippet)) + +(defun faust/post-init-company () + (spacemacs|add-company-hook faust-mode)) + +(defun faust/init-faust-mode () + (use-package faust-mode + :defer t + :mode "\\.\\(dsp\\|lib\\)\\'" + :init + (progn + (spacemacs/set-leader-keys-for-major-mode 'faust-mode + "cf" 'spacemacs/faust-to-firefox + "cg" 'spacemacs/faust-to-jack-gtk + "cq" 'spacemacs/faust-to-jack-qt)))) + +(defun faust/post-init-yasnippet () + (add-hook 'faust-mode-hook 'spacemacs/load-yasnippet)) diff --git a/layers/+lang/fsharp/README.org b/layers/+lang/fsharp/README.org new file mode 100644 index 0000000..6158f65 --- /dev/null +++ b/layers/+lang/fsharp/README.org @@ -0,0 +1,44 @@ +#+TITLE: F# layer + +[[file:img/fsharp.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#packages-included][Packages Included]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + - [[#repl][REPL]] + +* Description + +This layer adds support for F# language using [[https://github.com/fsharp/fsharpbinding][fsharpbinding]]. + +* Packages Included + +- [[https://github.com/fsharp/fsharpbinding][fsharp-mode]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =fsharp= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key Bindings + +| Key Binding | Description | +|-------------+----------------------------| +| ~SPC m c c~ | Build the project | +| ~SPC m g g~ | Go to definition at point | +| ~SPC m h t~ | Show tooltip help at point | + +** REPL + +| Key Binding | Description | +|-------------+------------------------------------------------------------------| +| ~SPC m s b~ | Send buffer to the REPL | +| ~SPC m s B~ | Send buffer to the REPL and switch to the REPL in =insert state= | +| ~SPC m s i~ | Start a REPL | +| ~SPC m s p~ | Send phrase to the REPL | +| ~SPC m s P~ | Send phrase to the REPL and switch to the REPL in =insert state= | +| ~SPC m s r~ | Send region to the REPL | +| ~SPC m s R~ | Send region to the REPL and switch to the REPL in =insert state= | +| ~SPC m s s~ | Show the REPL | diff --git a/layers/+lang/fsharp/config.el b/layers/+lang/fsharp/config.el new file mode 100644 index 0000000..1930d03 --- /dev/null +++ b/layers/+lang/fsharp/config.el @@ -0,0 +1,12 @@ +;;; config.el --- fsharp Layer config File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|define-jump-handlers fsharp-mode fsharp-ac/gotodefn-at-point) diff --git a/layers/+lang/fsharp/img/fsharp.png b/layers/+lang/fsharp/img/fsharp.png new file mode 100644 index 0000000000000000000000000000000000000000..dc0aa921e1a0c9ddbce184c100042733f7aae091 GIT binary patch literal 11160 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 GQU3!oxlbGb literal 0 HcmV?d00001 diff --git a/layers/+lang/fsharp/packages.el b/layers/+lang/fsharp/packages.el new file mode 100644 index 0000000..da951ca --- /dev/null +++ b/layers/+lang/fsharp/packages.el @@ -0,0 +1,77 @@ +;;; packages.el --- F# Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq fsharp-packages + '( + fsharp-mode + ggtags + helm-gtags + )) + +(defun fsharp/init-fsharp-mode () + (use-package fsharp-mode + :defer t + :init + (progn + (setq fsharp-doc-idle-delay .2) + (spacemacs/register-repl 'fsharp-mode 'fsharp-show-subshell "F#")) + :config + (progn + + (defun spacemacs/fsharp-load-buffer-file-focus () + "Send the current buffer to REPL and switch to the REPL in + `insert state'." + (interactive) + (fsharp-load-buffer-file) + (switch-to-buffer-other-window inferior-fsharp-buffer-name) + (evil-insert-state)) + + (defun spacemacs/fsharp-eval-phrase-focus () + "Send the current phrase to REPL and switch to the REPL in + `insert state'." + (interactive) + (fsharp-eval-phrase) + (switch-to-buffer-other-window inferior-fsharp-buffer-name) + (evil-insert-state)) + + (defun spacemacs/fsharp-eval-region-focus (start end) + "Send the current phrase to REPL and switch to the REPL in + `insert state'." + (interactive "r") + (fsharp-eval-region start end) + (switch-to-buffer-other-window inferior-fsharp-buffer-name) + (evil-insert-state)) + + (spacemacs/set-leader-keys-for-major-mode 'fsharp-mode + ;; Compile + "cc" 'compile + + "fa" 'fsharp-find-alternate-file + + "ht" 'fsharp-ac/show-tooltip-at-point + + "'" 'fsharp-show-subshell + "sb" 'fsharp-load-buffer-file + "sB" 'spacemacs/fsharp-load-buffer-file-focus + "si" 'fsharp-show-subshell + "sp" 'fsharp-eval-phrase + "sP" 'spacemacs/fsharp-eval-phrase-focus + "sr" 'fsharp-eval-region + "sR" 'spacemacs/fsharp-eval-region-focus + "ss" 'fsharp-show-subshell + + "xf" 'fsharp-run-executable-file)))) + +(defun fsharp/post-init-ggtags () + (add-hook 'fsharp-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun fsharp/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'fsharp-mode)) diff --git a/layers/+lang/go/README.org b/layers/+lang/go/README.org new file mode 100644 index 0000000..7b52db6 --- /dev/null +++ b/layers/+lang/go/README.org @@ -0,0 +1,150 @@ +#+TITLE: GO layer + +[[file:img/go.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features:]] + - [[#install][Install]] + - [[#pre-requisites][Pre-requisites]] + - [[#layer][Layer]] + - [[#configuration][Configuration]] + - [[#indentation][Indentation]] + - [[#tests][Tests]] + - [[#guru][Guru]] + - [[#working-with-go][Working with Go]] + - [[#go-commands-start-with-m][Go commands (start with =m=):]] + - [[#go-guru][Go Guru]] + +* Description +This layer adds extensive support for go. + +** Features: +- gofmt/goimports on file save +- Auto-completion using [[https://github.com/nsf/gocode/tree/master/emacs][go-autocomplete]] (with the =auto-completion= layer) +- Source analysis using [[https://godoc.org/golang.org/x/tools/cmd/guru][go-guru]] +- Linting with flycheck's built-in checkers or flycheck-gometalinter +- Coverage profile visualization + +* Install +** Pre-requisites +You will need =gocode= and =godef=: + +#+BEGIN_SRC sh + go get -u -v github.com/nsf/gocode + go get -u -v github.com/rogpeppe/godef + go get -u -v golang.org/x/tools/cmd/guru + go get -u -v golang.org/x/tools/cmd/gorename + go get -u -v golang.org/x/tools/cmd/goimports +#+END_SRC + +If you wish to use =gometalinter= set the value of =go-use-gometalinter= to t: + +#+begin_src emacs-lisp + (go :variables go-use-gometalinter t) +#+end_src + +and install the tool: + +#+BEGIN_SRC sh + go get -u -v github.com/alecthomas/gometalinter + gometalinter --install --update +#+END_SRC + +For more information read [[https://github.com/alecthomas/gometalinter/blob/master/README.md][gometalinter README.md]] +and [[https://github.com/favadi/flycheck-gometalinter/blob/master/README.md][flycheck-gometalinter README.md]] + +Make sure that =gocode= executable is in your PATH. For information about +setting up =$PATH=, check out the corresponding section in the FAQ (~SPC h SPC +$PATH RET~). + +For best results, make sure that the =auto-completion= and =syntax-checking= +layers are enabled as well. + +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =go= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Configuration + +By default, go buffers are run through =gofmt= on save. To use a different +formatter, set the value of =gofmt-command=, e.g. + +#+begin_src emacs-lisp + (setq gofmt-command "goimports") +#+end_src + +or + +#+begin_src emacs-lisp + (go :variables gofmt-command "goimports") +#+end_src + +** Indentation +By default, the tab width in Go mode is 8 spaces. To use a different value set +the layer variable =go-tab-width=, e.g. + +#+begin_src emacs-lisp + (go :variables go-tab-width 4) +#+end_src + +** Tests +If you're using =gocheck= in your project you can use the +=go-use-gocheck-for-testing= variable to enable suite testing and to get single +function testing to work. + +=go-coverage-display-buffer-func= controls how =go-coverage= should display +the coverage buffer. See [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Choosing-Window.html][=display-buffer=]] for a list of possible functions. +The default value is =display-buffer-reuse-window=. + +** Guru + +Go Oracle has been deprecated as of October 1, 2016, it's replacement is =go-guru=. + +If you would like to use the =goguru= bindings in your work, you will need to +install it, and in your project you will need to set the scope with ~SPC m f o~. +The scope is a comma separated set of packages, and =go='s recursive operator is +supported. In addition, you can prefix with =-= to exclude a package from +searching. + +In addition, =GOPATH= must be set prior to =go-guru= initialization. + +* Working with Go +** Go commands (start with =m=): + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------------------------| +| ~SPC m h h~ | godoc at point | +| ~SPC m i g~ | goto imports | +| ~SPC m i a~ | add import | +| ~SPC m i r~ | remove unused import | +| ~SPC m e b~ | go-play buffer | +| ~SPC m e r~ | go-play region | +| ~SPC m e d~ | download go-play snippet | +| ~SPC m x x~ | run "go run" for the current 'main' package | +| ~SPC m g a~ | jump to matching test file or back from test to code file | +| ~SPC m g c~ | open a clone of the current buffer with a coverage info (=go tool cover -h= for help) | +| ~SPC m g g~ | go jump to definition | +| ~SPC m r n~ | go rename | +| ~SPC m t p~ | run "go test" for the current package | +| ~SPC m t P~ | run "go test" for the current package and all packages under it | +| ~SPC m t t~ | run "go test" for the function you're currently in (while you're in a _.test.go file) | +| ~SPC m t s~ | run "go test" for the suite you're currently in (requires gocheck) | + +** Go Guru + +| Key Binding | Description | +|-------------+------------------------------------------------------| +| ~SPC m f d~ | go-guru describe symbol at point | +| ~SPC m f f~ | go-guru show free variables | +| ~SPC m f i~ | go-guru show implements relation | +| ~SPC m f c~ | go-guru show channel sends/receives | +| ~SPC m f r~ | go-guru show referrers | +| ~SPC m f j~ | go-guru jump to symbol definition | +| ~SPC m f p~ | go-guru show what the select expression points to | +| ~SPC m f s~ | go-guru show callstack | +| ~SPC m f e~ | go-guru show possible contants/types for error value | +| ~SPC m f <~ | go-guru show possible callers | +| ~SPC m f >~ | go-guru show call targets | +| ~SPC m f o~ | go-guru set analysis scope | diff --git a/layers/+lang/go/config.el b/layers/+lang/go/config.el new file mode 100644 index 0000000..0332cb1 --- /dev/null +++ b/layers/+lang/go/config.el @@ -0,0 +1,25 @@ +;;; packages.el --- Go Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|defvar-company-backends go-mode) + +(spacemacs|define-jump-handlers go-mode godef-jump) + +(defvar go-use-gocheck-for-testing nil + "If using gocheck for testing when running the tests -check.f will be used instead of -run to specify the test that will be ran. Gocheck is mandatory for testing suites.") + +(defvar go-tab-width 8 + "Set the `tab-width' in Go mode. Default is 8.") + +(defvar go-use-gometalinter nil + "Use gometalinter if the variable has non-nil value.") diff --git a/layers/+lang/go/funcs.el b/layers/+lang/go/funcs.el new file mode 100644 index 0000000..8142536 --- /dev/null +++ b/layers/+lang/go/funcs.el @@ -0,0 +1,32 @@ +;;; funcs.el --- Go Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun load-gopath-file(gopath name) + "Search for NAME file in all paths referenced in GOPATH." + (let* ((sep (if (spacemacs/system-is-mswindows) ";" ":")) + (paths (split-string gopath sep)) + found) + (loop for p in paths + for file = (concat p name) when (file-exists-p file) + do + (load-file file) + (setq found t) + finally return found))) + +(defun spacemacs//go-enable-gometalinter () + "Enable `flycheck-gometalinter' and disable overlapping `flycheck' linters." + (setq flycheck-disabled-checkers '(go-gofmt + go-golint + go-vet + go-build + go-test + go-errcheck)) + (flycheck-gometalinter-setup)) diff --git a/layers/+lang/go/img/go.png b/layers/+lang/go/img/go.png new file mode 100644 index 0000000000000000000000000000000000000000..4ac1d48fc7fb6b9c0c7fe5260f9b228451ba06a4 GIT binary patch literal 44505 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" 'go-guru-callees + "fo" 'go-guru-set-scope)) + +(defun go/init-go-rename() + (use-package go-rename + :init + (spacemacs/declare-prefix-for-mode 'go-mode "mr" "rename") + (spacemacs/set-leader-keys-for-major-mode 'go-mode "rn" 'go-rename))) + +(defun go/init-flycheck-gometalinter() + (use-package flycheck-gometalinter + :defer t + :init + (add-hook 'go-mode-hook 'spacemacs//go-enable-gometalinter t))) + +(defun go/post-init-ggtags () + (add-hook 'go-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun go/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'go-mode)) diff --git a/layers/+lang/graphviz/README.org b/layers/+lang/graphviz/README.org new file mode 100644 index 0000000..e09abe8 --- /dev/null +++ b/layers/+lang/graphviz/README.org @@ -0,0 +1,34 @@ +#+TITLE: graphviz layer + +[[file:img/graphviz.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#configuration][Configuration]] + - [[#key-bindings][Key bindings]] + +* Description +This contains a forked version of [[https://github.com/ppareit/graphviz-dot-mode][graphviz-dot-mode]] that enables a live-reload +type work flow for editing `.dot` files. When live-preview is enabled, saving +the file will automatically trigger a compilation and reload of the image buffer +associated with the file. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =graphviz= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Configuration +If the live preview is not always updating the rendered image properly, you can +try to adjust the value of =graphviz-dot-revert-delay= higher to give the +compiler more time to finish generating the file before reverting the buffer. + +* Key bindings + +| Key Binding | Description | +|-------------+--------------------------------------| +| ~SPC m ,~ | Preview file | +| ~SPC m =~ | Indent graph | +| ~SPC m t~ | Toggle live-preview | +| ~SPC m c~ | Set compile command and compile file | diff --git a/layers/+lang/graphviz/img/graphviz.png b/layers/+lang/graphviz/img/graphviz.png new file mode 100644 index 0000000000000000000000000000000000000000..2d452a4f6d1296afac1c49b3e8d34e100dee88ac GIT binary patch literal 81173 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defconst graphviz-packages + '((graphviz-dot-mode :location (recipe :fetcher github + :repo "luxbock/graphviz-dot-mode")) + org + smartparens)) + +(defun graphviz/init-graphviz-dot-mode () + (use-package graphviz-dot-mode + :mode (("\\.diag\\'" . graphviz-dot-mode) + ("\\.blockdiag\\'" . graphviz-dot-mode) + ("\\.nwdiag\\'" . graphviz-dot-mode) + ("\\.rackdiag\\'" . graphviz-dot-mode) + ("\\.dot\\'" . graphviz-dot-mode) + ("\\.gv\\'" . graphviz-dot-mode)) + :config + (progn + (spacemacs|add-toggle graphviz-live-reload + :status graphviz-dot-auto-preview-on-save + :on (graphviz-turn-on-live-preview) + :off (graphviz-turn-off-live-preview) + :documentation "Enable Graphviz live reload.") + (spacemacs/set-leader-keys-for-major-mode 'graphviz-dot-mode + "=" 'graphviz-dot-indent-graph + "c" 'compile + "t" 'spacemacs/toggle-graphviz-live-reload) + (when dotspacemacs-major-mode-emacs-leader-key + (spacemacs/set-leader-keys-for-major-mode 'graphviz-dot-mode + dotspacemacs-major-mode-emacs-leader-key 'graphviz-dot-preview)) + (when dotspacemacs-major-mode-leader-key + (spacemacs/set-leader-keys-for-major-mode 'graphviz-dot-mode + dotspacemacs-major-mode-leader-key 'graphviz-dot-preview))))) + +(defun graphviz/post-init-smartparens () + (spacemacs|use-package-add-hook graphviz-dot-mode + :post-config + (progn + ;; allow smartparens to work properly + (define-key graphviz-dot-mode-map "{" nil) + (define-key graphviz-dot-mode-map "}" nil)))) + +(defun graphviz/post-init-org () + (spacemacs|use-package-add-hook org + :post-config + (progn + (add-to-list 'org-babel-load-languages '(dot . t)) + ;; replace fundamental mode by graphiz one + (setq org-src-lang-modes + (append '(("dot" . graphviz-dot)) + (delete '("dot" . fundamental) org-src-lang-modes)))))) diff --git a/layers/+lang/haskell/README.org b/layers/+lang/haskell/README.org new file mode 100644 index 0000000..6054f09 --- /dev/null +++ b/layers/+lang/haskell/README.org @@ -0,0 +1,522 @@ +#+TITLE: Haskell layer + +[[file:img/haskell.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features:]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#dependencies][Dependencies]] + - [[#setup-path][Setup PATH]] + - [[#completion-support][Completion support]] + - [[#company-ghci][=company-ghci=]] + - [[#intero][=intero=]] + - [[#ghc-mod][=ghc-mod=]] + - [[#optional-extras][Optional extras]] + - [[#structured-haskell-mode][structured-haskell-mode]] + - [[#hindent][hindent]] + - [[#key-bindings][Key bindings]] + - [[#documentation][Documentation]] + - [[#debug][Debug]] + - [[#debug-buffer][Debug Buffer]] + - [[#repl][REPL]] + - [[#intero-repl][Intero REPL]] + - [[#cabal-commands][Cabal commands]] + - [[#cabal-files][Cabal files]] + - [[#refactor][Refactor]] + - [[#ghc-mod-1][Ghc-mod]] + - [[#insert-template][Insert template]] + - [[#syntax-checking][Syntax checking]] + - [[#flycheck][Flycheck]] + - [[#hlint][HLint]] + - [[#ghc-mod-2][ghc-mod]] + - [[#interactive-haskell-mode][Interactive haskell-mode]] + - [[#flymake][Flymake]] + - [[#troubleshooting][Troubleshooting]] + - [[#faq][FAQ]] + - [[#the-repl-doesnt-work][The REPL doesn't work]] + - [[#the-repl-is-stuck][The REPL is stuck]] + - [[#i-am-using-stack-and-ghc-mod-but-ghc-mod-doesnt-work][I am using =stack= and =ghc-mod=, but =ghc-mod= doesn't work]] + - [[#ghc-mod-doesnt-work][=ghc-mod= doesn't work]] + - [[#indentation-doesnt-reset-when-pressing-return-after-an-empty-line][Indentation doesn't reset when pressing return after an empty line]] + - [[#flycheck-displays-hlint-warnings-but-not-errors][Flycheck displays HLint warnings but not errors]] + - [[#i-can-see-highlighted-errors-but-they-dont-appear-in-the-error-list][I can see highlighted errors but they don't appear in the error list]] + - [[#flycheck-doesnt-work][Flycheck doesn't work]] + - [[#flycheck-doesnt-work-with-stack][Flycheck doesn't work with =stack=]] + - [[#the-stack-build-directory-is-wrong][The stack build directory is wrong]] + - [[#the-project-root-directory-is-not-set-properly][The Project root directory is not set properly]] + - [[#haskell-mode-commands-dont-work][haskell-mode commands don't work]] + - [[#ghc-mod-and-haskell-mode-commands-overlap-how-do-i-know-which-command-belongs-to-what][=ghc-mod= and =haskell-mode= commands overlap. How do I know which command belongs to what?]] + - [[#some-commands-start-with-ghc--and-some-with-haskell--what-does-that-mean][Some commands start with =ghc-= and some with =haskell-=. What does that mean?]] + +* Description +This layer adds support for the [[https://www.haskell.org/][Haskell]] language. + +** Features: +- syntax highlighting for [[https://github.com/haskell/haskell-mode][haskell source]], [[https://github.com/haskell/haskell-mode][cabal files]], [[https://github.com/bgamari/cmm-mode][C-- source]], +- auto-completion with one of selected backends (=intero=, =ghci= or =ghc-mod=). + +*This layer is in construction, it needs your contributions and bug reports.* + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =haskell= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Dependencies +This layer requires some [[https://www.haskell.org/cabal/][cabal]] packages: +- =apply-refact= (required by =hlint-refactor=) +- =hlint= (required by =hlint-refactor=) +- =stylish-haskell= (optional for =haskell-mode=) +- =hasktags= (optional) +- =hoogle= (optional for =haskell-mode= and =helm-hoogle=) +- =ghc-mod= (optional for completion) +- =intero= (optional for completion) + +To install them, use following command (or the =stack= equivalent): + +#+BEGIN_SRC sh +$ cabal install apply-refact hlint stylish-haskell hasktags hoogle +#+END_SRC + +** Setup PATH +First of all make sure that your =$PATH= contains the installation path for +Haskell tools like =ghc=, =ghci= etc. It depends on how you have installed +=ghc=, but you can always check it by running =which ghc= in your terminal. +=Stack= users should add only the installation path of =stack= itself. Usually +it's =~/.local/bin=. + +Then make sure that your =$PATH= contains the installation path for =cabal= +packages. If you are using =cabal= it should be =~/.cabal/bin= or +=~/Library/Haskell/bin= (for 'Haskell for Mac' users). If you +are using =stack= then it should be =~/.local/bin=. + +For information about setting up =$PATH=, check out the corresponding section in +the FAQ (~SPC h SPC $PATH RET~). + +** Completion support +This layer provides several completion backends - =intero=, =ghci= and +=ghc-mod=. By default =ghci= (=company-ghci=) is used as it requires no +dependencies and works both with =stack= and pure =cabal= projects. In order to +manually set completion backend set value of =haskell-completion-backend=. Note +that in order to enable completion you have to enable =auto-completion= layer as +well. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers + '(auto-completion + (haskell :variables haskell-completion-backend 'intero))) +#+END_SRC + +*** =company-ghci= +[[https://github.com/juiko/company-ghci][company-ghci]] communicates directly with =ghci= in order to provide completion. In +order to use it you have to call =haskell-process-load-or-reload= (=SPC s b=). + +*** =intero= +=Intero= works only for =stack= users. You can manually install =intero= executable by +calling =stack install intero=, but this step is optional as =Intero= installs +itself. + +*** =ghc-mod= +[[http://www.mew.org/~kazu/proj/ghc-mod/][ghc-mod]] enhances =haskell-mode= with for example code completion, templates, +case-splitting and much more. In order to use it you need to install the +executable with =cabal install ghc-mod= (or =stack= equivalent). + +=Stack= users also should make sure that =dist/setup-config= doesn't exist in the +project root. As it will confuse =ghc-mod=. For more troubleshooting, checkout +this [[https://github.com/kazu-yamamoto/ghc-mod/wiki#known-issues-related-to-stack][document]]. + +Also note that =ghc-mod= works only with =GHC= version that was used to build +=ghc-mod=. You can check which version was used by calling =ghc-mod --version=. + +** Optional extras +The Haskell layer supports some extra features that can be enabled through layer +variables. + +*** structured-haskell-mode +Currently there is no support for [[https://github.com/chrisdone/structured-haskell-mode][structured-haskell-mode]], since it doesn't play +very well with non-emacs editing style ([[https://github.com/chrisdone/structured-haskell-mode/issues/81][structured-haskell-mode/#81]]). Emacs +editing style users might easily enable it by adding =structured-haskell-mode= to +list of =dotspacemacs-additional-packages= in your =.spacemacs= file. For more +installation instructions, please refer to the official documentation at +[[https://github.com/chrisdone/structured-haskell-mode#features][structured-haskell-mode]] page. In case you are non-emacs editing style user and +still want to use =structured-haskell-mode= - use it at your own risk. + +Any contributions that will help to solve issues with =structured-haskell-mode= +are warmly welcome! + +*** hindent +[[https://github.com/chrisdone/hindent][hindent]] is an extensible Haskell pretty printer, which let's you +reformat your code. You need to install the executable with =cabal +install hindent= or =stack install hindent= + +To enable it you have to set the variable =haskell-enable-hindent-style= to a +supported style. The available styles are: +- fundamental +- johan-tibell +- chris-done +- gibiansky + +See examples [[https://github.com/chrisdone/hindent#example][here]]. + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((haskell :variables haskell-enable-hindent-style "johan-tibell"))) +#+END_SRC + +* Key bindings +All Haskell specific bindings are prefixed with the major-mode leader +~SPC m~. + +Top-level commands are prefixed by ~SPC m~: + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------| +| ~SPC m g g~ | go to definition or tag | +| ~SPC m g i~ | cycle the Haskell import lines or return to point (with prefix arg) | +| ~SPC m F~ | format buffer using haskell-stylish | +| ~SPC m f~ | format declaration using hindent (if enabled) | + +** Documentation +Documentation commands are prefixed by ~SPC m h~ + +| Key Binding | Description | +|-------------+----------------------------------------------------------------------------| +| ~SPC m h d~ | find or generate Haddock documentation for the identifier under the cursor | +| ~SPC m h f~ | do a helm-hoogle lookup | +| ~SPC m h h~ | do a Hoogle lookup | +| ~SPC m h H~ | do a local Hoogle lookup | +| ~SPC m h i~ | gets information for the identifier under the cursor | +| ~SPC m h t~ | gets the type of the identifier under the cursor | +| ~SPC m h y~ | do a Hayoo lookup | + +** Debug +Debug commands are prefixed by ~SPC m d~: + +| Key Binding | Description | +|-------------+--------------------------------------------| +| ~SPC m d a~ | abandon current process | +| ~SPC m d b~ | insert breakpoint at function | +| ~SPC m d B~ | delete breakpoint | +| ~SPC m d c~ | continue current process | +| ~SPC m d d~ | start debug process, needs to be run first | +| ~SPC m d n~ | next breakpoint | +| ~SPC m d N~ | previous breakpoint | +| ~SPC m d p~ | previous breakpoint | +| ~SPC m d r~ | refresh process buffer | +| ~SPC m d s~ | step into the next function | +| ~SPC m d t~ | trace the expression | + +** Debug Buffer + +| Key Binding | Description | +|-------------+---------------------------------------------| +| ~RET~ | select object at the point | +| ~a~ | abandon current computation | +| ~b~ | break on function | +| ~c~ | continue the current computation | +| ~d~ | delete object at the point | +| ~n~ | go to next step to inspect bindings | +| ~N~ or ~p~ | go to previous step to inspect the bindings | +| ~r~ | refresh the debugger buffer | +| ~s~ | step into the next function | +| ~t~ | trace the expression | + +** REPL +REPL commands are prefixed by ~SPC m s~: + +| Key Binding | Description | +|-------------+-------------------------------------------------| +| ~SPC m s b~ | load or reload the current buffer into the REPL | +| ~SPC m s c~ | clear the REPL | +| ~SPC m s s~ | show the REPL without switching to it | +| ~SPC m s S~ | show and switch to the REPL | + +** Intero REPL +Intero REPL commands are prefixed by ~SPC m i~: + +| Key Binding | Description | +|-------------+---------------------------------------------------------------| +| ~SPC m i c~ | change directory in the backend process | +| ~SPC m i d~ | reload the module =DevelMain= and then run =DevelMain.update= | +| ~SPC m i k~ | stop the current worker process and kill its associated | +| ~SPC m i l~ | list hidden process buffers created by =intero= | +| ~SPC m i r~ | restart the process with the same configuration as before | +| ~SPC m i t~ | set the targets to use for stack =ghci= | + +** Cabal commands +Cabal commands are prefixed by ~SPC m c~: + +| Key Binding | Description | +|-------------+------------------------------------------------------------| +| ~SPC m c a~ | cabal actions | +| ~SPC m c b~ | build the current cabal project, i.e. invoke =cabal build= | +| ~SPC m c c~ | compile the current project, i.e. invoke =ghc= | +| ~SPC m c v~ | visit the cabal file | + +** Cabal files +This commands are available in a cabal file. + +| Key Binding | Description | +|-------------+---------------------------------------------| +| ~SPC m d~ | add a dependency to the project | +| ~SPC m b~ | go to benchmark section | +| ~SPC m e~ | go to executable section | +| ~SPC m t~ | go to test-suite section | +| ~SPC m m~ | go to exposed modules | +| ~SPC m l~ | go to libary section | +| ~SPC m n~ | go to next subsection | +| ~SPC m p~ | go to previous subsection | +| ~SPC m s c~ | clear the REPL | +| ~SPC m s s~ | show the REPL without switching to it | +| ~SPC m s S~ | show and switch to the REPL | +| ~SPC m N~ | go to next section | +| ~SPC m P~ | go to previous section | +| ~SPC m f~ | find or create source-file under the cursor | + +** Refactor +Refactor commands are prefixed by ~SPC m r~: + +| Key Binding | Description | +|-------------+---------------------------------------------------| +| ~SPC m r b~ | apply all HLint suggestions in the current buffer | +| ~SPC m r r~ | apply the HLint suggestion under the cursor | +| ~SPC m r s~ | list all Intero suggestions | + +Only some of the HLint suggestions can be applied. + +To apply the intero suggestions, press `C-c C-c` when the window is open, which +is also shown in the window that appears. + +** Ghc-mod +These commands are only available when ghc-mod is enabled. + +For more info, see +http://www.mew.org/~kazu/proj/ghc-mod/en/emacs.html + +ghc-mod commands are prefixed by ~SPC m m~: + +| Key Binding | Description | +|-------------+-------------------------------------------| +| ~SPC t~ | insert template | +| ~SPC m m u~ | insert template with holes | +| ~SPC m m a~ | select one of possible cases (~ghc-auto~) | +| ~SPC m m f~ | replace a hole (~ghc-refine~) | +| ~SPC m m e~ | expand template haskell | +| ~SPC m m n~ | go to next type hole | +| ~SPC m m p~ | go to previous type hole | +| ~SPC m m >~ | make indent deeper | +| ~SPC m m <~ | make indent shallower | + +*** Insert template +~SPC m m t~ inserts a template. What this means is that in the beginning of a +buffer, =module Foo where= is inserted. On a function without signature, the +inferred type is inserted. On a symbol =foo= without definition, =foo = +undefined= is inserted or a proper module is imported. ~SPC m m u~ inserts a +hole in this case. On a variable, the case is split. When checking with hlint, +original code is replaced with hlint's suggestion if possible. + +* Syntax checking +At the moment there are four components which can check the syntax and indicates +somehow error and warnings in the code. Those components are + +- flycheck +- hlint (via flycheck) +- ghc-mod +- haskell-mode interactive + +As all these components can be active at the same time, it can be tricky to know +which component is displaying which message, especially when they disagree or +one is not working. Only flycheck errors (ghc and hlint) are displayed in the +error list and can be navigated using the standard spacemacs key bindings (under +~SPC e~) even though errors from other modes might highlight the actual buffer. + +** Flycheck +This is the standard spacemacs way to do syntax checking and the most elaborate. +You need the syntax-checking layer to enable this. Please the documentation for +that layer on how to interact with flycheck. + +Flycheck has different Haskell checkers: =haskell-ghc=, =haskell-stack-ghc= and +=haskell-hlint=. Normally it can automatically detect the best one to use, but +if it doesn't work, you can change it using ~SPC e s~. + +** HLint +HLint is a linter for Haskell. It doesn't detect errors (as long as it can parse +the file) but bad coding style and code smell. The HLint checker is called +*after* the flycheck GHC checker. + +** ghc-mod +Ghc-mod, when enabled, also does syntax checking. It doesn't highlight errors +but instead displays an exclamation point in the fringe. You can navigate +between errors using =ghc-goto-next-error= (~M-n~) and =ghc-goto-prev-error= +(~M-p~). + +** Interactive haskell-mode +Finally, interactive haskell-mode (~SPC m s b~) also displays errors. These +errors can be navigated from the interactive buffer (by clicking on the error) +or using =haskell-goto-next-error= (~M-n~) and =haskell-goto-prev-error= +(~M-p~). + +** Flymake +An alternative to syntax checking is to build your project using +=flymake-compile=. It doesn't highlight error in the buffer but is more +reliable. The error navigation is similar to interactive haskell-mode. + +** Troubleshooting +Flycheck and ghc-mod can fail silently for miscellaneous reasons. See the [[FAQ]] +for troubleshooting. + +* FAQ +** The REPL doesn't work +Usually =haskell-mode= is great at figuring out which interactive process to +bring up. But if you are experiencing problems with it you can help +=haskell-mode= by setting =haskell-process-type= as in following code: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((haskell :variables haskell-process-type 'stack-ghci))) +#+END_SRC + +Available options are: + +- ghci +- cabal-repl +- cabal-dev +- cabal-ghci +- stack-ghci + +** The REPL is stuck +Make sure that when you are typing anything in REPL there is a space between +what you type and =λ>=. When there is no space - REPL will behave as if it's +stuck. Usually, when you enter normal state, cursor is moved back, so there is +no required space when you switch to insert mode. There is possible workaround - +just add following snippet to your =dotspacemacs/user-config= function: + +#+BEGIN_SRC emacs-lisp +(when (configuration-layer/package-usedp 'haskell) + (add-hook 'haskell-interactive-mode-hook + (lambda () + (setq-local evil-move-cursor-back nil)))) +#+END_SRC + +It will make cursor stay at the right place in the REPL buffer when you enter +normal state. Which in most cases helps you to avoid the problem with 'stuck' +REPL. + +Also, some users might want to start REPL in insert mode. For this to happen you +could place following snippet in your =dotspacemacs/user-config= function: + +#+BEGIN_SRC emacs-lisp +(when (configuration-layer/package-usedp 'haskell) + (defadvice haskell-interactive-switch (after spacemacs/haskell-interactive-switch-advice activate) + (when (eq dotspacemacs-editing-style 'vim) + (call-interactively 'evil-insert)))) +#+END_SRC + +** I am using =stack= and =ghc-mod=, but =ghc-mod= doesn't work +Make sure that =dist= directory doesn't exist in your project root. So if it +exists, just remove it and try again. + +** =ghc-mod= doesn't work + +First of all - make sure that the version of =ghc= matches the version of =ghc= that +was used to build =ghc-mod=. To get the latter call =ghc-mod --version= in terminal. +If they don't match you have to rebuild =ghc-mod=. + +=Stack= provides ability to use different =ghc= versions across different projects. +In case you are using this feature you have to rebuild =ghc-mod= quite often. If +you use =ghc-mod= only for completion and don't want to rebuild =ghc-mod= every time +you switch project you'd better disable =ghc-mod= support, so =company-ghci= will be +used for completion. + +The second thing to do if it's still not working - call =ghc-mod debug= in the +root of project you are currently working on. Make sure that it shows no errors. +If there are errors you can't solve - it's better to report them [[https://github.com/DanielG/ghc-mod][upstream]]. + +** Indentation doesn't reset when pressing return after an empty line +This is the intended behavior in =haskell-indentation-mode=. If you want to +reset indentation when pressing return after an empty line, add the following +snippet into your =dotspacemacs/user-config= function. + +#+BEGIN_SRC emacs-lisp +(defun haskell-indentation-advice () + (when (and (< 1 (line-number-at-pos)) + (save-excursion + (forward-line -1) + (string= "" (s-trim (buffer-substring (line-beginning-position) (line-end-position)))))) + (delete-region (line-beginning-position) (point)))) + +(advice-add 'haskell-indentation-newline-and-indent + :after 'haskell-indentation-advice) +#+END_SRC + +** Flycheck displays HLint warnings but not errors +The HLint checker is called *after* normal flycheck checker even if the checker +fails. Check the [[Flycheck doesn't work]] section. + +** I can see highlighted errors but they don't appear in the error list +The error list is only set by flycheck. You are probably seeing errors +highlighted by either ghc-mode or haskell-mode. Check the [[Flycheck doesn't work]] +section. + +** Flycheck doesn't work +You can check what is wrong with flycheck with the =flycheck-compile= command. +This will show you the exact command line used and its output. + +If you are using stack, check the [[Flycheck doesn't work with =stack=]] section. + +** Flycheck doesn't work with =stack= +First check that flycheck uses the correct checker and all the paths are +properly configured using =flycheck-verify-setup= (~SPC e v~). You can force the +checker with =flycheck-select-checker= (~SPC e s~) to ensure it uses +=haskell-stack-ghc=. If it still doesn't work, it could be one of the following +problems: + +- The stack build directory is wrong +- The project root is not set properly + +*** The stack build directory is wrong +The path to the build directory containing some generated files is normally +under =.stack-work/install//Cabal-/build=. + +However, the version of the cabal library used by stack to generate the +directory name is not the version of the cabal library installed by stack, but +the version of cabal associated to the GHC version. This error can happen after +upgrading cabal or cabal-install. To check if this is the problem, compare the +path name of the build path used by flycheck using =flycheck-compile= and +compare it to to the actual path in the =.stack-work= directory. If they are +different you need to reinstall ghc using the command =stack setup +--upgrade-cabal=. + +*** The Project root directory is not set properly +Flycheck launches the GHC command not from the project root directory but from +the the directory of the file being checked. This is normally not a problem as +all the paths are set properly, however it could be a problem if some template +Haskell functions use relative paths (e.g. in Yesod scaffolded projects). + +Until it's fixed in flycheck the workaround is to the wrap the stack command to +run all subcommands from the project root directory. You can do so with the +following script: + +#+BEGIN_SRC bash +#!/bin/bash +cd `stack --project-root` +stack $* +#+END_SRC + +Make sure you set =flycheck-haskell-stack-ghc-executable= to this script. + +** haskell-mode commands don't work +Some (most of) the haskell-mode commands only works when haskell-mode is in +interactive mode, i.e. as a interactive session associated to it. Load it using +~SPC m s b~. + +** =ghc-mod= and =haskell-mode= commands overlap. How do I know which command belongs to what? +ghc-mod commands are prefixed with =ghc-=, haskell-mode ones are prefixed with +=haskell-=. + +** Some commands start with =ghc-= and some with =haskell-=. What does that mean? +Commands starting with =ghc-= are ghc-mod commands. Commands starting with +=haskell-= are haskell-mode commands. diff --git a/layers/+lang/haskell/config.el b/layers/+lang/haskell/config.el new file mode 100644 index 0000000..2a1a107 --- /dev/null +++ b/layers/+lang/haskell/config.el @@ -0,0 +1,28 @@ +;;; config.el --- Haskell Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Bjarke Vad Andersen +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(setq haskell-modes '(haskell-mode literate-haskell-mode)) + +(spacemacs|defvar-company-backends haskell-mode) +(spacemacs|defvar-company-backends haskell-cabal-mode) +(spacemacs|defvar-company-backends intero-repl-mode) + +(spacemacs|define-jump-handlers haskell-mode haskell-mode-jump-to-def-or-tag) + +(defvar haskell-completion-backend 'ghci + "Completion backend used by company. +Available options are `ghci', `intero' and `ghc-mod'. Default is +`ghci'.") + +(defvar haskell-enable-hindent-style nil + "Style to use for formatting with hindent; available are: fundamental johan-tibell chris-done gibiansky. If nil hindent is disabled.") diff --git a/layers/+lang/haskell/funcs.el b/layers/+lang/haskell/funcs.el new file mode 100644 index 0000000..065e812 --- /dev/null +++ b/layers/+lang/haskell/funcs.el @@ -0,0 +1,101 @@ +;;; funcs.el --- Haskell Layer funcs File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs-haskell//setup-completion-backend () + "Conditionally setup haskell completion backend." + (unless (eq haskell-completion-backend 'ghc-mod) + (add-hook 'haskell-mode-hook 'interactive-haskell-mode)) + (when (configuration-layer/package-usedp 'company) + (pcase haskell-completion-backend + (`ghci (spacemacs-haskell//setup-ghci)) + (`ghc-mod (spacemacs-haskell//setup-ghc-mod)) + (`intero (spacemacs-haskell//setup-intero))))) + +(defun spacemacs-haskell//setup-ghci () + (add-to-list 'company-backends-haskell-mode + '(company-ghci company-dabbrev-code company-yasnippet))) + +(defun spacemacs-haskell//setup-ghc-mod () + (add-to-list 'company-backends-haskell-mode + '(company-ghc company-dabbrev-code company-yasnippet)) + (ghc-init) + (dolist (mode haskell-modes) + (spacemacs/declare-prefix-for-mode mode "mm" "haskell/ghc-mod") + (spacemacs/set-leader-keys-for-major-mode mode + "mt" 'ghc-insert-template-or-signature + "mu" 'ghc-initial-code-from-signature + "ma" 'ghc-auto + "mf" 'ghc-refine + "me" 'ghc-expand-th + "mn" 'ghc-goto-next-hole + "mp" 'ghc-goto-prev-hole + "m>" 'ghc-make-indent-deeper + "m<" 'ghc-make-indent-shallower + "hi" 'ghc-show-info + "ht" 'ghc-show-type)) + (when (configuration-layer/package-usedp 'flycheck) + ;; remove overlays from ghc-check.el if flycheck is enabled + (set-face-attribute 'ghc-face-error nil :underline nil) + (set-face-attribute 'ghc-face-warn nil :underline nil))) + +(defun spacemacs-haskell//setup-intero () + (add-to-list 'company-backends-haskell-mode + '(company-intero company-dabbrev-code company-yasnippet)) + (push 'intero-goto-definition spacemacs-jump-handlers) + (intero-mode) + (dolist (mode haskell-modes) + (spacemacs/set-leader-keys-for-major-mode mode + "hi" 'intero-info + "ht" 'intero-type-at + "hT" 'haskell-intero/insert-type + "rs" 'intero-apply-suggestions + "sb" 'intero-repl-load)) + + (dolist (mode (cons 'haskell-cabal-mode haskell-modes)) + (spacemacs/set-leader-keys-for-major-mode mode + "sc" nil + "ss" 'haskell-intero/display-repl + "sS" 'haskell-intero/pop-to-repl)) + + (dolist (mode (append haskell-modes '(haskell-cabal-mode intero-repl-mode))) + (spacemacs/declare-prefix-for-mode mode "mi" "haskell/intero") + (spacemacs/set-leader-keys-for-major-mode mode + "ic" 'intero-cd + "id" 'intero-devel-reload + "ik" 'intero-destroy + "il" 'intero-list-buffers + "ir" 'intero-restart + "it" 'intero-targets)) + + (evil-define-key '(insert normal) intero-mode-map + (kbd "M-.") 'intero-goto-definition)) + + +;; Intero functions + +(defun haskell-intero/insert-type () + (interactive) + (intero-type-at :insert)) + +(defun haskell-intero/display-repl (&optional prompt-options) + (interactive "P") + (let ((buffer (intero-repl-buffer prompt-options))) + (unless (get-buffer-window buffer 'visible) + (display-buffer buffer)))) + +(defun haskell-intero/pop-to-repl (&optional prompt-options) + (interactive "P") + (pop-to-buffer (intero-repl-buffer prompt-options))) + +(defun haskell-intero//preserve-focus (f &rest args) + (let ((buffer (current-buffer))) + (apply f args) + (pop-to-buffer buffer))) diff --git a/layers/+lang/haskell/img/haskell.png b/layers/+lang/haskell/img/haskell.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5cb55933430e6e5dd3691bb04415571b2bd96d GIT binary patch literal 5824 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 ZLu3o-$6qi%GohV^80eT{UuZew{|DTkt@{7~ literal 0 HcmV?d00001 diff --git a/layers/+lang/haskell/packages.el b/layers/+lang/haskell/packages.el new file mode 100644 index 0000000..919be6c --- /dev/null +++ b/layers/+lang/haskell/packages.el @@ -0,0 +1,288 @@ +;;; packages.el --- Haskell Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq haskell-packages + '( + cmm-mode + company + (company-cabal :toggle (configuration-layer/package-usedp 'company)) + company-ghci + company-ghc + flycheck + (flycheck-haskell :toggle (configuration-layer/package-usedp 'flycheck)) + ggtags + ghc + haskell-mode + haskell-snippets + helm-gtags + (helm-hoogle :toggle (configuration-layer/package-usedp 'helm)) + hindent + hlint-refactor + intero + )) + +(defun haskell/init-cmm-mode () + (use-package cmm-mode + :defer t)) + +(defun haskell/post-init-company () + (spacemacs|add-company-hook haskell-mode) + (spacemacs|add-company-hook haskell-cabal-mode) + (when (eq haskell-completion-backend 'intero) + (spacemacs|add-company-hook intero-repl-mode))) + +(defun haskell/init-company-cabal () + (use-package company-cabal + :if (configuration-layer/package-usedp 'company) + :defer t + :init + (push '(company-cabal) + company-backends-haskell-cabal-mode))) + +(defun haskell/init-company-ghci () + (use-package company-ghci + :defer t)) + +(defun haskell/init-company-ghc () + (use-package company-ghc + :defer t)) + +(defun haskell/post-init-ggtags () + (add-hook 'haskell-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun haskell/init-ghc () + (use-package ghc + :defer t)) + +(defun haskell/init-intero () + (use-package intero + :defer t + :config + (progn + (spacemacs|diminish intero-mode " λ" " \\") + (advice-add 'intero-repl-load + :around #'haskell-intero//preserve-focus)))) + +(defun haskell/init-helm-hoogle () + (use-package helm-hoogle + :defer t + :init + (dolist (mode haskell-modes) + (spacemacs/set-leader-keys-for-major-mode mode "hf" 'helm-hoogle)))) + +(defun haskell/post-init-flycheck () + (spacemacs/add-flycheck-hook 'haskell-mode)) + +(defun haskell/init-flycheck-haskell () + (use-package flycheck-haskell + :commands flycheck-haskell-configure + :init (add-hook 'flycheck-mode-hook 'flycheck-haskell-configure))) + +(defun haskell/init-haskell-mode () + (use-package haskell-mode + :defer t + :init + (progn + (add-hook 'haskell-mode-local-vars-hook + #'spacemacs-haskell//setup-completion-backend) + + (defun spacemacs//force-haskell-mode-loading () + "Force `haskell-mode' loading when visiting cabal file." + (require 'haskell-mode)) + (add-hook 'haskell-cabal-mode-hook + 'spacemacs//force-haskell-mode-loading) + + (setq + ;; Use notify.el (if you have it installed) at the end of running + ;; Cabal commands or generally things worth notifying. + haskell-notify-p t + ;; Remove annoying error popups + haskell-interactive-popup-errors nil + ;; Better import handling + haskell-process-suggest-remove-import-lines t + haskell-process-auto-import-loaded-modules t + ;; Disable haskell-stylish-on-save, as it breaks flycheck highlighting. + ;; NOTE: May not be true anymore - taksuyu 2015-10-06 + haskell-stylish-on-save nil)) + :config + (progn + ;; Haskell main editing mode key bindings. + (defun spacemacs/init-haskell-mode () + ;; use only internal indentation system from haskell + (if (fboundp 'electric-indent-local-mode) + (electric-indent-local-mode -1))) + + (defun spacemacs/haskell-interactive-bring () + "Bring up the interactive mode for this session without + switching to it." + (interactive) + (let* ((session (haskell-session)) + (buffer (haskell-session-interactive-buffer session))) + (display-buffer buffer))) + + ;; hooks + (add-hook 'haskell-mode-hook 'spacemacs/init-haskell-mode) + + ;; prefixes + (dolist (mode haskell-modes) + (spacemacs/declare-prefix-for-mode mode "mg" "haskell/navigation") + (spacemacs/declare-prefix-for-mode mode "ms" "haskell/repl") + (spacemacs/declare-prefix-for-mode mode "mc" "haskell/cabal") + (spacemacs/declare-prefix-for-mode mode "mh" "haskell/documentation") + (spacemacs/declare-prefix-for-mode mode "md" "haskell/debug") + (spacemacs/declare-prefix-for-mode mode "mr" "haskell/refactor")) + (spacemacs/declare-prefix-for-mode 'haskell-interactive-mode "ms" "haskell/repl") + (spacemacs/declare-prefix-for-mode 'haskell-cabal-mode "ms" "haskell/repl") + + ;; key bindings + (defun spacemacs/haskell-process-do-type-on-prev-line () + (interactive) + (haskell-process-do-type 1)) + + (dolist (mode haskell-modes) + (spacemacs/set-leader-keys-for-major-mode mode + "gi" 'haskell-navigate-imports + "F" 'haskell-mode-stylish-buffer + + "sb" 'haskell-process-load-file + "sc" 'haskell-interactive-mode-clear + "ss" 'spacemacs/haskell-interactive-bring + "sS" 'haskell-interactive-switch + + "ca" 'haskell-process-cabal + "cb" 'haskell-process-cabal-build + "cc" 'haskell-compile + "cv" 'haskell-cabal-visit-file + + "hd" 'inferior-haskell-find-haddock + "hh" 'hoogle + "hH" 'haskell-hoogle-lookup-from-local + "hi" 'haskell-process-do-info + "ht" 'haskell-process-do-type + "hT" 'spacemacs/haskell-process-do-type-on-prev-line + "hy" 'hayoo + + "da" 'haskell-debug/abandon + "db" 'haskell-debug/break-on-function + "dB" 'haskell-debug/delete + "dc" 'haskell-debug/continue + "dd" 'haskell-debug + "dn" 'haskell-debug/next + "dN" 'haskell-debug/previous + "dp" 'haskell-debug/previous + "dr" 'haskell-debug/refresh + "ds" 'haskell-debug/step + "dt" 'haskell-debug/trace)) + + (evilified-state-evilify haskell-debug-mode haskell-debug-mode-map + "RET" 'haskell-debug/select + "a" 'haskell-debug/abandon + "b" 'haskell-debug/break-on-function + "c" 'haskell-debug/continue + "d" 'haskell-debug/delete + "n" 'haskell-debug/next + "N" 'haskell-debug/previous + "p" 'haskell-debug/previous + "r" 'haskell-debug/refresh + "s" 'haskell-debug/step + "t" 'haskell-debug/trace) + + ;; configure C-c C-l so it doesn't throw any errors + (bind-key "C-c C-l" 'haskell-process-load-file haskell-mode-map) + + ;; Switch back to editor from REPL + (spacemacs/set-leader-keys-for-major-mode 'haskell-interactive-mode + "sS" 'haskell-interactive-switch-back) + + ;; Compile + (spacemacs/set-leader-keys-for-major-mode 'haskell-cabal + "C" 'haskell-compile) + + ;; Cabal-file bindings + (spacemacs/set-leader-keys-for-major-mode 'haskell-cabal-mode + ;; "=" 'haskell-cabal-subsection-arrange-lines ;; Does a bad job, 'gg=G' works better + "d" 'haskell-cabal-add-dependency + "b" 'haskell-cabal-goto-benchmark-section + "e" 'haskell-cabal-goto-executable-section + "t" 'haskell-cabal-goto-test-suite-section + "m" 'haskell-cabal-goto-exposed-modules + "l" 'haskell-cabal-goto-library-section + "n" 'haskell-cabal-next-subsection + "p" 'haskell-cabal-previous-subsection + "sc" 'haskell-interactive-mode-clear + "ss" 'spacemacs/haskell-interactive-bring + "sS" 'haskell-interactive-switch + "N" 'haskell-cabal-next-section + "P" 'haskell-cabal-previous-section + "f" 'haskell-cabal-find-or-create-source-file) + + ;; Make "RET" behaviour in REPL saner + (evil-define-key 'insert haskell-interactive-mode-map + (kbd "RET") 'haskell-interactive-mode-return) + (evil-define-key 'normal haskell-interactive-mode-map + (kbd "RET") 'haskell-interactive-mode-return)) + + ;; align rules for Haskell + (with-eval-after-load 'align + (add-to-list 'align-rules-list + '(haskell-types + (regexp . "\\(\\s-+\\)\\(::\\|∷\\)\\s-+") + (modes . haskell-modes))) + (add-to-list 'align-rules-list + '(haskell-assignment + (regexp . "\\(\\s-+\\)=\\s-+") + (modes . haskell-modes))) + (add-to-list 'align-rules-list + '(haskell-arrows + (regexp . "\\(\\s-+\\)\\(->\\|→\\)\\s-+") + (modes . haskell-modes))) + (add-to-list 'align-rules-list + '(haskell-left-arrows + (regexp . "\\(\\s-+\\)\\(<-\\|←\\)\\s-+") + (modes . haskell-modes)))))) + +(defun haskell/init-haskell-snippets () + ;; manually load the package since the current implementation is not lazy + ;; loading friendly (funny coming from the haskell mode :-)) + (setq haskell-snippets-dir (spacemacs//get-package-directory + 'haskell-snippets)) + + (defun haskell-snippets-initialize () + (let ((snip-dir (expand-file-name "snippets" haskell-snippets-dir))) + (add-to-list 'yas-snippet-dirs snip-dir t) + (yas-load-directory snip-dir))) + + (with-eval-after-load 'yasnippet (haskell-snippets-initialize))) + +(defun haskell/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'haskell-mode)) + +;; doesn't support literate-haskell-mode :( +(defun haskell/init-hindent () + (use-package hindent + :defer t + :if (stringp haskell-enable-hindent-style) + :init + (add-hook 'haskell-mode-hook #'hindent-mode) + :config + (progn + (setq hindent-style haskell-enable-hindent-style) + (spacemacs/set-leader-keys-for-major-mode 'haskell-mode + "f" 'hindent-reformat-decl)))) + +(defun haskell/init-hlint-refactor () + (use-package hlint-refactor + :defer t + :init + (progn + (spacemacs/set-leader-keys-for-major-mode 'haskell-mode + "rb" 'hlint-refactor-refactor-buffer + "rr" 'hlint-refactor-refactor-at-point)))) diff --git a/layers/+lang/html/README.org b/layers/+lang/html/README.org new file mode 100644 index 0000000..99185db --- /dev/null +++ b/layers/+lang/html/README.org @@ -0,0 +1,81 @@ +#+TITLE: HTML layer + +[[file:img/html.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + - [[#web-mode][Web mode]] + - [[#cssscss][CSS/SCSS]] + +* Description +This layer adds support for editing HTML and CSS. + +** Features +- Editing HTML and CSS file using [[http://web-mode.org/][web-mode]] +- Support for Sass/Scss and Less files +- Generate HTML and CSS coding using [[https://github.com/smihica/emmet-mode][emmet-mode]] +- Tags navigation on key ~%~ using [[https://github.com/redguardtoo/evil-matchit][evil-matchit]] +- Support for editing Slim and Pug templates using [[https://github.com/slim-template/emacs-slim][slim-mode]] + and [[https://github.com/hlissner/emacs-pug-mode][pug-mode]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =html= to the existing =dotspacemacs-configuration-layers= list in this +file. + +SCSS linting requires SCSS-Lint version >= 0.43.0. You can get it from GitHub: + +#+BEGIN_SRC command-line +gem install specific_install +gem specific_install https://github.com/brigade/scss-lint.git +gem specific_install https://github.com/Sweetchuck/scss_lint_reporter_checkstyle.git +#+END_SRC + +* Key Bindings +** Web mode + +| Key Binding | Description | +|-------------+-----------------------------------------------------------| +| ~SPC m g p~ | quickly navigate CSS rules using =helm= | +| ~SPC m e h~ | highlight DOM errors | +| ~SPC m g b~ | go to the beginning of current element | +| ~SPC m g c~ | go to the first child element | +| ~SPC m g p~ | go to the parent element | +| ~SPC m g s~ | go to next sibling | +| ~SPC m h p~ | show xpath of the current element | +| ~SPC m r c~ | clone the current element | +| ~SPC m r d~ | delete the current element (does not delete the children) | +| ~SPC m r r~ | rename current element | +| ~SPC m r w~ | wrap current element | +| ~SPC m z~ | fold/unfold current element | +| ~%~ | evil-matchit keybinding to jump to closing tag | + +A transient-state is also defined, start it with ~SPC m .~ or ~, .~ + +| Key Binding | Description | +|-------------+----------------------------------------------------------------| +| ~?~ | Toggle full help | +| ~c~ | clone current element | +| ~d~ | delete (vanish) current element (does not delete the children) | +| ~D~ | delete current element and children | +| ~j~ | next element | +| ~J~ / ~gj~ | next sibling element | +| ~h~ | parent element | +| ~k~ | previous element | +| ~K~ / ~gk~ | previous sibling element | +| ~l~ | first child element | +| ~p~ | show xpath of current element | +| ~q~ | leave the transient-state | +| ~r~ | rename current element | +| ~w~ | wrap current element | + +** CSS/SCSS + +| Key Binding | Description | +|-------------+-----------------------------------------| +| ~SPC m g h~ | quickly navigate CSS rules using =helm= | +| ~SPC m z c~ | fold css statement to one line | +| ~SPC m z o~ | unfold css statement to one line | diff --git a/layers/+lang/html/config.el b/layers/+lang/html/config.el new file mode 100644 index 0000000..5a6b051 --- /dev/null +++ b/layers/+lang/html/config.el @@ -0,0 +1,20 @@ +;;; packages.el --- HTML Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(spacemacs|defvar-company-backends css-mode) +(spacemacs|defvar-company-backends jade-mode) +(spacemacs|defvar-company-backends slim-mode) +(spacemacs|defvar-company-backends web-mode) +;;TODO: when this becomes available -- uncomment. -@robbyoconnor +;; (spacemacs|defvar-company-backends haml-mode) + diff --git a/layers/+lang/html/funcs.el b/layers/+lang/html/funcs.el new file mode 100644 index 0000000..52faddb --- /dev/null +++ b/layers/+lang/html/funcs.el @@ -0,0 +1,16 @@ +;;; funcs.el --- HTML Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs/emmet-expand () + (interactive) + (if (bound-and-true-p yas-minor-mode) + (call-interactively 'emmet-expand-yas) + (call-interactively 'emmet-expand-line))) diff --git a/layers/+lang/html/img/html.png b/layers/+lang/html/img/html.png new file mode 100644 index 0000000000000000000000000000000000000000..fe74f609064ba7e3e3237abdbc886b87298aee33 GIT binary patch literal 2223 zcmV;g2vGNlP)yS1SfXi^TS zg>a!oPAv)t4Yi5!VnX0#;>mwk6S;e!96hNAkD{JTJhfTl#VAt}E|A#m$#&r|KoJg9 zi`16x&dg)p>@2KgcmBNp@6Gp1UN+rsw=>`Od*8qJzBdTT1s*VHK6^RkGkL~*@;!4Y zpE*C^+U9b6Z_)czf(inp;X*XV`n><8EjI`RNXJ+oWfQ9~4Fo6;K1@u0mk<|hx;Y>~ zK6I_XcLQ94v8ZWs9rF}_)9CZw^Z*5U$$0*~yqHdue-7q?m@J^kNWs-B;0Af-Ha^`UzTxe47MxA4KCw&wHE6^_~})^?YA2 zOR+Ky)TQ9^QIcKs{=CWfomuzh$|3-`fNZ#l$tPGy1_Xg612OrHWcFKy8t66`h{>OU zG!THm0`QOad3?5u9|ojnE=9UWTL*9%?;+3s1^@s60000000000fCdh)FIqn{Igc#c zF{?2yPSl(8Jidr$C9nZ{kp^zE=1G7}(2F!|>PP@UnPY$?4!|H%@reAt0~P=P1OTvu z_j0g{o;6Y$f#Fg8=0JNVL}8FBV{Hjw99|f8G$eqzE&x(N4oI2(+-1z004tzA;aJg` z006PGUwaqefeP7x11wd>KmhZgH30yO2z;|$0IUcy2LWb*!PF+IcJ>ogJ^QgVX$}nyp?&-JOV!|R{hN3UOamn^sDlfT zo#$^qN{<2C=DUC;QNpnz$X{PoB3mOY0KRjh+!MQ_1xNkiHf;+29WNU^CcyJF~fCVnV14BPR!5eqeCqN)yw%iFYQExI`B))BLAc!~q zQYu>`>Hv6WtF#s(@a4Bvh#~-#gZl=6f2NZ^lrK|JyMn3H6}-BP&{X~-`GUnu^wy?Y zLA&F7ArUe)DhR|I`Im*Aaa&w~T|pp$2QGkH4B(ZD05-1(>Nc75ECm-# z1&1$PrTRBAw}oeI2M>MwTmY;H_8@C3n2MD^(FC9_2a^RJ>#*}ki7buG0!n8cTI$Z% z)Y1jmSPu5ruCe^NYa#*YH-(fe3&08w*aa6LL&2H-fEE&9qTXaPTNb$i#(qF{S(<18 z!V>ifswxA^AOQ3UqV#^i4gu83P&5G;`ULG+5!9_8uov3y3J$OSf{@^5QQB?cmGM{5 z&>QFYU57#!AesOkH33$anYMf91)mvkooA?o8J@Knx4Y!HgZjLd(Fy3BY==aglPcvu9ME3z$5~uLgka4g%$+ zW}5a0W|e`1HnN@o^d?NhR&i&fST{0b8Q3kg1;Dp&7E_Ld9)aqiSNYy!V808H*e9r8 zmr&+rkU*{MWDtP*Id?j)2o@~^Gj0Z1v4H^evuER8LFI^d0bI+#fqEIsCp^en1rjVCWOPX{`mo>J0$6 z0HF%j>=}V7(?D|2@f?*IUHmq#2UL#DMEU(`?GJ?_k$=#<7McI+$Z!0{Dl=;cz=Sw& zCxx6Jzm5q|nVN|!ewC>caq&m>EGLTgBc%tC((@L6bSMMMBmlQ`hE(?gGDznT@nOU= zL_~?v<%q((ZQp|937i3nG+1(}z zk7l~0XBsqYB7huhZ*?p~VjYM@=(vm7__a{%LCkvM#~JJS-~y1MHgQt>56JlSr;fWI z3q=Eh$)~|v<9F8lJ*NxE{D>z*Mvg3Hte=_0IvEQ>fZFlb(B1>Xg@QL;Xl-G%yES+* zV4~i1Y_b6Q<>*l$*}n2KYAbqZRN(6|A7mDSJOp?~Kt(5m0s+i`w3w*|vX(UCapy!( z|1pkV%a#Rn&DvasujGqPa&wIY^vamB}HC9ojm}qjLo1*2+)TRgaG8gy|lpv@oZDo$6c8kdj*Crm)iU57A!(5Mb7&9z<@SdCHTE;+* zDbkDxG2P=X<}|%bw`Z0c@zgX283>Jn$)~|vr0@k3WoaY<6b6%<&&_hrblF)!0Kvhe xmcbhkKwL0sMDPX#;2TW#7GX;D$lE6Z3;;+B!FrIJiHraM002ovPDHLkV1h;@?neLs literal 0 HcmV?d00001 diff --git a/layers/+lang/html/packages.el b/layers/+lang/html/packages.el new file mode 100644 index 0000000..fe595ed --- /dev/null +++ b/layers/+lang/html/packages.el @@ -0,0 +1,257 @@ +;;; packages.el --- HTML Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq html-packages + '( + company + (company-web :toggle (configuration-layer/package-usedp 'company)) + css-mode + emmet-mode + evil-matchit + flycheck + haml-mode + (helm-css-scss :toggle (configuration-layer/package-usedp 'helm)) + less-css-mode + pug-mode + sass-mode + scss-mode + slim-mode + smartparens + tagedit + web-mode + yasnippet + )) + +;;TODO: whenever company-web makes a backend for haml-mode it should be added here. -- @robbyoconnor +(defun html/post-init-company () + (spacemacs|add-company-hook css-mode) + (spacemacs|add-company-hook jade-mode) + (spacemacs|add-company-hook slim-mode) + (spacemacs|add-company-hook web-mode)) + +(defun html/init-company-web () + (use-package company-web)) + +(defun html/init-css-mode () + (use-package css-mode + :defer t + :init + (progn + (push 'company-css company-backends-css-mode) + + ;; Mark `css-indent-offset' as safe-local variable + (put 'css-indent-offset 'safe-local-variable #'integerp) + + ;; Explicitly run prog-mode hooks since css-mode does not derive from + ;; prog-mode major-mode in Emacs 24 and below. + (when (version< emacs-version "25") + (add-hook 'css-mode-hook 'spacemacs/run-prog-mode-hooks)) + + (defun css-expand-statement () + "Expand CSS block" + (interactive) + (save-excursion + (end-of-line) + (search-backward "{") + (forward-char 1) + (while (or (eobp) (not (looking-at "}"))) + (let ((beg (point))) + (newline) + (search-forward ";") + (indent-region beg (point)) + )) + (newline))) + + (defun css-contract-statement () + "Contract CSS block" + (interactive) + (end-of-line) + (search-backward "{") + (while (not (looking-at "}")) + (join-line -1))) + + (spacemacs/set-leader-keys-for-major-mode 'css-mode + "zc" 'css-contract-statement + "zo" 'css-expand-statement)))) + +(defun html/init-emmet-mode () + (use-package emmet-mode + :defer t + :init (spacemacs/add-to-hooks 'emmet-mode '(css-mode-hook + html-mode-hook + sass-mode-hook + scss-mode-hook + web-mode-hook)) + :config + (progn + (evil-define-key 'insert emmet-mode-keymap (kbd "TAB") 'spacemacs/emmet-expand) + (evil-define-key 'insert emmet-mode-keymap (kbd "") 'spacemacs/emmet-expand) + (evil-define-key 'emacs emmet-mode-keymap (kbd "TAB") 'spacemacs/emmet-expand) + (evil-define-key 'emacs emmet-mode-keymap (kbd "") 'spacemacs/emmet-expand) + (evil-define-key 'hybrid emmet-mode-keymap (kbd "TAB") 'spacemacs/emmet-expand) + (evil-define-key 'hybrid emmet-mode-keymap (kbd "") 'spacemacs/emmet-expand) + (spacemacs|hide-lighter emmet-mode)))) + +(defun html/post-init-evil-matchit () + (add-hook 'web-mode-hook 'turn-on-evil-matchit-mode)) + +(defun html/post-init-flycheck () + (dolist (mode '(haml-mode + less-mode + pug-mode + sass-mode + scss-mode + slim-mode + web-mode)) + (spacemacs/add-flycheck-hook mode))) + +(defun html/init-haml-mode () + (use-package haml-mode + :defer t)) + +(defun html/init-helm-css-scss () + (use-package helm-css-scss + :defer t + :init + (dolist (mode '(css-mode scss-mode)) + (spacemacs/set-leader-keys-for-major-mode mode "gh" 'helm-css-scss)))) + +(defun html/init-less-css-mode () + (use-package less-css-mode + :defer t + :mode ("\\.less\\'" . less-css-mode))) + +(defun html/init-pug-mode () + (use-package pug-mode + :defer t + :mode ("\\.pug$" . pug-mode))) + +(defun html/init-sass-mode () + (use-package sass-mode + :defer t + :mode ("\\.sass\\'" . sass-mode))) + +(defun html/init-scss-mode () + (use-package scss-mode + :defer t + :mode ("\\.scss\\'" . scss-mode))) + +(defun html/init-slim-mode () + (use-package slim-mode + :defer t)) + +(defun html/post-init-smartparens () + (spacemacs/add-to-hooks + (if dotspacemacs-smartparens-strict-mode + 'smartparens-strict-mode + 'smartparens-mode) + '(css-mode-hook scss-mode-hook sass-mode-hook less-css-mode-hook)) + + (add-hook 'web-mode-hook 'spacemacs/toggle-smartparens-off)) + +(defun html/init-tagedit () + (use-package tagedit + :defer t + :config + (progn + (tagedit-add-experimental-features) + (add-hook 'html-mode-hook (lambda () (tagedit-mode 1))) + (spacemacs|diminish tagedit-mode " Ⓣ" " T")))) + +(defun html/init-web-mode () + (use-package web-mode + :defer t + :init + (push '(company-web-html company-css) company-backends-web-mode) + :config + (progn + (spacemacs/declare-prefix-for-mode 'web-mode "me" "errors") + (spacemacs/declare-prefix-for-mode 'web-mode "mg" "goto") + (spacemacs/declare-prefix-for-mode 'web-mode "mh" "dom") + (spacemacs/declare-prefix-for-mode 'web-mode "mr" "refactor") + (spacemacs/set-leader-keys-for-major-mode 'web-mode + "eh" 'web-mode-dom-errors-show + "gb" 'web-mode-element-beginning + "gc" 'web-mode-element-child + "gp" 'web-mode-element-parent + "gs" 'web-mode-element-sibling-next + "hp" 'web-mode-dom-xpath + "rc" 'web-mode-element-clone + "rd" 'web-mode-element-vanish + "rk" 'web-mode-element-kill + "rr" 'web-mode-element-rename + "rw" 'web-mode-element-wrap + "z" 'web-mode-fold-or-unfold + ;; TODO element close would be nice but broken with evil. + ) + + ;; (defvar spacemacs--web-mode-ms-doc-toggle 0 + ;; "Display a short doc when nil, full doc otherwise.") + + ;; (defun spacemacs//web-mode-ms-doc () + ;; (if (equal 0 spacemacs--web-mode-ms-doc-toggle) + ;; "[_?_] for help" + ;; " + ;; [_?_] display this help + ;; [_k_] previous [_j_] next [_K_] previous sibling [_J_] next sibling + ;; [_h_] parent [_l_] child [_c_] clone [_d_] delete [_D_] kill [_r_] rename + ;; [_w_] wrap [_p_] xpath + ;; [_q_] quit")) + + ;; (defun spacemacs//web-mode-ms-toggle-doc () + ;; (interactive) + ;; (setq spacemacs--web-mode-ms-doc-toggle + ;; (logxor spacemacs--web-mode-ms-doc-toggle 1))) + + (spacemacs|define-transient-state web-mode + :title "Web-mode Transient State" + :columns 4 + :foreign-keys run + :evil-leader-for-mode (web-mode . ".") + :bindings + ("j" web-mode-element-next "next") + ("J" web-mode-element-sibling-next "next sibling") + ("gj" web-mode-element-sibling-next) + ("k" web-mode-element-previous "previous") + ("K" web-mode-element-sibling-previous "previous sibling") + ("gk" web-mode-element-sibling-previous) + ("h" web-mode-element-parent "parent") + ("l" web-mode-element-child "child") + ("c" web-mode-element-clone "clone") + ("d" web-mode-element-vanish "delete") + ("D" web-mode-element-kill "kill") + ("r" web-mode-element-rename "rename" :exit t) + ("w" web-mode-element-wrap "wrap") + ("p" web-mode-dom-xpath "xpath") + ("q" nil "quit" :exit t) + ("" nil nil :exit t))) + + :mode + (("\\.phtml\\'" . web-mode) + ("\\.tpl\\.php\\'" . web-mode) + ("\\.twig\\'" . web-mode) + ("\\.html\\'" . web-mode) + ("\\.htm\\'" . web-mode) + ("\\.[gj]sp\\'" . web-mode) + ("\\.as[cp]x?\\'" . web-mode) + ("\\.eex\\'" . web-mode) + ("\\.erb\\'" . web-mode) + ("\\.mustache\\'" . web-mode) + ("\\.handlebars\\'" . web-mode) + ("\\.hbs\\'" . web-mode) + ("\\.eco\\'" . web-mode) + ("\\.ejs\\'" . web-mode) + ("\\.djhtml\\'" . web-mode)))) + +(defun html/post-init-yasnippet () + (spacemacs/add-to-hooks 'spacemacs/load-yasnippet '(css-mode-hook + jade-mode + slim-mode))) diff --git a/layers/+lang/idris/README.org b/layers/+lang/idris/README.org new file mode 100644 index 0000000..5e98a6f --- /dev/null +++ b/layers/+lang/idris/README.org @@ -0,0 +1,108 @@ +#+TITLE: Idris layer + +[[file:img/idris.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#idris][Idris]] + - [[#key-bindings][Key bindings]] + - [[#shorthands][Shorthands]] + - [[#interactive-editing][Interactive editing]] + - [[#documentation][Documentation]] + - [[#repl][REPL]] + - [[#active-term-manipulations][Active term manipulations]] + - [[#build-system][Build system]] + +* Description +This layer adds support for the [[http://www.idris-lang.org/][Idris]] language. + +* Install + +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =idris= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Idris + +Idris can be installed using =Haskell's cabal=: + +#+BEGIN_SRC sh +cabal install idris +#+END_SRC + +Binaries are also available for some platforms at +http://www.idris-lang.org/download/ + +* Key bindings + +** Shorthands +Several (but not all) of the evil-leader shorthands that =idris-mode= provides +are reproduced under the local leader. + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------------------| +| ~SPC m c~ | Case split the pattern variable under point, or make it into a case expression. | +| ~SPC m d~ | Create an initial pattern match clause for a type declaration. | +| ~SPC m l~ | Extract lemma from hole | +| ~SPC m p~ | Attempt to solve a metavariable automatically. | +| ~SPC m r~ | Load current buffer into Idris. | +| ~SPC m t~ | Get the type for the identifier under point. | +| ~SPC m w~ | Add a with block for the pattern-match clause under point. | + +** Interactive editing + +| Key Binding | Description | +|-------------+--------------------------------------------------------------------------------------------| +| ~SPC m i a~ | Attempt to solve a metavariable automatically. | +| ~SPC m i c~ | Case split the pattern variable under point, or make it into a case expression. | +| ~SPC m i e~ | Extract a metavariable or provisional definition name to an explicit top level definition. | +| ~SPC m i m~ | Add missing pattern-match cases to an existing definition. | +| ~SPC m i r~ | Refine by name, without recursive proof search. | +| ~SPC m i s~ | Create an initial pattern match clause for a type declaration. | +| ~SPC m i w~ | Add a with block for the pattern-match clause under point. | + +** Documentation + +| Key Binding | Description | +|-------------+-------------------------------------------------------| +| ~SPC m h a~ | Search the documentation for a string. | +| ~SPC m h d~ | Search the documentation for the name under point. | +| ~SPC m h s~ | Search the documentation regarding a particular type. | +| ~SPC m h t~ | Get the type for the identifier under point. | + +** REPL + +| Key Binding | Description | +|-------------+----------------------------------------------------------------------------------------| +| ~SPC m s b~ | Load the current buffer into Idris. | +| ~SPC m s B~ | Load the current buffer into Idris and switch to REPL in insert state | +| ~SPC m s i~ | Start Idris inferior process | +| ~SPC m s n~ | Extend the region to be loaded one line at a time. | +| ~SPC m s N~ | Extend the region to be loaded one line at a time and switch to REPL in insert state | +| ~SPC m s p~ | Contract the region to be loaded one line at a time | +| ~SPC m s P~ | Contract the region to be loaded one line at a time and switch to REPL in insert state | +| ~SPC m s s~ | Switch to REPL buffer | +| ~SPC m s q~ | Quit the Idris process | + +** Active term manipulations + +| Key Binding | Description | +|-------------+-----------------------------------------------| +| ~SPC m m c~ | Show the core language for the term at point. | +| ~SPC m m i~ | Show implicits for the term at point. | +| ~SPC m m h~ | Hide implicits for the term at point. | +| ~SPC m m n~ | Normalize the term at point. | + +** Build system + +| Key Binding | Description | +|-------------+----------------------------------------------------------------------------| +| ~SPC m b c~ | Build the package. | +| ~SPC m b C~ | Clean the package, removing =.ibc= files | +| ~SPC m b i~ | Install the package to the user's repository, building first if necessary. | +| ~SPC m b p~ | Open package file. | + +When inside a package file, you can insert a field with ~SPC m f~. diff --git a/layers/+lang/idris/config.el b/layers/+lang/idris/config.el new file mode 100644 index 0000000..b4b6cc9 --- /dev/null +++ b/layers/+lang/idris/config.el @@ -0,0 +1,13 @@ +;;; config.el --- Idris Layer config File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Timothy Jones +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|defvar-company-backends idris-mode) +(spacemacs|defvar-company-backends idris-repl-mode) diff --git a/layers/+lang/idris/img/idris.png b/layers/+lang/idris/img/idris.png new file mode 100644 index 0000000000000000000000000000000000000000..4a3ee357bc0d506836de24d3395eb65d91dcf00f GIT binary patch literal 5045 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq idris-packages '(company + idris-mode + golden-ratio + popwin)) + +(defun idris/post-init-company () + (spacemacs|add-company-hook idris-mode) + (spacemacs|add-company-hook idris-repl-mode) + (push 'company-capf company-backends-idris-mode) + (push 'company-capf company-backends-idris-repl-mode)) + +(defun idris/init-idris-mode () + (use-package idris-mode + :defer t + :init (spacemacs/register-repl 'idris-mode 'idris-repl "idris") + :config + (progn + (defun spacemacs/idris-load-file-and-focus (&optional set-line) + "Pass the current buffer's file to the REPL and switch to it in +`insert state'." + (interactive "p") + (idris-load-file set-line) + (idris-pop-to-repl) + (evil-insert-state)) + + (defun spacemacs/idris-load-forward-line-and-focus () + "Pass the next line to REPL and switch to it in `insert state'." + (interactive) + (idris-load-forward-line) + (idris-pop-to-repl) + (evil-insert-state)) + + (defun spacemacs/idris-load-backward-line-and-focus () + "Pass the previous line to REPL and switch to it in `insert state'." + (interactive) + (idris-load-backward-line) + (idris-pop-to-repl) + (evil-insert-state)) + + ;; prefix + (spacemacs/declare-prefix-for-mode 'idris-mode "mb" "idris/build") + (spacemacs/declare-prefix-for-mode 'idris-mode "mi" "idris/editing") + (spacemacs/declare-prefix-for-mode 'idris-mode "mh" "idris/documentation") + (spacemacs/declare-prefix-for-mode 'idris-mode "ms" "idris/repl") + (spacemacs/declare-prefix-for-mode 'idris-mode "mm" "idris/term") + + (spacemacs/set-leader-keys-for-major-mode 'idris-mode + ;; Shorthands: rebind the standard evil-mode combinations to the local + ;; leader for the keys not used as a prefix below. + "c" 'idris-case-dwim + "d" 'idris-add-clause + "l" 'idris-make-lemma + "p" 'idris-proof-search + "r" 'idris-load-file + "t" 'idris-type-at-point + "w" 'idris-make-with-block + + ;; ipkg. + "bc" 'idris-ipkg-build + "bC" 'idris-ipkg-clean + "bi" 'idris-ipkg-install + "bp" 'idris-open-package-file + + ;; Interactive editing. + "ia" 'idris-proof-search + "ic" 'idris-case-dwim + "ie" 'idris-make-lemma + "im" 'idris-add-missing + "ir" 'idris-refine + "is" 'idris-add-clause + "iw" 'idris-make-with-block + + ;; Documentation. + "ha" 'idris-apropos + "hd" 'idris-docs-at-point + "hs" 'idris-type-search + "ht" 'idris-type-at-point + + ;; Active term manipulations. + "mn" 'idris-normalise-term + "mi" 'idris-show-term-implicits + "mh" 'idris-hide-term-implicits + "mc" 'idris-show-core-term + + ;; REPL + "'" 'idris-repl + "sb" 'idris-load-file + "sB" 'spacemacs/idris-load-file-and-focus + "si" 'idris-repl + "sn" 'idris-load-forward-line + "sN" 'spacemacs/idris-load-forward-line-and-focus + "sp" 'idris-load-backward-line + "sP" 'spacemacs/idris-load-backward-line-and-focus + "ss" 'idris-pop-to-repl + "sq" 'idris-quit))) + + ;; open special buffers in motion state so they can be closed with ~q~ + (evil-set-initial-state 'idris-compiler-notes-mode 'motion) + (evil-set-initial-state 'idris-hole-list-mode 'motion) + (evil-set-initial-state 'idris-info-mode 'motion)) + +(defun idris/pre-init-golden-ratio () + (spacemacs|use-package-add-hook golden-ratio + :post-config + (dolist (x '("*idris-notes*" "*idris-holes*" "*idris-info*")) + (add-to-list 'golden-ratio-exclude-buffer-names x)))) + +(defun idris/pre-init-popwin () + (spacemacs|use-package-add-hook popwin + :post-config + (push '("*idris-notes*" :dedicated t :position bottom :stick t :noselect nil :height 0.4) + popwin:special-display-config) + (push '("*idris-holes*" :dedicated t :position bottom :stick t :noselect nil :height 0.4) + popwin:special-display-config) + (push '("*idris-info*" :dedicated t :position bottom :stick t :noselect nil :height 0.4) + popwin:special-display-config))) diff --git a/layers/+lang/ipython-notebook/README.org b/layers/+lang/ipython-notebook/README.org new file mode 100644 index 0000000..0009d3f --- /dev/null +++ b/layers/+lang/ipython-notebook/README.org @@ -0,0 +1,157 @@ +#+TITLE: IPython Notebook layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#list-of-todos][List of TODOS]] + - [[#maybe-itd-be-better-if-there-was-a-state-for-this][Maybe it'd be better if there was a state for this]] + - [[#make-more-keybinding-to-connect-to-a-python-buffer][Make more keybinding to =connect= to a python buffer]] + - [[#deleting-visual-regions-dont-work-find-out-why][Deleting visual regions don't work, find out why]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#dependencies][Dependencies]] + - [[#what-needs-to-be-run][What needs to be run]] + - [[#using-the-ipython-notebook][Using the IPython notebook]] + - [[#open-notebook-list][Open Notebook List]] + - [[#key-bindings][Key Bindings]] + - [[#transient-state-ipython-notebook][Transient-state: =ipython-notebook=]] + - [[#normal-mode][Normal mode]] + - [[#insert-mode][Insert mode]] + - [[#traceback-mode][Traceback mode]] + - [[#screenshots][Screenshots]] + - [[#light][Light]] + - [[#dark][Dark]] + - [[#bonus][Bonus]] + +* Description +This layer adds support for the package =emacs-ipython-notebook=. + +Do not hesitate to check the original package README [[https://github.com/millejoh/emacs-ipython-notebook][here]]. Also the wiki has +lots of informative stuff. + +* Features +- Keybindings available through transient-state or leader key +- Lazy-loading + +* List of TODOS +This is a WIP, feel free to collaborate. + +** TODO Maybe it'd be better if there was a state for this +** TODO Make more keybinding to =connect= to a python buffer +** TODO Deleting visual regions don't work, find out why + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =ipython-notebook= to the existing =dotspacemacs-configuration-layers= list +in this file. + +** Dependencies +Install IPython Notebook > 3 +#+begin_src sh + pip install ipython[notebook] +#+end_src + +** What needs to be run +Have an IPython notebook running +#+begin_src sh + ipython notebook +#+end_src + +* Using the IPython notebook +** Open Notebook List +This layer is lazy loaded so the transient-state will only work after you summon the +command =ein:notebooklist-open= which is bound to ~SPC a i n~ + +** Key Bindings +The key bindings can be used through a transient state or the usual evil-leader. + +*** Transient-state: =ipython-notebook= +Once you are in the ipython notebook you can activate the transient-state with +~SPC m .~ + +The following table lists the keys. Use them as listed in the transient-state or +prefix with ~SPC m~ to use with your evil-leader. + +| Key | Function | +|---------+-------------------------------------------| +| ~h~ | ein:notebook-worksheet-open-prev-or-last | +| ~j~ | ein:worksheet-goto-next-input | +| ~k~ | ein:worksheet-goto-prev-input | +| ~l~ | ein:notebook-worksheet-open-next-or-first | +| ~H~ | ein:notebook-worksheet-move-prev | +| ~J~ | ein:worksheet-move-cell-down | +| ~K~ | ein:worksheet-move-cell-up | +| ~L~ | ein:notebook-worksheet-move-next | +| ~t~ | ein:worksheet-toggle-output | +| ~d~ | ein:worksheet-kill-cell | +| ~R~ | ein:worksheet-rename-sheet | +| ~y~ | ein:worksheet-copy-cell | +| ~p~ | ein:worksheet-yank-cell | +| ~i~ | ein:worksheet-insert-cell-below | +| ~I~ | ein:worksheet-insert-cell-above | +| ~u~ | ein:worksheet-change-cell-type | +| ~RET~ | ein:worksheet-execute-cell-and-goto-next | +| ~C-l~ | ein:worksheet-clear-output | +| ~C-S-l~ | ein:worksheet-clear-all-output | +| ~C-o~ | ein:console-open | +| ~C-k~ | ein:worksheet-merge-cell | +| ~C-j~ | spacemacs/ein:worksheet-merge-cell-next | +| ~C-s~ | ein:notebook-save-notebook-command | +| ~C-r~ | ein:notebook-rename-command | +| ~1~ | ein:notebook-worksheet-open-1th | +| ~2~ | ein:notebook-worksheet-open-2th | +| ~3~ | ein:notebook-worksheet-open-3th | +| ~4~ | ein:notebook-worksheet-open-4th | +| ~5~ | ein:notebook-worksheet-open-5th | +| ~6~ | ein:notebook-worksheet-open-6th | +| ~7~ | ein:notebook-worksheet-open-7th | +| ~8~ | ein:notebook-worksheet-open-8th | +| ~9~ | ein:notebook-worksheet-open-last | +| ~+~ | ein:notebook-worksheet-insert-next | +| ~-~ | ein:notebook-worksheet-delete | +| ~x~ | ein:notebook-close | + +*** Normal mode +In normal mode the following key bindings are defined: + +| Key | Function | +|---------+------------------------------------------| +| ~gj~ | ein:worksheet-goto-next-input | +| ~gk~ | ein:worksheet-goto-prev-input | +| ~C-RET~ | ein:worksheet-execute-cell | +| ~S-RET~ | ein:worksheet-execute-cell-and-goto-next | + +Also ~SPC f s~ saves the notebook like you would a regular buffer. + +*** Insert mode +In normal mode the following key bindings are defined: + +| Key | Function | +|---------+------------------------------------------| +| ~C-RET~ | ein:worksheet-execute-cell | +| ~S-RET~ | ein:worksheet-execute-cell-and-goto-next | + +*** Traceback mode +In traceback mode the following key bindings are defined: + +| key | Function | +|-------+----------------------------------------| +| ~RET~ | ein:tb-jump-to-source-at-point-command | +| ~n~ | ein:tb-next-item | +| ~p~ | ein:tb-prev-item | +| ~q~ | bury-buffer | + +* Screenshots +** Light +#+attr_html: :width 400px +[[file:img/light.png]] + +** Dark +#+attr_html: :width 400px +[[file:img/dark.png]] + +* Bonus +If you want to have a matplotlibrc that looks good with a dark background try +using [[file:matplotlibrc][this]] =matplotlibrc=. Plot background is always transparent by default so +it will look okay for most dark themes out there. diff --git a/layers/+lang/ipython-notebook/img/dark.png b/layers/+lang/ipython-notebook/img/dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6daf5b4a2e48ffa860f311bca6d7240cc55b105e GIT binary patch literal 320545 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 bb>sTK(0^+W{(mW@00000NkvXXu0mjf!&;rH literal 0 HcmV?d00001 diff --git a/layers/+lang/ipython-notebook/img/light.png b/layers/+lang/ipython-notebook/img/light.png new file mode 100644 index 0000000000000000000000000000000000000000..904eb0dac1a006114abd63ff017cac4c8a288623 GIT binary patch literal 356902 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 z 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≥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�&x#`+!ZTU7d1~((05wnaW3y%7l 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 P00000NkvXXu0mjfQu)DL literal 0 HcmV?d00001 diff --git a/layers/+lang/ipython-notebook/matplotlibrc b/layers/+lang/ipython-notebook/matplotlibrc new file mode 100644 index 0000000..ae7f4e7 --- /dev/null +++ b/layers/+lang/ipython-notebook/matplotlibrc @@ -0,0 +1,27 @@ +# -*- conf-unix -*- + +text.color : dcdccc + +patch.facecolor : 8cd0d3 # blue +patch.edgecolor : eeeeee + +axes.facecolor : 383838 # axes background color +axes.edgecolor : bcbcbc # axes edge color +axes.grid : True # display grid or not +axes.labelcolor : dcdccc +axes.prop_cycle : 8cd0d3, 7f9f7f, cc9393, 93e0e3, dc8cc3, f0dfaf, dcdccc +# (system default) blue, green, red, cyan, magenta, yellow, black + +xtick.color : dcdccc # color of the tick labels +xtick.direction : in # direction: in or out +ytick.color : dcdccc # color of the tick labels +ytick.direction : in # direction: in or out + +legend.fancybox : True # if True, use a rounded box for the + +figure.facecolor : 3f3f3f # figure facecolor; 0.75 is scalar gray +figure.edgecolor : 383838 # figure edgecolor + +# See also: +# * Sane color scheme for Matplotlib +# http://www.huyng.com/posts/sane-color-scheme-for-matplotlib/ diff --git a/layers/+lang/ipython-notebook/packages.el b/layers/+lang/ipython-notebook/packages.el new file mode 100644 index 0000000..7bfe162 --- /dev/null +++ b/layers/+lang/ipython-notebook/packages.el @@ -0,0 +1,160 @@ +;;; packages.el --- ipython Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq ipython-notebook-packages '(ein)) + +(defun ipython-notebook/init-ein () + (use-package ein + :defer t + :commands ein:notebooklist-open + :init + (progn + (spacemacs/set-leader-keys "ain" 'ein:notebooklist-open) + (with-eval-after-load 'ein-notebooklist + (evilified-state-evilify-map ein:notebooklist-mode-map + :mode ein:notebooklist-mode + :bindings + (kbd "o") 'spacemacs/ace-buffer-links) + (define-key ein:notebooklist-mode-map "o" 'spacemacs/ace-buffer-links))) + :config + (progn + (defun spacemacs/ein:worksheet-merge-cell-next () + (interactive) + (ein:worksheet-merge-cell (ein:worksheet--get-ws-or-error) (ein:worksheet-get-current-cell) t t)) + + (defun spacemacs//concat-leader (key) + (if dotspacemacs-major-mode-leader-key + (concat dotspacemacs-major-mode-leader-key key) + (concat "," key))) + + (spacemacs/set-leader-keys-for-major-mode 'ein:notebook-multilang-mode + "y" 'ein:worksheet-copy-cell + "p" 'ein:worksheet-yank-cell + "d" 'ein:worksheet-kill-cell + "h" 'ein:notebook-worksheet-open-prev-or-last + "i" 'ein:worksheet-insert-cell-below + "I" 'ein:worksheet-insert-cell-above + "j" 'ein:worksheet-goto-next-input + "k" 'ein:worksheet-goto-prev-input + "l" 'ein:notebook-worksheet-open-next-or-first + "H" 'ein:notebook-worksheet-move-prev + "J" 'ein:worksheet-move-cell-down + "K" 'ein:worksheet-move-cell-up + "L" 'ein:notebook-worksheet-move-next + "t" 'ein:worksheet-toggle-output + "R" 'ein:worksheet-rename-sheet + "RET" 'ein:worksheet-execute-cell-and-goto-next + ;; Output + " C-l" 'ein:worksheet-clear-output + " C-S-l" 'ein:worksheet-clear-all-output + ;;Console + " C-o" 'ein:console-open + ;; Merge cells + " C-k" 'ein:worksheet-merge-cell + " C-j" 'spacemacs/ein:worksheet-merge-cell-next + ;; Notebook + " C-s" 'ein:notebook-save-notebook-command + " C-r" 'ein:notebook-rename-command + "1" 'ein:notebook-worksheet-open-1th + "2" 'ein:notebook-worksheet-open-2th + "3" 'ein:notebook-worksheet-open-3th + "4" 'ein:notebook-worksheet-open-4th + "5" 'ein:notebook-worksheet-open-5th + "6" 'ein:notebook-worksheet-open-6th + "7" 'ein:notebook-worksheet-open-7th + "8" 'ein:notebook-worksheet-open-8th + "9" 'ein:notebook-worksheet-open-last + "+" 'ein:notebook-worksheet-insert-next + "-" 'ein:notebook-worksheet-delete + "x" 'ein:notebook-close + "u" 'ein:worksheet-change-cell-type + "fs" 'ein:notebook-save-notebook-command) + + ;; keybindings for ipython notebook traceback mode + (spacemacs/set-leader-keys-for-major-mode 'ein:traceback-mode + "RET" 'ein:tb-jump-to-source-at-point-command + "n" 'ein:tb-next-item + "p" 'ein:tb-prev-item + "q" 'bury-buffer) + + ;; keybindings mirror ipython web interface behavior + (evil-define-key 'insert ein:notebook-multilang-mode-map + (kbd "") 'ein:worksheet-execute-cell + (kbd "") 'ein:worksheet-execute-cell-and-goto-next) + + (evil-define-key 'normal ein:notebook-multilang-mode-map + ;; keybindings mirror ipython web interface behavior + (kbd "") 'ein:worksheet-execute-cell + (kbd "") 'ein:worksheet-execute-cell-and-goto-next + "gj" 'ein:worksheet-goto-next-input + "gk" 'ein:worksheet-goto-prev-input) + + ;; if this is not required then the following keygindings fail + (require 'ein-multilang) + (define-key ein:notebook-multilang-mode-map (kbd "M-j") 'ein:worksheet-move-cell-down) + (define-key ein:notebook-multilang-mode-map (kbd "M-k") 'ein:worksheet-move-cell-up) + + (spacemacs|define-transient-state ipython-notebook + :title "iPython Notebook Transient State" + :doc " + Operations on Cells^^^^^^ On Worksheets^^^^ Other + ----------------------------^^^^^^ ------------------------^^^^ ----------------------------------^^^^ + [_k_/_j_]^^ select prev/next [_h_/_l_] select prev/next [_t_]^^ toggle output + [_K_/_J_]^^ move up/down [_H_/_L_] move left/right [_C-l_/_C-S-l_] clear/clear all output + [_C-k_/_C-j_]^^ merge above/below [_1_.._9_] open [1st..last] [_C-o_]^^ open console + [_O_/_o_]^^ insert above/below [_+_/_-_] create/delete [_C-s_/_C-r_] save/rename notebook + [_y_/_p_/_d_] copy/paste ^^^^ [_x_]^^ close notebook + [_u_]^^^^ change type ^^^^ [_q_]^^ quit transient-state + [_RET_]^^^^ execute" + :evil-leader-for-mode (ein:notebook-multilang-mode . ".") + :bindings + ("q" nil :exit t) + ("?" spacemacs//ipython-notebook-ms-toggle-doc) + ("h" ein:notebook-worksheet-open-prev-or-last) + ("j" ein:worksheet-goto-next-input) + ("k" ein:worksheet-goto-prev-input) + ("l" ein:notebook-worksheet-open-next-or-first) + ("H" ein:notebook-worksheet-move-prev) + ("J" ein:worksheet-move-cell-down) + ("K" ein:worksheet-move-cell-up) + ("L" ein:notebook-worksheet-move-next) + ("t" ein:worksheet-toggle-output) + ("d" ein:worksheet-kill-cell) + ("R" ein:worksheet-rename-sheet) + ("y" ein:worksheet-copy-cell) + ("p" ein:worksheet-yank-cell) + ("o" ein:worksheet-insert-cell-below) + ("O" ein:worksheet-insert-cell-above) + ("u" ein:worksheet-change-cell-type) + ("RET" ein:worksheet-execute-cell-and-goto-next) + ;; Output + ("C-l" ein:worksheet-clear-output) + ("C-S-l" ein:worksheet-clear-all-output) + ;;Console + ("C-o" ein:console-open) + ;; Merge cells + ("C-k" ein:worksheet-merge-cell) + ("C-j" spacemacs/ein:worksheet-merge-cell-next) + ;; Notebook + ("C-s" ein:notebook-save-notebook-command) + ("C-r" ein:notebook-rename-command) + ("1" ein:notebook-worksheet-open-1th) + ("2" ein:notebook-worksheet-open-2th) + ("3" ein:notebook-worksheet-open-3th) + ("4" ein:notebook-worksheet-open-4th) + ("5" ein:notebook-worksheet-open-5th) + ("6" ein:notebook-worksheet-open-6th) + ("7" ein:notebook-worksheet-open-7th) + ("8" ein:notebook-worksheet-open-8th) + ("9" ein:notebook-worksheet-open-last) + ("+" ein:notebook-worksheet-insert-next) + ("-" ein:notebook-worksheet-delete) + ("x" ein:notebook-close))))) diff --git a/layers/+lang/java/README.org b/layers/+lang/java/README.org new file mode 100644 index 0000000..17d676b --- /dev/null +++ b/layers/+lang/java/README.org @@ -0,0 +1,174 @@ +#+TITLE: Java layer + +[[file:img/java.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#layer-installation][Layer Installation]] + - [[#layer][Layer]] + - [[#eclim][Eclim]] + - [[#installation][Installation]] + - [[#usage][Usage]] + - [[#key-bindings][Key bindings]] + - [[#java-mode][Java-mode]] + - [[#project-management][Project management]] + - [[#eclimd][Eclimd]] + - [[#maven][Maven]] + - [[#goto][Goto]] + - [[#refactoring][Refactoring]] + - [[#documentation-find][Documentation, Find]] + - [[#problems][Problems]] + - [[#tests][Tests]] + - [[#problems-buffer][Problems buffer]] + - [[#projects-buffer][Projects buffer]] + +* Description +This layer adds support for the Java language using the [[http://eclim.org][Eclim]] client/server. + +* Layer Installation +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =java= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Eclim +Eclim provides the ability to access Eclipse features such as code completion, +searching, code validation, and many more. + +*** Installation +For installation check the [[http://eclim.org/install.html#download][official page]]. + +Then set the =Eclipse= and =Eclim= paths in =dotspacemacs/user-config=, +for instance: + +#+BEGIN_SRC elisp + (setq eclim-eclipse-dirs "~/opt/eclipse" + eclim-executable "~/opt/eclipse/eclim") +#+END_SRC + +You can also configure other options, as shown below: + +#+BEGIN_SRC elisp + (setq + ;; Use another eclimd executable + eclimd-executable "/path/to/another/executable" + ;; Specify the workspace to use by default + eclimd-default-workspace "/path/to/default/eclipse/workspace" + ;; Whether or not to block emacs until eclimd is ready + eclimd-wait-for-process t) +#+END_SRC + +*** Usage +Start the eclim daemon with ~SPC m d s~ and stop it with ~SPC m d k~. (See +below.) + +* Key bindings +** Java-mode +*** Project management + +| Key Binding | Description | +|-------------+--------------------------------| +| ~SPC m p b~ | Build project | +| ~SPC m p c~ | Create project | +| ~SPC m p d~ | Delete project | +| ~SPC m p g~ | Open file in current project | +| ~SPC m p i~ | Import project | +| ~SPC m p j~ | Information about project | +| ~SPC m p k~ | Close project | +| ~SPC m p o~ | Open project | +| ~SPC m p p~ | Open project management buffer | +| ~SPC m p u~ | Update project | + +*** Eclimd + +| Key Binding | Description | +|-------------+--------------| +| ~SPC m d s~ | Start daemon | +| ~SPC m d k~ | Stop daemon | + +*** Maven + +| Key Binding | Description | +|-------------+--------------------------------| +| ~SPC m m i~ | Run maven clean install | +| ~SPC m m I~ | Run maven install | +| ~SPC m m p~ | Run one already goal from list | +| ~SPC m m r~ | Run maven goals | +| ~SPC m m R~ | Run one maven goal | +| ~SPC m m t~ | Run maven test | + +*** Goto + +| Key Binding | Description | +|-------------+---------------------------------------------| +| ~M-​,​~ | jump back from go to declaration/definition | +| ~SPC m g g~ | go to declaration | +| ~SPC m g t~ | go to type definition | + +*** Refactoring + +| Key Binding | Description | +|-------------+------------------| +| ~SPC m r i~ | optimize imports | +| ~SPC m r f~ | Format file | +| ~SPC m r r~ | Rename symbol | + +*** Documentation, Find + +| Key Binding | Description | +|-------------+----------------------------------------| +| ~SPC m f f~ | general find in project | +| ~SPC m h h~ | show documentation for symbol at point | +| ~SPC m h u~ | show usages for symbol at point | + +*** Problems + +| Key Binding | Description | +|-------------+--------------------------------------------| +| ~SPC m e a~ | set all problems for next/prev action | +| ~SPC m e b~ | open buffer with problems | +| ~SPC m e c~ | show options with problem corrections | +| ~SPC m e e~ | set only errors for next/prev action | +| ~SPC m e f~ | set only current file for next/prev action | +| ~SPC m e n~ | go to next problem | +| ~SPC m e o~ | open buffer with problems | +| ~SPC m e p~ | go to previous problem | +| ~SPC m e w~ | set warnings for next/prev action | + +*** Tests + +| Key Binding | Description | +|-------------+---------------------------------------------------------------| +| ~SPC m t t~ | run JUnit tests for current method or current file or project | + +** Problems buffer + +| Key Binding | Description | +|-------------+-------------------------------------| +| ~RET~ | go to problem place | +| ~a~ | show all problems | +| ~e~ | show only errors | +| ~f~ | show problems only for current file | +| ~g~ | refresh problems | +| ~q~ | quit | +| ~w~ | show only warnings | + +** Projects buffer + +| Key Binding | Description | +|-------------+--------------------------------------------| +| ~RET~ | go to current project | +| ~c~ | go to problem place | +| ~D~ | delete project | +| ~g~ | refresh buffer | +| ~i~ | info about current project | +| ~I~ | import existing project into the workspace | +| ~m~ | mark current project | +| ~M~ | mark all projects | +| ~N~ | create new project | +| ~o~ | open project | +| ~p~ | update project | +| ~q~ | quit | +| ~R~ | rename current project | +| ~u~ | unmark current project | +| ~U~ | unmark all projects | diff --git a/layers/+lang/java/config.el b/layers/+lang/java/config.el new file mode 100644 index 0000000..170fc00 --- /dev/null +++ b/layers/+lang/java/config.el @@ -0,0 +1,13 @@ +;;; packages.el --- Java configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Lukasz Klich +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|defvar-company-backends java-mode) + +(spacemacs|define-jump-handlers java-mode) diff --git a/layers/+lang/java/funcs.el b/layers/+lang/java/funcs.el new file mode 100644 index 0000000..4f10940 --- /dev/null +++ b/layers/+lang/java/funcs.el @@ -0,0 +1,43 @@ +;;; packages.el --- Java functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Lukasz Klich +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs/java-completing-dot () + "Insert a period and show company completions." + (interactive "*") + (spacemacs//java-delete-horizontal-space) + (insert ".") + (company-emacs-eclim 'interactive)) + +(defun spacemacs/java-completing-double-colon () + "Insert double colon and show company completions." + (interactive "*") + (spacemacs//java-delete-horizontal-space) + (insert ":") + (let ((curr (point))) + (when (s-matches? (buffer-substring (- curr 2) (- curr 1)) ":") + (company-emacs-eclim 'interactive)))) + +(defun spacemacs//java-delete-horizontal-space () + (when (s-matches? (rx (+ (not space))) + (buffer-substring (line-beginning-position) (point))) + (delete-horizontal-space t))) + +(defun spacemacs/java-maven-test () + (interactive) + (eclim-maven-run "test")) + +(defun spacemacs/java-maven-clean-install () + (interactive) + (eclim-maven-run "clean install")) + +(defun spacemacs/java-maven-install () + (interactive) + (eclim-maven-run "install")) diff --git a/layers/+lang/java/img/java.png b/layers/+lang/java/img/java.png new file mode 100644 index 0000000000000000000000000000000000000000..97e234ef72c4b6a11aa853c2987aabb5fbcf8b69 GIT binary patch literal 20686 zcmZ^~W0WRM@Gsalr)}G|ZQHhO+njdKw5M&`w(+!WyL-l~qwu5gEVC zh>VIl6{RRI0S|)>0|W#FFC{6e{L_y9w?jev9IG^|^L`p&7i9@ypz3Md)1M1yM@cOg zARt(j|8`)YtQ^cA1}!U9O;=4hS#A>tJ9;Bi2V*mOPdmpSZXh6DPwt;nJ2O`!LQgwe zdlzm`KH~r3;Ql%PkIXqFkm0{O3{3Ql z4F5;=&!fEmQMnbIt;~Kj|0kcHiT8gv|39?^C=BMqiDN(!k6?zchjRN)ak#T1FA!>C&Xyc{wRwRgIs8RDkTGLF^BfYD;@2}~u z=Uko?kL5{OfYg=LQP*>x&sEzo|FPF}L!JvQjRF^#Gt>dnC{dyaVT2$;5H8674}p^s zDUx=ApORtPAnX5TUBCrVia0!T$O;%1a_DxM)k)+qR3_ZfnV4>_G#mMMr@M(Q5a|Mf zC2)~-HCDF3{E4O4Xj`J<_%-WXpjDET+s4lfm>!2V?M$>8KUN?4T*L21YQFt7T5O!P zmWwj#*)f509rEfj1r8jgn=T@tjg zOtE4qdTM>~biO)AutY`yeoj70V-LSQF8m7;e1yLqJwqmPU>e#Ksx^+C2cu3L_8&Rj z%2Lt`zkZ7;6IjsWc(@nl@gEzE&CL}5z|VA)QDBf8LjgdYZoG4=#9YUs+r?oTAq<|Z z<_BT{A*=az$ky=b$JdW4r)#ka4WC~%<9HNwQN-_h?3*E|t+;p_S8wjppB|4^ZxU`S*=eg7_s9I>K59(H zzNc+u+2;NL>lYDqa~X@~rFU#)i!=&tYI|dyHUEW^-i2kiuTb7?*>8EAT+vUA&Aqow zKjI7@q`8IHo;hkDxA0-LkoW_HoJP=L)KdAp)A%@Jy@0kOZj>rNnBg0;jQRoQ=fJvQ z+Y;oy!g-ds!K$y^6m-$+Tai%=tDm}hg`I48|L1ed3sAla!T?Yli5tYYgk(TLA!HD*jyij;X^zC`32V)va3s9nr(PGfM9 zzK(Eh|ASYb0AuYI?=I-^tgLkWEQc}ZqP2IoN9&bvA5{h|Z*I8#>zH^QQgq}L`&8{J zQ8J>&z2(|R=P$NQk2uM6FedhQ3U-(GAEfsHZ8FkrA9#2Z$6C$zRx>Ub8vSJuXc?5Y z1A4OWmr&7=qPVM}_x)J&S!~DSP_xLmH#`?v06R(~=e`Dk8{gRO)wxpI+ ztL}zk0@R@Z3^^2T_}eneJaQlqs!EDK<(<)>VS?mPx1K$gep4>F+y7pY@|DJ?X!hh| zK(wl%0A|6eu5}*!!!_6wYI_V^v&{!HBS@oMk|~D5xtsuJ)eeJN(>m#>0nc$rCqzG?SpIG?(Dc%@lIFo)hNl6FIO65RIhbS8=m9!;Y=NaHjVb-B8xBEAKbT=zoiKa_8~VS1@*;~ zDuudr8}}wlS_=L^d-)RZ;c#fzm17_Oaym#w869QJs{Q4*=eaab^6CCe zKI1aYmLmd7CkRI+RwQw^L#(vA$5nkDv3=(~z_Gf$x@c0VuBYdiHb*f)1(n-!RFi

b|AFel5E^yB)pv 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 UsxA`h%>V!Z07*qoM6N<$f)gi=-~a#s literal 0 HcmV?d00001 diff --git a/layers/+lang/racket/packages.el b/layers/+lang/racket/packages.el new file mode 100644 index 0000000..e071da2 --- /dev/null +++ b/layers/+lang/racket/packages.el @@ -0,0 +1,119 @@ +(setq racket-packages + '( + company + company-quickhelp + ggtags + helm-gtags + racket-mode + )) + +(defun racket/post-init-company () + ;; this is the only thing to do to enable company in racket-mode + ;; because racket-mode handle everything for us when company + ;; is loaded. + (add-hook 'racket-mode-hook 'company-mode)) + +(defun racket/post-init-company-quickhelp () + ;; Bug exists in Racket company backend that opens docs in new window when + ;; company-quickhelp calls it. Note hook is appendended for proper ordering. + (add-hook 'company-mode-hook + '(lambda () + (when (and (equal major-mode 'racket-mode) + (bound-and-true-p company-quickhelp-mode)) + (company-quickhelp-mode -1))) t)) + +(defun racket/post-init-ggtags () + (add-hook 'racket-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun racket/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'racket-mode)) + +(defun racket/init-racket-mode () + (use-package racket-mode + :defer t + :init + (progn + (spacemacs/register-repl 'racket-mode 'racket-repl "racket")) + :config + (progn + ;; smartparens configuration + (with-eval-after-load 'smartparens + (add-to-list 'sp--lisp-modes 'racket-mode) + (when (fboundp 'sp-local-pair) + (sp-local-pair 'racket-mode "'" nil :actions nil) + (sp-local-pair 'racket-mode "`" nil :actions nil))) + + (defun spacemacs/racket-test-with-coverage () + "Call `racket-test' with universal argument." + (interactive) + (racket-test t)) + + (defun spacemacs/racket-run-and-switch-to-repl () + "Call `racket-run-and-switch-to-repl' and enable +`insert state'." + (interactive) + (racket-run-and-switch-to-repl) + (evil-insert-state)) + + (defun spacemacs/racket-send-last-sexp-focus () + "Call `racket-send-last-sexp' and switch to REPL buffer in +`insert state'." + (interactive) + (racket-send-last-sexp) + (racket-repl) + (evil-insert-state)) + + (defun spacemacs/racket-send-definition-focus () + "Call `racket-send-definition' and switch to REPL buffer in +`insert state'." + (interactive) + (racket-send-definition) + (racket-repl) + (evil-insert-state)) + + (defun spacemacs/racket-send-region-focus (start end) + "Call `racket-send-region' and switch to REPL buffer in +`insert state'." + (interactive "r") + (racket-send-region start end) + (racket-repl) + (evil-insert-state)) + + (dolist (prefix '(("mg" . "navigation") + ("mh" . "doc") + ("mi" . "insert") + ("ms" . "repl") + ("mt" . "tests"))) + (spacemacs/declare-prefix-for-mode 'racket-mode (car prefix) (cdr prefix))) + + (spacemacs/set-leader-keys-for-major-mode 'racket-mode + ;; navigation + "g`" 'racket-unvisit + "gm" 'racket-visit-module + "gr" 'racket-open-require-path + ;; doc + "hd" 'racket-describe + "hh" 'racket-doc + ;; insert + "il" 'racket-insert-lambda + ;; REPL + "'" 'racket-repl + "sb" 'racket-run + "sB" 'spacemacs/racket-run-and-switch-to-repl + "se" 'racket-send-last-sexp + "sE" 'spacemacs/racket-send-last-sexp-focus + "sf" 'racket-send-definition + "sF" 'spacemacs/racket-send-definition-focus + "si" 'racket-repl + "sr" 'racket-send-region + "sR" 'spacemacs/racket-send-region-focus + "ss" 'racket-repl + ;; Tests + "tb" 'racket-test + "tB" 'spacemacs/racket-test-with-coverage) + (define-key racket-mode-map (kbd "H-r") 'racket-run) + ;; remove racket auto-insert of closing delimiter + ;; see https://github.com/greghendershott/racket-mode/issues/140 + (define-key racket-mode-map ")" 'self-insert-command) + (define-key racket-mode-map "]" 'self-insert-command) + (define-key racket-mode-map "}" 'self-insert-command)))) diff --git a/layers/+lang/ruby/README.org b/layers/+lang/ruby/README.org new file mode 100644 index 0000000..d1a3b39 --- /dev/null +++ b/layers/+lang/ruby/README.org @@ -0,0 +1,186 @@ +#+TITLE: Ruby layer + +[[file:img/ruby.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#prerequisites][Prerequisites]] + - [[#ruby-version-management][Ruby version management]] + - [[#test-runner][Test runner]] + - [[#key-bindings][Key bindings]] + - [[#ruby-enh-ruby-mode-robe-inf-ruby-ruby-tools][Ruby (enh-ruby-mode, robe, inf-ruby, ruby-tools)]] + - [[#bundler][Bundler]] + - [[#rubocop][RuboCop]] + - [[#tests][Tests]] + - [[#rspec-mode][RSpec-mode]] + - [[#ruby-test-mode][Ruby-test-mode]] + - [[#minitest-mode][minitest-mode]] + - [[#rake][Rake]] + +* Description +This layer provides support for the Ruby language with the following features: +- version manager (rbenv, rvm or chruby) +- integration with bundler +- test runner (ruby-test and rspec) +- rake runner +- linter (rubocop) +- interactive REPL and code navigation (robe) + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =ruby= to the existing =dotspacemacs-configuration-layers= list in this +file. + +This layer supports two different Ruby modes: Emacs' built-in Ruby Mode and +[[https://github.com/zenspider/enhanced-ruby-mode][enh-ruby-mode]]. By default the built-in Ruby mode is enabled. To switch to the +=enh-ruby-mode= set =ruby-enable-enh-ruby-mode= to t: + +#+BEGIN_SRC emacs-lisp + (defun dotspacemacs-configuration-layers () + '((ruby :variables ruby-enable-enh-ruby-mode t))) +#+END_SRC + +** Prerequisites +Some of the advanced features supported by this layer depend on external gems +that need to be installed in the context of your project (see below for guidance +based on your version manager): + +- =pry= and =pry-doc= are required for *jump to definition* and *code documentation* (=robe-mode=) +- =ruby_parser= is required for *goto-step_definition* in =feature-mode= +- =rubocop= is required for rubocop integration + +You can install the gems in the context of your current project by +adding them to the =Gemfile=, e.g.: + +#+BEGIN_SRC ruby + gem 'pry' +#+END_SRC + +or on the command line (please refer to your ruby version manager +specific documentation for details and caveats): + +#+BEGIN_SRC sh + gem install pry +#+END_SRC + +** Ruby version management +This layer supports [[https://rvm.io/][RVM]], [[https://github.com/sstephenson/rbenv][Rbenv]], and [[https://github.com/postmodern/chruby][Chruby]]. You can choose the default version +manager by setting the variable =ruby-version-manager= in your dotfile, for +example: + +#+BEGIN_SRC emacs-lisp + (defun dotspacemacs-configuration-layers () + '((ruby :variables ruby-version-manager 'rvm))) +#+END_SRC + +When a version manager is enabled it will use the currently activated ruby +except if a =.ruby-version= file exists in which case the ruby version of +this file is used. +=rvm= will also try to look for a =.rvmrc= and =gemfile=, the priority order is +=.rvmrc= then =.ruby-version= then =gemfile=. + +Note: Only one version manager at a time can be enabled. + +** Test runner +This layer supports =RSpec=, =ruby-test= and =minitest= test runners +(frameworks). By default =ruby-test= is used, to change to another frameworks +set the layer variable =ruby-test-runner=. + +Example to set the test runner to =RSpec=: + +#+BEGIN_SRC emacs-lisp + (defun dotspacemacs-configuration-layers () + '((ruby :variables ruby-test-runner 'rspec))) +#+END_SRC + +=Tip:= You can enable different test runners for different projects by using +directory local variables. + +* Key bindings +** Ruby (enh-ruby-mode, robe, inf-ruby, ruby-tools) + +| Key binding | Description | +|-------------+------------------------------------------------------| +| ~SPC m '​~ | toggle quotes of current string (only built-in mode) | +| ~SPC m {~ | toggle style of current block (only built-in mode) | +| ~SPC m g g~ | go to definition (robe-jump) | +| ~SPC m h d~ | go to Documentation | +| ~SPC m s f~ | send function definition | +| ~SPC m s F~ | send function definition and switch to REPL | +| ~SPC m s i~ | start REPL | +| ~SPC m s r~ | send region | +| ~SPC m s R~ | send region and switch to REPL | +| ~SPC m s s~ | switch to REPL | +| ~SPC m x '​~ | Change symbol or " string to ' | +| ~SPC m x "​~ | Change symbol or ' string to " | +| ~SPC m x :~ | Change string to symbol | +| ~%~ | [[https://github.com/redguardtoo/evil-matchit][evil-matchit]] jumps between blocks | + +** Bundler + +| Key binding | Description | +|-------------+--------------------| +| ~SPC b c~ | run bundle check | +| ~SPC b i~ | run bundle install | +| ~SPC b s~ | run bundle console | +| ~SPC b u~ | run bundle update | +| ~SPC b x~ | run bundle exec | +| ~SPC b o~ | run bundle open | + +** RuboCop + +| Key binding | Description | +|---------------+------------------------------------------------------| +| ~SPC m r r f~ | Runs RuboCop on the currently visited file | +| ~SPC m r r F~ | Runs auto-correct on the currently visited file | +| ~SPC m r r d~ | Prompts from a directory on which to run RuboCop | +| ~SPC m r r D~ | Prompts for a directory on which to run auto-correct | +| ~SPC m r r p~ | Runs RuboCop on the entire project | +| ~SPC m r r P~ | Runs auto-correct on the project | + +** Tests +*** RSpec-mode +When =ruby-test-runner= equals =rspec=. + +| Key binding | Description | +|---------------+--------------------------------------------------------| +| ~SPC m t a~ | run all specs | +| ~SPC m t b~ | run current spec file | +| ~SPC m t c~ | run the current spec file and subsequent ones | +| ~SPC m t d~ | run tests in a directory | +| ~SPC m t e~ | mark example as pending | +| ~SPC m t f~ | run method | +| ~SPC m t l~ | run last failed spec | +| ~SPC m t m~ | run specs related to the current buffer | +| ~SPC m t r~ | re-run last spec | +| ~SPC m t t~ | run spec at pointer | +| ~SPC m t TAB~ | toggle between spec's and target's buffer | +| ~SPC m t ~~ | toggle between spec's and target's buffer find example | + +*** Ruby-test-mode +When =ruby-test-runner= equals =ruby-test=. + +| Key binding | Description | +|-------------+---------------------| +| ~SPC m t b~ | run test file | +| ~SPC m t t~ | run test at pointer | + +*** minitest-mode +When =ruby-test-runner= equals =minitest=. + +| Key binding | Description | +|-------------+---------------------------| +| ~SPC m t a~ | run all tests | +| ~SPC m t b~ | run current file | +| ~SPC m t r~ | repeat last test command | +| ~SPC m t s~ | run test for current file | + +** Rake + +| Key binding | Description | +|-------------+---------------------------------| +| ~SPC m k k~ | Runs rake | +| ~SPC m k r~ | Re-runs the last rake task | +| ~SPC m k R~ | Regenerates the rake cache | +| ~SPC m k f~ | Finds definition of a rake task | diff --git a/layers/+lang/ruby/config.el b/layers/+lang/ruby/config.el new file mode 100644 index 0000000..617d97b --- /dev/null +++ b/layers/+lang/ruby/config.el @@ -0,0 +1,28 @@ +;;; config.el --- Ruby Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(spacemacs|defvar-company-backends enh-ruby-mode) +(spacemacs|defvar-company-backends ruby-mode) + +(spacemacs|define-jump-handlers enh-ruby-mode) +(spacemacs|define-jump-handlers ruby-mode) + +(defvar ruby-enable-enh-ruby-mode nil + "If non-nil, use `enh-ruby-mode' package instead of the built-in Ruby Mode.") + +(defvar ruby-version-manager nil + "If non nil, defines the Ruby version manager. +Possible values are `rbenv', `rvm' or `chruby'.)") + +(defvar ruby-test-runner 'ruby-test + "Test runner to use. Possible values are `ruby-test', `minitest' or `rspec'.") diff --git a/layers/+lang/ruby/funcs.el b/layers/+lang/ruby/funcs.el new file mode 100644 index 0000000..6a67eec --- /dev/null +++ b/layers/+lang/ruby/funcs.el @@ -0,0 +1,61 @@ +;;; funcs.el --- Ruby Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; rbenv + +(defun spacemacs//enable-rbenv () + "Enable rbenv, use .ruby-version if exists." + (require 'rbenv) + (let ((version-file-path (rbenv--locate-file ".ruby-version"))) + (global-rbenv-mode) + ;; try to use the ruby defined in .ruby-version + (if version-file-path + (progn + (rbenv-use (rbenv--read-version-from-file + version-file-path)) + (message (concat "[rbenv] Using ruby version " + "from .ruby-version file."))) + (message "[rbenv] Using the currently activated ruby.")))) + + +;; rspec + +(defun spacemacs//ruby-enable-rspec-mode () + "Conditionally enable `rspec-mode'" + (when (eq 'rspec ruby-test-runner) + (rspec-enable-appropriate-mode))) + +(defun ruby/rspec-verify-directory (dir) + "Launch tests in DIR directory. +Called interactively it prompts for a directory." + (interactive "Drspec directory: ") + (rspec-run-single-file dir (rspec-core-options))) + +(defun spacemacs//inf-ruby-auto-enter () + "Automatically enters inf-ruby-mode in ruby modes' debugger breakpoints." + (add-hook 'compilation-filter-hook 'inf-ruby-auto-enter nil t)) + + +;; ruby-test + +(defun spacemacs//ruby-enable-ruby-test-mode () + "Conditionally enable `ruby-test-mode'" + (when (eq 'ruby-test ruby-test-runner) + (ruby-test-mode))) + + +;; minitest + +(defun spacemacs//ruby-enable-minitest-mode () + "Conditionally enable `minitest-mode'" + (when (eq 'minitest ruby-test-runner) + (minitest-enable-appropriate-mode))) diff --git a/layers/+lang/ruby/img/ruby.png b/layers/+lang/ruby/img/ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..892360c06d0964c9d6b54624eaf017427a149fdb GIT binary patch literal 54875 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/ruby/packages.el b/layers/+lang/ruby/packages.el new file mode 100644 index 0000000..aa681be --- /dev/null +++ b/layers/+lang/ruby/packages.el @@ -0,0 +1,280 @@ +;;; packages.el --- Ruby Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq ruby-packages + '( + bundler + chruby + company + (enh-ruby-mode :toggle ruby-enable-enh-ruby-mode) + evil-matchit + flycheck + ggtags + helm-gtags + minitest + popwin + rbenv + robe + rspec-mode + rubocop + (ruby-mode :location built-in :toggle (not ruby-enable-enh-ruby-mode)) + ruby-test-mode + ruby-tools + rvm + smartparens + rake + )) + +(defun ruby/init-bundler () + (use-package bundler + :defer t + :init (dolist (mode '(ruby-mode enh-ruby-mode)) + (spacemacs/declare-prefix-for-mode mode "mb" "ruby/bundle") + (spacemacs/set-leader-keys-for-major-mode mode + "bc" 'bundle-check + "bi" 'bundle-install + "bs" 'bundle-console + "bu" 'bundle-update + "bx" 'bundle-exec + "bo" 'bundle-open)))) + +(defun ruby/post-init-company () + (spacemacs|add-company-hook ruby-mode) + (spacemacs|add-company-hook enh-ruby-mode) + (with-eval-after-load 'company-dabbrev-code + (dolist (mode '(ruby-mode enh-ruby-mode)) + (push mode company-dabbrev-code-modes)))) + +(defun ruby/init-chruby () + (use-package chruby + :if (equal ruby-version-manager 'chruby) + :commands chruby-use-corresponding + :defer t + :init (spacemacs/add-to-hooks 'chruby-use-corresponding + '(ruby-mode-hook enh-ruby-mode-hook)))) + +(defun ruby/init-enh-ruby-mode () + (use-package enh-ruby-mode + :mode (("Appraisals\\'" . enh-ruby-mode) + ("\\(Rake\\|Thor\\|Guard\\|Gem\\|Cap\\|Vagrant\\|Berks\\|Pod\\|Puppet\\)file\\'" . enh-ruby-mode) + ("\\.\\(rb\\|rabl\\|ru\\|builder\\|rake\\|thor\\|gemspec\\|jbuilder\\)\\'" . enh-ruby-mode)) + :interpreter "ruby" + :init + (progn + (setq enh-ruby-deep-indent-paren nil + enh-ruby-hanging-paren-deep-indent-level 2)))) + +(defun ruby/post-init-evil-matchit () + (dolist (hook '(ruby-mode-hook enh-ruby-mode-hook)) + (add-hook hook `turn-on-evil-matchit-mode))) + +(defun ruby/post-init-flycheck () + (spacemacs/add-flycheck-hook 'ruby-mode) + (spacemacs/add-flycheck-hook 'enh-ruby-mode)) + +(defun ruby/post-init-ggtags () + (add-hook 'ruby-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun ruby/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'ruby-mode)) + +(defun ruby/init-minitest () + (use-package minitest + :defer t + :init + (progn + (spacemacs/add-to-hooks 'spacemacs//ruby-enable-minitest-mode + '(ruby-mode-local-vars-hook + enh-ruby-mode-local-vars-hook)) + ;; remove hooks added by minitest mode + (dolist (hook '(ruby-mode-hook enh-ruby-mode-hook)) + (remove-hook hook 'minitest-enable-appropriate-mode))) + :config + (progn + (spacemacs|hide-lighter minitest-mode) + (dolist (mode '(ruby-mode enh-ruby-mode)) + (spacemacs/set-leader-keys-for-major-mode mode + "ta" 'minitest-verify-all + "tb" 'minitest-verify + "tr" 'minitest-rerun + "ts" 'minitest-verify-single))))) + +(defun ruby/post-init-popwin () + (push '("*rspec-compilation*" :dedicated t :position bottom :stick t :noselect t :height 0.4) + popwin:special-display-config) + (push '("*rake-compilation*" :dedicated t :position bottom :stick t :noselect t :height 0.4) + popwin:special-display-config)) + +(defun ruby/init-rbenv () + (use-package rbenv + :if (equal ruby-version-manager 'rbenv) + :defer t + :init (spacemacs/add-to-hooks 'spacemacs//enable-rbenv + '(ruby-mode-hook enh-ruby-mode-hook)))) + +(defun ruby/init-robe () + (use-package robe + :defer t + :init + (progn + (spacemacs/register-repl 'robe 'robe-start "robe") + (dolist (hook '(ruby-mode-hook enh-ruby-mode-hook)) + (add-hook hook 'robe-mode)) + (when (configuration-layer/package-usedp 'company) + (push 'company-robe company-backends-enh-ruby-mode) + (push 'company-robe company-backends-ruby-mode)) + (spacemacs/add-to-hooks 'robe-jump + '(spacemacs-jump-handlers-ruby-mode + spacemacs-jump-handlers-enh-ruby-mode))) + :config + (progn + (spacemacs|hide-lighter robe-mode) + (dolist (mode '(ruby-mode enh-ruby-mode)) + (spacemacs/declare-prefix-for-mode mode "mg" "ruby/goto") + (spacemacs/declare-prefix-for-mode mode "mh" "ruby/docs") + (spacemacs/declare-prefix-for-mode mode "ms" "ruby/repl") + (spacemacs/set-leader-keys-for-major-mode mode + "'" 'robe-start + ;; robe mode specific + "hd" 'robe-doc + "rsr" 'robe-rails-refresh + ;; inf-enh-ruby-mode + "sf" 'ruby-send-definition + "sF" 'ruby-send-definition-and-go + "si" 'robe-start + "sr" 'ruby-send-region + "sR" 'ruby-send-region-and-go + "ss" 'ruby-switch-to-inf))))) + +(defun ruby/init-rspec-mode () + (use-package rspec-mode + :defer t + :init + (progn + (spacemacs/add-to-hooks 'spacemacs//ruby-enable-rspec-mode + '(ruby-mode-local-vars-hook + enh-ruby-mode-local-vars-hook)) + ;; remove hooks automatically added by rspec via autoload + ;; because we want to be able to control when rspec-mode is + ;; loaded based on the layer variable `ruby-test-runner' + (dolist (hook '(ruby-mode-hook enh-ruby-mode-hook)) + (remove-hook hook 'rspec-enable-appropriate-mode))) + :config + (progn + (add-hook 'rspec-compilation-mode-hook 'spacemacs//inf-ruby-auto-enter) + (spacemacs|hide-lighter rspec-mode) + (dolist (mode '(ruby-mode enh-ruby-mode)) + (spacemacs/set-leader-keys-for-major-mode mode + "ta" 'rspec-verify-all + "tb" 'rspec-verify + "tc" 'rspec-verify-continue + "td" 'ruby/rspec-verify-directory + "te" 'rspec-toggle-example-pendingness + "tf" 'rspec-verify-method + "tl" 'rspec-run-last-failed + "tm" 'rspec-verify-matching + "tr" 'rspec-rerun + "tt" 'rspec-verify-single + "t~" 'rspec-toggle-spec-and-target-find-example + "t TAB" 'rspec-toggle-spec-and-target))))) + +(defun ruby/init-rubocop () + (use-package rubocop + :defer t + :init (spacemacs/add-to-hooks 'rubocop-mode '(ruby-mode-hook + enh-ruby-mode-hook)) + :config (dolist (mode '(ruby-mode enh-ruby-mode)) + (spacemacs/declare-prefix-for-mode mode "mrr" "ruby/RuboCop") + (spacemacs/set-leader-keys-for-major-mode mode + "rrd" 'rubocop-check-directory + "rrD" 'rubocop-autocorrect-directory + "rrf" 'rubocop-check-current-file + "rrF" 'rubocop-autocorrect-current-file + "rrp" 'rubocop-check-project + "rrP" 'rubocop-autocorrect-project)))) + +(defun ruby/init-ruby-mode () + (use-package ruby-mode + :defer t + :mode (("Appraisals\\'" . ruby-mode) + ("Puppetfile" . ruby-mode)) + :init + (progn + (spacemacs/declare-prefix-for-mode 'ruby-mode "mt" "ruby/test")) + :config (spacemacs/set-leader-keys-for-major-mode 'ruby-mode + "'" 'ruby-toggle-string-quotes + "{" 'ruby-toggle-block))) + +(defun ruby/init-ruby-tools () + (use-package ruby-tools + :defer t + :init (dolist (hook '(ruby-mode-hook enh-ruby-mode-hook)) + (add-hook hook 'ruby-tools-mode)) + :config + (progn + (spacemacs|hide-lighter ruby-tools-mode) + (dolist (mode '(ruby-mode enh-ruby-mode)) + (spacemacs/declare-prefix-for-mode mode "mx" "ruby/text") + (spacemacs/set-leader-keys-for-major-mode mode + "x\'" 'ruby-tools-to-single-quote-string + "x\"" 'ruby-tools-to-double-quote-string + "x:" 'ruby-tools-to-symbol))))) + +(defun ruby/init-ruby-test-mode () + "Define keybindings for ruby test mode" + (use-package ruby-test-mode) + :defer t + :init (spacemacs/add-to-hooks 'spacemacs//ruby-enable-ruby-test-mode + '(ruby-mode-local-vars-hook + enh-ruby-mode-local-vars-hook)) + :config + (progn + ;; `ruby-test-mode' adds a hook to enable itself, this hack + ;; removes it to be sure that we control the loading of the + ;; mode + (remove-hook 'ruby-mode-hook 'ruby-test-enable) + (spacemacs|hide-lighter ruby-test-mode) + (dolist (mode '(ruby-mode enh-ruby-mode)) + (spacemacs/set-leader-keys-for-major-mode mode + "tb" 'ruby-test-run + "tt" 'ruby-test-run-at-point)))) + +(defun ruby/init-rvm () + (use-package rvm + :if (equal ruby-version-manager 'rvm) + :defer t + :init + (progn + (setq rspec-use-rvm t) + (spacemacs/add-to-hooks 'rvm-activate-corresponding-ruby + '(ruby-mode-hook enh-ruby-mode-hook))))) + +(defun ruby/post-init-smartparens () + (spacemacs|use-package-add-hook smartparens + :post-config + (sp-with-modes (if ruby-enable-enh-ruby-mode 'enh-ruby-mode 'ruby-mode) + (sp-local-pair + "{" "}" + :pre-handlers '(sp-ruby-pre-handler) + :post-handlers '(sp-ruby-post-handler + (spacemacs/smartparens-pair-newline-and-indent "RET")) + :suffix "")))) + +(defun ruby/init-rake () + (use-package rake + :defer t + :init (setq rake-cache-file (concat spacemacs-cache-directory "rake.cache")) + :config (dolist (mode '(ruby-mode enh-ruby-mode)) + (spacemacs/set-leader-keys-for-major-mode mode + "kk" 'rake + "kr" 'rake-rerun + "kR" 'rake-regenerate-cache + "kf" 'rake-find-task)))) diff --git a/layers/+lang/rust/README.org b/layers/+lang/rust/README.org new file mode 100644 index 0000000..9ef12bc --- /dev/null +++ b/layers/+lang/rust/README.org @@ -0,0 +1,64 @@ +#+TITLE: Rust contribution layer for Spacemacs + +[[file:img/rust.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#racer][Racer]] + - [[#cargo][Cargo]] + - [[#rustfmt][Rustfmt]] + - [[#key-bindings][Key bindings]] + +* Description +This layer supports [[http://www.rust-lang.org/][Rust]] development in Spacemacs. + +It has auto-completion and navigation support through [[https://github.com/phildawes/racer][Racer]] and supports [[http://doc.crates.io/index.html][Cargo]]. + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =rust= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Racer +You must install [[https://github.com/phildawes/racer][Racer]] to use this. Make sure the =racer= binary is available in +your =PATH= and to set the environment variable =RUST_SRC_PATH=, as described in +the [[https://github.com/phildawes/racer#installation][installation instructions]]. + +To enable auto-completion, ensure that the =auto-completion= layer is enabled. + +** Cargo +[[http://doc.crates.io/index.html][Cargo]] is a project management command line tool for Rust. Installation +instructions can be found on the main page of [[http://doc.crates.io/index.html][Cargo]]. + +** Rustfmt +Format Rust code according to style guidelines using [[https://github.com/rust-lang-nursery/rustfmt][rustfmt]]. + +#+BEGIN_SRC sh +cargo install rustfmt +#+END_SRC + +To enable automatic buffer formatting on save, set the variable =rust-format-on-save= to =t=. + +* Key bindings + +| Key Binding | Description | +|-------------+---------------------------------------------| +| ~SPC m =~ | reformat the buffer | +| ~SPC m c .~ | repeat the last Cargo command | +| ~SPC m c C~ | remove build artifacts with Cargo | +| ~SPC m c X~ | execute a project example with Cargo | +| ~SPC m c c~ | compile project with Cargo | +| ~SPC m c d~ | generate documentation with Cargo | +| ~SPC m c e~ | run benchmarks with Cargo | +| ~SPC m c f~ | run the current test with Cargo | +| ~SPC m c i~ | create a new project with Cargo (init) | +| ~SPC m c n~ | create a new project with Cargo (new) | +| ~SPC m c o~ | run all tests in current file with Cargo | +| ~SPC m c s~ | search for packages on crates.io with Cargo | +| ~SPC m c u~ | update dependencies with Cargo | +| ~SPC m c x~ | execute a project with Cargo | +| ~SPC m g g~ | jump to definition | +| ~SPC m t~ | run tests with Cargo | diff --git a/layers/+lang/rust/config.el b/layers/+lang/rust/config.el new file mode 100644 index 0000000..d81f7e3 --- /dev/null +++ b/layers/+lang/rust/config.el @@ -0,0 +1,16 @@ +;;; config.el --- Rust Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Chris Hoeppner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(spacemacs|defvar-company-backends rust-mode) + +(spacemacs|define-jump-handlers rust-mode) diff --git a/layers/+lang/rust/img/rust.png b/layers/+lang/rust/img/rust.png new file mode 100644 index 0000000000000000000000000000000000000000..e1968f7fa8d84ea48dda2c22febacfa22a1c5edf GIT binary patch literal 7147 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/rust/packages.el b/layers/+lang/rust/packages.el new file mode 100644 index 0000000..4bb4682 --- /dev/null +++ b/layers/+lang/rust/packages.el @@ -0,0 +1,97 @@ +;;; packages.el --- Rust Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Chris Hoeppner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq rust-packages + '( + cargo + company + racer + flycheck + (flycheck-rust :toggle (configuration-layer/package-usedp 'flycheck)) + ggtags + helm-gtags + rust-mode + toml-mode + )) + +(defun rust/init-cargo () + (use-package cargo + :defer t + :init + (progn + (spacemacs/declare-prefix-for-mode 'rust-mode "mc" "cargo") + (spacemacs/set-leader-keys-for-major-mode 'rust-mode + "c." 'cargo-process-repeat + "cC" 'cargo-process-clean + "cX" 'cargo-process-run-example + "cc" 'cargo-process-build + "cd" 'cargo-process-doc + "ce" 'cargo-process-bench + "cf" 'cargo-process-current-test + "cf" 'cargo-process-fmt + "ci" 'cargo-process-init + "cn" 'cargo-process-new + "co" 'cargo-process-current-file-tests + "cs" 'cargo-process-search + "cu" 'cargo-process-update + "cx" 'cargo-process-run + "t" 'cargo-process-test)))) + +(defun rust/post-init-flycheck () + (spacemacs/add-flycheck-hook 'rust-mode)) + +(defun rust/init-flycheck-rust () + (use-package flycheck-rust + :defer t + :init (add-hook 'flycheck-mode-hook #'flycheck-rust-setup))) + +(defun rust/post-init-ggtags () + (add-hook 'rust-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun rust/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'rust-mode)) + +(defun rust/init-rust-mode () + (use-package rust-mode + :defer t + :init + (progn + (spacemacs/set-leader-keys-for-major-mode 'rust-mode + "=" 'rust-format-buffer)))) + +(defun rust/init-toml-mode () + (use-package toml-mode + :mode "/\\(Cargo.lock\\|\\.cargo/config\\)\\'")) + +(defun rust/post-init-company () + (push 'company-capf company-backends-rust-mode) + (spacemacs|add-company-hook rust-mode) + (add-hook 'rust-mode-hook + (lambda () + (setq-local company-tooltip-align-annotations t)))) + +(defun rust/post-init-smartparens () + (with-eval-after-load 'smartparens + ;; Don't pair lifetime specifiers + (sp-local-pair 'rust-mode "'" nil :actions nil))) + +(defun rust/init-racer () + (when (memq window-system '(mac ns x)) + (exec-path-from-shell-copy-env "RUST_SRC_PATH")) + + (use-package racer + :diminish racer-mode + :defer t + :init + (progn + (spacemacs/add-to-hook 'rust-mode-hook '(racer-mode eldoc-mode)) + (spacemacs/declare-prefix-for-mode 'rust-mode "mg" "goto") + (add-to-list 'spacemacs-jump-handlers-rust-mode 'racer-find-definition)))) diff --git a/layers/+lang/scala/README.org b/layers/+lang/scala/README.org new file mode 100644 index 0000000..6bf9464 --- /dev/null +++ b/layers/+lang/scala/README.org @@ -0,0 +1,266 @@ +#+TITLE: Scala layer + +[[file:img/scala.png]] with [[file:img/ensime.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#layer-installation][Layer Installation]] + - [[#ensime][Ensime]] + - [[#installation][Installation]] + - [[#usage][Usage]] + - [[#scalastyle][Scalastyle]] + - [[#use-java-doc-style][Use Java doc-style]] + - [[#automatically-show-the-type-of-the-symbol-under-the-cursor][Automatically show the type of the symbol under the cursor]] + - [[#automatically-insert-asterisk-in-multiline-comments][Automatically insert asterisk in multiline comments]] + - [[#automatically-replace-arrows-with-unicode-ones][Automatically replace arrows with unicode ones]] + - [[#auto-start][Auto-start]] + - [[#key-bindings][Key bindings]] + - [[#ensime-key-bindings][Ensime key bindings]] + - [[#search][Search]] + - [[#sbt][sbt]] + - [[#typecheck][Typecheck]] + - [[#debug][Debug]] + - [[#errors][Errors]] + - [[#goto][Goto]] + - [[#print-and-yank-types][Print and yank types]] + - [[#documentation-inspect][Documentation, Inspect]] + - [[#server][Server]] + - [[#refactoring][Refactoring]] + - [[#tests][Tests]] + - [[#repl][REPL]] + +* Description +This layer adds support for the Scala language using the excellent [[http://ensime.github.io/][ENSIME]] +client/server. + +* Layer Installation +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =scala= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Ensime +[[http://ensime.github.io/][ENSIME]] provides IDE-like features, such as refactoring, incremental compilation +and project-wide type-checking. + +ENSIME requires a configuration file at the root of each Scala project. It +provides an SBT plugin to generate these files. + +** Installation +Refer to the [[https://ensime.github.io/build_tools/sbt/][Ensime installation instructions]] to install the =sbt-ensime= +plugin. + +Please note you have to use a version newer than =0.13.5= of =sbt= in your +project's =project/build.properties=. For example, + +#+BEGIN_SRC scala + sbt.version=0.13.11 +#+END_SRC + +** Usage +1. Create a =.ensime= file at the root of your Scala project using =sbt + ensimeConfig= and =sbt ensimeConfigProject= at the shell. +2. Run =M-x ensime= within Emacs to start an ENSIME session. + +Each Scala project uses a dedicated ENSIME session, so you only need to run =M-x +ensime= once per project. Any Scala files you create or visit within the project +will automatically use ENSIME for the remainder of your editing session. + +* Scalastyle +[[http://www.scalastyle.org/][Scalastyle]] provides style-checking and linting. The Emacs functionality is +provided by Flycheck. + +To use scalastyle, it must be present as an executable in your =PATH=. + +- OSX users: =brew install scalastyle= +- Linux, please see http://www.scalastyle.org/command-line.html + +To test if =scalastyle= executable is in your path, run =scalastyle= in a new +terminal, it should output something like: +#+BEGIN_SRC bash +$ scalastyle +scalastyle 0.8.0 +Usage: scalastyle [options] +... +#+END_SRC + +Finally, enable the =syntax-checking= layer and set the =flycheck-scalastylerc= +variable to a valid location. +#+BEGIN_SRC emacs-lisp + (setq-default flycheck-scalastylerc "/usr/local/etc/scalastyle_config.xml") +#+END_SRC + +See the [[http://www.flycheck.org/en/latest/languages.html?highlight=scala#syntax-checker-scala-scalastyle][flycheck documentation]] and [[http://www.scalastyle.org/configuration.html][scalastyle configuration]] for up-to-date +configuration instructions. + +** Use Java doc-style +To enable =java-doc-style=, set the variable =scala-indent:use-javadoc-style= to +=t= + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (scala :variables scala-indent:use-javadoc-style t))) +#+END_SRC + +* Automatically show the type of the symbol under the cursor +To enable the feature =ensime-print-type-at-point= when cursor moves, set the +variable =scala-enable-eldoc= to =t=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (scala :variables scala-use-java-doc-style t))) +#+END_SRC + +Enabling this option can cause slow editor performance. + +* Automatically insert asterisk in multiline comments +To insert a leading asterisk in multiline comments automatically, set the +variable =scala-auto-insert-asterisk-in-comments= to =t=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (scala :variables scala-auto-insert-asterisk-in-comments t))) +#+END_SRC + +* Automatically replace arrows with unicode ones +To replace ~=>~, =->= and =<-= with unicode arrows =⇒=, =→= and =←=, set the +variable =scala-use-unicode-arrows= to =t=. + +If in some occasions you don't want the arrows replaced (for example when +defining compound operators like ~=>>~), you can always undo the change and get +the ascii arrows back. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (scala :variables scala-use-unicode-arrows t))) +#+END_SRC + +* Auto-start +If you prefer to have Ensime start when you load a scala file, you can enable it +with + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers '( + (scala :variables scala-auto-start-ensime t))) +#+END_SRC + +* Key bindings +** Ensime key bindings +*** Search + +| Key Binding | Description | +|-------------+-----------------------------------------------------| +| ~SPC m /~ | incremental search using =ensime-scalex= major mode | +| ~SPC m ?~ | incremental search in all live buffers | + +*** sbt + +| Key Binding | Description | +|-------------+---------------------| +| ~SPC m b .~ | sbt transient state | +| ~SPC m b b~ | sbt command | +| ~SPC m b c~ | compile | +| ~SPC m b C~ | clean command | +| ~SPC m b i~ | switch to sbt shell | +| ~SPC m b p~ | package command | +| ~SPC m b r~ | run command | + +*** Typecheck + +| Key Binding | Description | +|-------------+---------------------------------| +| ~SPC m c t~ | type check the current file | +| ~SPC m c T~ | type check all the open buffers | + +*** Debug + +| Key Binding | Description | +|-------------+-----------------------------| +| ~SPC m d A~ | Attach to a remote debugger | +| ~SPC m d b~ | set breakpoint | +| ~SPC m d B~ | clear breakpoint | +| ~SPC m d C~ | clear all breakpoints | +| ~SPC m d c~ | continue | +| ~SPC m d i~ | inspect value at point | +| ~SPC m d n~ | next | +| ~SPC m d o~ | step out | +| ~SPC m d q~ | quit | +| ~SPC m d r~ | run | +| ~SPC m d s~ | step | +| ~SPC m d t~ | backtrace | + +*Note:* These key bindings need a transient-state, PR welcome :-) + +*** Errors + +| Key Binding | Description | +|-------------+----------------------------------------------------| +| ~SPC m e e~ | print error at point | +| ~SPC m e l~ | show all errors and warnings | +| ~SPC m e s~ | switch to buffer containing the stack trace parser | + +*** Goto + +| Key Binding | Description | +|-------------+----------------------| +| ~SPC m g g~ | go to definition | +| ~SPC m g i~ | go to implementation | +| ~SPC m g t~ | go to test | + +*** Print and yank types +|-------------+--------------------------------| +| ~SPC m h T~ | print full type name at point | +| ~SPC m h t~ | print short type name at point | +| ~SPC m y T~ | yank full type name at point | +| ~SPC m y t~ | yank short type name at point | + +*** Documentation, Inspect + +| Key Binding | Description | +|-------------+----------------------------------------| +| ~SPC m h h~ | show documentation for symbol at point | +| ~SPC m h u~ | show uses for symbol at point | +| ~SPC m i i~ | inspect type at point | +| ~SPC m i I~ | inspect type in other frame | +| ~SPC m i p~ | inspect project package | + +*** Server + +| Key Binding | Description | +|-------------+--------------------------------------------------------| +| ~SPC m n F~ | reload open files | +| ~SPC m n s~ | start ensime server | +| ~SPC m n S~ | regenerate the =.ensime= and restart the ensime server | + +*** Refactoring + +| Key Binding | Description | +|-------------+----------------------------------------------------------------------| +| ~SPC m r a~ | add type annotation | +| ~SPC m r f~ | format source | +| ~SPC m r d~ | get rid of an intermediate variable (=ensime-refactor-inline-local=) | +| ~SPC m r D~ | get rid of an intermediate variable (=ensime-undo-peek=) | +| ~SPC m r i~ | organize imports | +| ~SPC m r m~ | extract a range of code into a method | +| ~SPC m r r~ | rename a symbol project wide | +| ~SPC m r t~ | import type at point | +| ~SPC m r v~ | extract a range of code into a variable | +| ~SPC m z~ | expand/contract region | + +*** Tests + +| Key Binding | Description | +|-------------+--------------------------| +| ~SPC m t a~ | test command (sbt) | +| ~SPC m t r~ | test quick command (sbt) | +| ~SPC m t t~ | test only (sbt) | + +*** REPL + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------| +| ~SPC m s a~ | ask for a file to be loaded in the REPL | +| ~SPC m s b~ | send buffer to the REPL | +| ~SPC m s B~ | send buffer to the REPL and focus the REPL buffer in =insert state= | +| ~SPC m s i~ | start or switch to the REPL inferior process | +| ~SPC m s r~ | send region to the REPL | +| ~SPC m s R~ | send region to the REPL and focus the REPL buffer in =insert state= | diff --git a/layers/+lang/scala/config.el b/layers/+lang/scala/config.el new file mode 100644 index 0000000..ad98b83 --- /dev/null +++ b/layers/+lang/scala/config.el @@ -0,0 +1,26 @@ +;;; config.el --- Scala Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|define-jump-handlers scala-mode) + +(spacemacs|define-jump-handlers scala-mode) + +(defvar scala-enable-eldoc nil + "If non nil then eldoc-mode is enabled in the scala layer.") + +(defvar scala-auto-insert-asterisk-in-comments nil + "If non-nil automatically insert leading asterisk in multi-line comments.") + +(defvar scala-use-unicode-arrows nil + "If non-nil then `->`, `=>` and `<-` are replaced with unicode arrows.") + +(defvar scala-auto-start-ensime nil + "If non nil then ensime will be started when a scala file is opened.") diff --git a/layers/+lang/scala/funcs.el b/layers/+lang/scala/funcs.el new file mode 100644 index 0000000..e9870cf --- /dev/null +++ b/layers/+lang/scala/funcs.el @@ -0,0 +1,119 @@ +;;; funcs.el --- Scala Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;;; Ensime + +(autoload 'ensime-config-find-file "ensime-config") +(autoload 'ensime-config-find "ensime-config") +(autoload 'projectile-project-p "projectile") + +(defun scala/configure-ensime () + "Ensure the file exists before starting `ensime-mode'." + (cond + ((and (buffer-file-name) (file-exists-p (buffer-file-name))) + (ensime-mode +1)) + ((buffer-file-name) + (add-hook 'after-save-hook (lambda () (ensime-mode +1)) nil t)))) + +(defun scala/maybe-start-ensime () + (when (buffer-file-name) + (let ((ensime-buffer (scala/ensime-buffer-for-file (buffer-file-name))) + (file (ensime-config-find-file (buffer-file-name))) + (is-source-file (s-matches? (rx (or "/src/" "/test/")) (buffer-file-name)))) + + (when (and is-source-file (null ensime-buffer)) + (noflet ((ensime-config-find (&rest _) file)) + (save-window-excursion + (ensime))))))) + +(defun scala/ensime-buffer-for-file (file) + "Find the Ensime server buffer corresponding to FILE." + (let ((default-directory (file-name-directory file))) + (-when-let (project-name (projectile-project-p)) + (--first (-when-let (bufname (buffer-name it)) + (and (s-contains? "inferior-ensime-server" bufname) + (s-contains? (file-name-nondirectory project-name) bufname))) + (buffer-list))))) + +(defun scala/enable-eldoc () + (setq-local eldoc-documentation-function + (lambda () + (when (ensime-connected-p) + (ensime-print-type-at-point)))) + (eldoc-mode +1)) + +(defun spacemacs/ensime-refactor-accept () + (interactive) + (funcall continue-refactor) + (ensime-popup-buffer-quit-function)) + +(defun spacemacs/ensime-refactor-cancel () + (interactive) + (funcall cancel-refactor) + (ensime-popup-buffer-quit-function)) + +;;; Interactive commands + +(defun spacemacs/scala-join-line () + "Adapt `scala-indent:join-line' to behave more like evil's line join. + +`scala-indent:join-line' acts like the vanilla `join-line', +joining the current line with the previous one. The vimmy way is +to join the current line with the next. + +Try to move to the subsequent line and then join. Then manually move +point to the position of the join." + (interactive) + (let (join-pos) + (save-excursion + (goto-char (line-end-position)) + (unless (eobp) + (forward-line) + (call-interactively 'scala-indent:join-line) + (setq join-pos (point)))) + + (when join-pos + (goto-char join-pos)))) + +(defun scala/completing-dot () + "Insert a period and show company completions." + (interactive "*") + (when (s-matches? (rx (+ (not space))) + (buffer-substring (line-beginning-position) (point))) + (delete-horizontal-space t)) + (company-abort) + (insert ".") + (company-complete)) + +;;; Flyspell + +(defun scala/flyspell-verify () + "Prevent common flyspell false positives in scala-mode." + (and (flyspell-generic-progmode-verify) + (not (s-matches? (rx bol (* space) "package") (current-line))))) + +(defun scala/configure-flyspell () + (setq-local flyspell-generic-check-word-predicate 'scala/flyspell-verify)) + +(defun scala/yank-type-at-point () + "Yank to kill ring and print short type name at point to the minibuffer." + (interactive) + (ensime-type-at-point t nil)) + +(defun scala/yank-type-at-point-full-name () + "Yank to kill ring and print full type name at point to the minibuffer." + (interactive) + (ensime-type-at-point t t)) + +(defun sbt-hydra () + "Wrapper to rename sbt-hydra:hydra to sbt-hydra" + (interactive) + (sbt-hydra:hydra)) diff --git a/layers/+lang/scala/img/ensime.png b/layers/+lang/scala/img/ensime.png new file mode 100644 index 0000000000000000000000000000000000000000..44be74aac38e69e1d793fc9a7f37c1b68953f1a5 GIT binary patch literal 13038 zcmb8Wb983Gvncw-PQKW-ZQI7g=EUa2wr$(i#F>dPv2EKozjN<9@1FJkdV8(jU0q#W z=w7?JR#)!`B?UXvpvPJ&nWrcLi=CEH4ZIG{nKZ8$o=x ziA^LDU^--XD)W7Jz&J>0IRgN2sQ)P- zfXr+x002bGN=?&6Q(lh8#NL*{$kg80jKRa!;hP!&;Pc@525rq;jEFpJZS0(RJorie zi-PAH{tudwgy_FWT&(#?H070uMD3l-h}ap}7??-|V2Ox`_?%45c~rzC{?G957C(ul zi;DvfBcr>!JA*qbgT0dlBQrNQHzN}ZBMS@tHwC@3r=5$D2fdv$>HlW(|L_qrb2f3Z za&WP-w0)L6|4OoR{y%1Y8_4*d9!6#cCdU8f{XLZL zKUf|`Co8jW$^YRmz|8kwl>YZsPprJWybLwY z!PwRHTu06fJ10P@GF@}ZGc5^$#mc-^%QGoro7AjpUk zlj$In$)*Je+m>Yn;sPEHjT&wtOekWM)g0-4&!NvA{8m-lj509B3f6{Q-ZuPjAqpqB-}d(=`@R>F?6INA!x95smUP zX$lgkh(yz6IyKs9aq2|=q9tO2we0g-1BV7eu?)gQS5a3|*o+s;cp}Do*8hCl{tc@f z+0Mdr=}6DdXWah4Z>Nw9ghv5F6j8!sc6tRBS~m56s{U1xf_{N_>~6n>ctXlRq%X1r z07-OQ+x1Pd#v1k3zHZYF!&L%3PS~~t5Nl&O4f6%aw~OZ+74Z%DX4o!PfY5D1lF{a* z?l(f_6kuW`vM|84StcB{X!WAy#iqy_f&0xz1V49D(rIAa9xTx)98@}##vGv!Ll){g~yVb$ex0VY!S*=~v%~Yb= z6_49e`et4Z$f_6!2llDJqA6a+t)H;^HI-w!{@Z>DU$M&6>XE4|CHDj(Ju^haLTE-S zitq56y-b{ z?GOn7birSEg0qcOl~xvX!wE9sAWKY6J5 zXP9Y9j?GuRjbHdjkWo}@^3$SduFICiU<%oSzuKLTwyd+m>2dv^oZR!gfkxy3Qb<<( z7-;BuHLDH^)IVXGpM)euW^`6a)g*Xd4guJSu{4mMz#AH#uHOwGE7KS6Z*Vt&6K0fR zNEM+ z=6|?hC)g4{-9dvq@8VGk9dvJ~j0RlktFcAYC1v&y1S~P(z!fc^SZZmHL25vkyEvdB zU9;lPq6S!e=a-hAojg4~|J6{953sn(9>az4*Xk ztQ6Z>ZNNvJfuqEZXjG{@?u4##ID>tk9%3{E!!OFmi={6eQbm+31%B?=K_jpQnrG5a zGedp!T#KRw9^>Jdb!JMIj9lf>-$cn2<7}UXa80I5kNxxRw%%q4v4m6-`=HQqgaL|O zC*{TfYfC6;opO`NU84E8WH6~~{&bbA{7cqbr)I%u96JUoK51Q67bX4t&0Q16ytQ;5 znk$#N+4+cn*p7X~LFIH~)2fmO`{8g<_o&uYNa0&}Ty&L%pnLBFuLQJQf3 zEGHY8MF(3KS0Y=OXuS-7iHnO5)#MHBPPKh@!u|g3cbdLSNx#s!aA?D*&KqD3jg}K3 zMaQv6puQc&^ZA@07GedfK$4xBMQ(@1CzQR$X#oHDmXco@0XfL>jsv0n6l@0usa;HF z2NwPvV~iXgM5;P94nusrg*T(bs+yQ8baBJAb)<-j3Kv#i5;Ubk*9 zpd;4$k61wP9or-4{!Qr3Mdd|ZeOSHKzvVgxX7mdN_3|IE>VxIAf9aAcu~5%g#D zaZ9PDU?a~UA5f2q>?lEj^@d_-)6fKv841oS7k*s`SdQ>9$o*Xw`49PLG)~0i6ou+B z0ht~9N--X=04+}}8ptFQg&-!P*+GTz7-{HMu6dR%30D1eti`$4 z%;$v}VdF9XUSqO8VWB@fBs?jhKdzpgq<&%e6-Cv3D_3z!4Re4JcXJC8SONAH!AdM# zE1*lNalua{V|_;6H6qlB6%SOtT|-H+>>l5a*HrFkv1!W+lih123&!Prfr$vy_2*KB zali05fS7>O`kEy^V7WI203Sr2#e9U5_lSgU3ydOI-#eeDWC?jpBUXwk z)B|P+AeeB3OdWE8@N9p9R!jPNLRh{rOwXfE5^S(2NK&emt$k`(C{IzB+av#%!j{08 zJbMe&&%qsU``5eEBkV22kbiTLum`Kl`N?TAVR~@P7J~n9mca($COq>%7u{Jge;)w>K zkp4&_?R?5wOuwn*7}cnW6vScY0gwxTZ$3G5pcw+Ujba`39B9+mo5FmQLH_9Rz z=Q)uB!g5doiTS1el=B}d)`5nKnx?tcB7nN9Gs!MZkE#4?3e4p1vYXPA#Ti5f-A5fE z1G^gJ7Na0A0c4?*4GmIIaiE3WI~G-zy$18ZNgSKS1GVJq8MimX+|FVgEGd-gz$Bb! z@iWFbRt&K)$bw+~`;02z=kC{75vO{cGitIF{R6^YV)X*`rLCyj*HEiGe7NMji)@pz|!Zsk}f1!iaN_xZI?_H6LVs4;yU zBLM17ict^>vcj&KE+4f?4p&lBR=?YgWb9?n-h)u@wk zk^xkrRrG7#h!V2A2iMtM(=|EHOCtB#OJ-K5wn9RF0OiXxf4&1tozvZi+OiD_X6*y1 z(U~}XOI!f4>Vj@wUHdFsBpAsXV@uN^{a6j|I~|!n9-j^bx++SUF*Gzre-f~zZJH2) z*NLEXCuRTjR}d93PGKx1XugrasM#@xVW03aj7SkgTsXhE@sfW6xKwMcq7~avaAxP)61^L`G7Hl|epbD+P)wcFs?+cqTf|@mals zHU9vN;}(ubjPA3ke6S3u_~kh%bu_=$QUij93F@>XB+tjbbKX3U3b!pDDd^YPp)$@b z4i-vaH@f~`>|-;uIc5mzod?Tu7M`MLM=N9S_)i=u(#d_G-1pYg#7q}3DaCZS^Mjo* z6B1^+h*bwBqPkxy831z8)a2897F79pKkOOg=WV&Dr;0e4@pbhQQ2n5l*$ZfuCRT^+ z%)OV8S}Rf23U(@Z6$&hb@bQgC&)A{hr=f&o)U3~EJxOfV){B+;7jHYY$!an6cg1ZR zmuX+t$yKja?w(8vK#+r|2?`F;;1cZ*0#0Isql}d-AQzi}5*Q-HEuA-2f(!!E64`A9 z7vVK%8NB++T75JOmdgKLD2tTc$>CyGqEiQVM}7g}@&K*xcITwP*z9MHU zb*GTFcAN_&LNqxJ7E0jJX=zy1X99taVQnQTMHhBIfsmRT&T`kNe&d@$NfQHsD#n~` z`m{FR^28}Vwh50s1I=_}DTacY;`fqEm4lrspPyt_84 zavc0)HoiZ>0#%n|m+uYW-(5!s7bKZ~#%?h$B$FWaAbt%S^0!OQxbY62f_>|Ctdbx8YIxwL2U; zp8J{P=3zQN@l;;qN*h3qW$36n>dn5*uh_GltHNr%ndT~=1!Zy$8!f%RG^iwLYO?^d zB!-kqR1FN5^%fUmucYYgX}{wXO{aCRFv~0X&C_QQfs*v(C337`=m9Q8h8Vs&@M+jB z+H};!O4|i8C38SmB6aQ^Cj@TfekTXkF zj1=qcrE%aKVPN! zhfYf|8DM;h>&fkFvuRngfo(Ee5<&yT2pdgNY0tX-Tkaq2$Fq%ST95=Ha-GsyR$o_c zVri_($j-IPPi)fA1RC4%TpANDf>4{MH-@wVBqo~RtB**7(vtKC>+-r3@9MoPHRP_a8AFuX8f~ogA zbh*@!5@3g@9zpt}kPNiOa~=hjAM0FMv&7_aXpWe9%3}Ho5}?_@^Q+sE6{)mIM~ku^ zeULE%pY3ef@WjWTK#2YgKcpXBOTv3I;9V~dEcJi}z2{RK?K9~FmK2LUko_sZy*dwb z{lz+CY=2iVrb*={x7iO(RRBW1wUd(U4;(17I=5n~`#InG>96-naQQV|m#!WotR!}PA+;R76M>08eBKkSlDA32C=+vx>18U*2RN*?Qi%=; zO8Yd2n~$}Q0FMI0>X>TMDpZ^9wN9UIH3ty2y`kHpi9?Qv5S>H}79|j=Jbp(==$F=d zLVEuS$`wh!hF=^LW10rJki!qoFACnsAgL%ja1@2ptgvVskOraqm!N2~rZorpzHk~Q73~n`5JB*HC zh#*0}yQ=I`V-OC#chgIW;7QPz)bu-1o+%ZDp6o%onvY)Pf?Uvxhe?-(haPiI6v9M2 z$;c2Qzh}L*aQv0QpgSsIS4}RO*yb`>Hdm~o$Mw@vN7Z7`v;)Qp!4dM*Fj#1~eIOFM zpeO)@Ay3h2sM`MB2jYfs)q;(W@UD%FHMF7H|1oaVU8iq21`tH*HtoHLJJkb@#jGMj zGGFv37s`t{WqY?MjAY~%`M2JAHEBVQuvqh@c^D=-Yfnge7}b(tK0_S{TpU8jMRWEi zWtu1`Tb&8~{VXJD`_JRZuMrU~Vw4YB6b~4GE{ECsx&ektg8N$>58fQ1_w9MqCwb{w;oe^gebgv6DSJTHe5Vzxacsw=dU>b6qi|8yLQP>@b5KT}U z_m7_t3Fsf-k(fR}coJWT){gWz0Lm8*1(&xqsuP=~hnLQC0guJ(%&yau3TZ>?#dX{; zgE?5e*VQMNXNDpi&Mw7T*=<{|lNPG}R#8A8RGfM02{_R(bO{~;Y{WrtgM{@o#0ImL zEVtBu6|Sxpu_F@#cCiv8P{^1Q#1j0jcdaZcTUk&~Hlf$dnYvgsXD<=oWR=J$kiW7x z5)vU`2H?)W+ORh_$q`B)!iX6K->^wp1OckSx`11K_t5W&gp!R0=V@%mEAK*cCOt}@7sX=PXQaRvA>PQLk%eW=;Y}kp&e;%{2uT~ zKkafAe|HENE7oQFS~>+wC?z+Z-eh$Z|BZ?}mpgUCft6~CNUmd%5~cICy4;odQod5D z9W8B(3W=*_Pta+(%J^1mpqg1J@;$|80Xz55OrM5yRWMP#mVxtz!H8j-80XUQA~y0l z8djW+6I^Z9Bt~#mGfp#;J>+;AwT;{R0~iT36s!3~#96fCvs(F5)rAu%!-GQ}yqK}? zJ{TYn@npiLxm|QF1YmR31D{&%*#t^HoIymaADKL8B)mBwwQQ>Pyg2gsbcC%fBNPkI z)i{W*A-fx@&bE{e@XUQykGb1d{^UU}`TAS_BHqOUg|#@k8rosr1Wd8SX+_>GYySN* zO@Hj7fGy6wo{${=d0?1Nt`78h{x7HwhK0PxQw3a|rzI~Krh$4}mTSv~7`FvYRwD3H zf5R_n`C8Y-wpQUe-${4s?I&TfWJ+WOCllSZo2Mv5vLF=iDe~viC0e+ zgNDW60hVRIE0fYgk#%Ngi0D9zk{XF{glur?Wq_aX(bM%^uMC|vaVE_kf9o4t9QRl@ zuC7nr3_boh0vd@pltSoX7_O;L>9O3?ORawrgi|gxk_dQX;p6HOdv8tbR!gDtBf^-E&$dN*5y~57$MF{1ID2aPH0q#KJFoQ;VyD#UYlkeD5O{!;6h+H$ptn zYiM1Eg>fm(US5>b9TBpL!jL;3W4Mh9nD<~MC={!1Y-m9c&Rq$HfZG8AJoNPeF+#vA zg?p>{+S6DR4eW-Jg-&G_xW_T9pNT-(A52WFUN;n!iMuj~0s~ul7)AYNPVS(XrzH=l9X{UYQ7glmB@6aPRzmG$1Lr!X;Z9QzN$KzARxHB#bhh!;_tLV8CQV(Se zqR0r__uNC%EZuRA5&FsK* zx=HOJ)aEy1m@^d<<{-FFVjXD$3Ta7DRIbdUKigD^<-SxE{b#hmU7>A4kl!PRN>Zp9 zV+t?=kDuZDLmC$2tmP+txPEAwx`P1SQepcz69xne0Hu(aQhb}a!o<%igQHZ4(t|U@ zRt(Qcz=-Q4&~KE!gj{MG-E4y>Wef>j=K~_(ea5La7F`C()tke!1?*UYcf_y#EvT$?#r%aD;(J(UJkO z*+WC>8ec%YPm6O-W>lBI@<-O{!K3e0#T60;0kXiW(s0nZ+OI_wmXYzccO`ye`ES8L z)A1QDfC3qZ&3`b<0~Jdr&-Uo?+WM}s$U#ur(jZ3;n+G``GD=Thee{;1ZaQcbu14=` zB~Te0V`PC`hlmxo7~Lu3HxW|@o8cCX;&S=|qiZkiP@$vsV*Wln4~N<70o?QId0tt& zOO&TO;l@7N^zg&Jm?Ha*nxu+|nokp9K6w&mikbZv3)Ie+La;!h#;5I4&+P%Yw}0zS zM>XtA)2klWg;l-3?PdN(=)38nk%1g+{K<~yg(`g(2`KS!tT+nTCO&;^%`& zq>>k)B>SVriVnd-LyGRoGW|aisQ=%T>i;iHzADwsBHc}EZkZ~TTOFV00~PbYu=Iaxi$nT+?i7&j zrWvuWEX?C`2?thD3iP>U6CP@_L&D1nHvVmyRl`|U@7tIM?*V^u-Sxd|TDf^F%+s7a ziNGQ#pVkt8uRgQhcEg2Qrm_RGS|#Mcwr&>QclfHd2c6tgJO|Fob;84v1SmdY8R*Ar zpI|mv5X7ILYF?>YANgt&QGf5OzB35B>_18lj_NK>*KxqlgX!j*Q~y1q7z*FrHQY`r zzshkp&EbD-Z8IA=X4$RY?InGU>}+ggId9w!4!ps9yrDi+x^nlP*7Z5MgL>5H{@e{% z+_bf|Fx2=nQhIckFv72Sgzr|2*yeS8I!1@<7Phm17cOE*4P1^#VK)768KOO+mteu*Rcsq$gW8o3T7jIQY| z)*HVOZaUp1ad$py(t=aY@}9Ox-3Y0VhE1=bFab|~fMq-3`87~82lL%%93)vRI&bVs4GVui`2NG`U|i{7>U-aEd_cS{g2Dk#x#dG z;$EAnoW-vZA?Ba!#aaHRO|+H6Pslw}MFmWxX_Dv{n3}0I0R)=@rs2CcqyoJ9tk>A7 z)=tyVIt$Sb^KlM)Ke|r@hAOz5A>k=Q&5le;JP3W@M}C3H{#H(06uo1uC5I{p9Y7Ht zVXUpy7<16DnU9l?@D-u}dAXw*7u7^s6^Uf>n#*_SvekRYnEk_~z7Vi}Or#e>R*R5; zjxXq2dzIgE$B}F-AW+DSvqdZ1n#jdK{#*hAE}jvrSBN~hYQS{)ZlUHQX?m3U!#EG= z3APXxeO&8-Za*jFLq*7ZZRkm}srzVC>&|hU@`KN2jJfDLwYbs6kw!nrYMQN!;(5hw z!HL-0prKi`9+h?}*|GS9or_;nYZ(i3X>QVTVaPCXVC)0=vea?!`}gfKX_?)+#t<95 zm2uk5o`N4ar$Xf43OgWbFh^c9p**zCzDxj1l0anNuxJA#n$=}P%oayoz6%*{Dv#%4 zy@C{fL8OqY`)7^NHZ2F7#D#4ZA-G`;FSWcMo2Ey}C_yc0YCF9q&jcLd9#~?ZQ03Z4R)EkXp}$}> z!IKdGD2CqRna3az5*;hH96;pK%fp=T~jZ%WX1QODL z#=jX6?tTU+!lTqyVEK(XK--OxN&|}^PDfSnu$6>;Vnfy(@*OH)ZKYc0L-Sa7E|Fwp z`BO&Ix_Nl4geC`ax!~T21cQ4Hdm|gKxoMz1(}36hK8~A7$B%b0bjiD`nWprntW9T7D*O7k*0%!lVReh)z?MBUBJXvy}hT;Np0OB6kQkWtq8 z8~!p>1H+YpO%%ROPG_Y@>r}T5nEXA?&{x6LsM9@$0J-^J8xH-L5w9t@{C0M)U(I z1HtAv?X;A~$7A;8$*10IaQsr1V2~U^5(C{J=!Y-jSae_RX*@Kzq0{!T1x-o>J)&^B zZ(XI&-iX^B1om**k)C(Roo}0?L{f} zZ`}%PCH03nrOn4d=t^1FD#8dclKX?P31;A-aAcVvwi|a(CUH)$GdqZ;-q><-00B`W z8$CBmrTd50kS>G_69AQo-m4Xf(OSM;y<3o?Gk!VPCB@5Mq*i*e3aTs%W4LFCZ?)SR z;v6ui}%6i_iEO6d_8FvP7GsvNhDw*!-?=C z*S429sAW+hOPi;&q_4+ZYNc}7I;5P_#MW$)u{53C|1@I%^7bB+#a(C6Mxp4i_o7@1 z6|Oqch$LfLMF872in1TfUq_9}G=l)U*FHg|N;z;ohbmTv4^pp;!4N=TyfNYF3Qd?% z#(E}cZ)x`m(>BT7ed6pFnxo+Pz7SBR9zJrJ-1)$#Ouoo~;b6Op+!V@5LqkLIjOy*S zAEJ6idezpQM8HIaB5g$c`qtQ3mcw!xI4w7M3s$NR7hMvm(ci1o$Ffk9vZjCdG^qvk z;zXx100AACwwwpPV}nbGJM%lkY$+Gq5?-dVJQ+BU&274) zzR6{hvt|1{DinGcx^)b5?UwY5X4D`l-g01?EkJlr(`{Cw;DNp%r}`F2D;KCqI0^L> zGWSgAagR#fh^j+uz1IsDSdi(4{po|;6IOuMQ7?V7Aic%5z@dnz!{KUw;b{u-iV@J1sfT;CBm#< z&H7%FXNz>hnl?cx;lmjAm`l7f3#GKO8+4d%+$Ir1@wx;OyD6c#+ z&bm}5jigX8mjNL6_)rJhoSZ`GaD1T7<%4et=!Ur$N}&veslskUiUQ$PaXjnQ6Hc)W z7a#J!67lF?ZTd5YQR6`(Qpl>v+EkJu8}JKhWek@V5$Xy&^TZx?QZ96 zSdUJT*M_qI<@b4H2O5#xe=rjT5*P{mX0{6{oqYRzS!Cw16Nb#w$3>#uB z$t+*W34n9gu6?)3@E-QoD;n_YdQeC6bqO0WmYe^&z$N{38VH~)5yur*9K*K$1>mU( zz8*hF+$4CwE-B`4xXnq)4u-kX-0~qL6J)+!o=%J1SFciNa z`(CCVW7Na{f)N)Z65gp0map>}y%6J9Ljcc2K@iYIB3=2R5;OW%l=SpAFrdvMslS9c zxTo>e!>r#v=92^=R}hQxRl#5$z6y~?l4-0arwCB~eZ_l&&y{QC?usRA*W zAw~d00$~xcSzTtn_Xaa7WIcuL3MkoLqXd0aNkfv;01Pjw4ON0&jfpL6&&6UHsaV3@ zhM(STIgm@xw7LBL)?ay&`TsCZ}) zc@x4H0cPaGGP!gDQpD{$kaFKhzBzaWWMMR0@vJA}(?+Nqba?8p;lAZ>FU7>jcJ)PH z=Y#`^MFv21xm8pwW|vXnaT;}(9$)>|(UyTJgB|S%l9f!1{w$lJp^+i2tog#9305|L zS!O+Ihmnb;27#vzL(8VRcsrXDTWm_<#4dU8FQY%fmQ3jG=9}w1aLz!}kqV!FjzWlb zOdQ%XQ4Hl>s`)Ch2LYsq2h8yc)3{|{?4JT{jE4=%(qcsdxzAHic6vbEtcOWtN)0BI_+(1!SiWC zACcxi6QtG0lD>f@t4<;Ti4Aphz0MYOdpnP?7uhyH865{z>GA+OSVI}ZdB7Q5ua-7Vb zzz4*ml3Pqc;c^elY|i}7)^k;5mZ1Cie4#Fb2Qa0?-i#&m&3Ih3>Y~i7x!r&ztbOYy zjS7vhOE|F+>3r==j5fN@dWpy2Ivl%HnEzKcs$dz!DHnQUXY&@Jh zWI%-5Eb#~!jQmOQU{UX{Z>3w5NbS+Kt2)RoCP)^B$BVqH-#)e_iTQK{pgvS%SpG-1ON85y+Rl7&_?XD*~OBV!)pNj!*1m{-55JfX#T^%;gg=J7g?oG*fbo&u#l;)HA>bVFE`VqvCx&tJ-EvN`ZdTI#n5X z_#bsa&Y7q>+e?%|d*Z&`AXt8R;zGPFavqE+<>nQ0)nUqHFc(dO3+b@0s!SwsFgT^i zQ;MsfS4;?t>zf@N=YMyObe}u7n7Xl#QLrv`ejc>`;P!vo8)z`l3S>-=fy(<0 zx@N>RwjTx`vAsg9b_8ZQRO6=htLn5SP4I4WxC0xlmTaK!pCCN%E$zQ%LK@R7KdU(yW`Wo*)zC-8lJ{yF;;>ia#g|= zNgijY7|Doa^iC>-A%i5#lPC%(dLx{8CehGc@bABA9=+U49!T-3oGc?Z7*fz_ST!0k zHN7=lH;iR6P5dWAWuEK$-a|a8&MdoRvW!~Yt(OTewh%)wo_^Y`@!et znJ7hh33wPB7ytkOFC{6e3;+P}KCZ8!AU-~2j=HM=05Etf5fMcx5fLIqX9sgDTQdNF zGbTn&&k|1!jla{yf`oKh#g;Y9wM+n>3_eMnwV6N6@(yu>zlk9QhHQP2h?2kQAw=;wy5uZ_hb6Rk#9mM-7fl%O7o8aE~xRpt8h{3yU*JNeT zh2KBM%KU(KZy^#~O~pDg4JmGN_(2@*nW=8sAYabf0srA z#kR&dlnS6vEJDy>*w?cwIi8V$!{k^bl)*TA3R2F07j2Ao4y@IJs8sqAqp(ibetPz( zG(3&zo97$GUKte71K$V@PMOXa(G4S~35sk=DG0HRv1(Z!f&jscR*i=J*`UB26Zfc( z_lCPEW2(PrAo*={)F9-sZMuotG=e`EqXFk7whCjx>}O?|t_iAuKP?APfE=3$Wi4bz zpIPcY!HF4!*y}T|+Zw;d)PT08q<#kk7qB;_cSloUv~lyG=8=^k7!SJHpmX1 z+iJRasNvW_>|QDZgpIem!6U&qU6C&n~?qp^L${d+S>q?QI_nFRWIJlT@23 z=}#oK=mZ$f1MIs>M$9)9a8M?~N~=Ms)o0Hbc?`LH_y{J1KT4l@{)rg2+9oT6~3Y=xx4qk>vqzbJ$l(OBZ1ZwGvS z!Cxx3Z%{s+H`($7YAtZvpTSR|d&tZu8ROKlQ>SL09!Hj8g^$X{TB<~>+iBy1Uv2%0 z`<2DqiHNF0FOmHW*ViNP^Zc29FSZGgiWe9(LSm0KGY+{0&UqWU-muY+pCIWAyR-QF z{J!^z+0*}Z@#OoEOVtrwU^53#PVe@W>oULKdnLdkCIBQq&sR;+@Xg@^AD|s2wOjxI zSkymn5I|-&761UEWu>a=swpSSZQ@`@Z)ECVY)0>C=lD??0O0lH{+uUBi58tBoc9OHX~xAXQgK(=7%97BI0#6HRo0q75}ID z$2UG=OIKG%ZUzPq4-a||7J3I~3kD`GE-nT}W(H1t*Ezn<(}{$cBbL54rSFfh?GGW^%} zM^)ZGcexdut;{}p{?k4`6YpOo|G#_x^ux>Wr}O_an7=vw>+T1u{4l%>|4kb|jO+k~ z762d!kP;PA^#nQ3fy_1&OLI=dw#-o5Wx57= z^6auOorF60j5?Z@f!C1A4S65*Tf;A8SjILYmW3=aXbo>){@H8io@gO8oY9`K( zec_iKgXG~6RnJBgS~3z5RRqvj8D{P#KmVN#x5SURa6>UARnZ2HjYF~ybMKXWx0_S(H2X6L;JV3i|9wMlL_IOXSNV^1=6-UUU7Ck z_u6Oem+EKTmmV$G-*9ac_JTgy#c{5YQ;`4gRwH@;w=Ov8$6A3D43#}e2O6Qhuzq88 zbzTtLuG0~?K@R$2wrr)hJm2%39HV(%b7r%pO6?8rj*eS7`k#fhM1dCVn zGWoULI_>T6QQY?}p=BpfjGc?qn8$S15|^-53EGg#9v9hp@=W8CI{n9b8(yUdKAt(A zcQb!xs}%x9C0X8NZhG8KwY;6$*g9{!XRR`s7WtvF+nX$}^CL+|F2~@2;Wvu^wI5mA z!3x8Q#&9j^8zEPBMoqPC7jisS)$$&@E|kN>!=I~6nuZay+xqS=a2oo@qIO8R)6Q_b z;{F+Ox;}7jfT`PeZ-JUD@Rq_KH$(PY%XhcZ*Q<@UDfYLY+Kpn*>%cWO1cP;}2zmk) zoGLsgqGD;L5!=6~%tic9eT&SBM{M{(3N3aWFjiaJMRhCjafR(WdmXnaHuup)(DP7m zJ9kr!wC1s!ISy`f)TBW8A9X`WWPcN5-p2_U@wMN~D8n5jr-rl<_a2^=^Z0JR^7^aP z{i1WbXpPc*hWkmAr=)rzwaMI8Qt+#VDW}$k4I%-_!>R}=6Y*bX#*jdg2pH=%8_8l2 zc0PXq#MNY;pU&OTsBY@jznAI!2`SJ7%@vvJKZ<-G4~p3Enrtl`z&A+3er{t&X~N{0 zP{MV4XQLREn5L*@H*_Xc#Ex*9=EJ{K?5`Y^TnP4~`r~M)x60|ff8I?45gcuTGR^0B zq$pv!x&WGCca^EKDKo z8`}ok=R=8qKx;Df&+zHSIIP-1OaY8&!TS{M;k1gY?QWHK_8ZoGzrUN<1h}=szrLX8 zbh(FYDp(Tkt!xdtTDm7@hIA-L&CY-%Z?j17gEoy%SBi zS~s%I;S%82Pim4^br!sHHYS}Z?^U{ zlWhuT)1BvLCMJQhv1e2P&qjVzBGqUP6CeA^USoXuH=_PX6>RpiXnq`z7YD;LgDS5e zg%^z?dsJFOpqI>oi!n_J*qUHnZ=GnV(KPzK>6>)-u{2)4VH(eBTPHuKtZPr%M#a_) z#x~X1ZwhJnV-MmmTcP8>4b(~52zQ!0f;6sq(cBfFLwyVQcM9c*f}l8YmY}>ocPkBp zAq6JNf59q9&vvoMgsk>sDp@1lZxDwY{ak-|)vEnYSX-Z)QfYUPyVSB%%c0fj>~UD)bP!wj=o{bfIN2-{D$3rAzbb5c?gZ~MjLN$9%oBPW2@ij*xhF` z0rZMjux_rjYb)y*XP==S?Z3n#Y;f{p7j8q0#b_CVKI*o(iO6}a~sIX9jj8r(zP6(uFt(-Z?Y+czdCQ+-O|VHc&0z=esy5~`8&&Q zC3!&|MEchS@=t_p!vzCremRVEJx6mrAB0oPM2DTOxfH~8s&}Es5WOg;CG_;X< zE`lQV=wJERt@cMAm`;G=q1`Kf=aLylV?p2*{*oI}=MoWPyJ_65)3SP9qsQJLCunlf z&F*=0vD~}oj@x#s08w|{H|@)M{WV{_L`vFb46f~1DR!ze zo%0Q4kG8GYWumR7dA`(%9ALbjB7*@BgbCpO!noNeNOWazcS7=O6xFON<}Z{_$NYmQ zsphWHVIeS<1*7$voO-SD4}6ATM2zJ|a8&QRb~?7EOMJ_%PDK}89?kF$Th^~Q7}&a< z)8CeB8|Qkz<5Xb)U{#r}iQr;rwaqhXVh#HZHI}8O@DldJwDQ=+Kn?p)u^VXY!%$`W z5oes?sB1tz(It+La-`Rfr$?3lt0J9}er$AUXy!_;B(olss78MDp-?wE<+!%&Sz9Dp zbXgMol-t9yR3M?2N9{$&8Nylj6+fmNujLrM^kQ|M(+{No zs8@yr(nLT6oF$1q$nIo-gu1amx-82sz^4okub+T+E>p^-v0Lo;VpfJs_lST^^r ztU{u!R?q#{A(P^@YGSF>lQ#`G%4|(A4EiX~*ndT^IPezJQPp_CLlGIxZCXD*QVt_5 zDyN&hP>TqZ$78Jxk1oTSdr~?(i+!~$oUdi`o&y)D4XfQE37!%&Hp@ydNd8A|QOsD` zCM@mXInoQoj>_OCBP`MUVKDuH>xfA_P3{s1i+o`GYlw+guvF{ zDugKXBo*|eU!M}3<^e6>uzAFDh8=gUtzWyze>f74_4ygXR&hK)mqqxA4UM^~NW(@8 zZrimq^|s~vZVx(i*>PPeJ6+aNe-&b%kntzzsy>Pybdz9Y9F%&YM{TgpQy2`GwX=AQ zwO1uCwe%cSF@R!OBPaEZCyqYN3=@3)1LZ$Uk}pNd=mC&G(3FJjBu4n$&I``=X=L0< zjtoC3>Bo>Z-R|as$$mGFZN5bW{KfG?RXn`&R@Vl3t6f7u@0O8>H4!a300t0_$yIQ% zVyBgcF({nTu=qQaJk%1`-8^7N;S;}(I4c@+Za0EEOt^4KvV$;e&+F`=F1(c4{Z5bM zFM<&B!+DvZv zNNA)O0t)oQ;s0x&nAw9PDk4s_l7OQR3IVd zpqk*^A(a^(gTjU#CtzVQAtU6EsHWpUNLiL%EtHqkz#0g#s4WddNe>GXP3e~Za`V?u z<6g`tmHeYE{vpF3WV6|Up!uJ)Ld`li*=wJrxXk3o1At&cWll*r<^T5`$o9(vcr1F@2(#!l>3su(GRnhxe#kff^)0 zbza0|*3d@lf4^e&s}Q@)Wh7zJ%;-(V1FsHhfqd3p<^89dMy z7Tsigq5AivQzr}Ff*=IN>^uvKx!-B$(W35aJNwwa`Yi`+Y)@TwO|4(HO)=9rwAQe7 z8wntp`?VPlN((t|!|1fd$&Csnf!7ScWC4-sG(}9yEwRx(u~*Rr#etM4iV2fo$YOGS z!wJL%)$iBrE5bRN;a?`&@Q_svY{`m~2c=|D|AF0EI223zz65aG{dL@fp0k?f>VUR! z@0!={jMVdRC5*0l;O2652>ghm9A35E=JNceQ4;NDOi5Boa0naYm-0$bAVxa1up+RE zyapK*86>)i`w;tQd)d;iC@z-Ogv!Fne6uz>s^!uk7Gds3Dky?j(xg$L zqzis3`vYjjD@Lu-Riy+x9CxMGb7pfhAOU6a`PZgYk<2d#M97#b`s1vUbRcpLX-h!R zk!*j)SS~ZffJ%j({$%<}U8k8}5S%JqNv)uPWMFC~n^U5!FuddqKE*1LGFwUJKz7JV zTs_gS&aIkNi|iJ~`tR_q(*z#_NqD|1`6LumnKD=RXEL>$rOCNN8^T$+OVaC%ml6+| zEqOI-^GUQm(w{1mMan|gzNOHLcWU~+az+s=x7RAepTD-}uc{u8!jvx|X6>4Lb$`=6?Z>EzCW_sn zOA-EW^OS;RqBypdMV~Yn|IB5`wNL~OBZ=95#kLLARQ-GXZ)NhSKqQ#(f9%oTeP38Q z>*6?`R(7Mk<26{$-I{rv+4uVo#K?k5!0@)fSm0^9zQ4GzT+dk!>s7=S=U#nkv<;WO zJzR+T{hx9s0+fU1)NOy_GFTkmyIoN8Huz#+|KNPQlE@*~JNLO0Ew4DY)a!8F50_>t zO@U(TKf?kMnw4yavRGG!ueQYsN32!bfBq4tx~;Ot2l-n?Nm`9-*ME|Z1I1FhPf0Z5 zF!a)3rah9prz~x+8Z*aQOs(mK7_kdJnwNeu+=BYU?*30O8U1N}G|i%iAXCPM@bEU* zpw;=RvP8xFoATIaeugKaa;>P5wNr)g@@dp{aL#sW4QeL6e(wYf$^XS# zZs_D*zE@Y(AAOAtXa))1ldOGI1L6y!X=D@5C{%LM?qIoCSoPo&lL(%RW2q;X2!>?i zT~?Vq%qV1aSzxPE8y>&5E`sc}fA#Oow2?dJ5negvl9STjAuhPH_{Fp03KSn`T;4(~ zSAMK3m6=K`{Y07_Rp#T#{_7=*O@ZvyNyJf-9~<4LnH^@nd!Aok zEY?E|u7z!`w994+p!saZ6MDF1SQ9HHf$-;GGIPM9(anWH7b>mA?pbMQ4AgViFRiWMgQM5u=q=}CrE8#D&;Dop z)?UlMaQelI<&YL6pjown{9wXd4t{4k7dqQdseH#mhz$t|37@ObXHU-0n{XYv=BBxh z@H%&bVS#5>PcbzzUj=;rbiBJqSzH-0q;@+5kv5thLAx#Riy*w3dLI7FSO6*?J~j8FiI{;`ko3yK8iIa#F4daq)Cb#F_IM zdI-)%{V%YP=y)1W`v8d-*Sn6qlN*?yF|y`Kajt78XRIo;>tQrn;t3bdFSaISRKE}fP(Bvh=<$VowBt! zA4+euIThJ$cCc~o#l*y{9Uqs)#Kqx0uCK3G6%`Gp(rOt)p7-|RyFcu@Pcn_H7DNzO zZ&{UEEd;sb#b#CBMEm|hsY!u97~;spbA9b2fEoS!C~SJ^fJ(GicMCVZd zoaZa87_X8VD^2!Y_vAJR;u0Ga^tHumfxPpw<7}YqcP3k<-C%eO5Wmvy_Q#Z&#?En3 zT+1LhHv-oI63_jr$whsfUlrd?LR^#CL@M|#D^VCyki;5s4D=rvYOeTaj$dHcXC7}T zG4k^0{S4%CUEi#0&(!RfTu%Y)Wj-CglE!01HFDDSL3lzs;LPH#w#zGzpZkTL@22%T zg+AY>_Vb@9c7(8Ox}T4RHq&jcgp2O12t3tq`mMdMp3%Q#=e&K^(3Gh(uQ>?UNH#)% zKk|z<*q_UQ$HGfUCmRB*$Zorw`Ler8H}#v7OZ}@btSmbVAtsPgUw>C?S}89s*x^411Rj%0u; z4$Q(ns#j?u$G*SJyf-~>zrWpgtaMMy^WCZPyglsO^#_9oWrG$7H<{@EC2RU*r9Omm z1kLflrh{7{RfIa1RRvA=z3%l7=kgqFCz#}Y$a3NKr;+G+dKn0R?2wLa%HA(>Kp2{E zi3^57P4yL$`N@H%I0n5g762;H*wRwcY|HE@FTh{&eit!dHTNdDbXAHX$MmZkBg;yk zZpZXb?mxzc{U4PhBDyJkoC@RW5hkZ{Y~NL}H&gA;4rnysaL)4(zhZP3!cUCkRt_CNPwguAUsrE4Z(2k zo13_c+`$VMW#teCl}vS}kGOL-m%f zpD9_?!@<}AL{fn@0LU#u=~kt{eL?(a@24uCF@E=31%GQq&pp(Oz(#$W>ISGb<{5MQ z3KeauMktg)>?`k;PGB4)p|7K6R$vAN3p#*TR_Oo`T9-)DgU4CX^SpVrd_CLAn(V(6u1@+ZWU-uRc~t)NVLpgi$bss2L1tEzg1w*Xyt{W5@B z$bwvj;H&~Sh-rcY#7=b)-~O7-zf|vlgVP!_0KV~cw8aMNtA(%dGPIxA{!UpJtPtGk z3q`WKrj@vMASQGGK5KV}lpk3SejbWNEr6CB=IdOiAi7&O?KW2qQhumo^)%4y_9QH%a%ud*Au4UymgO zv@eQUNt%*cmAO<+GXFL}PDy8z0|zS;AuvwPtUE?r{Ywol+cR&*i}k2;(k_l%z576e zI-E>@<=M?)5syhGkQT^cM5=F;H-(_uEtjhD2@`0tcz>JpMi*Ev#3q$SV0)ouEhMH6 zgcXd)#=nEJ);i&>ow5y?iYPd>%Z-4H2tZgq*Q|1( z_$5dshoj5YXt=_&{V4zZI1^z1e9>xv^{vmUQ47=%^c^8v<0n)5{kqLX@B4G_#TS<8 zbe{Z>-|bP`G3Iv9Uc(x`kUxA~*gs@!%KnkJWIKj-4Qu6Y(bi$%uY$2TYOxt4amO39 zq_S71pwFMIo`nRziAI!En}e}Ww$NZJ~e=?Su&Nb=REOh+QFj z@>jiRa@7SmB9<9KnJNF|j3)OzEw7t<7ce55#g zLNyTmmO@}4;0x&>6#xoZ#c-4q6VsVgkRk|OQS!qp5$S|2uj&mHjkHi=d|_ojeu4Vw z_gRvFm>$3d>&o9IH%LQD>N%X$S@Li-o}Tf^;Pq7F;>_UPTk$)b#w2*%u5f5T6@Ha! zhtVL!^9P_~VZfQ##bNy&pvIvKDmk}8xl`*p6{1LyR^{~>R=^`t%~rxr>{1zDN#QvX zO`)(FV2s=wsEZ_MGWMH|2Oak|X8zfZwY+ely!y%wQD+Jj3@2lS7`G20y=4ltuJb(Z zVF84Ip#XrKl1GIq?0PO~cXLEB<6#z6=q4ckp7+pfpjkoKN0C>|F$j4*r^PiCTsf@KUPB1!=+iV`MI053&} z*u*1j6%{7hS}09BNbr&tCj8hgjq{1W9CLAO1bZ8P z9^l0pcPdp&;OO@v`inFjov0xgLRH~7ypgu+E zMy|+I680C)I!7e>ww>TQ94oFzVKmT$q4HT<=p?@mA_MqC050`XYwjI;v(sqN# z>Z1l+kdm4e9z41nUMVc_wqHSVp#&xXpgpC_4C^HYp`8HWFO0nL7N_*}q4Bv*c$<3y zvJOjAejVEqvIMo|RES73BT@VI!|>4Bv`b4y&-9J27_JcUOSn~FTH_}`VJk)ZSjUs% zG>8b9-$7-N8nny93HlA$86^BZV0D8yxNu<)yOpswRf&CjhE+2`3?nN&_iR4v3%M8# zJoy!&>aw_h`EV3t{&+xCms8YLE(W|lr)0$*;Ydgzpm9rY^@Fp}H{nVm=*n7ipQQT| zk&`dZRSpuWp8A`AhBEzSc@Yf)66;TeV4je#&7w6lOD`6~7Bt)(32EDQnghgzR+Mxm zSKy0j0CR(v97PNabfiC>MdW3yLcaON(KDz2vWFSr z?e#itPDK9Yued;&&>v+PrW{A(^CFv{Ud3f@s>_=aYb_QM`6%_{5HW}XYh@GD%Dq=_0WWCQT&P9ul4EjQEZCnRLh)U@qjM4A9fi z9=cZvL{jV`?@HHT%Qc47RMMS^7YDHQV|5TjAQ38vfIvurhmVXuWQov|N=?2xQ#k7r z&lkE?xJ!qCXPuq?G!_bm9Z>Jt0iZH1qgxvISe-S16N640O%T zMH+dsh~$+-QXs62(4lVpa=rouu#gr`jHT!RI*oGg>M_q;cVH!=3{W$bJ^OE7*6DJ2v%k@U?C(#=U)24!=E;Hbc7P z6aj)%=?GzNRk9#tbuwSHsPv$}((Ox^hE=)3MJTf-6UQT$R8{zft7A|G7=wd20w{OL zsW{qKVt`%!3p7?+lE5Jd=Hz`#ID|1Zezw&dnHD?)AnH0g#BAnppn3 zM0oxmeuM#Niq*#4yDCPV@UW4d4=IFOnTvwJxf8fEdCFSn4^W0m_PQCPh_Gq>9-2k| z0{N~FX)$vJ`}5Mt|DJcs^WOV`YpQ4jy#mrHY;WOl-|YhBn*I9L6-{d2E-@gNetYYs z>JPG47@3EMz@f2beW}L)Uk2@g4iN}K`9etmKDOd%9AsE-4+1m%n})A1*a9x7PJXy- zFa2qaqK=W4x+<_;ZH0&JrC!D#ZSa#nF#t9J`p`5Kxb6y0SaxDRXLtd9q}BRKHV^}h zyAGqRK8rVM;W#;%f+Ds^lM4zOAe9?!>xc%A_zQ7eAHgCpIs{%}-{L5w@i`Nqh=P-x zsY$&9uU*u`AK@=L>Llw%h-M(;7EoqdFH45c%|%WaQ%`iuu2g&;)^JU$-!XK5cG>h= zywkD46U+u$k<2E(U#?s*2uDWMFb0Yrg~(BN$ODoWE&W0_uV(7wd1F#+Sk#)<`*PT? zl+1dGs9ZG|oaTB2X&}SOdp8@wzesQsAMuet_ApQvh{>}AjCHg&8>jCAI@gsMu04zd zyo~fIcO=Q)a&D}gcq>b!Ns###n`z0tNsm)=*mdada`eS%7vQ{Qt7po$`wqE=kp;>^ z``>T-v0Z@XnEOKRR%!`<7<{2gT@X?0#%yxF1a)|>l2%6Zka&!0uF-pSnwFrBa)ddH zjF7PU_21cH(BnUyh29ieYx$wp&DEai55s?^m+}8im5a_5(L9KS0a^!q6^=+|G=vBM zBNESgp)KK*=>t78MFNNtM1lx9{y^e#wFeMV`kn58^q_P|!MRc<3HG@9&xmy)b`rq` zN^k=h6LCy3B*S&)eJN&2k4Y$K`83^$mWtU}5HLnp4U&JWOktc*J?D@bO0vjzG`Wjw zl+x+V78I%UU~Bit5XDR;^WxBATQgMCN)rHoy3plUy+5t=LbP-@)|Md1q|w7KC~e=Q zwt@xrRiXLPAAj!(p%LdWXy+s(2zYE#_$5zg`WL5;mE z^cs8EnFp;i{hg5lDZM^h;$MFwM%C2RTq6MQb8;7sWF;3AjPIx4r=U3((}S4kV8Tig zqYL226#_rOC6f#ipM&fz!(BqUBBuA{1ubzz9M+9B$ZE2AyIw9#uvOIF>(3FW;hiEo z1`R+0n#!}qsN(xvJa?8%xv77T*<|WEZBly!zyw9LPj0`2Boj!c1%k#&O$Wl4$`J&H zZmZBcfgK<1C6!%oqjPiUli%d?D#SI1*&qPla7V+`#0x&FA}YPSne2mT){&eW<2ySf z^FA)H-$ZW=B1xs;31GUpYew{}Z!iPVfH?a=O4JI-6(MzyHqv4)g@PUB_w4?7`mCgB z5N{T&Bg18vj%ORs~YWQYCz-1^8*xb=PKLRmgHvO>Ic78LFm%5|>#7IYyhHJ5B z73Xu+z2bg(4u4Vad{}`r(&@1u!y*6N`P)byW1eUCVgG`$JE`hG#>Xh?S3LdpK90Zo zX2t1WNnT+eK|gp?;=CCtx6v=Wh`;Pw=fq^}Jbwz~I;4OHBLt|{8GFi>p;E{RM$)1y zM^*JiaUU-Qs8@?->;(ilfQv8yV8sW1R_4!_F?RT(@mIvet2q^hyOAp04;45kvE~vN z;AT@R0X})$Fi7PAAX`bV@eKP|0!4&r+T{^T`{GJvjy}=riQ{|+Xq0(8ajoF#BX|VD zRq4 zp1DpG%_k|S9NiSotlcC)>&P(nJf#}4pt?4TQ7$99z6&87et!;lXEil=t;hX~ddUX%5DVe%Iw)sz?EMKNJyg z0t*1s=RL)?vMR^1nY_>B7t{>v2o{GRTp;u6e)-*M#UQ|sbKVP36X(5H^aVeF@HSmy z!aM9jqu1k*#M5tZO8*7X%MsADz}#=#Usbzd-$~arN7wotWqFnAM^RWu*F7Ke#SIJ4| zTW9aKMSg;jr1_p8h`;IAR$8Qx5o~gz`Cl0!-M&CYx*o&w71al+gCrraohzSIfZ387 zgvnD(4#X!O+TevLSWal8CbBkoQf}RCw}q=G8X+bdpuln}rkX;LV@6vmC>u`YC_mKO~O1wS!6(K*z?tjnsCsWLZ#s%%J5u!)!`^7~%7M+7Jz!b7ph*Cd{wL#QDcE05J48S<^!jkjXjX(u!O_bh+n2In8X&WVJ4 zlOw@pIJWrZsWr{4HVRKarNvQ9GXRm0RMD{?)))Er6NP{dz9X)gF)gqze47MFR?hh5 zh@5Vo3xle1;?!_gm74DYMdYDakpJzDw*@x5?CW=W(*p(ODyE&W~bUEgXaeed|bbAamf%rO? z_zFVke?#TIOeWCU%<;OUzU^EIztuY3a%Q$x=O1!6G08U9$oF7xi>3gVc3uklB~Pni zGL=>jsU%O{x*PINk-a>&QfxVXOlgf)SRw%~D1S)l#J7w>geGcFUI$C@NA=n##1=<~ z1vqqN5H!v4PL=U=*2f?=HmDPe{1f{}Q+{apZ z*Ir9dej3rc6o!Tk6aIoJofbQFDTIihU}_kjKF-!w~Y*bimf#ej3(yZuc2z zJz2B+p=3$&bf`B>LrW9kQ(DXw4g={njX2>L2Y-I}t7o>Z!#Ti4vUqdgXTj5fvI9Cn#-wkJHPq zQh{cU-p8r_o85eG2QYj&a8BX<@_wB#tTa65GQPx=Bv#RWEx<>xsnc%M+^&b7MqSa zwau>a=<*jRN>MjTzRKb6!AjG0j`DliCqy*JxDH1BKp9HoWOqKG+5O!G45UHMxmU;? zKx`1?*z@(wfG|8GUWV*q=k60B>s8OQJt!xW8P4!k5OYDaR}aed!J|wLh*l3F!gK?r z?DFTw4?E3TL(feuJ>l071wT`lLCRvSYWvh%c8Bu=PsBO)x2F%k0CJyrW^j>?(~@rIAXOLRB=ohR3}!!~n;sYKGk*43cQ&K}EMgl0GEIZ#caI#Sgiu6Kqj!A{@xKvd z#7P44(~|ga{cri3T3W&o;RE+9_-``|!9jf&Fuw-SoOIpZbvyzf6PKe=(F`y=&&hq8 zNTddOzqsMMI&z-(BSQatbI{b^4S8a^FHeA6Tsy~`b#1!Xu6?Z1PKCc-qlL7 z5EN$?ejBqLoqo(z8lCZUg&+^a!!N<__pQD7cpBw-G^PMeCKXqbgT6FcNV~xKT^Up} zIENX}Z!FHeX~GvfpW%A2=#5qna;|(WV&%~I9_Q5~z7Jw|0bKKC>vIbhr+IHD4gHKR z&>v)0Od!@W6AHWRyEGmwe9v^YVeDjf;q!e8vkBj>BX)DT zt_NU6-WxcAVt;_)y{R9MDA(~!Q?Et7L&jCN;3Pu4 zRw~fTmTP6Y@*Z*D__T1$ozde_(>t@g-9FH=U9T=^Dk#G0$36yQycXCTEH{?^QHV#R zq*De1i+rV`F{KxZpM||KUQ>#Wz;$2Ch=_f za0|xqBn+|Vm%0YQSvngaQ27iW$0-dp8!E>;WHvI`5I>!ndz z#F9yLWy!;vkriH;v{(q0)6S1=YIsS}+dJ4i%a9f)URp%I7*fk!h4Uu}BAh@e9G-+{ z%9a@?{EI2Cb7>@klvnT5nvdQCj`=ZI-KZ=M8V^GL?0z~O*^jPgZ2mILD{K{~jDjJy z)a*yBF26Ed5sK}{X^#P(5xzhI83@S0?En+rtSP`T$je^#IM1;3AmQVvgs?$fYhdh0 z>g@1VY!&l*QITR-W%+fYSxQaicMSNcCQGu(X|w0>!7;*1OdLXd0=zn=?yp76V+b){ zw6~Y(TKuN0H#}EhHj1Y$va&T+>}DBbxtF%s&TN|kB4QAJZA1c~4@uP_OZMnfii&wD z8+adr%`Sl8aDI#j^Gn?J6QZWe|R^F@OnZsbv!#e``b1S!fl$k-XjWY0$0oHF3RR29m zo|_8N^w=@~$}CN)#VYX=rsoJDs0)*U!{Q41t}P3ULlXrED zqY~shP(?Nyfb9-PoxaHA``gt!!Q_1ezPsj_H@l5r$^OJftkq}}RUd{Rr-}&q!cX;c z>}9?u;QFzR!Lzm|)5Ce=%(RyAkJGDOO~2dyBl4ZmTCt$#S;tdTC@a2iGC0EblX{-? zm6FlCy*ylrXk!5xix) zL4Mh7U;M`Rv8xY%L!B4y!XZ{mf2Ob_O<+KbhUR1yse;D~;mZ!>Ur{Uo?qxa$jqD-1 zG-RB@$ZhWLuDUq*&*j;*;~@y#l;?HN6&l^+%T-#avU^@%vo0~hTHfED!d!LZ!NlsPh0f2#gjD&ir_!vyM@M#^0ND%JF(Lqth-!kpXs#> zc{kafjQ4yzFX9*S!oYo4`N^;#BoG{!c}{u;0s#Gm^c8xL9D%H2ZcU!WBV1D1mA+yY zTr_b>;ZTz^qPaeul;YB)dh4K1aIEY-+RerW4t$uG!yt~c z`hjES*r(LwD!$o(e$9!VpD_;BX7l?Yw+wd$2)AsL27LwLG}xA!_yt}nF?g43x=igd zTe!~r!$&5G(~Y&;?v}j%j{6X}?H|wV^m?RRbe+lL_B_&id6RnQ!*@84L+P__mL93#DQc1wYLj1ch4idKbVZhSq2Rr92dE(27IP=?L;>gpEhRF z>Yvg59w!W10v^)>m|DovuZ-+LV^t-xZ73lT{HOUS9SdIeGuxSaDmma{WXDe`#PW>= z4GKawnyQ{kVwM>U=O_%B+@H5?br&?KB2O*GR z=wC?q!>JCrvl{Y?J~6(%ek8I`LUKMh*Glve_pRI%ibV^LeB)bSklp9$J$&!pKbzjM}`YY000#X>+t{!L6~%|8YuUk--K zW@bWzRD`dJS6cFxU#~l%UI*N<=jABi?P%v=B3LN}fZ%D?4HpQr5(q1hjTx8_kO8{t z`TuA-%ci)xb_oye5`sGq!QH|zI0Sc>-~@Mf7+iuo!Cit&a2Q+z1cJM}yPwHhb^gHq zvTMoReRVGb8zak5u$a$XLoS&}c$yZ|srksc-Iq-EXJiP>!iGmE=@`Zfz7;ja(#_qa zd)}$Ec;4ypA1wCDUMY0V$?t4$<`11*F+N>QDs32hh#SK&XyfCmbM$b+(@iq^?Mq^I z^24ee^_M~D>KSf((Mfdj)gaxna{s}VXPH-PZrFr0^< zN3ULF#v~(XsRGkjea3k4-b}BH@WDMqqrsJIqDL_SfaVFNnDDO}D?z=`m{b-NoIKq3 zcGeJLIUha%uuFY>_%DBElc|{;21HsNuMA2aOIEL;H6tdA1-L z%&Q4=qndcAtI`*U0NV9tDGJFVG7#Hr-(uEO3M)g_j-3w7$AuvJlZ-Frv5<)r%_w-p z_$F{+M%MU2F|G~D*h1`KnVAAXKItKJoaV-&nFlxTbi~~eALWX*oaP0hALzWcs<}h1 z8{tAX`7nRSc|-AU0z)7U@D{dnZGfUwSkj$svh7Y0P5L)yI8C;zsgfztk`%->wEb5p zDCM{I$3>h(L$>tnu>AYc--xLWuz1RyF{FgbFMBNoG`wwCRDqPTwF1AC-sh{wPwP+UdT-uH;ET zim(BAM58#4L>8Sf7gE8F0|6kvfK7J?dJ~U0l`kK|ysr?hA#F)IH;* zrTDJ~qQ#G_F#;UT@zjFiE(sV5SAg$078oCVRra={@!rV*s&$g}8wAf87uC41kfMFw zL85hXEOgPjXQmkqryW|1(_#L;=Rwv%X8lQrM33(qWiJfb8$4l)o8QzS+oH z)ya>+6fcydCnAwsM)!+_aY7(^&G&5epUO;|Y}u)^YL7oY0fbgwvJ}-0-MnAO0#XAW z!UK@`3+rD6@_LR(iNG$$Rn1H1{`c)0r4TKFK-X$Z=$*(iYQw8f0pVR4IE)VlpTLlU zF_Kl5I0L=1xaG5NYs|tpFGzaYE{3Iq#8BTavfjgjDW3Q-!ASi3Q1Y)E-R^g63B6zd z1)~vP8t#vdn)hqrcWSBKXV{Hl!K`qC7a@a(UV^0|p}RUtH2~Rp3DVBUR7$YKuY{qX z#|f>rC4em|sBft3bjAVxk0P{|=^`PK8Y+il<;3YAYI|Y6TiOvQ*MDhMG zbYa}*!(%8uqXV?8of@v!zOnj^7AE?nwQ8EwylQRgu|{hc^|kVK(j)Yi)e=7zVR6nl zR2eJ*z+?Gt>sqJTJ%u);r&@`dKNhndHZnF%7+eU{K|ZRTIsPC8CHt8V zFWojb#!^FP9nsy)uAmnzx|1SQnEiJ8Ivgy$93b7351<9$_%MZX8mt!!#TfE#03h`5 zmjil=8)#%mW|*3yW@H#g>fejuun#&6J;?ePvCz6cHH{W#J&k`OK9bIUz+jia2ggeM zw6hl>IRkyXDw$OI&H#YcoPTZ$G9;6FKa~Iu(_*n?d*qNd&RaNPmR&+Qo4}6)h78}DNY8V{?$?pb^3sF3~TfuD7T@xTcR$Z=m}2VRZ`P=xAY?!VvmsQ)Thmj6onylkf&^mZsEx8j^RMx{814| zC6$1gzJW@2pBILvrEZHmIF6hAjjF+oMnVKm89^Cf*>PLt0F_ey=E(fF=QdJ$>_+|S zv;J%VhwXbHPJvo)VvcfE5xyJloEL0j!vB!_dSYSR>e4(65P|Wp@mW0< z{V5K@m`_H~hH;D!uR3^Tf~JkipSkJH4;_*@I4|9qQvz6pO34VHObUh8SVSVa3&#?( z%M!j9CBH5OHRyj_Q%L0-s)zg_ir$>FKC5n2r02oJB_hMM0IA`B*xrzfxkb)-yD23R z$F7ck_0X{LdOXY*_j0YU9hDS8M1NE#QTEq%V3#TUq)iuGBQbgi@xG17ASP>_7$AbknHs=ZiwwK7vXz{QVZ~@w=*p)(?aL*+)_#MH z=_-d{{?mwNr#U8W*cbEmk!DUuj3q=v$ost0iKSY9@ZO zRYtNz-!pBeW29iuq?>sqsKAGz6o*aF|gIKv6LMi<8l*k#^x46^m4u;{%SFXK0;AYN>l|AZHMkCu1|FmBEZx zt?px(ldpo-$Bxwtmc!fA9J#xj+{Sx zEYF>9mydkwq5Gu9GuiIMs8ahMJXVc5$uvWs8TBuLijj(eT*n+nh<^W^EYc^!`P;h9 zsEE0ALVx86p`9SH-Ycg*4Bn9KX*o6wE^a~_L{i}UEUugZNDCGm3`r9t`_=^Wk-Nm6 zRGbJgkbD#}G{#gcw~W1!vT?szqWGRg3r2iLt)xHO**ENDE!B-GB0abqh?WQiYhc)5 zpBvCnosPGg46KUsiFK#m=O)%09vaJ*fuU8Doi>Q&{hd zk8SZzy%b5LrCK;pEqFsLA4nk73$In@`ReA}M(AO^3xZNXYQdU$|XWB?&~9G~Up{ zsdUU3Gc<^b6~GaohkU=*PJ8i{A*MAs=a;BIK)0k7$C7&M7zQyvZC&!8TNi;j2MR-B z!Vp65`)ldpt=J8hGHo+=1EtA=YCWx7Roc+l&ehtuvzld%uT z4=sLdBBtzT6OjSU-AYKdiU!k!8c+^)Dqh8E2*%KFjc&mdu&87X-gC6zciHZ)XX;hH;fZ+BDc7FD|6Km(t@7{l^(y6uEFiWA^cK02 zEY27SwlFaJ?Hjqb2`{d3soMoK=PC9u&(dLnoq0ka(8K<063jti zGX$$#rCQw-n8_MQO1?--7N?k^o>G9T`i=@0T%QXlt!10H% zslKVj?J4xwN}0+yZEOr^4Se#VG_33BPr@(Wh9uZ5C2o{>lxj>6>9pg7l#F#{b-3^; za1aqxsI~cd8Zg%kZ68Fw<4knut-CMV@zu``r>*~-bnX$h=?bGoBz;nusQpW#VnA(~ zN`rsC{-XDv8iUZiXO~p}4T5^QUO(d`hal3e-%%7yMdg=KTuEOVp~n%WJ%R1Z(!7tx zs5UHpSWS+x#c*c91OjMo93MkEc?dD{OkF8e6p8)@OT-DN&(tNR)!31qXxjv32*ZP3 zWIa(be!Nh)U3s?_j9L)!8F}@J4Z=_Y^w{NxVtb(ruX^UkmtiCXEi36}uE*;Xo8p^2 zxu-_bs3t5oiMI#MDOz*}Snd|{gJ2z+{wgR?5P<-i1vmkaC>T4i8fLY|zqEhm*svTA ze{>aNQR7vTGKsU8%EFtK$;VSK`tMO>%|FbeX=7AX_v2OdE-D1HT8LN#$lkm zp8LSnc<4hTj!V2Ki7B2~Acq_NVt#+iKG`r9I*SvwGRXJVd2i#j9KjK&puM&0ezE7(o(VmX{?PrXz@JSN$O{qUcNM^~5^04QtK zwP@Go?WDy9a!ZnAfLA~AQjsJrS69fR-<1@SW>QV2A5C@x7~IvTAq=USN9*}s4)ja| zD6|EXC7T!%Wsknl9ir~PTu&zP?ENv$O;qL9(=m=6N|tw=Qf72`bEy=Z5)tYOlkxx2 z>Y9tieNks*39lR|&cWq9tw~iw0tuqxy-Gp~Mab*h`ZFw|Gy6-Q`qBE+sVj*JrVxkr z3jnPBVp%G7Ji@L(;wZZ8Ns>^l0)_-wU`7)&BrO)K_JjNIl>EM^8Cu_NmXk6nAaQ3M zsz%Q;U#KDgseilNVfOL6p6SGY4{d?k1oF@O`|k~}mu9fm7Lx$rvdvd=RZJwA`+SCiWR*?2{Gd4<{=7-)gJUo$S6dwYmQM4#E=m*^ci zvi0^{NO(9l(yL_{13ou*rIj9O@vQSOy)clQ-&GtDPcmoDBx{zrSm;Mv2tMoF710Tg zEC5kIKJ!9FIHOTFRbWg4K`1)1mHLKF%*Clg0RIV6k37j}aiPl^TFU7$+(qS*;-8^% z9g0AGK9rdhA{_2T;TnG58AWEIi8W4Uhcgj$?ENUr;?Qx9)uAa*l%nPE&%Kwacdbyy zz}aRWf&l1)v+KuRumzy+8#@5cdBCQ>h+XFX(joBTxF%OMchu;VIH;kkiRyPUc)@?8UE-$CV{Q8GhE=vhrC6HzgHTLX+=GsoG?!ONF)?)jtzRP&E!mbcU|8(Bt&c_GVoBe zv`%)vdb-<)LY-CkT^KkcPSNee2|Ii3ry+A|(A6>~GF7 zAN|Wi50w3tN#8xL!8R^?=XVfx%`o0oR%93$t2=*(4t3gs^$aaj_WRQOIZld8k_0%$&gc-l39iZ?{`)3PZ;+ zSqtA{7bSsU*dIq`e;`|-FMKacWQ2YxDiA5s0-0uc=TjrNMfT&63}bBsKhK}!b|EL% z%R|eN>xKMzSJmUi9zIG|pFfwBLl@}L0Is&CMsX5;N424rPQ34*VOcyk6)_BdWsgT( zo7xv|qgl(}gj`c;WUhIj<+=ERvzMK;C~2=FFFAISn#IR z$8P^^H4BE6i|WWkwpwphCt}Ei8?89|cZ({dY}z~dmZOrwNiMu3-|nEU7)xjn(|4(% zs+eErL0a(GHp+BxOp(a|#EbQSDDeI`iPguVx?nk8$4ayH~NukR5$ zfdff6gUmE;PVxc@w-v546}66*j>EPY^WciVR*tJS62GoI!miZ03WBjD26fR{+pRrC zVjpVrI$p*W4%vOfl&};BY*D43x%yBHLuvwEkBv7!8=?(d_ctu&zTMFAKc6%N(_hS& z%~k}8bBPpUmwl7HAEC>&rOWXwV1YVmjUW25frcN`^WiCDjFtYaS!r7WHU0CP@p=9d zZJnmFF4d@xH8)G#PT6A>`Bc6)00|J|SL2VaxMv24KxgMa61o|M zH$d&lZ79Y~%1{t)V|8^O?x&*sB@~}ocIL+!ap+_k*H1?LBkdWl&5_bNoZLN*?CQTw z&w;hHuu-JDQ_;{IX$Qymh*yhvUXgPA+Q9YkSTezOKN?}ErGhCWK$m?Z%?~9h5G33B zx`=)CeSjymeZ9q4!Co(GzK9Q;e|y?*y6!vKac6d#woRIYkQ7pDXB-w#1V({HuYiL=4c z)mch0X`yjBq&kz(@ssy-fB|&*wJH|wa+}w2W`#Rj?vye}atZ7A zo!J-*4d8xbESK}IJM2h0@}={*TkLqKz<#czjk_SEaVgEJg|q2)sj9wJY!tk=2y&j?9J+8pBE#xcu8A)#d425qK@aL9CPb3ch6*;Wof3)6x)niup7$lHl$Q&BYK&IO*Bdv+D19F zUOUWHOVGx>ZtdH46TE$QJMjSIGPf%JV%XINGn`kN%MvMLl96YVd~Ltp9q`9aU;GI} zsy@O$>MHfaP-7{!{teEV4|A>hw3Aad<`1x^i)fyRdY zja#n9xpJAXyV=uNRuSKPF2fHk$O$F~XlmR2$~@cn-it^>GfJtCRrkIBFo(alvFm}6 z-4+VTeZK6NjdPxOaUIDMG&Mp4Puah2I$Tc5a^IFP`S%6BQr3R(Z}b)-2=ZX}mlSn8 zy^pC5X8JVV4y^ug;Cap8EBol!HnZF3>I;om$fp%mT2vEi)4>R1dgd}bru5}q_sSNW zbi#;K42q`JnC3P?YSH}>ZFTq0(JXcpU(rU^AL+yQJ2^1sIFUkL$XC2IBbgni2kHai z4g%iq1CXE|EOmE`Wv-Z=I+V<<5^}u5r%IlV`^_3&@mK@ePX2-_78sNuLtd$v&oyf& zdARgYSE1JFb*}^VrR1C z(|ills7r2?E+G6`K;PnMvbKobr&qj*a_Ch8D(2LLWNYN_`vOlFL48QKy)~h~7m#N! z5HSEqYH{mNbIpijh;x|DpQzN*j%{b%s?)|!7%_w3+GUS+)M8+!p=(?!SdISC%E2Lb zK{7?U(RB%WEFUyl-RM@k-^wOYYY%;Q_WWt;gh8!QLB8<=1spa}W!;28#9~sU=%M!^ zKx_YX0OR=Nlw^Lv=gmLO@95gFk^k+&$873Gw)kg>xP!JtDb-0Ik$kIZVKtWjMex5i zgSCJBaJZhUVo^rcAb@`nC+gQUh`3hz(UOTE=k>e$kh{H0gY+{1Wef#IR zv@T1B8SaKL)((hdBR-6<|M|hpP39r!uZnEK<-@;7w()urbu92dc_qJ1G($qo-2OP& z0U5s+xnC-7U?C<$9LE>e3l$kJdI>`$*r7p_p5wm7aCQ1gGR5z^O!!I$4i1&1%mj)T zEhdlVoaD6|MrEpIh`C+nD04B?aRT*>bD1*a8X9>$884m2zoTWBk!_M3@GhWerQkTX z6?=O^$0ukvRWLqd6&qT4@6#_kEAptcdC#+`0Z9**XcPkIVn2Z_i7sVl|ZEBJAJ>qNZ!uHt^&+f zi|ajjSNZ@hM3BE$o9)s-iE=a%mrbBC2JSm_+q|m9q1k?e2TM^`l2wNgdYIQy!*+Q2 zM$lhV*dSlrPOwK}O(u_yaxeW$>i5XZ&QsE-luo%+lG2+cKgIdq6hZ<7t4N3Y;>32- zqTsX(`W+K*@pR;NWrRJx|0yKDEnBH>`CF4H((YYW;wO0SE7(560a;{m+nt+T*Poj; znj?TADm61;txB);%&&F(XLs(LY25YPlAKs$6n<+gn@6eA|K(8f``7VL_v|us%oyG0Ju>&H zM6+L(-EgNqPra`rNNWz_g3H0VL*IlBlrtKLrpaFa8IUX1VUhLZ=!P=rSa||E7+29; zIV6>2zJA43WKHzKHQkvztrl&xB1jF6JhTCpEiyzu2YQewgp&Q26u4&St$Hfv@zWTTGQCM6hc4MU8Fd)imaMuD-pE2ZeV zO(U`NgO#7TCeO>m^SA?Kxr~^+Gv-IRUq$(l{B8yp*cA16GTE|ZG($gycVI|fPen_Z z9t)g5P#UZx$xA5?-VoyRHmG6yn|pKCI5`Y*T5G$#Gsno#n_s4wCRP;HGcE-t#oQ0p2&(Ln2Ah$5ilQ8u-o0QDkvddG(I6nNyum|Ut(+Q&DJL)mc|vyVil zP($rj{i!7y$gebv@=n}c6Jkzdg?4%PsLuex3Z2G}y7rEb%iuf#%a*xs)`^*^lW5tI z?4}`={WPbaI#h?-5~yj$(qwj^4$z#)cuB^Z$|D#08rA_tNt4yqd}X*S08(bFlR3ZD zVwV_GOSE5dicg5t9Z;y&l`#vCDFo`~H|~yzHf<^g4}n>1uRH{kl>EgD(tK|4uY&yfx_2z}rSc zR%t$aV-xe?+Fib0!;*dsKh=SI>88Dm8R*AFY5Z&{HB&CB>PV1P&uzn#j_V1u(b?nU zY|y?~&+e|TkC0|&2ec=vS2p3~OxJqxPOQ-;#-;drzWa@5m}qUILHz>c!_U6+#mCTV zH$_zOkfu@YkM-Yc-R?cIZx{Sal~}2Z$o4(GhkwIG$9DVHrJfK08(Q5@8a}&BhD7z- zB&t;dbt_l<&TY`s%hhjf7WW+SyKs4_3zLddOujVEcN{~2!M|iRogPb>CwnB zMs2d_R^it|Tb<0a+IqxmqsId4^yRGG>s^x_|0#c4mjtBH%(FLkdOU1k=}=>&FUVkA z`f_dqz4PWZWJ;bS@OKv-MyU($^PO&I3OT-8^CIrO}l>xr?H;#~2sk>uH2 zYTN<$?dze3DU;A|i1{0aWw_45n`aprLtTTM_^*?FDS8~bMKpR-O61y&L_u=$Vb^_e*XiZzU|3qTdKNEn+8RbD2wKrlfE zKm304bb|xSRqx{}DxWsHnfi>_U(X}*X(bC>mBcTSk9Nk{>BEYXrHX5kIrGay zUPUp$hwOkOwOrIW`RS`Vm6)dfu|<-J;{D#=^|*S*couN8>L88Fml!|J%oV=cczZ3R z@LMrC9T!@$|HhC3(PO9_l)2GwP7P!kGRr`q)x8ye6FE#Und$amPWXdEBeEd#2X37b zo8L?-sPa+0m<0^ht?aTE#8>HI$`SZ2`OGxrhn6!~v$lWAaLXse8Plq5q=lXF989lZ zGDxrS$VMu^G+-YXDFa=}#|w<0r7Yq!hNiw6GYt9k2W8c*dq1*rVcQkzKhld6X`=!2 z&QY@!v5#SfPMg=sv&21HY%fPrKX#ucTj&F06O zt$`XF>?o0rbM>bS|L3C|W~a&a9q#PdZVP|IgYk1P04N^DIw@v#z5Sp7x@d(;lBdwl zj+V}wVzyPgy_A{jyGyRe2f;0Y2_$%!H@`tGf1OKzSy%-OpfaDRMe&4M<@~#K1xdB= zsV;-!F^b&fygnUdTc`EjiV1Gh{g z(!)#G&rsMS{J4l7p&MN$(9$j;z)?)A_+ce66BUqJ?A>maw`iaicaOsaYgvao-kG z$}Jp_5d&RtYH`+Dv(zO7i&SD!BzohPbs#DDzm8|an*xGe^U*wJCJli{GZhcF&i(UdJD**x<%<}Nv1vOmT37?n8V}M zk1C&aI7E?&c728R>o+QrB|@E<39ta*lVaA%lrCd!FlUdbaWPX&ukfh|KgTE7y!U@0 zWI)))@9YW&xcD#6?0Q3$6>)wireDIl0zHI-Vkl!1-=UR!$va&WC^#uPh6T5(nHQfW z(4-T<9Ea=-&RLu=1mNiY6{)2^BcDlBkp#K_u>Sm#d8+y?ciJ}9%rtE}Cc1H0j7qKP zDyd81{abJ?M|Pccw5YfRk*FA8d>Hs)l(s;j_{a+I34oSp9C62GB}N%%iMlOa$Iuz3 z8cVPpPVcN;?uDX*0L%JKUGWN@(LX!J`hua#_3>&8EfYdu-_(V(vyV2;LhkD5`Yjp3 zGp`|wm7P{z>V$h(OHSlZTS1>*TvPGVh2AOOWkasMiI)EDbKcIe@s*S!J*8*S$M-Xj zZjxAMPk8yfmuX)|jEEl90at?~^i$WbrB>~>53oc3!EQ)Dw-?Q%wjnMkBPA0wL;)A} zNPptkxa4VjAt{@nvuxyUr~bE;{i^~`FLkT#$9`8eGG+9A21uPaJ_auIU#M|#a}&Bn z2h<`v8CGU{B7(mtVv;fKCV&Vi&3XPLIkwL}c zqokl|dpuaO3?nx}v{cMRa@@Fc#EwgfF~oWF6r*g%4R%H_ApPRulV9&LyOD%dXP6#F zBx@H5HHeEV6lmFV&N^_aykZsQ6)}ajf%vK3lGAi)j0OGifcto}?YMf`PEuAkaJH9} zvov^Hr0&u!;;Ar76s;u+B@gu|MKQ0IMTGxBr`J$ck`bx}mR@+1{!0wdpXQQ5bF3T=H88gA0; zf4H~KH}dAev4`-`3Kml3BFdt#DQ~6dYFt^(UX$xQ`UDkt94po3S38fE*m=IkV{n=r zATz<8Thztx1yjjDCdoWjJ{;hVsWIkwpiaTmmY)2>79|?u!-9XoM^GjaLT9)cI859X zUo@F)cdftGPi7|)7{}crfvgv;Q?dZn1r|_q$aNWQMXa=p!^ajQ%WonZCdyz~GvN|X z5tKZ*A1{j3miktn;~&uRbBbE0~N^!CdnDbrHxP4 zJ$P;vt8?W4u+k@Is5AbJ!_0v^xOjWp(73sHIhxNexl9VqcfIVgK`Z13RN_R!F)#Aa zAxKatj5|IX4rQ7zj~@C!OGt*eyxrSebC=n;|V%~YU2$Pr6W1Q8MdDwRC+Z1gR{E>oRLgY-Z%5wO8NnwlbZqyytZM*%?Gnq)^>@mj0yW5(=D$G%thckj!Y8*pJ;?nBO2IYG7{13~Pi z{rF^25E3S?P}C2L7rog51hu3t9=u$EV_e6L$8^9zM3|(v>sm1d08(JsMF=O$&pIHO zA8Z`qo-L!~KS2fp<7=}E0KSHMqb^ruTh$2X%@VQw-f@eDkbsgJh8@!$%sJwwd?`kV;xM8^DA5W-J<`c4?p+i9l@vfs`j*87`4&Xo zPis{4HIKfo-qN~itNCzXRcW7~91Cb#Fsq2`fqt^l=H1`R+W!9b-InMLT{cO15(lkR z&~#eq*zXiIagn-m6T*x#IC(hCemijsE~L;T@%@~hgT`KlZ@V+L)v|p?U>=k=1w#TL zc_*Gw;{SS2@7;V>%T>nqT|a_CtI}5I4H}E%`E=P4Iz6dQ8r4bk0D*OcW(LBoubU?Q z1YtKq!NO=aV*(wVtwdu8f#ff~Whh%z;O-l^LE41t!w2prY)otATY)Z!bYpxwQSKYnj znqPB8hTK%gn4lSJCZ-_Cs^SEmy_!O~d9*LD5wBIr(UqE6Q1FRtu*?7gwbbt+-$Ri02OcjivLgGO6DU?xMFp;Q*VG;zqlPZB;3&5?#F|kf)ykWd zx|1jJ>}k!)y^cYvsNm-HdQ*R(F#K(&f z1)kWyXFb^`V04TAab%y1WgFT}Gqi{H#p)^p0hk~>`DPcY4Z@>7de?Di;#MY|YIF22 z|Eca#A|f;*J;zK1n5J(hH~ZUb2y$2&g}QLij0|_Gzrg|V!06pBd{=?RQZE?R^bW(^ zztRpoxCr01mZLqKz9&~Ue-6WrQ2XD5Em>QH7>v+LMURiiQF&>YNA+KJc`Dte!At(a z?mRz06Tr6_@>kZUYu5p4*OYZmTU$KgcGQH%ieZ#{0O2Qe;h0FjZ2B)&@OG>5qPcZy z58+_YIj)wMepGGz>ei{Ly!ja;c!g4KKm(Sj8-JrkeTWS&VAnG9RmLZ}@{eDQWdmps z7O%foOCJOvM30-IOgA^bh{nQa0gy`` z{-c;Ed4*M%Klt|LiGB7RWxMLmgiMLR(>s2PkaN07kKZ?U;O?&}g{9J5#}iUngWlAf zecw?FoYX|o^f}Rn^Bx>ohKIRt@dobW|N4(U(2fteGP=^bzBD{aXvlK<#;9R+;X)fd zaG#-L=ZBKexsSF$tYkR-35y)Bl2_;qgcV0m!gp!5h7Oa_k_!-lz0hX%%=Sb|{~at= zc&hTog%?kPPxPXsT=c(i;MMsV5+{i`@^I+=`YRp42rP$dFBsIFi|z#@qMbFheRVkV zS>S7zZ)@k{ZwJh{I#$Yt4Ac&+3lWk!ctN#XC85V1W#7(koN8_vk(*)^LdEEz5Js9%jLnNfd&UT#FGa~sIeVJb1 z4=i2W=V^Lg;figLihx7Gkkf|8Ne(yTuVpNsbO8(terHV*)?pf>2oChcwmJ)D3)ZJA z9QJZvC+Bn7D$43nKCyOwzN=(A zhr_|ZR5xqJoX6P|^9DULu}vy9x82XUH8qFM@;z7<^`P6U{}_~$L9oql$hlE;6lEAZ zZb9veWcx2x?ysY%z$Bl35*$CDz32=x<-P!FSFjDQoJIz#>C)a)#aGy@Z3cQDGAujy zrrKoVlW<7CjP=66w0dFdDBX-_C*MRccqV>kic48ascMBG)-Std{)t^USn1g8GE1L! zjcH5eD!?n$s)PJ({9S`j!1S>{cIi?(jow0!427>f^mgYzBea7zLKu|=v|cyB{P_TC z{{7Yxva|CiB)77{y^kNooh_}^?_!ijzmQ$e@_C{%iEAQ>uLZonUO`<@ z9RuG>iF?g8x%&Jz#>0&_XwPn6dhB}`Ov}4Yi)$mXbywhCQ*~r2Npq=+(Xyj4OIV>) z+~~jlnMdfi4~OBl8)LjkF?*h-v{PcV1i}*LM`)}nx5OuHpP334R31SI(eV@eX5)z!5ahn<^^Js zxfBLXfWZx>V>I0Tnr9yzjOk=?LJR61Y&41fE7x!n#Iv8JS9?oMc>+8g?+jv~Q*ufj zV(!4U*Kz2d)Es@_WQ>$9HnY|Fe2A>?bHi@*tA%N~=4^zmqP}k+E);?}v?lE>wi)M@ z9r)x!yG2#Rb1Ofj}OG&egb&$`?_O9K-!6ZK8S>yZ%S45Gaeboo+RXpyHV z{{Y;DFf%@e$K1+h@$82joo>K|^lvrfzE)nl`a)$$H;RR=WjYEGbl-z%xZWpdH`xsG_*SyDcxwx>WiA3n?93%Kq5AUo;JhuJ0JTGql4K*1ftb=qKB&i&d9>F`2& zqoq$9Of&qlr>+_6@!y9+ix|618f>MxL#S$|V^W{jR{L9qK5`ez!sBTP1jK!6k^NSG zP;`%6S87XBoBRH-yXW1DIkg7iRW_h?$S!-{mJ~pq=(i0S?8IBY9&~mS*#bfdQ}vJ zgEOk#i)HwY*Iqwn?dg+E}zEFOl~UGeB!UQfyA7ffUnbOqDe_TUDY z^g%URgWD%Aj7}W4v_6S;ZjI!cz__pt>X253v3Wza$7}a$cY!$Vu=zSc$7JUYTGHUn znk%-M`sMI-Z7T>*Bihahxo=Ah*Ty}yJ&u+n@s~Ka{(1eMX8R+AKj%f*YvVu2Ag&x3 zfQCuQ#lX0SokLP%UxLo^sX3aCBMx%9!x?UNFTh8{kXC(LMOjq^39IZ_jE{nSv>(gg4`PcIYe|v#;Psg^)Z;e$WnurNB zD)2aX*4RmVePa2{| zPJ0ulORuf5eov5yJ@Ewg(g3yP{nF z6bRcb3CYSxcuQvIwC z@=5Jcpor&|R0%|kx3}{@O{4&Bli&p(mD%B@G|xMUR!T=K@QC<5QkIm0S5-G5;er$$ zqW^tR>}zA-i0lnTe4NRBYwQboJ>(uo|Jw6Oo1p8DbMYLP#l$eQP)Onab2W&QOeQc9 zC1(C=77%_*%V%~!ay==0UXsNbkle+cLwYePQkeC*1KKZc)!?e2Bq#$~ND;LK<^;ma z!kx?Dl#(!FQj(a<dS_)8k~F)kb# z-`sV}a?jCa?}lPfIuyAU-C!}8@5FrP9ezjN#ANY;!C)hBibBwnVK*K!FNaQ z0A;RjK04tyw)J=||CjD>n@=n{e)mDw^6?^5E|)g8didt{urn)?VXNcNIB(fD5)XRt z9E5Ia=mOLo!t1bCelZl*$u*`hCSQ1J9u6UN(Q%}Kk(ZcJadJ2k*ybZx{SU+Vg5fyU za_Z|A!mr;kN)q)DPIXonpN5kf-dRTwurS)P^y8f@WpV`kc1EUiV}}vZxKx2C8>YpA z`=p7g(geBI+O5Obgjo*3=@ZtAXx(u{e~{IxHhw?< zRiKLyda~~~8dALyKl~8WE5o;9-<_WUG}NBokDDn-ZZ)!lv8aSD9tL}Po1tMksfld< z{Rm_&)o&ii6tb>@Kc6!kf_7MAEV^Bp4T4pM)^l>?C{g3f8si61Y0fcr%`mei^hbdAdyHs#kMYi4V zm5&7w@W$40k45|Dimjew0d`r_tob?*yy@rtYWW6+m6y_8FON z7J?$D*uIt9yn#UDC5>X+1B?Nj!yml1Lul(2g#;PC&XB>>HY5Q3KQvIQMI|;DmE;qpK$u0*p`fuxxc9g8oRH8SvIb_4l6`r( z$tbLqhOZGi+J^2QH<#<|MLAguCvL@jA8jJ;x7A3!AQt*e;;yIvSJhRAMfF5&=~`G2 zl%=~ngr&PdC8T=+L6B}lSh`s{r4|IF5u}lBkxr2g=@cZt#rS>Sw}0JdpF4BToO|Y- z_nf)+%tuaoP#X@F#wzu*OU4U$UJLE79O6y_plqdxoRU2GvZ?;`9`XW9Y<;g6cq8|u zBf7--TIEh#{P3Wa{Y8D7%dhq)N3;7BZaO!CYk}S)7uMMVv|bKq&gy$?Sc=Mgt1`yf-r-%l2o-k3Np9x>%)R$Eip(zuwEqNbOuFiw z>l;63bjy9(ex>Fd58!G5X9{x7ffu-LCbr+z?%+g+s^wd%O({W-who zP@rRy^rK|@TYdCN-#YH6Y$tWfv@TE7p|Un$R!AK-az{ov-hm>@cYJRpa;aQg)1Hl3 zg(fXfzjZvoUiJN3AbF#t%&=Cg;WKVUiJ2!|Vt&TW@^^vW+@8ap4B}wd_TFE-&C14< znHxC-BUHwb>WFt7)!d1QBC^tX6u2cTsiAJCLd{XUn>bBl>W>py#zmmgHRQ=i_Q79n zoP-ZwourM30{57CX|4G!nXpuW#w)H$@vVI}7i}Y2i0KrElLd7w@aP zDPL)q^q4kLO)R@lxtw*m+OC#*@Ayur-99zc0n`}H4y&Wu@-6UJ49u~=uCryOW7foy zt7~o^7RUp%m?W&3rPusO7}z^^MPneZIpdZZKKvD0hb;EVBim8rdSaXu%{JxP5ue~=3T|5CAC7FGa8n5Es{b~4p-*NNR$Hs*k%iPvnqUE9NvGPg`1u9J{h$q z0okvIfA_H&`8okg)JOju(t*sb7w(~eCnIh_VzGLhE=OE~8tEE224OEu9iPCDzhLSB z4Iy5yDdsf{-?RHMbIUny7YrpxU&qj|2S!MpUyk6gt?r*WT2N;jkA)Uy0XxJE3z^vi zoFXhM_eE|Tfm1X^wuh-Uo|F@Qg=cu?spn2aj8dXC&CG@YUQZUZ&!y7L!~!-|i2;G% z?O=UJ+U&8Agx*7+_B1LE9X$beoFd`^yxiVYwmxVMpvnEi3QiFld(5Kqk zP$G>Zc|7?<8KlusH(X?_+Ci9l_!SS6EHH0iZ!Ca!pV+>2N?)qDUYNa~>+Rk-YqFsV zmeVp+=fT=06@A~je3Cas0EO;eoR%grylFojEw1g+wys>+U7YQ_L?n4giBS-gCGw~*-jEi(8)Eu^N z{grI!y{gs_ePRnT44SBJZG6zNf`u#;%tY&%x&%u2B}p#7?BxF$=>}y&7HNY=&^?r! zBSrNk_OR7*R5}kg(bF&QkZnj5SUI8MQIl#r;0;f}fh~qTcqhCo@yJL9B^VhfW{OPgdEbALzDBf@)@E6VveVeL)zF##+#kj5{k;!iAwU^ zv}pzkp2sZg+fXSJ@-0-_>L{ebLGVV{4qBA(XSbsO!?$}n&Q~`j)HHSL8)q53xV+WX z{$@ogplIR1=E_@K&&Oa!D3vh8GzEj02fk@e#BPSU$|b+lGBd85h&3}qgCE2C)37^% zj(>(CZ^sd4Is$0od_48Y8TPLBP_{E^>CQ7f5RyEo+IXGUH))cQ+ z{YQVv1N<$Qj!}x#WDj~p1T2$FB})Rr=+6RyK2^6!Q*!Q1FJ(U zFeZx8ogxcQ@F2)pD37om$Qu0iqQXk|oKq@N{o-TaXRKMI1h;|x#K+Cw6uM5o8bBpb?TX6KIi@fzS{~CxE6&=CpS{@nMK9we*e#F5QW@VU~;1;!~ zo7&2;qbuU~77rEWqj55)N&I@r!QfD^U*ZozlaxuF+q$8JwQ~co0DK`(3Zg{Hv$oN8 z!BUzv=GiE<-G&6;)1!&Pf>EyFh8mMC*&jC<#g5k*h__H~aOj0A>jFgtQ2|IYZTQUS z$Tv#hl`uJfS=V3>TnL{e<=Wg8FOG(KhidZKtWa8m7@aMMyD=!Z$cpEk`&slIlgnm# z?dSP1BGrKQM`C0kdVSJWUPEd?W?4YN6ryf=fE0Q8V6d$8OZZ5=^Psuv$2BQ+#4@gQ zoo#;%sbGVI5m01Qq-9N$%$f7|^v;_gl;B1MK-(pAE`m_jI?{3&`yIcBfy@c`Ukq15 zHn0l2%Z(f8RSsI|UPRUEqUN@F_gBB!`NVF9zr~xZX43jbUEA*@iw=L#S|{eqQdYYc zC*!#y$>JlY5?5(poj!fzGe`emGso7TBtc!Un`_44_H7NWjflNLY(UOw-V*2+&uI7) z>t%US$ec(Ox5{6)s9eP)N_MP=rtu4qcPXVx%NHU6w;FB3`gx*Z%x&spqqU ztJe}9yV2&N-r!ESXx_kKtBdE0I1@&%Szv+ok>PnjS3q{%%jurEk^ItUrjIn<4 z|IJyl7UE<4q#q)~*9p&Isu%XagJNAawZ2QDsYhkM4gz2`T9u=kQs(Nd(ZKFywhvia zIee&(E1(jYd2{ZUp=!lhJFOol1BFB??8ZqZ^Bx)iY<6Z4zZO+ibtF=bcMcl6KY@*ss9wPxq%cgJKgZ;z zM=#T`;F>9Mda}*nRwGM~KFD3_o!=^M3)Ph5Z8ozd(MbFe^4eMXLu62~>r{0T^4NIj zDY~F9Nyf(EvB7t8Q)b?o`M5 zEaPs{%_r&s@k7Ad6AL0TaiI`Pu_H8sHw5mFj5sfVW6*M3_h5f5%)$?x&O{-@6gF2( z__G$wY6(--c4a6j^c506aP5s53KJ3cp)_U9LYH zH0kq#MOW{}hqr)Au?}Q$Edos3I3RX%X>|NLm0#fFUAU}WRr&&?lJ;de#QFr_Ek*oh z(_Sq6ElDoy@BV=Id-3$JM&HyYCI$f%B=_KCib;e8H7AH+3BwWO(N zD;Rd(nhG(aHa(_e6CZxjt10az{8T^Dh*;1*e$Q+rqmf)PIp@f;8OCqti*ev41i+rpjd@%2zAj&yOe zo9e9dN@L+`nvz#y1Dl)BKH5eFT`$4SL^-d{ahtcoUlGldS%p0$HeOF!unp7&<)35O zR5b#_lszzGr`v)=x8p;jjFCwTO|;%<8D`qsjP>*@l4UETdG#rlcvOrXxEi@PUUQer zjWd;+Or20pmB4}m$>9`Wm3-eGc+B9t6l{-AtBs6W)Tl@3nIx^KWu@5ug` z2LM72rYARBeJr5AywhTz;D|T}%YkXlqXbg7L*{BPFy>x2i7tlDA)RIz?_HpjA!{7Z z?_??8tO z3Ym_pX!Ul=6BFd?%Xr89ngT4-Eu(k}zBLw{{SX^vr+I;yS`Utw@woRm%#C_1o5O{r zP=To{2+u&fFzy@5>vi93FxY8X02_Gy_Jva%WM3t)_e^)9PgB7epo;~Tl398T!IB*c zHr^rA0Y?7AbjJJp_T?duA=55RCCACxbB z5t7awRe>l>*5l^8`YTpS@e)euU1$P?8w`A0LN;dy>EA(eI$_Rgunmt?#@EKm?^!}E!CWg@|s}ya=@)NSL%kn8Og@?Vc*H7lh-SY@wL`1yOUR9 zT4)q|<2mhD>PZIRn}`?%?VIWi6@MG&jyOr(iujQkG+blgQCO*Thk~b6^si)e~kuAc@V{{)4M?7O1kofMxOWz}78-B550?Yp0<#9tbdJ3(&?k=Eottd#|6b*S6AUES9!CjMOXj#{fm1!GymkoDWL4-L?t85%ZAqTI~`?&u?`pH zCx4FYsRDHwhK295qp3FXi?WwYe^2naJIo$Lq4Jedmgy8%13FwjW!N41vkI7s;BTpP z#3kS^_&Zdr*)v;<&^^?>%PH5b1|yYko(f}= z-QQ)c0`rt%St7qoA4P$>cYEtI^>ggyg%4c6p`ufsCt5i_}EcdfXqg+|>k< zBY4020kNZA1~{%Ec@-i>C4*sW)Jom(Doq*i<6vNwJiKS);t7cY8hxOxbs`(B3(i=*7{`t#p@#Td+2rBd7_H&A zvWU~_Xp=^Hxa@rw2ncNlzl_$F{Kf_V_B}8!r&tA0MBz{px6l;r#E?#Aw$14RC$Q<^ z>YedMkL*q&$2|A)N|US#F57|1t3w!;%ME_4a4KQ8&QPFAvGzH5i=D_@iv926{_P1S zQM{uo-^fC_Lap&rcR^)Wo>k{EZuB?EuG44G@`p72%&SvrCh^Axo0b$OY6H(iY1bvL zAS`0P>iaaQV7Y}^aidj70s_kXcBa;3gd)86++~SVItLa6&nVkJ~Lu(D$WX%batuA_`KNrPEgnVKxJMU3tJV1PZHEex>XA*HydG8M31Rj z3FfySQnE3d^WxAI{Em8Rt3~Of)pH<14e5;?JmmY#ArmXgNT(2^WND|WOh>0%kHgFF zZ(1|;)lnAi@O+GP<~ssaF0qh&i+?b^Q=7)Sw`87b%ACfl1LK@P0*V&{cNS!k5ihcY zWtYbW+H8v5?5H2n6Eh4`Bfi%aBde=`8+0XLYoNzRjvZZDuH`CN9B&2kI^9X7fxQhs zJQHQ9l{r^>{idS~d;5L;C+s#Pzr#zo0^Q6diIn5+3_`YdgumBQAM68nOfLH6Ep4Z{ z<{BEA9w5B^|9Q-?=k%5qx;@b+;uS!rlzClYHivAxDz?|=6{w)Xi)kmBJ`)h50s?A z3QeEO8E&t;T5{t4V%4j6T-1DhB0mAsZkagM0Bb-YS$yEH$mfTerRL#>zhRpWJbGN?qDKZzo zBmKjpK*&}1bE^mnOkZDeLY!ajDK&^2*{}WSE81ri1vP%TJk-)Iy$=D36P24o_};{l z?5R(=JwG~O@X1(wU(XRwPw)}j)PI+x8Cq~VgRz#iD9ix?QYI|>0F_>UB#r z!el8%0(29V*ujn;f0S9b$CQ>NJR%Uu z7d7mT&QWVMV?o8lmTCzhH3>Vxs+aNG7kkY8jh=A3c!^*0trbO=`Ma!$G`Z3)A-dh; z=MD6PyY$NqJGbB?7@(bur^YWkN-ai(;;NVsI5?9lqw)5zC<>A(m!uK^k1Xhc=E#8J z+8vUD0>)WoIdwzG&PQ3r5{u_;P@zAPyURVKsDY{{uu-`$97ZwYT=y$}`60i}szrYE zSNM>qMgC-y&JT=Y&Xx{q{I#Ez?{JjB6Oz5P6j-{g?Kl>jp(mL5j&}Sr_9dpV`@qfO zwpJu~Y;Iz8a}BL6pI|1?te_Z1_Ylm;QDj!%bqIf^d~=IY(E74&w_Q6sJ#jlrtQrTx z3X*7a_&o7*KLxw_Q9dm_F+GQRyG{Q9#sh0Fb})>ets#tcXyq>j1whFO5Kyw!!_-I+ z&-`YNjyPRMikXyqKbkd46j!t#O(}$qGzSM{FxqxBH`iD?%n9-Arr0c7I@OqT0LG|b z9B%e$@?yuzMjMB>9BS`ob#&+^Xk>s=`cW_}F;T#_n!4<^2}l`gWpg4hY`hg$=ymT+ zCyA@Gfk?r>$O;iTC?J5J4ks5AajeoZ7P=xDV$)MM@fH0e`iH~bIGZurJnJsLZZD=D z9|^h1jx@VqIoJaxP)fW8Q9sS`6o#kBwC#nZLXMEA~(pcW6Sn zl4;z|+p6mi3&)5(`oQu${Qa>KRiFRz<`79gI#{OT;p+^CX%PZl*BnFA&7bnGpe3MA z$+H37PfY<*>5rm{i~Q|MD@=*HS0YLU3ggFQq@=69ee)awBdZI0Deik=LYOIUI9Moz zVr=ry2l{A+&`Btv9_D=~wDejgW}B53OWj|*Yj@fh-Qy>umS^-dVt z_=T2ddP2pcow+L!1w=eOa5pW2eCn|~UpTv}e;Thtyfo2|c zF5QlmJS2ScAvIEcbUw^S;RvC3=tD3|1f^L^b>^me%5SwbvWrCj#C3B07KZ6HPP}71 zo9b4Sykpx7C8vQ}DWcr0!jyVvgXvsI?-A4;+02Upi_B6O0P2ON=09+&j3wRhNo4G` zpv(#-`-tOwwt?FaVoOhYauM-kM&`m**vf|=k1`RCaXyes$dr#=freo-m7#*D_M=F# z%aBEl8Xi0z8Qp%Du?EF{{LjgeWT^cSP>yltk_Fgppnu$}?)Vc!L2syS&g30w%6uxL z_xk0F2GP~`?ufwBWi-XR>M&yz7U(iHlsZ0zOD^+= z(4U0FXF^LvF>iZilbWB*>Eg>iH1{qZJQxe+YA4L;WT54Aa3FfId=YNz&`RTXw|F;I zwk8Bk5>lw*-5mQ?8ny8886~1zb_$KEiqYoF@!YKFs+sQs)nots0LqR@6ya!%rYK6P z3yW;8xDL;S)6->=AWP?U$&Sz8^PIo8Mnoh0rPm5ZGCKpHXtMglx)4bqLa21i@={+^ zeN5I=;-vYCjsD;C5P}&?q9P;qzplgdgFgMs58fxHe8VNLA7=RKQE1NnpZ>!T@jAhD zuX>k$+S7kn?Ycr)a z4T5mbPrmw_ +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq scala-packages + '( + ensime + flycheck + ggtags + helm-gtags + noflet + org + scala-mode + sbt-mode + )) + +(defun scala/init-ensime () + (use-package ensime + :defer t + :init + ;; note ensime-mode is hooked to scala-mode-hook automatically by + ;; ensime-mode via an autoload + (progn + (spacemacs/register-repl 'ensime 'ensime-inf-switch "ensime") + (when scala-enable-eldoc + (add-hook 'ensime-mode-hook 'scala/enable-eldoc)) + (add-hook 'scala-mode-hook 'scala/configure-flyspell) + (add-hook 'scala-mode-hook 'scala/configure-ensime) + (when scala-auto-start-ensime + (add-hook 'scala-mode-hook 'scala/maybe-start-ensime)) + (add-to-list 'spacemacs-jump-handlers-scala-mode 'ensime-edit-definition)) + :config + (progn + (setq user-emacs-ensime-directory ".cache/ensime") + + (evil-define-key 'insert ensime-mode-map + (kbd ".") 'scala/completing-dot + (kbd "M-.") 'ensime-edit-definition + (kbd "M-,") 'ensime-pop-find-definition-stack) + + (evil-define-key 'normal ensime-mode-map + (kbd "M-.") 'ensime-edit-definition + (kbd "M-,") 'ensime-pop-find-definition-stack) + + (evil-define-key 'normal ensime-popup-buffer-map + (kbd "q") 'ensime-popup-buffer-quit-function) + + (evil-define-key 'normal ensime-inspector-mode-map + (kbd "q") 'ensime-popup-buffer-quit-function) + + (evil-define-key 'normal ensime-refactor-info-map + (kbd "q") 'spacemacs/ensime-refactor-cancel + (kbd "c") 'spacemacs/ensime-refactor-accept + (kbd "RET") 'spacemacs/ensime-refactor-accept) + + (evil-define-key 'normal ensime-compile-result-map + (kbd "g") 'ensime-show-all-errors-and-warnings + (kbd "TAB") 'forward-button + (kbd "") 'backward-button + (kbd "M-n") 'forward-button + (kbd "M-p") 'backward-button + (kbd "n") 'forward-button + (kbd "N") 'backward-button) + + (defun ensime-gen-and-restart() + "Regenerate `.ensime' file and restart the ensime server." + (interactive) + (progn + (sbt-command ";ensimeConfig;ensimeConfigProject") + (ensime-shutdown) + (ensime))) + + (defun ensime-inf-eval-buffer-switch () + "Send buffer content to shell and switch to it in insert mode." + (interactive) + (ensime-inf-eval-buffer) + (ensime-inf-switch) + (evil-insert-state)) + + (defun ensime-inf-eval-region-switch (start end) + "Send region content to shell and switch to it in insert mode." + (interactive "r") + (ensime-inf-switch) + (ensime-inf-eval-region start end) + (evil-insert-state)) + + (dolist (prefix '(("mb" . "scala/build") + ("mc" . "scala/check") + ("md" . "scala/debug") + ("me" . "scala/errors") + ("mg" . "scala/goto") + ("mh" . "scala/docs") + ("mi" . "scala/inspect") + ("mn" . "scala/ensime") + ("mr" . "scala/refactor") + ("mt" . "scala/test") + ("ms" . "scala/repl") + ("my" . "scala/yank"))) + (spacemacs/declare-prefix-for-mode 'scala-mode (car prefix) (cdr prefix))) + + (spacemacs/set-leader-keys-for-major-mode 'scala-mode + "/" 'ensime-search + "'" 'ensime-inf-switch + + "bc" 'ensime-sbt-do-compile + "bC" 'ensime-sbt-do-clean + "bi" 'ensime-sbt-switch + "bp" 'ensime-sbt-do-package + "br" 'ensime-sbt-do-run + + "ct" 'ensime-typecheck-current-buffer + "cT" 'ensime-typecheck-all + + "dA" 'ensime-db-attach + "db" 'ensime-db-set-break + "dB" 'ensime-db-clear-break + "dC" 'ensime-db-clear-all-breaks + "dc" 'ensime-db-continue + "di" 'ensime-db-inspect-value-at-point + "dn" 'ensime-db-next + "do" 'ensime-db-step-out + "dq" 'ensime-db-quit + "dr" 'ensime-db-run + "ds" 'ensime-db-step + "dt" 'ensime-db-backtrace + + "ee" 'ensime-print-errors-at-point + "el" 'ensime-show-all-errors-and-warnings + "es" 'ensime-stacktrace-switch + + "gp" 'ensime-pop-find-definition-stack + "gi" 'ensime-goto-impl + "gt" 'ensime-goto-test + + "hh" 'ensime-show-doc-for-symbol-at-point + "hT" 'ensime-type-at-point-full-name + "ht" 'ensime-type-at-point + "hu" 'ensime-show-uses-of-symbol-at-point + + "ii" 'ensime-inspect-type-at-point + "iI" 'ensime-inspect-type-at-point-other-frame + "ip" 'ensime-inspect-project-package + + "nF" 'ensime-reload-open-files + "ns" 'ensime + "nS" 'ensime-gen-and-restart + + "ra" 'ensime-refactor-add-type-annotation + "rd" 'ensime-refactor-diff-inline-local + "rD" 'ensime-undo-peek + "rf" 'ensime-format-source + "ri" 'ensime-refactor-diff-organize-imports + "rm" 'ensime-refactor-diff-extract-method + "rr" 'ensime-refactor-diff-rename + "rt" 'ensime-import-type-at-point + "rv" 'ensime-refactor-diff-extract-local + + "ta" 'ensime-sbt-do-test-dwim + "tr" 'ensime-sbt-do-test-quick-dwim + "tt" 'ensime-sbt-do-test-only-dwim + + "sa" 'ensime-inf-load-file + "sb" 'ensime-inf-eval-buffer + "sB" 'ensime-inf-eval-buffer-switch + "si" 'ensime-inf-switch + "sr" 'ensime-inf-eval-region + "sR" 'ensime-inf-eval-region-switch + + "yT" 'scala/yank-type-at-point-full-name + "yt" 'scala/yank-type-at-point + + "z" 'ensime-expand-selection-command + ) + + ;; Don't use scala checker if ensime mode is active, since it provides + ;; better error checking. + (with-eval-after-load 'flycheck + (defun scala/disable-flycheck-scala () + (push 'scala flycheck-disabled-checkers)) + + (add-hook 'ensime-mode-hook 'scala/disable-flycheck-scala)) + + ;; Enable Expand Region integration from Ensime. Ignore load errors to + ;; handle older Ensime versions gracefully. + (when (configuration-layer/package-usedp 'expand-region) + (require 'ensime-expand-region nil 'noerror))))) + +(defun scala/post-init-flycheck () + (spacemacs/add-flycheck-hook 'scala-mode)) + +(defun scala/init-noflet () + (use-package noflet)) + +(defun scala/pre-init-org () + (spacemacs|use-package-add-hook org + :post-config (add-to-list 'org-babel-load-languages '(scala . t)))) + +(defun scala/init-sbt-mode () + (use-package sbt-mode + :defer t + :init (spacemacs/set-leader-keys-for-major-mode 'scala-mode + "b." 'sbt-hydra + "bb" 'sbt-command))) + +(defun scala/init-scala-mode () + (use-package scala-mode + :defer t + :init + (progn + (dolist (ext '(".cfe" ".cfs" ".si" ".gen" ".lock")) + (add-to-list 'completion-ignored-extensions ext))) + :config + (progn + ;; Automatically insert asterisk in a comment when enabled + (defun scala/newline-and-indent-with-asterisk () + (interactive) + (newline-and-indent) + (when scala-auto-insert-asterisk-in-comments + (scala-indent:insert-asterisk-on-multiline-comment))) + + (evil-define-key 'insert scala-mode-map + (kbd "RET") 'scala/newline-and-indent-with-asterisk) + + ;; Automatically replace arrows with unicode ones when enabled + (defconst scala-unicode-arrows-alist + '(("=>" . "⇒") + ("->" . "→") + ("<-" . "←"))) + + (defun scala/replace-arrow-at-point () + "Replace the arrow before the point (if any) with unicode ones. +An undo boundary is inserted before doing the replacement so that +it can be undone." + (let* ((end (point)) + (start (max (- end 2) (point-min))) + (x (buffer-substring start end)) + (arrow (assoc x scala-unicode-arrows-alist))) + (when arrow + (undo-boundary) + (backward-delete-char 2) + (insert (cdr arrow))))) + + (defun scala/gt () + "Insert a `>' to the buffer. If it's part of a right arrow (`->' or `=>'), +replace it with the corresponding unicode arrow." + (interactive) + (insert ">") + (scala/replace-arrow-at-point)) + + (defun scala/hyphen () + "Insert a `-' to the buffer. If it's part of a left arrow (`<-'), +replace it with the unicode arrow." + (interactive) + (insert "-") + (scala/replace-arrow-at-point)) + + (when scala-use-unicode-arrows + (define-key scala-mode-map + (kbd ">") 'scala/gt) + (define-key scala-mode-map + (kbd "-") 'scala/hyphen)) + + (evil-define-key 'normal scala-mode-map "J" 'spacemacs/scala-join-line) + + ;; Compatibility with `aggressive-indent' + (setq scala-indent:align-forms t + scala-indent:align-parameters t + scala-indent:default-run-on-strategy scala-indent:operator-strategy)))) + +(defun scala/post-init-ggtags () + (add-hook 'scala-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun scala/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'scala-mode)) diff --git a/layers/+lang/scheme/README.org b/layers/+lang/scheme/README.org new file mode 100644 index 0000000..4c14250 --- /dev/null +++ b/layers/+lang/scheme/README.org @@ -0,0 +1,100 @@ +#+TITLE: Scheme layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + - [[#compiling][Compiling]] + - [[#navigation][Navigation]] + - [[#documentation][Documentation]] + - [[#insertion][Insertion]] + - [[#macroexpansion][Macroexpansion]] + - [[#repl][REPL]] + - [[#evaluation][Evaluation]] + +* Description + +A spacemacs contribution layer providing Scheme support via [[http://www.nongnu.org/geiser/][Geiser]]. + +* Install +The scheme layer currently supports: Chicken and Guile. Combined usage of racket-mode +and geiser has not been tested. + +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =scheme= to the existing =dotspacemacs-configuration-layers= list in this +file. + +For full Chicken support, the following commands should be run: + +#+BEGIN_SRC shell + $ chicken-install -s apropos chicken-doc + $ cd `csi -p '(chicken-home)'` + $ curl https://3e8.org/pub/chicken-doc/chicken-doc-repo.tgz | sudo tar zx +#+END_SRC + +* Key Bindings + +** Compiling + +| Key Binding | Description | +|-------------+----------------------------| +| ~SPC m c c~ | Compile current buffer | +| ~SPC m c p~ | Add directory to load path | + +** Navigation + +| Key Binding | Description | +|-------------+---------------------| +| ~SPC m g g~ | Goto Definition | +| ~SPC m g b~ | Go Back | +| ~SPC m g m~ | Goto Module | +| ~SPC m g n~ | Goto next error | +| ~SPC m g N~ | Goto previous error | + +** Documentation + +| Key Binding | Description | +|-------------+------------------------------------------| +| ~SPC m h h~ | Docs for symbol at point | +| ~SPC m h d~ | Look up manual entry for symbol at point | +| ~SPC m h m~ | Display exports for module | +| ~SPC m h <~ | Display callers | +| ~SPC m h >~ | Display callees | + +** Insertion + +| Key Binding | Description | +|-------------+---------------| +| ~SPC m i l~ | Insert Lambda | + +** Macroexpansion + +| Key Binding | Description | +|-------------+------------------------------| +| ~SPC m m e~ | Macroexpand last sexp | +| ~SPC m m f~ | Macroexpand surrounding sexp | +| ~SPC m m r~ | Macroexpand region | + +** REPL + +| Key Binding | Description | +|-------------+------------------------------------------| +| ~SPC m s i~ | Start or switch to the REPL | +| ~SPC m s s~ | Select Scheme implementation | +| ~SPC m s b~ | Send buffer to the REPL | +| ~SPC m s B~ | Send buffer to the REPL and focus it | +| ~SPC m s f~ | Send definition to the REPL | +| ~SPC m s F~ | Send definition to the REPL and focus it | +| ~SPC m s e~ | Send last sexp to the REPL | +| ~SPC m s r~ | Send region to the REPL | +| ~SPC m s R~ | Send region to the REPL and focus it | + +** Evaluation + +| Key Binding | Description | +|-------------+---------------------------| +| ~SPC m e b~ | Evaluate the whole buffer | +| ~SPC m e e~ | Evaluate last sexp | +| ~SPC m e f~ | Evaluate current function | +| ~SPC m e l~ | Evaluate line | +| ~SPC m e r~ | Evaluate region | diff --git a/layers/+lang/scheme/config.el b/layers/+lang/scheme/config.el new file mode 100644 index 0000000..5e51dee --- /dev/null +++ b/layers/+lang/scheme/config.el @@ -0,0 +1,12 @@ +;;; config.el --- scheme Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|define-jump-handlers scheme-mode geiser-edit-symbol-at-point) diff --git a/layers/+lang/scheme/packages.el b/layers/+lang/scheme/packages.el new file mode 100644 index 0000000..23b62c7 --- /dev/null +++ b/layers/+lang/scheme/packages.el @@ -0,0 +1,83 @@ +;;; packages.el --- Scheme Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq scheme-packages + '( + company + geiser + ggtags + helm-gtags + )) + +(defun scheme/post-init-company () + ;; Geiser provides completion as long as company mode is loaded. + (spacemacs|add-company-hook scheme-mode)) + +(defun scheme/init-geiser () + (use-package geiser + :commands run-geiser + :init + (progn + (spacemacs/register-repl 'geiser 'geiser-mode-switch-to-repl "geiser")) + :config + (progn + (spacemacs/declare-prefix-for-mode 'scheme-mode "mc" "compiling") + (spacemacs/declare-prefix-for-mode 'scheme-mode "mg" "navigation") + (spacemacs/declare-prefix-for-mode 'scheme-mode "mh" "documentation") + (spacemacs/declare-prefix-for-mode 'scheme-mode "mi" "insertion") + (spacemacs/declare-prefix-for-mode 'scheme-mode "mm" "macroexpansion") + (spacemacs/declare-prefix-for-mode 'scheme-mode "ms" "repl") + + (spacemacs/set-leader-keys-for-major-mode 'scheme-mode + "'" 'geiser-mode-switch-to-repl + "," 'lisp-state-toggle-lisp-state + + "cc" 'geiser-compile-current-buffer + "cp" 'geiser-add-to-load-path + + "eb" 'geiser-eval-buffer + "ee" 'geiser-eval-last-sexp + "ef" 'geiser-eval-definition + "el" 'lisp-state-eval-sexp-end-of-line + "er" 'geiser-eval-region + + "gb" 'geiser-pop-symbol-stack + "gm" 'geiser-edit-module + "gn" 'next-error + "gN" 'previous-error + + "hh" 'geiser-doc-symbol-at-point + "hd" 'geiser-doc-look-up-manual + "hm" 'geiser-doc-module + "h<" 'geiser-xref-callers + "h>" 'geiser-xref-callees + + "il" 'geiser-insert-lambda + + "me" 'geiser-expand-last-sexp + "mf" 'geiser-expand-definition + "mx" 'geiser-expand-region + + "si" 'geiser-mode-switch-to-repl + "sb" 'geiser-eval-buffer + "sB" 'geiser-eval-buffer-and-go + "sf" 'geiser-eval-definition + "sF" 'geiser-eval-definition-and-go + "se" 'geiser-eval-last-sexp + "sr" 'geiser-eval-region + "sR" 'geiser-eval-region-and-go + "ss" 'geiser-set-scheme)))) + +(defun scheme/post-init-ggtags () + (add-hook 'scheme-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun scheme/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'scheme-mode)) diff --git a/layers/+lang/shaders/README.org b/layers/+lang/shaders/README.org new file mode 100644 index 0000000..dd64475 --- /dev/null +++ b/layers/+lang/shaders/README.org @@ -0,0 +1,22 @@ +#+TITLE: Shaders layer + +[[file:img/shaders.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + +* Description +This layer provides syntax highlighting for shader files. By default it will +provide highlighting for files ending in: +- =.fsh= +- =.vsh= +- =.glsl= +- =.vert= +- =.frag= +- =.geom= + +* Install +To use this configuration layer, add it to your =~.spacemacs=. You will need to +add =shaders= to the existing =dotspacemacs-configuration-layers= list in this +file. diff --git a/layers/+lang/shaders/img/shaders.png b/layers/+lang/shaders/img/shaders.png new file mode 100644 index 0000000000000000000000000000000000000000..8efcb1a63e5b15d661dbd138993b19be58d872b3 GIT binary patch literal 26117 zcmeFZ^;;Z4vp-58NO0H111zoy4hb4ugWCd&26qka8l2#^=%T@OaR~%>cXzkTd(OG% z-uv7A1HSt_yW8DUQ$5vP(_Qtcnh94{l*T|MMTLWd!;twVp$Z50&h)K3fP(b)yIS-6 z-P_+gCsk=NIOr%~|E==D{+qTF92^?nf4=YF(ldzP2(&HLwVbsS@=M^iHaRSBv8IsL6BOk?5fY%jph?&jvk=Elut=V;E($kM*dwRNKXZzlgY9|^FNiKC^xv!$Ia)qnVcjO|>Ug=uL1)6xHa{`)$e zEzSO)o@|}|N31si+5dBdos*4&{eOACohtO7RskhPOYmFI|KTsfDfC~I|DU%1=|_nD zKb`--F6O@_{jb(HQAJRN*#CFfL{Q~n4BBvTU*KdUzN)*wJN7|#*Xy0WSuR=uH@TsI zuJ3B}V?;6)-wVS1;mMBq{@XVo^#{rgB{4CqA|GrN|2VUs>I}|RAKHjfV#2E(y4p%- zD_%X!Z}p?0C$h|zbaG}p<9qV#r)f?nO-{Qje^@rr;gQ}2`hD%BGQ#FSA%6dVs{dy+ z{(mULoC3D}G5zJ<6c0^&*kQ7+tplrW{m3V;n;(b6>>W{?)Rs7(1wb%Y8TRkv=bQb~ zge+P)Fg$wsu*9UKT)o!vA&ys7e?Pe@mu2tEzsYMAcX^lnEAQ@LJd8x~o;WGP1WG1Z zx%%RrY}^*CIEDjw18AnbX9Ye-o2bRlc|INQ2@_Z_c?q%cp+Vw|sYxw$b@&tt!II%Y zI2_PT6cpE!ZY8wNpwv}-uL54q{U2bV(g>WtSeTF@~$Md3Wev}_mq6f(eo!G0W zshRkGJQ{NKT3S)&z();6h-OP^7~PdCi)y41oS3Ms_i&P{Uv}@EC%CzhVE4LRIOLjL z>k1T?;$IxMB%e(>8%g61yurQP?MSxMzNVvgE8qj55_&D2v>I{5(RrT-({|Z^+^|JK zst{OL30|~5M%S5NYZZ?8DdgR>%NW6{|;hUPJyBKh2DJ{-V+>l#8h zy&3iH=hBkbU46dq;t8t7FZ7cc)DGNPRhCb_NzCDtM7!&MPg|)Qii%pwd^{CxH(sbq z7WxXAXeXKin&%j4w^WGjB+a$wocQjAQ+GWK$tXletAVGF@Gz13L%P?$#@jb`ZoA$K z*%Bk*Fz4C2(k5@o5c3!Z!>E~o6O2ySa zwqr>hJS^64)$Y@$PueeEau@-qDWPKV(OvfTh0d2UbB;dA^Ob9t%%ipr=RK|{#LHl2 zJq$D6I|ldC7U>`CbEkmQrroY_m+0t(0RO&cn)Nk__+XVhCuCGwv|x6UwQw|%BE^pi zgVASVJW*wee6#Nqzn44kIHb)hDm!@Z8g4v_Vy8l$6F z_yXFAc+otRiLy|c%0-&5(>uAod)Xcy@&#Y{;;p`PW$^zg^?PDwWxbAgO=k8BvmVdu z&6-H#7KhJn-fFws7`n1|pYC$pbqMGOlQStR42%qo$X?##J1aL|c6a9=n8H?0}JGjAWJH4U5ny~DLFR(0A3o{~PX z@YsInhBvsIutxs;i3fm(`hbNIDvr0zrs?00*G7zr)x#IQ!CvkMknB|IRend9M-3|3 zfQc5CtISqJk;~oD3895D3sIb^HuN{}(F#5$?W;jwEOz8Iz0uc(8^*0Ptb!wJ+0~AS z4m58WvfPW@FJoN#k<&>>F_Gc9y+sTOlRvQNp){6LA2GtLTqI}J5@m@ws1z7~kR=s6 z4&dDracV{gythV^Q?g9^f_>bgaW^qRWQLFb@(eY68SA&eKdBjJyA*yp>+Z7qjaX$d zPNNsM;T6K(cD185OrCyRPXqC2&5~*2=SR&Zw(ESK9DOdG^>0w**Ba&v<91{Vp$cK6 zmXxtKV)VE6Dj_(7mS9h1DYjG%ag+S-nwlNr&V$TsmA93lhNzOS^k!>cmA6x zI9q17x$HZJ@c3y;W9&olQ-5%Pzf2<#S5Wy2`=Q2Q)ERPf;6tGLx$+~?CL~OqJ8zmFRd*20eq5G z_L9`@Ao5PRRZuMN@paVFQt0lo$D&g;qD{Et1)D)@s>#7MpPQ>+qw;978di-o+}C;o zkL~C{#QR}k+u6b3U_|~-{2}%CctngwNJJfYU&#~wX?Jp(Lvd$?7b5S&fTo27y*e>r zZlMw~-OXhcWwoTw{;{-dW1Hd(C(jHke>=IDnOn5)Y8JEpDKCEF8f*OId1&L7b!1oG zAyMxeBderz`A$&p-}~D;NtLxwXju9H?p{D7s;)X=AsQgW!K23rm-X1cb;`qMpB-$v zE9$-JqS-O(o9Asw!9D55y8t2Jf@ZbCM6d1)r8R69ofUxp+9`=U>S&gJ*zsny&LI~Il7nb{|~Wo2de)hwfdK^S@Hzu%92gKNbe2xf3V(^_BEe+}yR zH*`?{oiI>oOEU{2s5juIEj}&f=Wev<%lh!1ZheYmjCsSt<_Xl{IKuU}<_mPMEx|`B zmiuo!cc+H?I!vjiUGMznlYd`GcENpXFt!kmp35~6y;rBTvv}@Iw>*Lk^N2S?Df5Rd zHAZXDydzpTi16y`SeS!ZQ)@eKWCZfE_o;q|FY;y@6Hzi9Cc~GwS)$CE2=lRcWNwYE z`&mQExb2H4*rCH;Rwm%tI(3GYm~xM8?uF1d3Z$s9sb6laeOWcIH@NEg|5Cnso1TibLFb`@z-#6=G`Je-|t2Ee!gA1sSiMxLA{MdyoOcb z(|-@?2fADDmgR-G;#m>aVwpdpr>JXn>HB|hi*DS;@6DiZO?l_x&Avr&&HOkxo$@mz z#ErJS4puV8X!<;}4fQ$|g;qmvV(NHK@BB~_mm)UmiJV|C)fh3GSZ;j?iePVAR+y>` zRW_;^7Oet)5La68P(W;BU~X7aa@ynClnnCgQ@S-{EV&^bk0XZJ zSf5&rB+wY3Jmk>JqDzt&C60lCVf+VK*yS3-Sfu%t!{RC^`{n2$a_eLCHcr+WVvfil z5lMrNCRZ#+R#~}z!_(}$pWS**YSmjOR90zHNoP=v9-}`eehpQhj{c5}#GzRLcCq817yL?@eWUucX{@qY-_Z9LXCg$i9*8bbuqszSt zhc23S$@7chQ-XVMh1;Divur#;)^#EJC zPoTN}*F(@+rS3oUgkPcs5+n`~o*lt)t$RMhEnEW@2F%ec-!)LYlE}+i1$&1cc2~v4 zFFLu0_l6uZEho)#`g1?;4;N3aW~WCIj>F;S8IoIw=->>xay6Mv&SdW38FXU_>z`p4 z9PY~EKG*lslwQV@zwKIYVuXI~t9d)(=XRvW|xg2LMJgjw@wVq#H>4dSi&8= ziB@+3%A}z7kd=~lJy&AV(pCfMZ_;hob`|a6QiGo7ktps;(MMQXKItRurBIJ53H;Q# zd5LUm*s(EY%Pdru+fG4cA}opJj<6)M)ktAFV1=2Mrd@NsYrx^#M@{rMjlZ^@{fv&J zQCIdW*C)@aC|^Oxe*N1OV${zoOk~w_=eNTg6CC(0REwdIU2FMhH2xvlOqk-jQi#Ab zC|wa}rVW~yA3@8a^zz#jO=#=#t|mD;gKvKd*;lRJxD;jV*B*SGQkiBCVtyl+@Ae z&Vc&p7UKOHK7-vi#85)irK}k5<##3w(nsuqEO+&u zo(%0CztaVEG}st+a`k=gJ$4gyx0oJ{t{kFH`Rd4dj;3fOH})Y?B%L0Ms&^^HTw0{k z%R*s$R82A6XI!r1ep_MDi`Gyez`@R|rnHX@>(BC2U)QnQic`ld>Z?|}FitXe1fOP9 zTV-Ru@-ML}%kX{KFAXy}K;qe9RmLh-XIzZ_mPlmazEWf%QqF;`9Mk(&J5sJ zJ?1Et>r8Sm{9Z&|bVB{SRo zS}c%dMW()$eoAOv zI(qGL^)n)iIjGn{b`vP-`M!%skSF|?5%VZcafmA_fonPZz@#cxA@=Yvz*=&LUXwK2 zaAwn>EZOG;CVVSo;3xc|%1d@(06u`L{cr^t6S~;+j94ATy?sxVbPgp^AG=Pc z4>gfsln(iBt9yB%e=Az8X{a&Ora&E;lftO6;xOAvX8L=BbiO~K%?oQ(uCE_;J%1Jv zOAHY-5j5~-T{duWap@=*j7MhlW(42k>{w~>5(Teijbw3wmEBDB(EEOIC6P(W)B#DW6hjvB zz6CQ?y}>`)rJ-D4he4YZg7(Li$K9X+j1C(sE9`eJn-!UN0Sw|-lJ9c!XhH&lAvB{S zBkHIm>bL3>uD$5~1=1}?$kH;7C=kimY9r$65XL)udX@*4fI&;wQ1|47j7VpIGPyFh zU4|Szb@DC%l_I`DC8;Jvoag-~7w$C&}LZd3RIKh?-XVE!8(8)@bd z4R$)W<%mNA1Hepq;SqU?!D`TJMR5jbdQBqL^LW>yGo zs=ry`XX+bu<&3HLdN;Gi*wtZBKfK_~gFi`qF9kpO%i{>=nq0cC`h7hl_3jF@ll|(Z zwIVLg;s}QBDD67*_hQ~>0a<|G@G{^7()J+9$(+Hnik$344l&`tA-bVMi)J-lfOHMM zHBJ4Do`_*OAk;I{8!DIHT$cc;Yru`vX zlByXAg82vuMDt+FME=j8KYSi}=-6u^2}~C>(cT+%eZMAw5r*GZgV`|p351~opvsiz z3y~-jO??)@$gi<%c@lv=+MA-!`;aaoO{n~<+2Ajt3GWk}3lNnExki+fJ_|OVepn8A z@i)uk34xiCgo$2b6WvnKF=e8)E`=l>qfwEdN}IwnAJJqQ5-C~>{7ccd`%!YWBFdXg zg|c>?dI?`->;_|D*9);eddm51;-+oFVS!CA$a8x^qeXJTJ)#-_V!w2e3s2j=Mh+VU zs@1#$`=e!2n2|DGei7UV=VmP#4M{`3 zTn0z$sm*Dg|7I(HI`u2WSG_)7_S-ypF1oeTl}>`5f}z)U1p2 zlU3p;;~tc<#zrlLKY4j#jFtlnY>qXiTZhUQ>rB-fH=-7O<)2R5+wNAuj@VyL*t{ax z_0v7=ln0>vhHO=Yk-m%ObH#!atx&b!>04fDj)kFLVEgzW7D7}Z0{A5M3WH1-i$Dq zg>nCY9E1K|^pHD*EauF~C2VeDqzMkYMHxO{M=<14ftn)Dcnu}_{^6_ccR%)vzNo}B z{1vRLZ{CmrAQSxiXD&OUwuTkS$Id<`u;zzQzCQ`k-Rz65-SQgOP*I6bqFsgd>6`od zwtrVuHO3&}>LC^Otovl~j|%*CSogQpZ{(*HM8%L(7#39{8QGzE^rBneWJk;440&N8 z*s=QPS=J+k*^~v!b(SjT zDt=ekDpwA6U1i1BC2*&E=p}mnjvLN1IyN{sN(2z!AgA1j7j>0g!Lc*0RFn6+M@PUD z2>H6dI3!N8F?iuB8g}J2;71a(B=nCyEb7PdoT*jgD&Q zjpCM2Ci-$`*(6K}w8QW6+rL0yxqx59uJQv%%4&DT(XHi=W!_<<4bUcD1FO@kKQ;P3 zd-kU57bH6PE@j7OW$Ekdi#%M8B|k|rn*6wSscp3vc1=F{B}a@*rmNQ_8A)UCQ(^n~ zPMb~}UrR4$b0gqg0?7Ys*Th93Zr{fEZL|a3?h0o~LXDK5Yj6cKK@`dJB*_0D#zA$9 z4z-rzQYH92P6S-NsKgw9&w`u_$dVDXua~O*}`t zG0=etND(t{q?QI3BA&1UyM$iVg+)PUE|SRYp|VDvEfFSh|b# zKc2FgeV>@uCM&RhNvt!^YjM4%9d3KEJq~(NGV()W?v2UCNGKf#sAWmI;Y0j`D$urY zm>EzJqid8$)QaS*&Hknr9#E5Sdo9Rxh@7u4l}ByH3cO53j=xS>PB!ZsGz%z6_s&jB z2`U?2zn=f{g8stdQcOx0+;2jmLRUsI5+dL#H`EzaA1F|V6?~f|;38;-#<_sI zeKQFO2ukp#Cyziq*F0<6iBbR)pBAoKr|$3Dixty`>>VXXqoI#7zBz)idh6=JdOY2i z+0Xsz_Y|<(^DKX({6x+q+~Syc;Sv5LS=kkbAHa)+9XM}pLwqZHt2rFZMc4P#KOF6z3klMAqwmpA3sS~zOwSgV z%zV_5n?t2ETJJF(x*d+eIbOn4sVy;JLONU$^zoH0P~n#XKjG$GTuE#!h+*hHVd$Z& z1g*@tKRI%&`AYgxMs0m!VnW>xdE>Iyin*Z3`!QOil7UE+4(Q|3L^*=s)#r8E*6_)4 zqTo)0WJ2&Dj3JRfk*i+B$i=OwBId@1o&7;eVjho$ZG@~EJin_++d;P7yW#`cAeU}c zTdspj7?swSKesp(iuj+E0@A0ik!$9sy<3Xeg3sz~xfZETW z57Nj8c&8Ma~58UO*EB(&}`F#v-szUsAMP|rQ9>^xz zwVRGYEu>lI6HjO(xk5HDRy|Gw)waKGG+prEEc0QJ^2-Q}d>~}K`3X@-Fr3F-F*fAG zp%~Qj7>1VqD~} z>~){_oh0~uvOJfvMn9)P8}dWvk%p@&CS6K*`Gffxl$ZDSJ^AV>rhBb+Zz`Nd+s{hR zRk1W2mpcC~?z|HMF#fZ~Qs4p#pVi z%p^7&?~z8?X)7Rr$6whLHv`L#RP4O9s}oqF?eCuCLKK%Ib5? zn9z;|oB9v#vI^U34eIjR^4<37p7vA!!)9|V&PHWG)A)0p(($y)_aOtn*7odcE+HTF zO4erMwWGZCC*Ce1MJ4mp{ZhZv5v*1JRdD;5;dt0f7H zBP0fhV!Dq}L+`s(iSFHqwsy72K9>u29Gyr0}pwG>B;LVHHwRCuE7v(C5VOLit+nZ znC@pAz{`0{WP2!2SKaUo?!tJcP>F!BQai=Rxh??>J9%7b)ixnm#&3$5{xNT_bTxrR zd!{nT{4h0Cu+64m@v!Dcp7WMdd(MqL%U`-(xZrVW>rk!1j_2dhkp`(pvUmI1 z61aUZ6fthse)-_0te9BBtu-JI^QWAULg|3A+5O036737qVT{*}B9X=RoLO$L}n9 z(MwhcQcxOeUoN*Mmf&@u_p;icaV|BwZ0sU;kWAW%L`m^={UVx)_i@trW#*9J^)QdJ zJ71H@_W*--pT#I{_9j5~UJqwJo9>{a7m1BY_m24XUT49VE0BDvK7;>u1_x3|riItN zqKj(0*{NpiA?PN!?glWlkjWv@o|!>WUa??#yi|Ris3lUrDNvDU*~#+kc&-9}qID+z zU`x$@ zT^2yb7Wh6+isen}u;s)1=7|{s?#11Jn%l8+mygROEDN)f^OTb$vjmQOxJb$CA2xdG z1i~*krLWc{()zr=e|wQx%FK!Y_7XYvrcfvUsCl~WPb&vWDvi4igiZSytwQ3AY?ld*^`L}B*S2zHJwJEHJ5!VF^ zUT5Q?(Mf~yD3X+o^;TmdeK#8!2*dlA^$`9fFzMmGL&&&do;O4!wMcDdcJgQ)c=Z>{ zk_0)LKV>$Bf@!tAx3mN(if@@0XQE9`%VX3&-}r;l{d53GTPvT}ZZ&RT9U+QRC zjP2Z@lDMyyoV2mWHIz4KLk{-xB}JZwp2Q|ybIuGtCXVq32c^Dbvp)lQduCj&sc{$F zg42tNz(wF;cqHyAgxUI?a0gtkHo!!<=t8i#$gq@J`YSD#qFo@UF8FO+WzrOft|aic z_wbTrJ}--yjbK5GO09kpgo!Z3n_f%SYpFg4A<3Kg{Pn-9F$nZd(6B1m3_YH;?RdWv z`n*}8+rXsVIfKZtez#~x?eL)vBP|I0^p|(F*aoNIm?_j_dU{&S05<)d0P%3PBAaP_ z8jbLW9oYV;lrwL&xcUo@{=*nwi7l%dXFlu0O=67*bTo*QXf*sft9e^CC5d$5y7>wEQNX?byg zSjgc~skE+Dpw1mPA`y=RHHn;emt#i3gZr_G8O83G(v->W5hV%jhQ=3x5OI&2@cH^>Nk2m!N$m1I|%r{waLQ?zxk z89YoFnLX08q`LkO6aS*w(A6HLOM> zYAc}=6t!{SoPz`W^7+rIgfI?|NfgbEyXmYP1fd`q&aXYy?r}(9^s-15nWJ)gER{@LY6>NRHwDh&ypl?qnpuFuOU@MX|?8G5?2y6@R5G|4%=J{ za^pNRIeE=-Z~(?O>uCI9qz5!{yT~;Swr=xIxa}n}lt&IyhTb?1_U-=lVp7uL#`Tf= zDf@2ka-#d;?$|_{f9G(@V3aY|G~{FVjiMq*u?k66U`hMzrSmGU>-^4_sIyM0Bq! z+w-(X(G8;|1Mq9pu_~v+_CP&drplK02Msdspf`VceA9 zbw>9bi%=WRC6b}~tNKhB0Il*Y1FIxT>O%?2YmT|WL$SmJuX3t3JqeTHw(9YF;pk`9 zpYCw&?L^^siDHU88f&pa7ygOQoS3Dd@nd|j&e#|bx!O%E4>_%u-k1|=tx$=9l#&T? zBFIa7hcjDU1cAz0R@fVj_w$q&>4BAW@6JqX82|idAjRHbaxj5KF$t3mk=Xd~HBR0n zE2b`ya?af+>?amHe5Rf9VP#!%JS?rg;>VjsJ7&b#n}3StfQ6&dZUOOELAMii1&^&@ zwfCflWJuoUmF)H`4hrU5lAmTUUOnZhFW&{DJYdIPG-AVZkh=>*L-9BXT;h?jwm$@; z#|8&III~F8$w?y17M4S*0gGln$_%lN$4MaJHkQQ(wHqu{a8xya^BhH`HyN*;d9Q%? zta0EG@@J)`YSoRNZ}}bBt?yGqeZle$X!9Z>J^t*BI#cIn0H-2lT0{13j-h`zv_-i- z!hbCRCGz5iipLJx%ct3!>&TFNtMyfXp$t9 z)1`0!8oRI2-ak&zc^WYDDdUIk)->;T=HMj)50&V`Gs9R$)20RHAjG(rMydTyki-7D z#HEul+Z%ZD#pGO>WRZYtD2HWepTgzHU`(3WMLQec=Fjf6CxGEFp#~!v5&TL_#6~!$ z@s*!}VNmuyBp}yWsV6vgW>eGed%D{F&4k4BtsI^pIs;43I_>KD{bKhT*+enm+cba)&Z20eBi~2LX!dA*)B~1^m1F340>9*F1x3+DIYu42V4GzRD*Hs0 zTUVOfQ99gUpq9~%yCUu)MR0ddPbW2b>X^eEf3Z12?+lg-2A+=bH0XfQvHrvT#73ZLN8Tj2J|msh1TPaK8w;`|-tQz9-d z%?EjLr;NAr6kHwQ09mk6jtzWx2E*>)h!N?X&mm7GlCgy*?j^oGicyOE=mTe(@8 zHLS*#km@&7hNrKGbMf-ZIk`3kBmit{i=r?mQMP4YPgHWI;iOTLBJ#ec6B(UitYErL z9yh@n-_dzOrf>!5;_r#QzwF84z~_YVl>}9wTzv@jt)|Ecb8^b(H3QC)^nVsqOK~}} zp^7;_o~!Qu75O_IZR-Q+d+s<^k+OCuTlBRT+Hnn>n==jHqsBe;ddciqQe>|J@)`rcLc-E1(K<)FZv>0q*gI;L(vAQW#p ziL)OmWBux$M!xXJ?uX&Uem?=l<0}2N;3{%n;TTTp6CT&1H$SG0V#4`!Dme?ux2s!K zT|>*6@Sx)dU6WJ0OeB1Ps_G+_`$t%9nQ*Sn2p(nxk=KZ;bjH#CVBfg3W~Lfh=X;^9 z6;1#fTNtkioztOJ|FUvNKS2!@&1z*BD&Y=-Uk03{4!8SXZgYXdDs*7C;&GmkFd+_1 zPhRmY36V!-u0%N5Be!XuR0H0MJ_=(D^oprTBvA#w_u|Ds)nzNU3k9xFv zVuNlbhnV}JKV$vN{veU+RxKN>*{O8Q^$RDGs#mJX7T_Rb}OQb~Hh-|k0~NJ(nybpbG4f9m**v1}rQd!iltns4|mBIJ&eg{P2M z1UUqG366++daXdwflJDL*tS!4tCFC%#H#ulr`iK$--D@=Okd@7h1+QmAkST&t352} z+{;sTU+h0i{DZg%ULjfab>XF2cvI7f z3X6$kAgB>x?GTzyxOdY!^T6Z>U{2AQ7~omAovx75XRC3FK{*4#A{t`@LDKxMjfyy~7ua9CnuQf&-{NW(2$tbOh@|)EhcFCD^mQr0LB1|@$?b&LcBI&` z76g|qYB|Rwa)C2I z9TKbM;%cfIFR4T{9k>u97lwl64~ZEtGxVgS9_qE4<(mrE*VI?C=)c#8Y#)nuQN1h^ zd65WXmJ3YAu1L8BaYEGvAUAPH2yk3i=lzsrCsn89KmV1gp7pkc$tiYdAqMv@#!n>) z%1)c2zFwz_C0|CdsSMO;EghbFmY_uKnL+T92mi9+h->}67x)v3Gbal0e!2oxz%sHA-4j{+O z=1rAadsZI@Q0VS`*7|#~VZrp`e~?1+p}?vu7c1j&!5++0x>;Tx+Z!oL(RJ?P1G4(+ z8(dr?c*y4ODtlftdqBxaUWF^C`F&i1fVRJhJ8KdrM;B>A=vyARf|O4EuM{XTM@g3M z?k8hpX_%dMqi}m=b*iM6&<5gSF+9QmHr2nI);7R~yb~&Sg|OABCi|FB0rio@^~Ft< z{@pcSFj<4f4dN8V8)OHh?bqjBak%_5B*vDYyLodke+eE_ogO^OW1|&Z)4n zaePjicGYpDyXnn3!&-lk*RE3hR;f})Cx(3f&(6qb%2t&z5>P3=9@gA}XMg@#3k?z7 zXi!r4gf^^LSKL<7@@uC}&6EarlQ zl`LyaB57x+XC0&;PA#-=azX#b=@(eDi){)vPtbLJ?uu~$#7u;MOj4clb zRzYAx(a}bYZ7;sueta&Xxql>&(3Dxe8CW_t6^N#xiVp{}VPe2#S)LG9gRxZ`wbHJZ z3f9hY@Y0o6lE7ocK;?f=8aa3#vC%pyYEma0 zRPOg87*({g&GWeA8<-{gWK?2~_g#)GM`+(7Ye>^?2FK-4b>^@&(@jvt3 zALN`?ScP%Yu@uYHU|G8JhXCnPE9=8)2mj&$X9Ksn*~ae11lgK~KzFwm2_GtQN4WXN zquQ~lLDW{7%(omdBzXq%7!YkbI|IpG?uPOFE8t#3%((EVPB~}k z%DL|iRiuDL9Ujkhv-HoU z%2ahq;rF%qDS1ENTW>Ke>G{q}D{6cYOqxvkO%XzKSZwa2>g7|EuyBcE#~izTeEB6K zYlv8vU`eq4Qn4Hz4VImmaI1o@T?stK^70LnFUVykpC=LnPU z*XSj^*XTuKZ_QzgTBE+yN><0`WsAsKYJGZmhY;!;;5;rvzJs=Sh`Eq}Na9G-;8E7W%?+%o$>A3 zyMTIBNU+fHqhvcpeTtGxYg_wO6BT;a`sh2a=cl!%WdXumWF?_qI)sY6yk9@xEltb? zD+9Tw24$YI~320(y`I~@-?0s<BlQqBIm-#MaVo0c10c%%UCk-FJg((_Srlx1LP}uxgu_4iV4Ondn7kQN0ddpU7hz zuT_~p^T?=wKC$o2CvlFF1saBD02&CI&B|7_<>y*ugzoNx zl8@P}PKPOGA0@MvO;*mTqH?2{nV6=K$NYI`!k2>s-hrL*32(iAyRp`s=n~awI!8!1 z@K4RINMTUEjNOXfp)7vPi?lZ(vH3Ms;%O+?t+$YlbzzTF$86#aArZ0~mJvSdU9{^o zvhG~VeT_;AemMl#EgY1idAv<2ry{C1XwYvrz+bt-!q|l(EdnFw5X2<|@oX3VQCYcr z=<&AlCa}sOM!90sOU|(!Y4OZ)hj5*Yhzn(o1^m|e*8BX>alZHL28|bLXkE%p^f!Rw zfu{R%Q!*~wTSLy8j%dYYf^&+CGmd1LRREXLS>(u&D+xpn3EWEvHl2$Wb47kYnWgOjUc`EK(FsOb@FtE+$p6t-US8qVxj4 z5{_VT$WjhnltQKhYQ+q@dTNf|$dT%!mhL<9scX0Hli6KZu0xHRgf-A|V)|Zh68b+7 zPQ@X|oNtqpB<7@><=uRYi&S6%#!2l}#uy$Z;|ug5Vo`)1!z@28XXlG;RT(#eTW0M) zV^`fo`SO~lI$Jc6pO1L5pO(7u42slt^}G za`a=OudV5%iJb0JS$MuO+&G%e-hO4p1zVQk;>h=&`C@(3E&Z8r>o}AnBcng-tjwPo zFSdQz%h8(PQ8mVU6&GgKI#~olToyElJzTN+4lUo3F=%2znW{2^jAp2OiJUB(64H)* zv8Kg~+aatc{k3zC4NK5x4hKb?sEW)J+ z#34##bn2$rr;B2%gdyRV{0XnkO5gn)d>RxOjXW%X`YjzRGCXVZtDc)F{zL}sn~6ZT zqJuCN2({%cH!?WO1K+#g5I(l*KQ~cT)tRXX-H_HO#c+4Hy@q1@Zl}1p!S#;ZSWm!e zIvm_b{{OrSV40m`4Ytq(352Wu)18TzXt!2g%YIk8NFXFv9`AQFeP3mW{4O_?CIt8G z;e;q0deP%LmxjMjb(d1HiymJoI5MA%1n#DalFe8p3=tVloU3X+(c5B*|r$p(kTO~j^Ge4=_bfxHEr zuQ#^Yw9G#36p!`Z3v4j#5QAy0w%NA8n=I22*03ao>0O`mh`MiMRkpM^?j{EYcKJOm zG-;Nb%0x373HJJ}AB`C4L2QEK&2O;{grgl$`7el(g8dd55h)X43d4Sd;sMh( z)oxd*Z6e`}CZ@ef=aI~sML(~0HGN0|Ww-p)O+2;iE1;!ktcLY8+yGnqPZ0zu30Xu7 z)=L!87Zt%di@Ha*DR!1aqiiVpUdK%s0sMqaZJ)fys(F959n~h7Lg)Xl_P&BG%I}L- zP(m6RN?Lw63_~MQ0|*KTNOwDwpweA~bV{RiclQv((4ErV-3%QAm;Zg9`z`J_c%Sp0 zz0Y2It+jUy&ZaL=&aUJaMycr<6duzi)6|m@ZSG=0qnLj{e8^m)=D(Zj>iZ5A0DX$^ zK5M#lOgS@xfqGH1@KY2a_v!!{k6HM}^;X`4NKld)cGt=)hoSa;2)=ERr0H{VJ>mE~ z&PKn$aD>gt=!J~++{y3b-TZW-boaf&qX+a|u~1e-1c;|5AO5rH&g52bZlBPM2d4z2 zPf%%e-%Vpv@cp`shafpZFmf8$ZPzN`Ig$3z+^u+Rq|#dvVepz*cuXJu*NTI5amlRa zc_qoh+N8$b!WpMNE#5nNPB0G$JUjfg`~N0^#{6G=Plqf#M*Vg&fB|YSQyBh4^5nIz z?kFCt`roZ|M7oc!Um#eDtZmgy)LN2~`cn}1?css9x4!+MsfoLZiD@})%x5HC?m!g2}QLk_7N+m0>fju zobl*)@e=jO>wl?I15K!9dLrF=Gu>|j&kfgsUPl+VQ-F*8=~3)Ee|4mhpgZU&vh7A@`FX|o0XoOd}Dcq&UOtU?N)HQb0e5IM}~k{5SlK>6ZV zUZpq;R|XO@&>Llk*h(>2ZCaY_sFFbT3O>?>6YgVq`e?9I6?l1+aOD7-q}q`G(rRdG zBZ$TKt{4y(duA~`Qq!jrRjbxHwE6I9s;zWsYX*w`zm$VNt(` zSxS*;ybrNDAM~F+q5ae~65X8feLH{ZZwcy@p8lW%fb9~>`NBfac%!7^pkd&3mrUKf zcfmhtk(bq@&d%0po_XAh{R4e?2esSuV)rX7m&c9);idR&rg#yt0R%o{H-$lmevIN# z!`ubK#NB;l%0T4KedU?#Hl?eySvZbsMYtVPm*79G7$PjaUUhTLh$q|J-||y49ZPEJ zw!!d0yq7kzO7eQi@u^L3fZ~thSW@Ue^me19U{2)qe;5BaO1U7ecp+MWVLv^tJI9Dp z?6+8!-CRz=<<|2EdZ~CsihVz5DuKrYz{RapZ)%#)ys4gD=S|nzt;zS=%&UYtoJL%( z(Q$X|`YIes?nk_0Ba_-2j3A&z5im4s4Xsv3BtPWKcwa3SW;y%`9^SRk6V*U=t?d>n zTA>TjDb*t_*LL1s7g+6#E!w`8Z*c4|tbahGGc97F${q=pAqBA&*(IDOiju^c-I8NA z9+kf`o+{KKq8Q3)3Z4{WNLLp@vrM)ML|eUOl;0$vE^AYnt4w>s4-rBJWCIfz{qvRV zCbM>Bg}URCivlW+c-}W@HD_e+d{~Ek6z;*mQ+nVY6ufy(|HKgP_Ax8Fry8kuuh2x) zwed=eb$8j>mK>_+G@;%a;2&aOx0A>BoJ z(DB{SUtMVAg1KHLj=u%izBOFO`(Yad&Lknb_ZmHl`` zU%~P4@z*tZ0lXZhtY&N`$_CWq!f(yyb1o~Ny9g>b0b6>RQ}+;=yx3UYpZmaUrYGT^ z9X-BZsk0Trf3H_Wauo_rm3(2YbF>qWc)w{`CtSrUEaI<5ZGji6Yj92iVn4DW2ar$q zhp{jaQA3Q|Cj5xp>JAzQCW9te=Jj+n%{l&%$t^#s%=T&-=~kFtXbpspjq`mnWar{! zt=Fb^807imX`txk8*`m;_{o*IyeTz;Wg5fPM{D$n{36xr?Cmhn)?)be{D)l`fzaN2 z*m7UkhQ{UJy9aYFEi5)#LA9XOq7*F+G+Q|TR1EK-ovk^%~f3Dn?#Pw!yk>FSJQb+JsX zFm(tJ&hz>KE{~K!yz@62O!wQvO2e|1gwZjP%O3kzoAdDA2GeqRqPF@IXO@(E z$w+=TlxY{=!XycJcp##wC~nRB0Ds8$N?&Fsd%4akx%T@c+kSTBHJSy#1#@xt@MV5x z&o!>-+AI0ln7;+>Ply%Cx;Oopo9QPFdCc!QMk^O@bHtW1xpI{D_%%y1g@KsXNkCEP zit!Pl$F|0P)IgUnZg6f%M4L~vZ3sp5uxVMH`O%7JTE7NkZUo5krWBPTWos(3Db5Qi9Z`-o&J6%}JqeG1aLKPQ)Tth7&j zQGq}GeGt-w;++`df1Ct~CoB0G-HHh{)(f4o(_F47C=vrV6PH2IWNKO5b$dwYRd=)3 zYtG>M50blW5#~!HErG%mg2h=G97LUELPQ5mhCaRF)O4!n20yb#@Op}-}-)~ zildMHM)ki~O~jT{lEBH$w^gGySzW)xb8`NMv*1IyaDBR7y0*4Sc9+`;_yUwl8deUJm_KX$mCe3(4sgU1prC38 zd}n{px;8B4*jj&=^n9!Jr6v!%8SeWR3`??1`xLz7d~+E+_fBGat~-d2!fs~UvBO-b za0F&9PI^H&l+Yv$6OTILOf}l@S_!&+inZ}=-wTaHSWP5$5L}#ocgJuXo4M8%o9DoF z-*ygPhOL*@8gVI6?knZd2DcbJ>%tkdCC%!vOsq8NVJoJF_-}^WuTVnVB>UZSEQli@ znB5BxOm)ib#hX3SnNdzbhh!&T7$Vb_$)Nf>8%KI|!M^omKE`(2|(}iZ~dbua+1u%n4wvY$wV14=depIF6KHJ`iLMs7clLG*|(qdrQlkG1-w!S=6cOZ zKYHm;bEDpwLt@Sj(bZD!WxcX;P&b@8rr|O6$65`P42%g3nv?=lhjy05sTf^#Mz$-_ zOV3WDvgD9HbD}q&*!EAt-dg_}KTuql|! z;~KF3SWE6EhmR9-nC(KrF@u1Xt}Ls9Od>Y$x2y!-w92QLQBb91ey7B3L{6;!$_6BPy`kQk1 z1`UV6Qo93@S4d>5(iY9$w0Fh!D08IH_H4`j>WEr?f5RM0WGgQ&ozq%MvH0Efq6ge& zma6*M$A9y3^Z#Y0WZL>*5QM9jeOu!2A%184bMdO5b$BsslHG*~X4IHMz5JNbk&d3N zJsa)}A((9pZt0v_^gAxaqdx1#_S_l7FB7y|oF3S^qxr%22?U>0la^?*WqD=6W~7QI zNM6ag0QipkuGE;Fdp!%6bD8=V9I3TY9M` zLfi*dZra9*gFMG7x5en{(A2i|wAh}|GLj7|JyVvj^B#d#N2J}g`-+RcF}Vuu@+qf> zzK&*&5WR3$>4(Q3&xA%gVHCeNqqT}r!Y!6Imd3MnvbWG$p8G(JVpO5acXl^P+DWi& zUG@*TGp9!{0x6qO?Kf2UB{DwwH$#0#uRW3n_sSGwe^Q$GsS>4m^u<>rbuVx5e>=s` zT3S-WoNgs|SIyg`lN(9+BHk^kB|Np%kqIPuA84cq0D2d&bdJ0Iv_Tt{XU|;u6tB-gv+JzIQ|M)~*|4B|zZ*UH&t!e1!(Bpmpzv(i)r$>3 zq0$%WnAVgqg96Y@MczuGzXYj3Xae~2AzJ!G&(76Ff}&W9Xx8I$=^JVfbjM&nIe@?Y zI3hp7RbW(Yf76pIlU`F(RJ7Hp0dDChVId)bI1X|eho?o^626HLTD$>#JnE?ep7r;U3nt}3io$5bUAf?$Ki&i@N9=ki z%4?bO;i2anXZ^WM@!yRt(T4MC;;Y#@D-pxmh~5ryw=j0mha3hys)f2|0o7oolQ6{d z5l5ti&_~cmrjC7tiAYKL>*J0`(=#A@&x~z=EJMrjMCkKxp4*)w){U_E&Sq4jO|jli zJ9V~S8P3AqnXm8HAUNACxB4QlBYb-NovEW;q$p%hjbI%{9VLEq9u{G6y4kYrg`V{8 zzD6sca>SP-Q{`3K-oy@#XL0Xi5@G}fjlQ0Kg`tg|#cf8cfY#2x^%=TvhfP&PdwBAh z&II?oRY<(mK4=dPHEfGY4|%au--<);ad5NHljeT1RQ|`yZgtoyIrAqoYUMM?46@ks zP=zcn0h_U@DyM#{w@@Wrm;COsa&y$FP9qWMTXC*3MFY`v--j6BH zR}|T)*xo2CK%VG=o`H(Cy?=Blo1&69#6CZ7v&np_L4KGnh{aBa#b2xl{ngiD(*$yG zefZ5~BE)8FI@Y%qFKVjODU<4IFA;rvD0VN$>)9lyStNuCaFQU4-!0xvAcM_Hvc~1> z!ch(v(Uv&zFxxE_@#}~j(BB+Y<$EE^;TtVtD##b;=2`9l(8@)8;YD0r8CFAbaOV<1 zMDLHi=vXE3<9@31!?GLg1{;A8P|(iXoDX)W-E9W`&0o}9ea4zo0qm05aVB9D+QFDa zeQ?r@UwYaKQfTZ?msA3kp10x5Y3QR}$`lpno{wlNFc>5?D6Bq5In-=E*DKmxgtQg@ zh$6!y0bqOSZ93;eX6f2A8Mw8F*pyrM^7=AU)669WYEY z|E9{UmgcwKBwwW1sVsfcnbGYaiLX|5ibC$4}>}Pcu9|jNF;25@DFS3dl{ko#KSOXN67sbPfyF*G=@|-L#vdI@Lysnt@%dsJ{8Ts51NnT_=6an)|$76 z(ElW2@|rkLnF3qZOlGal0{bujWoMmVh;%pIjtNvk2p-w)r*En8C>LRL{NAb5UDaq85jC z(d8%8PCaVi8y3`QQfbC!t|gzrdBdb9#k2cK!j7&Esp?IMcKj6vB=!%OiyR@?+I`}q#vG4Y*~<9n}(gk~C3&(7C)vs|Z)Q{;8OO{uwU z1Ts{Ry;!6W46ar(C(;;`lxUvyw^O~cq2h*@e)}hH2n}fY-crrUz9@Kc601B;ENU$4 z=mY8sXZ~Q{v_%NQFa67A5l*QYAFlGU&fo18Lyi)^Xp-Vd$pAAQ9gU6_y;^dahm8}# zT)Ihn79SUnQ(Ye1{yy3+Q)-n>*m#Gq#n~U^e7e%b*uW7M+bjtio_Ek&(0yy)F zCvtIeuOe;1bek&br^XA~TD+pD{D3Zycpo6Tdj5B89vvd*Tm*Q3R8!3<)VDhPqUCgJ z)c~tPE;sCy5mwoJ9=d;->^30_S4x3+1sqBUy880J1;#H(B+{_oCBz)jXx6O#j-e|@ z@&j5}`xiER7JGYhEO9tQQ8Q{Vr%k2)ZcFW^i;JS%D{b!K9QyrApm4kFFD!h?NYO{d zqh*Gh#mBqb{YS$_>x=%Mhm=W~6Ych0fQLRb60y%!p1CSh?{A#c=Vz3ghm*ID*%xQ_CL1s)b8EYiqaJK8LjsV7Ir1u1&E>dp&-P zmbaS({K)No*4M@8ZhQ6V1B5HHJm&{dsUp(H3&<{%K-Y~AlvRgxlRdpioo1w+xL59r zVWUZgY~4$p_NZ3o!Z#hSwmykF{Zb=ciL_7DL7geEpqT@t(8zu+HrS8Rj7W+lYX#YyQVKbhNdt02Y(Tyv;S8fIpv>Fxs-p2Y=G=j zDKdtD7Zty%PMVw&b)v%u2T>&@2OKCe)Q{?F2dz+ELql!#`YP|oXrnOHBC8i0N7-~_ z?P0W(dC2l+3t3?0OI%)cPb~?Zub-=in-7Am8>>{cT8I4+4LON#us-qeo0ox}EHoXN7|(G<+d zW&l`p0q>=s{si)btysmiN&@Lt!Nv^UUq*?zrW4cho`h8+@6Z~2-y*(e&d&TP88W!Z zPIARPBHi?pdTmhf>X$w2ct|S`_aR72ON&n3Ku4^ysLEK`s?;;1P_8)&l)Dz;G)cMn zLZEhpsX=)H&nVN^;GB5pyW**07;^#n=ss(rDk3@zW8meF4428#e-u;dVee1hs3}^f z#mC21iwQi<({0bnx_Y{|rG9-Il|H(wSESgkR-OoT%{ zo(38Jy%`MiPSw<@+>8oEp?3KvC)a8A_k-TQn=qT4oYGbvyAIeqa@<9M>s|E-HOm&V z^q$xuCre}v-t5TS+wxyFuUdG(d=3Wg?o&xA_xDbIID`xJS4_a4$@8B4aAIOe+@!GH zkvqo^$@Bc7%GO#b>+-7oHJ-GugLb9hS6fLQha=tAvlW&_`s`QbrDb#ZPvbvEo`@)) zi;G$@R31=wZ^$jR z_28?cI3HM4QC6-xYoDFgR7}XA$E?MwZX}P@Gq@l0aDBMHSy=v2tXMwi_bN@u;VnCV zcsZ6)l>q%e<;3o!hAJ=At{kZ%PF{&iGu^)|z|ZQ93zjdCWnXf? zY1IhOr*gR-^VH+zufk00?^sZ95dFc|$>1gVA@|l3O_TMF&)(pgl3?98p$?DfM-=(lz0S;}f+==R9 z`J^B=w##h_a)Ch1wmno4s&SS15)ZINTtcfFWh8(OomCjmDv#VZ5Dr*}V0v$WzeXcH z?P`=rs74a`dN}SL5`d;y5Ia@JqN2E~hs(?$dwA)*W<7ME4v`XGl0`_Pxjg{x6{6my z#^R4B*QwG-@UaSP&szIA`$Orku>Gv#s!v%l&*hCqD<0GkRzge|Fnfq<(e>#_{Tgp4HBUJQ08rKA8DG56B`xu@pz4YRGtu#U? zMPV?@0k7ZCDlTd5V`TQV!XD*SX{>nFd69_a-ijysc z=>2yP^I1ReR?r5}DoS8#w4*4>*eC^fk3A58+qF2g0tGRphdqa8oBBxh>!)xbqN+BN zlAdtyr#}UcU#z7n7oY!4PNvZ+SfO#HXu_9ph7gmk&wa`uSE6;zTrUi|2y~iNg`R|Z w@ +;; URL: https://github.com/ell +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GLPv3 +(setq shaders-packages '(glsl-mode)) + +(defun shaders/init-glsl-mode () + "Initialize GLSL mode" + (use-package glsl-mode + :mode (("\\.fsh\\'" . glsl-mode) + ("\\.vsh\\'" . glsl-mode)))) diff --git a/layers/+lang/shell-scripts/README.org b/layers/+lang/shell-scripts/README.org new file mode 100644 index 0000000..c2bca5e --- /dev/null +++ b/layers/+lang/shell-scripts/README.org @@ -0,0 +1,41 @@ +#+TITLE: Shell Scripts layer + +[[file:img/fish.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#linting][Linting]] + - [[#key-bindings][Key Bindings]] + +* Description + +This simple layer adds support for shell scripting. + +Supported scripting files: +- =.sh= +- =.fish=: [[https://github.com/fish-shell/fish-shell][fish shell]] + +*Note:* For Windows scripting see the layer =windows-scripts= + +** Features +- Auto-completion using [[https://github.com/Alexander-Miller/company-shell][company-shell]] +- =Sh= scripts linting using [[https://www.shellcheck.net/][shellcheck]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =shell-scripts= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Linting +In order to enable =sh= scripts linting, install [[https://www.shellcheck.net/][shellcheck]]. + +* Key Bindings + +| Key Binding | Description | +|-------------+-----------------------------------------------------------| +| ~SPC i !~ | insert shebang in a script file | +| ~SPC m \~ | insert end-of-line backslashes to the lines in the region | + + diff --git a/layers/+lang/shell-scripts/config.el b/layers/+lang/shell-scripts/config.el new file mode 100644 index 0000000..e27a985 --- /dev/null +++ b/layers/+lang/shell-scripts/config.el @@ -0,0 +1,16 @@ +;;; config.el --- Shell Scripts Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables +(spacemacs|defvar-company-backends sh-mode) +(spacemacs|defvar-company-backends fish-mode) + +(spacemacs|define-jump-handlers sh-mode) diff --git a/layers/+lang/shell-scripts/funcs.el b/layers/+lang/shell-scripts/funcs.el new file mode 100644 index 0000000..3ee1f44 --- /dev/null +++ b/layers/+lang/shell-scripts/funcs.el @@ -0,0 +1,20 @@ +;;; funcs.el --- Shell Scripts Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; shebang + +(defun spacemacs/insert-shebang () + "Insert shebang line at the top of the file." + (interactive) + (require 'insert-shebang) + (insert-shebang-get-extension-and-insert + (file-name-nondirectory (buffer-file-name)))) diff --git a/layers/+lang/shell-scripts/img/fish.png b/layers/+lang/shell-scripts/img/fish.png new file mode 100644 index 0000000000000000000000000000000000000000..deed7387845a08f7428dd0fddfc396eff7c4fb4d GIT binary patch literal 26877 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq shell-scripts-packages + '( + company + (company-shell :toggle (configuration-layer/package-usedp 'company)) + fish-mode + flycheck + ggtags + helm-gtags + insert-shebang + (sh-script :location built-in) + )) + +(defun shell-scripts/post-init-company () + (spacemacs|add-company-hook sh-mode) + (spacemacs|add-company-hook fish-mode)) + +(defun shell-scripts/init-company-shell () + (use-package company-shell + :defer t + :init + (progn + (push 'company-shell company-backends-sh-mode) + (push '(company-shell company-fish-shell) company-backends-fish-mode)))) + +(defun shell-scripts/post-init-flycheck () + (spacemacs/add-flycheck-hook 'sh-mode)) + +(defun shell-scripts/init-fish-mode () + (use-package fish-mode + :defer t)) + +(defun shell-scripts/init-sh-script () + (use-package sh-script + :defer t + :init + (progn + (spacemacs/set-leader-keys-for-major-mode 'sh-mode + "\\" 'sh-backslash-region) + + ;; Use sh-mode when opening `.zsh' files, and when opening Prezto runcoms. + (dolist (pattern '("\\.zsh\\'" + "zlogin\\'" + "zlogout\\'" + "zpreztorc\\'" + "zprofile\\'" + "zshenv\\'" + "zshrc\\'")) + (add-to-list 'auto-mode-alist (cons pattern 'sh-mode))) + + (defun spacemacs//setup-shell () + (when (and buffer-file-name + (string-match-p "\\.zsh\\'" buffer-file-name)) + (sh-set-shell "zsh"))) + (add-hook 'sh-mode-hook 'spacemacs//setup-shell)))) + +(defun shell-scripts/post-init-ggtags () + (add-hook 'sh-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun shell-scripts/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'sh-mode)) + +(defun shell-scripts/init-insert-shebang () + (use-package insert-shebang + :defer t + :init + (progn + (spacemacs/set-leader-keys "i!" 'spacemacs/insert-shebang) + ;; we don't want to insert shebang lines automatically + (remove-hook 'find-file-hook 'insert-shebang)))) + diff --git a/layers/+lang/sml/README.org b/layers/+lang/sml/README.org new file mode 100644 index 0000000..4a5cee4 --- /dev/null +++ b/layers/+lang/sml/README.org @@ -0,0 +1,41 @@ +#+TITLE: SML layer + +[[file:img/sml.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + - [[#form-completion][Form Completion]] + - [[#repl][REPL]] + +* Description + +Adds support for the [[http://www.smlnj.org][SML]] programming language. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =sml= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key Bindings + +** Form Completion + +| Key Binding | Description | +|-------------+-------------------------------------------------------------------------------------------| +| ~M-SPC~ | Inserts a space and completes the form before the cursor. | +| ~\vert~ | Inserts a pipe and adds a double arrow or copies the function name. Generally just works. | + +** REPL + +| Key Binding | Description | +|-------------+-------------------------------------------------------------------| +| ~SPC m s b~ | Send buffer to REPL | +| ~SPC m s B~ | Send buffer to REPL and switch to REPL buffer in =insert state= | +| ~SPC m s f~ | Send function to REPL | +| ~SPC m s F~ | Send function to REPL and switch to REPL buffer in =insert state= | +| ~SPC m s i~ | Run the sml REPL or switch to it if the REPL is already running | +| ~SPC m s r~ | Send region to REPL | +| ~SPC m s R~ | Send region to REPL and switch to REPL buffer in =insert state= | +| ~SPC m s s~ | Run the sml REPL or switch to it if the REPL is already running | diff --git a/layers/+lang/sml/img/sml.png b/layers/+lang/sml/img/sml.png new file mode 100644 index 0000000000000000000000000000000000000000..79d48c2419ca3ba66b786605515f1f4e4b74c1ae GIT binary patch literal 9033 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 BH4p#* literal 0 HcmV?d00001 diff --git a/layers/+lang/sml/packages.el b/layers/+lang/sml/packages.el new file mode 100644 index 0000000..92785cd --- /dev/null +++ b/layers/+lang/sml/packages.el @@ -0,0 +1,70 @@ +;;; packages.el --- sml Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Keith Simmons +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq sml-packages + '( + sml-mode + ob-sml + smartparens + )) + +(defun sml/init-sml-mode () + (use-package sml-mode + :mode ("\\.\\(sml\\|sig\\)\\'" . sml-mode) + :defer t + :commands run-sml + :init (spacemacs/register-repl 'sml-mode 'run-sml "sml") + :config + (progn + (defun spacemacs/sml-prog-proc-send-buffer-and-focus () + "Send buffer to REPL and switch to it in `insert state'." + (interactive) + (sml-prog-proc-send-buffer t) + (evil-insert-state)) + + (defun spacemacs/sml-prog-proc-send-region-and-focus (start end) + "Send region to REPL and switch to it in `insert state'." + (interactive "r") + (sml-prog-proc-send-region start end t) + (evil-insert-state)) + + (defun spacemacs/sml-send-function-and-focus () + "Send function at point to REPL and switch to it in `insert state'." + (interactive) + (sml-send-function t) + (evil-insert-state)) + + (spacemacs/set-leader-keys-for-major-mode 'sml-mode + ;; REPL + "'" 'run-sml + "sb" 'sml-prog-proc-send-buffer + "sB" 'spacemacs/sml-prog-proc-send-buffer-and-focus + "sf" 'sml-send-function + "sF" 'spacemacs/sml-send-function-and-focus + "si" 'run-sml + "sr" 'sml-prog-proc-send-region + "sR" 'spacemacs/sml-prog-proc-send-region-and-focus + "ss" 'run-sml) + (define-key sml-mode-map (kbd "RET") 'reindent-then-newline-and-indent) + (define-key sml-mode-map (kbd "M-SPC") 'sml-electric-space) + (define-key sml-mode-map (kbd "|") 'sml-electric-pipe)))) + +(defun sml/post-init-smartparens () + (with-eval-after-load 'smartparens + ;; don't auto-close apostrophes (type 'a = foo) and backticks (`Foo) + (sp-local-pair 'sml-mode "'" nil :actions nil) + (sp-local-pair 'sml-mode "`" nil :actions nil))) + +(defun sml/init-ob-sml () + (use-package ob-sml + :defer t + :init + (org-babel-do-load-languages 'org-babel-do-load-languages '(sml . t)))) diff --git a/layers/+lang/sql/README.org b/layers/+lang/sql/README.org new file mode 100644 index 0000000..fba6062 --- /dev/null +++ b/layers/+lang/sql/README.org @@ -0,0 +1,60 @@ +#+TITLE: SQL layer + +[[file:img/sql.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + - [[#highlighting][Highlighting]] + - [[#inferior-process-interactions-sqli][Inferior Process Interactions (SQLi)]] + - [[#send-sql-queries-to-sqli][Send SQL queries to SQLi:]] + - [[#sqli-buffer][SQLi buffer]] + +* Description + +This layer adds key bindings and configuration for =sql-mode=, which manages +interactive SQL buffers and highlights a wide range of SQL dialects. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =sql= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key bindings + +** Highlighting + +| Key Binding | Description | +|-------------+-----------------------------------| +| ~SPC m h k~ | select a SQL dialect to highlight | + +** Inferior Process Interactions (SQLi) + +| Key Binding | Description | +|-------------+-----------------------------| +| ~SPC m b b~ | show the SQLi buffer name | +| ~SPC m b s~ | set the SQLi buffer | +| ~SPC m l a~ | List all objects | +| ~SPC m l t~ | list all objects in a table | + +*** Send SQL queries to SQLi: + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------------------------| +| ~SPC m s b~ | Send the whole buffer to the SQLi buffer | +| ~SPC m s B~ | Send the whole buffer to the SQLi buffer and switch to it in =insert state= | +| ~SPC m s i~ | Start the SQLi process | +| ~SPC m s f~ | Send the paragraph around point to the SQLi buffer | +| ~SPC m s F~ | Send the paragraph around point to the SQLi buffer and switch to it in =insert state= | +| ~SPC m s q~ | Prompt for a string to send to the SQLi buffer | +| ~SPC m s Q~ | Prompt for a string to send to the SQLi buffer and switch to it in =insert state= | +| ~SPC m s r~ | Send the selected region to the SQLi buffer | +| ~SPC m s R~ | Send the selected region to the SQLi buffer and switch to it in =insert state= | + +** SQLi buffer + +| Key Binding | Description | +|-------------+--------------------------------------------------------------| +| ~SPC m b r~ | rename buffer (follow up in the SQL buffer with ~SPC m b s~) | +| ~SPC m b S~ | save the current connection | diff --git a/layers/+lang/sql/img/sql.png b/layers/+lang/sql/img/sql.png new file mode 100644 index 0000000000000000000000000000000000000000..f5db89ead925d049329b7f7360200af70498cafd GIT binary patch literal 31726 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 UR6ku~$^ZZW07*qoM6N<$f_U0N?*IS* literal 0 HcmV?d00001 diff --git a/layers/+lang/sql/packages.el b/layers/+lang/sql/packages.el new file mode 100644 index 0000000..45c4e8f --- /dev/null +++ b/layers/+lang/sql/packages.el @@ -0,0 +1,119 @@ +;;; packages.el --- sql Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Brian Hicks +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq sql-packages '(sql sql-indent)) + +(defun sql/init-sql () + (use-package sql + :defer t + :init (spacemacs/register-repl 'sql 'spacemacs/sql-start "sql") + :config + (progn + (setq spacemacs-sql-highlightable sql-product-alist + spacemacs-sql-startable (remove-if-not + (lambda (product) (sql-get-product-feature (car product) :sqli-program)) + sql-product-alist) + + ;; should not set this to anything else than nil + ;; the focus of SQLi is handled by spacemacs conventions + sql-pop-to-buffer-after-send-region nil) + + (defun spacemacs//sql-source (products) + "return a source for helm selection" + `((name . "SQL Products") + (candidates . ,(mapcar (lambda (product) + (cons (sql-get-product-feature (car product) :name) + (car product))) + products)) + (action . (lambda (candidate) (helm-marked-candidates))))) + + (defun spacemacs/sql-highlight () + "set SQL dialect-specific highlighting" + (interactive) + (let ((product (car (helm + :sources (list (spacemacs//sql-source spacemacs-sql-highlightable)))))) + (sql-set-product product))) + + (defun spacemacs/sql-start () + "set SQL dialect-specific highlighting and start inferior SQLi process" + (interactive) + (let ((product (car (helm + :sources (list (spacemacs//sql-source spacemacs-sql-startable)))))) + (sql-set-product product) + (sql-product-interactive product))) + + (defun spacemacs/sql-send-string-and-focus () + "Send a string to SQLi and switch to SQLi in `insert state'." + (interactive) + (let ((sql-pop-to-buffer-after-send-region t)) + (call-interactively 'sql-send-string) + (evil-insert-state))) + + (defun spacemacs/sql-send-buffer-and-focus () + "Send the buffer to SQLi and switch to SQLi in `insert state'." + (interactive) + (let ((sql-pop-to-buffer-after-send-region t)) + (sql-send-buffer) + (evil-insert-state))) + + (defun spacemacs/sql-send-paragraph-and-focus () + "Send the paragraph to SQLi and switch to SQLi in `insert state'." + (interactive) + (let ((sql-pop-to-buffer-after-send-region t)) + (sql-send-paragraph) + (evil-insert-state))) + + (defun spacemacs/sql-send-region-and-focus (start end) + "Send region to SQLi and switch to SQLi in `insert state'." + (interactive "r") + (let ((sql-pop-to-buffer-after-send-region t)) + (sql-send-region start end) + (evil-insert-state))) + + (spacemacs/set-leader-keys-for-major-mode 'sql-mode + "'" 'spacemacs/sql-start + + ;; sqli buffer + "bb" 'sql-show-sqli-buffer + "bs" 'sql-set-sqli-buffer + + ;; dialects + "hk" 'spacemacs/sql-highlight + + ;; interactivity + "sb" 'sql-send-buffer + "sB" 'spacemacs/sql-send-buffer-and-focus + "si" 'spacemacs/sql-start + ;; paragraph gets "f" here because they can be assimilated to functions. + ;; If you separate your commands in a SQL file, this key will send the + ;; command around point, which is what you probably want. + "sf" 'sql-send-paragraph + "sF" 'spacemacs/sql-send-paragraph-and-focus + "sq" 'sql-send-string + "sQ" 'spacemacs/sql-send-string-and-focus + "sr" 'sql-send-region + "sR" 'spacemacs/sql-send-region-and-focus + + ;; listing + "la" 'sql-list-all + "lt" 'sql-list-table) + + (spacemacs/set-leader-keys-for-major-mode 'sql-interactive-mode + ;; sqli buffer + "br" 'sql-rename-buffer + "bS" 'sql-save-connection) + + (add-hook 'sql-interactive-mode-hook + (lambda () (toggle-truncate-lines t)))))) + +(defun sql/init-sql-indent () + (use-package sql-indent + :defer t)) diff --git a/layers/+lang/swift/README.org b/layers/+lang/swift/README.org new file mode 100644 index 0000000..13e189e --- /dev/null +++ b/layers/+lang/swift/README.org @@ -0,0 +1,62 @@ +#+TITLE: Swift layer + +[[file:img/swift.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#usage-information][Usage information]] + - [[#key-bindings][Key bindings]] + - [[#swift-mode][swift-mode]] + - [[#swift-repl-mode][swift-repl-mode]] + +* Description +This layer adds support for Apple's Swift programming language, used as a +general purpose scripting language. + +It relies on the [[https://github.com/chrisbarrett/swift-mode][swift-mode]] major-mode* for Emacs 24.4 or later, to provide the +following features: + +- Syntax highlighting +- Indentation +- Code navigation using ~imenu~ (built-in) +- Automatic syntax checking with ~flycheck~ (available with the + ~syntax-checking~ layer) + +* Install +First check that you are able to run this from the command line: + +On OS X: +#+BEGIN_SRC sh + xcrun swift +#+END_SRC + +Then to use this configuration layer, add it to your =~/.spacemacs=. You will +need to add =swift= to the existing =dotspacemacs-configuration-layers= list in +this file. + +* Usage information +Unless configured by the user, the REPL will be invoked using the command ~xcrun +swift~. +You can launch the REPL using the keybinding ~SPC m s s~ (or ~C-c C-z~). +The universal prefix ~SPC u~ (~C-u~) may be used to modify command invocation. + +* Key bindings +** swift-mode + +| Key bindings | Description | +|--------------+------------------------| +| ~SPC m s s~ | swift-mode-run-repl | +| ~SPC m s b~ | swift-mode-send-buffer | +| ~SPC m s r~ | swift-mode-send-region | + +Notes: +1. ~swift-mode-run-repl~ will run or switch to an existing REPL. +2. To edit the command invocation, prefix with ~SPC u~ (or ~C-u~). +3. Emacs key bindings in use are the those set by the package. + +** swift-repl-mode + +| Key bindings | Description | +|--------------+-----------------------------| +| ~SPC m s s~ | swift-repl-mode-switch-back | diff --git a/layers/+lang/swift/img/swift.png b/layers/+lang/swift/img/swift.png new file mode 100644 index 0000000000000000000000000000000000000000..cd9e5f926be6248e2f1133dffb650e308cfb50fb GIT binary patch literal 52675 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq swift-packages + '( + flycheck + swift-mode + )) + +(defun swift/post-init-flycheck () + (spacemacs|use-package-add-hook flycheck + :post-config (add-to-list 'flycheck-checkers 'swift))) + +(defun swift/init-swift-mode () + (use-package swift-mode + :mode ("\\.swift\\'" . swift-mode) + :defer t + :init + (progn + (spacemacs|advise-commands "store-initial-buffer-name" + (swift-mode-run-repl) around + "Store current buffer bane in bufffer local variable, +before activiting or switching to REPL." + (let ((initial-buffer (current-buffer))) + ad-do-it + (with-current-buffer swift-repl-buffer + (setq swift-repl-mode-previous-buffer initial-buffer)))) + + (defun spacemacs/swift-repl-mode-hook () + "Hook to run when starting an interactive swift mode repl" + (make-variable-buffer-local 'swift-repl-mode-previous-buffer)) + (add-hook 'swift-repl-mode-hook 'spacemacs/swift-repl-mode-hook) + + (defun spacemacs/swift-repl-mode-switch-back () + "Switch back to from REPL to editor." + (interactive) + (if swift-repl-mode-previous-buffer + (switch-to-buffer-other-window swift-repl-mode-previous-buffer) + (message "No previous buffer")))) + :config + (progn + (spacemacs/set-leader-keys-for-major-mode 'swift-mode + "sS" 'swift-mode-run-repl ; run or switch to an existing swift repl + "ss" 'swift-mode-run-repl + "sb" 'swift-mode-send-buffer + "sr" 'swift-mode-send-region) + + (with-eval-after-load 'swift-repl-mode-map + ;; Switch back to editor from REPL + (spacemacs/set-leader-keys-for-major-mode 'swift-repl-mode + "ss" 'spacemacs/swift-repl-mode-switch-back) + (define-key swift-repl-mode-map + (kbd "C-c C-z") 'spacemacs/swift-repl-mode-switch-back))))) diff --git a/layers/+lang/typescript/README.org b/layers/+lang/typescript/README.org new file mode 100644 index 0000000..be12e75 --- /dev/null +++ b/layers/+lang/typescript/README.org @@ -0,0 +1,107 @@ +#+TITLE: TypeScript layer + +[[file:img/TypeScript.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#pre-requisites][Pre-requisites]] + - [[#layer][Layer]] + - [[#notes][Notes]] + - [[#key-bindings][Key bindings]] + - [[#typescript-major-mode][Typescript Major Mode]] + - [[#reference-major-mode][Reference Major Mode]] + +* Description + +This layer adds support for TypeScript and TSX editing. + +This layer provides: +- Eldoc-mode +- Documentation at point +- Auto complete +- Flycheck with linter +- Jump to definition, Jump to type definition +- Find occurrences (Imenu-mode) +- Rename symbol +- tsx mode +- formatting +- TypeScript playground integration + +* Install +** Pre-requisites +You will need =node.js v0.12.0= or greater + +If you want linting run: =npm install -g typescript= =npm install -g tslint= + +If you want to use typescript-formatter for formatting run: =npm install -g typescript-formatter= + +For best results, make sure that the =auto-completion= (company) and =html= layers are enabled. + +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =typescript= to the existing =dotspacemacs-configuration-layers= list in this +file. + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers '(typescript)) +#+END_SRC + +If you need formatting on save: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers '( + (typescript :variables + typescript-fmt-on-save t))) +#+END_SRC + +You can choose formatting tool: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers '( + (typescript :variables + typescript-fmt-tool 'typescript-formatter))) +#+END_SRC + +Default is 'tide . + +** Notes + +This layer uses: +- [[https://github.com/ananthakumaran/tide][tide]] +- [[https://github.com/Simplify/flycheck-typescript-tslint][flycheck-typescript-tslint]] +- [[https://github.com/vvakame/typescript-formatter][typescript-formatter]] - optional. + +*The tools use configuration files. You can learn more in their documentation.* + +Make sure to add [[https://github.com/Microsoft/TypeScript/wiki/tsconfig.json][tsconfig.json]] in the project root folder. + +tsserver mangles output sometimes [[https://github.com/Microsoft/TypeScript/issues/2758][issue - #2758]], which will result in json parse error. Try node version 0.12.x if you get this error. + +Send to playground requires browser. + +Currently tsserver doesn't pickup tsconfig.json file changes. You might need to restart server after editing it. + +* Key bindings + +** Typescript Major Mode + +| Key Binding | Description | +|-------------+--------------------------------------------------------------| +| ~SPC m =~ | reformat the buffer | +| ~SPC m g b~ | jump back | +| ~SPC m g g~ | jump to entity's definition | +| ~SPC m g t~ | jump to entity's type definition | +| ~SPC m g u~ | references | +| ~SPC m h h~ | documentation at point | +| ~SPC m r r~ | rename symbol | +| ~SPC m s p~ | send selected region or current buffer to the web playground | +| ~SPC m S r~ | restart server | + +** Reference Major Mode + +| Key Binding | Description | +|-------------+-------------------------| +| ~C-j~ | find previous reference | +| ~C-k~ | find next reference | +| ~C-l~ | goto reference | diff --git a/layers/+lang/typescript/config.el b/layers/+lang/typescript/config.el new file mode 100644 index 0000000..06af5b7 --- /dev/null +++ b/layers/+lang/typescript/config.el @@ -0,0 +1,23 @@ +;;; config.el --- Typescript Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|defvar-company-backends typescript-mode) + +(defvar typescript-fmt-on-save nil + "Run formatter on buffer save.") + +(defvar typescript-fmt-tool 'tide + "The name of the tool to be used +for TypeScript source code formatting. +Currently avaliable 'tide (default) +and 'typescript-formatter .") + +(spacemacs|define-jump-handlers typescript-mode) diff --git a/layers/+lang/typescript/funcs.el b/layers/+lang/typescript/funcs.el new file mode 100644 index 0000000..0348884 --- /dev/null +++ b/layers/+lang/typescript/funcs.el @@ -0,0 +1,66 @@ +;;; funcs.el --- TypeScript Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun typescript/tsfmt-format-buffer () + "Format buffer with tsfmt." + (interactive) + (if (executable-find "tsfmt") + (let* ((tmpfile (make-temp-file "~fmt-tmp" nil ".ts")) + (coding-system-for-read 'utf-8) + (coding-system-for-write 'utf-8) + (outputbuf (get-buffer-create "*~fmt-tmp.ts*"))) + (unwind-protect + (progn + (with-current-buffer outputbuf (erase-buffer)) + (write-region nil nil tmpfile) + (if (zerop (apply 'call-process "tsfmt" nil outputbuf nil + (list (format + "--baseDir='%s' --" + default-directory) + tmpfile))) + (let ((p (point))) + (save-excursion + (with-current-buffer (current-buffer) + (erase-buffer) + (insert-buffer-substring outputbuf))) + (goto-char p) + (message "formatted.") + (kill-buffer outputbuf)) + (progn + (message "Formatting failed!") + (display-buffer outputbuf))) + (progn + (delete-file tmpfile))))) + (error "tsfmt not found. Run \"npm install -g typescript-formatter\""))) + +(defun typescript/format () + "Call formatting tool specified in `typescript-fmt-tool'." + (interactive) + (cond + ((eq typescript-fmt-tool 'typescript-formatter) + (call-interactively 'typescript/tsfmt-format-buffer)) + ((eq typescript-fmt-tool 'tide) + (call-interactively 'tide-format)) + (t (error (concat "%s isn't valid typescript-fmt-tool value." + " It should be 'tide or 'typescript-formatter." + (symbol-name typescript-fmt-tool)))))) + +(defun typescript/fmt-before-save-hook () + (add-hook 'before-save-hook 'typescript/format t t)) + +(defun typescript/open-region-in-playground (start end) + "Open selected region in http://www.typescriptlang.org/Playground + If nothing is selected - open the whole current buffer." + (interactive (if (use-region-p) + (list (region-beginning) (region-end)) + (list (point-min) (point-max)))) + (browse-url (concat "http://www.typescriptlang.org/Playground#src=" + (url-hexify-string (buffer-substring-no-properties start end))))) diff --git a/layers/+lang/typescript/img/TypeScript.png b/layers/+lang/typescript/img/TypeScript.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8bdb534a6f8f5d298db7ccb425cda0a3da6c15 GIT binary patch literal 3617 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/typescript/packages.el b/layers/+lang/typescript/packages.el new file mode 100644 index 0000000..313cb36 --- /dev/null +++ b/layers/+lang/typescript/packages.el @@ -0,0 +1,87 @@ +;;; packages.el --- typescript Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Chris Bowdon +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq typescript-packages + '( + company + flycheck + tide + typescript-mode + web-mode + )) + +(defun typescript/post-init-company () + (spacemacs|add-company-hook typescript-mode)) + +(defun typescript/post-init-flycheck () + (spacemacs/add-flycheck-hook 'typescript-mode)) + +(defun typescript/init-tide () + (use-package tide + :defer t + :commands (typescript/jump-to-type-def) + :init + (progn + (evilified-state-evilify tide-references-mode tide-references-mode-map + (kbd "C-k") 'tide-find-previous-reference + (kbd "C-j") 'tide-find-next-reference + (kbd "C-l") 'tide-goto-reference) + + (add-hook 'typescript-mode-hook 'tide-setup) + (add-hook 'typescript-mode-hook 'eldoc-mode) + + (add-to-list 'spacemacs-jump-handlers-typescript-mode 'tide-jump-to-definition) + + (push 'company-tide company-backends-typescript-mode)) + :config + (progn + (spacemacs/declare-prefix-for-mode 'typescript-mode "mg" "goto") + (spacemacs/declare-prefix-for-mode 'typescript-mode "mh" "help") + (spacemacs/declare-prefix-for-mode 'typescript-mode "mn" "name") + (spacemacs/declare-prefix-for-mode 'typescript-mode "mr" "rename") + (spacemacs/declare-prefix-for-mode 'typescript-mode "mS" "server") + (spacemacs/declare-prefix-for-mode 'typescript-mode "ms" "send") + + (defun typescript/jump-to-type-def() + (interactive) + (tide-jump-to-definition t)) + + (spacemacs/set-leader-keys-for-major-mode 'typescript-mode + "gb" 'tide-jump-back + "gt" 'typescript/jump-to-type-def + "gu" 'tide-references + "hh" 'tide-documentation-at-point + "rr" 'tide-rename-symbol + "Sr" 'tide-restart-server)))) + +(defun typescript/post-init-web-mode () + (add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode)) + ;; FIXME -- this is not good! + (add-hook 'web-mode-hook + (lambda () + (when (and (buffer-file-name) + (string-equal "tsx" (file-name-extension (buffer-file-name)))) + (tide-setup) + (flycheck-mode +1) + (eldoc-mode +1) + (when (configuration-layer/package-usedp 'company) + (company-mode-on)))))) + +(defun typescript/init-typescript-mode () + (use-package typescript-mode + :defer t + :config + (progn + (when typescript-fmt-on-save + (add-hook 'typescript-mode-hook 'typescript/fmt-before-save-hook)) + (spacemacs/set-leader-keys-for-major-mode 'typescript-mode + "=" 'typescript/format + "sp" 'typescript/open-region-in-playground)))) diff --git a/layers/+lang/vimscript/README.org b/layers/+lang/vimscript/README.org new file mode 100644 index 0000000..4fb4019 --- /dev/null +++ b/layers/+lang/vimscript/README.org @@ -0,0 +1,15 @@ +#+TITLE: Vimscript language layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + +* Description + +This layer adds syntax highlighting support for vim filetypes, in addition to +the pentadactyl firefox extension. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =vimscript= to the existing =dotspacemacs-configuration-layers= list in this +file. diff --git a/layers/+lang/vimscript/config.el b/layers/+lang/vimscript/config.el new file mode 100644 index 0000000..08a0956 --- /dev/null +++ b/layers/+lang/vimscript/config.el @@ -0,0 +1,14 @@ +;;; packages.el --- Vimscript Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|define-jump-handlers vimrc-mode) diff --git a/layers/+lang/vimscript/packages.el b/layers/+lang/vimscript/packages.el new file mode 100644 index 0000000..2a344bb --- /dev/null +++ b/layers/+lang/vimscript/packages.el @@ -0,0 +1,48 @@ +;;; packages.el --- vimscript Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq vimscript-packages + '( + vimrc-mode + ggtags + helm-gtags + dactyl-mode + )) + +(defun vimscript/init-vimrc-mode () + "Initialize vimrc package" + (use-package vimrc-mode + :mode "\\.vim[rc]?\\'" + :mode "_vimrc\\'" + :defer t + :init + (progn + (defun spacemacs//vimrc-mode-hook () + "Hooked function for `vimrc-mode-hook'." + (highlight-numbers-mode -1) + (rainbow-delimiters-mode-disable)) + (add-hook 'vimrc-mode-hook 'spacemacs//vimrc-mode-hook)))) + +(defun vimscript/init-dactyl-mode () + (use-package dactyl-mode + :mode "pentadactylrc\\'" + :mode "vimperatorrc\\'" + :mode "_pentadactylrc\\'" + :mode "_vimperatorrc\\'" + :mode "\\.penta\\'" + :mode "\\.vimp\\'" + :defer t)) + +(defun vimscript/post-init-ggtags () + (add-hook 'vimrc-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun vimscript/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'vimrc-mode)) diff --git a/layers/+lang/windows-scripts/README.org b/layers/+lang/windows-scripts/README.org new file mode 100644 index 0000000..67f9e2c --- /dev/null +++ b/layers/+lang/windows-scripts/README.org @@ -0,0 +1,39 @@ +#+TITLE: Windows Scripting layer + +[[file:img/ps.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + - [[#powershell][Powershell]] + - [[#batch-dosel][Batch (dos.el)]] + +* Description +This simple layer adds support for the Powershell scripting language as well +as support for batch files. + +Supported windows scription extensions: +- =.ps1=: [[https://github.com/jschaf/powershell.el][powershell]] +- =.bat=: [[http://www.emacswiki.org/emacs/dos.el][dos.el]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =windows-scripts= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key Bindings +** Powershell +No useful bindings. + +** Batch (dos.el) + +| Key Binding | Description | +|-------------+--------------------------------------| +| ~SPC m D~ | ask for a command and display help | +| ~SPC m e b~ | evaluate buffer | +| ~SPC m e B~ | evaluate buffer with args | +| ~SPC m s~ | insert separator =&= | +| ~SPC m t~ | mini snippet to start a batch script | +| ~SPC m T~ | big snippet to start a batch script | +| ~SPC m z~ | toggle outline | diff --git a/layers/+lang/windows-scripts/config.el b/layers/+lang/windows-scripts/config.el new file mode 100644 index 0000000..c73132f --- /dev/null +++ b/layers/+lang/windows-scripts/config.el @@ -0,0 +1,14 @@ +;;; packages.el --- Windows Scripts Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|define-jump-handlers dos-mode) diff --git a/layers/+lang/windows-scripts/img/ps.png b/layers/+lang/windows-scripts/img/ps.png new file mode 100644 index 0000000000000000000000000000000000000000..7fcf3db94a7199dc3fdd67026b03ee94092d86be GIT binary patch literal 88597 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

r#9R|PgJi~}q^l>?6+3muMK8snME_tZBks>45p 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[ \t]+%?\\([A-Za-z0-9-_\\:.]+\\)%?" (2 font-lock-constant-face t)) + '("^[ \t]*\\(@?rem\\>\\|::\\).*" (0 font-lock-comment-face t)) + '("^:[^:].*" . 'dos-label-face) + '("\\<\\(defined\\|set\\)\\>[ \t]*\\(\\w+\\)" (2 font-lock-variable-name-face)) + '("%\\(\\w+\\)%?" (1 font-lock-variable-name-face)) + '("!\\(\\w+\\)!?" (1 font-lock-variable-name-face)) ; delayed-expansion !variable! + '("[ =][-/]+\\(\\w+\\)" (1 font-lock-type-face append)) + (cons (regexp-opt COMMANDS 'words) font-lock-builtin-face) + (cons (regexp-opt CONTROLFLOW 'words) font-lock-keyword-face) + (cons (regexp-opt LINUX 'words) font-lock-warning-face))))) +(defvar dos-menu + '("Dos" + ["Run" dos-run ] ; :help "Run script" + ["Run with Args" dos-run-args ] ; :help "Run script with args" + "--" + ["Imenu" imenu ] ; :help "Navigate with imenu" + "--" + ["Template" dos-template ] ; :help "Insert template" + ["Mini Template" dos-template-mini] ; :help "Insert minimal template" + "--" + ["Help (cmd)" dos-help-cmd ] ; :help "Show help page for Dos command" + ["Help (mode)" dos-help-mode ] ; :help "Show help page for Emacs dos-mode" + ["Version" dos-mode-version ])) ; :help "Show Dos Mode version" +(defvar dos-mode-abbrev-table nil)(define-abbrev-table 'dos-mode-abbrev-table ()) +(defvar dos-mode-map + (let ((map (make-sparse-keymap))) + (easy-menu-define nil map nil dos-menu) + (define-key map [f11] 'dos-outline ) + (define-key map [S-f12] 'dos-template-mini) + (define-key map [f12] 'dos-template ) + (define-key map [?\C-c ?\C-.] 'dos-mode-version ) + (define-key map [?\C-c ?\C-/] 'dos-help-cmd ) + (define-key map [?\C-c ?\C- ] 'dos-sep ) + (define-key map [?\C-c ?\C-a] 'dos-run-args ) + (define-key map [?\C-c ?\C-c] 'dos-run ) + (define-key map [?\C-c ?\C-m] 'dos-help-mode ) + (define-key map [?\C-c ?\C-v] 'dos-run ) + map)) +(defvar dos-mode-syntax-table + (let ((table (make-syntax-table))) + (modify-syntax-entry ?~ "w" table) + (modify-syntax-entry ?% "." table) + (modify-syntax-entry ?- "w" table) + (modify-syntax-entry ?_ "w" table) + (modify-syntax-entry ?{ "w" table) + (modify-syntax-entry ?} "w" table) + (modify-syntax-entry ?\\ "." table) + table)) + +;; 4 User functions + +(defun dos-help-cmd (cmd) "Show help for Dos command." (interactive "sHelp: ")(shell-command (concat "help " cmd))) +(defun dos-help-mode () "Show help page for `dos-mode'." (interactive) + (describe-function 'dos-mode)(switch-to-buffer "*Help*")(delete-other-windows)(message nil)) +(defun dos-mode-version () "Show Dos Mode version number." (interactive) + (message (concat "Dos Mode version " dos-mode-version))) +(defun dos-outline () "Navigate within Dos script using outline-mode. + +If you haven't already configured an `outline-mode-hook', here is an example +that makes it easy to return to `dos-mode': + +\(defun my-outline-hook () + (local-set-key [mouse-1] 'outline-mouse-select) + (local-set-key [return] 'dos-mode ) + (defun outline-mouse-select () \"Select position and return to `dos-mode'.\" + (interactive)(dos-mode)(beginning-of-line))) +\(add-hook 'outline-mode-hook 'my-outline-hook) +" + (interactive)(let ((outreg outline-regexp))(outline-mode)(setq outline-regexp "^:[^:]"))(outline-mode)(hide-body)) +(defun dos-run () "Run Dos script." (interactive)(save-buffer)(shell-command buffer-file-name)) +(defun dos-run-args (args) "Run Dos script with ARGS." (interactive "sArgs: ") + (shell-command (concat buffer-file-name " " args))) +(defun dos-sep () "Insert & separator." (interactive)(insert " & ")) +(defun dos-template () "Insert Dos template." (interactive) + (goto-char (point-min))(insert " +@echo off +setlocal +if [%1]==[] goto HELP +if [%1]==[--help] goto HELP +REM #################################################################################################################### +REM # +REM Script: # +REM # +REM Purpose: # +REM # +REM Args: # +REM # +REM Notes: # +REM # +REM Warning: # +REM # +REM Requires: # +REM # +REM Returns: # +REM # +REM #################################################################################################################### +\nrem Pop args until file=%1 +set par=default +:STARTLOOP +if [%2]==[] goto ENDLOOP +if %1==-flag set par=%2 & shift & shift +goto STARTLOOP +:ENDLOOP\n\n\n +:HELP +echo Usage: +echo.\n +:EOF +")(goto-char (point-min))(delete-char 1)(search-forward ": ")(overwrite-mode t)) +(defun dos-template-mini () "Insert minimal Dos template." (interactive) + (goto-char (point-min))(insert "@echo off\nsetlocal\n\n")) + +;; 5 Main function + +;;;###autoload +(defun dos-mode () "Major mode for editing Dos scripts.\n +The `dos-help-mode' command shows this page.\n +Start a new script from `dos-template' or `dos-template-mini'. Navigate between +sections using `dos-outline', `imenu', or `outline-minor-mode'. Use `dos-sep' to +save keystrokes. Read help for Dos command with `dos-help-cmd'. Run script using +`dos-run' and `dos-run-args'. + +\\{dos-mode-map}" + (interactive)(kill-all-local-variables)(setq major-mode 'dos-mode)(setq mode-name "Dos") + (set (make-local-variable 'comment-start) "rem") + (set (make-local-variable 'imenu-generic-expression) '((nil "^:[^:].*" 0))) + (set (make-local-variable 'font-lock-defaults) '(dos-font-lock-keywords nil t)) ; case-insensitive keywords + (set (make-local-variable 'outline-regexp) ":[^:]") + (set-syntax-table dos-mode-syntax-table) + (setq local-abbrev-table dos-mode-abbrev-table) + (use-local-map dos-mode-map) + (run-mode-hooks 'dos-mode-hook)) + +(provide 'dos) + +;;; dos.el ends here diff --git a/layers/+lang/windows-scripts/packages.el b/layers/+lang/windows-scripts/packages.el new file mode 100644 index 0000000..61060cb --- /dev/null +++ b/layers/+lang/windows-scripts/packages.el @@ -0,0 +1,75 @@ +;;; packages.el --- Windows Scripts Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq windows-scripts-packages + '( + (dos :location local) + ggtags + helm-gtags + powershell + )) + +(defun windows-scripts/init-dos () + (use-package dos + :commands dos-mode + :mode (("\\.bat\\'" . dos-mode) + ("\\.cmd\\'" . dos-mode)) + :init + (progn + (defun windows-scripts/dos-outline-hook () + (defun outline-mouse-select () + "Select position and return to `dos-mode'." + (interactive) + (dos-mode) + (beginning-of-line))) + (defun windows-scripts/dos-outline () + "Set a local binding to be able to return easily in dos-mode." + (interactive) + (dos-outline) + (define-key evil-normal-state-local-map (kbd "SPC m z") 'dos-mode)) + (add-hook 'outline-mode-hook 'windows-scripts/dos-outline-hook)) + :config + (spacemacs/set-leader-keys-for-major-mode 'dos-mode + "hD" 'dos-help-cmd + "eb" 'dos-run + "eB" 'dos-run-args + "s" 'dos-sep + "t" 'dos-template-mini + "T" 'dos-template + "z" 'windows-scripts/dos-outline))) + +(defun windows-scripts/post-init-ggtags () + (add-hook 'dos-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun windows-scripts/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'dos-mode)) + +(defun windows-scripts/init-powershell () + (use-package powershell + :mode (("\\.ps1\\'" . powershell-mode) + ("\\.psm1\\'" . powershell-mode)) + :defer t + :init + (progn + (defun powershell/define-text-objects () + (spacemacs|define-text-object "$" "dollarparen" "$(" ")") + ) + (add-hook 'powershell-mode-hook 'powershell/define-text-objects) + (spacemacs/set-leader-keys + "asp" 'powershell) + (spacemacs/set-leader-keys-for-major-mode 'powershell-mode + "rr" 'powershell-regexp-to-regex) + + ;; TODO + ;; - split out powershell + ;; - get help output with mgg (Get-Help) or Get-Help -online + ;; - + ))) diff --git a/layers/+lang/yaml/README.org b/layers/+lang/yaml/README.org new file mode 100644 index 0000000..418e740 --- /dev/null +++ b/layers/+lang/yaml/README.org @@ -0,0 +1,18 @@ +#+TITLE: YAML layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#syntax-checking-with-flycheck][Syntax checking with flycheck]] + +* Description +This layer provides syntax highlighting and syntax checking via [[http://www.flycheck.org/en/latest/languages.html#yaml][flycheck]] for YAML files. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =yaml= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Syntax checking with flycheck +Flycheck checks YAML with yaml-jsyaml or yaml-ruby. The flycheck YAML +documentation can be found at the [[http://www.flycheck.org/en/latest/languages.html#yaml][flycheck website]]. diff --git a/layers/+lang/yaml/config.el b/layers/+lang/yaml/config.el new file mode 100644 index 0000000..fa10b6d --- /dev/null +++ b/layers/+lang/yaml/config.el @@ -0,0 +1,14 @@ +;;; config.el --- YAML Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|defvar-company-backends yaml-mode) diff --git a/layers/+lang/yaml/packages.el b/layers/+lang/yaml/packages.el new file mode 100644 index 0000000..de5fe74 --- /dev/null +++ b/layers/+lang/yaml/packages.el @@ -0,0 +1,28 @@ +;;; packages.el --- YAML Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 +(setq yaml-packages '(company + flycheck + yaml-mode)) + +(defun yaml/post-init-company () + (spacemacs|add-company-hook yaml-mode)) + +(defun yaml/post-init-flycheck () + (spacemacs/add-flycheck-hook 'yaml-mode)) + +(defun yaml/init-yaml-mode () + "Initialize YAML mode" + (use-package yaml-mode + :mode (("\\.\\(yml\\|yaml\\)\\'" . yaml-mode) + ("Procfile\\'" . yaml-mode)) + :config (add-hook 'yaml-mode-hook + '(lambda () + (define-key yaml-mode-map "\C-m" 'newline-and-indent))))) diff --git a/layers/+misc/nlinum/packages.el b/layers/+misc/nlinum/packages.el new file mode 100644 index 0000000..651e70f --- /dev/null +++ b/layers/+misc/nlinum/packages.el @@ -0,0 +1,43 @@ +;;; packages.el --- nlinum Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defconst nlinum-packages + '( + (linum :excluded t) + (linum-relative :excluded t) + nlinum + nlinum-relative + )) + +(defun nlinum/init-nlinum () + (use-package nlinum + :init + (progn + (when dotspacemacs-line-numbers + (add-hook 'prog-mode-hook 'nlinum-mode) + (add-hook 'text-mode-hook 'nlinum-mode)) + (setq nlinum-format "%4d") + (spacemacs|add-toggle line-numbers + :mode nlinum-mode + :documentation "Show the line numbers." + :evil-leader "tn")))) + +(defun nlinum/init-nlinum-relative () + (use-package nlinum-relative + :commands (nlinum-relative-toggle nlinum-relative-on) + :init + (progn + (setq nlinum-relative-current-symbol "" + nlinum-relative-redisplay-delay 0) + (when (eq dotspacemacs-line-numbers 'relative) + (nlinum-relative-setup-evil) + (add-hook 'nlinum-mode-hook 'nlinum-relative-on)) + (spacemacs/set-leader-keys "tr" 'nlinum-relative-toggle)))) diff --git a/layers/+os/nixos/README.org b/layers/+os/nixos/README.org new file mode 100644 index 0000000..bd9fc94 --- /dev/null +++ b/layers/+os/nixos/README.org @@ -0,0 +1,34 @@ +#+TITLE: NixOS layer + +[[file:img/nixos.jpg]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features:]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#key-bindings][Key Bindings]] + - [[#nixos-options][NixOS Options]] + +* Description + +This layer adds tools for better integration of emacs in NixOS. + +** Features: +- Nix-mode using [[https://github.com/NixOS/nix/blob/master/misc/emacs/nix-mode.el][nix-mode]] +- Auto-completion of NixOS Options using [[https://github.com/travisbhartwell/nix-emacs/blob/master/company-nixos-options.el][company-nixos-options]] +- Helm Lookup for NixOS Options [[https://github.com/travisbhartwell/nix-emacs/blob/master/helm-nixos-options.el][helm-nixos-options]] + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =nixos= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key Bindings + +** NixOS Options + +| Key Binding | Description | +|-------------+-------------------------| +| ~SPC h >~ | Call helm-nixos-options | diff --git a/layers/+os/nixos/config.el b/layers/+os/nixos/config.el new file mode 100644 index 0000000..05f4701 --- /dev/null +++ b/layers/+os/nixos/config.el @@ -0,0 +1 @@ +(spacemacs|defvar-company-backends nix-mode) diff --git a/layers/+os/nixos/img/nixos.jpg b/layers/+os/nixos/img/nixos.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3a52ad80b1fe4cb89d3afdee7a5b684fb9e0126 GIT binary patch literal 38291 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

QQirLY;R=dFDVI9 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" 'helm-nixos-options))) + +(defun nixos/init-nix-mode () + (use-package nix-mode) + (add-to-list 'spacemacs-indent-sensitive-modes 'nix-mode)) + +(defun nixos/init-nixos-options () + (use-package nixos-options)) diff --git a/layers/+os/osx/README.org b/layers/+os/osx/README.org new file mode 100644 index 0000000..e3ffc56 --- /dev/null +++ b/layers/+os/osx/README.org @@ -0,0 +1,102 @@ +#+TITLE: OSX layer + +[[file:img/apple.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#philosophy][Philosophy]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#use-with-non-us-keyboard-layouts][Use with non-US keyboard layouts]] + - [[#define-words-using-os-x-dictionary][Define words using OS X Dictionary]] + - [[#coreutils][Coreutils]] + - [[#key-bindings][Key Bindings]] + - [[#future-work][Future Work]] + +* Description +Spacemacs is not just emacs+vim. It can have OSX keybindings too! This layer +globally defines common OSX keybindings. ~⌘~ is set to ~super~ and ~⌥~ is set to +~meta~. Aside from that, there's nothing much, really. + +While in =dired= this layer will try to use =gls= instead of =ls=. + +* Philosophy +While this layer enables common OSX bindings, it does not implement OSX +navigation keybindings. Spacemacs is meant to be used with evil, and we +encourage you to do so :) + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =osx= to the existing =dotspacemacs-configuration-layers= list in this file. + +*** Use with non-US keyboard layouts +If you need the ~⌥~ key to type common characters such as ={[]}~= which is usual +for e.g. Finnish and Swedish keyboard layouts, you'll probably want to leave the +~⌥~ key unchanged by setting the =osx-use-option-as-meta= variable to =nil=: + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (osx :variables osx-use-option-as-meta nil))) +#+END_SRC + +If you have problem entering symbols that are behind the ~⌥~ key you may want to +added this to the user-init in the .spacemacs-File. This will allow you to use +the right ~⌥~ key to write symbols. The left ~⌥~ key can be used as the Meta +key. + +#+BEGIN_SRC emacs-lisp + (setq-default mac-right-option-modifier nil) +#+END_SRC + +*** Define words using OS X Dictionary + +This layer by default enables defining words under point ~SPC x w d~ using OS X +Dictionary. In some cases you might want to manually setup dictionary to use. +For example, + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (osx :variables osx-dictionary-dictionary-choice "English"))) +#+END_SRC + +To get the list of available dictionaries call =osx/list-available-dictionaries= +function. + +You can disable it by setting =osx-use-dictionary-app= variable to =nil=: + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (osx :variables osx-use-dictionary-app nil))) +#+END_SRC + +** Coreutils +To get =gls= install coreutils homebrew: + +#+BEGIN_SRC sh + brew install coreutils +#+END_SRC + +* Key Bindings + +| Key Binding | Description | +|-------------+-----------------------------| +| ~⌘ =~ | Scale up text | +| ~⌘ -~ | Scale down text | +| ~⌘ q~ | Quit | +| ~⌘ v~ | Paste | +| ~⌘ c~ | Copy | +| ~⌘ x~ | Cut | +| ~⌘ a~ | Select all | +| ~⌘ w~ | Close window | +| ~⌘ W~ | Close frame | +| ~⌘ n~ | New frame | +| ~⌘ z~ | Undo | +| ~⌘ Z~ | Redo | +| ~⌃ ⌘ f~ | Toggle fullscreen | +| ~SPC x w d~ | Define word under the point | + +* Future Work +- Allow user to choose from either ~hyper~ or ~super~ as ~⌘~. This is an option + that is supported cross-platform. +- Configurable option to keep the OSX and spacemacs clipboards separate diff --git a/layers/+os/osx/config.el b/layers/+os/osx/config.el new file mode 100644 index 0000000..bcc27df --- /dev/null +++ b/layers/+os/osx/config.el @@ -0,0 +1,23 @@ +;;; config.el --- OSX Layer config File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar osx-use-option-as-meta t + "If non nil the option key is mapped to meta. Set to `nil` if you need the + option key to type common characters.") + +(defvar osx-use-dictionary-app t + "If non nil use osx dictionary app instead of wordnet") + +;; Use the OS X Emoji font for Emoticons +(when (fboundp 'set-fontset-font) + (set-fontset-font "fontset-default" + '(#x1F600 . #x1F64F) + (font-spec :name "Apple Color Emoji") nil 'prepend)) diff --git a/layers/+os/osx/funcs.el b/layers/+os/osx/funcs.el new file mode 100644 index 0000000..305e4a2 --- /dev/null +++ b/layers/+os/osx/funcs.el @@ -0,0 +1,18 @@ +;;; config.el --- OSX Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Boris Buliga +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun osx/list-available-dictionaries () + "Get list of available dictionaries. + +Useful when setting `osx-dictionary-dictionary-choice'." + (interactive) + (message (shell-command-to-string + (format "%s -l" (osx-dictionary-cli-find-or-recompile))))) diff --git a/layers/+os/osx/img/apple.png b/layers/+os/osx/img/apple.png new file mode 100644 index 0000000000000000000000000000000000000000..4fdfe4455d42cc19fcf2563adcf01416268ecddd GIT binary patch literal 27104 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%0D`CHZnBK=o{y} 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 wh)Ce+oETdPlc +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(when (spacemacs/system-is-mac) + (spacemacs/set-leader-keys "bf" 'reveal-in-osx-finder) + + ;; this is only applicable to GUI mode + (when (display-graphic-p) + ;; Treat command as super + (setq mac-command-key-is-meta nil) + (setq mac-command-modifier 'super) + + (when osx-use-option-as-meta + ;; Treat option as meta + (setq mac-option-key-is-meta t)) + (setq mac-option-modifier (if osx-use-option-as-meta 'meta nil)) + + ;; Keybindings + (global-set-key (kbd "s-=") 'spacemacs/scale-up-font) + (global-set-key (kbd "s--") 'spacemacs/scale-down-font) + (global-set-key (kbd "s-0") 'spacemacs/reset-font-size) + (global-set-key (kbd "s-q") 'save-buffers-kill-terminal) + (global-set-key (kbd "s-v") 'yank) + (global-set-key (kbd "s-c") 'evil-yank) + (global-set-key (kbd "s-a") 'mark-whole-buffer) + (global-set-key (kbd "s-x") 'kill-region) + (global-set-key (kbd "s-w") 'delete-window) + (global-set-key (kbd "s-W") 'delete-frame) + (global-set-key (kbd "s-n") 'make-frame) + (global-set-key (kbd "s-z") 'undo-tree-undo) + (global-set-key (kbd "s-s") + (lambda () + (interactive) + (call-interactively (key-binding "\C-x\C-s")))) + (global-set-key (kbd "s-Z") 'undo-tree-redo) + (global-set-key (kbd "C-s-f") 'spacemacs/toggle-frame-fullscreen) + ;; Emacs sometimes registers C-s-f as this weird keycode + (global-set-key (kbd "") 'spacemacs/toggle-frame-fullscreen))) diff --git a/layers/+os/osx/packages.el b/layers/+os/osx/packages.el new file mode 100644 index 0000000..318ea59 --- /dev/null +++ b/layers/+os/osx/packages.el @@ -0,0 +1,118 @@ +;;; config.el --- OSX Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq osx-packages + '( + exec-path-from-shell + helm + launchctl + (osx-dictionary :toggle osx-use-dictionary-app) + osx-trash + pbcopy + reveal-in-osx-finder + term + )) + +(when (spacemacs/system-is-mac) + ;; Enable built-in trash support via finder API if available (only on Emacs + ;; Mac Port) + (when (boundp 'mac-system-move-file-to-trash-use-finder) + (setq mac-system-move-file-to-trash-use-finder t))) + +(defun osx/post-init-exec-path-from-shell () + ;; Use GNU ls as `gls' from `coreutils' if available. Add `(setq + ;; dired-use-ls-dired nil)' to your config to suppress the Dired warning when + ;; not using GNU ls. We must look for `gls' after `exec-path-from-shell' was + ;; initialized to make sure that `gls' is in `exec-path' + (when (spacemacs/system-is-mac) + (let ((gls (executable-find "gls"))) + (when gls + (setq insert-directory-program gls + dired-listing-switches "-aBhl --group-directories-first"))))) + +(defun osx/pre-init-helm () + ;; Use `mdfind' instead of `locate'. + (when (spacemacs/system-is-mac) + (spacemacs|use-package-add-hook helm + :post-config + ;; Disable fuzzy matchting to make mdfind work with helm-locate + ;; https://github.com/emacs-helm/helm/issues/799 + (setq helm-locate-fuzzy-match nil) + (setq helm-locate-command "mdfind -name %s %s")))) + +(defun osx/init-launchctl () + (use-package launchctl + :if (spacemacs/system-is-mac) + :defer t + :init + (progn + (add-to-list 'auto-mode-alist '("\\.plist\\'" . nxml-mode)) + (spacemacs/set-leader-keys "al" 'launchctl)) + :config + (progn + (evilified-state-evilify launchctl-mode launchctl-mode-map + (kbd "q") 'quit-window + (kbd "s") 'tabulated-list-sort + (kbd "g") 'launchctl-refresh + (kbd "n") 'launchctl-new + (kbd "e") 'launchctl-edit + (kbd "v") 'launchctl-view + (kbd "l") 'launchctl-load + (kbd "u") 'launchctl-unload + (kbd "r") 'launchctl-reload + (kbd "S") 'launchctl-start + (kbd "K") 'launchctl-stop + (kbd "R") 'launchctl-restart + (kbd "D") 'launchctl-remove + (kbd "d") 'launchctl-disable + (kbd "E") 'launchctl-enable + (kbd "i") 'launchctl-info + (kbd "f") 'launchctl-filter + (kbd "=") 'launchctl-setenv + (kbd "#") 'launchctl-unsetenv + (kbd "h") 'launchctl-help)))) + +(defun osx/init-osx-dictionary () + (use-package osx-dictionary + :if osx-use-dictionary-app + :init (spacemacs/set-leader-keys "xwd" 'osx-dictionary-search-pointer) + :commands (osx-dictionary-search-pointer + osx-dictionary-search-input + osx-dictionary-cli-find-or-recompile) + :config + (progn + (evilified-state-evilify-map osx-dictionary-mode-map + :mode osx-dictionary-mode + :bindings + "q" 'osx-dictionary-quit + "r" 'osx-dictionary-read-word + "s" 'osx-dictionary-search-input + "o" 'osx-dictionary-open-dictionary.app)))) + +(defun osx/init-osx-trash () + (use-package osx-trash + :if (and (spacemacs/system-is-mac) + (not (boundp 'mac-system-move-file-to-trash-use-finder))) + :init (osx-trash-setup))) + +(defun osx/init-pbcopy () + (use-package pbcopy + :if (and (spacemacs/system-is-mac) (not (display-graphic-p))) + :init (turn-on-pbcopy))) + +(defun osx/init-reveal-in-osx-finder () + (use-package reveal-in-osx-finder + :if (spacemacs/system-is-mac) + :commands reveal-in-osx-finder)) + +(defun osx/post-init-term () + (with-eval-after-load 'term + (define-key term-raw-map (kbd "s-v") 'term-paste))) diff --git a/layers/+pair-programming/floobits/README.org b/layers/+pair-programming/floobits/README.org new file mode 100644 index 0000000..8fd4c8f --- /dev/null +++ b/layers/+pair-programming/floobits/README.org @@ -0,0 +1,32 @@ +#+TITLE: Floobits layer + +[[file:img/floobits.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#key-bindings][Key Bindings]] + +* Description +This layer adds support for peer programming tool [[https://github.com/Floobits/floobits-emacs][floobits]]. + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =floobits= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key Bindings + +| Key Binding | Description | +|-------------+------------------------------------------------------------------------------------------| +| ~SPC P c~ | Clears all mirrored highlights. | +| ~SPC P d~ | Load the .floorc.json file for floobits configuration. | +| ~SPC P f~ | Follow a users changes. This also toggles follow mode. | +| ~SPC P j~ | Join an existing floobits workspace. | +| ~SPC P l~ | Leave the current workspace. | +| ~SPC P R~ | Create a workspace and populate it with the contents of the directory, DIR (or make it). | +| ~SPC P s~ | Summon everyone in the workspace to your cursor position. | +| ~SPC P t~ | Toggle following of recent changes. | +| ~SPC P U~ | Create a workspace and populate it with the contents of the directory, DIR (or make it). | diff --git a/layers/+pair-programming/floobits/img/floobits.png b/layers/+pair-programming/floobits/img/floobits.png new file mode 100644 index 0000000000000000000000000000000000000000..5de66734461f341166fd600d05e0aedc7d618a71 GIT binary patch literal 19294 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 QIF4R9T)1M_WaFLuA31pu9RL6T literal 0 HcmV?d00001 diff --git a/layers/+pair-programming/floobits/packages.el b/layers/+pair-programming/floobits/packages.el new file mode 100644 index 0000000..5a3f839 --- /dev/null +++ b/layers/+pair-programming/floobits/packages.el @@ -0,0 +1,42 @@ +;;; packages.el --- floobits Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Rodolfo Hansen +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq floobits-packages + '( + floobits + )) + +(defun floobits/init-floobits () + (use-package floobits + :defer t + :init + (progn + (spacemacs/declare-prefix "P" "PP/floobits") + + (defun spacemacs/floobits-rclocation () + "Return the absolute path to the floobits dotfile." + (concat user-home-directory ".floorc.json")) + + (defun spacemacs/floobits-load-rcfile () + "Load ~/.floobitsrc if it exists." + (let ((floobitsrc (spacemacs/floobits-rclocation))) + (if (file-exists-p floobitsrc) (load floobitsrc)))) + + (spacemacs/set-leader-keys + "Pc" 'floobits-clear-highlights + "Pd" 'spacemacs/floobits-load-rcfile + "Pf" 'floobits-follow-user + "Pj" 'floobits-join-workspace + "Pl" 'floobits-leave-workspace + "PR" 'floobits-share-dir-private + "Ps" 'floobits-summon + "Pt" 'floobits-follow-mode-toggle + "PU" 'floobits-share-dir-public)))) diff --git a/layers/+source-control/git/README.org b/layers/+source-control/git/README.org new file mode 100644 index 0000000..85a6bd4 --- /dev/null +++ b/layers/+source-control/git/README.org @@ -0,0 +1,268 @@ +#+TITLE: Git contribution layer for Spacemacs + +[[file:img/git.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features:]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#magit-status-fullscreen][Magit status fullscreen]] + - [[#magit-auto-complete][Magit auto-complete]] + - [[#magit-svn-plugin][Magit SVN plugin]] + - [[#global-git-commit-mode][Global git commit mode]] + - [[#git][Git]] + - [[#git-flow][Git-Flow]] + - [[#org-integration][Org integration]] + - [[#working-with-git][Working with Git]] + - [[#magit][Magit]] + - [[#staging-lines][Staging lines]] + - [[#commit-message-editing-buffer][Commit message editing buffer]] + - [[#interactive-rebase-buffer][Interactive rebase buffer]] + - [[#quick-guide-for-recurring-use-cases-in-magit][Quick guide for recurring use cases in Magit]] + - [[#git-flow-1][Git-Flow]] + - [[#git-time-machine][Git time machine]] + - [[#git-links-to-web-services][Git links to web services]] + +* Description +This layers adds extensive support for [[http://git-scm.com/][git]]. + +** Features: +- git repository management the indispensable [[http://magit.vc/][magit]] package +- [[https://github.com/jtatarik/magit-gitflow][git-flow]] add-on for magit. +- quick in buffer history browsing with [[https://github.com/pidu/git-timemachine][git-timemachine]]. +- quick in buffer last commit message per line with [[https://github.com/syohex/emacs-git-messenger][git-messenger]] +- colorize buffer line by age of commit with [[https://github.com/syohex/emacs-smeargle][smeargle]] +- gitignore generator with [[https://github.com/jupl/helm-gitignore][helm-gitignore]] +- org integration with magit via [[https://github.com/magit/orgit][orgit]] + +New to Magit? Checkout the [[http://magit.vc/about.html][official intro]]. + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =git= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Magit status fullscreen +To display the =magit status= buffer in fullscreen set the variable +=git-magit-status-fullscreen= to =t= in your =dotspacemacs/user-init= function. + +#+BEGIN_SRC emacs-lisp + (defun dotspacemacs/user-init () + (setq-default git-magit-status-fullscreen t)) +#+END_SRC + +** Magit auto-complete +Magit auto-complete feature is enabled. For this feature to work best you +have to setup your Git repository directory in your =dotspacemacs/user-config= +function, this is the folder where you keep all your git-controlled projects +(the path should end up with a ~/~ to respect Emacs conventions): + +#+BEGIN_SRC emacs-lisp + (setq magit-repository-directories '("~/repos/")) +#+END_SRC + +For more information, see [[http://magit.vc/manual/magit.html#Status-buffer][Magit-User-Manual#Status-buffer]] + +** Magit SVN plugin +For convenience the magit SVN plugin can be activated directly in the Git +layer by setting the variable =git-enable-magit-svn-plugin= to =t=. + +#+BEGIN_SRC emacs-lisp + (defun dotspacemacs/user-init () + (setq-default git-enable-magit-svn-plugin t)) +#+END_SRC + +** Global git commit mode +Spacemacs can be used as the =$EDITOR= (or =$GIT_EDITOR=) for editing git +commits messages. To enable this you have to add the following line to your +=dotspacemacs/user-config=: + +#+begin_src emacs-lisp +(global-git-commit-mode t) +#+end_src + +** Git +Of course if your OS does not ship with git (!) you'll have to install it +on your machine. You can download it from the [[http://git-scm.com/downloads][download page]]. + +** Git-Flow +Git-flow is a standardized branching pattern for git repositories with the aim +of making things more manageable. While there are tools to assist with making +this easier, these do nothing you couldn't do manually. + +Support requires installation of the git-flow extensions. Please reference their +[[https://github.com/petervanderdoes/gitflow/wiki][installation page]] for assistance. + +** Org integration + +See the commentary section of the package [[https://github.com/magit/orgit/blob/master/orgit.el#L28][here]]. + +* Working with Git +Git commands (start with ~g~): + +| Key Binding | Description | +|-------------+-----------------------------------------------------| +| ~SPC g >~ | show submodule prompt | +| ~SPC g b~ | open a =magit= blame | +| ~SPC g f h~ | show file commits history | +| ~SPC g H c~ | clear highlights | +| ~SPC g H h~ | highlight regions by age of commits | +| ~SPC g H t~ | highlight regions by last updated time | +| ~SPC g I~ | open =helm-gitignore= | +| ~SPC g s~ | open a =magit= status window | +| ~SPC g S~ | stage current file | +| ~SPC g m~ | magit dispatch popup | +| ~SPC g M~ | display the last commit message of the current line | +| ~SPC g t~ | launch the git time machine | +| ~SPC g U~ | unstage current file | + +- Highlight by age of commit or last update time is provided by + [[https://github.com/syohex/emacs-smeargle][smeargle]]. +- Git time machine is provided by [[https://github.com/pidu/git-timemachine][git-timemachine]]. +- Git last commit message per line is provided by [[https://github.com/syohex/emacs-git-messenger][git-messenger]]. + +** Magit +Spacemacs uses [[http://magit.vc/][magit]] to manage Git repositories. + +To open a =status buffer=, type in a buffer of a Git repository: ~SPC g s~. +The central key binding hub of Magit is available on ~SPC g m~. + +Spacemacs uses [[https://github.com/justbur/evil-magit][evil-magit]] for key bindings in magit buffers (unless your editing +style is set to emacs, in which case you get the default magit bindings), which +are the standard magit key bindings with some minimal changes to make them +comfortable for evil users. + +Here are the often used bindings inside a =status buffer=: + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------| +| ~/~ | evil-search | +| ~$~ | open =command output buffer= | +| ~c c~ | open a =commit message buffer= | +| ~b b~ | checkout a branch | +| ~b c~ | create a branch | +| ~f f~ | fetch changes | +| ~F (r) u~ | pull tracked branch and rebase | +| ~gr~ | refresh | +| ~j~ | goto next magit section | +| ~C-j~ | next visual line | +| ~k~ | goto previous magit section | +| ~C-k~ | previous visual line | +| ~l l~ | open =log buffer= | +| ~n~ | next search occurrence | +| ~N~ | previous search occurrence | +| ~o~ | revert item at point | +| ~P u~ | push to tracked branch | +| ~P m~ | push to matching branch (e.g., upstream/develop to origin/develop) | +| ~q~ | quit | +| ~s~ | on a file or hunk in a diff: stage the file or hunk | +| ~x~ | discard changes | +| ~+~ | on a hunk: increase hunk size | +| ~-~ | on a hunk: decrease hunk size | +| ~S~ | stage all | +| ~TAB~ | on a file: expand/collapse diff | +| ~u~ | on a staged file: unstage | +| ~U~ | unstage all staged files | +| ~v or V~ | select multiple lines | +| ~z z~ | stash changes | + +** Staging lines +Magit allows you to stage specific lines by selecting them in a diff and hitting +=s= to stage. Due to inconsistencies between Vim and Emacs editing styles, if +you enter visual line state with =V=, you will stage one more line than +intended. To work around this, you can use =v= instead (since Magit only stages +whole lines, in any case). + +** Commit message editing buffer +In a commit message buffer press ~,c~ (if =dotspacemacs-major-mode-leader-key= is ~​,​~) +or ~C-c C-c~ to commit the changes with the entered message. Pressing ~,a~ or ~C-c C-k~ +will discard the commit message. + +| Key Binding | Description | +|-------------+-------------| +| ~h~ | go left | +| ~j~ | go down | +| ~k~ | go up | +| ~l~ | go right | + +** Interactive rebase buffer + +| Key Binding | Description | +|-------------+----------------| +| ~c~ or ~p~ | pick | +| ~e~ | edit | +| ~f~ | fixup | +| ~j~ | go down | +| ~M-j~ | move line down | +| ~k~ | go up | +| ~M-k~ | move line up | +| ~d~ or ~x~ | kill line | +| ~r~ | reword | +| ~s~ | squash | +| ~u~ | undo | +| ~y~ | insert | +| ~!~ | execute | + +** Quick guide for recurring use cases in Magit +- Amend a commit: + - ~l l~ to open =log buffer= + - ~c a~ on the commit you want to amend + - ~,c~ or ~C-c C-c~ to submit the changes +- Squash last commit: + - ~l l~ to open =log buffer= + - ~r e~ on the second to last commit, it opens the =rebase buffer= + - ~j~ to put point on last commit + - ~s~ to squash it + - ~,c~ or ~C-c C-c~ to continue to the =commit message buffer= + - ~,c~ or ~C-c C-c~ again when you have finished to edit the commit message +- Force push a squashed commit: + - in the =status buffer= you should see the new commit unpushed and the old + commit unpulled + - ~P -f P~ for force a push (*beware* usually it is not recommended to rewrite + the history of a public repository, but if you are *sure* that you are the + only one to work on a repository it is ok - i.e. in your fork). +- Add upstream remote (the parent repository you have forked): + - ~M~ to open the =remote popup= + - ~a~ to add a remote, type the name (i.e. =upstream=) and the URL +- Pull changes from upstream (the parent repository you have forked) and push: + - ~F -r C-u F~ and choose =upstream= or the name you gave to it + - ~P P~ to push the commit to =origin= + +** Git-Flow +[[https://github.com/jtatarik/magit-gitflow][magit-gitflow]] provides git-flow commands in its own magit menu. + +| Key Binding | Description | +|-------------+-------------------------| +| ~%~ | open magit-gitflow menu | + +** Git time machine +[[https://github.com/pidu/git-timemachine][git-timemachine]] allows to quickly browse the commits of the current buffer. + +| Key Binding | Description | +|-------------+----------------------------------------------------| +| ~SPC g t~ | start git timemachine and initiate transient-state | +| ~c~ | show current commit | +| ~n~ | show next commit | +| ~N~ | show previous commit | +| ~p~ | show previous commit | +| ~q~ | leave transient-state and git timemachine | +| ~Y~ | copy current commit hash | + +** Git links to web services +These key bindings allow to quickly construct URLs pointing to a given commit +or lines in a file hosted on Git web services like GitHub, GitLab, Bitbucket... + +| Key Binding | Description | +|-------------+------------------------------------------------------------------------| +| ~SPC g l c~ | on a commit hash, browse to the current file at this commit | +| ~SPC g l C~ | on a commit hash, create link to the file at this commit and copy it | +| ~SPC g l l~ | on a region, browse to file at current lines position | +| ~SPC g l L~ | on a region, create a link to the file highlighting the selected lines | + +*Notes:* +- You can use the universal argument ~SPC u~ to select a remote repository. +- When the link is opened, the URL is also copied in the kill ring, you can + override this behavior by setting the variable =git-link-open-in-browser= to + =nil=. diff --git a/layers/+source-control/git/config.el b/layers/+source-control/git/config.el new file mode 100644 index 0000000..2aafb69 --- /dev/null +++ b/layers/+source-control/git/config.el @@ -0,0 +1,18 @@ +;;; config.el --- Git Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar git-enable-magit-svn-plugin nil + "If non nil `magit-svn' plugin is enabled.") + +(defvar git-magit-status-fullscreen nil + "If non nil magit-status buffer is displayed in fullscreen.") diff --git a/layers/+source-control/git/funcs.el b/layers/+source-control/git/funcs.el new file mode 100644 index 0000000..58190a7 --- /dev/null +++ b/layers/+source-control/git/funcs.el @@ -0,0 +1,72 @@ +;;; funcs.el --- Colors Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; magit + +(defun spacemacs/magit-toggle-whitespace () + "Toggle whitespace in `magit-diff-mode'." + (interactive) + (if (member "-w" (if (derived-mode-p 'magit-diff-mode) + magit-refresh-args + magit-diff-section-arguments)) + (spacemacs//magit-dont-ignore-whitespace) + (spacemacs//magit-ignore-whitespace))) + +(defun spacemacs//magit-ignore-whitespace () + "Ignore whitespace in `magit-diff-mode'" + (add-to-list (if (derived-mode-p 'magit-diff-mode) + 'magit-refresh-args 'magit-diff-section-arguments) "-w") + (magit-refresh)) + +(defun spacemacs//magit-dont-ignore-whitespace () + "Don't ignore whitespace in `magit-diff-mode'" + (setq magit-diff-options + (remove "-w" + (if (derived-mode-p 'magit-diff-mode) + magit-refresh-args + magit-diff-section-arguments))) (magit-refresh)) + +(defun spacemacs/git-link-copy-url-only () + "Only copy the generated link to the kill ring." + (interactive) + (let (git-link-open-in-browser) + (call-interactively 'spacemacs/git-link))) + +(defun spacemacs/git-link-commit-copy-url-only () + "Only copy the generated link to the kill ring." + (interactive) + (let (git-link-open-in-browser) + (call-interactively 'spacemacs/git-link-commit))) + +(defun spacemacs/git-link () + "Allow the user to run git-link in a git-timemachine buffer." + (interactive) + (require 'git-link) + (if (and (boundp 'git-timemachine-revision) + git-timemachine-revision) + (cl-letf (((symbol-function 'git-link--branch) + (lambda () + (car git-timemachine-revision)))) + (call-interactively 'git-link)) + (call-interactively 'git-link))) + +(defun spacemacs/git-link-commit () + "Allow the user to run git-link-commit in a git-timemachine buffer." + (interactive) + (require 'git-link) + (if (and (boundp 'git-timemachine-revision) + git-timemachine-revision) + (cl-letf (((symbol-function 'word-at-point) + (lambda () + (car git-timemachine-revision)))) + (call-interactively 'git-link-commit)) + (call-interactively 'git-link-commit))) diff --git a/layers/+source-control/git/img/git.png b/layers/+source-control/git/img/git.png new file mode 100644 index 0000000000000000000000000000000000000000..7280e93da73be4e6a349757365cccacc82317c3c GIT binary patch literal 10828 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 o +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq git-packages + '( + evil-magit + fill-column-indicator + gitattributes-mode + gitconfig-mode + gitignore-mode + git-commit + git-link + git-messenger + git-timemachine + (helm-gitignore :toggle (configuration-layer/package-usedp 'helm)) + magit + magit-gitflow + ;; not compatible with magit 2.1 at the time of release + ;; magit-svn + orgit + smeargle + )) + +(defun git/init-evil-magit () + (with-eval-after-load 'magit + (require 'evil-magit) + (evil-define-key 'motion magit-mode-map + (kbd dotspacemacs-leader-key) spacemacs-default-map))) + +(defun git/post-init-fill-column-indicator () + (add-hook 'git-commit-mode-hook 'fci-mode)) + +(defun git/init-helm-gitignore () + (use-package helm-gitignore + :defer t + :init (spacemacs/set-leader-keys "gI" 'helm-gitignore))) + +(defun git/init-git-commit () + (use-package git-commit + :defer t)) + +(defun git/init-git-link () + (use-package git-link + :defer t + :init + (progn + (spacemacs/declare-prefix "gl" "links") + (spacemacs/set-leader-keys + "gll" 'spacemacs/git-link + "glL" 'spacemacs/git-link-copy-url-only + "glc" 'spacemacs/git-link-commit + "glC" 'spacemacs/git-link-commit-copy-url-only) + ;; default is to open the generated link + (setq git-link-open-in-browser t)))) + +(defun git/init-git-messenger () + (use-package git-messenger + :defer t + :init (spacemacs/set-leader-keys "gM" 'git-messenger:popup-message) + :config (define-key git-messenger-map [escape] 'git-messenger:popup-close))) + +(defun git/init-git-timemachine () + (use-package git-timemachine + :defer t + :commands spacemacs/time-machine-transient-state/body + :init + (spacemacs/set-leader-keys + "gt" 'spacemacs/time-machine-transient-state/body) + :config + (progn + (spacemacs|define-transient-state time-machine + :title "Git Timemachine Transient State" + :doc " +[_p_/_N_] previous [_n_] next [_c_] current [_g_] goto nth rev [_Y_] copy hash [_q_] quit" + :on-enter (let (golden-ratio-mode) + (unless (bound-and-true-p git-timemachine-mode) + (call-interactively 'git-timemachine))) + :on-exit (when (bound-and-true-p git-timemachine-mode) + (git-timemachine-quit)) + :foreign-keys run + :bindings + ("c" git-timemachine-show-current-revision) + ("g" git-timemachine-show-nth-revision) + ("p" git-timemachine-show-previous-revision) + ("n" git-timemachine-show-next-revision) + ("N" git-timemachine-show-previous-revision) + ("Y" git-timemachine-kill-revision) + ("q" nil :exit t))))) + +(defun git/init-gitattributes-mode () + (use-package gitattributes-mode + :defer t)) + +(defun git/init-gitconfig-mode () + (use-package gitconfig-mode + :defer t)) + +(defun git/init-gitignore-mode () + (use-package gitignore-mode + :defer t)) + +(defun git/init-magit () + (use-package magit + :defer t + :init + (progn + (setq magit-completing-read-function + (if (configuration-layer/layer-usedp 'ivy) + 'ivy-completing-read + 'magit-builtin-completing-read)) + (setq magit-revision-show-gravatars '("^Author: " . "^Commit: ")) + ;; On Windows, we must use Git GUI to enter username and password + ;; See: https://github.com/magit/magit/wiki/FAQ#windows-cannot-push-via-https + (when (eq window-system 'w32) + (setenv "GIT_ASKPASS" "git-gui--askpass")) + ;; key bindings + (spacemacs/declare-prefix "gd" "diff") + (spacemacs/declare-prefix "gf" "file") + (spacemacs/set-leader-keys + "gb" 'spacemacs/git-blame-micro-state + "gfh" 'magit-log-buffer-file + "gm" 'magit-dispatch-popup + "gs" 'magit-status + "gS" 'magit-stage-file + "gU" 'magit-unstage-file) + ;; transient state + ;; TODO use transient state instead of old micro-state, IIRC we continue + ;; to use micro-state because of the re-entry keyword :on-enter which is + ;; not available in transient state + (spacemacs|define-micro-state git-blame + :title "Git Blame Transient State" + :doc " +Press [_b_] again to blame further in the history, [_q_] to go up or quit." + :on-enter (let (golden-ratio-mode) + (unless (bound-and-true-p magit-blame-mode) + (call-interactively 'magit-blame))) + :foreign-keys run + :bindings + ("b" magit-blame) + ;; here we use the :exit keyword because we should exit the + ;; micro-state only if the magit-blame-quit effectively disable + ;; the magit-blame mode. + ("q" nil :exit (progn (when (bound-and-true-p magit-blame-mode) + (magit-blame-quit)) + (not (bound-and-true-p magit-blame-mode)))))) + :config + (progn + ;; seems to be necessary at the time of release + (require 'git-rebase) + ;; bind function keys + ;; (define-key magit-mode-map (kbd "") 'magit-section-toggle) + (unless (configuration-layer/package-usedp 'evil-magit) + ;; use auto evilification if `evil-magit' is not used + (evilified-state-evilify-map magit-mode-map + :bindings + "gr" 'magit-refresh + "gR" 'magit-refresh-all) + (evilified-state-evilify-map magit-status-mode-map + :mode magit-status-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-refs-mode-map + :mode magit-refs-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-blame-mode-map + :mode magit-blame-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-hunk-section-map + :mode magit-status-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-diff-mode-map + :mode magit-diff-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-log-read-revs-map + :mode magit-log-read-revs + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-log-mode-map + :mode magit-log-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-log-select-mode-map + :mode magit-log-select-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-cherry-mode-map + :mode magit-cherry-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-reflog-mode-map + :mode magit-reflog-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-process-mode-map + :mode magit-process-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map magit-stash-mode-map + :mode magit-stash-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward) + (evilified-state-evilify-map git-rebase-mode-map + :mode git-rebase-mode + :bindings + (kbd "C-S-j") 'magit-section-forward + (kbd "C-S-k") 'magit-section-backward + (kbd "C-n") 'magit-section-forward + (kbd "C-p") 'magit-section-backward + "J" 'git-rebase-move-line-down + "K" 'git-rebase-move-line-up + "u" 'git-rebase-undo + "y" 'git-rebase-insert) + ;; default state for additional modes + (dolist (mode '(magit-popup-mode + magit-popup-sequence-mode)) + (evil-set-initial-state mode 'emacs)) + (let ((refresh-key "gr") + (refresh-all-key "gR") + (delete-key (nth 0 (where-is-internal 'magit-delete-thing + magit-mode-map)))) + (evilified-state--configure-default-state 'magit-revision-mode) + ;; section maps + (eval `(evilified-state-evilify-map magit-tag-section-map + :pre-bindings + ,delete-key 'magit-tag-delete + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-untracked-section-map + :pre-bindings + ,delete-key 'magit-discard + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-branch-section-map + :pre-bindings + ,delete-key 'magit-branch-delete + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-remote-section-map + :pre-bindings + ,delete-key 'magit-remote-remove + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-file-section-map + :pre-bindings + ,delete-key 'magit-discard + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-hunk-section-map + :pre-bindings + ,delete-key 'magit-discard + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-unstaged-section-map + :pre-bindings + ,delete-key 'magit-discard + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-staged-section-map + :pre-bindings + ,delete-key 'magit-discard + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-commit-section-map + :pre-bindings + ,delete-key 'magit-discard + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-stashes-section-map + :pre-bindings + ,delete-key 'magit-stash-clear + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-stash-section-map + :pre-bindings + ,delete-key 'magit-stash-drop + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-module-commit-section-map + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-unpulled-section-map + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)) + (eval `(evilified-state-evilify-map magit-unpushed-section-map + :bindings + ,refresh-key 'magit-refresh + ,refresh-all-key 'magit-refresh-all)))) + ;; confirm/abort + (when dotspacemacs-major-mode-leader-key + (add-hook 'with-editor-mode-hook 'evil-normalize-keymaps) + (let ((mm-key dotspacemacs-major-mode-leader-key)) + (dolist (state '(normal motion)) + (evil-define-key state with-editor-mode-map + (concat mm-key mm-key) 'with-editor-finish + (concat mm-key "a") 'with-editor-cancel + (concat mm-key "c") 'with-editor-finish + (concat mm-key "k") 'with-editor-cancel)))) + ;; whitespace + (define-key magit-status-mode-map (kbd "C-S-w") + 'spacemacs/magit-toggle-whitespace) + ;; full screen magit-status + (when git-magit-status-fullscreen + (setq magit-display-buffer-function 'magit-display-buffer-fullframe-status-v1))))) + +(defun git/init-magit-gitflow () + (use-package magit-gitflow + :commands turn-on-magit-gitflow + :init (progn + (add-hook 'magit-mode-hook 'turn-on-magit-gitflow) + (with-eval-after-load 'magit + (define-key magit-mode-map "%" 'magit-gitflow-popup))) + :config (spacemacs|diminish magit-gitflow-mode "Flow"))) + +(defun git/init-magit-svn () + (use-package magit-svn + :if git-enable-magit-svn-plugin + :commands turn-on-magit-svn + :init (add-hook 'magit-mode-hook 'turn-on-magit-svn) + :config + (progn + (evil-define-key 'emacs magit-status-mode-map + "N" 'magit-key-mode-popup-svn)))) + +(defun git/init-orgit ()) + +(defun git/init-smeargle () + (use-package smeargle + :defer t + :init + (progn + (spacemacs/declare-prefix "gH" "highlight") + (when (configuration-layer/package-usedp 'which-key) + ;; TODO abstract this to a function + (let ((descr + '(("smeargle" . "highlight by last update time") + ("smeargle-commits" . "highlight by age of changes") + ("smeargle-clear" . "clear")))) + (dolist (nd descr) + ;; ensure the target matches the whole string + (push (cons (concat "\\`" (car nd) "\\'") (cdr nd)) + which-key-description-replacement-alist)))) + (spacemacs/set-leader-keys + "gHc" 'smeargle-clear + "gHh" 'smeargle-commits + "gHt" 'smeargle)))) diff --git a/layers/+source-control/github/README.org b/layers/+source-control/github/README.org new file mode 100644 index 0000000..3713c08 --- /dev/null +++ b/layers/+source-control/github/README.org @@ -0,0 +1,105 @@ +#+TITLE: GitHub layer + +[[file:img/github.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features:]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#git-configuration][Git configuration]] + - [[#key-bindings][Key Bindings]] + - [[#magit-gh-pulls][magit-gh-pulls]] + - [[#gistel][gist.el]] + - [[#clone-repositories][Clone repositories]] + - [[#browse-files][Browse files]] + +* Description +This layers adds support for [[http://github.com][GitHub]]. + +** Features: +- [[https://github.com/sigma/magit-gh-pulls][magit-gh-pulls]]: handy =magit= add-on to manage GitHub pull requests. +- [[https://github.com/defunkt/gist.el][gist.el]]: full-featured mode to browse and post GitHub gists. +- [[https://github.com/osener/github-browse-file][github-browse-file]] and [[https://github.com/sshaw/git-link][git-link]]: quickly browse GitHub URL in your + browser. +- [[https://github.com/dgtized/github-clone.el][github-clone]] allows for easy cloning and forking of repositories. + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =github= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Git configuration +You will need to generate a [[https://github.com/settings/tokens][personal access token]] on GitHub. This token should +have the =gist= and =repo= permissions. Once this token is created, it needs to +be added to your =~/.gitconfig= + +#+BEGIN_SRC sh + git config --global github.oauth-token +#+END_SRC + +* Key Bindings +** magit-gh-pulls + +In a =magit status= buffer (~SPC g s~): + +| Key Binding | Description | +|-------------+-------------------------------------------------------------| +| ~# c~ | create a pull request | +| ~# g~ | get a list of (or reload) all PRs in the current repository | +| ~# f~ | fetch the commits associated with the current PR at point | +| ~# b~ | create a branch for the current PR at point | +| ~# m~ | merge the PR with current branch at point | +| ~# d~ | show a diff of the current pull request at point | +| ~# o~ | open PR at point in browser | + +Note that =magit-gh-pulls= will try to fast-forward the PRs whenever it is +possible. + +** gist.el + +| Key Binding | Description | +|-------------+-----------------------------------------------| +| ~SPC g g b~ | create a public gist with the buffer content | +| ~SPC g g B~ | create a private gist with the buffer content | +| ~SPC g g l~ | open the gist list buffer | +| ~SPC g g r~ | create a public gist with the region content | +| ~SPC g g R~ | create a private gist with the region content | + +In the gist list buffer: + +| Key Binding | Description | +|-------------+------------------------------| +| ~/~ | evil search | +| ~+~ | add buffer to gist | +| ~-~ | remove file for gist | +| ~b~ or ~o~ | open current gist in browser | +| ~f~ | fetch current gist | +| ~g~ | refresh the list | +| ~h~ | go left | +| ~j~ | go down | +| ~k~ | go up | +| ~K~ | kill current gist | +| ~l~ | go right | +| ~n~ | next search occurrence | +| ~N~ | next previous occurrence | +| ~v~ | =visual state= | +| ~V~ | =visual-line state= | +| ~y~ | print URL and copy it | + +** Clone repositories + +| Key Binding | Description | +|---------------+----------------------------------------------------------| +| ~SPC g h c /~ | search for a repository to clone it | +| ~SPC g h c c~ | clone and optionally fork repository | +| ~SPC g h c r~ | add a remote that is an existing fork of selected remote | +| ~SPC g h c f~ | fork remote in current user namespace | +| ~SPC g h c u~ | add upstream as remote | + +** Browse files + +| Key Binding | Description | +|-------------+--------------------------------------------------------------------| +| ~SPC g h o~ | browse to file on GitHub | diff --git a/layers/+source-control/github/img/github.png b/layers/+source-control/github/img/github.png new file mode 100644 index 0000000000000000000000000000000000000000..111acbedb6920cca98752fd3116f953c2aee9916 GIT binary patch literal 16856 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq github-packages + '( + gist + github-browse-file + github-clone + github-search + magit-gh-pulls + ;; this package does not exits, we need it to wrap + ;; the call to spacemacs/declare-prefix. + (spacemacs-github :location built-in) + )) + +(defun github/init-gist () + (use-package gist + :defer t + :init + (progn + (evilified-state-evilify gist-list-mode gist-list-menu-mode-map + "f" 'gist-fetch-current + "K" 'gist-kill-current + "o" 'gist-browse-current-url) + (spacemacs/declare-prefix "gg" "github gist") + (spacemacs/set-leader-keys + "ggb" 'gist-buffer + "ggB" 'gist-buffer-private + "ggl" 'gist-list + "ggr" 'gist-region + "ggR" 'gist-region-private)))) + +(defun github/init-github-browse-file () + (use-package github-browse-file + :defer t + :init (spacemacs/set-leader-keys "gho" 'github-browse-file))) + +(defun github/init-github-clone () + (use-package github-clone + :defer t + :init + (progn + (spacemacs/declare-prefix "ghc" "clone") + (spacemacs/set-leader-keys + "ghcc" 'github-clone + "ghcr" 'github-clone-add-existing-remote + "ghcf" 'github-clone-fork-remote + "ghcu" 'github-clone-add-source-remote)))) + +(defun github/init-github-search () + (use-package github-search + :commands (github-search-clone-repo github-search-user-clone-repo) + :init (spacemacs/set-leader-keys "ghc/" 'github-search-clone-repo))) + +;; magit-gh-pulls has to be loaded via a pre-config hook because the source code +;; makes assumptions about the status of the magit-mode keymaps that are +;; incompatible with the spacemacs' evilification feature. +;; To avoid errors, magit-gh-pulls must be loaded after magit, but before magit +;; is configured by spacemacs. + +(defun github/init-magit-gh-pulls () + (spacemacs|use-package-add-hook magit + :pre-config + (progn + (use-package magit-gh-pulls + :init + (progn + (defun spacemacs/load-gh-pulls-mode () + "Start `magit-gh-pulls-mode' only after a manual request." + (interactive) + (magit-gh-pulls-mode) + (magit-gh-pulls-popup)) + + (define-key magit-mode-map "#" 'spacemacs/load-gh-pulls-mode)) + :config + (spacemacs|diminish magit-gh-pulls-mode "Github-PR"))))) + +(defun github/init-spacemacs-github () + (spacemacs/declare-prefix "gh" "github")) diff --git a/layers/+source-control/perforce/README.org b/layers/+source-control/perforce/README.org new file mode 100644 index 0000000..7308835 --- /dev/null +++ b/layers/+source-control/perforce/README.org @@ -0,0 +1,75 @@ +#+TITLE: Perforce layer + +[[file:img/p4.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + +* Description + +This layer adds support for [[http://www.perforce.com/][Perforce]] (p4). + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =perforce= to the existing =dotspacemacs-configuration-layers= list in this +file. + +You'll have to install the =p4== command line tool from the [[http://www.perforce.com/downloads][download page]]. + +Don't forget to setup the environment variables: +- =P4_PORT= +- =P4_CLIENT= +- =P4_USER= +- =P4_PASSWD= + +* Key bindings + +| Key Binding | Description | +|-------------+--------------------------------------------------------------| +| ~SPC p 4 a~ | add a file in depot | +| ~SPC p 4 d~ | delete a file in depot | +| ~SPC p 4 D~ | p4-describe | +| ~SPC p 4 e~ | checkout a file | +| ~SPC p 4 r~ | revert a file | +| ~SPC p 4 R~ | refresh content of an file. 'sync -f' | +| ~SPC p 4 S~ | submit CL | +| ~SPC p 4 b~ | create, modify, or delete a branch view specification | +| ~SPC p 4 B~ | display list of branch specifications | +| ~SPC p 4 c~ | create or edit a client workspace specification and its view | +| ~SPC p 4 C~ | display list of pending and submitted CL | +| ~SPC p 4 E~ | change the filetype of an open file or move it to another CL | +| ~SPC p 4 @~ | p4-depot-find-file | +| ~SPC p 4 f~ | list revision history of files | +| ~SPC p 4 F~ | list files in the depot | +| ~SPC p 4 G~ | display current perforce client name | +| ~SPC p 4 g~ | synchronize client with depot | +| ~SPC p 4 h~ | p4-help | +| ~SPC p 4 H~ | list revisions most recently synced to the current workspace | +| ~SPC p 4 i~ | display client/server information | +| ~SPC p 4 I~ | integrate one set of files into another | +| ~SPC p 4 j~ | create or edit a job (defect) specification | +| ~SPC p 4 J~ | display list of all jobs | +| ~SPC p 4 l~ | create or edit a label specification | +| ~SPC p 4 L~ | display list of defined labels | +| ~SPC p 4 :~ | apply label to the contents of the client workspace | +| ~SPC p 4 m~ | move files from one location to another | +| ~SPC p 4 o~ | list open files and display file status | +| ~SPC p 4 p~ | write a depot file to a buffer | +| ~SPC p 4 P~ | p4-set-p4-port | +| ~SPC p 4 q~ | quit window | +| ~SPC p 4 y~ | resolve integrations and updates to workspace files | +| ~SPC p 4 s~ | identify differences between workspace and depot | +| ~SPC p 4 t~ | toggle perfore server check when opening files. | +| ~SPC p 4 u~ | create or edit user specification | +| ~SPC p 4 U~ | list perforce users | +| ~SPC p 4 v~ | emacs perforce integration version | +| ~SPC p 4 V~ | p4 blame | +| ~SPC p 4 w~ | show how file names are mapped by client view | +| ~SPC p 4 x~ | delete a file from the depot | +| ~SPC p 4 X~ | mark jobs done by specific CL | +| ~SPC p 4 z~ | p4-reconcile | +| ~SPC p 4 =~ | p4 diff | +| ~SPC p 4 +~ | p4 diff on all opened files | +| ~SPC p 4 -~ | p4 ediff | diff --git a/layers/+source-control/perforce/img/p4.png b/layers/+source-control/perforce/img/p4.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaaf05740615170c688b92859877d01343a2c54 GIT binary patch literal 30850 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq perforce-packages '(p4)) + +(defun perforce/init-p4 () + (use-package p4 + :commands (p4-add + p4-branch + p4-branches + p4-client + p4-changes + p4-diff2 + p4-describe + p4-edit + p4-reopen + p4-depot-find-file + p4-filelog + p4-files + p4-get-client-name + p4-update + p4-help + p4-have + p4-info + p4-integ + p4-job + p4-jobs + p4-label + p4-labels + p4-labelsync + p4-move + p4-opened + p4-print + p4-set-p4-port + quit-window + p4-revert + p4-refresh + p4-resolve + p4-status + p4-submit + p4-toggle-vc-mode + p4-user + p4-users + p4-version + p4-annotate + p4-where + p4-delete + p4-fix + p4-reconcile + p4-diff + p4-diff-all-opened + p4-ediff) + :init + (progn + (spacemacs/declare-prefix "p4" "perforce") + (spacemacs/set-leader-keys + "p4a" 'p4-add + "p4b" 'p4-branch + "p4B" 'p4-branches + "p4c" 'p4-client + "p4C" 'p4-changes + "p4d" 'p4-diff2 + "p4D" 'p4-describe + "p4e" 'p4-edit + "p4E" 'p4-reopen + "p4@" 'p4-depot-find-file + "p4f" 'p4-filelog + "p4F" 'p4-files + "p4G" 'p4-get-client-name + "p4g" 'p4-update + "p4h" 'p4-help + "p4H" 'p4-have + "p4i" 'p4-info + "p4I" 'p4-integ + "p4j" 'p4-job + "p4J" 'p4-jobs + "p4l" 'p4-label + "p4L" 'p4-labels + "p4:" 'p4-labelsync + "p4m" 'p4-move + "p4o" 'p4-opened + "p4p" 'p4-print + "p4P" 'p4-set-p4-port + "p4q" 'quit-window + "p4r" 'p4-revert + "p4R" 'p4-refresh + "p4y" 'p4-resolve + "p4s" 'p4-status + "p4S" 'p4-submit + "p4t" 'p4-toggle-vc-mode + "p4u" 'p4-user + "p4U" 'p4-users + "p4v" 'p4-version + "p4V" 'p4-annotate + "p4w" 'p4-where + "p4x" 'p4-delete + "p4X" 'p4-fix + "p4z" 'p4-reconcile + "p4=" 'p4-diff + "p4+" 'p4-diff-all-opened + "p4-" 'p4-ediff)))) diff --git a/layers/+source-control/version-control/README.org b/layers/+source-control/version-control/README.org new file mode 100644 index 0000000..3bb2bfc --- /dev/null +++ b/layers/+source-control/version-control/README.org @@ -0,0 +1,88 @@ +#+TITLE: Version-Control layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#configuration][Configuration]] + - [[#differences-between-margin-programs][Differences between margin programs]] + - [[#key-bindings][Key Bindings]] + - [[#version-control-transient-state][Version Control Transient-state]] + +* Description +This layers adds general configuration for [[http://www.gnu.org/software/emacs/manual/html_node/emacs/Version-Control.html][Emacs VC]]. +It should work with all VC backends such as Git, Mercurial, Bazaar, SVN, etc... + +** Features +- highlights uncommitted changes in the fringe or margin with [[https://github.com/dgutov/diff-hl][diff-hl]], +git-gutter, or git-gutter+ +- adds vcs transient-state ~SPC g.~ to allow quick navigation and modification of +buffer hunks. + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =version-control= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Configuration +You can choose the package to facilitate the diff transient-state and show margins +by setting =version-control-diff-tool= + +#+BEGIN_SRC emacs-lisp +'(version-control :variables + version-control-diff-tool 'diff-hl) +#+END_SRC + +To automatically enable diff margins in all buffers, set +=version-control-global-margin= + +#+BEGIN_SRC emacs-lisp +'(version-control :variables + version-control-global-margin t) +#+END_SRC + +** Differences between margin programs +This layer contains generalized mappings for three diff margin packages: +diff-hl, git-gutter, and git-gutter+. + +There are some differences between packages that might have some people prefer +one over the other: + +| Feature | diff-hl | git-gutter | git-gutter+ | +|-------------------------------------+---------+------------+-------------| +| Show in fringe | X | X | X | +| Extended VCS support (e.g. hg, svn) | X | X | | +| Stage hunks from buffer | | X | X | +| Dired support | X | | | + +* Key Bindings + +| Key Binding | Description | +|-------------+---------------------------------| +| ~SPC g .~ | version control transient-state | +| ~SPC T d~ | toggle diff margins | +| ~SPC T C-d~ | toggle diff margins globally | + +** Version Control Transient-state + +| Key Binding | Description | +|-------------+------------------------------| +| ~SPC g . h~ | Show diff of hunk | +| ~SPC g . n~ | Next hunk | +| ~SPC g . N~ | Previous hunk | +| ~SPC g . p~ | Previous hunk | +| ~SPC g . r~ | Revert hunk | +| ~SPC g . s~ | Stage hunk | +| ~SPC g . t~ | Toggle margin indicators | +| ~SPC g . w~ | Stage file | +| ~SPC g . u~ | Unstage file | +| ~SPC g . d~ | Repo diff popup | +| ~SPC g . D~ | Show diffs of unstaged hunks | +| ~SPC g . c~ | Commit with popup | +| ~SPC g . C~ | Commit | +| ~SPC g . P~ | Push repo with popup | +| ~SPC g . f~ | Fetch for repo with popup | +| ~SPC g . F~ | Pull repo with popup | +| ~SPC g . l~ | Show repo log | diff --git a/layers/+source-control/version-control/config.el b/layers/+source-control/version-control/config.el new file mode 100644 index 0000000..25f5903 --- /dev/null +++ b/layers/+source-control/version-control/config.el @@ -0,0 +1,75 @@ +;;; config.el --- Version Control configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar version-control-global-margin t + "If non-nil, will show diff margins globally.") + +(defvar version-control-diff-tool 'git-gutter+ + "Options are `git-gutter', `git-gutter+', and `diff-hl' to show +version-control markers.") + +;; unchanged face +(defface git-gutter+-unchanged + '((t (:background "yellow"))) + "face for unchanged lines" + :group 'git-gutter+) +(defface git-gutter:unchanged + '((t (:background "yellow"))) + "face for unchanged lines" + :group 'git-gutter+) + +;; change face +(defface git-gutter+-modified + '((t (:foreground "magenta" :weight bold))) + "face for modified lines" + :group 'git-gutter+) +(defface git-gutter:modified + '((t (:foreground "magenta" :weight bold))) + "face for modified lines" + :group 'git-gutter+) +(defface diff-hl-change + '((default :foreground "blue3") + (((class color) (min-colors 88) (background light)) + :background "#ddddff") + (((class color) (min-colors 88) (background dark)) + :background "#333355")) + "Face used to highlight changed lines." + :group 'diff-hl) + +;; added face +(defface git-gutter+-added + '((t (:foreground "green" :weight bold))) + "face for added lines" + :group 'git-gutter+) +(defface git-gutter:added + '((t (:foreground "green" :weight bold))) + "face for added lines" + :group 'git-gutter+) +(defface diff-hl-insert + '((default :inherit diff-added) + (((class color)) :foreground "green4")) + "Face used to highlight inserted lines." + :group 'diff-hl) + +;; deleted face +(defface git-gutter+-deleted + '((t (:foreground "red" :weight bold))) + "face for deleted lines" + :group 'git-gutter+) +(defface git-gutter:deleted + '((t (:foreground "red" :weight bold))) + "face for deleted lines" + :group 'git-gutter+) +(defface diff-hl-delete + '((default :inherit diff-removed) + (((class color)) :foreground "red3")) + "Face used to highlight deleted lines." + :group 'diff-hl) diff --git a/layers/+source-control/version-control/funcs.el b/layers/+source-control/version-control/funcs.el new file mode 100644 index 0000000..9cd72c8 --- /dev/null +++ b/layers/+source-control/version-control/funcs.el @@ -0,0 +1,125 @@ +;;; funcs.el --- Version control functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs/vcs-next-hunk () + (interactive) + (let ((current-prefix-arg t)) + (call-interactively + (cl-case version-control-diff-tool + (diff-hl 'diff-hl-next-hunk) + (git-gutter 'git-gutter:next-hunk) + (git-gutter+ 'git-gutter+-next-hunk))))) + +(defun spacemacs/vcs-previous-hunk () + (interactive) + (let ((current-prefix-arg t)) + (call-interactively + (cl-case version-control-diff-tool + (diff-hl 'diff-hl-previous-hunk) + (git-gutter 'git-gutter:previous-hunk) + (git-gutter+ 'git-gutter+-previous-hunk))))) + +(defun spacemacs/vcs-revert-hunk () + (interactive) + (let ((current-prefix-arg t)) + (call-interactively + (cl-case version-control-diff-tool + (diff-hl 'diff-hl-revert-hunk) + (git-gutter 'git-gutter:revert-hunk) + (git-gutter+ 'git-gutter+-revert-hunks))))) + +(defun spacemacs/vcs-stage-hunk () + (interactive) + (if (eq 'diff-hl version-control-diff-tool) + (message "Staging not available") + (let ((current-prefix-arg t)) + (call-interactively + (cl-case version-control-diff-tool + (git-gutter 'git-gutter:stage-hunk) + (git-gutter+ 'git-gutter+-stage-hunks)))))) + +(defun spacemacs/vcs-show-hunk () + (interactive) + (let ((current-prefix-arg t)) + (call-interactively + (cl-case version-control-diff-tool + (diff-hl 'diff-hl-diff-goto-hunk) + (git-gutter 'git-gutter:popup-hunk) + (git-gutter+ 'git-gutter+-show-hunk-inline-at-point))))) + +(defun spacemacs/vcs-enable-margin () + (interactive) + (let ((current-prefix-arg t)) + (call-interactively + (cl-case version-control-diff-tool + (diff-hl 'diff-hl-mode) + (git-gutter 'git-gutter-mode) + (git-gutter+ 'git-gutter+-mode))))) + +(defun spacemacs/vcs-disable-margin () + (interactive) + (let ((current-prefix-arg nil)) + (call-interactively + (cl-case version-control-diff-tool + (diff-hl 'diff-hl-mode) + (git-gutter 'git-gutter-mode) + (git-gutter+ 'git-gutter+-mode))))) + +(defun spacemacs/vcs-enable-margin-globally () + (interactive) + (let ((current-prefix-arg t)) + (call-interactively + (cl-case version-control-diff-tool + (diff-hl 'global-diff-hl-mode) + (git-gutter 'global-git-gutter-mode) + (git-gutter+ 'global-git-gutter+-mode))))) + +(defun spacemacs/vcs-disable-margin-globally () + (interactive) + (let ((current-prefix-arg nil)) + (call-interactively + (cl-case version-control-diff-tool + (diff-hl 'global-diff-hl-mode) + (git-gutter 'global-git-gutter-mode) + (git-gutter+ 'global-git-gutter+-mode))))) + +(defun spacemacs/vcs-show-help () + (interactive) + (setq version-control--ms-doc-toggle + (logxor version-control--ms-doc-toggle 1))) + +(defun spacemacs/vcs-margin-p () + (interactive) + (cl-case version-control-diff-tool + (diff-hl diff-hl-mode) + (git-gutter (bound-and-true-p git-gutter-mode)) + (git-gutter+ (bound-and-true-p git-gutter+-mode)))) + +(defun spacemacs/vcs-margin-global-p () + (interactive) + (cl-case version-control-diff-tool + (diff-hl global-diff-hl-mode) + (git-gutter global-git-gutter-mode) + (git-gutter+ global-git-gutter+-mode))) + +(spacemacs|add-toggle version-control-margin + :status (spacemacs/vcs-margin-p) + :on (spacemacs/vcs-enable-margin) + :off (spacemacs/vcs-disable-margin) + :documentation "Enable diff margins." + :evil-leader "Td") + +(spacemacs|add-toggle version-control-margin-globally + :status (spacemacs/vcs-margin-global-p) + :on (spacemacs/vcs-enable-margin-globally) + :off (spacemacs/vcs-disable-margin-globally) + :documentation "Enable diff margins globally." + :evil-leader "T C-d") diff --git a/layers/+source-control/version-control/keybindings.el b/layers/+source-control/version-control/keybindings.el new file mode 100644 index 0000000..c903506 --- /dev/null +++ b/layers/+source-control/version-control/keybindings.el @@ -0,0 +1,42 @@ +;;; keybindings.el --- Version control keybindings +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|define-transient-state vcs + :title "VCS Transient State" + :doc " + Hunk Commands^^^^^^ Magit Commands +----------------------------^^^^^^ ------------------------------------------ + [_n_]^^^^ next hunk [_w_/_u_]^^ stage/unstage in current file + [_N_/_p_]^^ previous hunk [_c_/_C_]^^ commit with popup/direct commit + [_r_/_s_/_h_] revert/stage/show [_f_/_F_/_P_] fetch/pull/push popup + [_t_]^^^^ toggle diff signs [_l_/_D_]^^ log/diff popup" + :on-enter (spacemacs/vcs-enable-margin) + :bindings + ("C" magit-commit :exit t) + ("d" magit-ediff-popup :exit t) + ("D" magit-diff-unstaged :exit t) + ("F" magit-pull-popup :exit t) + ("P" magit-push-popup :exit t) + ("c" magit-commit-popup :exit t) + ("f" magit-fetch-popup :exit t) + ("l" magit-log-popup :exit t) + ("u" magit-unstage-file) + ("w" magit-stage-file) + ("n" spacemacs/vcs-next-hunk) + ("N" spacemacs/vcs-previous-hunk) + ("p" spacemacs/vcs-previous-hunk) + ("r" spacemacs/vcs-revert-hunk) + ("s" spacemacs/vcs-stage-hunk) + ("h" spacemacs/vcs-show-hunk) + ("t" spacemacs/toggle-version-control-margin) + ("q" nil :exit t)) +(spacemacs/set-leader-keys "g." 'spacemacs/vcs-transient-state/body) + diff --git a/layers/+source-control/version-control/packages.el b/layers/+source-control/version-control/packages.el new file mode 100644 index 0000000..8951882 --- /dev/null +++ b/layers/+source-control/version-control/packages.el @@ -0,0 +1,168 @@ +;;; packages.el --- Source Control Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq version-control-packages + '( + diff-mode + diff-hl + evil-unimpaired + git-gutter + git-gutter+ + git-gutter-fringe + git-gutter-fringe+ + )) + +(defun version-control/init-diff-mode () + (use-package diff-mode + :defer t + :config + (evilified-state-evilify diff-mode diff-mode-map + "j" 'diff-hunk-next + "k" 'diff-hunk-prev))) + +(defun version-control/init-diff-hl () + (use-package diff-hl + :init + (progn + (setq diff-hl-side 'left) + (when (eq version-control-diff-tool 'diff-hl) + (when (configuration-layer/package-usedp 'magit) + (add-hook 'magit-post-refresh-hook 'diff-hl-magit-post-refresh)) + (when version-control-global-margin + (global-diff-hl-mode)) + (diff-hl-margin-mode) + (spacemacs|do-after-display-system-init + (setq diff-hl-side 'right) + (diff-hl-margin-mode -1)))))) + +(defun version-control/post-init-evil-unimpaired () + (define-key evil-normal-state-map (kbd "[ h") 'spacemacs/vcs-previous-hunk) + (define-key evil-normal-state-map (kbd "] h") 'spacemacs/vcs-next-hunk)) + +(defun version-control/init-git-gutter () + (use-package git-gutter + :commands (global-git-gutter-mode git-gutter-mode) + :init + (progn + ;; If you enable global minor mode + (when (and (eq version-control-diff-tool 'git-gutter) + version-control-global-margin) + (global-git-gutter-mode t)) + ;; If you would like to use git-gutter.el and linum-mode + (if dotspacemacs-line-numbers + (git-gutter:linum-setup)) + (setq git-gutter:update-interval 2 + git-gutter:modified-sign " " + git-gutter:added-sign "+" + git-gutter:deleted-sign "-" + git-gutter:diff-option "-w" + git-gutter:hide-gutter t + git-gutter:ask-p nil + git-gutter:verbosity 0 + git-gutter:handled-backends '(git hg bzr svn) + git-gutter:hide-gutter t)) + :config + (spacemacs|hide-lighter git-gutter-mode))) + +(defun version-control/init-git-gutter-fringe () + (use-package git-gutter-fringe + :commands git-gutter-mode + :init + (progn + (spacemacs|do-after-display-system-init + (with-eval-after-load 'git-gutter + (require 'git-gutter-fringe))) + (setq git-gutter-fr:side 'right-fringe)) + :config + (progn + ;; custom graphics that works nice with half-width fringes + (fringe-helper-define 'git-gutter-fr:added nil + "..X...." + "..X...." + "XXXXX.." + "..X...." + "..X...." + ) + (fringe-helper-define 'git-gutter-fr:deleted nil + "......." + "......." + "XXXXX.." + "......." + "......." + ) + (fringe-helper-define 'git-gutter-fr:modified nil + "..X...." + ".XXX..." + "XX.XX.." + ".XXX..." + "..X...." + )))) + +(defun version-control/init-git-gutter+ () + (use-package git-gutter+ + :commands (global-git-gutter+-mode git-gutter+-mode) + :init + (progn + ;; If you enable global minor mode + (when (and (eq version-control-diff-tool 'git-gutter+) + version-control-global-margin) + (add-hook 'magit-pre-refresh-hook 'git-gutter+-refresh) + (global-git-gutter+-mode t)) + (setq + git-gutter+-modified-sign " " + git-gutter+-added-sign "+" + git-gutter+-deleted-sign "-" + git-gutter+-diff-option "-w" + git-gutter+-hide-gutter t)) + ;; identify magit changes + :config + (spacemacs|hide-lighter git-gutter+-mode) + ;; (set-face-foreground 'git-gutter+-modified "black") + ;; (set-face-foreground 'git-gutter+-added "black") + ;; (set-face-foreground 'git-gutter+-deleted "black") + ;; (set-face-background 'git-gutter+-modified "orange1") + ;; (set-face-background 'git-gutter+-added "green4") + ;; (set-face-background 'git-gutter+-deleted "red3") + )) + +(defun version-control/init-git-gutter-fringe+ () + (use-package git-gutter-fringe+ + :commands git-gutter+-mode + :init + (progn + (spacemacs|do-after-display-system-init + (with-eval-after-load 'git-gutter+ + (require 'git-gutter-fringe+))) + (setq git-gutter-fr+-side 'right-fringe)) + :config + (progn + ;; custom graphics that works nice with half-width fringes + (fringe-helper-define 'git-gutter-fr+-added nil + "..X...." + "..X...." + "XXXXX.." + "..X...." + "..X...." + ) + (fringe-helper-define 'git-gutter-fr+-deleted nil + "......." + "......." + "XXXXX.." + "......." + "......." + ) + (fringe-helper-define 'git-gutter-fr+-modified nil + "..X...." + ".XXX..." + "XX.XX.." + ".XXX..." + "..X...." + )))) diff --git a/layers/+spacemacs/spacemacs-completion/config.el b/layers/+spacemacs/spacemacs-completion/config.el new file mode 100644 index 0000000..faa3128 --- /dev/null +++ b/layers/+spacemacs/spacemacs-completion/config.el @@ -0,0 +1,30 @@ +;;; config.el --- Spacemacs Completion Layer configuration File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; Helm + +(defface spacemacs-helm-navigation-ms-face + `((t :background ,(face-attribute 'error :foreground) + :foreground "black")) + "Face for helm header when helm transient-state is activated." + :group 'spacemacs) + +;; from https://www.reddit.com/r/emacs/comments/2z7nbv/lean_helm_window/ +(with-eval-after-load 'helm + (defvar helm-source-header-default-background + (face-attribute 'helm-source-header :background)) + (defvar helm-source-header-default-foreground + (face-attribute 'helm-source-header :foreground)) + (defvar helm-source-header-default-box + (face-attribute 'helm-source-header :box)) + (defvar helm-source-header-default-height + (face-attribute 'helm-source-header :height) )) diff --git a/layers/+spacemacs/spacemacs-completion/funcs.el b/layers/+spacemacs/spacemacs-completion/funcs.el new file mode 100644 index 0000000..0f64588 --- /dev/null +++ b/layers/+spacemacs/spacemacs-completion/funcs.el @@ -0,0 +1,213 @@ +;;; funcs.el --- Spacemacs Completion Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + + +;; Helm + +(defun spacemacs/helm-faces () + "Describe face." + (interactive) + (require 'helm-elisp) + (let ((default (or (face-at-point) (thing-at-point 'symbol)))) + (helm :sources (helm-def-source--emacs-faces + (format "%s" (or default "default"))) + :buffer "*helm faces*"))) + +(defun spacemacs//hide-cursor-in-helm-buffer () + "Hide the cursor in helm buffers." + (with-helm-buffer + (setq cursor-in-non-selected-windows nil))) + +(defun spacemacs//set-dotted-directory () + "Set the face of diretories for `.' and `..'" + (set-face-attribute 'helm-ff-dotted-directory + nil + :foreground nil + :background nil + :inherit 'helm-ff-directory)) + +(defun spacemacs//helm-make-source (f &rest args) + "Function to be used as advice to activate fuzzy matching for all sources." + (let ((source-type (cadr args)) + (props (cddr args))) + (unless (eq source-type 'helm-source-async) + (plist-put props :fuzzy-match (eq 'always dotspacemacs-helm-use-fuzzy)))) + (apply f args)) + +;; Helm Header line + +(defun spacemacs//helm-hide-minibuffer-maybe () + "Hide minibuffer in Helm session if we use the header line as input field." + (when (with-helm-buffer helm-echo-input-in-header-line) + (let ((ov (make-overlay (point-min) (point-max) nil nil t))) + (overlay-put ov 'window (selected-window)) + (overlay-put ov 'face + (let ((bg-color (face-background 'default nil))) + `(:background ,bg-color :foreground ,bg-color))) + (setq-local cursor-type nil)))) + +(defun helm-toggle-header-line () + "Hide the `helm' header if there is only one source." + (when dotspacemacs-helm-no-header + (if (> (length helm-sources) 1) + (set-face-attribute + 'helm-source-header + nil + :foreground helm-source-header-default-foreground + :background helm-source-header-default-background + :box helm-source-header-default-box + :height helm-source-header-default-height) + (set-face-attribute + 'helm-source-header + nil + :foreground (face-attribute 'default :background) + :background (face-attribute 'default :background) + :box nil + :height 0.1)))) + +;; helm navigation on hjkl +(defun spacemacs//helm-hjkl-navigation (style) + "Set navigation on 'hjkl' for the given editing STYLE." + (cond + ((or (eq 'vim style) + (and (eq 'hybrid style) + hybrid-mode-enable-hjkl-bindings)) + (define-key helm-map (kbd "C-j") 'helm-next-line) + (define-key helm-map (kbd "C-k") 'helm-previous-line) + (define-key helm-map (kbd "C-h") 'helm-next-source) + (define-key helm-map (kbd "C-S-h") 'describe-key) + (define-key helm-map (kbd "C-l") (kbd "RET")) + (with-eval-after-load 'helm-files + (dolist (keymap (list helm-find-files-map helm-read-file-map)) + (define-key keymap (kbd "C-l") 'helm-execute-persistent-action) + (define-key keymap (kbd "C-h") 'helm-find-files-up-one-level) + ;; rebind `describe-key' for convenience + (define-key keymap (kbd "C-S-h") 'describe-key)))) + (t + (define-key helm-map (kbd "C-j") 'helm-execute-persistent-action) + (define-key helm-map (kbd "C-k") 'helm-delete-minibuffer-contents) + (define-key helm-map (kbd "C-h") nil) + (define-key helm-map + (kbd "C-l") 'helm-recenter-top-bottom-other-window)))) + +;; Helm Window position + +(defvar spacemacs-helm-display-help-buffer-regexp '("*.*Helm.*Help.**")) +(defvar spacemacs-helm-display-buffer-regexp + `("*.*helm.**" + (display-buffer-in-side-window) + (inhibit-same-window . t) + (side . ,dotspacemacs-helm-position) + (window-width . 0.6) + (window-height . 0.4))) +(defvar spacemacs-display-buffer-alist nil) + +(defun spacemacs//display-helm-window (buffer) + "Display the Helm window respecting `dotspacemacs-helm-position'." + (let ((display-buffer-alist + (list spacemacs-helm-display-help-buffer-regexp + ;; this or any specialized case of Helm buffer must be + ;; added AFTER `spacemacs-helm-display-buffer-regexp'. + ;; Otherwise, `spacemacs-helm-display-buffer-regexp' will + ;; be used before + ;; `spacemacs-helm-display-help-buffer-regexp' and display + ;; configuration for normal Helm buffer is applied for helm + ;; help buffer, making the help buffer unable to be + ;; displayed. + spacemacs-helm-display-buffer-regexp))) + (helm-default-display-buffer buffer))) + +(defun spacemacs//unprevent-minibuffer-escape () + "Workaround for a helm-evil incompatibility. +See https://github.com/syl20bnr/spacemacs/issues/3700" + (when helm-prevent-escaping-from-minibuffer + (define-key evil-motion-state-map + [down-mouse-1] 'evil-mouse-drag-region))) + +(defun spacemacs//prevent-minibuffer-escape () + "Workaround for a helm-evil incompatibility. +See https://github.com/syl20bnr/spacemacs/issues/3700" + (when helm-prevent-escaping-from-minibuffer + (define-key evil-motion-state-map [down-mouse-1] nil))) + +;; Helm Transient state + +(defun spacemacs//define-helm-action-functions () + "Define Spacemacs functions to pick actions." + (dotimes (n 10) + (let ((func (intern (format "spacemacs/helm-action-%d" n))) + (doc (format "Select helm action #%d" n))) + (eval `(defun ,func () + ,doc + (intern) + (helm-select-nth-action ,(1- n))))))) + +(defun spacemacs/helm-ts-edit () + "Switch in edit mode depending on the current helm buffer." + (interactive) + (cond + ((string-equal "*helm-ag*" helm-buffer) + (helm-ag-edit)))) + +(defun spacemacs//helm-navigation-ts-on-enter () + "Initialization of helm transient-state." + ;; faces + (spacemacs//helm-navigation-ts-set-face) + (setq spacemacs--helm-navigation-ts-face-cookie-minibuffer + (face-remap-add-relative + 'minibuffer-prompt + 'spacemacs-helm-navigation-ts-face))) + +(defun spacemacs//helm-navigation-ts-set-face () + "Set the face for helm header in helm navigation transient-state" + (with-helm-window + (setq spacemacs--helm-navigation-ts-face-cookie-header + (face-remap-add-relative + 'helm-header + 'spacemacs-helm-navigation-ts-face)))) + +(defun spacemacs//helm-navigation-ts-on-exit () + "Action to perform when exiting helm transient-state." + (with-helm-window + (face-remap-remove-relative + spacemacs--helm-navigation-ts-face-cookie-header)) + (face-remap-remove-relative + spacemacs--helm-navigation-ts-face-cookie-minibuffer)) + +(defun spacemacs/helm-transient-state-select-action () + "Display the Helm actions page." + (interactive) + (call-interactively 'helm-select-action) + (spacemacs//helm-navigation-ts-set-face)) + + +;; Ivy + +(defun spacemacs//ivy-hjkl-navigation (style) + "Set navigation on 'hjkl' for the given editing STYLE." + (cond + ((or (eq 'vim style) + (and (eq 'hybrid style) + hybrid-mode-enable-hjkl-bindings)) + (define-key ivy-minibuffer-map (kbd "C-j") 'ivy-next-line) + (define-key ivy-minibuffer-map (kbd "C-k") 'ivy-previous-line) + (define-key ivy-minibuffer-map (kbd "C-h") (kbd "DEL")) + ;; Move C-h to C-S-h + (define-key ivy-minibuffer-map (kbd "C-S-h") help-map) + (define-key ivy-minibuffer-map (kbd "C-l") 'ivy-alt-done) + (define-key ivy-minibuffer-map (kbd "") + 'minibuffer-keyboard-quit)) + (t + (define-key ivy-minibuffer-map (kbd "C-j") 'ivy-alt-done) + (define-key ivy-minibuffer-map (kbd "C-k") 'ivy-kill-line) + (define-key ivy-minibuffer-map (kbd "C-h") nil) + (define-key ivy-minibuffer-map (kbd "C-l") nil)))) diff --git a/layers/+spacemacs/spacemacs-completion/packages.el b/layers/+spacemacs/spacemacs-completion/packages.el new file mode 100644 index 0000000..fff2ecb --- /dev/null +++ b/layers/+spacemacs/spacemacs-completion/packages.el @@ -0,0 +1,361 @@ +;;; packages.el --- Spacemacs Completion Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-completion-packages + '( + (default-helm-config :location built-in) + (default-ivy-config :location built-in) + (ido :location built-in) + ido-vertical-mode + )) + +(defun spacemacs-completion/init-default-helm-config () + (setq helm-prevent-escaping-from-minibuffer t + helm-bookmark-show-location t + helm-display-header-line nil + helm-split-window-in-side-p t + helm-always-two-windows t + helm-echo-input-in-header-line t + helm-imenu-execute-action-at-once-if-one nil + helm-org-format-outline-path t + helm-display-function 'spacemacs//display-helm-window) + (with-eval-after-load 'helm + (spacemacs|hide-lighter helm-mode) + (when (and dotspacemacs-helm-resize + (or (eq dotspacemacs-helm-position 'bottom) + (eq dotspacemacs-helm-position 'top))) + (setq helm-autoresize-min-height 10) + (helm-autoresize-mode 1)) + ;; setup hooks + (add-hook 'helm-minibuffer-set-up-hook + 'spacemacs//helm-hide-minibuffer-maybe) + (add-hook 'helm-before-initialize-hook 'helm-toggle-header-line) + (spacemacs/add-to-hook 'helm-after-initialize-hook + '(spacemacs//prevent-minibuffer-escape + spacemacs//hide-cursor-in-helm-buffer)) + (add-hook 'helm-cleanup-hook #'spacemacs//unprevent-minibuffer-escape) + (add-hook 'helm-find-files-before-init-hook + 'spacemacs//set-dotted-directory) + (add-hook 'spacemacs-editing-style-hook 'spacemacs//helm-hjkl-navigation) + ;; setup advices + ;; fuzzy matching for all the sourcess + (unless (eq dotspacemacs-helm-use-fuzzy 'source) + (advice-add 'helm-make-source :around #'spacemacs//helm-make-source)) + + (defadvice spacemacs/post-theme-init + (after spacemacs/helm-header-line-adv activate) + "Update defaults for `helm' header line whenever a new theme is loaded" + ;; TODO factorize face definition with those defined in config.el + (setq helm-source-header-default-foreground + (face-attribute 'helm-source-header :foreground) + helm-source-header-default-background + (face-attribute 'helm-source-header :background) + helm-source-header-default-box + (face-attribute 'helm-source-header :box) + helm-source-header-default-height + (face-attribute 'helm-source-header :height))) + ;; ensure that the correct bindings are set at startup + (spacemacs//helm-hjkl-navigation dotspacemacs-editing-style) + ;; Transient state + (spacemacs//define-helm-action-functions) + (spacemacs|define-transient-state helm-navigation + :title "Helm Transient State" + :doc " + [_j_/_k_] next/prev candidate [_v_]^^ persistent action [_e_]^^ edit occurrences + [_h_/_l_] prev/next source [_1_.._0_] action 1..10 [_t_/_T_] toggle visible/all mark + [_q_]^^ quit [_a_]^^ action selection pg" + :foreign-keys run + :on-enter (spacemacs//helm-navigation-ts-on-enter) + :on-exit (spacemacs//helm-navigation-ts-on-exit) + :bindings + ("1" spacemacs/helm-action-1 :exit t) + ("2" spacemacs/helm-action-2 :exit t) + ("3" spacemacs/helm-action-3 :exit t) + ("4" spacemacs/helm-action-4 :exit t) + ("5" spacemacs/helm-action-5 :exit t) + ("6" spacemacs/helm-action-6 :exit t) + ("7" spacemacs/helm-action-7 :exit t) + ("8" spacemacs/helm-action-8 :exit t) + ("9" spacemacs/helm-action-9 :exit t) + ("0" spacemacs/helm-action-10 :exit t) + ("" helm-select-action :exit t) + ("TAB" helm-select-action :exit t) + ("" helm-maybe-exit-minibuffer :exit t) + ;; ("?" nil :doc (spacemacs//helm-navigation-ts-full-doc)) + ("a" spacemacs/helm-transient-state-select-action) + ("e" spacemacs/helm-ts-edit) + ("g" helm-beginning-of-buffer) + ("G" helm-end-of-buffer) + ("h" helm-previous-source) + ("j" helm-next-line) + ("k" helm-previous-line) + ("l" helm-next-source) + ("q" nil :exit t) + ("t" helm-toggle-visible-mark) + ("T" helm-toggle-all-marks) + ("v" helm-execute-persistent-action)) + (define-key helm-map (kbd "M-SPC") + 'spacemacs/helm-navigation-transient-state/body) + (define-key helm-map (kbd "s-M-SPC") + 'spacemacs/helm-navigation-transient-state/body) + ;; Swap default TAB and C-z commands. + ;; For GUI. + (with-eval-after-load 'helm-files + (define-key helm-map (kbd "") 'helm-execute-persistent-action) + (define-key helm-find-files-map + (kbd "S-") 'helm-find-files-up-one-level) + (define-key helm-find-files-map + (kbd "") 'helm-find-files-up-one-level) + ;; For terminal. + (define-key helm-map (kbd "TAB") 'helm-execute-persistent-action) + (define-key helm-find-files-map + (kbd "S-TAB") 'helm-find-files-up-one-level) + (define-key helm-map (kbd "C-z") 'helm-select-action)))) + +(defun spacemacs-completion/init-default-ivy-config () + (with-eval-after-load 'ivy + (setq ivy-height 15 + ivy-re-builders-alist '((t . ivy--regex-ignore-order))) + (spacemacs|hide-lighter ivy-mode) + ;; setup hooks + (add-hook 'spacemacs-editing-style-hook 'spacemacs//ivy-hjkl-navigation) + ;; key bindings + ;; ensure that the correct bindings are set at startup + (spacemacs//ivy-hjkl-navigation dotspacemacs-editing-style) + ;; Transient state + ;; ivy-hydra disabled for now, waiting to see how the dependency management + ;; evolves upstream + ;; (require 'ivy-hydra) + (spacemacs|define-transient-state ivy + :doc " + Move/Resize^^^^ | Select Action^^^^ | Call^^ | Cancel^^ | Toggles +--^-^-^-^-------------|--^-^-^-^------------|--^---^-----------|--^-^---------|--------------------- + [_j_/_k_] by line | [_s_/_w_] next/prev | [_RET_] & done | [_i_] & ins | [_C_] calling: %s(if ivy-calling \"on\" \"off\") + [_g_/_G_] first/last | [_a_]^ ^ list all | [_TAB_] alt done | [_q_] & quit | [_m_] matcher: %s(ivy--matcher-desc) + [_d_/_u_] pg down/up | ^ ^ ^ ^ | [_c_] & cont | ^ ^ | [_f_] case-fold: %`ivy-case-fold-search + [_<_/_>_] resize | ^ ^ ^ ^ | [_o_] occur | ^ ^ | [_t_] truncate: %`truncate-lines + [_h_/_l_] out/in dir | ^ ^ ^ ^ | ^ ^ | ^ ^ | ^ ^ + +Current Action: %s(ivy-action-name) +" + :foreign-keys run + :bindings + ;; arrows + ("j" ivy-next-line) + ("k" ivy-previous-line) + ("l" ivy-alt-done) + ("h" spacemacs/counsel-up-directory-no-error) + ("g" ivy-beginning-of-buffer) + ("G" ivy-end-of-buffer) + ("d" ivy-scroll-up-command) + ("u" ivy-scroll-down-command) + ;; actions + ("q" keyboard-escape-quit :exit t) + ("C-g" keyboard-escape-quit :exit t) + ("" keyboard-escape-quit :exit t) + ("i" nil) + ("C-o" nil) + ("TAB" ivy-alt-done :exit nil) + ;; ("C-j" ivy-alt-done :exit nil) + ;; ("d" ivy-done :exit t) + ("RET" ivy-done :exit t) + ("c" ivy-call) + ("C-m" ivy-done :exit t) + ("C" ivy-toggle-calling) + ("m" ivy-toggle-fuzzy) + (">" ivy-minibuffer-grow) + ("<" ivy-minibuffer-shrink) + ("w" ivy-prev-action) + ("s" ivy-next-action) + ("a" ivy-read-action) + ("t" (setq truncate-lines (not truncate-lines))) + ("f" ivy-toggle-case-fold) + ("o" ivy-occur :exit t)) + (define-key ivy-minibuffer-map "\C-o" 'spacemacs/ivy-transient-state/body) + )) + +(defun spacemacs-completion/init-ido () + (setq ido-save-directory-list-file + (concat spacemacs-cache-directory "ido.last") + ;; enable fuzzy matching + ido-enable-flex-matching t) + (ido-mode t)) + +(defun spacemacs-completion/init-ido-vertical-mode () + (use-package ido-vertical-mode + :init + (progn + (ido-vertical-mode t) + (defun spacemacs//ido-minibuffer-setup () + "Setup the minibuffer." + ;; Since ido is implemented in a while loop where each + ;; iteration setup a whole new minibuffer, we have to keep + ;; track of any activated ido navigation transient-state and force + ;; the reactivation at each iteration. + (when spacemacs--ido-navigation-ms-enabled + (spacemacs/ido-navigation-micro-state))) + (add-hook 'ido-minibuffer-setup-hook 'spacemacs//ido-minibuffer-setup) + + (defun spacemacs//ido-setup () + (when spacemacs--ido-navigation-ms-face-cookie-minibuffer + (face-remap-remove-relative + spacemacs--ido-navigation-ms-face-cookie-minibuffer)) + ;; be sure to wipe any previous transient-state flag + (setq spacemacs--ido-navigation-ms-enabled nil) + ;; overwrite the key bindings for ido vertical mode only + (define-key ido-completion-map (kbd "C-") 'ido-select-text) + ;; use M-RET in terminal + (define-key ido-completion-map "\M-\r" 'ido-select-text) + (define-key ido-completion-map (kbd "C-h") 'ido-delete-backward-updir) + (define-key ido-completion-map (kbd "C-j") 'ido-next-match) + (define-key ido-completion-map (kbd "C-k") 'ido-prev-match) + (define-key ido-completion-map (kbd "C-l") 'ido-exit-minibuffer) + (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-S-h") 'ido-prev-match-dir) + (define-key ido-completion-map (kbd "C-S-j") 'next-history-element) + (define-key ido-completion-map (kbd "C-S-k") 'previous-history-element) + (define-key ido-completion-map (kbd "C-S-l") 'ido-next-match-dir) + (define-key ido-completion-map (kbd "C-S-n") 'next-history-element) + (define-key ido-completion-map (kbd "C-S-p") 'previous-history-element) + ;; ido-other window maps + (define-key ido-completion-map (kbd "C-o") 'spacemacs/ido-invoke-in-other-window) + (define-key ido-completion-map (kbd "C-s") 'spacemacs/ido-invoke-in-vertical-split) + (define-key ido-completion-map (kbd "C-t") 'spacemacs/ido-invoke-in-new-frame) + (define-key ido-completion-map (kbd "C-v") 'spacemacs/ido-invoke-in-horizontal-split) + ;; more natural navigation keys: up, down to change current item + ;; left to go up dir + ;; right to open the selected item + (define-key ido-completion-map (kbd "") 'ido-prev-match) + (define-key ido-completion-map (kbd "") 'ido-next-match) + (define-key ido-completion-map (kbd "") 'ido-delete-backward-updir) + (define-key ido-completion-map (kbd "") 'ido-exit-minibuffer) + ;; initiate transient-state + (define-key ido-completion-map (kbd "M-SPC") 'spacemacs/ido-navigation-micro-state) + (define-key ido-completion-map (kbd "s-M-SPC") 'spacemacs/ido-navigation-micro-state) + ) + (add-hook 'ido-setup-hook 'spacemacs//ido-setup) + + (defun spacemacs/ido-invoke-in-other-window () + "signals ido mode to switch to (or create) another window after exiting" + (interactive) + (setq ido-exit-minibuffer-target-window 'other) + (ido-exit-minibuffer)) + + (defun spacemacs/ido-invoke-in-horizontal-split () + "signals ido mode to split horizontally and switch after exiting" + (interactive) + (setq ido-exit-minibuffer-target-window 'horizontal) + (ido-exit-minibuffer)) + + (defun spacemacs/ido-invoke-in-vertical-split () + "signals ido mode to split vertically and switch after exiting" + (interactive) + (setq ido-exit-minibuffer-target-window 'vertical) + (ido-exit-minibuffer)) + + (defun spacemacs/ido-invoke-in-new-frame () + "signals ido mode to create a new frame after exiting" + (interactive) + (setq ido-exit-minibuffer-target-window 'frame) + (ido-exit-minibuffer)) + + (defadvice ido-read-internal + (around ido-read-internal-with-minibuffer-other-window activate) + (let* (ido-exit-minibuffer-target-window + (this-buffer (current-buffer)) + (result ad-do-it)) + (cond + ((equal ido-exit-minibuffer-target-window 'other) + (if (= 1 (count-windows)) + (spacemacs/split-window-horizontally-and-switch) + (other-window 1))) + ((equal ido-exit-minibuffer-target-window 'horizontal) + (spacemacs/split-window-horizontally-and-switch)) + + ((equal ido-exit-minibuffer-target-window 'vertical) + (spacemacs/split-window-vertically-and-switch)) + ((equal ido-exit-minibuffer-target-window 'frame) + (make-frame))) + ;; why? Some ido commands, such as textmate.el's + ;; textmate-goto-symbol don't switch the current buffer + (switch-to-buffer this-buffer) + result)) + + (defvar spacemacs--ido-navigation-ms-enabled nil + "Flag which is non nil when ido navigation transient-state is enabled.") + + (defvar spacemacs--ido-navigation-ms-face-cookie-minibuffer nil + "Cookie pointing to the local face remapping.") + + (defface spacemacs-ido-navigation-ms-face + `((t :background ,(face-attribute 'error :foreground) + :foreground "black" + :weight bold)) + "Face for ido minibuffer prompt when ido transient-state is activated." + :group 'spacemacs) + + (defun spacemacs//ido-navigation-ms-set-face () + "Set faces for ido navigation transient-state." + (setq spacemacs--ido-navigation-ms-face-cookie-minibuffer + (face-remap-add-relative + 'minibuffer-prompt + 'spacemacs-ido-navigation-ms-face))) + + (defun spacemacs//ido-navigation-ms-on-enter () + "Initialization of ido transient-state." + (setq spacemacs--ido-navigation-ms-enabled t) + (spacemacs//ido-navigation-ms-set-face)) + + (defun spacemacs//ido-navigation-ms-on-exit () + "Action to perform when exiting ido transient-state." + (face-remap-remove-relative + spacemacs--ido-navigation-ms-face-cookie-minibuffer)) + + (defun spacemacs//ido-navigation-ms-full-doc () + "Full documentation for ido navigation transient-state." + " + [?] display this help + [e] enter dired + [j] [k] next/previous match + [J] [K] sub/parent directory + [h] delete backward or parent directory + [l] select match + [n] [p] next/previous directory in history + [o] open in other window + [s] open in a new horizontal split + [t] open in other frame + [v] open in a new vertical split + [q] quit") + + (spacemacs|define-transient-state ido-navigation + :title "ido Transient State" + :foreign-keys run + :on-enter (spacemacs//ido-navigation-ms-on-enter) + :on-exit (spacemacs//ido-navigation-ms-on-exit) + :bindings + ;;("?" nil (spacemacs//ido-navigation-ms-full-doc)) + ("" ido-exit-minibuffer :exit t) + ("" nil :exit t) + ("e" ido-select-text :exit t) + ("h" ido-delete-backward-updir) + ("j" ido-next-match) + ("J" ido-next-match-dir) + ("k" ido-prev-match) + ("K" ido-prev-match-dir) + ("l" ido-exit-minibuffer :exit t) + ("n" ido-next-match-dir) + ("o" spacemacs/ido-invoke-in-other-window :exit t) + ("p" ido-prev-match-dir) + ("q" nil :exit t) + ("s" spacemacs/ido-invoke-in-vertical-split :exit t) + ("t" spacemacs/ido-invoke-in-new-frame :exit t) + ("v" spacemacs/ido-invoke-in-horizontal-split :exit t))))) diff --git a/layers/+spacemacs/spacemacs-editing-visual/packages.el b/layers/+spacemacs/spacemacs-editing-visual/packages.el new file mode 100644 index 0000000..05eabf7 --- /dev/null +++ b/layers/+spacemacs/spacemacs-editing-visual/packages.el @@ -0,0 +1,409 @@ +;;; packages.el --- Spacemacs Editing Visual Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-editing-visual-packages + '( + ;; default + adaptive-wrap + auto-highlight-symbol + column-enforce-mode + hide-comnt + highlight-indentation + highlight-numbers + highlight-parentheses + ;; waiting for an overlay bug to be fixed + ;; see https://github.com/syl20bnr/spacemacs/issues/2529 + (hl-anything :excluded t) + indent-guide + rainbow-delimiters + volatile-highlights + )) + +;; Initialization of packages + +(defun spacemacs-editing-visual/init-adaptive-wrap () + (use-package adaptive-wrap + :config + (progn + (add-hook 'visual-line-mode-hook 'adaptive-wrap-prefix-mode)))) + +(defun spacemacs-editing-visual/init-auto-highlight-symbol () + (use-package auto-highlight-symbol + :defer t + :init + (progn + (setq ahs-case-fold-search nil + ahs-default-range 'ahs-range-whole-buffer + ;; by default disable auto-highlight of symbol + ;; current symbol can always be highlighted with `SPC s h' + ahs-idle-timer 0 + ahs-idle-interval 0.25 + ahs-inhibit-face-list nil + spacemacs--symbol-highlight-transient-state-doc + " + %s [_n_] next [_N_/_p_] previous [_r_] change range [_R_] reset [_e_] iedit + %s [_d_/_D_] next/previous definition") + + ;; since we are creating our own maps, + ;; prevent the default keymap from getting created + (setq auto-highlight-symbol-mode-map (make-sparse-keymap)) + + (spacemacs|add-toggle automatic-symbol-highlight + :status (timerp ahs-idle-timer) + :on (progn + (auto-highlight-symbol-mode) + (setq ahs-idle-timer + (run-with-idle-timer ahs-idle-interval t + 'ahs-idle-function))) + :off (when (timerp ahs-idle-timer) + (auto-highlight-symbol-mode) + (cancel-timer ahs-idle-timer) + (setq ahs-idle-timer 0)) + :documentation "Automatic highlight of current symbol." + :evil-leader "tha") + (spacemacs/add-to-hooks 'auto-highlight-symbol-mode '(prog-mode-hook + markdown-mode-hook))) + :config + (progn + (spacemacs|hide-lighter auto-highlight-symbol-mode) + (defvar-local spacemacs-last-ahs-highlight-p nil + "Info on the last searched highlighted symbol.") + (defvar-local spacemacs--ahs-searching-forward t) + + (defun spacemacs/goto-last-searched-ahs-symbol () + "Go to the last known occurrence of the last symbol searched with +`auto-highlight-symbol'." + (interactive) + (if spacemacs-last-ahs-highlight-p + (progn (goto-char (nth 1 spacemacs-last-ahs-highlight-p)) + (spacemacs/ahs-highlight-now-wrapper) + (spacemacs/symbol-highlight-transient-state/body)) + (message "No symbol has been searched for now."))) + + (defun spacemacs/integrate-evil-search (forward) + ;; isearch-string is last searched item. Next time + ;; "n" is hit we will use this. + (setq isearch-string + (concat "\\<" (evil-find-thing forward 'symbol) "\\>") + isearch-regexp + (concat "\\<" (evil-find-thing forward 'symbol) "\\>")) + ;; Next time "n" is hit, go the correct direction. + (setq isearch-forward forward) + ;; ahs does a case sensitive search. We could set + ;; this, but it would break the user's current + ;; sensitivity settings. We could save the setting, + ;; then next time the user starts a search we could + ;; restore the setting. + ;;(setq case-fold-search nil) + ;; Place the search term into the search rings. + (isearch-update-ring isearch-string t) + (evil-push-search-history isearch-string forward) + ;; Use this search term for empty pattern "%s//replacement/" + ;; Append case sensitivity + (setq evil-ex-last-was-search nil + evil-ex-substitute-pattern `(,(concat isearch-string "\\C") + nil (0 0)))) + + (defun spacemacs/ensure-ahs-enabled-locally () + "Ensures ahs is enabled for the local buffer." + (unless + (bound-and-true-p ahs-mode-line) + (auto-highlight-symbol-mode) + )) + + (defun spacemacs/ahs-highlight-now-wrapper () + "Safe wrapper for ahs-highlight-now" + (eval '(progn + (spacemacs/ensure-ahs-enabled-locally) + (ahs-highlight-now)) nil)) + + (defun spacemacs/enter-ahs-forward () + "Go to the next occurrence of symbol under point with +`auto-highlight-symbol'" + (interactive) + (setq spacemacs--ahs-searching-forward t) + (spacemacs/quick-ahs-forward)) + + (defun spacemacs/enter-ahs-backward () + "Go to the previous occurrence of symbol under point with +`auto-highlight-symbol'" + (interactive) + (setq spacemacs--ahs-searching-forward nil) + (spacemacs/quick-ahs-forward)) + + (defun spacemacs/quick-ahs-forward () + "Go to the next occurrence of symbol under point with +`auto-highlight-symbol'" + (interactive) + (spacemacs//quick-ahs-move t)) + + (defun spacemacs/quick-ahs-backward () + "Go to the previous occurrence of symbol under point with +`auto-highlight-symbol'" + (interactive) + (spacemacs//quick-ahs-move nil)) + + (defun spacemacs//quick-ahs-move (forward) + "Go to the next occurrence of symbol under point with +`auto-highlight-symbol'" + + (if (eq forward spacemacs--ahs-searching-forward) + (progn + (spacemacs/integrate-evil-search t) + (spacemacs/ahs-highlight-now-wrapper) + (evil-set-jump) + (spacemacs/symbol-highlight-transient-state/body) + (ahs-forward)) + (progn + (spacemacs/integrate-evil-search nil) + (spacemacs/ahs-highlight-now-wrapper) + (evil-set-jump) + (spacemacs/symbol-highlight-transient-state/body) + (ahs-backward)))) + + (with-eval-after-load 'evil + (define-key evil-motion-state-map (kbd "*") + 'spacemacs/enter-ahs-forward) + (define-key evil-motion-state-map (kbd "#") + 'spacemacs/enter-ahs-backward)) + + (defun spacemacs/symbol-highlight () + "Highlight the symbol under point with `auto-highlight-symbol'." + (interactive) + (spacemacs/ahs-highlight-now-wrapper) + (setq spacemacs-last-ahs-highlight-p (ahs-highlight-p)) + (spacemacs/symbol-highlight-transient-state/body) + (spacemacs/integrate-evil-search nil)) + + (defun spacemacs//ahs-ms-on-exit () + ;; Restore user search direction state as ahs has exitted in a state + ;; good for , but not for 'n' and 'N'" + (setq isearch-forward spacemacs--ahs-searching-forward)) + + (defun spacemacs/symbol-highlight-reset-range () + "Reset the range for `auto-highlight-symbol'." + (interactive) + (ahs-change-range ahs-default-range)) + + (spacemacs/set-leader-keys + "sh" 'spacemacs/symbol-highlight + "sH" 'spacemacs/goto-last-searched-ahs-symbol) + + ;; micro-state to easily jump from a highlighted symbol to the others + (dolist (sym '(ahs-forward + ahs-forward-definition + ahs-backward + ahs-backward-definition + ahs-back-to-start + ahs-change-range)) + (let* ((advice (intern (format "spacemacs/%s" (symbol-name sym))))) + (eval `(defadvice ,sym (around ,advice activate) + (spacemacs/ahs-highlight-now-wrapper) + ad-do-it + (spacemacs/ahs-highlight-now-wrapper) + (setq spacemacs-last-ahs-highlight-p (ahs-highlight-p)))))) + + (defun symbol-highlight-doc () + (let* ((i 0) + (overlay-count (length ahs-overlay-list)) + (overlay (format "%s" (nth i ahs-overlay-list))) + (current-overlay (format "%s" ahs-current-overlay)) + (st (ahs-stat)) + (plighter (ahs-current-plugin-prop 'lighter)) + (plugin (format "%s" + (cond ((string= plighter "HS") "Display") + ((string= plighter "HSA") "Buffer") + ((string= plighter "HSD") "Function")))) + (face (cond ((string= plighter "HS") ahs-plugin-defalt-face) + ((string= plighter "HSA") ahs-plugin-whole-buffer-face) + ((string= plighter "HSD") ahs-plugin-bod-face)))) + (while (not (string= overlay current-overlay)) + (setq i (1+ i)) + (setq overlay (format "%s" (nth i ahs-overlay-list)))) + (let* ((x/y (format "[%s/%s]" (- overlay-count i) overlay-count)) + (hidden (if (< 0 (- overlay-count (nth 4 st))) "*" ""))) + (concat + (propertize (format " %s " plugin) 'face face) + (propertize (format " %s%s " x/y hidden) 'face + `(:foreground "#ffffff" :background "#000000")))))) + + (defun ahs-to-iedit () + (interactive) + (cond + ((and (not (eq dotspacemacs-editing-style 'emacs)) + (configuration-layer/package-usedp 'evil-iedit-state)) + (evil-iedit-state/iedit-mode) + (iedit-restrict-region (ahs-current-plugin-prop 'start) + (ahs-current-plugin-prop 'end))) + ((and (eq dotspacemacs-editing-style 'emacs) + (configuration-layer/package-usedp 'iedit)) + (iedit-mode) + (iedit-restrict-region (ahs-current-plugin-prop 'start) + (ahs-current-plugin-prop 'end))) + (t (ahs-edit-mode t)))) + ;; transient state + (defun spacemacs//symbol-highlight-ts-doc () + (spacemacs//transient-state-make-doc + 'symbol-highlight + (format spacemacs--symbol-highlight-transient-state-doc + (symbol-highlight-doc) + (make-string (length (symbol-highlight-doc)) 32)))) + (spacemacs|define-transient-state symbol-highlight + :title "Symbol Highlight Transient State" + :dynamic-hint (spacemacs//symbol-highlight-ts-doc) + :before-exit (spacemacs//ahs-ms-on-exit) + :bindings + ("d" ahs-forward-definition) + ("D" ahs-backward-definition) + ("e" ahs-to-iedit :exit t) + ("n" spacemacs/quick-ahs-forward) + ("N" spacemacs/quick-ahs-backward) + ("p" spacemacs/quick-ahs-backward) + ("R" ahs-back-to-start) + ("r" ahs-change-range) + ("q" nil :exit t))))) + +(defun spacemacs-editing-visual/init-column-enforce-mode () + (use-package column-enforce-mode + :commands (column-enforce-mode global-column-enforce-mode) + :init + (progn + (spacemacs|add-toggle highlight-long-lines + :status column-enforce-mode + :prefix columns + :on (column-enforce-n (or columns column-enforce-column)) + :on-message (format "long-lines enabled for %s columns." (or columns column-enforce-column)) + :off (column-enforce-mode -1) + :documentation "Highlight the characters past the 80th column." + :evil-leader "t8") + (spacemacs|add-toggle highlight-long-lines-globally + :mode global-column-enforce-mode + :documentation "Globally Highlight the characters past the 80th column." + :evil-leader "t C-8")) + :config (spacemacs|diminish column-enforce-mode "⑧" "8"))) + +(defun spacemacs-editing-visual/init-hide-comnt () + (use-package hide-comnt + :commands hide/show-comments-toggle + :init (spacemacs/set-leader-keys "ch" 'hide/show-comments-toggle))) + +(defun spacemacs-editing-visual/init-highlight-indentation () + (use-package highlight-indentation + :defer t + :init + (progn + (spacemacs|add-toggle highlight-indentation + :mode highlight-indentation-mode + :documentation "Highlight indentation levels." + :evil-leader "thi") + (spacemacs|add-toggle highlight-indentation-current-column + :mode highlight-indentation-current-column-mode + :documentation "Highlight indentation level at point." + :evil-leader "thc")) + :config + (progn + (spacemacs|diminish highlight-indentation-mode " ⓗi" " hi") + (spacemacs|diminish highlight-indentation-current-column-mode " ⓗc" " hc")))) + +(defun spacemacs-editing-visual/init-highlight-numbers () + (use-package highlight-numbers + :defer t + :init + (progn + (add-hook 'prog-mode-hook 'highlight-numbers-mode) + (add-hook 'asm-mode-hook (lambda () (highlight-numbers-mode -1)))))) + +(defun spacemacs-editing-visual/init-highlight-parentheses () + (use-package highlight-parentheses + :defer t + :init + (progn + (when (member dotspacemacs-highlight-delimiters '(all current)) + (add-hook 'prog-mode-hook #'highlight-parentheses-mode)) + (setq hl-paren-delay 0.2) + (spacemacs/set-leader-keys "tCp" 'highlight-parentheses-mode) + (setq hl-paren-colors '("Springgreen3" + "IndianRed1" + "IndianRed3" + "IndianRed4"))) + :config + (spacemacs|hide-lighter highlight-parentheses-mode) + (set-face-attribute 'hl-paren-face nil :weight 'ultra-bold))) + +(defun spacemacs-editing-visual/init-hl-anything () + (use-package hl-anything + :init + (progn + (hl-highlight-mode) + (setq-default hl-highlight-save-file + (concat spacemacs-cache-directory ".hl-save")) + (spacemacs/set-leader-keys + "hc" 'hl-unhighlight-all-local + "hC" 'hl-unhighlight-all-global + "hh" 'hl-highlight-thingatpt-local + "hH" 'hl-highlight-thingatpt-global + "hn" 'hl-find-next-thing + "hN" 'hl-find-prev-thing + "hr" 'hl-restore-highlights + "hs" 'hl-save-highlights)) + :config (spacemacs|hide-lighter hl-highlight-mode))) + +(defun spacemacs-editing-visual/init-indent-guide () + (use-package indent-guide + :defer t + :init + (progn + (setq indent-guide-delay 0.3) + (spacemacs|add-toggle indent-guide + :mode indent-guide-mode + :documentation + "Highlight indentation level at point. (alternative to highlight-indentation)." + :evil-leader "ti") + (spacemacs|add-toggle indent-guide-globally + :mode indent-guide-global-mode + :documentation + "Highlight indentation level at point globally. (alternative to highlight-indentation)." + :evil-leader "t TAB")) + :config + (spacemacs|diminish indent-guide-mode " ⓘ" " i"))) + +(defun spacemacs-editing-visual/init-rainbow-delimiters () + (use-package rainbow-delimiters + :defer t + :init + (progn + (spacemacs/set-leader-keys "tCd" 'rainbow-delimiters-mode) + (when (member dotspacemacs-highlight-delimiters '(any all)) + (spacemacs/add-to-hooks 'rainbow-delimiters-mode '(prog-mode-hook)))))) + +(defun spacemacs-editing-visual/init-volatile-highlights () + (use-package volatile-highlights + :config + (progn + ;; additional extensions + ;; evil + (vhl/define-extension 'evil + 'evil-move + 'evil-paste-after + 'evil-paste-before + 'evil-paste-pop) + (with-eval-after-load 'evil + (vhl/install-extension 'evil) + (vhl/load-extension 'evil)) + ;; undo-tree + (vhl/define-extension 'undo-tree + 'undo-tree-move + 'undo-tree-yank) + (with-eval-after-load 'undo-tree + (vhl/install-extension 'undo-tree) + (vhl/load-extension 'undo-tree)) + (volatile-highlights-mode) + (spacemacs|hide-lighter volatile-highlights-mode)))) diff --git a/layers/+spacemacs/spacemacs-editing/funcs.el b/layers/+spacemacs/spacemacs-editing/funcs.el new file mode 100644 index 0000000..dc4a806 --- /dev/null +++ b/layers/+spacemacs/spacemacs-editing/funcs.el @@ -0,0 +1,71 @@ +;;; funcs.el --- Spacemacs editing Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; smartparens + +(defun spacemacs/smartparens-pair-newline (id action context) + (save-excursion + (newline) + (indent-according-to-mode))) + +(defun spacemacs/smartparens-pair-newline-and-indent (id action context) + (spacemacs/smartparens-pair-newline id action context) + (indent-according-to-mode)) + +(defun spacemacs/smart-closing-parenthesis () + (interactive) + (let* ((sp-navigate-close-if-unbalanced t) + (current-pos (point)) + (current-line (line-number-at-pos current-pos)) + (next-pos (save-excursion + (sp-up-sexp) + (point))) + (next-line (line-number-at-pos next-pos))) + (cond + ((and (= current-line next-line) + (not (= current-pos next-pos))) + (sp-up-sexp)) + (t + (insert-char ?\)))))) + +(defun spacemacs//conditionally-enable-smartparens-mode () + "Enable `smartparens-mode' in the minibuffer, during `eval-expression'." + (if (eq this-command 'eval-expression) + (smartparens-mode))) + +(defun spacemacs//adaptive-smartparent-pair-overlay-face () + (set-face-attribute 'sp-pair-overlay-face nil + :inherit 'lazy-highlight + :background nil + :foreground nil)) + + +;; uuidgen +;; TODO spacemacs/uuidgen-3 and spacemacs/uuidgen-5 + +(defun spacemacs/uuidgen-1 (arg) + "Return a time based UUID (UUIDv1). + If ARG is non nil then use CID format." + (interactive "P") + (let ((uuid (uuidgen-1))) + (if arg + (insert-uuid-cid uuid) + (insert uuid)))) + +(defun spacemacs/uuidgen-4 (arg) + "Return an UUID from random numbers (UUIDv4). + If ARG is non nil then use CID format." + (interactive "P") + (let ((uuid (uuidgen-4))) + (if arg + (insert-uuid-cid uuid) + (insert uuid)))) diff --git a/layers/+spacemacs/spacemacs-editing/local/spacemacs-whitespace-cleanup/spacemacs-whitespace-cleanup.el b/layers/+spacemacs/spacemacs-editing/local/spacemacs-whitespace-cleanup/spacemacs-whitespace-cleanup.el new file mode 100644 index 0000000..7e3b7d1 --- /dev/null +++ b/layers/+spacemacs/spacemacs-editing/local/spacemacs-whitespace-cleanup/spacemacs-whitespace-cleanup.el @@ -0,0 +1,91 @@ +;;; spacemacs-whitespace-cleanup.el --- Cleanup whitspace automatically. + +;; Author: Sylvain Benner +;; Keywords: editing, whitespace, spacemacs +;; Version: 0.1 + +;; 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 minor mode to automatically cleanup whitespace. +;; It requires Spacemacs and depends on the value of the variable +;; `dotspacemacs-whitespace-cleanup' (see documentation in dotfile). + +;;; Code: + +(defvar spacemacs-whitespace-cleanup-globally nil + "If non nil then `spacemacs-whitespace-cleanup-mode' is applied globally.") + +;;;###autoload +(define-minor-mode spacemacs-whitespace-cleanup-mode + "Minor mode to clean whitespace. + +The minor mode is based on the value of the dotfile variable + `dotspacemacs-whitespace-cleanup' to determine the behavior +of the cleanup." + :lighter " CleanW" + :group 'spacemacs + (if spacemacs-whitespace-cleanup-mode + (spacemacs-whitespace-cleanup//turn-on + spacemacs-whitespace-cleanup-globally) + (spacemacs-whitespace-cleanup//turn-off + spacemacs-whitespace-cleanup-globally))) + +(define-global-minor-mode global-spacemacs-whitespace-cleanup-mode + spacemacs-whitespace-cleanup-mode + (lambda () + (let ((spacemacs-whitespace-cleanup-globally t)) + (spacemacs-whitespace-cleanup-mode))) + :group 'spacemacs + :require 'spacemacs-whitespace-cleanup-mode) + +(defun spacemacs-whitespace-cleanup/on-message (&optional global) + "Return a string to display when the mode is activated." + (pcase dotspacemacs-whitespace-cleanup + (`all + (format "whitespace-cleanup enabled%s (all whitespace)" + (if global " globally" ""))) + (`trailing + (format "whitespace-cleanup enabled%s (trailing whitespace)" + (if global " globally" ""))) + (`changed + (format "whitespace-cleanup enabled%s (changed lines)" + (if global " globally" ""))))) + +(defun spacemacs-whitespace-cleanup//turn-on (&optional global) + "Turn on `spacemacs-whitespace-cleanup-mode'." + (pcase dotspacemacs-whitespace-cleanup + (`all + (add-hook 'before-save-hook 'whitespace-cleanup nil (not global))) + (`trailing + (add-hook 'before-save-hook 'delete-trailing-whitespace nil (not global))) + (`changed + (when (fboundp 'ws-butler-mode) + (if global (ws-butler-global-mode) (ws-butler-mode)))))) + +(defun spacemacs-whitespace-cleanup//turn-off (&optional global) + "Turn off `spacemacs-whitespace-cleanup-mode'." + (pcase dotspacemacs-whitespace-cleanup + (`all + (remove-hook 'before-save-hook 'whitespace-cleanup (not global))) + (`trailing + (remove-hook 'before-save-hook 'delete-trailing-whitespace (not global))) + (`changed + (when (fboundp 'ws-butler-mode) + (if global (ws-butler-global-mode -1) (ws-butler-mode -1)))))) + +(provide 'spacemacs-whitespace-cleanup) +;;; spacemacs-whitespace-cleanup.el ends here. diff --git a/layers/+spacemacs/spacemacs-editing/packages.el b/layers/+spacemacs/spacemacs-editing/packages.el new file mode 100644 index 0000000..4907c15 --- /dev/null +++ b/layers/+spacemacs/spacemacs-editing/packages.el @@ -0,0 +1,359 @@ +;;; packages.el --- Spacemacs Editing Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-editing-packages + '(aggressive-indent + avy + (bracketed-paste :toggle (version<= emacs-version "25.0.92")) + clean-aindent-mode + eval-sexp-fu + expand-region + (hexl :location built-in) + hungry-delete + link-hint + lorem-ipsum + move-text + (origami :toggle (eq 'origami dotspacemacs-folding-method)) + smartparens + (spacemacs-whitespace-cleanup :location local) + undo-tree + uuidgen + ws-butler)) + +;; Initialization of packages + +(defun spacemacs-editing/init-aggressive-indent () + (use-package aggressive-indent + :defer t + :init + (progn + (spacemacs|add-toggle aggressive-indent + :mode aggressive-indent-mode + :documentation "Always keep code indented." + :evil-leader "tI") + (spacemacs|add-toggle aggressive-indent-globally + :mode aggressive-indent-mode + :documentation "Always keep code indented globally." + :evil-leader "t C-I")) + :config + (progn + (add-hook 'diff-auto-refine-mode-hook 'spacemacs/toggle-aggressive-indent-off) + (spacemacs|diminish aggressive-indent-mode " Ⓘ" " I")))) + +(defun spacemacs-editing/init-avy () + (use-package avy + :defer t + :commands (spacemacs/avy-open-url spacemacs/avy-goto-url avy-pop-mark) + :init + (progn + (setq avy-all-windows 'all-frames) + (setq avy-background t) + (spacemacs/set-leader-keys + "jb" 'avy-pop-mark + "jj" 'evil-avy-goto-char + "jJ" 'evil-avy-goto-char-2 + "jl" 'evil-avy-goto-line + "ju" 'spacemacs/avy-goto-url + "jw" 'evil-avy-goto-word-or-subword-1 + "xo" 'spacemacs/avy-open-url)) + :config + (progn + (defun spacemacs/avy-goto-url() + "Use avy to go to an URL in the buffer." + (interactive) + (avy--generic-jump "https?://" nil 'pre)) + (defun spacemacs/avy-open-url () + "Use avy to select an URL in the buffer and open it." + (interactive) + (save-excursion + (spacemacs/avy-goto-url) + (browse-url-at-point)))))) + +(defun spacemacs-editing/init-bracketed-paste () + (use-package bracketed-paste + :defer t + :init + ;; Enable bracketed-paste for tty + (add-hook 'tty-setup-hook 'bracketed-paste-enable))) + +(defun spacemacs-editing/init-clean-aindent-mode () + (use-package clean-aindent-mode + :config (clean-aindent-mode))) + +(defun spacemacs-editing/init-eval-sexp-fu () + ;; ignore obsolete function warning generated on startup + (let ((byte-compile-not-obsolete-funcs (append byte-compile-not-obsolete-funcs '(preceding-sexp)))) + (require 'eval-sexp-fu))) + +(defun spacemacs-editing/init-expand-region () + (use-package expand-region + :defer t + :init (spacemacs/set-leader-keys "v" 'er/expand-region) + :config + (progn + ;; add search capability to expand-region + (when (configuration-layer/package-usedp 'helm-ag) + (defadvice er/prepare-for-more-expansions-internal + (around helm-ag/prepare-for-more-expansions-internal activate) + ad-do-it + (let ((new-msg (concat (car ad-return-value) + ", / to search in project, " + "f to search in files, " + "b to search in opened buffers")) + (new-bindings (cdr ad-return-value))) + (cl-pushnew + '("/" (lambda () + (call-interactively + 'spacemacs/helm-project-smart-do-search-region-or-symbol))) + new-bindings) + (cl-pushnew + '("f" (lambda () + (call-interactively + 'spacemacs/helm-files-smart-do-search-region-or-symbol))) + new-bindings) + (cl-pushnew + '("b" (lambda () + (call-interactively + 'spacemacs/helm-buffers-smart-do-search-region-or-symbol))) + new-bindings) + (setq ad-return-value (cons new-msg new-bindings))))) + (setq expand-region-contract-fast-key "V" + expand-region-reset-fast-key "r")))) + +(defun spacemacs-editing/init-hexl () + (use-package hexl + :defer t + :init + (progn + (spacemacs/set-leader-keys "fh" 'hexl-find-file) + (spacemacs/set-leader-keys-for-major-mode 'hexl-mode + "d" 'hexl-insert-decimal-char + "c" 'hexl-insert-octal-char + "x" 'hexl-insert-hex-char + "X" 'hexl-insert-hex-string + "g" 'hexl-goto-address) + (evil-define-key 'motion hexl-mode-map + "]]" 'hexl-end-of-1k-page + "[[" 'hexl-beginning-of-1k-page + "h" 'hexl-backward-char + "l" 'hexl-forward-char + "j" 'hexl-next-line + "k" 'hexl-previous-line + "$" 'hexl-end-of-line + "^" 'hexl-beginning-of-line + "0" 'hexl-beginning-of-line)))) + +(defun spacemacs-editing/init-hungry-delete () + (use-package hungry-delete + :defer t + :init + (spacemacs|add-toggle hungry-delete + :mode hungry-delete-mode + :documentation "Delete consecutive horizontal whitespace with a single key." + :evil-leader "td") + :config + (progn + (setq-default hungry-delete-chars-to-skip " \t\f\v") ; only horizontal whitespace + (define-key hungry-delete-mode-map (kbd "DEL") 'hungry-delete-backward) + (define-key hungry-delete-mode-map (kbd "S-DEL") 'delete-backward-char)))) + +(defun spacemacs-editing/init-link-hint () + (use-package link-hint + :defer t + :init + (spacemacs/set-leader-keys + "xo" 'link-hint-open-link + "xO" 'link-hint-open-multiple-links))) + +(defun spacemacs-editing/init-lorem-ipsum () + (use-package lorem-ipsum + :commands (lorem-ipsum-insert-list + lorem-ipsum-insert-paragraphs + lorem-ipsum-insert-sentences) + :init + (progn + (spacemacs/declare-prefix "il" "lorem ipsum") + (spacemacs/set-leader-keys + "ill" 'lorem-ipsum-insert-list + "ilp" 'lorem-ipsum-insert-paragraphs + "ils" 'lorem-ipsum-insert-sentences)))) + +(defun spacemacs-editing/init-move-text () + (use-package move-text + :defer t + :init + (spacemacs|define-transient-state move-text + :title "Move Text Transient State" + :bindings + ("J" move-text-down "move down") + ("K" move-text-up "move up")) + (spacemacs/set-leader-keys + "xJ" 'spacemacs/move-text-transient-state/move-text-down + "xK" 'spacemacs/move-text-transient-state/move-text-up))) + +(defun spacemacs-editing/init-origami () + (use-package origami + :defer t + :init + (progn + (global-origami-mode) + (define-key evil-normal-state-map "za" 'origami-forward-toggle-node) + (define-key evil-normal-state-map "zc" 'origami-close-node) + (define-key evil-normal-state-map "zC" 'origami-close-node-recursively) + (define-key evil-normal-state-map "zO" 'origami-open-node-recursively) + (define-key evil-normal-state-map "zo" 'origami-open-node) + (define-key evil-normal-state-map "zr" 'origami-open-all-nodes) + (define-key evil-normal-state-map "zm" 'origami-close-all-nodes) + (define-key evil-normal-state-map "zs" 'origami-show-only-node) + (define-key evil-normal-state-map "zn" 'origami-next-fold) + (define-key evil-normal-state-map "zp" 'origami-previous-fold) + (define-key evil-normal-state-map "zR" 'origami-reset) + (define-key evil-normal-state-map (kbd "z ") 'origami-recursively-toggle-node) + (define-key evil-normal-state-map (kbd "z TAB") 'origami-recursively-toggle-node) + + (spacemacs|define-transient-state fold + :title "Code Fold Transient State" + :doc " + Close^^ Open^^ Toggle^^ Goto^^ Other^^ + ───────^^───────── ─────^^─────────── ─────^^───────── ──────^^────── ─────^^───────── + [_c_] at point [_o_] at point [_a_] at point [_n_] next [_s_] single out + [_C_] recursively [_O_] recursively [_A_] all [_p_] previous [_R_] reset + [_m_] all [_r_] all [_TAB_] like org ^^ [_q_] quit" + :foreign-keys run + :on-enter (unless (bound-and-true-p origami-mode) (origami-mode 1)) + :bindings + ("a" origami-forward-toggle-node) + ("A" origami-toggle-all-nodes) + ("c" origami-close-node) + ("C" origami-close-node-recursively) + ("o" origami-open-node) + ("O" origami-open-node-recursively) + ("r" origami-open-all-nodes) + ("m" origami-close-all-nodes) + ("n" origami-next-fold) + ("p" origami-previous-fold) + ("s" origami-show-only-node) + ("R" origami-reset) + ("TAB" origami-recursively-toggle-node) + ("" origami-recursively-toggle-node) + ("q" nil :exit t) + ("C-g" nil :exit t) + ("" nil :exit t)) + ;; Note: The key binding for the fold transient state is defined in + ;; evil config + ))) + +(defun spacemacs-editing/init-smartparens () + (use-package smartparens + :defer t + :commands (sp-split-sexp sp-newline sp-up-sexp) + :init + (progn + ;; settings + (setq sp-show-pair-delay 0.2 + ;; fix paren highlighting in normal mode + sp-show-pair-from-inside t + sp-cancel-autoskip-on-backward-movement nil + sp-highlight-pair-overlay nil + sp-highlight-wrap-overlay nil + sp-highlight-wrap-tag-overlay nil) + (spacemacs/add-to-hooks (if dotspacemacs-smartparens-strict-mode + 'smartparens-strict-mode + 'smartparens-mode) + '(prog-mode-hook comint-mode-hook)) + ;; enable smartparens-mode in `eval-expression' + (add-hook 'minibuffer-setup-hook 'spacemacs//conditionally-enable-smartparens-mode) + ;; toggles + (spacemacs|add-toggle smartparens + :mode smartparens-mode + :documentation "Enable smartparens." + :evil-leader "tp") + (spacemacs|add-toggle smartparens-globally + :mode smartparens-mode + :documentation "Enable smartparens globally." + :evil-leader "t C-p") + ;; key bindings + (spacemacs/set-leader-keys + "js" 'sp-split-sexp + "jn" 'sp-newline)) + :config + (progn + (require 'smartparens-config) + (spacemacs|diminish smartparens-mode " ⓟ" " p") + (spacemacs//adaptive-smartparent-pair-overlay-face) + (add-hook 'spacemacs-post-theme-change-hook + 'spacemacs//adaptive-smartparent-pair-overlay-face) + (show-smartparens-global-mode +1) + ;; don't create a pair with single quote in minibuffer + (sp-local-pair 'minibuffer-inactive-mode "'" nil :actions nil) + (sp-pair "{" nil :post-handlers + '(:add (spacemacs/smartparens-pair-newline-and-indent "RET"))) + (sp-pair "[" nil :post-handlers + '(:add (spacemacs/smartparens-pair-newline-and-indent "RET"))) + (when dotspacemacs-smart-closing-parenthesis + (define-key evil-insert-state-map ")" + 'spacemacs/smart-closing-parenthesis))))) + +(defun spacemacs-editing/init-spacemacs-whitespace-cleanup () + (use-package spacemacs-whitespace-cleanup + :commands (spacemacs-whitespace-cleanup-mode + global-spacemacs-whitespace-cleanup-mode) + :init + (progn + (spacemacs|add-toggle whitespace-cleanup + :mode spacemacs-whitespace-cleanup-mode + :documentation "Automatic whitespace clean up." + :on-message (spacemacs-whitespace-cleanup/on-message) + :evil-leader "tW") + (spacemacs|add-toggle global-whitespace-cleanup + :mode global-spacemacs-whitespace-cleanup-mode + :status spacemacs-whitespace-cleanup-mode + :on (let ((spacemacs-whitespace-cleanup-globally t)) + (spacemacs-whitespace-cleanup-mode)) + :off (let ((spacemacs-whitespace-cleanup-globally t)) + (spacemacs-whitespace-cleanup-mode -1)) + :on-message (spacemacs-whitespace-cleanup/on-message t) + :documentation "Global automatic whitespace clean up." + :evil-leader "t C-S-w") + (with-eval-after-load 'ws-butler + (when dotspacemacs-whitespace-cleanup + (spacemacs/toggle-global-whitespace-cleanup-on)))) + :config + (progn + (spacemacs|diminish spacemacs-whitespace-cleanup-mode " Ⓦ" " W") + (spacemacs|diminish global-spacemacs-whitespace-cleanup-mode + " Ⓦ" " W")))) + +(defun spacemacs-editing/init-undo-tree () + (use-package undo-tree + :init + (global-undo-tree-mode) + (setq undo-tree-visualizer-timestamps t) + (setq undo-tree-visualizer-diff t) + :config + (spacemacs|hide-lighter undo-tree-mode))) + +(defun spacemacs-editing/init-uuidgen () + (use-package uuidgen + :commands (uuidgen-1 uuidgen-4) + :init + (progn + (spacemacs/declare-prefix "iU" "uuid") + (spacemacs/set-leader-keys + "iU1" 'spacemacs/uuidgen-1 + "iU4" 'spacemacs/uuidgen-4 + "iUU" 'spacemacs/uuidgen-4)))) + +(defun spacemacs-editing/init-ws-butler () + ;; not deferred on purpose, init-spacemacs-whitespace-cleanup need + ;; it to be loaded. + (use-package ws-butler + :config (spacemacs|hide-lighter ws-butler-mode))) diff --git a/layers/+spacemacs/spacemacs-evil/funcs.el b/layers/+spacemacs/spacemacs-evil/funcs.el new file mode 100644 index 0000000..78f0235 --- /dev/null +++ b/layers/+spacemacs/spacemacs-evil/funcs.el @@ -0,0 +1,76 @@ +;;; funcs.el --- Spacemacs Evil Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar spacemacs--evil-iedit-insert-states-default nil + "Default value of the list of additional states enabled in \ +`evil-iedit-insert-state'.") + +(defvar spacemacs--evil-iedit-insert-states-hybrid nil + "List of additional states enabled in `evil-iedit-insert-state' when +`hybrid-mode' is active.") + +(defun spacemacs//enable-hs-minor-mode () + "Enable hs-minor-mode for code folding." + (ignore-errors + (hs-minor-mode) + (spacemacs|hide-lighter hs-minor-mode))) + +(defun spacemacs//iedit-insert-state-hybrid (style) + "If STYLE is hybrid, update `evil-iedit-insert-state' definition to enable +`evil-hybrid-state' instead of `evil-insert-state'. +Otherwise, revert to the default behavior (i.e. enable `evil-insert-state')." + ;; Populate variables on the first invocation. + (unless spacemacs--evil-iedit-insert-states-default + (setq spacemacs--evil-iedit-insert-states-default + (evil-get-property evil-state-properties 'iedit-insert :enable)) + (setq spacemacs--evil-iedit-insert-states-hybrid + (mapcar (lambda (item) + (if (eq item 'insert) 'hybrid item)) + spacemacs--evil-iedit-insert-states-default))) + (let ((states (if (eq style 'hybrid) + spacemacs--evil-iedit-insert-states-hybrid + spacemacs--evil-iedit-insert-states-default))) + (evil-put-property 'evil-state-properties 'iedit-insert + :enable states))) + + +;; evil-search-highlight-persist + +(defun spacemacs/evil-search-clear-highlight () + "Clear evil-search or evil-ex-search persistent highlights." + (interactive) + (case evil-search-module + ('isearch (evil-search-highlight-persist-remove-all)) + ('evil-search (evil-ex-nohighlight)))) + +(defun spacemacs//adaptive-evil-highlight-persist-face () + (set-face-attribute 'evil-search-highlight-persist-highlight-face nil + :inherit 'lazy-highlight + :background nil + :foreground nil)) + +(defun spacemacs/linum-relative-toggle () + (interactive) + (if (not (bound-and-true-p linum-relative-mode)) + (linum-mode)) + (linum-relative-toggle)) + + +;; vi-tilde-fringe + +(defun spacemacs/disable-vi-tilde-fringe () + "Disable `vi-tilde-fringe' in the current buffer." + (vi-tilde-fringe-mode -1)) + +(defun spacemacs/disable-vi-tilde-fringe-read-only () + "Disable `vi-tilde-fringe' in the current buffer if it is read only." + (when buffer-read-only + (spacemacs/disable-vi-tilde-fringe))) diff --git a/layers/+spacemacs/spacemacs-evil/local/evil-unimpaired/evil-unimpaired.el b/layers/+spacemacs/spacemacs-evil/local/evil-unimpaired/evil-unimpaired.el new file mode 100644 index 0000000..d58dee6 --- /dev/null +++ b/layers/+spacemacs/spacemacs-evil/local/evil-unimpaired/evil-unimpaired.el @@ -0,0 +1,111 @@ +;;; evil-unimpaired.el --- Pairs of handy bracket mappings. + +;; Author: Sylvain Benner +;; Keywords: evil, vim-unimpaired, spacemacs +;; Version: 0.1 +;; Package-Requires: ((dash "2.12.0") (f "0.18.0")) + +;; 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 is a port of vim-unimpaired https://github.com/tpope/vim-unimpaired +;; `evil-unimpaired' provides pairs of handy bracket mappings to quickly navigate +;; to previous/next thing and more. + +;;; Code: + +(require 'dash) +(require 'f) + +(defun evil-unimpaired//find-relative-filename (offset) + (when buffer-file-name + (let* ((directory (f-dirname buffer-file-name)) + (files (f--files directory (not (s-matches? "^\\.?#" it)))) + (index (+ (-elem-index buffer-file-name files) offset)) + (file (and (>= index 0) (nth index files)))) + (when file + (f-expand file directory))))) + +(defun evil-unimpaired/previous-file () + (interactive) + (-if-let (filename (evil-unimpaired//find-relative-filename -1)) + (find-file filename) + (user-error "No previous file"))) + +(defun evil-unimpaired/next-file () + (interactive) + (-if-let (filename (evil-unimpaired//find-relative-filename 1)) + (find-file filename) + (user-error "No next file"))) + +(defun evil-unimpaired/paste-above () + (interactive) + (evil-insert-newline-above) + (evil-paste-after 1)) + +(defun evil-unimpaired/paste-below () + (interactive) + (evil-insert-newline-below) + (evil-paste-after 1)) + +(defun evil-unimpaired/insert-space-above (count) + (interactive "p") + (dotimes (_ count) (save-excursion (evil-insert-newline-above)))) + +(defun evil-unimpaired/insert-space-below (count) + (interactive "p") + (dotimes (_ count) (save-excursion (evil-insert-newline-below)))) + +(defun evil-unimpaired/next-frame () + (interactive) + (raise-frame (next-frame))) + +(defun evil-unimpaired/previous-frame () + (interactive) + (raise-frame (previous-frame))) + +;; from tpope's unimpaired +(define-key evil-normal-state-map (kbd "[ SPC") + 'evil-unimpaired/insert-space-above) +(define-key evil-normal-state-map (kbd "] SPC") + 'evil-unimpaired/insert-space-below) +(define-key evil-normal-state-map (kbd "[ e") 'move-text-up) +(define-key evil-normal-state-map (kbd "] e") 'move-text-down) +(define-key evil-visual-state-map (kbd "[ e") ":move'<--1") +(define-key evil-visual-state-map (kbd "] e") ":move'>+1") +;; (define-key evil-visual-state-map (kbd "[ e") 'move-text-up) +;; (define-key evil-visual-state-map (kbd "] e") 'move-text-down) +(define-key evil-normal-state-map (kbd "[ b") 'previous-buffer) +(define-key evil-normal-state-map (kbd "] b") 'next-buffer) +(define-key evil-normal-state-map (kbd "[ f") 'evil-unimpaired/previous-file) +(define-key evil-normal-state-map (kbd "] f") 'evil-unimpaired/next-file) +(define-key evil-normal-state-map (kbd "] l") 'spacemacs/next-error) +(define-key evil-normal-state-map (kbd "[ l") 'spacemacs/previous-error) +(define-key evil-normal-state-map (kbd "] q") 'spacemacs/next-error) +(define-key evil-normal-state-map (kbd "[ q") 'spacemacs/previous-error) +(define-key evil-normal-state-map (kbd "[ t") 'evil-unimpaired/previous-frame) +(define-key evil-normal-state-map (kbd "] t") 'evil-unimpaired/next-frame) +(define-key evil-normal-state-map (kbd "[ w") 'previous-multiframe-window) +(define-key evil-normal-state-map (kbd "] w") 'next-multiframe-window) +;; select pasted text +(define-key evil-normal-state-map (kbd "g p") (kbd "` [ v ` ]")) +;; paste above or below with newline +(define-key evil-normal-state-map (kbd "[ p") 'evil-unimpaired/paste-above) +(define-key evil-normal-state-map (kbd "] p") 'evil-unimpaired/paste-below) + +(provide 'evil-unimpaired) +;;; evil-unimpaired.el ends here. diff --git a/layers/+spacemacs/spacemacs-evil/packages.el b/layers/+spacemacs/spacemacs-evil/packages.el new file mode 100644 index 0000000..19a4c15 --- /dev/null +++ b/layers/+spacemacs/spacemacs-evil/packages.el @@ -0,0 +1,291 @@ +;;; packages.el --- Spacemacs Evil Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-evil-packages + '(evil-anzu + evil-args + evil-ediff + evil-exchange + evil-iedit-state + evil-indent-plus + evil-lisp-state + ;; for testing purpose, contribute by reporting bugs and sending PRs + ;; to https://github.com/gabesoft/evil-mc + ;; To enable it add `(global-evil-mc-mode)' to user-config function + evil-mc + evil-nerd-commenter + evil-matchit + evil-numbers + evil-search-highlight-persist + evil-surround + ;; Temporarily disabled, pending the resolution of + ;; https://github.com/7696122/evil-terminal-cursor-changer/issues/8 + ;; evil-terminal-cursor-changer + evil-tutor + (evil-unimpaired :location (recipe :fetcher local)) + evil-visual-mark-mode + (hs-minor-mode :location built-in) + linum-relative + vi-tilde-fringe + )) + +(defun spacemacs-evil/init-evil-anzu () + (use-package evil-anzu + :init + (global-anzu-mode t) + :config + (progn + (spacemacs|hide-lighter anzu-mode) + (setq anzu-search-threshold 1000 + anzu-cons-mode-line-p nil) + ;; powerline integration + (when (configuration-layer/package-usedp 'spaceline) + (defun spacemacs/anzu-update-mode-line (here total) + "Custom update function which does not propertize the status." + (when anzu--state + (let ((status (cl-case anzu--state + (search (format "(%s/%d%s)" + (anzu--format-here-position here total) + total (if anzu--overflow-p "+" ""))) + (replace-query (format "(%d replace)" total)) + (replace (format "(%d/%d)" here total))))) + status))) + (setq anzu-mode-line-update-function 'spacemacs/anzu-update-mode-line))))) + +(defun spacemacs-evil/init-evil-args () + (use-package evil-args + :init + (progn + ;; bind evil-args text objects + (define-key evil-inner-text-objects-map "a" 'evil-inner-arg) + (define-key evil-outer-text-objects-map "a" 'evil-outer-arg)))) + +(defun spacemacs-evil/init-evil-ediff () + (use-package evil-ediff + :after (ediff) + :if (memq dotspacemacs-editing-style '(hybrid vim)))) + +(defun spacemacs-evil/init-evil-exchange () + (use-package evil-exchange + :init (evil-exchange-install))) + +(defun spacemacs-evil/init-evil-iedit-state () + (use-package evil-iedit-state + :commands (evil-iedit-state evil-iedit-state/iedit-mode) + :init + (progn + (setq iedit-current-symbol-default t + iedit-only-at-symbol-boundaries t + iedit-toggle-key-default nil) + (spacemacs/set-leader-keys "se" 'evil-iedit-state/iedit-mode)) + :config + ;; activate leader in iedit and iedit-insert states + (define-key evil-iedit-state-map + (kbd dotspacemacs-leader-key) spacemacs-default-map) + (spacemacs//iedit-insert-state-hybrid dotspacemacs-editing-style) + (add-hook 'spacemacs-editing-style-hook + #'spacemacs//iedit-insert-state-hybrid))) + +(defun spacemacs-evil/init-evil-indent-plus () + (use-package evil-indent-plus + :init (evil-indent-plus-default-bindings))) + +(defun spacemacs-evil/init-evil-lisp-state () + (use-package evil-lisp-state + :init (setq evil-lisp-state-global t) + :config (spacemacs/set-leader-keys "k" evil-lisp-state-map))) + +(defun spacemacs-evil/init-evil-mc () + (use-package evil-mc + :defer t + :init + ;; remove emc prefix when there is not multiple cursors + (setq evil-mc-mode-line + `(:eval (when (> (evil-mc-get-cursor-count) 1) + (format ,(propertize " %s:%d" 'face 'cursor) + evil-mc-mode-line-prefix + (evil-mc-get-cursor-count))))))) + +;; other commenting functions in funcs.el with keybinds in keybindings.el +(defun spacemacs-evil/init-evil-nerd-commenter () + (use-package evil-nerd-commenter + :commands evilnc-comment-operator + :init + (progn + ;; double all the commenting functions so that the inverse operations + ;; can be called without setting a flag + (defun spacemacs/comment-or-uncomment-lines-inverse (&optional arg) + (interactive "p") + (let ((evilnc-invert-comment-line-by-line t)) + (evilnc-comment-or-uncomment-lines arg))) + + (defun spacemacs/comment-or-uncomment-lines (&optional arg) + (interactive "p") + (let ((evilnc-invert-comment-line-by-line nil)) + (evilnc-comment-or-uncomment-lines arg))) + + (defun spacemacs/copy-and-comment-lines-inverse (&optional arg) + (interactive "p") + (let ((evilnc-invert-comment-line-by-line t)) + (evilnc-copy-and-comment-lines arg))) + + (defun spacemacs/copy-and-comment-lines (&optional arg) + (interactive "p") + (let ((evilnc-invert-comment-line-by-line nil)) + (evilnc-copy-and-comment-lines arg))) + + (defun spacemacs/quick-comment-or-uncomment-to-the-line-inverse + (&optional arg) + (interactive "p") + (let ((evilnc-invert-comment-line-by-line t)) + (evilnc-comment-or-uncomment-to-the-line arg))) + + (defun spacemacs/quick-comment-or-uncomment-to-the-line (&optional arg) + (interactive "p") + (let ((evilnc-invert-comment-line-by-line nil)) + (evilnc-comment-or-uncomment-to-the-line arg))) + + (defun spacemacs/comment-or-uncomment-paragraphs-inverse (&optional arg) + (interactive "p") + (let ((evilnc-invert-comment-line-by-line t)) + (evilnc-comment-or-uncomment-paragraphs arg))) + + (defun spacemacs/comment-or-uncomment-paragraphs (&optional arg) + (interactive "p") + (let ((evilnc-invert-comment-line-by-line nil)) + (evilnc-comment-or-uncomment-paragraphs arg))) + + (define-key evil-normal-state-map "gc" 'evilnc-comment-operator) + (define-key evil-normal-state-map "gy" 'spacemacs/copy-and-comment-lines) + + (spacemacs/set-leader-keys + ";" 'evilnc-comment-operator + "cl" 'spacemacs/comment-or-uncomment-lines + "cL" 'spacemacs/comment-or-uncomment-lines-inverse + "cp" 'spacemacs/comment-or-uncomment-paragraphs + "cP" 'spacemacs/comment-or-uncomment-paragraphs-inverse + "ct" 'spacemacs/quick-comment-or-uncomment-to-the-line + "cT" 'spacemacs/quick-comment-or-uncomment-to-the-line-inverse + "cy" 'spacemacs/copy-and-comment-lines + "cY" 'spacemacs/copy-and-comment-lines-inverse)))) + +(defun spacemacs-evil/init-evil-matchit () + (use-package evil-matchit + :defer t)) + +(defun spacemacs-evil/init-evil-numbers () + (use-package evil-numbers + :config + (progn + (spacemacs|define-transient-state evil-numbers + :title "Evil Numbers Transient State" + :doc "\n[_+_/_=_] increase number [_-_] decrease [0..9] prefix [_q_] quit" + :bindings + ("+" evil-numbers/inc-at-pt) + ("=" evil-numbers/inc-at-pt) + ("-" evil-numbers/dec-at-pt) + ("q" nil :exit t)) + (spacemacs/set-leader-keys + "n+" 'spacemacs/evil-numbers-transient-state/evil-numbers/inc-at-pt + "n=" 'spacemacs/evil-numbers-transient-state/evil-numbers/inc-at-pt + "n-" 'spacemacs/evil-numbers-transient-state/evil-numbers/dec-at-pt)))) + +(defun spacemacs-evil/init-evil-search-highlight-persist () + (use-package evil-search-highlight-persist + :init + (progn + (global-evil-search-highlight-persist) + ;; (set-face-attribute ) + (spacemacs/set-leader-keys "sc" 'spacemacs/evil-search-clear-highlight) + (define-key evil-search-highlight-persist-map (kbd "C-x SPC") 'rectangle-mark-mode) + (evil-ex-define-cmd "nohlsearch" + 'evil-search-highlight-persist-remove-all) + (spacemacs//adaptive-evil-highlight-persist-face) + (add-hook 'spacemacs-post-theme-change-hook 'spacemacs//adaptive-evil-highlight-persist-face)))) + +(defun spacemacs-evil/init-evil-surround () + (use-package evil-surround + :init + (progn + (global-evil-surround-mode 1) + ;; `s' for surround instead of `substitute' + ;; see motivation for this change in the documentation + (evil-define-key 'visual evil-surround-mode-map "s" 'evil-surround-region) + (evil-define-key 'visual evil-surround-mode-map "S" 'evil-substitute)))) + +(defun spacemacs-evil/init-evil-terminal-cursor-changer () + (use-package evil-terminal-cursor-changer + :if (not (display-graphic-p)) + :init (setq evil-visual-state-cursor 'box + evil-insert-state-cursor 'bar + evil-emacs-state-cursor 'hbar))) + +(defun spacemacs-evil/init-evil-tutor () + (use-package evil-tutor + :commands (evil-tutor-start + evil-tutor-resume) + :init + (progn + (setq evil-tutor-working-directory + (concat spacemacs-cache-directory ".tutor/")) + (spacemacs/set-leader-keys "hT" 'evil-tutor-start)))) + +(defun spacemacs-evil/init-evil-unimpaired () + ;; No laziness here, unimpaired bindings should be available right away. + (use-package evil-unimpaired)) + +(defun spacemacs-evil/init-evil-visual-mark-mode () + (use-package evil-visual-mark-mode + :defer t + :init + (spacemacs|add-toggle evil-visual-mark-mode + :mode evil-visual-mark-mode + :documentation "Enable evil visual marks mode." + :evil-leader "t`"))) + +(defun spacemacs-evil/init-hs-minor-mode () + (add-hook 'prog-mode-hook 'spacemacs//enable-hs-minor-mode)) + +(defun spacemacs-evil/init-linum-relative () + (use-package linum-relative + :commands (linum-relative-toggle linum-relative-on) + :init + (progn + (when (eq dotspacemacs-line-numbers 'relative) + (linum-relative-on)) + (spacemacs/set-leader-keys "tr" 'spacemacs/linum-relative-toggle)) + :config + (progn + (setq linum-relative-current-symbol "")))) + +(defun spacemacs-evil/init-vi-tilde-fringe () + (spacemacs|do-after-display-system-init + (use-package vi-tilde-fringe + :init + (progn + (global-vi-tilde-fringe-mode) + (spacemacs|add-toggle vi-tilde-fringe + :mode global-vi-tilde-fringe-mode + :documentation + "Globally display a ~ on empty lines in the fringe." + :evil-leader "T~") + ;; don't enable it on some special buffers + (with-current-buffer spacemacs-buffer-name (spacemacs/disable-vi-tilde-fringe)) + (add-hook 'which-key-init-buffer-hook 'spacemacs/disable-vi-tilde-fringe) + ;; after a major mode is loaded, check if the buffer is read only + ;; if so, disable vi-tilde-fringe-mode + (add-hook 'after-change-major-mode-hook + 'spacemacs/disable-vi-tilde-fringe-read-only) + ;; TODO move this hook if/when we have a layer for eww + (spacemacs/add-to-hooks 'spacemacs/disable-vi-tilde-fringe + '(eww-mode-hook))) + :config + (spacemacs|hide-lighter vi-tilde-fringe-mode)))) diff --git a/layers/+spacemacs/spacemacs-language/packages.el b/layers/+spacemacs/spacemacs-language/packages.el new file mode 100644 index 0000000..a12874d --- /dev/null +++ b/layers/+spacemacs/spacemacs-language/packages.el @@ -0,0 +1,48 @@ +;;; packages.el --- Spacemacs Language Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-language-packages + '((define-word :toggle (not (bound-and-true-p osx-use-dictionary-app))) + google-translate)) + +(defun spacemacs-language/init-define-word () + (use-package define-word + :defer t + :init + (spacemacs/set-leader-keys + "xwd" 'define-word-at-point))) + +(defun spacemacs-language/init-google-translate () + (use-package google-translate + :commands (spacemacs/set-google-translate-languages) + :init + (progn + (defun spacemacs/set-google-translate-languages (source target) + "Set source language for google translate. +For instance pass En as source for English." + (interactive + "sEnter source language (ie. en): \nsEnter target language (ie. en): " + source target) + (message + (format "Set google translate source language to %s and target to %s" + source target)) + (setq google-translate-default-source-language (downcase source)) + (setq google-translate-default-target-language (downcase target))) + (spacemacs/set-leader-keys + "xgl" 'spacemacs/set-google-translate-languages + "xgQ" 'google-translate-query-translate-reverse + "xgq" 'google-translate-query-translate + "xgT" 'google-translate-at-point-reverse + "xgt" 'google-translate-at-point) + (setq google-translate-enable-ido-completion t) + (setq google-translate-show-phonetic t) + (setq google-translate-default-source-language "en") + (setq google-translate-default-target-language "fr")))) diff --git a/layers/+spacemacs/spacemacs-layouts/config.el b/layers/+spacemacs/spacemacs-layouts/config.el new file mode 100644 index 0000000..43d5b89 --- /dev/null +++ b/layers/+spacemacs/spacemacs-layouts/config.el @@ -0,0 +1,35 @@ +;;; config.el --- Spacemacs Layouts Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar spacemacs-layouts-directory + (expand-file-name (concat spacemacs-cache-directory "layouts/")) + "Save layouts in this directory.") + +(defvar layouts-enable-autosave nil + "If true, saves perspectives to file per `layouts-autosave-delay'") + +(defvar layouts-autosave-delay 900 + "Delay in seconds between each layouts auto-save.") + +(defvar spacemacs--ts-full-hint-toggle 0 + "Toggle display of transient states documentations.") + +(defvar spacemacs--last-selected-layout dotspacemacs-default-layout-name + "Previously selected layout.") + +(defvar spacemacs--custom-layout-alist nil + "List of custom layouts with their bound keys. + Do not modify directly, use provided `spacemacs|define-custom-layout'") + +(defvar spacemacs--layouts-autosave-timer nil + "Timer for layouts auto-save.") diff --git a/layers/+spacemacs/spacemacs-layouts/funcs.el b/layers/+spacemacs/spacemacs-layouts/funcs.el new file mode 100644 index 0000000..93816a1 --- /dev/null +++ b/layers/+spacemacs/spacemacs-layouts/funcs.el @@ -0,0 +1,591 @@ +;;; funcs.el --- Spacemacs Layouts Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; General Persp functions + +(defun spacemacs//current-layout-name () + "Get name of the current perspective." + (safe-persp-name (get-frame-persp))) + +(defun spacemacs//layout-autosave () + "Perspectives mode autosave. +Autosaves perspectives layouts every `persp-autosave-interal' seconds. +Cancels autosave on exiting perspectives mode." + (if (and persp-mode layouts-enable-autosave) + (progn + (message "Perspectives mode autosaving enabled.") + (setq spacemacs--layouts-autosave-timer + (run-with-timer + layouts-autosave-delay + layouts-autosave-delay + (lambda () + (message "Saving perspectives to file.") + (persp-save-state-to-file))))) + (when spacemacs--layouts-autosave-timer + (cancel-timer spacemacs--layouts-autosave-timer) + (setq spacemacs--layouts-autosave-timer nil)))) + +(defun spacemacs//layout-not-contains-buffer-p (buffer) + "Return non-nil if current layout doesn't contain BUFFER." + (not (persp-contain-buffer-p buffer))) + +(defun spacemacs/jump-to-last-layout () + "Open the previously selected layout, if it exists." + (interactive) + (unless (eq 'non-existent + (gethash spacemacs--last-selected-layout + *persp-hash* 'non-existent)) + (persp-switch spacemacs--last-selected-layout))) + +(defun spacemacs/alternate-buffer-in-persp () + "Switch back and forth between current and last buffer in the +current perspective." + (interactive) + (with-persp-buffer-list () + (switch-to-buffer (other-buffer (current-buffer) t)))) + +(defun spacemacs-layouts/non-restricted-buffer-list-helm () + (interactive) + (let ((ido-make-buffer-list-hook (remove #'persp-restrict-ido-buffers ido-make-buffer-list-hook))) + (helm-mini))) + +(defun spacemacs-layouts/non-restricted-buffer-list-ivy () + (interactive) + (let ((ivy-ignore-buffers (remove #'spacemacs//layout-not-contains-buffer-p ivy-ignore-buffers))) + (ivy-switch-buffer))) + + +;; Persp transient-state + +(defun spacemacs//layouts-ts-toggle-hint () + "Toggle the full hint docstring for the layouts transient-state." + (interactive) + (setq spacemacs--ts-full-hint-toggle + (logxor spacemacs--ts-full-hint-toggle 1))) + +(defun spacemacs//layout-format-name (name pos) + "Format the layout name given by NAME for display in mode-line." + (let* ((layout-name (if (file-directory-p name) + (file-name-nondirectory (directory-file-name name)) + name)) + (string-name (format "%s" layout-name)) + (current (equal name (spacemacs//current-layout-name))) + (caption (concat (number-to-string (if (eq 9 pos) 0 (1+ pos))) + ":" string-name))) + (if current + (propertize (concat "[" caption "]") 'face 'warning) + caption))) + +(defun spacemacs//layouts-ts-hint () + "Return a one liner string containing all the layout names." + (let* ((persp-list (or (persp-names-current-frame-fast-ordered) + (list persp-nil-name))) + (formatted-persp-list + (concat " " + (mapconcat (lambda (persp) + (spacemacs//layout-format-name + persp (position persp persp-list))) + persp-list " | ")))) + (concat + formatted-persp-list + (if (equal 1 spacemacs--ts-full-hint-toggle) + spacemacs--layouts-ts-full-hint + (concat " ([" + (propertize "?" 'face 'hydra-face-red) + "] help)"))))) + +(defun spacemacs/layout-switch-by-pos (pos) + "Switch to perspective of position POS." + (let ((persp-to-switch + (nth pos (persp-names-current-frame-fast-ordered)))) + (if persp-to-switch + (persp-switch persp-to-switch) + (when (y-or-n-p + (concat "Perspective in this position doesn't exist.\n" + "Do you want to create one? ")) + (let ((persp-reset-windows-on-nil-window-conf t)) + (persp-switch nil) + (spacemacs/home-delete-other-windows)))))) + +;; Define all `spacemacs/persp-switch-to-X' functions +(dolist (i (number-sequence 9 0 -1)) + (eval `(defun ,(intern (format "spacemacs/persp-switch-to-%s" i)) nil + ,(format "Switch to layout %s." i) + (interactive) + (spacemacs/layout-switch-by-pos ,(if (eq 0 i) 9 (1- i)))))) + +(defun spacemacs/layout-goto-default () + "Go to `dotspacemacs-default-layout-name` layout" + (interactive) + (when dotspacemacs-default-layout-name + (persp-switch dotspacemacs-default-layout-name))) + +(defun spacemacs/layouts-ts-rename () + "Rename a layout and get back to the perspectives transient-state." + (interactive) + (call-interactively 'persp-rename) + (spacemacs/layouts-transient-state/body)) + +(defun spacemacs/layouts-ts-close () + "Kill current perspective" + (interactive) + (persp-kill-without-buffers (spacemacs//current-layout-name))) + +(defun spacemacs/layouts-ts-close-other () + (interactive) + (call-interactively 'spacemacs/helm-persp-close) + (spacemacs/layouts-transient-state/body)) + +(defun spacemacs/layouts-ts-kill () + "Kill current perspective" + (interactive) + (persp-kill (spacemacs//current-layout-name))) + +(defun spacemacs/layouts-ts-kill-other () + (interactive) + (call-interactively 'spacemacs/helm-persp-kill) + (spacemacs/layouts-transient-state/body)) + + +;; Custom Persp transient-state + +(defun spacemacs//custom-layout-func-name (name) + "Return the name of the custom-perspective function for NAME." + (intern (concat "spacemacs/custom-perspective-" name))) + +(defmacro spacemacs|define-custom-layout (name &rest props) + "Define a custom-perspective called NAME. + +FUNC is a FUNCTION defined using NAME and the result of +`spacemacs//custom-layout-func-name', it takes care of +creating the perspective NAME and executing the expressions given +in the :body property to this macro. + +NAME is a STRING. + +Available PROPS: + +`:binding STRING' + Key to be bound to the function FUNC + +`:body EXPRESSIONS' + One or several EXPRESSIONS that are going to be evaluated after + we change into the perspective NAME." + (declare (indent 1)) + (let* ((name (if (symbolp name) + (symbol-value name) + name)) + (func (spacemacs//custom-layout-func-name name)) + (binding-prop (car (spacemacs/mplist-get props :binding))) + (binding (if (symbolp binding-prop) + (symbol-value binding-prop) + binding-prop)) + (body (spacemacs/mplist-get props :body)) + (already-defined? (cdr (assoc binding + spacemacs--custom-layout-alist)))) + `(progn + (defun ,func () + ,(format "Open custom perspective %s" name) + (interactive) + (let ((initialize (not (gethash ,name *persp-hash*)))) + (persp-switch ,name) + (when initialize + (delete-other-windows) + ,@body))) + ;; Check for Clashes + (if ,already-defined? + (unless (equal ,already-defined? ,name) + (spacemacs-buffer/warning "Replacing existing binding \"%s\" for %s with %s" + ,binding ,already-defined? ,name) + (setq spacemacs--custom-layout-alist + (delete (assoc ,binding spacemacs--custom-layout-alist) + spacemacs--custom-layout-alist)) + (push '(,binding . ,name) spacemacs--custom-layout-alist)) + (push '(,binding . ,name) spacemacs--custom-layout-alist))))) + +(defun spacemacs/select-custom-layout () + "Update the custom-perspectives transient-state and then activate it." + (interactive) + (spacemacs//update-custom-layouts) + (spacemacs/custom-layouts-transient-state/body)) + +(defun spacemacs//custom-layouts-ms-documentation () + "Return the docstring for the custom perspectives transient-state." + (if spacemacs--custom-layout-alist + (mapconcat (lambda (custom-persp) + (format "[%s] %s" + (car custom-persp) (cdr custom-persp))) + spacemacs--custom-layout-alist " ") + (spacemacs-buffer/warning (format "`spacemacs--custom-layout-alist' variable is empty" )))) + +(defun spacemacs//update-custom-layouts () + "Ensure the custom-perspectives transient-state is updated. +Takes each element in the list `spacemacs--custom-layout-alist' +format so they are supported by the +`spacemacs/custom-layouts-transient-state' macro." + (let (bindings) + (dolist (custom-persp spacemacs--custom-layout-alist bindings) + (let* ((binding (car custom-persp)) + (name (cdr custom-persp)) + (func-name (spacemacs//custom-layout-func-name name))) + (push (list binding func-name :exit t) bindings))) + (eval `(spacemacs|define-transient-state custom-layouts + :doc (concat (spacemacs//custom-layouts-ms-documentation)) + :bindings + ,@bindings)))) + + +;; Helm integration + +(defun spacemacs/persp-helm-mini () + "As `helm-mini' but restricts visible buffers by perspective." + (interactive) + (with-persp-buffer-list () + (helm-mini))) + +(defun spacemacs//helm-perspectives-source () + (helm-build-in-buffer-source + (concat "Current Perspective: " (spacemacs//current-layout-name)) + :data (persp-names) + :fuzzy-match t + :action + '(("Switch to perspective" . persp-switch) + ("Close perspective(s)" . (lambda (candidate) + (mapcar + 'persp-kill-without-buffers + (helm-marked-candidates)))) + ("Kill perspective(s)" . (lambda (candidate) + (mapcar 'persp-kill + (helm-marked-candidates))))))) +(defun spacemacs/helm-perspectives () + "Control Panel for perspectives. Has many actions. +If match is found +f1: (default) Select perspective +f2: Close Perspective(s) <- mark with C-SPC to close more than one-window +f3: Kill Perspective(s) + +If match is not found + Creates perspective + +Closing doesn't kill buffers inside the perspective while killing +perspectives does." + (interactive) + (helm + :buffer "*Helm Perspectives*" + :sources + `(,(spacemacs//helm-perspectives-source) + ,(helm-build-dummy-source "Create new perspective" + :requires-pattern t + :action + '(("Create new perspective" . + (lambda (name) + (let ((persp-reset-windows-on-nil-window-conf t)) + (persp-switch name) + (unless (member name (persp-names-current-frame-fast-ordered)) + (spacemacs/home)))))))))) + +;; ability to use helm find files but also adds to current perspective +(defun spacemacs/helm-persp-close () + "Kills perspectives without killing the buffers" + (interactive) + (helm + :buffer "*Helm Kill Perspectives (without killing buffers)*" + :sources + (helm-build-in-buffer-source + (concat "Current Perspective: " (spacemacs//current-layout-name)) + :data (persp-names) + :fuzzy-match t + :action + '(("Close perspective(s)" . (lambda (candidate) + (mapcar + 'persp-kill-without-buffers + (helm-marked-candidates)))))))) + +(defun spacemacs/helm-persp-kill () + "Kills perspectives with all their buffers" + (interactive) + (helm + :buffer "*Helm Kill Perspectives with all their buffers*" + :sources (helm-build-in-buffer-source + (s-concat "Current Perspective: " + (spacemacs//current-layout-name)) + :data (persp-names) + :fuzzy-match t + :action + '(("Kill perspective(s)" . + (lambda (candidate) + (mapcar 'persp-kill + (helm-marked-candidates)))))))) + +(defun spacemacs/helm-persp-switch-project (arg) + (interactive "P") + (helm + :sources + (helm-build-in-buffer-source "*Helm Switch Project Layout*" + :data (lambda () + (if (projectile-project-p) + (cons (abbreviate-file-name (projectile-project-root)) + (projectile-relevant-known-projects)) + projectile-known-projects)) + :fuzzy-match helm-projectile-fuzzy-match + :mode-line helm-read-file-name-mode-line-string + :action '(("Switch to Project Perspective" . + (lambda (project) + (let ((persp-reset-windows-on-nil-window-conf t)) + (persp-switch project) + (let ((projectile-completion-system 'helm)) + (projectile-switch-project-by-name project))))))) + :buffer "*Helm Projectile Layouts*")) + + +;; Ivy integration + +(defun spacemacs/ivy-persp-switch-project (arg) + (interactive "P") + (ivy-read "Switch to Project Perspective: " + (if (projectile-project-p) + (cons (abbreviate-file-name (projectile-project-root)) + (projectile-relevant-known-projects)) + projectile-known-projects) + :action (lambda (project) + (let ((persp-reset-windows-on-nil-window-conf t)) + (persp-switch project) + (let ((projectile-completion-system 'ivy)) + (projectile-switch-project-by-name project)))))) + + +;; Eyebrowse + +;; Eyebrowse uses window-state objects (as returned by `window-state-get') to +;; store window configurations, so here are some utility functions to help us +;; analyse window-states. +;; it might make more sense to move these functions to a more general place + +(defun spacemacs/window-state-window-p (object) + "Return t if OBJECT is a window, as represented in window-state objects. +Note: this function doesn't test for real window objects, but for +representations of a window in a window-state object as returned by +`window-state-get'." + (and (listp object) + (memq (car object) '(leaf vc hc)))) + +(defun spacemacs/window-state-get-buffer (window) + "Get WINDOW's buffer. +WINDOW is the representation of a window in a window-state object. +The returned value is the representation of a buffer in a window-state +object." + (cdr (assq 'buffer window))) + +(defun spacemacs/window-state-get-buffer-name (window) + "Get WINDOW's buffer's name. +WINDOW is the representation of a window in a window-state object." + (car (spacemacs/window-state-get-buffer window))) + +(defun spacemacs/window-state-walk-windows-1 (window fn) + "Helper function for `spacemacs/window-state-walk-windows'." + ;; WINDOW is a misleading name. WINDOW is a list that can represent a window, + ;; or a concatenation of several windows. window-state objects are weird. + (let ((child-windows + (-filter #'spacemacs/window-state-window-p window)) + (bare-window + ;; if WINDOW contains more than one window, take only the first window + (--take-while (not (spacemacs/window-state-window-p it)) + window))) + (--each child-windows + (spacemacs/window-state-walk-windows-1 it fn)) + (push (funcall fn bare-window) result))) + +(defun spacemacs/window-state-walk-windows (state fn) + "Execute FN once for each window in STATE and make a list of the results. +FN is a function to execute. +STATE is a window-state object." + (let (result) + (spacemacs/window-state-walk-windows-1 (cdr state) fn) + result)) + +(defun spacemacs/window-state-all-windows (state) + "Get all windows contained in STATE. +STATE is a window-state object. +The returned windows are not actual window objects. They are windows as +represented in window-state objects." + (spacemacs/window-state-walk-windows state #'identity)) + +(defun spacemacs/window-state-get-buffer-names (state) + "Get names of all buffers saved in STATE. +STATE is a window-state object as returned by `window-state-get'." + (delq nil (spacemacs/window-state-walk-windows state #'spacemacs/window-state-get-buffer-name))) + +(defun spacemacs/window-state-get-buffers (state) + "Get all buffers saved in STATE. +STATE is a window-state object as returned by `window-state-get'." + ;; delq nil - removes buffers stored in STATE that don't exist anymore + (delq nil (mapcar #'get-buffer (spacemacs/window-state-get-buffer-names state)))) + +(defun spacemacs/find-workspace (buffer) + "Find Eyebrowse workspace containing BUFFER. + If several workspaces contain BUFFER, return the first one. Workspaces are + ordered by slot number. + If no workspace contains + BUFFER, return nil." + ;; the second element of a workspace is its window-state object + (--find (memq buffer (spacemacs/window-state-get-buffers (cadr it))) + (eyebrowse--get 'window-configs))) + +(defun spacemacs/display-in-workspace (buffer alist) + "Display BUFFER's workspace. + Return BUFFER's window, if exists, otherwise nil. + If BUFFER is already visible in current workspace, just return its window + without switching workspaces." + (or (get-buffer-window buffer) + (-when-let (workspace (spacemacs/find-workspace buffer)) + (eyebrowse-switch-to-window-config (car workspace)) + (get-buffer-window buffer)))) + +(defun spacemacs/goto-buffer-workspace (buffer) + "Switch to BUFFER's window in BUFFER's workspace. + If BUFFER isn't displayed in any workspace, display it in the current + workspace, preferably in the current window." + (interactive "B") + (pop-to-buffer buffer '((;; reuse buffer window from some workspace + spacemacs/display-in-workspace + ;; fallback to display in current window + display-buffer-same-window) + (inhibit-same-window . nil)))) + + +;; Eyebrowse transient state + +(defun spacemacs//workspaces-ts-toggle-hint () + "Toggle the full hint docstring for the workspaces transient-state." + (interactive) + (setq spacemacs--ts-full-hint-toggle + (logxor spacemacs--ts-full-hint-toggle 1))) + +(defun spacemacs/workspaces-ts-rename () + "Rename a workspace and get back to transient-state." + (interactive) + (eyebrowse-rename-window-config (eyebrowse--get 'current-slot) nil) + (spacemacs/workspaces-transient-state/body)) + +(defun spacemacs//workspace-format-name (workspace) + "Return a propertized string given a WORKSPACE name." + (let* ((current (eq (eyebrowse--get 'current-slot) (car workspace))) + (name (nth 2 workspace)) + (number (car workspace)) + (caption (if (< 0 (length name)) + (concat (int-to-string number) ":" name) + (int-to-string number)))) + (if current + (propertize (concat "[" caption "]") 'face 'warning) + caption))) + +(defun spacemacs//workspaces-ts-hint () + "Return a one liner string containing all the workspaces names." + (concat + " " + (mapconcat 'spacemacs//workspace-format-name + (eyebrowse--get 'window-configs) " | ") + (if (equal 1 spacemacs--ts-full-hint-toggle) + spacemacs--workspaces-ts-full-hint + (concat " ([" + (propertize "?" 'face 'hydra-face-red) + "] help)")))) + + +;; Eyebrowse and Persp integration + +(defun spacemacs//get-persp-workspace (&optional persp frame) + "Get the correct workspace parameters for perspective. +PERSP is the perspective, and defaults to the current perspective. +FRAME is the frame where the parameters are expected to be used, and +defaults to the current frame." + (let ((param-names (if (display-graphic-p frame) + '(gui-eyebrowse-window-configs + gui-eyebrowse-current-slot + gui-eyebrowse-last-slot) + '(term-eyebrowse-window-configs + term-eyebrowse-current-slot + term-eyebrowse-last-slot)))) + (--map (persp-parameter it persp) param-names))) + +(defun spacemacs//set-persp-workspace (workspace-params &optional persp frame) + "Set workspace parameters for perspective. +WORKSPACE-PARAMS should be a list containing 3 elements in this order: +- window-configs, as returned by (eyebrowse--get 'window-configs) +- current-slot, as returned by (eyebrowse--get 'current-slot) +- last-slot, as returned by (eyebrowse--get 'last-slot) +PERSP is the perspective, and defaults to the current perspective. +FRAME is the frame where the parameters came from, and defaults to the +current frame. + +Each perspective has two sets of workspace parameters: one set for +graphical frames, and one set for terminal frames." + (let ((param-names (if (display-graphic-p frame) + '(gui-eyebrowse-window-configs + gui-eyebrowse-current-slot + gui-eyebrowse-last-slot) + '(term-eyebrowse-window-configs + term-eyebrowse-current-slot + term-eyebrowse-last-slot)))) + (--zip-with (set-persp-parameter it other persp) + param-names workspace-params))) + +(defun spacemacs/load-eyebrowse-for-perspective (type &optional frame) + "Load an eyebrowse workspace according to a perspective's parameters. + FRAME's perspective is the perspective that is considered, defaulting to + the current frame's perspective. + If the perspective doesn't have a workspace, create one." + (when (eq type 'frame) + (let* ((workspace-params (spacemacs//get-persp-workspace (get-frame-persp frame) frame)) + (window-configs (nth 0 workspace-params)) + (current-slot (nth 1 workspace-params)) + (last-slot (nth 2 workspace-params))) + (if window-configs + (progn + (eyebrowse--set 'window-configs window-configs frame) + (eyebrowse--set 'current-slot current-slot frame) + (eyebrowse--set 'last-slot last-slot frame) + (eyebrowse--load-window-config current-slot)) + (eyebrowse--set 'window-configs nil frame) + (eyebrowse-init frame) + (spacemacs/save-eyebrowse-for-perspective frame))))) + +(defun spacemacs/load-eyebrowse-after-loading-layout (_state-file _phash persp-names) + "Bridge between `persp-after-load-state-functions' and +`spacemacs/load-eyebrowse-for-perspective'. + +_PHASH is the hash were the loaded perspectives were placed, and +PERSP-NAMES are the names of these perspectives." + (let ((cur-persp (get-current-persp))) + ;; load eyebrowse for current perspective only if it was one of the loaded + ;; perspectives + (when (member (or (and cur-persp (persp-name cur-persp)) + persp-nil-name) + persp-names) + (spacemacs/load-eyebrowse-for-perspective 'frame)))) + +(defun spacemacs/update-eyebrowse-for-perspective (&rest _args) + "Update and save current frame's eyebrowse workspace to its perspective." + (let* ((current-slot (eyebrowse--get 'current-slot)) + (current-tag (nth 2 (assoc current-slot (eyebrowse--get 'window-configs))))) + (eyebrowse--update-window-config-element + (eyebrowse--current-window-config current-slot current-tag))) + (spacemacs/save-eyebrowse-for-perspective)) + +(defun spacemacs/save-eyebrowse-for-perspective (&optional frame) + "Save FRAME's eyebrowse workspace to FRAME's perspective. +FRAME defaults to the current frame." + (spacemacs//set-persp-workspace (list (eyebrowse--get 'window-configs frame) + (eyebrowse--get 'current-slot frame) + (eyebrowse--get 'last-slot frame)) + (get-frame-persp frame) + frame)) diff --git a/layers/+spacemacs/spacemacs-layouts/packages.el b/layers/+spacemacs/spacemacs-layouts/packages.el new file mode 100644 index 0000000..2559a7c --- /dev/null +++ b/layers/+spacemacs/spacemacs-layouts/packages.el @@ -0,0 +1,230 @@ +;;; packages.el --- Spacemacs Layouts Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-layouts-packages + '(eyebrowse + helm + ivy + persp-mode + spaceline + swiper)) + + + +(defun spacemacs-layouts/init-eyebrowse () + (use-package eyebrowse + :init + (progn + (setq eyebrowse-wrap-around t) + (eyebrowse-mode) + ;; transient state + (spacemacs|transient-state-format-hint workspaces + spacemacs--workspaces-ts-full-hint + "\n\n + Go to^^^^^^ Actions^^ + ─────^^^^^^─────────────────────── ───────^^────────────────────── + [_0_,_9_]^^ nth/new workspace [_d_] close current workspace + [_C-0_,_C-9_]^^ nth/new workspace [_R_] rename current workspace + [__]^^^^ last workspace [_?_] toggle help\n + [_l_]^^^^ layouts + [_n_/_C-l_]^^ next workspace + [_N_/_p_/_C-h_] prev workspace\n") + + (spacemacs|define-transient-state workspaces + :title "Workspaces Transient State" + :hint-is-doc t + :dynamic-hint (spacemacs//workspaces-ts-hint) + :bindings + ("?" spacemacs//workspaces-ts-toggle-hint) + ("0" eyebrowse-switch-to-window-config-0 :exit t) + ("1" eyebrowse-switch-to-window-config-1 :exit t) + ("2" eyebrowse-switch-to-window-config-2 :exit t) + ("3" eyebrowse-switch-to-window-config-3 :exit t) + ("4" eyebrowse-switch-to-window-config-4 :exit t) + ("5" eyebrowse-switch-to-window-config-5 :exit t) + ("6" eyebrowse-switch-to-window-config-6 :exit t) + ("7" eyebrowse-switch-to-window-config-7 :exit t) + ("8" eyebrowse-switch-to-window-config-8 :exit t) + ("9" eyebrowse-switch-to-window-config-9 :exit t) + ("C-0" eyebrowse-switch-to-window-config-0) + ("C-1" eyebrowse-switch-to-window-config-1) + ("C-2" eyebrowse-switch-to-window-config-2) + ("C-3" eyebrowse-switch-to-window-config-3) + ("C-4" eyebrowse-switch-to-window-config-4) + ("C-5" eyebrowse-switch-to-window-config-5) + ("C-6" eyebrowse-switch-to-window-config-6) + ("C-7" eyebrowse-switch-to-window-config-7) + ("C-8" eyebrowse-switch-to-window-config-8) + ("C-9" eyebrowse-switch-to-window-config-9) + ("" eyebrowse-last-window-config) + ("C-h" eyebrowse-prev-window-config) + ("C-i" eyebrowse-last-window-config) + ("C-l" eyebrowse-next-window-config) + ("d" eyebrowse-close-window-config) + ("l" spacemacs/layouts-transient-state/body :exit t) + ("n" eyebrowse-next-window-config) + ("N" eyebrowse-prev-window-config) + ("p" eyebrowse-prev-window-config) + ("R" spacemacs/workspaces-ts-rename :exit t) + ("w" eyebrowse-switch-to-window-config :exit t)) + ;; note: we don't need to declare the `SPC l w' binding, it is + ;; declare in the layout transient state + (spacemacs/set-leader-keys "bW" 'spacemacs/goto-buffer-workspace) + ;; hooks + (add-hook 'persp-before-switch-functions + #'spacemacs/update-eyebrowse-for-perspective) + (add-hook 'eyebrowse-post-window-switch-hook + #'spacemacs/save-eyebrowse-for-perspective) + (add-hook 'persp-activated-functions + #'spacemacs/load-eyebrowse-for-perspective) + (add-hook 'persp-before-save-state-to-file-functions #'spacemacs/update-eyebrowse-for-perspective) + (add-hook 'persp-after-load-state-functions #'spacemacs/load-eyebrowse-after-loading-layout) + ;; vim-style tab switching + (define-key evil-motion-state-map "gt" 'eyebrowse-next-window-config) + (define-key evil-motion-state-map "gT" 'eyebrowse-prev-window-config)))) + + + +(defun spacemacs-layouts/post-init-helm () + (spacemacs/set-leader-keys + "Bb" 'spacemacs-layouts/non-restricted-buffer-list-helm + "pl" 'spacemacs/helm-persp-switch-project)) + + + +(defun spacemacs-layouts/post-init-ivy () + (spacemacs/set-leader-keys + "Bb" 'spacemacs-layouts/non-restricted-buffer-list-ivy)) + + + +(defun spacemacs-layouts/init-persp-mode () + (use-package persp-mode + :diminish persp-mode + :init + (progn + (setq persp-auto-resume-time (if (or dotspacemacs-auto-resume-layouts + spacemacs-force-resume-layouts) + 1 -1) + persp-nil-name dotspacemacs-default-layout-name + persp-reset-windows-on-nil-window-conf nil + persp-set-last-persp-for-new-frames nil + persp-save-dir spacemacs-layouts-directory + persp-set-ido-hooks t) + + (defun spacemacs//activate-persp-mode () + "Always activate persp-mode, unless it is already active. + (e.g. don't re-activate during `dotspacemacs/sync-configuration-layers' - + see issues #5925 and #3875)" + (unless (bound-and-true-p persp-mode) + (persp-mode))) + (spacemacs/defer-until-after-user-config #'spacemacs//activate-persp-mode) + + ;; layouts transient state + ;; TODO move helm specific key bindings to helm layer + ;; (see ivy for how to do it) + (spacemacs|transient-state-format-hint layouts + spacemacs--layouts-ts-full-hint + "\n\n + Go to^^^^^^ Actions^^ + ─────^^^^^^────────────────────────────── ───────^^────────────────────────────────────────────────── + [_0_,_9_]^^ nth/new layout [_a_]^^ add buffer + [_C-0_,_C-9_]^^ nth/new layout [_A_]^^ add all from layout + [__]^^^^ last layout [_d_]^^ close current layout + [_b_]^^^^ buffer in layout [_D_]^^ close other layout + [_h_]^^^^ default layout [_r_]^^ remove current buffer + [_l_]^^^^ layout w/helm/ivy [_R_]^^ rename current layout + [_L_]^^^^ layouts in file [_s_/_S_] save all layouts/save by names + [_n_/_C-l_]^^ next layout [_t_]^^ show a buffer without adding it to current layout + [_N_/_p_/_C-h_] prev layout [_x_]^^ kill current w/buffers + [_o_]^^^^ custom layout [_X_]^^ kill other w/buffers + [_w_]^^^^ workspaces transient state [_?_]^^ toggle help\n") + + (spacemacs|define-transient-state layouts + :title "Layouts Transient State" + :hint-is-doc t + :dynamic-hint (spacemacs//layouts-ts-hint) + :bindings + ;; need to exit in case number doesn't exist + ("?" spacemacs//layouts-ts-toggle-hint) + ("1" spacemacs/persp-switch-to-1 :exit t) + ("2" spacemacs/persp-switch-to-2 :exit t) + ("3" spacemacs/persp-switch-to-3 :exit t) + ("4" spacemacs/persp-switch-to-4 :exit t) + ("5" spacemacs/persp-switch-to-5 :exit t) + ("6" spacemacs/persp-switch-to-6 :exit t) + ("7" spacemacs/persp-switch-to-7 :exit t) + ("8" spacemacs/persp-switch-to-8 :exit t) + ("9" spacemacs/persp-switch-to-9 :exit t) + ("0" spacemacs/persp-switch-to-0 :exit t) + ("C-1" spacemacs/persp-switch-to-1) + ("C-2" spacemacs/persp-switch-to-2) + ("C-3" spacemacs/persp-switch-to-3) + ("C-4" spacemacs/persp-switch-to-4) + ("C-5" spacemacs/persp-switch-to-5) + ("C-6" spacemacs/persp-switch-to-6) + ("C-7" spacemacs/persp-switch-to-7) + ("C-8" spacemacs/persp-switch-to-8) + ("C-9" spacemacs/persp-switch-to-9) + ("C-0" spacemacs/persp-switch-to-0) + ("" spacemacs/jump-to-last-layout) + ("" nil :exit t) + ("C-h" persp-prev) + ("C-l" persp-next) + ("a" persp-add-buffer :exit t) + ("A" persp-import-buffers :exit t) + ("b" spacemacs/persp-helm-mini :exit t) + ("d" spacemacs/layouts-ts-close) + ("D" spacemacs/layouts-ts-close-other :exit t) + ("h" spacemacs/layout-goto-default :exit t) + ("l" spacemacs/helm-perspectives :exit t) + ("L" persp-load-state-from-file :exit t) + ("n" persp-next) + ("N" persp-prev) + ("o" spacemacs/select-custom-layout :exit t) + ("p" persp-prev) + ("r" persp-remove-buffer :exit t) + ("R" spacemacs/layouts-ts-rename :exit t) + ("s" persp-save-state-to-file :exit t) + ("S" persp-save-to-file-by-names :exit t) + ("t" persp-temporarily-display-buffer :exit t) + ("w" spacemacs/workspaces-transient-state/body :exit t) + ("x" spacemacs/layouts-ts-kill) + ("X" spacemacs/layouts-ts-kill-other :exit t)) + (spacemacs/set-leader-keys "l" 'spacemacs/layouts-transient-state/body) + ;; custom layouts + (spacemacs|define-custom-layout "@Spacemacs" + :binding "e" + :body + (spacemacs/find-dotfile))) + :config + (progn + (defadvice persp-activate (before spacemacs//save-toggle-layout activate) + (setq spacemacs--last-selected-layout persp-last-persp-name)) + (add-hook 'persp-mode-hook 'spacemacs//layout-autosave) + (spacemacs/declare-prefix "b" "persp-buffers") + (spacemacs/declare-prefix "B" "global-buffers") + ;; Override SPC TAB to only change buffers in perspective + (spacemacs/set-leader-keys + "TAB" 'spacemacs/alternate-buffer-in-persp + "ba" 'persp-add-buffer + "br" 'persp-remove-buffer)))) + + + +(defun spacemacs-layouts/post-init-spaceline () + (setq spaceline-display-default-perspective + dotspacemacs-display-default-layout)) + + + +(defun spacemacs-layouts/post-init-swiper () + (spacemacs/set-leader-keys "pl" 'spacemacs/ivy-persp-switch-project)) diff --git a/layers/+spacemacs/spacemacs-misc/packages.el b/layers/+spacemacs/spacemacs-misc/packages.el new file mode 100644 index 0000000..31aa5f2 --- /dev/null +++ b/layers/+spacemacs/spacemacs-misc/packages.el @@ -0,0 +1,35 @@ +;;; packages.el --- Spacemacs Misc. Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-misc-packages + '( + dumb-jump + request + )) + +(defun spacemacs-misc/init-dumb-jump () + (use-package dumb-jump + :defer t + :init + (progn + ;; not activating `dumb-jump-mode' because it only adds key bindings, and + ;; they conflict with existing bindings (see + ;; https://github.com/syl20bnr/spacemacs/issues/7107) + + (spacemacs/set-leader-keys "jq" #'dumb-jump-quick-look) + ;; Since it's dumb, we add it to the end of the default jump handlers. At + ;; the time of writing it is the only default jump handler. (gtags remains + ;; mode-local) + (add-to-list 'spacemacs-default-jump-handlers 'dumb-jump-go 'append)))) + +(defun spacemacs-misc/init-request () + (setq request-storage-directory + (concat spacemacs-cache-directory "request/"))) diff --git a/layers/+spacemacs/spacemacs-org/local/space-doc/space-doc.el b/layers/+spacemacs/spacemacs-org/local/space-doc/space-doc.el new file mode 100644 index 0000000..8463fe8 --- /dev/null +++ b/layers/+spacemacs/spacemacs-org/local/space-doc/space-doc.el @@ -0,0 +1,456 @@ +;;; space-doc.el --- Spacemacs documentation minor mode. +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;; Description: +;; This package provides: +;; - `space-doc-mode' - buffer local minor mode +;; for viewing the Spacemacs documentation files. +;; The mode hides org meta tags to improve readability. +;; - `org-mode' link-type "https" that opens the local +;; copies of the Spacemacs documentation files with +;; `spacemacs/view-org-file' and supports GitHub style +;; heading links. +;; +;; For example, the link: +;; https://github.com/syl20bnr/spacemacs/blob/develop/layers/org/README.org#links +;; Will be handled similary to as if it was: +;; file:~/.emacs.d/layers/org/README.org::*links +;; Also the `space-doc' mode will be applied. + +;;; License: GPLv3 +;;; Code: +(require 'face-remap) +(require 'org) +(require 'org-compat) +(require 'centered-buffer-mode) + +(defgroup space-doc nil "Minor mode for viewing Spacemacs documentation files." + :group 'convenience) + +(define-minor-mode space-doc-mode + "Buffer local minor mode for viewing Spacemacs documentation files. +This mode: + - hides `org-mode' meta tags like #+TITLE: while +keeping their content visible. + - Improves emphasized region apparence. + - enables buffer local link opening with `spacemacs//space-doc-open'. +================================================= += THE MODE IS CUSTOMIZABLE - read Spacemacs FAQ = +=================================================" + :init-value nil + :lighter " SD" + :group 'space-doc + (spacemacs//space-doc-centered-buffer-mode-goto-origin space-doc-mode) + (if (derived-mode-p 'org-mode) + (let ((inhibit-read-only t)) + (spacemacs//space-doc-set-cache +1) + (dolist (modificator spacemacs-space-doc-modificators-functions) + (when (member (car modificator) + spacemacs-space-doc-modificators) + (funcall (cdr modificator) space-doc-mode)))) + ;; Force `org-mode' to replace font text properties with the default ones. + (unless space-doc-mode (org-font-lock-ensure)) + (message (format "space-doc-mode error:%s isn't an org-mode buffer" + (buffer-name))) + (setq space-doc-mode nil))) + +;; NOTE: Dont forget to update Spacemacs FAQ if you modify this list! +(defcustom spacemacs-space-doc-modificators + '(org-indent-mode + view-mode + hide-line-numbers + alternative-emphasis + alternative-tags-look + link-protocol + org-block-line-face-remap + org-kbd-face-remap + resize-inline-images) + "List of `space-doc' modificators." + :type '(set (const center-buffer-mode) + (const org-indent-mode) + (const view-mode) + (const hide-line-numbers) + (const alternative-emphasis) + (const alternative-tags-look) + (const link-protocol) + (const org-block-line-face-remap) + (const org-kbd-face-remap) + (const resize-inline-images)) + :group 'space-doc) + +(defcustom spacemacs-space-doc-center-buffer-mode-min-aspect-ratio + 1.7 + "Minimal `frame' aspect ration (`frame-pixel-width' divided by `frame-pixel-height') +for `spacemacs-centered-buffer-mode' to be automatically enabled. +NOTE: If `center-buffer-mode' isn't a member of `spacemacs-space-doc-modificators' +list `spacemacs-centered-buffer-mode' will not be enabled." + :type 'number + :group 'space-doc) + +(defvar spacemacs-space-doc-modificators-functions + '((center-buffer-mode . spacemacs//space-doc-center-buffer-mode) + (org-indent-mode . spacemacs//space-doc-org-indent-mode) + (view-mode . spacemacs//space-doc-view-mode) + (hide-line-numbers . spacemacs//space-doc-hide-line-numbers) + (alternative-emphasis . spacemacs//space-doc-alternative-emphasis) + (alternative-tags-look . spacemacs//space-doc-alternative-tags-look) + (link-protocol . spacemacs//space-doc-link-protocol) + (org-block-line-face-remap . spacemacs//space-doc-org-block-line-face-remap) + (org-kbd-face-remap . spacemacs//space-doc-org-kbd-face-remap) + (resize-inline-images . spacemacs//space-doc-resize-inline-images)) + "alist of `space-doc' modificator (tag . function) for `org-mode' buffers. +The functions work with a current buffer and accept ENABLE(flag) argument. +If the argument has non-nil value - enable the modifications introduced +by the function. Otherwise - disable. The tags used in `spacemacs-space-doc-modificators'") + +(defun spacemacs//space-doc-centered-buffer-mode-goto-origin (flag) + "Switch to the origin buffer if `spacemacs-centere-buffer-mode' is +enabled. Set the value of `space-doc-mode' variable in the origin +buffer to FLAG." + (when spacemacs-centered-buffer-mode + (let ((old-flag space-doc-mode)) + (spacemacs-centered-buffer-mode -1) + (setq space-doc-mode old-flag)))) + +(defun spacemacs//space-doc-center-buffer-mode (&optional flag) + "Enable `spacemacs-centered-buffer-mode' if flag is non nil, disable it otherwise. +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + (when (and flag + (not spacemacs-centered-buffer-mode) + (>= (/ (* (frame-pixel-width) 1.0) (frame-pixel-height)) + spacemacs-space-doc-center-buffer-mode-min-aspect-ratio)) + ;; `spacemacs-centered-buffer-mode' is heavy so it's better to make if deferred. + ;; Also it has to be run when the `window-body-width' is properly calculated. + (run-with-idle-timer 0 nil 'spacemacs-centered-buffer-mode)) + (spacemacs-centered-buffer-mode -1)) + +(defun spacemacs//space-doc-org-indent-mode (&optional flag) + "Enable `org-indent-mode' if flag is non nil, disable it otherwise. +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + (org-indent-mode (if flag 1 -1))) + +(defun spacemacs//space-doc-view-mode (&optional flag) + "Enable `view-mode' if flag is non nil, disable it otherwise. +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + (view-mode (if flag 1 -1))) + +(cl-defstruct spacemacs--space-doc-cache-struct + marker-face + btn-marker-face + kbd-marker) + +(defvar-local spacemacs--space-doc-cache nil + "Global variable of struct `spacemacs-space-doc-cache-struct'. +It is set by `spacemacs//space-doc-set-cache'.") + +(defun spacemacs//space-doc-set-cache (&optional flag) + "Set `spacemacs--space-doc-cache'. +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + (setq spacemacs--space-doc-cache + (if flag + (let* ((kbd-bg (or (face-background 'org-kbd) + (face-background 'region) + 'unspecified)) + (table-bg (or (face-background 'org-table) + (face-background 'default) + 'unspecified)) + (marker-face + `(:inherit org-table + :foreground ,table-bg)) + (btn-marker-face + `(:inherit org-kbd + :distant-foreground ,kbd-bg + :foreground ,kbd-bg)) + (kbd-marker + (dolist (el org-emphasis-alist) + (when (member 'org-kbd el) + (return (car el)))))) + (make-spacemacs--space-doc-cache-struct + :marker-face marker-face + :btn-marker-face btn-marker-face + :kbd-marker kbd-marker))))) + +(defun spacemacs//space-doc-hide-line-numbers (&optional enable) + "If ENABLE is non-nil then toggle off the line numbers. +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + (if enable + (spacemacs/toggle-line-numbers-off) + (when dotspacemacs-line-numbers + (spacemacs/toggle-line-numbers-on)))) + +(defun spacemacs//space-doc-org-do-emphasis-faces-advice (found) + "If FOUND has non-nil value then modify emphasized regions +appearances in the current buffer. The function uses +`match-data' set by `org-do-emphasis-faces' function." + ;; `org-do-emphasis-faces' returns non-nil value when it + ;; found a region to emphasize. + (when (and space-doc-mode + found + (not (and + (match-string 4) + (string-empty-p + (replace-regexp-in-string "\\*+" + "" + (match-string 4)))))) + (spacemacs//space-doc-emphasis-region + (match-beginning 2) + (match-end 2))) + found) + +(defun spacemacs//space-doc-advice-org-do-emphasis-faces (&optional enable) + "Advise org-do-emphasis-faces. +If ENABLE is non-nil, add advice `org-do-emphasis-faces' function with +`spacemacs//space-doc-org-do-emphasis-faces-advice'. +NOTE: `org-do-emphasis-faces' is lazy and will emphasize only part of the +current buffer so piggybacking it should be pretty performant solution." + (when enable + (advice-add 'org-do-emphasis-faces + :after + #'spacemacs//space-doc-org-do-emphasis-faces-advice))) + +(defun spacemacs//space-doc-add-region-edge-text-property (begin end property &optional face) + "Add text PROPERTY to the first and last character of the BEGIN END text region +with `add-text-properties' or if FACE has non-nil value `add-face-text-property'." + (let ((edge-sub-regs (list (list (1+ begin) begin) + (list (1- end) end)))) + (dolist (edge-sub-reg edge-sub-regs) + (funcall (if face + 'add-face-text-property + 'add-text-properties) + (car edge-sub-reg) + (cadr edge-sub-reg) + property)))) + +(defun spacemacs//space-doc-emphasis-region (begin end) + "Emphasis region based on its leading character. +The character should be one of the markers from `org-emphasis-alist'." + (let ((kbd-face (spacemacs--space-doc-cache-struct-btn-marker-face + spacemacs--space-doc-cache)) + (marker-face (spacemacs--space-doc-cache-struct-marker-face + spacemacs--space-doc-cache))) + (if (string= (buffer-substring-no-properties begin + (1+ begin)) + (spacemacs--space-doc-cache-struct-kbd-marker + spacemacs--space-doc-cache)) + (spacemacs//space-doc-add-region-edge-text-property begin end kbd-face t) + (if (save-excursion + (goto-char begin) + (beginning-of-line) + (looking-at-p org-table-any-line-regexp)) + ;; If inside table. + (spacemacs//space-doc-add-region-edge-text-property begin end marker-face t) + (spacemacs//space-doc-add-region-edge-text-property + begin + end + '(invisible spacemacs--space-doc-invisible-marker)))))) + +(defun spacemacs//space-doc-alternative-emphasis (&optional enable) + "Emphasis overlays. +If ENABLE is non-nil, change the look of regions which have already +been emphasized by `org-do-emphasis-faces' in the current buffer. +Otherwise revert to the normal look. +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + (if enable + (progn + (spacemacs//space-doc-advice-org-do-emphasis-faces enable) + (add-to-invisibility-spec 'spacemacs--space-doc-invisible-marker) + (dolist (emphasized-region + (spacemacs//space-doc-find-regions-by-text-property + 'org-emphasis t)) + (spacemacs//space-doc-emphasis-region + (car emphasized-region) + (cadr emphasized-region)))) + (remove-from-invisibility-spec 'spacemacs--space-doc-invisible-marker))) + +(defun spacemacs//space-doc-org-kbd-face-remap (&optional enable) + "Remove boxes from key bindings. +If ENABLE is non-nil, removes boxes from the `org-kbd'face in the current +`org-mode' buffer. +Otherwise, reverts them to default. +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + (if enable + (set (make-local-variable + 'spacemacs--space-doc-org-kbd-face-remap-cookie) + (face-remap-add-relative 'org-kbd + `(:box nil))) + (when (bound-and-true-p spacemacs--space-doc-org-kbd-face-remap-cookie) + (face-remap-remove-relative + spacemacs--space-doc-org-kbd-face-remap-cookie)))) + +(defun spacemacs//space-doc-resize-inline-images (&optional enable) + "Resize inline images. +If ENABLE is non nil then resize inline images. +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + ;; resizing is always performed even when the image is smaller + ;; so we don't resize in README.org buffers for now + (let ((org-image-actual-width + (and enable + (not (string-match-p ".*README.org\\'" (buffer-file-name))) + 600))) + (org-display-inline-images))) + +(defun spacemacs//space-doc-tags-fontify (startish endish &optional verbose) + "Fontify `org-mode' tags in the fuzzy region that starts + before STARTISH and end after ENDISH. VERBOSE ignored." + ;; TODO add more types of tags or meta-line if needed. + (let ((invisible-org-meta-tags-list + `(;; Hide TITLE tag. + "\\([ \t]*\\#\\+TITLE\\:\[ \t]*\\)" + ;; Hide CAPTION logo meta line. + "\\(\n.*\\#\\+CAPTION\\:.*\\)" + ;; Hide TOC-ORG tag and spaces before it. + ;; Use modified `toc-org-toc-org-regexp' because + ;; the original one matches whole string. + ,(concat "\\([ \t]*:toc\\([@_][0-9]\\|\\([@_][0-9]" + "[@_][a-zA-Z]+\\)\\)?:\\($\\|[^ ]*:$\\)\\)") + ;; Hide empty line before #+BEGIN_SRC tag if + ;; background color of the `org-block-begin-line' + ;; face is unspecified. + ,(unless (face-background 'org-block-begin-line) + "\n\\(\n\\)[ \t]*\\#\\+begin_src.*$") + ;; Hide empty line after #+END_SRC tag if + ;; background color of the `org-block-end-line' + ;; face is unspecified and the next line isn't + ;;an org headline. + ,(unless (face-background 'org-block-end-line) + "^[ \t]*\\#\\+end_src.*\n\\(\n\\)[^\\*]"))) + (start (save-excursion (goto-char (or startish + (point-min))) + (point-at-bol -2))) + (end (save-excursion (goto-char (or endish + (point-max))) + (point-at-eol 2)))) + ;; Remove nils. + (setq invisible-org-meta-tags-list + (remove nil invisible-org-meta-tags-list)) + ;; Make `org-mode' meta tags invisible. + (dolist (tag invisible-org-meta-tags-list) + (save-excursion + (goto-char start) + (while (re-search-forward tag end t) + (add-text-properties (match-beginning 1) + (match-end 1) + (list 'invisible 'spacemacs--space-doc-invisible-marker))))))) + +(defun spacemacs//space-doc-font-lock-fontify-region-function (start end &optional verbose) + "Wrapper around `font-lock-default-fontify-region' function for the buffer local value of +`font-lock-fontify-region-function'. Makes sure that `font-lock-default-fontify-region' +text property persist after `org-mode' shenanigans. +NOTE: Not using `advice-add' because it is global modification. +FIXME: Find cleaner solution." + (font-lock-default-fontify-region start end verbose) + (spacemacs//space-doc-tags-fontify start end verbose)) + +(defun spacemacs//space-doc-alternative-tags-look (&optional enable) + "Modify meta tag appearance. +If ENABLE is non-nil, modify `org-mode' meta tags appearance in the current +buffer. +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + (if enable + (setq-local font-lock-fontify-region-function + 'spacemacs//space-doc-font-lock-fontify-region-function) + (kill-local-variable 'font-lock-fontify-region-function))) + +(defun spacemacs//space-doc-org-block-line-face-remap (&optional enable) + "Hide drawers. +If ENABLE is non-nil, hide text of the code block meta lines in the current +buffer. If the blocks have background color text won't be masked because it +makes them look ugly with some themes. +If ENABLE has nil, revert to the default. +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + (if enable + (let* ((default-bg (or (face-background 'default) + 'unspecified)) + (org-bb-bg (or (face-background 'org-block-begin-line) + (face-background 'org-meta-line))) + (hide-bb-text-face `(:inherit org-block-begin-line + :foreground ,default-bg + :distant-foreground ,default-bg)) + (org-bn-bg (or (face-background 'org-block-end-line) + (face-background 'org-meta-line))) + (hide-bn-text-face `(:inherit org-block-end-line + :foreground ,default-bg + :distant-foreground ,default-bg))) + (unless org-bb-bg + (set (make-local-variable + 'spacemacs--space-doc-org-block-begin-line-face-remap-cookie) + (face-remap-add-relative 'org-block-begin-line + hide-bb-text-face))) + (unless org-bn-bg + (set (make-local-variable + 'spacemacs--space-doc-org-block-end-line-face-remap-cookie) + (face-remap-add-relative 'org-block-end-line + hide-bn-text-face)))) + (when (bound-and-true-p + spacemacs--space-doc-org-block-begin-line-face-remap-cookie) + (face-remap-remove-relative + spacemacs--space-doc-org-block-begin-line-face-remap-cookie)) + (when (bound-and-true-p + spacemacs--space-doc-org-block-end-line-face-remap-cookie) + (face-remap-remove-relative + spacemacs--space-doc-org-block-end-line-face-remap-cookie)))) + +(defun spacemacs//space-doc-link-protocol (&optional enable) + "Open HTTPS links in the curren buffer. +If ENABLE is non-nil, use `spacemacs//space-doc-open' to open HTTPS links +in the current `org-mode' buffer. +Otherwise open them in the browser(default behavior). +This functions is aimed to be used with `spacemacs-space-doc-modificators'." + (if enable + (progn + ;; Make `space-doc' https link opener buffer local + ;; and enable it only when `space-doc' mode is enabled. + (make-local-variable 'org-link-types) + (make-local-variable 'org-link-protocols) + (org-add-link-type "https" 'spacemacs//space-doc-open)) + (kill-local-variable 'org-link-types) + (kill-local-variable 'org-link-protocols)) + ;; Trigger `org-mode' internal updates. + ;; NOTE: might be unnecessary. + (org-add-link-type nil)) + +(defun spacemacs//space-doc-open (path) + "Open PATH link. +If PATH argument is a link to an .org file that is located in the Spacemacs +GitHub repository then visit the local copy of the file with +`spacemacs/view-org-file'. +Open all other links with `browse-url'." + (let ((git-url-root-regexp + (concat "\\/\\/github\\.com\\/syl20bnr\\/spacemacs\\/blob" + "\\/[^/]+\\/\\(.*\\.org\\)\\(\\#.*\\)?"))) + (if (string-match git-url-root-regexp path) + (spacemacs/view-org-file (concat spacemacs-start-directory + (match-string 1 path)) + (or (match-string 2 path) + "^") + 'subtree) + (browse-url (concat "https://" path))))) + +(defun spacemacs//space-doc-find-regions-by-text-property + (property value &optional start end) + "Return a list of pairs (region-beginning region-end) in +the current buffer. If START or END has non-nil value - use them as +boundaries. +NOTE: It can find only fontified regions." + (let ((p-min (or start (point-min))) + (p-max (or end (point-max))) + (r-end nil) + (ret (list))) + (while (not (= p-min p-max)) + (setq p-min (or (text-property-any p-min p-max property value) + (point-max)) + r-end (or (text-property-not-all p-min p-max property value) + (point-max)) + ret (append ret (unless (= p-min r-end) + (list(list p-min r-end)))) + p-min r-end)) + ret)) + +(provide 'space-doc) +;;; space-doc.el ends here. diff --git a/layers/+spacemacs/spacemacs-org/packages.el b/layers/+spacemacs/spacemacs-org/packages.el new file mode 100644 index 0000000..c8310f6 --- /dev/null +++ b/layers/+spacemacs/spacemacs-org/packages.el @@ -0,0 +1,80 @@ +;;; packages.el --- spacemacs-org layer packages file for Spacemacs. +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Boris Buliga +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;;; Commentary: + +;;; Code: + +(defconst spacemacs-org-packages + '( + flyspell + ;; default-org package does not exist, we invent this package name + ;; to allow the `org' layer to own the `org' package instead of this + ;; layer. So it is easier for users to steal the ownership of the + ;; `org' package. + (default-org-config :location built-in) + (org-plus-contrib :step pre) + org-bullets + (space-doc :location local) + toc-org + )) + +(defun spacemacs-org/post-init-flyspell () + (spell-checking/add-flyspell-hook 'org-mode-hook)) + +;; dummy init function to force installation of `org-plus-contrib' +(defun spacemacs-org/init-org-plus-contrib ()) + +(defun spacemacs-org/init-default-org-config () + (use-package org + :commands (org-clock-out org-occur-in-agenda-files org-agenda-files) + :defer t + :init + (progn + ;; FIXME: This check has been disabled pending a resolution of + ;; https://github.com/syl20bnr/spacemacs/issues/3933 + ;; (when (featurep 'org) + ;; (configuration-layer//set-error) + ;; (spacemacs-buffer/append + ;; (concat + ;; "Org features were loaded before the `org' layer initialized.\n" + ;; "Try removing org code from user initialization and private layers.") t)) + (setq org-startup-with-inline-images t + org-src-fontify-natively t + ;; this is consistent with the value of + ;; `helm-org-headings-max-depth'. + org-imenu-depth 8) + :config + (progn + (font-lock-add-keywords + 'org-mode '(("\\(@@html:@@\\) \\(.*\\) \\(@@html:@@\\)" + (1 font-lock-comment-face prepend) + (2 font-lock-function-name-face) + (3 font-lock-comment-face prepend)))) + ;; Open links and files with RET in normal state + (evil-define-key 'normal org-mode-map (kbd "RET") 'org-open-at-point))))) + +(defun spacemacs-org/init-org-bullets () + (use-package org-bullets + :defer t + :init (add-hook 'org-mode-hook 'org-bullets-mode))) + +(defun spacemacs-org/init-toc-org () + (use-package toc-org + :defer t + :init + (progn + (setq toc-org-max-depth 10) + (add-hook 'org-mode-hook 'toc-org-enable)))) + +(defun spacemacs-org/init-space-doc ()) + +;;; packages.el ends here diff --git a/layers/+spacemacs/spacemacs-ui-visual/config.el b/layers/+spacemacs/spacemacs-ui-visual/config.el new file mode 100644 index 0000000..068a7ca --- /dev/null +++ b/layers/+spacemacs/spacemacs-ui-visual/config.el @@ -0,0 +1,22 @@ +;;; config.el --- Spacemacs UI Visual Layer configuration File +;; +;; Copyright (c) 2016 Sylvain Benner & Contributors +;; +;; Author: Riccardo Murri +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defcustom spacemacs-spaceline-additional-segments + '((new-version :when active)) + "Additional segments for the Spacemacs modeline. + +They are inserted in the modeline between `global' and +`buffer-position'. + +Must be a list of valid segments; see `spaceline-install' for +more information on what constitutes a valid segment." + :type '(repeat sexp) + :group 'spacemacs) diff --git a/layers/+spacemacs/spacemacs-ui-visual/funcs.el b/layers/+spacemacs/spacemacs-ui-visual/funcs.el new file mode 100644 index 0000000..7389e05 --- /dev/null +++ b/layers/+spacemacs/spacemacs-ui-visual/funcs.el @@ -0,0 +1,187 @@ +;;; funcs.el --- Spacemacs Visual UI Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; golden ratio + +(defun spacemacs/no-golden-ratio-for-buffers (bufname) + "Disable golden-ratio if BUFNAME is the name of a visible buffer." + (and (get-buffer bufname) (get-buffer-window bufname 'visible))) + +(defun spacemacs/no-golden-ratio-guide-key () + "Disable golden-ratio for guide-key popwin buffer." + (or (spacemacs/no-golden-ratio-for-buffers " *guide-key*") + (spacemacs/no-golden-ratio-for-buffers " *popwin-dummy*"))) + + +;; neotree + +(defun spacemacs/neotree-expand-or-open () + "Expand or open a neotree node." + (interactive) + (let ((node (neo-buffer--get-filename-current-line))) + (when node + (if (file-directory-p node) + (progn + (neo-buffer--set-expand node t) + (neo-buffer--refresh t) + (when neo-auto-indent-point + (next-line) + (neo-point-auto-indent))) + (call-interactively 'neotree-enter))))) + +(defun spacemacs/neotree-collapse () + "Collapse a neotree node." + (interactive) + (let ((node (neo-buffer--get-filename-current-line))) + (when node + (when (file-directory-p node) + (neo-buffer--set-expand node nil) + (neo-buffer--refresh t)) + (when neo-auto-indent-point + (neo-point-auto-indent))))) + +(defun spacemacs/neotree-collapse-or-up () + "Collapse an expanded directory node or go to the parent node." + (interactive) + (let ((node (neo-buffer--get-filename-current-line))) + (when node + (if (file-directory-p node) + (if (neo-buffer--expanded-node-p node) + (spacemacs/neotree-collapse) + (neotree-select-up-node)) + (neotree-select-up-node))))) + +(defun neotree-find-project-root () + (interactive) + (if (neo-global--window-exists-p) + (neotree-hide) + (let ((origin-buffer-file-name (buffer-file-name))) + (neotree-find (projectile-project-root)) + (neotree-find origin-buffer-file-name)))) + +(defun spacemacs//neotree-maybe-attach-window () + (when (get-buffer-window (neo-global--get-buffer)) + (neo-global--attach))) + + +;; popwin + +(defun spacemacs/remove-popwin-display-config (str) + "Removes the popwin display configurations that matches the passed STR" + (setq popwin:special-display-config + (-remove (lambda (x) (if (and (listp x) (stringp (car x))) + (string-match str (car x)))) + popwin:special-display-config))) + + +;; smooth scrolling + +(defun spacemacs/enable-smooth-scrolling () + "Enable smooth scrolling." + (interactive) + (setq scroll-conservatively 101)) + +(defun spacemacs/disable-smooth-scrolling () + "Disable smooth scrolling." + (interactive) + (setq scroll-conservatively 0)) + + +;; spaceline + +(defun spacemacs/customize-powerline-faces () + "Alter powerline face to make them work with more themes." + (when (boundp 'powerline-inactive2) + (set-face-attribute 'powerline-inactive2 nil + :inherit 'font-lock-comment-face))) + +(defun spacemacs//evil-state-face () + (let ((state (if (eq 'operator evil-state) evil-previous-state evil-state))) + (intern (format "spacemacs-%S-face" state)))) + +(defun spacemacs//restore-powerline (buffer) + "Restore the powerline in buffer" + (with-current-buffer buffer + (setq-local mode-line-format (default-value 'mode-line-format)) + (powerline-set-selected-window) + (powerline-reset))) + +(defun spacemacs//set-powerline-for-startup-buffers () + "Set the powerline for buffers created when Emacs starts." + (dolist (buffer '("*Messages*" "*spacemacs*" "*Compile-Log*")) + (when (and (get-buffer buffer) + (configuration-layer/package-usedp 'spaceline)) + (spacemacs//restore-powerline buffer)))) + +(defun spacemacs//prepare-diminish () + (when spaceline-minor-modes-p + (let ((unicodep (dotspacemacs|symbol-value + dotspacemacs-mode-line-unicode-symbols))) + (setq spaceline-minor-modes-separator + (if unicodep (if (display-graphic-p) "" " ") "|")) + (dolist (mm spacemacs--diminished-minor-modes) + (let ((mode (car mm))) + (when (and (boundp mode) (symbol-value mode)) + (let* ((unicode (cadr mm)) + (ascii (caddr mm)) + (dim (if unicodep + unicode + (if ascii ascii unicode)))) + (diminish mode dim)))))))) + + +;; zoom + +(defun spacemacs//zoom-frm-powerline-reset () + (when (fboundp 'powerline-reset) + (setq-default powerline-height (spacemacs/compute-powerline-height)) + (powerline-reset))) + +(defun spacemacs//zoom-frm-do (arg) + "Perform a zoom action depending on ARG value." + (let ((zoom-action (cond ((eq arg 0) 'zoom-frm-unzoom) + ((< arg 0) 'zoom-frm-out) + ((> arg 0) 'zoom-frm-in))) + (fm (cdr (assoc 'fullscreen (frame-parameters)))) + (fwp (* (frame-char-width) (frame-width))) + (fhp (* (frame-char-height) (frame-height)))) + (when (equal fm 'maximized) + (toggle-frame-maximized)) + (funcall zoom-action) + (set-frame-size nil fwp fhp t) + (when (equal fm 'maximized) + (toggle-frame-maximized)))) + +(defun spacemacs/zoom-frm-in () + "zoom in frame, but keep the same pixel size" + (interactive) + (spacemacs//zoom-frm-do 1) + (spacemacs//zoom-frm-powerline-reset)) + +(defun spacemacs/zoom-frm-out () + "zoom out frame, but keep the same pixel size" + (interactive) + (spacemacs//zoom-frm-do -1) + (spacemacs//zoom-frm-powerline-reset)) + +(defun spacemacs/zoom-frm-unzoom () + "Unzoom current frame, keeping the same pixel size" + (interactive) + (spacemacs//zoom-frm-do 0) + (spacemacs//zoom-frm-powerline-reset)) + + +;; ansi-colors + +(defun spacemacs-ui-visual//compilation-buffer-apply-ansi-colors () + (let ((inhibit-read-only t)) + (ansi-color-apply-on-region compilation-filter-start (point-max)))) diff --git a/layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/frame-cmds.el b/layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/frame-cmds.el new file mode 100644 index 0000000..61810c6 --- /dev/null +++ b/layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/frame-cmds.el @@ -0,0 +1,1961 @@ +;;; frame-cmds.el --- Frame and window commands (interactive functions). +;; +;; Filename: frame-cmds.el +;; Description: Frame and window commands (interactive functions). +;; Author: Drew Adams +;; Maintainer: Drew Adams (concat "drew.adams" "@" "oracle" ".com") +;; Copyright (C) 1996-2015, Drew Adams, all rights reserved. +;; Created: Tue Mar 5 16:30:45 1996 +;; Version: 0 +;; Package-Requires: ((frame-fns "0")) +;; Last-Updated: Thu Jan 1 10:44:52 2015 (-0800) +;; By: dradams +;; Update #: 3036 +;; URL: http://www.emacswiki.org/frame-cmds.el +;; Doc URL: http://emacswiki.org/FrameModes +;; Doc URL: http://www.emacswiki.org/OneOnOneEmacs +;; Doc URL: http://www.emacswiki.org/Frame_Tiling_Commands +;; Keywords: internal, extensions, mouse, frames, windows, convenience +;; Compatibility: GNU Emacs: 20.x, 21.x, 22.x, 23.x, 24.x, 25.x +;; +;; Features that might be required by this library: +;; +;; `avoid', `frame-fns', `misc-fns', `strings', `thingatpt', +;; `thingatpt+'. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: +;; +;; Frame and window commands (interactive functions). +;; +;; +;; Summary: +;; +;; Load this library from your init file (~/.emacs or _emacs). +;; Add the suggested key bindings (below) to your init file. +;; Use `M-up|down|left|right' to move frames around incrementally. +;; Use `C-S-v', `M-S-v', `C-S-next', `C-S-prior' to move frames to screen edges. +;; Use `C-M-up|down|left|right' to resize frames incrementally. +;; Use `C-M-z' or `C-x C-z' to iconify/hide all frames. +;; Use `C-M-z' in a lone frame to restore all frames. +;; Use `C-mouse-1' in the minibuffer to restore all frames. +;; Use `C-mouse-1' in Dired to mark/unmark a file. +;; Use `C-mouse-3' on the mode line to remove window from frame. +;; Use `tile-frames-horizontally', `-vertically' to tile frames. +;; Use `C-x o' to select `other-window' or `other-frame'. +;; +;; Commands to incrementally resize frames are `enlarge-frame' and +;; `enlarge-frame-horizontally'. Sarir Khamsi +;; [sarir.khamsi@raytheon.com] originally wrote `enlarge-frame', +;; which he called `sk-grow-frame'. +;; +;; Note on saving changes made with the commands defined here: +;; +;; Some of the commands defined here change frame properties. +;; You can save any changes you have made, by using Customize. +;; To visit a Customize buffer of all unsaved changes you have +;; made, use command `customize-customized'. +;; +;; Frame parameter changes, such as background color, can be saved +;; for future use by all frames or all frames of a certain +;; kind. For that, you must change the frame parameters of the +;; correponding frame-alist variable. +;; +;; There is no single variable for saving changes to parameters of +;; the current frame. Instead, there are several different +;; frame-alist variables, which you can use to define different +;; kinds of frames. These include: `default-frame-alist', +;; `initial-frame-alist', and `special-display-frame-alist'. The +;; complete list of such frame alist variables is available using +;; function `frame-alist-var-names', defined here. +;; +;; Example: Suppose you change the background color of a frame and +;; want to make that the default background color for new frames in +;; the future. You will need to update the value of variable +;; `default-frame-alist' to use the `background-color' parameter +;; setting of the changed frame. +;; +;; You can easily copy one or all parameter values from any given +;; frame to any frame alist (such as `default-frame-alist'), by +;; using the commands `set-frame-alist-parameter-from-frame' and +;; `set-all-frame-alist-parameters-from-frame'. Those commands are +;; defined here. +;; +;; NOTE: If you also use library `fit-frame.el', and you are on MS +;; Windows, then load that library before `frame-cmds.el'. The +;; commands `maximize-frame' and `restore-frame' defined here are +;; more general and non-Windows-specific than the commands of the +;; same name defined in `fit-frame.el'. +;; +;; +;; User options defined here: +;; +;; `available-screen-pixel-bounds', `enlarge-font-tries', +;; `frame-config-register', `frame-parameters-to-exclude', +;; `move-frame-wrap-within-display-flag' +;; `rename-frame-when-iconify-flag', `show-hide-show-function', +;; `window-mgr-title-bar-pixel-height'. +;; +;; Commands defined here: +;; +;; `create-frame-tiled-horizontally', +;; `create-frame-tiled-vertically', `delete-1-window-frames-on', +;; `delete/iconify-window', `delete/iconify-windows-on', +;; `delete-other-frames', `delete-windows-for', `enlarge-font', +;; `enlarge-frame', `enlarge-frame-horizontally', +;; `hide-everything', `hide-frame', `iconify-everything', +;; `iconify/map-frame', `iconify/show-frame', +;; `jump-to-frame-config-register', `maximize-frame', +;; `maximize-frame-horizontally', `maximize-frame-vertically', +;; `mouse-iconify/map-frame', `mouse-iconify/show-frame', +;; `mouse-remove-window', `mouse-show-hide-mark-unmark', +;; `move-frame-down', `move-frame-left', `move-frame-right', +;; `move-frame-to-screen-bottom', `move-frame-to-screen-left', +;; `move-frame-to-screen-right', `move-frame-to-screen-top', +;; `move-frame-to-screen-top-left', `move-frame-up', +;; `name-all-frames-numerically', `name-frame-numerically', +;; `other-window-or-frame', `remove-window', `remove-windows-on', +;; `rename-frame', `rename-non-minibuffer-frame', `restore-frame', +;; `restore-frame-horizontally', `restore-frame-vertically', +;; `save-frame-config', +;; `set-all-frame-alist-parameters-from-frame', +;; `set-frame-alist-parameter-from-frame', `show-*Help*-buffer', +;; `show-a-frame-on', `show-buffer-menu', `show-frame', +;; `show-hide', `shrink-frame', `shrink-frame-horizontally', +;; `split-frame-horizontally', `split-frame-vertically', +;; `tell-customize-var-has-changed', `tile-frames', +;; `tile-frames-horizontally', `tile-frames-side-by-side', +;; `tile-frames-top-to-bottom', `tile-frames-vertically', +;; `toggle-max-frame', `toggle-max-frame-horizontally', +;; `toggle-max-frame-vertically'. +;; +;; Non-interactive functions defined here: +;; +;; `assq-delete-all' (Emacs 20), `butlast' (Emacs 20), +;; `frcmds-available-screen-pixel-bounds', +;; `frcmds-available-screen-pixel-height', +;; `frcmds-available-screen-pixel-width', +;; `frcmds-effective-screen-pixel-bounds', +;; `frcmds-enlarged-font-name', `frcmds-extra-pixels-width', +;; `frcmds-extra-pixels-height', `frcmds-frame-alist-var-names', +;; `frcmds-frame-parameter-names', `frcmds-frame-iconified-p', +;; `frcmds-frame-number', `frcmds-new-frame-position', +;; `frcmds-read-args-for-tiling', +;; `frcmds-read-buffer-for-delete-windows', +;; `frcmds-set-difference', `frcmds-smart-tool-bar-pixel-height', +;; `frcmds-split-frame-1', `frcmds-tile-frames', `nbutlast' (Emacs +;; 20). +;; +;; Error symbols defined here: +;; +;; `font-too-small', `font-size'. +;; +;; +;; ***** NOTE: The following EMACS PRIMITIVE has been ADVISED HERE: +;; +;; `delete-window' - If only one window in frame, `delete-frame'. +;; +;; +;; ***** NOTE: The following EMACS PRIMITIVE has been REDEFINED HERE: +;; +;; `delete-windows-on' - +;; 1) Reads buffer differently. Only buffers showing windows are candidates. +;; 2) Calls `delete-window', so this also deletes frames where +;; window showing the BUFFER is the only window. +;; (That's true also for vanilla Emacs 23+, but not before.) +;; +;; +;; Suggested key bindings: +;; +;; (global-set-key [(meta up)] 'move-frame-up) +;; (global-set-key [(meta down)] 'move-frame-down) +;; (global-set-key [(meta left)] 'move-frame-left) +;; (global-set-key [(meta right)] 'move-frame-right) +;; (global-set-key [(meta shift ?v)] 'move-frame-to-screen-top) ; like `M-v' +;; (global-set-key [(control shift ?v)] 'move-frame-to-screen-bottom) ; like `C-v' +;; (global-set-key [(control shift prior)] 'move-frame-to-screen-left) ; like `C-prior' +;; (global-set-key [(control shift next)] 'move-frame-to-screen-right) ; like `C-next' +;; (global-set-key [(control shift home)] 'move-frame-to-screen-top-left) +;; (global-set-key [(control meta down)] 'enlarge-frame) +;; (global-set-key [(control meta right)] 'enlarge-frame-horizontally) +;; (global-set-key [(control meta up)] 'shrink-frame) +;; (global-set-key [(control meta left)] 'shrink-frame-horizontally) +;; (global-set-key [(control ?x) (control ?z)] 'iconify-everything) +;; (global-set-key [vertical-line S-down-mouse-1] 'iconify-everything) +;; (global-set-key [(control ?z)] 'iconify/show-frame) +;; (global-set-key [mode-line mouse-3] 'mouse-iconify/show-frame) +;; (global-set-key [mode-line C-mouse-3] 'mouse-remove-window) +;; (global-set-key [(control meta ?z)] 'show-hide) +;; (global-set-key [vertical-line C-down-mouse-1] 'show-hide) +;; (global-set-key [C-down-mouse-1] 'mouse-show-hide-mark-unmark) +;; (substitute-key-definition 'delete-window 'remove-window global-map) +;; (define-key ctl-x-map "o" 'other-window-or-frame) +;; (define-key ctl-x-4-map "1" 'delete-other-frames) +;; (define-key ctl-x-5-map "h" 'show-*Help*-buffer) +;; (substitute-key-definition 'delete-window 'delete-windows-for global-map) +;; (define-key global-map "\C-xt." 'save-frame-config) +;; (define-key ctl-x-map "o" 'other-window-or-frame) +;; +;; (defalias 'doremi-prefix (make-sparse-keymap)) +;; (defvar doremi-map (symbol-function 'doremi-prefix) "Keymap for Do Re Mi commands.") +;; (define-key global-map "\C-xt" 'doremi-prefix) +;; (define-key doremi-map "." 'save-frame-config) +;; +;; Customize the menu. Uncomment this to try it out. +;; +;; (defvar menu-bar-frames-menu (make-sparse-keymap "Frames")) +;; (define-key global-map [menu-bar frames] +;; (cons "Frames" menu-bar-frames-menu))) +;; (define-key menu-bar-frames-menu [set-all-params-from-frame] +;; '(menu-item "Set All Frame Parameters from Frame" set-all-frame-alist-parameters-from-frame +;; :help "Set frame parameters of a frame to their current values in frame")) +;; (define-key menu-bar-frames-menu [set-params-from-frame] +;; '(menu-item "Set Frame Parameter from Frame..." set-frame-alist-parameter-from-frame +;; :help "Set parameter of a frame alist to its current value in frame")) +;; (define-key menu-bar-frames-menu [separator-frame-1] '("--")) +;; (define-key menu-bar-frames-menu [tile-frames-vertically] +;; '(menu-item "Tile Frames Vertically..." tile-frames-vertically +;; :help "Tile all visible frames vertically")) +;; (define-key menu-bar-frames-menu [tile-frames-horizontally] +;; '(menu-item "Tile Frames Horizontally..." tile-frames-horizontally +;; :help "Tile all visible frames horizontally")) +;; (define-key menu-bar-frames-menu [separator-frame-2] '("--")) +;; (define-key menu-bar-frames-menu [toggle-max-frame-vertically] +;; '(menu-item "Toggle Max Frame Vertically" toggle-max-frame-vertically +;; :help "Maximize or restore the selected frame vertically" +;; :enable (frame-parameter nil 'restore-height))) +;; (define-key menu-bar-frames-menu [toggle-max-frame-horizontally] +;; '(menu-item "Toggle Max Frame Horizontally" toggle-max-frame-horizontally +;; :help "Maximize or restore the selected frame horizontally" +;; :enable (frame-parameter nil 'restore-width))) +;; (define-key menu-bar-frames-menu [toggle-max-frame] +;; '(menu-item "Toggle Max Frame" toggle-max-frame +;; :help "Maximize or restore the selected frame (in both directions)" +;; :enable (or (frame-parameter nil 'restore-width) (frame-parameter nil 'restore-height)))) +;; (define-key menu-bar-frames-menu [maximize-frame-vertically] +;; '(menu-item "Maximize Frame Vertically" maximize-frame-vertically +;; :help "Maximize the selected frame vertically")) +;; (define-key menu-bar-frames-menu [maximize-frame-horizontally] +;; '(menu-item "Maximize Frame Horizontally" maximize-frame-horizontally +;; :help "Maximize the selected frame horizontally")) +;; (define-key menu-bar-frames-menu [maximize-frame] +;; '(menu-item "Maximize Frame" maximize-frame +;; :help "Maximize the selected frame (in both directions)")) +;; (define-key menu-bar-frames-menu [separator-frame-3] '("--")) +;; (define-key menu-bar-frames-menu [iconify-everything] +;; '(menu-item "Iconify All Frames" iconify-everything +;; :help "Iconify all frames of session at once")) +;; (define-key menu-bar-frames-menu [show-hide] +;; '(menu-item "Hide Frames / Show Buffers" show-hide +;; :help "Show, if only one frame visible; else hide."))) +;; +;; (defvar menu-bar-doremi-menu (make-sparse-keymap "Do Re Mi")) +;; (define-key global-map [menu-bar doremi] +;; (cons "Do Re Mi" menu-bar-doremi-menu)) +;; (define-key menu-bar-doremi-menu [doremi-font+] +;; '("Save Frame Configuration" . save-frame-config)) +;; +;; See also these files for other frame commands: +;; +;; `autofit-frame.el' - Automatically fit each frame to its +;; selected window. Uses `fit-frame.el'. +;; +;; `fit-frame.el' - 1) Fit a frame to its selected window. +;; 2) Incrementally resize a frame. +;; +;; `doremi-frm.el' - Incrementally adjust frame properties +;; using arrow keys and/or mouse wheel. +;; +;; `thumb-frm.el' - Shrink frames to a thumbnail size and +;; restore them again. +;; +;; `zoom-frm.el' - Zoom a frame or buffer, so that its text +;; appears larger or smaller. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Change Log: +;; +;; 2014/12/09 dadams +;; Added: frcmds-frame-pixel-height. +;; frcmds-split-frame-1: Use frame-pixel-width and frcmds-frame-pixel-height, instead of working +;; with width and height frame parameters (char-based). +;; frcmds-tile-frames: +;; If Emacs 24.4+, use PIXELWISE arg with set-frame-size. +;; Otherwise: * Always subtract frcmds-extra-pixels-width. +;; * Do not subtract borders. +;; * Increment origin by one border-width. +;; 2014/12/07 dadams +;; Added: split-frame-horizontally, split-frame-vertically. +;; frcmds-tile-frames: Added optional args, so can tile within a rectangle. +;; create-frame-tiled-(horizontally|vertically): Keep same font size. +;; 2014/12/06 dadams +;; Added: create-frame-tiled-horizontally, create-frame-tiled-vertically. +;; Added aliases: tile-frames-side-by-side, tile-frames-top-to-bottom. +;; window-mgr-title-bar-pixel-height: Changed default value for ns to 50. Thx to Nate Eagleson. +;; 2014/10/15 dadams +;; window-mgr-title-bar-pixel-height: Added default value for ns (Next). Thx to Nate Eagleson. +;; 2014/10/13 dadams +;; Removed extra, empty Package-Requires. +;; 2014/07/21 dadams +;; Do not redefine delete-window - just advise it. +;; delete/iconify-window: Just use delete-window, not old-delete-window. +;; 2014/04/19 dadams +;; Added: frcmds-frame-number, name-all-frames-numerically, name-frame-numerically. +;; Renamed: available-screen-pixel-* to frcmds-available-screen-pixel-*, +;; enlarged-font-name to frcmds-enlarged-font-name, +;; extra-pixels-* to frcmds-extra-pixels-*, +;; frame-alist-var-names to frcmds-frame-alist-var-names, +;; frame-parameter-names to frcmds-frame-parameter-names, +;; frame-iconified-p to frcmds-frame-iconified-p, +;; new-frame-position to frcmds-new-frame-position, +;; read-args-for-tile-frames to frcmds-read-args-for-tiling, +;; read-buffer-for-delete-windows to frcmds-read-buffer-for-delete-windows, +;; frame-cmds-set-difference to frcmds-set-difference, +;; smart-tool-bar-pixel-height to frcmds-smart-tool-bar-pixel-height, +;; tile-frames to frcmds-tile-frames. +;; rename-non-minibuffer-frame: Pass OLD-NAME and NEW-NAME to rename-frame. +;; Group Frame-Commands: Added :prefix frcmds-. +;; +;; 2014/02/24 dadams +;; rename-frame, rename-non-minibuffer-frame: Fixed default buffer name for non-interactive. +;; 2013/09/21 dadams +;; maximize-frame: Apply frame-geom-value-numeric to new-* also. Bug report thx: Mike Fitzgerald. +;; 2013/07/21 dadams +;; Added Package-Requires to header, at least temporarily, but should not need to specify version. +;; 2013/07/12 dadams +;; set-frame-alist-parameter-from-frame: Use lax completion, so do not limit to known parameters. +;; frame-parameter-names: Updated for Emacs 24. +;; 2013/07/05 dadams +;; Added: move-frame-to-screen-top-left. +;; move-frame-to-screen-*: Read FRAME name in interactive spec. +;; 2013/07/04 dadams +;; show-hide-show-function: Use function-item instead of const for jump-to-frame-config-register. +;; 2013/05/15 dadams +;; Added error symbols font-too-small and font-size. +;; enlarged-font-name: Signal font-too-small error. +;; 2013/04/29 dadams +;; Added: deiconify-everything, (mouse-)iconify/show-frame (renamed (mouse-)iconify/map-frame). +;; iconify/show-frame: Negative prefix arg now deiconifies all. +;; 2013/03/12 dadams +;; maximize-frame: Corrected new-left, new-top. +;; Corrected arg to modify-frame-parameters - use frame-geom-value-numeric +;; Do not alias if function name is already fboundp. +;; toggle-max-frame-*: Use toggle-max-frame, not restore-frame (the alias). +;; toggle-max-frame: If no restore-* parameter then first maximize. +;; Condition last four parameters on orig-*, not restore-*. +;; 2013/02/06 dadams +;; move-frame-(up|down|left|right): Set N to 1 if nil. +;; 2013/01/17 dadams +;; Added: move-frame-to-screen-(top|bottom|left|right). +;; move-frame-(up|down|left|right): Redefined so prefix arg moves increments of char size. +;; 2012/02/29 dadams +;; Added, for Emacs 20 only: nbutlast, butlast. To avoid runtime load of cl.el. +;; Added frame-cmds-set-difference, to avoid runtime load of cl.el. +;; set-all-frame-alist-parameters-from-frame: Use frame-cmds-set-difference. +;; 2011/07/25 dadams +;; save-frame-config: Use fboundp, not featurep. +;; 2011/01/04 dadams +;; Removed autoload cookie from non-interactive function. +;; 2010/10/19 dadams +;; enlarge-font: Only do frame-update-faces if Emacs 20 (obsolete in 21). +;; 2010/06/04 dadams +;; Added: (toggle-max|restore)-frame(-horizontally|-vertically). Thx to Uday Reddy for suggestion. +;; Renamed max-frame to maximize-frame. +;; maximize-frame: Save original location & position params for later restoration. +;; 2010/05/25 dadams +;; Added: max-frame, maximize-frame-horizontally, maximize-frame-vertically. +;; 2009/10/02 dadams +;; delete-windows-on: Return nil. Make BUFFER optional: default is current buffer. +;; 2009/08/03 dadams +;; delete-window: Wrap with save-current-buffer. Thx to Larry Denenberg. +;; 2009/05/17 dadams +;; Updated to reflect thumb-frm.el name changes. +;; 2009/01/30 dadams +;; enlarge-font, enlarged-font-name, enlarge-font-tries: +;; Removed temporary workaround - Emacs 23 bug #119 was finally fixed. +;; 2009/01/01 dadams +;; Removed compile-time require of doremi-frm.el to avoid infinite recursion. +;; 2008/12/13 dadams +;; enlarge-font: Redefined for Emacs 23 - just use :height face attribute. +;; enlarge-font-tries, enlarged-font-name: Not used for Emacs 23. +;; 2008/10/31 dadams +;; Updated frame-parameter-names for Emacs 23. +;; 2008/07/29 dadams +;; Option available-screen-pixel-bounds: Use nil as default value. +;; available-screen-pixel-bounds: Redefined as the code that defined the option's default value. +;; Added: effective-screen-pixel-bounds - code taken from old available-screen-pixel-bounds, +;; but also convert frame geom value to numeric. +;; Everywhere: +;; Use effective-screen-pixel-bounds in place of available-screen-pixel-bounds function. +;; Use available-screen-pixel-bounds function instead of option. +;; available-screen-pixel-(width|height): Added optional INCLUDE-MINI-P arg. +;; new-frame-position: Call available-screen-pixel-(width|height) with arg. +;; save-frame-config: push-current-frame-config -> doremi-push-current-frame-config. +;; Soft-require doremi-frm.el when byte-compile. +;; 2008/06/02 dadams +;; Added: available-screen-pixel-bounds (option and function). +;; tile-frames, available-screen-pixel-(width|height): +;; Redefined to use available-screen-pixel-bounds. Thx to Nathaniel Cunningham for input. +;; 2008/05/29 dadams +;; Fixes for Mac by Nathaniel Cunningham and David Reitter: +;; window-mgr-title-bar-pixel-height, tile-frames, smart-tool-bar-pixel-height (added). +;; 2007/12/27 dadams +;; tile-frames: Restored border calculation, but using only external border. +;; Renamed window-mgr-*-width to window-mgr-*-height and changed default value from 32 to 27. +;; 2007/12/20 dadams +;; Added: frame-extra-pixels(width|height). Use in tile-frames. Thx to David Reitter. +;; frame-horizontal-extra-pixels: Changed default value from 30 to 32. +;; 2007/10/11 dadams +;; Added: assq-delete-all (for Emacs 20). +;; 2007/09/02 dadams +;; Added: available-screen-pixel-(width|height). Use in tile-frames, new-frame-position. +;; 2007/06/12 dadams +;; tile-frames: Corrected use of fboundp for thumbnail-frame-p. +;; 2007/05/27 dadams +;; enlarged-font-name: +;; Do nothing if null assq of ascii. Not sure what this means, but gets around Emacs 23 bug. +;; 2006/08/22 dadams +;; Added: delete-windows-for, read-buffer-for-delete-windows. +;; delete-windows-on: Use read-buffer-for-delete-windows. +;; Removed old-delete-windows-on (not used). +;; 2006/05/30 dadams +;; delete-windows-on: Return nil if buffer arg is nil. Thanks to Slawomir Nowaczyk. +;; 2006/01/07 dadams +;; Added :link for sending bug report. +;; 2006/01/06 dadams +;; Renamed group. Added :link. +;; 2006/01/04 dadams +;; Added: other-window-or-frame. +;; 2005/12/29 dadams +;; mouse-show-hide-mark-unmark: dired-mouse-mark/unmark -> diredp-mouse-mark/unmark. +;; 2005/12/13 dadams +;; Added: delete-other-frames. +;; 2005/11/18 dadams +;; enlarge-font: Try to increment or decrment further, testing for an existing font. +;; Added: enlarge-font-tries, enlarged-font-name. +;; 2005/10/03 dadams +;; Removed require of icomplete+.el (no longer redefines read-from-minibuffer). +;; 2005/07/03 dadams +;; Renamed: args-for-tile-frames to read-args-for-tile-frames. +;; 2005/06/19 dadams +;; tile-frames: Don't tile thumbnail frames. +;; 2005/05/29 dadams +;; Moved here from frame+.el and fit-frame.el: enlarge-frame*, shrink-frame*. +;; Added: move-frame-up|down|left|right, move-frame-wrap-within-display-flag, +;; new-frame-position. +;; 2005/05/28 dadams +;; show-a-frame-on: Use another-buffer as default for read-buffer, if available. +;; 2005/05/15 dadams +;; Renamed: minibuffer-frame to 1on1-minibuffer-frame. +;; 2005/05/10 dadams +;; remove-window: Removed definition; just defalias it to delete-window. +;; delete-window: (one-window-p) -> (one-window-p t). +;; set-frame-alist-parameter-from-frame: No longer use destructive fns. +;; 2005/01/19 dadams +;; set-all-frame-alist-parameters-from-frame: +;; Added really-all-p and use frame-parameters-to-exclude. +;; Added: frame-parameters-to-exclude, tell-customize-var-has-changed. +;; 2005/01/18 dadams +;; Added: set-all-frame-alist-parameters-from-frame, set-frame-alist-parameter-from-frame, +;; frame-alist-var-names, frame-parameter-names. +;; Added Note on saving changes. +;; 2005/01/08 dadams +;; Moved enlarge-font here from doremi-frm.el, where it was called doremi-grow-font. +;; 2005/01/04 dadams +;; Added rename-frame-when-iconify-flag. +;; Use it in iconify-everything, (mouse-)iconify/map-frame. +;; Added (defgroup frame-cmds). +;; 2004/12/23 dadams +;; frame-config-register, show-hide-show-function, window-mgr-title-bar-pixel-width: +;; Changed defvar to defcustom. +;; 2004/12/21 dadams +;; hide-everything, iconify-everything: bind thumbify-instead-of-iconify-flag to nil. +;; 2004/12/10 dadams +;; tile-frames: Change 15 to (frame-char-height fr) for scroll-bar-width. +;; tile-frames-*: Corrected doc strings for non-interactive case. +;; 2004/12/09 dadams +;; Changed compile-time require of strings to a soft require. +;; 2004/10/11 dadams +;; args-for-tile-frames: Fixed bug when non-existant frame in name history. +;; tile-frames: show-frame at end (for case where use prefix arg) +;; 2004/09/11 dadams +;; Moved to doremi-frm.el: frame-config-ring*, frame-config-wo-parameters, +;; push-frame-config. +;; 2004/09/07 dadams +;; Added: jump-to-frame-config-register, push-frame-config, save-frame-config. +;; 2004/09/01 dadams +;; Added: frame-config-register, show-hide-show-function, +;; jump-to-frame-config-register. +;; Rewrote to record frame config: iconify-everything, hide-everything. +;; Rewrote to use show-hide-show-function: show-hide. +;; 2004/03/22 dadams +;; Added: tile-frames, tile-frames-vertically, args-for-tile-frames. +;; Rewrote tile-frames-horizontally to use tile-frames. +;; 2004/03/19 dadams +;; Added tile-frames-horizontally. +;; 2000/11/27 dadams +;; hide-frame: fixed bug: Added get-a-frame for frame name read. +;; 2000/09/27 dadams +;; 1. Added: frame-iconified-p. +;; 2. remove-window: only make-frame-invisible if not iconified (HACK). +;; 1999/10/05 dadams +;; rename-frame: fixed bug if only 1 frame and old-name was a frame. +;; 1999/08/25 dadams +;; Added: hide-everything, show-buffer-menu, show-hide. +;; 1999/03/17 dadams +;; delete-1-window-frames-on: ensure a buffer object (not a name). +;; 1996/04/26 dadams +;; delete/iconify-windows-on, show-a-frame-on: Do nothing if null buffer. +;; 1996/03/12 dadams +;; delete/iconify-window: Unless one-window-p, do old-delete-window outside of +;; save-window-excursion. +;; 1996/03/08 dadams +;; 1. delete-windows-on: a. Fixed incorrect interactive spec (bad paren). +;; b. Second arg FRAME also provided interactively now. +;; 2. Added: delete/iconify-window, delete/iconify-windows-on. +;; 1996/02/27 dadams +;; show-frame: Call make-frame-visible. +;; 1996/02/09 dadams +;; Added show-*Help*-buffer. +;; 1996/01/30 dadams +;; 1. show-frame: Don't make-frame-visible. Done by raise-frame anyway. +;; 2. Added show-a-frame-on. +;; 1996/01/09 dadams +;; Added delete-windows-on and made it interactive. +;; 1996/01/08 dadams +;; Added rename-non-minibuffer-frame. Use in iconify-everything, +;; iconify/map-frame, mouse-iconify/map-frame. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; 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 2, 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; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Code: + +(eval-when-compile (require 'cl)) ;; case, incf (plus, for Emacs 20: dolist, dotimes) +(require 'frame-fns) ;; frame-geom-value-cons, frame-geom-value-numeric, frames-on, get-frame-name, + ;; get-a-frame, read-frame +(require 'strings nil t) ;; (no error if not found) read-buffer +(require 'misc-fns nil t) ;; (no error if not found) another-buffer + +;; Don't require even to byte-compile, because doremi-frm.el soft-requires frame-cmds.el +;; (eval-when-compile (require 'doremi-frm nil t)) ;; (no error if not found) +;; ;; doremi-push-current-frame-config + +;; Not required here, because this library requires `frame-cmds.el': `thumb-frm.el'. +;; However, `frame-cmds.el' soft-uses `thumfr-thumbnail-frame-p', which is defined +;; in `thumb-frm.el'. + +;; Quiet byte-compiler. +(defvar 1on1-minibuffer-frame) ; In `oneonone.el' +(defvar mac-tool-bar-display-mode) + +;;;;;;;;;;;;;;;;;;;;;;; + + + + +;;; USER OPTIONS (VARIABLES) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defgroup Frame-Commands nil + "Miscellaneous frame and window commands." + :group 'frames + :prefix "frcmds-" + :link `(url-link :tag "Send Bug Report" + ,(concat "mailto:" "drew.adams" "@" "oracle" ".com?subject=\ +frame-cmds.el bug: \ +&body=Describe bug here, starting with `emacs -q'. \ +Don't forget to mention your Emacs and library versions.")) + :link '(url-link :tag "Other Libraries by Drew" + "http://www.emacswiki.org/cgi-bin/wiki/DrewsElispLibraries") + :link '(url-link :tag "Download" + "http://www.emacswiki.org/cgi-bin/wiki/frame-cmds.el") + :link '(url-link :tag "Description - `delete-window'" + "http://www.emacswiki.org/cgi-bin/wiki/FrameModes") + :link '(url-link :tag "Description - Frame Renaming" + "http://www.emacswiki.org/cgi-bin/wiki/FrameTitle") + :link '(url-link :tag "Description - Frame Resizing" + "http://www.emacswiki.org/cgi-bin/wiki/Shrink-Wrapping_Frames") + :link '(url-link :tag "Description - Frame Customization" + "http://www.emacswiki.org/cgi-bin/wiki/CustomizingAndSaving") + :link '(url-link :tag "Description - Frame Tiling" + "http://www.emacswiki.org/cgi-bin/wiki/Frame_Tiling_Commands") + :link '(url-link :tag "Description - General" + "http://www.emacswiki.org/cgi-bin/wiki/FrameModes") + :link '(emacs-commentary-link :tag "Commentary" "frame-cmds")) + +(defcustom rename-frame-when-iconify-flag t + "*Non-nil means frames are renamed when iconified. +The new name is the name of the current buffer." + :type 'boolean :group 'Frame-Commands) + +(defcustom frame-config-register ?\C-l ; Control-L is the name of the register. + "*Character naming register for saving/restoring frame configuration." + :type 'character :group 'Frame-Commands) + +(defcustom show-hide-show-function 'jump-to-frame-config-register + "*Function to show stuff that is hidden or iconified by `show-hide'. +Candidates include `jump-to-frame-config-register' and `show-buffer-menu'." + :type '(choice (function-item :tag "Restore frame configuration" jump-to-frame-config-register) + (function :tag "Another function")) + :group 'Frame-Commands) + +;; Use `cond', not `case', for Emacs 20 byte-compiler. +(defcustom window-mgr-title-bar-pixel-height (cond ((eq window-system 'mac) 22) + ;; For older versions of OS X, 40 might be better. + ((eq window-system 'ns) 50) + (t 27)) + "*Height of frame title bar provided by the window manager, in pixels. +You might alternatively call this constant the title-bar \"width\" or +\"thickness\". There is no way for Emacs to determine this, so you +must set it." + :type 'integer :group 'Frame-Commands) + +(defcustom enlarge-font-tries 100 + "*Number of times to try to change font-size, when looking for a font. +The font-size portion of a font name is incremented or decremented at +most this many times, before giving up and raising an error." + :type 'integer :group 'Frame-Commands) + +(defcustom frame-parameters-to-exclude '((window-id) (buffer-list) (name) (title) (icon-name)) + "*Parameters to exclude in `set-all-frame-alist-parameters-from-frame'. +An alist of the same form as that returned by `frame-parameters'. +The cdr of each alist element is ignored. +These frame parameters are not copied to the target alist." + :type '(repeat (cons symbol sexp)) :group 'Frame-Commands) + +(defcustom move-frame-wrap-within-display-flag t + "*Non-nil means wrap frame movements within the display. +Commands `move-frame-up', `move-frame-down', `move-frame-left', and +`move-frame-right' then move the frame back onto the display when it +moves off of it. +If nil, you can move the frame as far off the display as you like." + :type 'boolean :group 'Frame-Commands) + +(defcustom available-screen-pixel-bounds nil + "*Upper left and lower right of available screen space for tiling frames. +Integer list: (x0 y0 x1 y1), where (x0, y0) is the upper left position +and (x1, y1) is the lower right position. Coordinates are in pixels, +measured from the screen absolute origin, (0, 0), at the upper left. + +If this is nil, then the available space is calculated. That should +give good results in most cases." + :type '(list + (integer :tag "X0 (upper left) - pixels from screen left") + (integer :tag "Y0 (upper left) - pixels from screen top") + (integer :tag "X1 (lower right) - pixels from screen left" ) + (integer :tag "Y1 (lower right) - pixels from screen top")) + :group 'Frame-Commands) + + + +;;; FUNCTIONS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;###autoload +(defun save-frame-config () + "Save current frame configuration. +You can restore it with \\[jump-to-frame-config-register]." + (interactive) + (frame-configuration-to-register frame-config-register) + (when (fboundp 'doremi-push-current-frame-config) ; In `doremi-frm.el'. + (doremi-push-current-frame-config)) + (message + (substitute-command-keys + (if (fboundp 'doremi-frame-configs) ; In `doremi-frm.el'. + (format "Use `\\[jump-to-frame-config-register]' (`C-x r j %c') or \ +`\\[doremi-frame-configs]' to restore frames as before (undo)." frame-config-register) + "Use `\\[jump-to-frame-config-register]' to restore frames as before (undo).")))) + +;;;###autoload +(defun jump-to-frame-config-register () + "Restore frame configuration saved in `frame-config-register'." + (interactive) + (jump-to-register frame-config-register)) + +;;;###autoload +(defun deiconify-everything () + "Deiconify any iconified frames." + (interactive) + (frame-configuration-to-register frame-config-register) + (dolist (frame (frame-list)) + (when (eq 'icon (frame-visible-p frame)) (make-frame-visible frame)))) + +;;;###autoload +(defun iconify-everything () + "Iconify all frames of session at once. +Remembers frame configuration in register `C-l' (Control-L). +To restore this frame configuration, use `\\[jump-to-register] C-l'." + (interactive) + (frame-configuration-to-register frame-config-register) + (let ((thumfr-thumbify-dont-iconify-flag nil)) ; Defined in `thumb-frm.el'. + (dolist (frame (visible-frame-list)) + (when rename-frame-when-iconify-flag (rename-non-minibuffer-frame frame)) + (iconify-frame frame)))) + +;;;###autoload +(defun hide-everything () + "Hide all frames of session at once. +Iconify minibuffer frame; make all others invisible. +Remembers frame configuration in register `C-l' (Control-L). +To restore this frame configuration, use `\\[jump-to-register] C-l'." + (interactive) + (frame-configuration-to-register frame-config-register) + (let ((minibuf-frame-name (and (boundp '1on1-minibuffer-frame) + (cdr (assq 'name (frame-parameters + 1on1-minibuffer-frame))))) + (thumfr-thumbify-dont-iconify-flag nil)) ; Defined in `thumb-frm.el'. + (dolist (frame (frame-list)) + (if (eq minibuf-frame-name (cdr (assq 'name (frame-parameters frame)))) + (iconify-frame frame) ; minibuffer frame + (make-frame-invisible frame t))))) ; other frames + +;;;###autoload +(defun show-hide () + "1 frame visible: `show-hide-show-function'; else: `hide-everything'. +This acts as a toggle between showing all frames and showing only an +iconified minibuffer frame." + (interactive) + (if (< (length (visible-frame-list)) 2) (funcall show-hide-show-function) (hide-everything))) + +;;;###autoload +(defun show-buffer-menu () + "Call `buffer-menu' after making all frames visible. +Useful after using `hide-everything' because of a Windows bug that +doesn't let you display frames that have been made visible after +being made invisible." + (interactive) + (let ((minibuf-frame-name (and (boundp '1on1-minibuffer-frame) + (cdr (assq 'name (frame-parameters 1on1-minibuffer-frame)))))) + (dolist (frame (frame-list)) + (if (eq minibuf-frame-name (cdr (assq 'name (frame-parameters frame)))) + (make-frame-visible frame) ; minibuffer frame + (iconify-frame frame))) ; other frames + (buffer-menu))) + +;;;###autoload +(defun mouse-show-hide-mark-unmark (event) + "In minibuffer: `show-hide'. In dired: mark/unmark; else: buffer menu." + (interactive "e") + (if (window-minibuffer-p (posn-window (event-start event))) + (show-hide) + (or (and (memq major-mode '(dired-mode vc-dired-mode)) + (fboundp 'diredp-mouse-mark/unmark) + (diredp-mouse-mark/unmark event)) ; Return nil if not on a file or dir. + (mouse-buffer-menu event)))) + +;;;###autoload +(defalias 'iconify/map-frame 'iconify/show-frame) ; `.../map...' is the old name. +;;;###autoload +(defun iconify/show-frame (&optional all-action) + "Iconify selected frame if now shown. Show it if now iconified. +A non-negative prefix arg iconifies all shown frames. +A negative prefix arg deiconifies all iconified frames." + (interactive "P") + (cond ((not all-action) + (when rename-frame-when-iconify-flag (rename-non-minibuffer-frame)) + (iconify-or-deiconify-frame)) + ((natnump (prefix-numeric-value all-action)) + (iconify-everything)) + (t + (deiconify-everything)))) + +;;;###autoload +(defalias 'mouse-iconify/map-frame 'mouse-iconify/show-frame) ; `.../map...' is the old name. +;;;###autoload +(defun mouse-iconify/show-frame (event) + "Iconify frame you click, if now shown. Show it if now iconified." + (interactive "e") + (select-window (posn-window (event-start event))) + (when rename-frame-when-iconify-flag (rename-non-minibuffer-frame)) + (iconify-or-deiconify-frame)) + + + +;; ADVISE ORIGINAL (built-in): +;; +;; If WINDOW is the only one in its frame, `delete-frame'. +(defadvice delete-window (around delete-frame-if-one-win activate) + "If WINDOW is the only one in its frame, then `delete-frame' too." + (save-current-buffer + (select-window (or (ad-get-arg 0) (selected-window))) + (if (one-window-p t) (delete-frame) ad-do-it))) + +;;;###autoload +(defun delete-windows-for (&optional buffer) + "`delete-window' or prompt for buffer and delete its windows. +With no prefix arg, delete the selected window. +With a prefix arg, prompt for a buffer and delete all windows, on any + frame, that show that buffer." + (interactive (list (and current-prefix-arg (frcmds-read-buffer-for-delete-windows)))) + (if buffer (delete-windows-on buffer) (delete-window))) + + + +;; REPLACES ORIGINAL (built-in): +;; +;; 1) Use `read-buffer' in interactive spec. +;; 2) Do not raise an error if BUFFER is a string that does not name a buffer. +;; 3) Call `delete-window', so if you use the advised `delete-window' here then this also deletes +;; frames where window showing the BUFFER is the only window. +;; +;;;###autoload +(defun delete-windows-on (&optional buffer frame) + "Delete windows showing BUFFER. +Optional arg BUFFER defaults to the current buffer. + +Optional second arg FRAME controls which frames are considered. + If nil or omitted, delete all windows showing BUFFER in any frame. + If t, delete only windows showing BUFFER in the selected frame. + If `visible', delete all windows showing BUFFER in any visible frame. + If a frame, delete only windows showing BUFFER in that frame. + +Interactively, FRAME depends on the prefix arg, as follows: + Without a prefix arg (prefix = nil), FRAME is nil (all frames). + With prefix arg >= 0, FRAME is t (this frame only). + With prefix arg < 0, FRAME is `visible' (all visible frames)." + (interactive + (list (frcmds-read-buffer-for-delete-windows) + (and current-prefix-arg + (or (natnump (prefix-numeric-value current-prefix-arg)) 'visible)))) + (unless buffer (setq buffer (current-buffer))) ; Like Emacs 23+ - unlike Emacs 21-22. + + ;; `get-buffer-window' interprets FRAME oppositely for t and nil, so switch. + (setq frame (if (eq t frame) nil (if (eq nil frame) t frame))) + (let (win) + ;; Vanilla Emacs version raises an error if BUFFER is a string that does not name a buffer. + ;; We do not raise an error - we do nothing. + (and (get-buffer buffer) + (while (setq win (get-buffer-window buffer frame)) (delete-window win)) + nil))) ; Return nil always, like vanilla Emacs. + +(defun frcmds-read-buffer-for-delete-windows () + "Read buffer name for delete-windows commands. +Only displayed buffers are completion candidates." + (completing-read "Delete windows on buffer: " + (let ((all-bufs (buffer-list)) + (cand-bufs ())) + (dolist (buf all-bufs) + (when (get-buffer-window buf t) + (push (list (buffer-name buf)) cand-bufs))) + cand-bufs) + nil t nil 'minibuffer-history (buffer-name (current-buffer)) t)) + +(defsubst frcmds-frame-iconified-p (frame) + "Return non-nil if FRAME is `frame-live-p' and `frame-visible-p'." + (and (frame-live-p frame) (eq (frame-visible-p frame) 'icon))) + +;; (defun remove-window (&optional window) +;; "Remove WINDOW from the display. Default is `selected-window'. +;; If WINDOW is the only one in its frame, then: +;; If WINDOW is dedicated to its buffer, then make its frame invisible. +;; Otherwise, delete its frame (as well as the window)." +;; (interactive) +;; (setq window (or window (selected-window))) +;; (select-window window) +;; (if (and (window-dedicated-p (selected-window)) +;; (one-window-p t)) +;; (let ((fr (selected-frame))) +;; ;; HACK because of Emacs bug: `raise-frame' won't raise a frame +;; ;; that was first iconified and then made invisible. +;; ;; So, here we don't make an iconified frame invisible. +;; (unless (frcmds-frame-iconified-p fr) +;; (make-frame-invisible fr))) +;; (delete-window))) + +;; REMOVED old definition, above, because of problems with invisible +;; *Completions* frame when use completion window with subsequent args +;; to a command. Just use `delete-window' now, which deletes frame if +;; `one-window-p'. Use a `defalias' because its easier than replacing +;; all my calls to `remove-window' with `delete-window'. +;; +;;;###autoload +(defalias 'remove-window 'delete-window) + +;;;###autoload +(defun remove-windows-on (buffer) + "Remove all windows showing BUFFER. This calls `remove-window' +on each window showing BUFFER." + (interactive + (list (read-buffer "Remove all windows showing buffer: " (current-buffer) 'existing))) + (setq buffer (get-buffer buffer)) ; Convert to buffer. + (when buffer ; Do nothing if null BUFFER. + (dolist (fr (frames-on buffer t)) + (remove-window (get-buffer-window buffer t))))) + +;;;###autoload +(defun mouse-remove-window (event) + "Remove the window you click on. (This calls `remove-window'.) +This command must be bound to a mouse click." + (interactive "e") + (mouse-minibuffer-check event) + (remove-window (posn-window (event-start event)))) + +;;;###autoload +(defun delete/iconify-window (&optional window frame-p) + "Delete or iconify WINDOW (default: `selected-window'). +If WINDOW is the only one in its frame (`one-window-p'), then optional +arg FRAME-P determines the behavior regarding the frame, as follows: + If FRAME-P is nil, then the frame is deleted (with the window). + If FRAME-P is t, then the frame is iconified. + If FRAME-P is a symbol naming a function, the function is applied + to WINDOW as its only arg. + If the result is nil, then the frame is deleted. + If the result is non-nil, then the frame is iconified. + If FRAME-P is anything else, then behavior is as if FRAME-P were the + symbol `window-dedicated-p': the frame is iconified if + WINDOW is dedicated, otherwise the frame is deleted. + +Interactively, FRAME-P depends on the prefix arg, as follows: + Without a prefix arg (prefix = nil), FRAME-P is `window-dedicated-p'. + With prefix arg < 0, FRAME-P is t. The frame is iconified. + With prefix arg >= 0, FRAME-P is nil. The frame is deleted." + (interactive + (list nil (if current-prefix-arg + (not (natnump (prefix-numeric-value current-prefix-arg))) + 'window-dedicated-p))) + (setq window (or window (selected-window))) + (let ((one-win-p t)) + (save-window-excursion + (select-window window) + (if (one-window-p) + (if frame-p + (if (eq t frame-p) + (iconify-frame) + (unless (and (symbolp frame-p) (fboundp frame-p)) + (setq frame-p 'window-dedicated-p)) + (if (funcall frame-p window) (iconify-frame) (delete-frame))) + (delete-frame)) ; Default. + (setq one-win-p nil))) + ;; Do this outside `save-window-excursion'. + (unless one-win-p (delete-window window)))) + +;;;###autoload +(defun delete/iconify-windows-on (buffer &optional frame frame-p) + "For each window showing BUFFER: delete it or iconify its frame. +\(This calls `delete/iconify-window' on each window showing BUFFER.) + +Optional second arg FRAME controls which frames are considered. + If nil or omitted, treat all windows showing BUFFER in any frame. + If t, treat only windows showing BUFFER in the selected frame. + If `visible', treat all windows showing BUFFER in any visible frame. + If a frame, treat only windows showing BUFFER in that frame. + +Optional third arg FRAME-P controls what to do with one-window frames. + If FRAME-P is nil, then one-window frames showing BUFFER are deleted. + If FRAME-P is t, then one-window frames are iconified. + If FRAME-P is a symbol naming a function, the function is applied + to each window showing buffer in a frame by itself. + If the result is nil, then the frame is deleted. + If the result is non-nil, then the frame is iconified. + If FRAME-P is anything else, then behavior is as if FRAME-P were the + symbol `window-dedicated-p': One-window frames are + iconified if window is dedicated, else they are deleted. + +Interactively, FRAME is nil, and FRAME-P depends on the prefix arg: + Without a prefix arg (prefix = nil), FRAME-P is `window-dedicated-p'. + With prefix arg < 0, FRAME-P is t. The frame is iconified. + With prefix arg >= 0, FRAME-P is nil. The frame is deleted." + (interactive + (list (read-buffer "Delete windows on buffer: " (current-buffer) 'existing) + nil + (if current-prefix-arg + (not (natnump (prefix-numeric-value current-prefix-arg))) + 'window-dedicated-p))) + (setq buffer (get-buffer buffer)) ; Convert to buffer. + (when buffer ; Do nothing if null BUFFER. + ;; `get-buffer-window' interprets FRAME oppositely for t and nil, + ;; so switch. + (setq frame (if (eq t frame) nil (if (eq nil frame) t frame))) + (dolist (fr (frames-on buffer frame)) + (delete/iconify-window (get-buffer-window buffer frame) frame-p)))) + +;;;###autoload +(defun rename-frame (&optional old-name new-name all-named) + "Rename a frame named OLD-NAME to NEW-NAME. +Prefix arg non-nil means rename all frames named OLD-NAME to NEWNAME. +OLD-NAME may be a frame, its name, or nil. Default is `selected-frame'. +NEW-NAME is a string or nil. Default NEW-NAME is current `buffer-name'." + (interactive + (list (read-frame (concat "Rename " (and current-prefix-arg "all ") + "frame" (and current-prefix-arg "s named") ": ") + nil t) ; Default = selected. Must exist. + (read-from-minibuffer "Rename to (new name): " (cons (buffer-name) 1)) + current-prefix-arg)) + (setq old-name (or old-name (get-frame-name)) ; Batch defaults from current. + new-name (or new-name (buffer-name (window-buffer (frame-selected-window))))) + ;; Convert to frame if string. + (let ((fr (get-a-frame old-name))) + (if all-named + (while fr + (modify-frame-parameters fr (list (cons 'name new-name))) + (setq fr (get-a-frame old-name))) ; Get another. + (when (string= (get-frame-name fr) (get-frame-name)) + (setq fr (selected-frame))) + (modify-frame-parameters fr (list (cons 'name new-name)))))) + +;;;###autoload +(defun rename-non-minibuffer-frame (&optional old-name new-name all-named) + "Unless OLD-NAME names the minibuffer frame, use `rename-frame' +to rename a frame named OLD-NAME to NEW-NAME. +Prefix arg non-nil means rename all frames named OLD-NAME to NEW-NAME. +OLD-NAME may be a frame, its name, or nil. Default is `selected-frame'. +NEW-NAME is a string or nil. Default NEW-NAME is current `buffer-name'." + (interactive + (list (read-frame (concat "Rename " (and current-prefix-arg "all ") + "frame" (and current-prefix-arg "s named") ": ") + nil t) ; Default = selected. Must exist. + (read-from-minibuffer "Rename to (new name): " (cons (buffer-name) 1)) + current-prefix-arg)) + (setq old-name (or old-name (get-frame-name)) ; Batch defaults from current. + new-name (or new-name (buffer-name (window-buffer (frame-selected-window))))) + (let ((fr (get-a-frame old-name))) ; Convert to frame if string. + (if (and (boundp '1on1-minibuffer-frame) + (eq (cdr (assq 'name (frame-parameters 1on1-minibuffer-frame))) + (cdr (assq 'name (frame-parameters fr))))) + (and (interactive-p) + (error "Use `rename-frame' if you really want to rename minibuffer frame")) + (rename-frame old-name new-name)))) + +;;;###autoload +(defun name-all-frames-numerically (&optional startover) + "Rename all frames to numerals in 1,2,3... +With optional arg STARTOVER (prefix arg, interactively), rename all +starting over from 1. Otherwise, numbering continues from the highest +existing frame number." + (interactive "P") + (when startover + (dolist (fr (frame-list)) + (rename-non-minibuffer-frame fr (format "a%s" (frame-parameter fr 'name))))) + (mapc #'name-frame-numerically (frame-list))) + +;;;###autoload +(defun name-frame-numerically (&optional frame frames) + "Name FRAME (default, selected frame) to a numeral in 1,2,3... +If FRAME's name is already such a numeral, do nothing. +Else: + Rename it to a numeral one greater than the max numeric frame name. + Rename any other frames to numerals also. + +To automatically name new frames numerically, you can do this in your +init file: + + (add-hook 'after-make-frame-functions 'name-frame-numerically)" + (interactive) + (setq frame (or frame (selected-frame)) + frames (or frames (list frame))) + (let ((onum (frcmds-frame-number frame)) + onums max) + (unless onum + (dolist (fr (frcmds-set-difference (frame-list) frames)) + (unless (eq fr frame) + (name-frame-numerically fr (cons fr frames)))) + (setq onums (delq nil (mapcar #'frcmds-frame-number (frame-list))) + max (if onums (apply #'max onums) 0)) + (rename-non-minibuffer-frame frame (number-to-string (1+ max)))))) + +(defun frcmds-frame-number (frame) + "Return FRAME's number, or nil if its name is not a numeral 1,2,3..." + (let ((num (string-to-number (frame-parameter frame 'name)))) + (and (wholenump num) (not (zerop num)) num))) + +;;;###autoload +(defun show-frame (frame) + "Make FRAME visible and raise it, without selecting it. +FRAME may be a frame or its name." + (interactive (list (read-frame "Frame to make visible: "))) + (setq frame (get-a-frame frame)) + (make-frame-visible frame) + (raise-frame frame)) + +;;;###autoload +(defun hide-frame (frame &optional prefix) + "Make FRAME invisible. Like `make-frame-invisible', but reads frame name. +Non-nil PREFIX makes it invisible even if all other frames are invisible." + (interactive (list (read-frame "Frame to make invisible: "))) + (make-frame-invisible (get-a-frame frame) prefix)) + +;;;###autoload +(defun show-a-frame-on (buffer) + "Make visible and raise a frame showing BUFFER, if there is one. +Neither the frame nor the BUFFER are selected. +BUFFER may be a buffer or its name (a string)." + (interactive + (list (read-buffer "Show a frame showing buffer: " + (if (fboundp 'another-buffer) ; Defined in `misc-fns.el'. + (another-buffer nil t) + (other-buffer (current-buffer))) + 'existing))) + (when buffer ; Do nothing if null BUFFER. + (let ((fr (car (frames-on buffer)))) (when fr (show-frame fr))))) + +;;;###autoload +(defun show-*Help*-buffer () + "Raise a frame showing buffer *Help*, without selecting it." + (interactive) (show-a-frame-on "*Help*")) + +;;;###autoload +(defun delete-1-window-frames-on (buffer) + "Delete all visible 1-window frames showing BUFFER." + (interactive + (list (read-buffer "Delete all visible 1-window frames showing buffer: " + (current-buffer) 'existing))) + (setq buffer (get-buffer buffer)) + (save-excursion + (when (buffer-live-p buffer) ; Do nothing if dead buffer. + (dolist (fr (frames-on buffer)) ; Is it better to search through + (save-window-excursion ; `frames-on' or `get-buffer-window-list'? + (select-frame fr) + (when (one-window-p t fr) (delete-frame))))))) + +;;;###autoload +(defun delete-other-frames (&optional frame) + "Delete all frames except FRAME (default: selected frame). +Interactively, use a prefix arg (`\\[universal-argument]') to be prompted for FRAME." + (interactive (list (if current-prefix-arg + (get-a-frame (read-frame "Frame to make invisible: ")) + (selected-frame)))) + (when frame + (dolist (fr (frame-list)) + (unless (eq fr frame) (condition-case nil (delete-frame fr) (error nil)))))) + +;;;###autoload +(defun maximize-frame-horizontally (&optional frame) + "Maximize selected frame horizontally." + (interactive (list (selected-frame))) + (maximize-frame 'horizontal frame)) + +;;;###autoload +(defun maximize-frame-vertically (&optional frame) + "Maximize selected frame vertically." + (interactive (list (selected-frame))) + (maximize-frame 'vertical frame)) + +;;;###autoload +(defun maximize-frame (&optional direction frame) + "Maximize selected frame horizontally, vertically, or both. +With no prefix arg, maximize both directions. +With a non-negative prefix arg, maximize vertically. +With a negative prefix arg, maximize horizontally. + +In Lisp code: + DIRECTION is the direction: `horizontal', `vertical', or `both'. + FRAME is the frame to maximize." + (interactive (list (if current-prefix-arg + (if (natnump (prefix-numeric-value current-prefix-arg)) + 'vertical + 'horizontal) + 'both))) + (unless frame (setq frame (selected-frame))) + (unless direction (setq direction 'both)) + (let (;; Size of a frame that uses all of the available screen area, + ;; but leaving room for a minibuffer frame at bottom of display. + (fr-pixel-width (frcmds-available-screen-pixel-width)) + (fr-pixel-height (frcmds-available-screen-pixel-height)) + (fr-origin (if (eq direction 'horizontal) + (car (frcmds-effective-screen-pixel-bounds)) + (cadr (frcmds-effective-screen-pixel-bounds)))) + (orig-left (frame-parameter frame 'left)) + (orig-top (frame-parameter frame 'top)) + (orig-width (frame-parameter frame 'width)) + (orig-height (frame-parameter frame 'height))) + (let* ((borders (* 2 (cdr (assq 'border-width (frame-parameters frame))))) + (new-left (if (memq direction '(horizontal both)) 0 orig-left)) + (new-top (if (memq direction '(vertical both)) 0 orig-top)) + ;; Subtract borders, scroll bars, & title bar, then convert pixel sizes to char sizes. + (new-width (if (memq direction '(horizontal both)) + (/ (- fr-pixel-width borders (frcmds-extra-pixels-width frame)) + (frame-char-width frame)) + orig-width)) + (new-height (if (memq direction '(vertical both)) + (- (/ (- fr-pixel-height borders + (frcmds-extra-pixels-height frame) + window-mgr-title-bar-pixel-height + (frcmds-smart-tool-bar-pixel-height)) + (frame-char-height frame)) + ;; Subtract menu bar unless on Carbon Emacs (menu bar not in the frame). + (if (eq window-system 'mac) + 0 + (cdr (assq 'menu-bar-lines (frame-parameters frame))))) + orig-height))) + (modify-frame-parameters + frame + `((left . ,new-left) + (width . ,new-width) + (top . ,new-top) + (height . ,new-height) + ;; If we actually changed a parameter, record the old one for restoration. + ,(and new-left (/= (frame-geom-value-numeric 'left orig-left) + (frame-geom-value-numeric 'left new-left)) + (cons 'restore-left orig-left)) + ,(and new-top (/= (frame-geom-value-numeric 'top orig-top) + (frame-geom-value-numeric 'top new-top)) + (cons 'restore-top orig-top)) + ,(and new-width (/= (frame-geom-value-numeric 'width orig-width) + (frame-geom-value-numeric 'width new-width)) + (cons 'restore-width orig-width)) + ,(and new-height (/= (frame-geom-value-numeric 'height orig-height) + (frame-geom-value-numeric 'height new-height)) + (cons 'restore-height orig-height))))) + (show-frame frame) + (incf fr-origin (if (eq direction 'horizontal) fr-pixel-width fr-pixel-height)))) + +;;;###autoload +(unless (fboundp 'restore-frame-horizontally) + (defalias 'restore-frame-horizontally 'toggle-max-frame-horizontally)) +;;;###autoload +(defun toggle-max-frame-horizontally (&optional frame) + "Toggle maximization of FRAME horizontally. +If used once, this restores the frame. If repeated, it maximizes. +This affects the `left' and `width' frame parameters. + +FRAME defaults to the selected frame." + (interactive (list (selected-frame))) + (toggle-max-frame 'horizontal frame)) + +;;;###autoload +(unless (fboundp 'restore-frame-vertically) + (defalias 'restore-frame-vertically 'toggle-max-frame-vertically)) +;;;###autoload +(defun toggle-max-frame-vertically (&optional frame) + "Toggle maximization of FRAME vertically. +If used once, this restores the frame. If repeated, it maximizes. +This affects the `top' and `height' frame parameters. + +FRAME defaults to the selected frame." + (interactive (list (selected-frame))) + (toggle-max-frame 'vertical frame)) + +;;;###autoload +(unless (fboundp 'restore-frame) (defalias 'restore-frame 'toggle-max-frame)) +;;;###autoload +(defun toggle-max-frame (&optional direction frame) + "Toggle maximization of FRAME horizontally, vertically, or both. +Reverses or (if restored) repeats the effect of the Emacs maximize +commands. Does not restore from maximization effected outside Emacs. + +With no prefix arg, toggle both directions. +With a non-negative prefix arg, toggle only vertically. +With a negative prefix arg, toggle horizontally. + +When toggling both directions, each is toggled from its last maximize +or restore state. This means that using this after +`maximize-frame-horizontally', `maximize-frame-vertically', +`toggle-max-frame-horizontally', or `toggle-max-frame-vertically' does +not necessarily just reverse the effect of that command. + +In Lisp code: + DIRECTION is the direction: `horizontal', `vertical', or `both'. + FRAME is the frame to change. It defaults to the selected frame." + (interactive (list (if current-prefix-arg + (if (natnump (prefix-numeric-value current-prefix-arg)) + 'vertical + 'horizontal) + 'both))) + (unless frame (setq frame (selected-frame))) + (unless direction (setq direction 'both)) + (let ((restore-left (frame-parameter frame 'restore-left)) + (restore-top (frame-parameter frame 'restore-top)) + (restore-width (frame-parameter frame 'restore-width)) + (restore-height (frame-parameter frame 'restore-height)) + (orig-left (frame-parameter frame 'left)) + (orig-top (frame-parameter frame 'top)) + (orig-width (frame-parameter frame 'width)) + (orig-height (frame-parameter frame 'height)) + (horiz (memq direction '(horizontal both))) + (vert (memq direction '(vertical both)))) + (case direction + (both (unless (and restore-left restore-width restore-top restore-height) + (maximize-frame 'both frame))) + (vertical (unless (and restore-top restore-height) (maximize-frame-vertically frame))) + (horizontal (unless (and restore-left restore-width) (maximize-frame-horizontally frame)))) + (modify-frame-parameters + frame `(,(and horiz restore-left (cons 'left restore-left)) + ,(and horiz restore-width (cons 'width restore-width)) + ,(and vert restore-top (cons 'top restore-top)) + ,(and vert restore-height (cons 'height restore-height)) + ,(and horiz orig-left (cons 'restore-left orig-left)) + ,(and horiz orig-width (cons 'restore-width orig-width)) + ,(and vert orig-top (cons 'restore-top orig-top)) + ,(and vert orig-height (cons 'restore-height orig-height))))) + (show-frame frame)) + +;;;###autoload +(defalias 'tile-frames-side-by-side 'tile-frames-horizontally) +;;;###autoload +(defun tile-frames-horizontally (&optional frames) + "Tile frames horizontally (side by side). +Interactively: + With prefix arg, you are prompted for names of two frames to tile. + With no prefix arg, all visible frames are tiled, except a + standalone minibuffer frame, if any. +If called from a program, all frames in list FRAMES are tiled." + (interactive (and current-prefix-arg (frcmds-read-args-for-tiling))) + (frcmds-tile-frames 'horizontal frames)) + +;;;###autoload +(defalias 'tile-frames-top-to-bottom 'tile-frames-vertically) +;;;###autoload +(defun tile-frames-vertically (&optional frames) + "Tile frames vertically (stacking from the top of the screen downward). +Interactively: + With prefix arg, you are prompted for names of two frames to tile. + With no prefix arg, all visible frames are tiled, except a + standalone minibuffer frame, if any. +If called from a program, all frames in list FRAMES are tiled." + (interactive (and current-prefix-arg (frcmds-read-args-for-tiling))) + (frcmds-tile-frames 'vertical frames)) + +;;;###autoload +(defun create-frame-tiled-horizontally () + "Horizontally tile screen with selected frame and a copy. +The same character size is used for the new frame." + (interactive) + (let* ((fr1 (selected-frame)) + (font1 (frame-parameter fr1 'font)) + (fr2 (make-frame-command))) + (save-selected-window (select-frame fr2) (set-frame-font font1)) + (frcmds-tile-frames 'horizontal (list fr1 fr2)))) + +;;;###autoload +(defun create-frame-tiled-vertically () + "Vertically tile screen with selected frame and a copy. +The same character size is used for the new frame." + (interactive) + (let* ((fr1 (selected-frame)) + (font1 (frame-parameter fr1 'font)) + (fr2 (make-frame-command))) + (frcmds-tile-frames 'vertical (list fr1 fr2)))) + +;;;###autoload +(defun split-frame-horizontally (num) + "Horizontally split the selected frame. +With a prefix arg, create that many new frames. +The same character size is used for the new frames." + (interactive "p") + (frcmds-split-frame-1 'horizontal num)) + +;;;###autoload +(defun split-frame-vertically (num) + "Vertically split the selected frame. +With a prefix arg, create that many new frames. +The same character size is used for the new frames." + (interactive "p") + (frcmds-split-frame-1 'vertical num)) + +(defun frcmds-split-frame-1 (direction num) + "Helper for `split-frame-horizontally' and `split-frame-vertically'. +DIRECTION is `horizontal' or `vertical'. +NUM is the desired number of new frames to create." + (let* ((fr1 (selected-frame)) + (font1 (frame-parameter fr1 'font)) + (x-min (frame-geom-value-numeric 'left (frame-parameter fr1 'left))) + (y-min (frame-geom-value-numeric 'top (frame-parameter fr1 'top))) + (wid (frame-pixel-width fr1)) + (hght (frcmds-frame-pixel-height fr1)) + (frames (list fr1)) + fr) + (dotimes (ii num) + (setq fr (make-frame-command)) + (save-selected-window (select-frame fr) (set-frame-font font1)) + (push fr frames)) + (frcmds-tile-frames direction frames x-min y-min wid hght))) + +(defun frcmds-frame-pixel-height (frame) + "Pixel height of FRAME, including the window-manager title bar and menu-bar. +For the title bar, `window-mgr-title-bar-pixel-height' is used. +For the menu-bar, the frame char size is multiplied by frame parameter +`menu-bar-lines'. But that parameter does not take into account +menu-bar wrapping." + (+ window-mgr-title-bar-pixel-height + (frame-pixel-height frame) + (if (not (eq window-system 'x)) + 0 + (+ (* (frame-char-height frame) + (cdr (assq 'menu-bar-lines (frame-parameters frame)))))))) + +(defun frcmds-tile-frames (direction frames &optional x-min-pix y-min-pix pix-width pix-height) + "Tile visible frames horizontally or vertically, depending on DIRECTION. +Arg DIRECTION is `horizontal' or `vertical' (meaning side by side or +above and below, respectively). + +Arg FRAMES is the list of frames to tile. If nil, then tile all visible +frames (except a standalone minibuffer frame, if any). + +The optional args cause tiling to be limited to the bounding rectangle +they specify. X-MIN-PIX and Y-MIN-PIX are the `left' and `top' screen +pixel positions of the rectangle. X-PIX-WIDTH and Y-PIX-HEIGHT are +the pixel width and height of the rectangle." + (let ((visible-frames (or frames + (filtered-frame-list ; Get visible frames, except minibuffer. + #'(lambda (fr) + (and (eq t (frame-visible-p fr)) + (or (not (fboundp 'thumfr-thumbnail-frame-p)) + (not (thumfr-thumbnail-frame-p fr))) + (or (not (boundp '1on1-minibuffer-frame)) + (not (eq (cdr (assq 'name (frame-parameters + 1on1-minibuffer-frame))) + (cdr (assq 'name (frame-parameters fr))))))))))) + ;; Size of a frame that uses all of the available screen area, + ;; but leaving room for a minibuffer frame at bottom of display. + (fr-pixel-width (or pix-width (frcmds-available-screen-pixel-width))) + (fr-pixel-height (or pix-height (frcmds-available-screen-pixel-height))) + (fr-origin (if (eq direction 'horizontal) + (or x-min-pix (car (frcmds-effective-screen-pixel-bounds))) + (or y-min-pix (cadr (frcmds-effective-screen-pixel-bounds)))))) + (case direction ; Size of frame in pixels. + (horizontal (setq fr-pixel-width (/ fr-pixel-width (length visible-frames)))) + (vertical (setq fr-pixel-height (/ fr-pixel-height (length visible-frames)))) + (otherwise (error "`frcmds-tile-frames': DIRECTION must be `horizontal' or `vertical'"))) + (dolist (fr visible-frames) + (if (or (> emacs-major-version 24) + (and (= emacs-major-version 24) (> emacs-minor-version 3))) + (let ((frame-resize-pixelwise t)) + (set-frame-size + fr + ;; Subtract scroll bars, & title bar. + (- fr-pixel-width (frcmds-extra-pixels-width fr)) + (- fr-pixel-height + window-mgr-title-bar-pixel-height + (if pix-height 0 (frcmds-smart-tool-bar-pixel-height fr)) + (if (not (eq window-system 'x)) ; Menu bar for X is not in the frame. + 0 + (* (frame-char-height fr) (cdr (assq 'menu-bar-lines (frame-parameters fr)))))) + 'PIXELWISE)) + (set-frame-size + fr + ;; Subtract scroll bars, & title bar, then convert pixel sizes to char sizes. + (/ (- fr-pixel-width + (frcmds-extra-pixels-width fr)) + (frame-char-width fr)) + (/ (- fr-pixel-height + (frcmds-extra-pixels-height fr) + window-mgr-title-bar-pixel-height + (if pix-height 0 (frcmds-smart-tool-bar-pixel-height fr)) + (if (not (eq window-system 'x)) ; Menu bar for X is not in the frame. + 0 + (* (frame-char-height fr) (cdr (assq 'menu-bar-lines (frame-parameters fr)))))) + (frame-char-height fr)))) + (set-frame-position fr + (if (eq direction 'horizontal) fr-origin (or x-min-pix 0)) + (if (eq direction 'horizontal) (or y-min-pix 0) fr-origin)) + (show-frame fr) + ;; Move over the width or height of one frame, and add one border width. + (incf fr-origin (+ (or (cdr (assq 'border-width (frame-parameters fr))) 0) + (if (eq direction 'horizontal) fr-pixel-width fr-pixel-height)))))) + +(defun frcmds-extra-pixels-width (frame) + "Pixel difference between FRAME total width and its text area width." + (- (frame-pixel-width frame) (* (frame-char-width frame) (frame-width frame)))) + +(defun frcmds-extra-pixels-height (frame) + "Pixel difference between FRAME total height and its text area height." + (- (frame-pixel-height frame) (* (frame-char-height frame) (frame-height frame)))) + +(defun frcmds-smart-tool-bar-pixel-height (&optional frame) + "Pixel height of Mac smart tool bar." + (if (and (boundp 'mac-tool-bar-display-mode) (> (frame-parameter frame 'tool-bar-lines) 0)) + (if (eq mac-tool-bar-display-mode 'icons) 40 56) + 0)) + +(defun frcmds-read-args-for-tiling () + "Read arguments for `frcmds-tile-frames'." + (list + (list + ;; Note: `read-frame' puts selected-frame name at front of `frame-name-history'. + (get-a-frame (read-frame "Tile two frames - First frame: " nil t)) + ;; Get next visible frame. For default (prompt) value: + ;; If there is another visible frame in `frame-name-history', use next such. + ;; Else if there is another visible frame in internal frame list, use next such. + ;; Else use selected frame. (`frame-name-history' is defined in `frame.el'.) + (get-a-frame + (read-frame + "Second frame: " + (let ((fr-names (cdr frame-name-history)) + (visible-p nil) + (fr nil)) + (while (and (not fr) fr-names) ; While no visible frame found and still fr-names to check. + (setq fr (car fr-names) ; Name + fr (get-a-frame fr) ; Frame + fr (and fr (eq t (frame-visible-p fr)) fr) ; Visible frame + fr-names (cdr fr-names))) + + ;; If no visible frames in history, besides selected-frame, + ;; then get next visible frame (not its name) from internal frame list. + (unless fr + (setq fr (selected-frame)) + (while (and (not visible-p) + (setq fr (next-frame fr)) + (not (equal fr (selected-frame)))) ; equal => no other found. + (setq visible-p (eq t (frame-visible-p fr))))) + fr) + t))))) + +(defun frcmds-available-screen-pixel-bounds () + "Returns a value of the same form as option `available-screen-pixel-bounds'. +This represents the currently available screen area." + (or available-screen-pixel-bounds ; Use the option value, if available. + (if (fboundp 'mac-display-available-pixel-bounds) ; Mac-OS-specific. + (mac-display-available-pixel-bounds) + (list 0 0 (x-display-pixel-width) (x-display-pixel-height))))) + +; Emacs 20 doesn't have `butlast'. Define it to avoid requiring `cl.el' at runtime. From `subr.el'. +(unless (fboundp 'butlast) + (defun nbutlast (list &optional n) + "Modifies LIST to remove the last N elements." + (let ((m (length list))) + (or n (setq n 1)) + (and (< n m) (progn (when (> n 0) (setcdr (nthcdr (- (1- m) n) list) ())) + list)))) + + (defun butlast (list &optional n) + "Return a copy of LIST with the last N elements removed." + (if (and n (<= n 0)) list (nbutlast (copy-sequence list) n)))) + +(defun frcmds-effective-screen-pixel-bounds () + "Upper left and lower right of available screen space for tiling frames. +This is `frcmds-available-screen-pixel-bounds', possibly adjusted to +allow for the standalone minibuffer frame provided by `oneonone.el'." + (if (boundp '1on1-minibuffer-frame) + (append (butlast (frcmds-available-screen-pixel-bounds)) + (list (frame-geom-value-numeric 'top (cdr (assq 'top (frame-parameters + 1on1-minibuffer-frame)))))) + (frcmds-available-screen-pixel-bounds))) + +(defun frcmds-available-screen-pixel-width (&optional include-mini-p) + "Width of the usable screen, in pixels. +Non-nil optional argument `include-mini-p' means include the space +occupied by a standalone minibuffer, if any." + (let ((bounds (if include-mini-p + (frcmds-available-screen-pixel-bounds) + (frcmds-effective-screen-pixel-bounds)))) + (- (caddr bounds) (car bounds)))) ; X1 - X0 + +(defun frcmds-available-screen-pixel-height (&optional include-mini-p) + "Height of the usable screen, in pixels. +Non-nil optional argument `include-mini-p' means include the +space occupied by a standalone minibuffer, if any." + (let ((bounds (if include-mini-p + (frcmds-available-screen-pixel-bounds) + (frcmds-effective-screen-pixel-bounds)))) + (- (cadddr bounds) (cadr bounds)))) ; Y1 - Y0 + +;; Inspired by `sk-grow-frame' from Sarir Khamsi [sarir.khamsi@raytheon.com] +;;;###autoload +(defun enlarge-frame (&optional increment frame) ; Suggested binding: `C-M-down'. + "Increase the height of FRAME (default: selected-frame) by INCREMENT. +INCREMENT is in lines (characters). +Interactively, it is given by the prefix argument." + (interactive "p") + (set-frame-height frame (+ (frame-height frame) increment))) + +;;;###autoload +(defun enlarge-frame-horizontally (&optional increment frame) ; Suggested binding: `C-M-right'. + "Increase the width of FRAME (default: selected-frame) by INCREMENT. +INCREMENT is in columns (characters). +Interactively, it is given by the prefix argument." + (interactive "p") + (set-frame-width frame (+ (frame-width frame) increment))) + +;;;###autoload +(defun shrink-frame (&optional increment frame) ; Suggested binding: `C-M-up'. + "Decrease the height of FRAME (default: selected-frame) by INCREMENT. +INCREMENT is in lines (characters). +Interactively, it is given by the prefix argument." + (interactive "p") + (set-frame-height frame (- (frame-height frame) increment))) + +;;;###autoload +(defun shrink-frame-horizontally (&optional increment frame) ; Suggested binding: `C-M-left'. + "Decrease the width of FRAME (default: selected-frame) by INCREMENT. +INCREMENT is in columns (characters). +Interactively, it is given by the prefix argument." + (interactive "p") + (set-frame-width frame (- (frame-width frame) increment))) + +;;;###autoload +(defun move-frame-down (&optional n frame) ; Suggested binding: `M-down'. + "Move selected frame down. +Move it N times `frame-char-height', where N is the prefix arg. +In Lisp code, FRAME is the frame to move." + (interactive "p") + (unless n (setq n 1)) + (setq n (* n (frame-char-height frame))) + (modify-frame-parameters frame (list (list 'top '+ (frcmds-new-frame-position frame 'top n))))) + +;;;###autoload +(defun move-frame-up (&optional n frame) ; Suggested binding: `M-up'. + "Move selected frame up. +Same as `move-frame-down', except movement is up." + (interactive "p") + (unless n (setq n 1)) + (move-frame-down (- n))) + +;;;###autoload +(defun move-frame-right (&optional n frame) ; Suggested binding: `M-right'. + "Move frame to the right. +Move it N times `frame-char-width', where N is the prefix arg. +In Lisp code, FRAME is the frame to move." + (interactive "p") + (unless n (setq n 1)) + (setq n (* n (frame-char-width frame))) + (modify-frame-parameters frame (list (list 'left '+ (frcmds-new-frame-position frame 'left n))))) + +;;;###autoload +(defun move-frame-left (&optional n frame) ; Suggested binding: `M-left'. + "Move frame to the left. +Same as `move-frame-right', except movement is to the left." + (interactive "p") + (unless n (setq n 1)) + (move-frame-right (- n))) + +;; Helper function. +(defun frcmds-new-frame-position (frame type incr) + "Return the new TYPE position of FRAME, incremented by INCR. +TYPE is `left' or `top'. +INCR is the increment to use when changing the position." + (let ((new-pos (+ incr (cadr (frame-geom-value-cons + type (cdr (assq type (frame-parameters frame))))))) + (display-dimension (if (eq 'left type) + (frcmds-available-screen-pixel-width t) + (frcmds-available-screen-pixel-height t))) + (frame-dimension (if (eq 'left type) (frame-pixel-width frame) (frame-pixel-height frame)))) + (if (not move-frame-wrap-within-display-flag) + new-pos + (when (< new-pos (- frame-dimension)) (setq new-pos display-dimension)) + (when (> new-pos display-dimension) (setq new-pos (- frame-dimension))) + new-pos))) + +;;;###autoload +(defun move-frame-to-screen-top (arg &optional frame) ; Suggested binding: `M-S-v'. + "Move FRAME (default: selected-frame) to the top of the screen. +With a prefix arg, offset it that many char heights from the top." + (interactive (list (if current-prefix-arg + (* (frame-char-height) (prefix-numeric-value current-prefix-arg)) + 0) + (get-a-frame (read-frame "Frame: " nil 'EXISTING)))) + (modify-frame-parameters frame `((top . ,arg)))) + +;;;###autoload +(defun move-frame-to-screen-bottom (arg &optional frame) ; Suggested binding: `C-S-v'. + "Move FRAME (default: selected-frame) to the bottom of the screen. +With a prefix arg, offset it that many char heights from the bottom." + (interactive (list (if current-prefix-arg + (* (frame-char-height) (prefix-numeric-value current-prefix-arg)) + 0) + (get-a-frame (read-frame "Frame: " nil 'EXISTING)))) + (let* ((borders (* 2 (cdr (assq 'border-width (frame-parameters frame))))) + (avail-height (- (/ (- (frcmds-available-screen-pixel-height) borders + (frcmds-extra-pixels-height frame) + window-mgr-title-bar-pixel-height + (frcmds-smart-tool-bar-pixel-height)) + (frame-char-height frame)) + ;; Subtract menu bar unless on Carbon Emacs (menu bar not in the frame). + (if (eq window-system 'mac) + 0 + (cdr (assq 'menu-bar-lines (frame-parameters frame))))))) + (modify-frame-parameters frame `((top . ,(- (+ avail-height arg))))))) + +;;;###autoload +(defun move-frame-to-screen-left (arg &optional frame) ; Suggested binding: `C-S-prior'. + "Move FRAME (default: selected-frame) to the left side of the screen. +With a prefix arg, offset it that many char widths from the left." + (interactive (list (if current-prefix-arg + (* (frame-char-width) (prefix-numeric-value current-prefix-arg)) + 0) + (get-a-frame (read-frame "Frame: " nil 'EXISTING)))) + (modify-frame-parameters frame `((left . ,arg)))) + +;;;###autoload +(defun move-frame-to-screen-right (arg &optional frame) ; Suggested binding: `C-S-next'. + "Move FRAME (default: selected-frame) to the right side of the screen. +With a prefix arg, offset it that many char widths from the right." + (interactive (list (if current-prefix-arg + (* (frame-char-width) (prefix-numeric-value current-prefix-arg)) + 0) + (get-a-frame (read-frame "Frame: " nil 'EXISTING)))) + (modify-frame-parameters + frame ; Hard-code 7 here - what does it depend on? + `((left . ,(- (x-display-pixel-width) (+ (frame-pixel-width) 7 arg)))))) + +;;;###autoload +(defun move-frame-to-screen-top-left (arg &optional frame) ; Suggested binding: `C-S-home'. + "Move FRAME (default: selected-frame) to the top and left of the screen. +With a prefix arg, offset it that many char widths from the edges. + +Note: You can use this command to move an off-screen (thus not +visible) frame back onto the screen." + (interactive (list (if current-prefix-arg + (* (frame-char-width) (prefix-numeric-value current-prefix-arg)) + 0) + (get-a-frame (read-frame "Frame: " nil 'EXISTING)))) + (modify-frame-parameters frame '((top . ,arg) (left . ,arg)))) + + +;; This does not work 100% well. For instance, set frame font to +;; "-raster-Terminal-normal-r-normal-normal-12-90-96-96-c-50-ms-oemlatin", then decrease font size. +;; The next smaller existing font on my machine is +;; "-raster-Terminal-normal-r-normal-normal-11-*-96-96-c-*-ms-oemlatin". Decrease size again. +;; Next smaller font is "-raster-Terminal-bold-r-normal-normal-5-37-96-96-c-60-ms-oemlatin". Notice +;; the switch to bold from regular. Cannot decrease any more. Increase size. Next larger font is +;; "-raster-Terminal-bold-r-normal-normal-8-*-96-96-c-*-ms-oemlatin". Can no longer increase size. +;; +;;;###autoload +(defun enlarge-font (&optional increment frame) + "Increase size of font in FRAME by INCREMENT. +Interactively, INCREMENT is given by the prefix argument. +Optional FRAME parameter defaults to current frame." + (interactive "p") + (setq frame (or frame (selected-frame))) + (let ((fontname (cdr (assq 'font (frame-parameters frame)))) + (count enlarge-font-tries)) + (setq fontname (frcmds-enlarged-font-name fontname frame increment)) + (while (and (not (x-list-fonts fontname)) (wholenump (setq count (1- count)))) + (setq fontname (frcmds-enlarged-font-name fontname frame increment))) + (unless (x-list-fonts fontname) (error "Cannot change font size")) + (modify-frame-parameters frame (list (cons 'font fontname))) + ;; Update faces that want a bold or italic version of the default font. + (when (< emacs-major-version 21) (frame-update-faces frame)))) + +;;; This was a workaround hack for an Emacs 23 bug (#119, aka #1562). +;;; This works OK, but it is not as refined as the version I use, and it does not work for +;;; older Emacs versions. +;;; +;;; (when (> emacs-major-version 22) +;;; (defun enlarge-font (&optional increment frame) +;;; "Increase size of font in FRAME by INCREMENT. +;;; Interactively, INCREMENT is given by the prefix argument. +;;; Optional FRAME parameter defaults to current frame." +;;; (interactive "p") +;;; (setq frame (or frame (selected-frame))) +;;; (set-face-attribute +;;; 'default frame :height (+ (* 10 increment) +;;; (face-attribute 'default :height frame 'default))))) + + + + + +;;; Define error symbols `font-too-small' and `font-size', and their error conditions and messages. +;;; +;;; You can use these to handle an error of trying to make the font too small. +;;; See library `thumb-frm.el', command `thumfr-thumbify-frame'. +;;; +(put 'font-too-small 'error-conditions '(error font-size font-too-small)) +(put 'font-too-small 'error-message "Font size is too small") + +(put 'font-size 'error-conditions '(error font-size)) +(put 'font-size 'error-message "Bad font size") + +(defun frcmds-enlarged-font-name (fontname frame increment) + "FONTNAME, after enlarging font size of FRAME by INCREMENT. +FONTNAME is the font of FRAME." + (when (query-fontset fontname) + (let ((ascii (assq 'ascii (aref (fontset-info fontname frame) 2)))) + (when ascii (setq fontname (nth 2 ascii))))) + (let ((xlfd-fields (x-decompose-font-name fontname))) + (unless xlfd-fields (error "Cannot decompose font name")) + (let ((new-size (+ (string-to-number (aref xlfd-fields xlfd-regexp-pixelsize-subnum)) + increment))) + (unless (> new-size 0) (signal 'font-too-small (list new-size))) + (aset xlfd-fields xlfd-regexp-pixelsize-subnum (number-to-string new-size))) + ;; Set point size & width to "*", so frame width will adjust to new font size + (aset xlfd-fields xlfd-regexp-pointsize-subnum "*") + (aset xlfd-fields xlfd-regexp-avgwidth-subnum "*") + (x-compose-font-name xlfd-fields))) + +;;;###autoload +(defun set-frame-alist-parameter-from-frame (alist parameter &optional frame) + "Set PARAMETER of frame alist ALIST to its current value in FRAME. +FRAME defaults to the selected frame. ALIST is a variable (symbol) +whose value is an alist of frame parameters." + (interactive + (let ((symb (or (and (fboundp 'symbol-nearest-point) + (symbol-nearest-point)) + (symbolp (variable-at-point)))) + (enable-recursive-minibuffers t)) + (list (intern (completing-read + "Frame alist to change (variable): " + (frcmds-frame-alist-var-names) nil t nil nil 'default-frame-alist t)) + (intern (completing-read "Parameter to set:" ; Lax completion - not just known parameters. + (frcmds-frame-parameter-names) nil nil nil nil 'left t)) + (get-a-frame (read-frame "Frame to copy parameter value from: " nil t))))) + (unless (boundp alist) + (error "Not a defined Emacs variable: `%s'" alist)) + (set alist (assq-delete-all parameter (copy-alist (eval alist)))) + (set alist (cons (assq parameter (frame-parameters frame)) (eval alist))) + (tell-customize-var-has-changed alist)) + +;;; Standard Emacs 21+ function, defined here for Emacs 20. +(unless (fboundp 'assq-delete-all) + (defun assq-delete-all (key alist) + "Delete from ALIST all elements whose car is `eq' to KEY. +Return the modified alist. +Elements of ALIST that are not conses are ignored." + (while (and (consp (car alist)) (eq (car (car alist)) key)) (setq alist (cdr alist))) + (let ((tail alist) + tail-cdr) + (while (setq tail-cdr (cdr tail)) + (if (and (consp (car tail-cdr)) (eq (car (car tail-cdr)) key)) + (setcdr tail (cdr tail-cdr)) + (setq tail tail-cdr)))) + alist)) + +;; Define this to avoid requiring `cl.el' at runtime. Same as `icicle-set-difference'. +(defun frcmds-set-difference (list1 list2 &optional key) + "Combine LIST1 and LIST2 using a set-difference operation. +Optional arg KEY is a function used to extract the part of each list +item to compare. + +The result list contains all items that appear in LIST1 but not LIST2. +This is non-destructive; it makes a copy of the data if necessary, to +avoid corrupting the original LIST1 and LIST2." + (if (or (null list1) (null list2)) + list1 + (let ((keyed-list2 (and key (mapcar key list2))) + (result ())) + (while list1 + (unless (if key + (member (funcall key (car list1)) keyed-list2) + (member (car list1) list2)) + (setq result (cons (car list1) result))) + (setq list1 (cdr list1))) + result))) + +;;;###autoload +(defun set-all-frame-alist-parameters-from-frame (alist &optional frame really-all-p) + "Set frame parameters of ALIST to their current values in FRAME. +Unless optional argument REALLY-ALL-P (prefix arg) is non-nil, the +frame parameters in list `frame-parameters-to-exclude' are +excluded: they are not copied from FRAME to ALIST. +ALIST is a variable (symbol) whose value is an alist of frame parameters. +FRAME defaults to the selected frame." + (interactive + (let ((symb (or (and (fboundp 'symbol-nearest-point) + (symbol-nearest-point)) + (symbolp (variable-at-point)))) + (enable-recursive-minibuffers t)) + (list (intern (completing-read + "Frame alist to change (variable): " + (frcmds-frame-alist-var-names) nil t nil nil 'default-frame-alist t)) + (get-a-frame (read-frame "Frame to copy parameter values from: " nil t)) + current-prefix-arg))) + (unless (boundp alist) + (error "Not a defined Emacs variable: `%s'" alist)) + (set alist (frcmds-set-difference (frame-parameters frame) + (and (not really-all-p) frame-parameters-to-exclude) + #'car)) + (tell-customize-var-has-changed alist)) + +(defun frcmds-frame-alist-var-names () + "Return an alist of all variable names that end in \"frame-alist\". +The CAR of each list item is a string variable name. +The CDR is nil." + (let ((vars ())) + (mapatoms (lambda (sym) (and (boundp sym) + (setq sym (symbol-name sym)) + (string-match "frame-alist$" sym) + (push (list sym) vars)))) + vars)) + +(defun frcmds-frame-parameter-names () + "Return an alist of all available frame-parameter names. +These are the documented, out-of-the-box (predefined) parameters. +The CAR of each list item is a string parameter name. +The CDR is nil." + (let ((params '(("auto-lower") + ("auto-raise") + ("background-color") + ("background-mode") + ("border-color") + ("border-width") + ("buffer-list") + ("buffer-predicate") + ("cursor-color") + ("cursor-type") + ("display") + ("display-type") + ("font") + ("foreground-color") + ("height") + ("horizontal-scroll-bars") + ("icon-left") + ("icon-name") + ("icon-top") + ("icon-type") + ("internal-border-width") + ("left") + ("menu-bar-lines") + ("minibuffer") + ("mouse-color") + ("name") + ("scroll-bar-width") + ("title") + ("top") + ("unsplittable") + ("user-position") + ("vertical-scroll-bars") + ("visibility") + ("width") + ("window-id")))) + (when (> emacs-major-version 20) + (setq params (nconc params '(("fullscreen") + ("left-fringe") + ("line-spacing") + ("outer-window-id") + ("right-fringe") + ("screen-gamma") + ("scroll-bar-background") + ("scroll-bar-foreground") + ("tool-bar-lines") + ("tty-color-mode") + ("wait-for-wm"))))) + (when (> emacs-major-version 21) + (setq params (nconc params '(("user-size"))))) + (when (> emacs-major-version 22) + (setq params (nconc params '(("alpha") + ("display-environment-variable") + ("font-backend") + ("sticky") + ("term-environment-variable"))))) + (when (> emacs-major-version 23) + (setq params (nconc params '(("explicit-name") + ("tool-bar-position"))))) + params)) + +;;;###autoload +(defun tell-customize-var-has-changed (variable) + "Tell Customize to recognize that VARIABLE has been set (changed). +VARIABLE is a symbol that names a user option." + (interactive "vVariable: ") + (put variable 'customized-value (list (custom-quote (eval variable))))) + +;;;###autoload +(defun other-window-or-frame (arg) + "`other-frame', if `one-window-p'; otherwise, `other-window'." + (interactive "p") + (if (one-window-p) (other-frame arg) (other-window arg))) + +;;;;;;;;;;;;;;;;;;;;;;; + +(provide 'frame-cmds) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; frame-cmds.el ends here diff --git a/layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/frame-fns.el b/layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/frame-fns.el new file mode 100644 index 0000000..68b6b20 --- /dev/null +++ b/layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/frame-fns.el @@ -0,0 +1,313 @@ +;;; frame-fns.el --- Non-interactive frame and window functions. +;; +;; Filename: frame-fns.el +;; Description: Non-interactive frame and window functions. +;; Author: Drew Adams +;; Maintainer: Drew Adams (concat "drew.adams" "@" "oracle" ".com") +;; Copyright (C) 1996-2015, Drew Adams, all rights reserved. +;; Created: Tue Mar 5 16:15:50 1996 +;; Version: 0 +;; Package-Requires: () +;; Last-Updated: Thu Jan 1 10:45:03 2015 (-0800) +;; By: dradams +;; Update #: 227 +;; URL: http://www.emacswiki.org/frame-fns.el +;; Doc URL: http://emacswiki.org/FrameModes +;; Keywords: internal, extensions, local, frames +;; Compatibility: GNU Emacs: 20.x, 21.x, 22.x, 23.x, 24.x, 25.x +;; +;; Features that might be required by this library: +;; +;; `avoid'. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: +;; +;; Non-interactive frame and window functions. +;; +;; Main new functions defined here: +;; +;; `1-window-frames-on', `distance', `flash-ding', +;; `frame-geom-spec-cons', `frame-geom-value-cons', +;; `frame-geom-spec-numeric', `frame-geom-value-numeric', +;; `frames-on', `get-a-frame', `get-frame-name', +;; `multi-window-frames-on', `read-frame', `window-coords'. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Change Log: +;; +;; 2011/01/04 dadams +;; Removed autoload cookies from non-interactive functions. +;; 2010/01/12 dadams +;; 1-window-frames-on, multi-window-frames-on: +;; save-excursion + set-buffer -> with-current-buffer. +;; 2008/04/05 dadams +;; get-a-frame: Define without using member-if. +;; 2005/10/31 dadams +;; read-frame: Swapped default and init values in call to completing-read. +;; 2004/11/26 dadams +;; Added frame-geom-spec-numeric and frame-geom-value-numeric. +;; 2004/03/19 dadams +;; read-frame: 1) if default is a frame, use its name, +;; 2) use frame-name-history, not minibuffer-history, +;; and use make-frame-names-alist, not frame-alist, +;; in completing-read +;; 1996/02/14 dadams +;; Added: window-coords, distance. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; 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 2, 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; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Code: + +(eval-when-compile (when (< emacs-major-version 21) (require 'cl))) + ;; dolist, push +(require 'avoid nil t) ;; mouse-avoidance-point-position + +;;;;;;;;;;;;;;;;;;;;;;; + +(defun window-coords (&optional position) + "Return window coordinates of buffer POSITION (default: point). +If POSITION is nil, (point) is used." + (unless (fboundp 'mouse-avoidance-point-position) (require 'avoid)) + (cdr (mouse-avoidance-point-position))) + +(defun distance (pt1 pt2) + "Distance as the crow flies between PT1 and PT2. +PT1 and PT2 are each a cons of the form (X . Y)." + (let ((xdiff (abs (- (car pt1) (car pt2)))) + (ydiff (abs (- (cdr pt1) (cdr pt2))))) + (sqrt (+ (* xdiff xdiff) (* ydiff ydiff))))) + +(defun frame-geom-value-numeric (type value &optional frame) + "Return equivalent geometry value for FRAME in numeric terms. +A geometry value equivalent to VALUE for FRAME is returned, +where the value is numeric, not a consp. +TYPE is the car of the original geometry spec (TYPE . VALUE). + It is `top' or `left', depending on which edge VALUE is related to. +VALUE is the cdr of a frame geometry spec: (left/top . VALUE). +If VALUE is a consp, then it is converted to a numeric value, perhaps + relative to the opposite frame edge from that in the original spec. +FRAME defaults to the selected frame. + +Examples (measures in pixels) - + Assuming display height/width=1024, frame height/width=600: + 300 inside display edge: 300 => 300 + (+ 300) => 300 + 300 inside opposite display edge: (- 300) => -300 + -300 => -300 + 300 beyond display edge + (= 724 inside opposite display edge): (+ -300) => -724 + 300 beyond display edge + (= 724 inside opposite display edge): (- -300) => 724 + +In the last two examples, the returned value is relative to the +opposite frame edge from the edge indicated in the input spec." + (if (consp value) + (if (natnump (cadr value)) + ;; e.g. (+ 300) or (- 300) => 300 or -300 + (funcall (car value) (cadr value)) + ;; e.g. (+ -300) or (- -300) + (let ((oppval (- (if (eq 'left type) + (x-display-pixel-width) + (x-display-pixel-height)) + (cadr value) + (if (eq 'left type) + (frame-pixel-width frame) + (frame-pixel-height frame))))) + (if (eq '+ (car value)) + (- oppval) ; e.g. (+ -300) => -724 + oppval))) ; e.g. (- -300) => 724 + ;; e.g. 300 or -300 + value)) + +(defun frame-geom-spec-numeric (spec &optional frame) + "Return equivalent geometry specification for FRAME in numeric terms. +A geometry specification equivalent to SPEC for FRAME is returned, +where the value is numeric, not a consp. +SPEC is a frame geometry spec: (left . VALUE) or (top . VALUE). +If VALUE is a consp, then it is converted to a numeric value, perhaps + relative to the opposite frame edge from that in the original SPEC. +FRAME defaults to the selected frame. + +Examples (measures in pixels) - + Assuming display height=1024, frame height=600: + top 300 below display top: (top . 300) => (top . 300) + (top + 300) => (top . 300) + bottom 300 above display bottom: (top - 300) => (top . -300) + (top . -300) => (top . -300) + top 300 above display top + (= bottom 724 above display bottom): (top + -300) => (top . -724) + bottom 300 below display bottom + (= top 724 below display top): (top - -300) => (top . 724) + +In the last two examples, the returned value is relative to the +opposite frame edge from the edge indicated in the input SPEC." + (cons (car spec) (frame-geom-value-numeric (car spec) (cdr spec)))) + +(defun frame-geom-value-cons (type value &optional frame) + "Return equivalent geometry value for FRAME as a cons with car `+'. +A geometry value equivalent to VALUE for FRAME is returned, +where the value is a cons with car `+', not numeric. +TYPE is the car of the original geometry spec (TYPE . VALUE). + It is `top' or `left', depending on which edge VALUE is related to. +VALUE is the cdr of a frame geometry spec: (left/top . VALUE). +If VALUE is a number, then it is converted to a cons value, perhaps + relative to the opposite frame edge from that in the original spec. +FRAME defaults to the selected frame. + +Examples (measures in pixels) - + Assuming display height/width=1024, frame height/width=600: + 300 inside display edge: 300 => (+ 300) + (+ 300) => (+ 300) + 300 inside opposite display edge: (- 300) => (+ 124) + -300 => (+ 124) + 300 beyond display edge + (= 724 inside opposite display edge): (+ -300) => (+ -300) + 300 beyond display edge + (= 724 inside opposite display edge): (- -300) => (+ 724) + +In the 3rd, 4th, and 6th examples, the returned value is relative to +the opposite frame edge from the edge indicated in the input spec." + (cond ((and (consp value) (eq '+ (car value))) ; e.g. (+ 300), (+ -300) + value) + ((natnump value) (list '+ value)) ; e.g. 300 => (+ 300) + (t ; e.g. -300, (- 300), (- -300) + (list '+ (- (if (eq 'left type) ; => (+ 124), (+ 124), (+ 724) + (x-display-pixel-width) + (x-display-pixel-height)) + (if (integerp value) (- value) (cadr value)) + (if (eq 'left type) + (frame-pixel-width frame) + (frame-pixel-height frame))))))) + +(defun frame-geom-spec-cons (spec &optional frame) + "Return equivalent geometry spec for FRAME as a cons with car `+'. +A geometry specification equivalent to SPEC for FRAME is returned, +where the value is a cons with car `+', not numeric. +SPEC is a frame geometry spec: (left . VALUE) or (top . VALUE). +If VALUE is a number, then it is converted to a cons value, perhaps + relative to the opposite frame edge from that in the original spec. +FRAME defaults to the selected frame. + +Examples (measures in pixels) - + Assuming display height=1024, frame height=600: + top 300 below display top: (top . 300) => (top + 300) + (top + 300) => (top + 300) + bottom 300 above display bottom: (top - 300) => (top + 124) + (top . -300) => (top + 124) + top 300 above display top + (= bottom 724 above display bottom): (top + -300) => (top + -300) + bottom 300 below display bottom + (= top 724 below display top): (top - -300) => (top + 724) + +In the 3rd, 4th, and 6th examples, the returned value is relative to +the opposite frame edge from the edge indicated in the input spec." + (cons (car spec) (frame-geom-value-cons (car spec) (cdr spec)))) + +(defun get-frame-name (&optional frame) + "Return the string that names FRAME (a frame). Default is selected frame." + (unless frame (setq frame (selected-frame))) + (if (framep frame) + (cdr (assq 'name (frame-parameters frame))) + (error "Function `get-frame-name': Argument not a frame: `%s'" frame))) + +(defun get-a-frame (frame) + "Return a frame, if any, named FRAME (a frame or a string). +If none, return nil. +If FRAME is a frame, it is returned." + (cond ((framep frame) frame) + ((stringp frame) + (catch 'get-a-frame-found + (dolist (fr (frame-list)) + (when (string= frame (get-frame-name fr)) + (throw 'get-a-frame-found fr))) + nil)) + (t (error + "Function `get-frame-name': Arg neither a string nor a frame: `%s'" + frame)))) + +(defun read-frame (prompt &optional default existing) + "Read the name of a frame, and return it as a string. +Prompts with 1st arg, PROMPT (a string). + +The default frame is named by the optional 2nd arg, DEFAULT, if a +string or a frame, or by the `selected-frame', if nil. + +Non-nil optional 3rd arg, EXISTING, means to allow only names of +existing frames." + (setq default (if (framep default) + (get-frame-name default) + (or default (get-frame-name)))) + (unless (stringp default) + (error "Function `read-frame': DEFAULT arg is neither a frame nor a string")) + (completing-read prompt (make-frame-names-alist) + ;; To limit to live frames: + ;; (function (lambda (fn+f)(frame-live-p (cdr fn+f)))) + ;; `frame-name-history' is defined in `frame.el'. + nil existing nil '(frame-name-history . 2) default)) + +(defun frames-on (buffer &optional frame) + "List of all live frames showing BUFFER (a buffer or its name). +The optional FRAME argument is as for function `get-buffer-window'." + (filtered-frame-list (function (lambda (fr) (get-buffer-window buffer fr))))) + +(defun 1-window-frames-on (buffer) + "List of all visible 1-window frames showing BUFFER." + (setq buffer (get-buffer buffer)) + (when buffer ; Do nothing if BUFFER is not a buffer. + (let ((frs ())) + (with-current-buffer buffer + (when (buffer-live-p buffer) ; Do nothing if dead buffer. + ;; $$$$$$ Is it better to search through frames-on or windows-on? + (dolist (fr (frames-on buffer)) + (save-window-excursion (select-frame fr) + (when (one-window-p t fr) (push fr frs)))))) + frs))) + +(defun multi-window-frames-on (buffer) + "List of all visible multi-window frames showing BUFFER." + (setq buffer (get-buffer buffer)) + (when buffer ; Do nothing if BUFFER is not a buffer. + (let ((frs ())) + (with-current-buffer buffer + (when (buffer-live-p buffer) ; Do nothing if dead buffer. + ;; $$$$$$ Is it better to search through frames-on or windows-on? + (dolist (fr (frames-on buffer)) + (save-window-excursion (select-frame fr) + (unless (one-window-p t fr) + (push fr frs)))))) + frs))) + +(defun flash-ding (&optional do-not-terminate frame) + "Ring bell (`ding'), after flashing FRAME (default: current), if relevant. +Terminates any keyboard macro executing, unless arg DO-NOT-TERMINATE non-nil." + (save-window-excursion + (when frame (select-frame frame)) + (let ((visible-bell t)) (ding 'DO-NOT-TERMINATE))) ; Flash. + (let ((visible-bell nil)) (ding 'DO-NOT-TERMINATE))) ; Bell. + +;;;;;;;;;;;;;;;;;;;;;;; + +(provide 'frame-fns) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; frame-fns.el ends here diff --git a/layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/zoom-frm.el b/layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/zoom-frm.el new file mode 100644 index 0000000..91eac33 --- /dev/null +++ b/layers/+spacemacs/spacemacs-ui-visual/local/zoom-frm/zoom-frm.el @@ -0,0 +1,439 @@ +;;; zoom-frm.el --- Commands to zoom frame font size. +;; +;; Filename: zoom-frm.el +;; Description: Commands to zoom frame font size. +;; Author: Drew Adams +;; Maintainer: Drew Adams (concat "drew.adams" "@" "oracle" ".com") +;; Copyright (C) 2005-2015, Drew Adams, all rights reserved. +;; Created: Fri Jan 07 10:24:35 2005 +;; Version: 0 +;; Package-Requires: ((frame-fns "0") (frame-cmds "0")) +;; Last-Updated: Thu Jan 1 11:24:13 2015 (-0800) +;; By: dradams +;; Update #: 322 +;; URL: http://www.emacswiki.org/zoom-frm.el +;; Doc URL: http://emacswiki.org/SetFonts +;; Keywords: frames, extensions, convenience +;; Compatibility: GNU Emacs: 20.x, 21.x, 22.x, 23.x, 24.x, 25.x +;; +;; Features that might be required by this library: +;; +;; `avoid', `frame-cmds', `frame-fns', `misc-fns', `strings', +;; `thingatpt', `thingatpt+'. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: +;; +;; Commands to zoom into and out of text. They zoom a frame or a +;; buffer, so that the text appears larger or smaller. +;; +;; Commands `zoom-in', `zoom-out', and `zoom-in/out' do both kinds of +;; zooming. They can behave like command `text-scale-adjust', +;; zooming a buffer wherever it is displayed, or they can zoom an +;; entire single frame (all of its windows). Hit `C-u' at any time +;; while using these commands to toggle between buffer and frame +;; zooming. +;; +;; Because it is a more general replacement for `text-scale-adjust', +;; I suggest you bind `zoom-in/out' to the keys bound by default to +;; `text-scale-adjust': `C-x C-+', `C-x C-=', `C-x C--', and `C-x +;; C-0'. +;; +;; It is also handy to use a mouse button or wheel for zooming, hence +;; the mouse binding suggestions. For example, binding `zoom-in' and +;; `zoom-out' to mouse wheel events gives you the zooming effect you +;; are perhaps used to in a Web browser. +;; +;; User option `zoom-frame/buffer' determines which kind of zooming +;; (frame or buffer) is used by default. You can customize this +;; option, but (in Emacs 23 or later) you can also toggle it just by +;; providing a prefix arg (`C-u') to `zoom-in/out', `zoom-in', or +;; `zoom-out'. +;; +;; Note about saving changes made dynamically using the commands +;; defined here: +;; +;; Some of the commands defined here change frame properties. You +;; can save any changes you have made, by using Customize. To +;; visit a Customize buffer of all unsaved changes you have made, +;; use command `customize-customized'. +;; +;; Frame parameter changes, such as font size, can be saved for +;; future use by all frames or all frames of a certain kind. For +;; that, you must change the frame parameters of the correponding +;; frame-alist variable. +;; +;; There is no single variable for saving changes to parameters of +;; the current frame. Instead, there are several different +;; frame-alist variables, which you can use to define different +;; kinds of frames. These include: `default-frame-alist', +;; `initial-frame-alist', and `special-display-frame-alist'. The +;; complete list of such frame alist variables is available using +;; function `frame-alist-var-names', defined in library +;; `frame-cmds.el'. +;; +;; Example: Suppose you change the font size of a frame and want to +;; make that the default font size for new frames in the future. +;; You will need to update the value of variable +;; `default-frame-alist' to use the `font' parameter setting of the +;; changed frame. +;; +;; You can easily copy one or all parameter values from any given +;; frame to any frame alist (such as `default-frame-alist'), by +;; using the commands `set-frame-alist-parameter-from-frame' and +;; `set-all-frame-alist-parameters-from-frame'. Those commands are +;; defined in library `frame-cmds.el'. +;; +;; +;; Commands defined here: +;; +;; `toggle-zoom-frame', `zoom-all-frames-in', +;; `zoom-all-frames-out', `zoom-frm-in', `zoom-frm-out', +;; `zoom-frm-unzoom', `zoom-in', `zoom-in/out' (Emacs 23+), +;; `zoom-out'. +;; +;; +;; User options (variables) defined here: +;; +;; `frame-zoom-font-difference', `zoom-frame/buffer' (Emacs 23+). +;; +;; +;; Put this in your init file (`~/.emacs'): (require 'zoom-frm) +;; +;; Suggested key bindings: +;; +;; Emacs 23 and later: +;; +;; (define-key ctl-x-map [(control ?+)] 'zoom-in/out) +;; (define-key ctl-x-map [(control ?-)] 'zoom-in/out) +;; (define-key ctl-x-map [(control ?=)] 'zoom-in/out) +;; (define-key ctl-x-map [(control ?0)] 'zoom-in/out) +;; +;; Any Emacs version: +;; +;; (global-set-key (if (boundp 'mouse-wheel-down-event) ; Emacs 22+ +;; (vector (list 'control +;; mouse-wheel-down-event)) +;; [C-mouse-wheel]) ; Emacs 20, 21 +;; 'zoom-in) +;; (when (boundp 'mouse-wheel-up-event) ; Emacs 22+ +;; (global-set-key (vector (list 'control mouse-wheel-up-event)) +;; 'zoom-out)) +;; +;; (global-set-key [S-mouse-1] 'zoom-in) +;; (global-set-key [C-S-mouse-1] 'zoom-out) +;; ;; Get rid of `mouse-set-font' or `mouse-appearance-menu': +;; (global-set-key [S-down-mouse-1] nil) +;; +;; The first two of the mouse bindings mean that in Emacs 22 or later +;; you can hold the Control key and rotate the mouse wheel to zoom in +;; and out, just as you might do in a Web browser. +;; +;; (In Emacs 20 and 21, Control plus mouse wheeling zooms in, but to +;; zoom out you need to use `C--' before wheeling with Control. This +;; is because Emacs 20 and 21 do not have separate events for the +;; mouse wheel directions, and it is the prefix arg, not the wheel +;; direction, that determines the effect.) +;; +;; +;; See also these files for other frame commands: +;; +;; `autofit-frame.el' - Automatically fit each frame to its +;; selected window. Uses `fit-frame.el'. +;; +;; `fit-frame.el' - 1) Fit a frame to its selected window. +;; 2) Incrementally resize a frame. +;; +;; `doremi-frm.el' - Incrementally adjust frame properties +;; using arrow keys and/or mouse wheel. +;; +;; `frame-cmds.el' - Miscellaneous frame and window commands. +;; +;; `thumb-frm.el' - Shrink frames to a thumbnail size and +;; restore them again. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Change Log: +;; +;; 2013/12/31 dadams +;; zoom-in/out: Use set-transient-map, if defined. +;; 2013/09//29 dadams +;; zoom-in/out: Only for Emacs 24.3+ (needs set-temporary-overlay-map). +;; 2013/09/13 dadams +;; Added: zoom-all-frames-in, zoom-all-frames-out. +;; 2013/04/21 dadams +;; Added: zoom-in/out. +;; 2011/01/04 dadams +;; Added autoload cookies for defgroup and defcustom. +;; 2010/07/06 dadams +;; zoom-(in|out): Put doc strings before interactive spec. Thx to Yidong Chong. +;; 2009/06/11 dadams +;; Added buffer zooming, for Emacs 23. +;; Added zoom-(in|out), group zoom, zoom-frame/buffer. +;; 2006/01/07 dadams +;; Added :link for sending bug report. +;; 2006/01/06 dadams +;; frame-zoom-font-difference: Changed :group to Frame-Commands. Added :link. +;; 2005/01/18 dadams +;; Changed default value of frame-zoom-font-difference. +;; Added Note on saving changes. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; 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 2, 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; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth +;; Floor, Boston, MA 02110-1301, USA. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Code: + +(require 'frame-cmds) ;; enlarge-font + + +(defvar zoom-frame/buffer) ;; Defined here for Emacs 22+. + +;;;;;;;;;;;;;;;;;;;;;;;; + + +;;; USER OPTIONS (VARIABLES) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;###autoload +(defgroup zoom nil + "Zoom a frame or buffer." + :group 'frames :group 'Frame-Commands ; Defined in `frame-cmds.el'. + :link `(url-link :tag "Send Bug Report" + ,(concat "mailto:" "drew.adams" "@" "oracle" ".com?subject=\ +zoom-frm.el bug: \ +&body=Describe bug here, starting with `emacs -q'. \ +Don't forget to mention your Emacs and library versions.")) + :link '(url-link :tag "Other Libraries by Drew" + "http://www.emacswiki.org/DrewsElispLibraries") + :link '(url-link :tag "Download" + "http://www.emacswiki.org/emacs-en/download/zoom-frm.el") + :link '(url-link :tag "Description" + "http://www.emacswiki.org/SetFonts#ChangingFontSize") + :link '(emacs-commentary-link :tag "Commentary" "zoom-frm")) + +;;;###autoload +(defcustom frame-zoom-font-difference 1 + "*Number of points to change the frame font size when zooming. +This applies to commands `zoom-in/out', `zoom-in', `zoom-out', +`zoom-frm-in', and `zoom-frm-out' when zooming a frame. + +The absolute value of the value must be less than the current font +size for the frame, because the new font size cannot be less than one +point." + :type 'integer :group 'zoom) + +(when (> emacs-major-version 22) + (defcustom zoom-frame/buffer 'frame + "*What to zoom: current frame or current buffer. +See command `zoom-in/out', `zoom-in', or `zoom-out'." + :type '(choice (const :tag "Zoom frame" frame) (const :tag "Zoom buffer" buffer)) + :group 'zoom)) + + +;;; FUNCTIONS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(unless (> emacs-major-version 22) (defalias 'zoom-in 'zoom-frm-in)) +;;;###autoload +(defun zoom-frm-in (&optional frame flip) + "Zoom FRAME in by `frame-zoom-font-difference', making text larger. +If `frame-zoom-font-difference' is negative, make text smaller. +With prefix argument FLIP, reverse the direction: +if `frame-zoom-font-difference' is positive, then make text smaller. +This is equal but opposite to `zoom-frm-out'." + (interactive (list (selected-frame) current-prefix-arg)) + (setq frame (or frame (selected-frame))) + (let ((zoom-factor (frame-parameter frame 'zoomed)) + (increment (if flip (- frame-zoom-font-difference) frame-zoom-font-difference))) + (unless zoom-factor (setq zoom-factor 0)) + (setq zoom-factor (+ zoom-factor increment)) + (enlarge-font increment frame) + (modify-frame-parameters frame (list (cons 'zoomed zoom-factor))))) + +(unless (> emacs-major-version 22) (defalias 'zoom-out 'zoom-frm-out)) +;;;###autoload +(defun zoom-frm-out (&optional frame flip) + "Zoom FRAME out by `frame-zoom-font-difference', making text smaller. +If `frame-zoom-font-difference' is negative, make text larger. +With prefix argument FLIP, reverse the direction: +if `frame-zoom-font-difference' is positive, then make text larger. +This is equal but opposite to `zoom-frm-in'." + (interactive (list (selected-frame) current-prefix-arg)) + (setq frame (or frame (selected-frame))) + (let ((frame-zoom-font-difference (- frame-zoom-font-difference))) + (zoom-frm-in frame flip))) + +;;;###autoload +(defun zoom-frm-unzoom (&optional frame) + "Cancel zoom of FRAME." + (interactive) + (setq frame (or frame (selected-frame))) + (let ((zoom-factor (frame-parameter frame 'zoomed))) + (if (not zoom-factor) + (error "Frame is not zoomed") + (enlarge-font (- zoom-factor) frame) + (modify-frame-parameters frame '((zoomed)))))) + +;;;###autoload +(defun toggle-zoom-frame (&optional frame) + "Alternately zoom/unzoom FRAME by `frame-zoom-font-difference'." + (interactive) + (setq frame (or frame (selected-frame))) + (if (frame-parameter frame 'zoomed) + (zoom-frm-unzoom frame) + (zoom-frm-in frame))) + +(when (> emacs-major-version 22) + (defun zoom-in (arg) + "Zoom current frame or buffer in. +With a prefix arg, toggle between zooming frame and zooming buffer. +Frame zooming uses command `zoom-frm-in'. +Buffer zooming uses command `text-scale-increase'." + (interactive "P") + (when arg + (setq zoom-frame/buffer (if (eq zoom-frame/buffer 'frame) 'buffer 'frame))) + (if (eq zoom-frame/buffer 'frame) + (zoom-frm-in) + (with-current-buffer + (if (string-match "mouse" (format "%S" (event-basic-type + last-command-event))) + (window-buffer (posn-window (event-start last-command-event))) + (current-buffer)) + (text-scale-increase 1)))) + + (defun zoom-out (arg) + "Zoom current frame or buffer out. +With a prefix arg, toggle between zooming frame and zooming buffer. +Frame zooming uses command `zoom-frm-out'. +Buffer zooming uses command `text-scale-decrease'." + (interactive "P") + (when arg + (setq zoom-frame/buffer (if (eq zoom-frame/buffer 'frame) 'buffer 'frame))) + (if (eq zoom-frame/buffer 'frame) + (zoom-frm-out) + (with-current-buffer + (if (string-match "mouse" (format "%S" (event-basic-type + last-command-event))) + (window-buffer (posn-window (event-start last-command-event))) + (current-buffer)) + (text-scale-decrease 1)))) + + (when (or (fboundp 'set-transient-map) ; Emacs 24.4+ + (fboundp 'set-temporary-overlay-map)) ; Emacs 24.3 + + (defun zoom-in/out (arg) + "Zoom current frame or buffer in or out. +A prefix arg determines the behavior, as follows: + none : Use 1 as the zoom amount. + plain `C-u': Toggle between zooming frame and zooming buffer. + 0 : Unzoom: reset size to the default. + other : Use the numeric value as the zoom amount. + +Similar to the behavior of command `text-scale-adjust', you can +continue to use any of the keys `+', `-', `0', and `C-u' repeatedly. +The zoom amount from the initial key sequence is used each time. + +Example: `C-3 C-x C-- C-- C-- C--' zooms out 4 times with a zoom +amount of 3 each time. + +The zoom amount for frame zooming is a point-size increment/decrement. +The zoom amount for buffer zooming is a number of text-scaling steps. + +Frame zooming uses command `zoom-frm-in'. +Buffer zooming uses command `text-scale-increase'. + +User option `zoom-frame/buffer' determines the default zoom type: +frame or buffer. If the option value is `buffer' and you never use +plain `C-u' with this command then it acts like `text-scale-adjust'." + (interactive "P") + (when (or (equal arg '(4)) (eq ?\025 last-command-event)) ; `C-u' + (setq zoom-frame/buffer (if (eq zoom-frame/buffer 'frame) 'buffer 'frame) + arg 1) + (message "Zooming %sS from now on" (upcase (symbol-name zoom-frame/buffer))) + (sit-for 1)) + (let* ((ev last-command-event) + (echo-keystrokes nil) + (base (event-basic-type ev)) + (step (if (or (equal arg '(4)) (eq ?\025 last-command-event)) ; C-u + 'C-U-WAS-USED + (setq arg (prefix-numeric-value arg)) + (case base + ((?+ ?=) arg) + (?- (- arg)) + (?0 0) + (t arg))))) + (message (if (eq step 0) + "Reset to default size. Use +/- to zoom in/out" + "Use +/- to zoom in/out, 0 to reset (unzoom)")) + (unless (eq step 'C-U-WAS-USED) + (if (eq zoom-frame/buffer 'frame) + (if (eq step 0) + (zoom-frm-unzoom) + (let ((frame-zoom-font-difference step)) (zoom-frm-in))) + (with-current-buffer + (if (string-match "mouse" (format "%S" (event-basic-type last-command-event))) + (window-buffer (posn-window (event-start last-command-event))) + (current-buffer)) + (text-scale-increase step)))) + (let ((fun (if (fboundp 'set-transient-map) + #'set-transient-map + #'set-temporary-overlay-map))) + (funcall fun + (let ((map (make-sparse-keymap))) + (dolist (mods '(() (control))) + (dolist (key '(?- ?+ ?= ?0)) ; The `=' key is often unshifted `+' key. + (define-key map (vector (append mods (list key))) + `(lambda () (interactive) (zoom-in/out ',arg))))) + (define-key map "\C-u" `(lambda () (interactive) (zoom-in/out ',arg))) + map))))))) + +;; These are not so useful, but some people might like them. +(when (fboundp 'set-face-attribute) ; Emacs 22+ + (defun zoom-all-frames-in (&optional flip) + "Zoom all frames in by `frame-zoom-font-difference', making text larger. +If `frame-zoom-font-difference' is negative, make text smaller. +With prefix argument FLIP, reverse the direction: +if `frame-zoom-font-difference' is positive, then make text smaller. +This is equal but opposite to `zoom-all-frames-out'. +Note: This zooming is unaffected by `zoom-frm-unzoom'." + (interactive "P") + (let ((increment (if flip (- frame-zoom-font-difference) frame-zoom-font-difference))) + (set-face-attribute 'default nil + :height (+ (* 10 increment) + (face-attribute 'default :height nil 'default))))) + + (defun zoom-all-frames-out (&optional flip) + "Zoom all frames out by `frame-zoom-font-difference', making text smaller. +If `frame-zoom-font-difference' is negative, make text larger. +With prefix argument FLIP, reverse the direction: +if `frame-zoom-font-difference' is positive, then make text larger. +This is equal but opposite to `zoom-frm-in'. +Note: This zooming is unaffected by `zoom-frm-unzoom'." + (interactive "P") + (let ((increment (if flip frame-zoom-font-difference (- frame-zoom-font-difference)))) + (set-face-attribute 'default nil + :height (+ (* 10 increment) + (face-attribute 'default :height nil 'default)))))) + +;;;;;;;;;;;;;;;;;;;;;;;;; + +(provide 'zoom-frm) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; zoom-frm.el ends here diff --git a/layers/+spacemacs/spacemacs-ui-visual/packages.el b/layers/+spacemacs/spacemacs-ui-visual/packages.el new file mode 100644 index 0000000..4695bf1 --- /dev/null +++ b/layers/+spacemacs/spacemacs-ui-visual/packages.el @@ -0,0 +1,386 @@ +;;; packages.el --- Spacemacs UI Visual Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-ui-visual-packages + '( + (ansi-colors :location built-in) + fancy-battery + fill-column-indicator + golden-ratio + hl-todo + neotree + popup + popwin + (smooth-scrolling :location built-in) + spaceline + (zoom-frm :location local))) + +(defun spacemacs-ui-visual/init-ansi-colors () + (add-hook 'compilation-filter-hook + 'spacemacs-ui-visual//compilation-buffer-apply-ansi-colors)) + +(defun spacemacs-ui-visual/init-fancy-battery () + (use-package fancy-battery + :defer t + :init + (progn + (spacemacs|add-toggle mode-line-battery + :mode fancy-battery-mode + :documentation "Display battery info in mode-line." + :evil-leader "tmb") + (setq-default fancy-battery-show-percentage t)))) + +(defun spacemacs-ui-visual/init-fill-column-indicator () + (use-package fill-column-indicator + :defer t + :init + (progn + (setq fci-rule-width 1) + (setq fci-rule-color "#D0BF8F") + ;; manually register the minor mode since it does not define any + ;; lighter + (push '(fci-mode "") minor-mode-alist) + (spacemacs|add-toggle fill-column-indicator + :status fci-mode + :on (turn-on-fci-mode) + :off (turn-off-fci-mode) + :documentation "Display the fill column indicator." + :evil-leader "tf")) + :config + (spacemacs|diminish fci-mode " ⓕ" " f"))) + +(defun spacemacs-ui-visual/init-golden-ratio () + (use-package golden-ratio + :defer t + :init + (progn + (setq spacemacs-window-manipulation-transient-state-add-bindings + '(("g" spacemacs/toggle-golden-ratio))) + (spacemacs|add-toggle golden-ratio + :status golden-ratio-mode + :on (golden-ratio-mode) (golden-ratio) + :off (golden-ratio-mode -1) (balance-windows) + :documentation "Resize the focused window using the golden ratio." + :evil-leader "tg")) + :config + (progn + ;; golden-ratio-exclude-modes + (dolist (m '("bs-mode" + "calc-mode" + "ediff-mode" + "dired-mode" + "gud-mode" + "gdb-locals-mode" + "gdb-registers-mode" + "gdb-breakpoints-mode" + "gdb-threads-mode" + "gdb-frames-mode" + "gdb-inferior-io-mode" + "gdb-disassembly-mode" + "gdb-memory-mode" + "speedbar-mode" + )) + (add-to-list 'golden-ratio-exclude-modes m)) + + (add-to-list 'golden-ratio-exclude-buffer-regexp "^\\*[hH]elm.*") + + ;; golden-ratio-extra-commands + (dolist (f '(ace-window + ace-delete-window + ace-select-window + ace-swap-window + ace-maximize-window + avy-pop-mark + buf-move-left + buf-move-right + buf-move-up + buf-move-down + evil-avy-goto-word-or-subword-1 + evil-avy-goto-line + evil-window-delete + evil-window-split + evil-window-vsplit + evil-window-left + evil-window-right + evil-window-up + evil-window-down + evil-window-bottom-right + evil-window-top-left + evil-window-mru + evil-window-next + evil-window-prev + evil-window-new + evil-window-vnew + evil-window-rotate-upwards + evil-window-rotate-downwards + evil-window-move-very-top + evil-window-move-far-left + evil-window-move-far-right + evil-window-move-very-bottom + quit-window + select-window-0 + select-window-1 + select-window-2 + select-window-3 + select-window-4 + select-window-5 + select-window-6 + select-window-7 + select-window-8 + select-window-9 + windmove-left + windmove-right + windmove-up + windmove-down)) + (add-to-list 'golden-ratio-extra-commands f)) + + ;; golden-ratio-exclude-buffer-names + (dolist (n '(" *NeoTree*" + "*LV*" + " *which-key*")) + (add-to-list 'golden-ratio-exclude-buffer-names n)) + + (add-to-list 'golden-ratio-inhibit-functions + 'spacemacs/no-golden-ratio-guide-key) + + (spacemacs|diminish golden-ratio-mode " ⓖ" " g")))) + +(defun spacemacs-ui-visual/init-hl-todo () + (use-package hl-todo + :defer t + :init (spacemacs/add-to-hooks 'hl-todo-mode '(text-mode-hook + prog-mode-hook)))) + +(defun spacemacs-ui-visual/init-neotree () + (use-package neotree + :defer t + :commands neo-global--window-exists-p + :init + (progn + (setq neo-window-width 32 + neo-create-file-auto-open t + neo-banner-message "Press ? for neotree help" + neo-show-updir-line nil + neo-mode-line-type 'neotree + neo-smart-open t + neo-dont-be-alone t + neo-persist-show nil + neo-show-hidden-files t + neo-auto-indent-point t + neo-modern-sidebar t + neo-vc-integration nil) + + (spacemacs|define-transient-state neotree + :title "NeoTree Key Hints" + :doc " +Navigation^^^^ Actions^^ Visual actions/config^^^ +───────^^^^─────────────── ───────^^──────── ───────^^^──────────────── +[_L_] next sibling^^ [_c_] create [_TAB_] shrink/enlarge +[_H_] previous sibling^^ [_d_] delete [_|_] vertical split +[_J_] goto child^^ [_r_] rename [_-_] horizonatal split +[_K_] goto parent^^ [_R_] change root [_gr_] refresh^ +[_l_] open/expand^^ ^^ [_s_] hidden:^^^ %s(if neo-buffer--show-hidden-file-p \"on\" \"off\") +[_h_] up/collapse^^ ^^ ^^^ +[_j_] line down^^ ^^ ^^^ +[_k_] line up^^ ^^ ^^ +[_RET_] open ^^^^ [_?_] close hints +" + :bindings + ("RET" neotree-enter) + ("TAB" neotree-stretch-toggle) + ("|" neotree-enter-vertical-split) + ("-" neotree-enter-horizontal-split) + ("?" nil :exit t) + ("c" neotree-create-node) + ("d" neotree-delete-node) + ("gr" neotree-refresh) + ("h" spacemacs/neotree-collapse-or-up) + ("H" neotree-select-previous-sibling-node) + ("j" neotree-next-line) + ("J" neotree-select-down-node) + ("k" neotree-previous-line) + ("K" neotree-select-up-node) + ("l" spacemacs/neotree-expand-or-open) + ("L" neotree-select-next-sibling-node) + ("r" neotree-rename-node) + ("R" neotree-change-root) + ("s" neotree-hidden-file-toggle)) + + (defun spacemacs//neotree-key-bindings () + "Set the key bindings for a neotree buffer." + (evilified-state-evilify-map neotree-mode-map + :mode neotree-mode + :bindings + (kbd "TAB") 'neotree-stretch-toggle + (kbd "RET") 'neotree-enter + (kbd "|") 'neotree-enter-vertical-split + (kbd "-") 'neotree-enter-horizontal-split + (kbd "c") 'neotree-create-node + (kbd "d") 'neotree-delete-node + (kbd "gr") 'neotree-refresh + (kbd "h") 'spacemacs/neotree-collapse-or-up + (kbd "H") 'neotree-select-previous-sibling-node + (kbd "j") 'neotree-next-line + (kbd "J") 'neotree-select-down-node + (kbd "k") 'neotree-previous-line + (kbd "K") 'neotree-select-up-node + (kbd "l") 'spacemacs/neotree-expand-or-open + (kbd "L") 'neotree-select-next-sibling-node + (kbd "q") 'neotree-hide + (kbd "r") 'neotree-rename-node + (kbd "R") 'neotree-change-root + (kbd "?") 'spacemacs/neotree-transient-state/body + (kbd "s") 'neotree-hidden-file-toggle)) + + (spacemacs/set-leader-keys + "ft" 'neotree-toggle + "pt" 'neotree-find-project-root)) + :config + (spacemacs//neotree-key-bindings))) + +(defun spacemacs-ui-visual/init-popup ()) + +(defun spacemacs-ui-visual/init-popwin () + (use-package popwin + :config + (progn + (popwin-mode 1) + (spacemacs/set-leader-keys "wpm" 'popwin:messages) + (spacemacs/set-leader-keys "wpp" 'popwin:close-popup-window) + + ;; don't use default value but manage it ourselves + (setq popwin:special-display-config nil) + + ;; buffers that we manage + (push '("*Help*" :dedicated t :position bottom :stick t :noselect t :height 0.4) popwin:special-display-config) + (push '("*compilation*" :dedicated t :position bottom :stick t :noselect t :height 0.4) popwin:special-display-config) + (push '("*Shell Command Output*" :dedicated t :position bottom :stick t :noselect nil ) popwin:special-display-config) + (push '("*Async Shell Command*" :dedicated t :position bottom :stick t :noselect nil ) popwin:special-display-config) + (push '(" *undo-tree*" :dedicated t :position bottom :stick t :noselect nil :height 0.4) popwin:special-display-config) + (push '("*ert*" :dedicated t :position bottom :stick t :noselect nil ) popwin:special-display-config) + (push '("*grep*" :dedicated t :position bottom :stick t :noselect nil ) popwin:special-display-config) + (push '("*nosetests*" :dedicated t :position bottom :stick t :noselect nil ) popwin:special-display-config) + (push '("^\*WoMan.+\*$" :regexp t :position bottom ) popwin:special-display-config)))) + +(defun spacemacs-ui-visual/init-smooth-scrolling () + (setq scroll-preserve-screen-position t + scroll-margin 0 + scroll-conservatively (if dotspacemacs-smooth-scrolling 101 0)) + (spacemacs|add-toggle smooth-scrolling + :status (= 101 scroll-conservatively) + :on (spacemacs/enable-smooth-scrolling) + :off (spacemacs/disable-smooth-scrolling) + :documentation "Smooth scrolling." + :evil-leader "tv")) + +(defun spacemacs-ui-visual/init-spaceline () + (use-package spaceline-config + :init + (progn + (add-hook 'spacemacs-post-user-config-hook 'spaceline-compile) + (add-hook 'spacemacs-post-theme-change-hook + 'spacemacs/customize-powerline-faces) + (add-hook 'spacemacs-post-theme-change-hook 'powerline-reset) + (setq-default powerline-default-separator 'utf-8) + (spacemacs|do-after-display-system-init + (when (and (eq 'utf-8 powerline-default-separator)) + (setq-default powerline-default-separator 'wave)) + ;; seems to be needed to avoid weird graphical artefacts with the + ;; first graphical client + (require 'spaceline) + (spaceline-compile))) + :config + (progn + (spacemacs/customize-powerline-faces) + (setq spaceline-org-clock-p nil + spaceline-highlight-face-func 'spacemacs//evil-state-face) + ;; Segment toggles + (dolist (spec '((minor-modes "tmm") + (major-mode "tmM") + (version-control "tmv") + (new-version "tmV") + (point-position "tmp") + (org-clock "tmc"))) + (let* ((segment (car spec)) + (status-var (intern (format "spaceline-%S-p" segment)))) + (eval `(spacemacs|add-toggle ,(intern (format "mode-line-%S" segment)) + :status ,status-var + :on (setq ,status-var t) + :off (setq ,status-var nil) + :documentation ,(format "Show %s in the mode-line." + (replace-regexp-in-string + "-" " " (format "%S" segment))) + :evil-leader ,(cadr spec))))) + ;; unicode + (let ((unicodep (dotspacemacs|symbol-value + dotspacemacs-mode-line-unicode-symbols))) + (setq spaceline-window-numbers-unicode unicodep + spaceline-workspace-numbers-unicode unicodep)) + (add-hook 'spaceline-pre-hook 'spacemacs//prepare-diminish) + ;; New spacemacs version segment + (defpowerline spacemacs-powerline-new-version + (propertize + spacemacs-version-check-lighter + 'mouse-face 'mode-line-highlight + 'help-echo (format "New version %s | Click with mouse-1 to update" + spacemacs-new-version) + 'local-map (let ((map (make-sparse-keymap))) + (define-key map + [mode-line down-mouse-1] + (lambda (event) + (interactive "@e") + (if (yes-or-no-p + (format + (concat "Do you want to update to the newest " + "version %s ?") spacemacs-new-version)) + (progn + (spacemacs/switch-to-version + spacemacs-new-version)) + (message "Update aborted.")))) + map))) + (spaceline-define-segment new-version + (when spacemacs-new-version + (spacemacs-powerline-new-version + (spacemacs/get-new-version-lighter-face + spacemacs-version spacemacs-new-version)))) + (apply #'spaceline-spacemacs-theme + spacemacs-spaceline-additional-segments) + ;; Additional spacelines + (when (package-installed-p 'helm) + (spaceline-helm-mode t)) + (when (configuration-layer/package-usedp 'info+) + (spaceline-info-mode t)) + ;; Enable spaceline for buffers created before the configuration of + ;; spaceline + (spacemacs//set-powerline-for-startup-buffers)))) + +(defun spacemacs-ui-visual/init-zoom-frm () + (use-package zoom-frm + :commands (zoom-frm-unzoom + zoom-frm-out + zoom-frm-in) + :init + (progn + (spacemacs|define-transient-state zoom-frm + :title "Zoom Frame Transient State" + :doc " +[_+_/_=_] zoom frame in [_-_] zoom frame out [_0_] reset zoom [_q_] quit" + :bindings + ("+" spacemacs/zoom-frm-in) + ("=" spacemacs/zoom-frm-in) + ("-" spacemacs/zoom-frm-out) + ("0" spacemacs/zoom-frm-unzoom) + ("q" nil :exit t)) + (spacemacs/set-leader-keys "zf" 'spacemacs/zoom-frm-transient-state/body) + + ;; Font size, either with ctrl + mouse wheel + (global-set-key (kbd "") 'spacemacs/zoom-frm-in) + (global-set-key (kbd "") 'spacemacs/zoom-frm-out)))) diff --git a/layers/+spacemacs/spacemacs-ui/local/centered-cursor/centered-cursor-mode.el b/layers/+spacemacs/spacemacs-ui/local/centered-cursor/centered-cursor-mode.el new file mode 100644 index 0000000..1b69985 --- /dev/null +++ b/layers/+spacemacs/spacemacs-ui/local/centered-cursor/centered-cursor-mode.el @@ -0,0 +1,421 @@ +;;; centered-cursor-mode.el --- cursor stays vertically centered + +;; Copyright (C) 2007 André Riemann + +;; Author: André Riemann +;; Maintainer: André Riemann +;; Created: 2007-09-14 +;; Keywords: convenience + +;; URL: http://www.emacswiki.org/cgi-bin/wiki/centered-cursor-mode.el +;; Compatibility: only tested with GNU Emacs 23.0 +;; Version: 0.5.2 +;; Last-Updated: 2009-08-31 + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; This file is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the Free +;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +;; MA 02110-1301, USA. + +;;; Commentary: + +;; Makes the cursor stay vertically in a defined position (usually +;; centered). The vertical position can be altered, see key definition +;; below. + +;; To load put that in .emacs: +;; (require 'centered-cursor-mode) +;; To activate do: +;; M-x centered-cursor-mode +;; for buffer local or +;; M-x global-centered-cursor-mode +;; for global minor mode. +;; Also possible: put that in .emacs +;; (and +;; (require 'centered-cursor-mode) +;; (global-centered-cursor-mode +1)) +;; to always have centered-cursor-mode on in all buffers. + +;;; TODO: +;; - the code is a mess +;; - ccm-vpos-inverted doesn't work with ccm-vpos == 0, because first +;; position from top is 0 and from bottom -1 +;; - interactive first start isn't animated when calling global-... +;; because it starts the modes for each buffer and interactive-p fails +;; for that +;; - more bugs? + +;;; Change Log: +;; 2009-08-31 andre-r +;; * replaced window-body-height with window-text-height +;; (partially visible lines are not counted in window-text-height) +;; * bug fixed in ccm-vpos-recenter +;; (some parentheses where wrong after the last update) +;; 2009-02-23 andre-r +;; * some simplifications +;; 2009-02-22 andre-r +;; * some tips from Drew Adams: +;; - new local variable coding:utf-8 +;; - made recenter-sequence a defvar +;; - added groups scrolling and convenience +;; - replaced mouse-4 and mouse-5 with +;; mouse-wheel-up-event and mouse-wheel-down-event +;; - added scroll-bar-toolkit-scroll to ccm-ignored-commands +;; - made ccm-ignored-commands customisable +;; * removed a bug where it didn't work with more than one window +;; displaying the same buffer +;; * added function for page up and down scrolling +;; (standard ones didn't work well with this mode) +;; * made the animation delay customisable +;; * made the initial vertical position customisable +;; * made the behaviour at the end of the file customisable +;; 2008-02-02 andre-r +;; * fixed bug that led to wrong-type-argument +;; when opening a new buffer +;; * some other minor stuff +;; 2007-09-24 andre-r +;; * added global minor mode +;; 2007-09-21 andre-r +;; * not recentering at end of buffer +;; * defvar animate-first-start-p +;; 2007-09-14 andre-r +;; * inital release + +;; This file is *NOT* part of GNU Emacs. + +;;; Code: + +(defgroup centered-cursor nil + "Makes the cursor stay vertically in a defined position (usually centered). +Instead the cursor the text moves around the cursor." + :group 'scrolling + :group 'convenience + :link '(emacs-library-link :tag "Source Lisp File" "centered-cursor-mode.el") + :link '(url-link "http://www.emacswiki.org/cgi-bin/wiki/centered-cursor-mode.el")) + +(defcustom ccm-step-size 2 + "Step size when animated recentering." + :group 'centered-cursor + :tag "Animation step size" + :type 'integer) + +(defcustom ccm-step-delay 0.02 + "Delay between animation steps. +If you want a different animation speed." + :group 'centered-cursor + :tag "Animation step delay" + :type 'number) + +(defcustom ccm-ignored-commands '(mouse-drag-region + mouse-set-point + widget-button-click + scroll-bar-toolkit-scroll) + "After these commands recentering is ignored. +This is to prevent unintentional jumping (especially when mouse +clicking). Following commands (except the ignored ones) will +cause an animated recentering to give a feedback and not just +jumping to the center." + :group 'centered-cursor + :tag "Ignored commands" + :type '(repeat (symbol :tag "Command"))) + +(defcustom ccm-vpos-init '(round (window-text-height) 2) + "This is the screen line position where the cursor initially stays." + :group 'centered-cursor + :tag "Vertical cursor position" + :type '(choice (const :tag "Center" (round (window-text-height) 2)) + (const :tag "Golden ratio" (round (* 21 (window-text-height)) 34)) + (integer :tag "Lines from top" :value 10))) +(make-variable-buffer-local 'ccm-vpos-init) + +(defcustom ccm-vpos-inverted 1 + "Inverted vertical cursor position. +Defines if the initial vertical position `ccm-vpos-init' is +measured from the bottom instead from the top." + :group 'centered-cursor + :tag "Inverted cursor position" + :type '(choice (const :tag "Inverted" -1) + (const :tag "Not inverted" 1))) +(make-variable-buffer-local 'ccm-vpos-inverted) + +(defcustom ccm-recenter-at-end-of-file nil + "Recenter at the end of the file. +If non-nil the end of the file is recentered. If nil the end of +the file stays at the end of the window." + :group 'centered-cursor + :tag "Recenter at EOF" + :type '(choice (const :tag "Don't recenter at the end of the file" nil) + (const :tag "Recenter at the end of the file" t))) +(make-variable-buffer-local 'ccm-recenter-end-of-file) + +(defvar ccm-vpos nil + "This is the screen line position where the cursor stays.") +(make-variable-buffer-local 'ccm-vpos) + +(defvar animate-first-start-p nil + "Whether or not to animate at first start. It is set to nil, if +centered-cursor-mode is called non-interactively.") +(make-variable-buffer-local 'animate-first-start-p) + +(defvar recenter-sequence nil + "Before animated recentering a list is generated first with positions +to successively recenter to") +(make-variable-buffer-local 'recenter-sequence) + +(defvar ccm-map + (let ((ccm-map (make-sparse-keymap))) + (define-key ccm-map [(control meta -)] 'ccm-vpos-up) + (define-key ccm-map [(control meta +)] 'ccm-vpos-down) + (define-key ccm-map [(control meta =)] 'ccm-vpos-down) + (define-key ccm-map [(control meta ?0)] 'ccm-vpos-recenter) + (when (bound-and-true-p mouse-wheel-mode) + (mapc (lambda (key) + (define-key ccm-map key 'ccm-mwheel-scroll)) + (list (vector mouse-wheel-up-event) + (vector mouse-wheel-down-event) + (vector (list 'control mouse-wheel-up-event)) + (vector (list 'control mouse-wheel-down-event)) + (vector (list 'shift mouse-wheel-up-event)) + (vector (list 'shift mouse-wheel-down-event))))) + (define-key ccm-map [(meta v)] 'ccm-scroll-down) + (define-key ccm-map [(control v)] 'ccm-scroll-up) + (define-key ccm-map [prior] 'ccm-scroll-down) + (define-key ccm-map [next] 'ccm-scroll-up) + ccm-map) + "Keymap used in centered-cursor-mode.") + + +(defun ccm-mwheel-scroll (event) + "Very similar to `mwheel-scroll', but does not use `scroll-down' +and `scroll-up' but `previous-line' and `next-line', that is, the +cursor is moved and thus the text in the window is scrolled +due to `recenter'. + +The customizable variable `mouse-wheel-scroll-amount' is used to +determine how much to scroll, where nil instead of a number means +the same as in mwheel-scroll, scroll by a near full screen. + +This command exists, because mwheel-scroll caused strange +behaviour with automatic recentering." +;; (interactive (list last-input-event)) + (interactive "e") + (let* ((mods (delq 'click (delq 'double (delq 'triple (event-modifiers event))))) + (amt (assoc mods mouse-wheel-scroll-amount))) + ;;(message "%S" mods) + (if amt + (setq amt (or (cdr amt) + (- (window-text-height) + next-screen-context-lines))) + (let ((list-elt mouse-wheel-scroll-amount)) + (while (consp (setq amt (pop list-elt)))))) + (if mouse-wheel-follow-mouse + (select-window (posn-window (event-start event)))) + (let ((button (mwheel-event-button event))) + (cond + ((eq button mouse-wheel-down-event) + (forward-line (- amt))) + ;;(princ amt)) + ((eq button mouse-wheel-up-event) + (forward-line amt)) + ;;(princ amt)) + (t (error "Bad binding in ccm-mwheel-scroll")))))) + +(defun ccm-scroll-down (&optional arg) + "Replaces `scroll-down' because with scroll-down +`centered-cursor-mode' sometimes doesn't reach the top of the +buffer. This version actually moves the cursor with +`previous-line'. Since with centered-cursor-mode the cursor is in +a fixed position the movement appears as page up." + (interactive "P") + (let ((amt (or arg (- (window-text-height) + next-screen-context-lines)))) + (forward-line (- amt)))) + +(defun ccm-scroll-up (&optional arg) + "Replaces `scroll-up' to be consistent with `ccm-scroll-down'. +This version actually moves the cursor with `previous-line'. +Since with centered-cursor-mode the cursor is in a fixed position +the movement appears as page up." + (interactive "P") + (let ((amt (or arg (- (window-text-height) + next-screen-context-lines)))) + (forward-line amt))) + + +(defun ccm-vpos-down (arg) + "Adjust the value of the screen line (where the cursor stays) by arg. +Negative values for arg are possible. Just the variable ccm-vpos +is set." + (interactive "p") + (or arg (setq arg 1)) + (let ((new-pos (if (< ccm-vpos 0) + (- ccm-vpos arg) + (+ ccm-vpos arg))) + ;; see pos-visible-in-window-p + (vpos-max (if (< ccm-vpos 0) + -1 + (- (window-text-height) 1))) + (vpos-min (if (< ccm-vpos 0) + (- (window-text-height)) + 0))) + (setq ccm-vpos + (cond + ((< new-pos vpos-min) + vpos-min) + ((> new-pos vpos-max) + vpos-max) + (t + new-pos))))) + +(defun ccm-vpos-up (arg) + "See `ccm-vpos-down'." + (interactive "p") + (or arg (setq arg 1)) + (ccm-vpos-down (- arg))) + +(defun ccm-vpos-recenter () + "Set the value of the screen line (where the cursor stays) in +the center. Just the variable ccm-vpos is set." + (interactive) + (if (equal (current-buffer) + (window-buffer (selected-window))) + (setq ccm-vpos (* (eval ccm-vpos-init) + ccm-vpos-inverted)))) + +(defun ccm-position-cursor () + "Do the actual recentering at the position `ccm-vpos'." + (unless (member this-command ccm-ignored-commands) + (unless ccm-vpos + (ccm-vpos-recenter)) + (unless (minibufferp (current-buffer)) + (if (equal (current-buffer) + (window-buffer (selected-window))) + (let* ((current-line + (if (< ccm-vpos 0) + ;; one-based, from bottom, negative + (- (count-lines (point) + ;; window-end is sometimes < 0 + ;; when opening a help buffer + (if (> (window-end) 0) + (window-end) + 1))) + ;; zero-based, from top, positive + (+ (count-lines (window-start) (point)) + ;; count-lines returns different value in column 0 + (if (= (current-column) 0) 0 -1)))) + (diff (- ccm-vpos current-line)) + (step-size ccm-step-size) + (step-delay ccm-step-delay) + (vpos-inverted ccm-vpos-inverted) + (recenter-at-end-of-file ccm-recenter-at-end-of-file)) + + (let* ((bottom-vpos (if (< ccm-vpos 0) + (- ccm-vpos) + (- (window-text-height) ccm-vpos))) + (correction (save-excursion + (if (or (= (point) (point-max)) + (progn + (goto-char (point-max)) + (zerop (current-column)))) + 1 0))) + ;; lines from point to end of buffer + (bottom-lines (+ (count-lines (point) (point-max)) + correction))) + + ;; only animate if point was moved rather far away + ;; before by a mouseclick (see ccm-ignored-commands) + ;; or if minor mode is just entered interactively + (if (not (and (> (abs diff) 4) + (or (member last-command ccm-ignored-commands) + animate-first-start-p))) + + (recenter (if (and (< bottom-lines bottom-vpos) + (not recenter-at-end-of-file)) + ;; if near the bottom, recenter in the + ;; negative screen line that equals the + ;; bottom buffer line, i.e. if we are in + ;; the second last line (-2) of the + ;; buffer, the cursor will be recentered + ;; in -2 + (- bottom-lines) + ccm-vpos)) + + (setq animate-first-start-p nil) + ;; first build a list with positions to successively recenter to + (setq recenter-sequence + ;; reverse: because we build the list not FROM -> TO but + ;; TO -> FROM because if step size in number-sequence is + ;; bigger than one, TO might not included, that means the + ;; ccm-vpos would not be reached + ;; cdr: don't recenter the current-line + (if (and (< bottom-lines bottom-vpos) + (not recenter-at-end-of-file)) + ;; this one is for animation near the bottom + (cdr (reverse (number-sequence + (- bottom-lines) + (if (< ccm-vpos 0) + current-line + (- (- (window-text-height) current-line))) + (* (/ diff (abs diff)) (- step-size))))) + (cdr (reverse (number-sequence + ccm-vpos + current-line + (* (/ diff (abs diff)) (- step-size))))))) + ;; (message "%d %d %d (%d): %S" current-line ccm-vpos bottom-lines diff recenter-sequence) + (while recenter-sequence + ;; actual animation + (recenter (pop recenter-sequence)) + (if (car recenter-sequence) (sit-for step-delay t)))))))))) + +(defun ccm-first-start (animate) + "Called from centered-cursor-mode. Animate at first start, if +centered-cursor-mode is called interactively." + (let ((animate-first-start-p animate)) + (ccm-vpos-recenter) + (ccm-position-cursor))) + +;;(defalias 'ccm 'centered-cursor-mode) +(define-minor-mode centered-cursor-mode + "Makes the cursor stay vertically in a defined +position (usually centered)." + :init-value nil +;; :lighter nil + :lighter " ¢" + :keymap ccm-map + (cond + (centered-cursor-mode + (ccm-first-start (interactive-p)) + (add-hook 'post-command-hook 'ccm-position-cursor t t) + (add-hook 'window-configuration-change-hook 'ccm-vpos-recenter t t)) + (t + (remove-hook 'post-command-hook 'ccm-position-cursor t) + (remove-hook 'window-configuration-change-hook 'ccm-vpos-recenter t)))) + + +(define-global-minor-mode global-centered-cursor-mode centered-cursor-mode + centered-cursor-mode) + +(provide 'centered-cursor-mode) + +;;; Help: +;; (info "(elisp)Defining Minor Modes") +;; (info "(elisp)Screen Lines") +;; (info "(elisp)Hooks") +;; (info "(elisp)Customization") +;; (find-function 'mwheel-scroll) + +;; Local Variables: +;; coding: utf-8 +;; End: + +;;; centered-cursor-mode.el ends here diff --git a/layers/+spacemacs/spacemacs-ui/packages.el b/layers/+spacemacs/spacemacs-ui/packages.el new file mode 100644 index 0000000..f08937e --- /dev/null +++ b/layers/+spacemacs/spacemacs-ui/packages.el @@ -0,0 +1,308 @@ +;;; packages.el --- Spacemacs UI Layer packages File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq spacemacs-ui-packages + '(ace-link + (centered-cursor :location local) + desktop + (doc-view :location built-in) + flx-ido + info+ + open-junk-file + paradox + restart-emacs + window-numbering)) + +;; Initialization of packages + +(defun spacemacs-ui/init-ace-link () + (use-package ace-link + :commands spacemacs/ace-buffer-links + :init + (progn + (define-key spacemacs-buffer-mode-map "o" 'spacemacs/ace-buffer-links) + (with-eval-after-load 'info + (define-key Info-mode-map "o" 'ace-link-info)) + (with-eval-after-load 'help-mode + (define-key help-mode-map "o" 'ace-link-help)) + (with-eval-after-load 'eww + (define-key eww-link-keymap "o" 'ace-link-eww) + (define-key eww-mode-map "o" 'ace-link-eww))) + :config + (progn + (defvar spacemacs--link-pattern "~?/.+\\|\s\\[") + (defun spacemacs//collect-spacemacs-buffer-links () + (let ((end (window-end)) + points) + (save-excursion + (goto-char (window-start)) + (while (re-search-forward spacemacs--link-pattern end t) + (push (+ (match-beginning 0) 1) points)) + (nreverse points)))) + (defun spacemacs/ace-buffer-links () + "Ace jump to links in `spacemacs' buffer." + (interactive) + (let ((res (avy-with spacemacs/ace-buffer-links + (avy--process + (spacemacs//collect-spacemacs-buffer-links) + #'avy--overlay-pre)))) + (when res + (goto-char (1+ res)) + (widget-button-press (point)))))))) + +(defun spacemacs-ui/init-centered-cursor () + (use-package centered-cursor-mode + :commands (centered-cursor-mode + global-centered-cursor-mode) + :init + (progn + (spacemacs|add-toggle centered-point + :mode centered-cursor-mode + :documentation + "Keep point at the center of the window." + :evil-leader "t-") + (spacemacs|add-toggle centered-point-globally + :mode global-centered-cursor-mode + :documentation + "Keep point at the center of the window globally." + :evil-leader "t C--")) + :config + (progn + (setq ccm-recenter-at-end-of-file t + ccm-ignored-commands '(mouse-drag-region + mouse-set-point + widget-button-click + scroll-bar-toolkit-scroll + evil-mouse-drag-region)) + (spacemacs|diminish centered-cursor-mode " ⊝" " -")))) + +(defun spacemacs-ui/init-desktop () + (use-package desktop + :defer t + :init + (setq desktop-dirname spacemacs-cache-directory) + :config + (push spacemacs-cache-directory desktop-path))) + +(defun spacemacs-ui/init-doc-view () + (use-package doc-view + :defer t + :init + (evilified-state-evilify doc-view-mode doc-view-mode-map + "/" 'spacemacs/doc-view-search-new-query + "?" 'spacemacs/doc-view-search-new-query-backward + "gg" 'doc-view-first-page + "G" 'spacemacs/doc-view-goto-page + "gt" 'doc-view-goto-page + "h" 'doc-view-previous-page + "j" 'doc-view-next-line-or-next-page + "k" 'doc-view-previous-line-or-previous-page + "K" 'doc-view-kill-proc-and-buffer + "l" 'doc-view-next-page + "n" 'doc-view-search + "N" 'doc-view-search-backward + (kbd "C-d") 'doc-view-scroll-up-or-next-page + (kbd "C-k") 'doc-view-kill-proc + (kbd "C-u") 'doc-view-scroll-down-or-previous-page) + :config + (progn + (defun spacemacs/doc-view-search-new-query () + "Initiate a new query." + (interactive) + (doc-view-search 'newquery)) + + (defun spacemacs/doc-view-search-new-query-backward () + "Initiate a new query." + (interactive) + (doc-view-search 'newquery t)) + + (defun spacemacs/doc-view-goto-page (&optional count) + (interactive (list + (when current-prefix-arg + (prefix-numeric-value current-prefix-arg)))) + (if (null count) + (doc-view-last-page) + (doc-view-goto-page count))) + + ;; fixed a weird issue where toggling display does not + ;; swtich to text mode + (defadvice doc-view-toggle-display + (around spacemacs/doc-view-toggle-display activate) + (if (eq major-mode 'doc-view-mode) + (progn + ad-do-it + (text-mode) + (doc-view-minor-mode)) + ad-do-it))))) + +(defun spacemacs-ui/init-flx-ido () + (use-package flx-ido + :init (flx-ido-mode 1))) + +(defun spacemacs-ui/init-info+ () + (use-package info+ + :defer t + :init + (progn + (with-eval-after-load 'info + (require 'info+)) + (setq Info-fontify-angle-bracketed-flag nil)))) + +(defun spacemacs-ui/init-open-junk-file () + (use-package open-junk-file + :defer t + :commands (open-junk-file) + :init + (setq open-junk-file-format (concat spacemacs-cache-directory "junk/%Y/%m/%d-%H%M%S.")) + (defun spacemacs/open-junk-file (&optional arg) + "Open junk file using helm or ivy. + +Interface choice depends on whether the `ivy' layer is used or +not. + +When ARG is non-nil search in junk files." + (interactive "P") + (let* ((fname (format-time-string open-junk-file-format (current-time))) + (rel-fname (file-name-nondirectory fname)) + (junk-dir (file-name-directory fname)) + (default-directory junk-dir)) + (cond ((and arg (configuration-layer/layer-usedp 'ivy)) + (spacemacs/counsel-search dotspacemacs-search-tools nil junk-dir)) + ((configuration-layer/layer-usedp 'ivy) + (require 'counsel) + (counsel-find-file rel-fname)) + (arg + (require 'helm) + (let (helm-ff-newfile-prompt-p) + (spacemacs/helm-files-smart-do-search))) + (t + (require 'helm) + (let (helm-ff-newfile-prompt-p) + (helm-find-files-1 fname)))))) + (spacemacs/set-leader-keys "fJ" 'spacemacs/open-junk-file))) + +(defun spacemacs-ui/init-paradox () + (use-package paradox + :commands paradox-list-packages + :init + (progn + (setq paradox-execute-asynchronously nil) + (defun spacemacs/paradox-list-packages () + "Load depdendencies for auth and open the package list." + (interactive) + (require 'epa-file) + (require 'auth-source) + (when (and (not (boundp 'paradox-github-token)) + (file-exists-p "~/.authinfo.gpg")) + (let ((authinfo-result (car (auth-source-search + :max 1 + :host "github.com" + :port "paradox" + :user "paradox" + :require '(:secret))))) + (let ((paradox-token (plist-get authinfo-result :secret))) + (setq paradox-github-token (if (functionp paradox-token) + (funcall paradox-token) + paradox-token))))) + (paradox-list-packages nil)) + + (evilified-state-evilify paradox-menu-mode paradox-menu-mode-map + "H" 'paradox-menu-quick-help + "J" 'paradox-next-describe + "K" 'paradox-previous-describe + "L" 'paradox-menu-view-commit-list + "o" 'paradox-menu-visit-homepage) + (spacemacs/set-leader-keys + "ak" 'spacemacs/paradox-list-packages)))) + +(defun spacemacs-ui/init-restart-emacs() + (use-package restart-emacs + :defer t + :init + (defun spacemacs/restart-emacs (&optional args) + "Restart emacs." + (interactive) + (setq spacemacs-really-kill-emacs t) + (restart-emacs args)) + (defun spacemacs/restart-emacs-resume-layouts (&optional args) + "Restart emacs and resume layouts." + (interactive) + (spacemacs/restart-emacs (cons "--resume-layouts" args))) + (defun spacemacs/restart-emacs-debug-init (&optional args) + "Restart emacs and enable debug-init." + (interactive) + (spacemacs/restart-emacs (cons "--debug-init" args))) + (defun spacemacs/restart-stock-emacs-with-packages (packages &optional args) + "Restart emacs without the spacemacs configuration, enable +debug-init and load the given list of packages." + (interactive + (progn + (unless package--initialized + (package-initialize t)) + (let ((packages (append (mapcar 'car package-alist) + (mapcar 'car package-archive-contents) + (mapcar 'car package--builtins)))) + (setq packages (mapcar 'symbol-name packages)) + (let ((val (completing-read-multiple "Packages to load (comma separated): " + packages nil t))) + `(,val))))) + (let ((load-packages-string (mapconcat (lambda (pkg) (format "(use-package %s)" pkg)) + packages " "))) + (spacemacs/restart-emacs-debug-init + (append (list "-q" "--execute" + (concat "(progn (package-initialize) " + "(require 'use-package)" + load-packages-string ")")) + args)))) + (spacemacs/set-leader-keys + "qd" 'spacemacs/restart-emacs-debug-init + "qD" 'spacemacs/restart-stock-emacs-with-packages + "qr" 'spacemacs/restart-emacs-resume-layouts + "qR" 'spacemacs/restart-emacs))) + +(defun spacemacs-ui/init-window-numbering () + (use-package window-numbering + :config + (progn + (when (configuration-layer/package-usedp 'spaceline) + (defun window-numbering-install-mode-line (&optional position) + "Do nothing, the display is handled by the powerline.")) + (setq window-numbering-auto-assign-0-to-minibuffer nil) + (spacemacs/set-leader-keys + "0" 'select-window-0 + "1" 'select-window-1 + "2" 'select-window-2 + "3" 'select-window-3 + "4" 'select-window-4 + "5" 'select-window-5 + "6" 'select-window-6 + "7" 'select-window-7 + "8" 'select-window-8 + "9" 'select-window-9) + (window-numbering-mode 1)) + + ;; make sure neotree is always 0 + (defun spacemacs//window-numbering-assign () + "Custom number assignment for neotree." + (when (and (boundp 'neo-buffer-name) + (string= (buffer-name) neo-buffer-name) + ;; in case there are two neotree windows. Example: when + ;; invoking a transient state from neotree window, the new + ;; window will show neotree briefly before displaying the TS, + ;; causing an error message. the error is eliminated by + ;; assigning 0 only to the top-left window + (eq (selected-window) (window-at 0 0))) + 0)) + + ;; using lambda to work-around a bug in window-numbering, see + ;; https://github.com/nschum/window-numbering.el/issues/10 + (setq window-numbering-assign-func + (lambda () (spacemacs//window-numbering-assign))))) diff --git a/layers/+tags/cscope/README.org b/layers/+tags/cscope/README.org new file mode 100644 index 0000000..5c10a5b --- /dev/null +++ b/layers/+tags/cscope/README.org @@ -0,0 +1,71 @@ +#+TITLE: Cscope layer + +[[file:img/cscope.jpg]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#cscope][Cscope]] + - [[#pycscope][PyCscope]] + - [[#usage][Usage]] + - [[#key-bindings][Key bindings]] + +* Description +This layer provides bindings for using [[http://cscope.sourceforge.net][Cscope]] and [[https://github.com/portante/pycscope][PyCscope]] in Spacemacs. + +=Cscope= provides indexing and searching capabilities for C and C++ code. +=PyCscope= extends these capabilities for Python code as well. See +[[https://github.com/OpenGrok/OpenGrok/wiki/Comparison-with-Similar-Tools][here]] for a comparison between =Cscope= and other similar tools (such as gtags). + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =cscope= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Cscope +Install =Cscope= through your package manager, or download it from the +[[http://cscope.sourceforge.net/#downloads][website]] and build it from source. + +From package manager (for example, Ubuntu): + +#+BEGIN_SRC sh +sudo apt-get install cscope +#+END_SRC + +From source: + +#+BEGIN_SRC sh +tar xvf cscope-15.8b +cd cscope-15.8b +./configure +make +sudo make install +#+END_SRC + +** PyCscope +Install PyCscope through pip: + +#+BEGIN_SRC sh +pip install pycscope +#+END_SRC + +* Usage +Before using any helm-cscope commands, remember to create a Cscope index file. +Do it by running the command =cscope-index-files= for C and C++ projects, or the +command =cscope/run-pycscope= for Python projects, bound to ~SPC m g i~. + +* Key bindings + +| Key Binding | Description | +|-------------+-----------------------------------------------| +| ~SPC m g c~ | find which functions are called by a function | +| ~SPC m g C~ | find where a function is called | +| ~SPC m g d~ | find global definition of a symbol | +| ~SPC m g e~ | search regular expression | +| ~SPC m g f~ | find a file | +| ~SPC m g F~ | find which files include a file | +| ~SPC m g i~ | create Cscope index | +| ~SPC m g r~ | find references of a symbol | +| ~SPC m g x~ | search text | diff --git a/layers/+tags/cscope/img/cscope.jpg b/layers/+tags/cscope/img/cscope.jpg new file mode 100644 index 0000000000000000000000000000000000000000..90dcb2e678e6852c57da02262d7afb79960970f8 GIT binary patch literal 22601 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq cscope-packages + '( + (helm-cscope :toggle (configuration-layer/package-usedp 'helm)) + xcscope + )) + +(defun cscope/init-xcscope () + (use-package xcscope + :commands (cscope-index-files cscope/run-pycscope) + :init + (progn + ;; for python projects, we don't want xcscope to rebuild the databse, + ;; because it uses cscope instead of pycscope + (setq cscope-option-do-not-update-database t + cscope-display-cscope-buffer nil) + + (defun cscope//safe-project-root () + "Return project's root, or nil if not in a project." + (and (fboundp 'projectile-project-root) + (projectile-project-p) + (projectile-project-root))) + + (defun cscope/run-pycscope (directory) + (interactive (list (file-name-as-directory + (read-directory-name "Run pycscope in directory: " + (cscope//safe-project-root))))) + (let ((default-directory directory)) + (shell-command + (format "pycscope -R -f '%s'" + (expand-file-name "cscope.out" directory)))))))) + +(defun cscope/init-helm-cscope () + (use-package helm-cscope + :defer t + :init + (defun spacemacs/setup-helm-cscope (mode) + "Setup `helm-cscope' for MODE" + (spacemacs/set-leader-keys-for-major-mode mode + "gc" 'helm-cscope-find-called-function + "gC" 'helm-cscope-find-calling-this-funtcion + "gd" 'helm-cscope-find-global-definition + "ge" 'helm-cscope-find-egrep-pattern + "gf" 'helm-cscope-find-this-file + "gF" 'helm-cscope-find-files-including-file + "gr" 'helm-cscope-find-this-symbol + "gx" 'helm-cscope-find-this-text-string)) + :config + (defadvice helm-cscope-find-this-symbol (before cscope/goto activate) + (evil--jumps-push)))) diff --git a/layers/+tags/gtags/README.org b/layers/+tags/gtags/README.org new file mode 100644 index 0000000..bc0d378 --- /dev/null +++ b/layers/+tags/gtags/README.org @@ -0,0 +1,252 @@ +#+TITLE: Helm Gtags layer + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#install][Install]] + - [[#gnu-global-gtags][GNU Global (gtags)]] + - [[#install-on-osx-using-homebrew][Install on OSX using Homebrew]] + - [[#install-on-nix-from-source][Install on *nix from source]] + - [[#install-recommended-dependencies][Install recommended dependencies]] + - [[#install-with-recommended-features][Install with recommended features]] + - [[#configure-your-environment-to-use-pygments-and-ctags][Configure your environment to use pygments and ctags]] + - [[#emacs-configuration][Emacs Configuration]] + - [[#disabling-by-default][Disabling by default]] + - [[#usage][Usage]] + - [[#language-support][Language Support]] + - [[#built-in-languages][Built-in languages]] + - [[#exuberant-ctags-languages][Exuberant ctags languages]] + - [[#universal-ctags-languages][Universal ctags languages]] + - [[#pygments-languages-plus-symbol-and-reference-tags][Pygments languages (plus symbol and reference tags)]] + - [[#eldoc-integration][Eldoc integration]] + - [[#key-bindings][Key bindings]] + +* Description +=helm-gtags= and =ggtags= are clients for GNU Global. GNU Global is a source +code tagging system that allows querying symbol locations in source code, such +as definitions or references. Adding the =gtags= layer enables both of these +modes. + +* Features + +- Select any tag in a project retrieved by gtags +- Resume previous helm-gtags session +- Jump to a location based on context +- Find definitions +- Find references +- Present tags in current function only +- Create a tag database +- Jump to definitions in file +- Show stack of visited locations +- Manually update tag database +- Jump to next location in context stack +- Jump to previous location in context stack +- Jump to a file in tag database +- Enables =eldoc= in modes that otherwise might not support it. +- Enables =company complete= in modes that otherwise might not support it. + +* Install + +** GNU Global (gtags) +To use gtags, you first have to install [[https://www.gnu.org/software/global/download.html][GNU Global]]. + +You can install =global= from the software repository of your OS; however, many +OS distributions are out of date, and you will probably be missing support for +=pygments= and =exuberant ctags=, and thus support for many languages. We +recommend installing from source. If not for example to install on Ubuntu: + +#+begin_src sh + sudo apt-get install global +#+end_src + +*** Install on OSX using Homebrew + +#+begin_src sh options + brew install global --with-pygments --with-ctags +#+end_src + +*** Install on *nix from source +**** Install recommended dependencies +To take full advantage of global you should install 2 extra packages in +addition to global: pygments and ctags (exuberant). You can do this using +your normal OS package manager, e.g., on Ubuntu + +#+BEGIN_SRC sh + sudo apt-get install exuberant-ctags python-pygments +#+END_SRC + +or e.g., Archlinux: + +#+BEGIN_SRC sh + sudo pacman -S ctags python-pygments +#+END_SRC + +**** Install with recommended features +Download the latest tar.gz archive, then run these commands: + +#+BEGIN_SRC sh + tar xvf global-6.5.3.tar.gz + cd global-6.5.3 + ./configure --with-exuberant-ctags=/usr/bin/ctags + make + sudo make install +#+END_SRC + +**** Configure your environment to use pygments and ctags +To be able to use =pygments= and =ctags=, you need to copy the sample +=gtags.conf= either to =/etc/gtags.conf= or =$HOME/.globalrc=. For example: + +#+begin_src sh + cp gtags.conf ~/.globalrc +#+end_src + +Additionally you should define GTAGSLABEL in your shell startup file e.g. +with sh/ksh: + +#+begin_src sh + echo export GTAGSLABEL=pygments >> .profile +#+end_src + +** Emacs Configuration +To use this configuration layer, add it to your =~/.spacemacs=. You +will need to add =gtags= to the existing =dotspacemacs-configuration-layers=. + +#+begin_src emacs-lisp + (setq dotspacemacs-configuration-layers + '( ;; ... + gtags + ;; ... + )) +#+end_src + +*** Disabling by default +If =ggtags-mode= is too intrusive you can disable it by default, by setting the +layer variable =gtags-enable-by-default= to =nil=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers + '((gtags :variables gtags-enable-by-default t))) +#+END_SRC + +This variable can also be set as a file-local or directory-local variable for +additional control per project. + +* Usage + +Before using the =gtags=, remember to create a GTAGS database by the following +methods: + +- From within Emacs, runs the command =helm-gtags-create-tags=, which is bound + to ~SPC m g c~. If the language is not directly supported by GNU Global, you + can choose =ctags= or =pygments= as a backend to generate tag database. + +- From inside terminal, runs gtags at your project root in terminal: + +#+BEGIN_SRC sh + cd /path/to/project/root + gtags +#+END_SRC + +If the language is not directly supported by =gtags=, and you have not set the +GTAGSLABEL environment variable, use this command instead: + +#+BEGIN_SRC sh + gtags --gtagslabel=pygments +#+END_SRC + +*** Language Support +**** Built-in languages +If you do not have =ctags= or =pygments= enabled gtags will only produce +tags for the following languages: + +- asm +- c/c++ +- java +- php +- yacc + +**** Exuberant ctags languages +If you have enabled =exuberant ctags= and use that as the backend (i.e., +GTAGSLABEL=ctags or --gtagslabel=ctags) the following additional languages +will have tags created for them: + +- c# +- erlang +- javascript +- common-lisp +- emacs-lisp +- lua +- ocaml +- python +- ruby +- scheme +- vimscript +- windows-scripts (.bat .cmd files) + +**** Universal ctags languages +If instead you installed you the newer/beta =universal ctags= and use that +as the backend (i.e., GTAGSLABEL=ctags or --gtagslabel=ctags) the following +additional languages will have tags created for them: + +- clojure +- d +- go +- rust + +**** Pygments languages (plus symbol and reference tags) +In order to look up symbol references for any language not in the built in +parser you must use the pygments backend. When this backend is used global +actually uses both ctags and pygments to find the definitions and uses of +functions and variables as well as "other symbols". + +If you enabled pygments (the best choice) and use that as the backend (i.e., +GTAGSLABEL=pygments or --gtagslabel=pygments) the following additional +languages will have tags created for them: + +- elixir +- fsharp +- haskell +- octave +- racket +- scala +- shell-scripts +- tex + +** Eldoc integration +This layer also integrates =ggtags= for its Eldoc feature. That means, when +writing code, you can look at the minibuffer (at the bottom) and see variable +and function definition of the symbol the cursor is on. However, this feature is +only activated for programming modes that are not one of these languages: + +- C +- C++ +- Common Lisp +- Emacs Lisp +- Python +- Ruby + +Since these modes have better Eldoc integration already. + +In addition, if output from =compile= (bound to ~SPC c C~), =shell-command= +(bound to ~SPC !~ and ~M-!~) or =async-shell-command= (bound to ~M-&~) commands +contains symbol in your project, you move cursor on such symbol and use any of +the gtags commands. + +* Key bindings + +| Key Binding | Description | +|-------------+-----------------------------------------------------------| +| ~SPC m g c~ | create a tag database | +| ~SPC m g f~ | jump to a file in tag database | +| ~SPC m g g~ | jump to a location based on context | +| ~SPC m g G~ | jump to a location based on context (open another window) | +| ~SPC m g d~ | find definitions | +| ~SPC m g i~ | present tags in current function only | +| ~SPC m g l~ | jump to definitions in file | +| ~SPC m g n~ | jump to next location in context stack | +| ~SPC m g p~ | jump to previous location in context stack | +| ~SPC m g r~ | find references | +| ~SPC m g R~ | resume previous helm-gtags session | +| ~SPC m g s~ | select any tag in a project retrieved by gtags | +| ~SPC m g S~ | show stack of visited locations | +| ~SPC m g u~ | manually update tag database | diff --git a/layers/+tags/gtags/config.el b/layers/+tags/gtags/config.el new file mode 100644 index 0000000..1829136 --- /dev/null +++ b/layers/+tags/gtags/config.el @@ -0,0 +1,20 @@ +;;; config.el --- gtags configuration File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defvar gtags-enable-by-default t + "Whether or not to enable ggtags-mode.") + +(spacemacs|define-jump-handlers tcl-mode) +(spacemacs|define-jump-handlers vhdl-mode) +(spacemacs|define-jump-handlers awk-mode) +(spacemacs|define-jump-handlers dired-mode) +(spacemacs|define-jump-handlers compilation-mode) +(spacemacs|define-jump-handlers shell-mode) diff --git a/layers/+tags/gtags/funcs.el b/layers/+tags/gtags/funcs.el new file mode 100644 index 0000000..de37953 --- /dev/null +++ b/layers/+tags/gtags/funcs.el @@ -0,0 +1,65 @@ +;;; funcs.el --- gtags functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun helm-gtags-dwim-other-window () + "helm-gtags-dwim in the other window" + (interactive) + (let ((helm-gtags--use-otherwin t) + (split-height-threshold nil) + (split-width-threshold 140)) + (helm-gtags-dwim))) + +(defun spacemacs/helm-gtags-maybe-dwim () + "Runs `helm-gtags-dwim' if `gtags-enable-by-default' is on. +Otherwise does nothing." + (interactive) + (when gtags-enable-by-default + (call-interactively 'helm-gtags-dwim))) + +(defun spacemacs/helm-gtags-define-keys-for-mode (mode) + "Define key bindings for the specific MODE." + (when (fboundp mode) + ;; The functionality of `helm-gtags-mode' is pretty much entirely superseded + ;; by `ggtags-mode', so we don't add this hook + ;; (let ((hook (intern (format "%S-hook" mode)))) + ;; (add-hook hook 'helm-gtags-mode)) + + ;; `helm-gtags-dwim' is added to the end of the mode-specific jump handlers + ;; Some modes have more sophisticated jump handlers that go to the beginning + ;; It might be possible to add `helm-gtags-dwim' instead to the default + ;; handlers, if it does a reasonable job in ALL modes. + (let ((jumpl (intern (format "spacemacs-jump-handlers-%S" mode)))) + (add-to-list jumpl 'spacemacs/helm-gtags-maybe-dwim 'append)) + + (spacemacs/set-leader-keys-for-major-mode mode + "gc" 'helm-gtags-create-tags + "gd" 'helm-gtags-find-tag + "gD" 'helm-gtags-find-tag-other-window + "gf" 'helm-gtags-select-path + "gG" 'helm-gtags-dwim-other-window + "gi" 'helm-gtags-tags-in-this-function + "gl" 'helm-gtags-parse-file + "gn" 'helm-gtags-next-history + "gp" 'helm-gtags-previous-history + "gr" 'helm-gtags-find-rtag + "gR" 'helm-gtags-resume + "gs" 'helm-gtags-select + "gS" 'helm-gtags-show-stack + "gu" 'helm-gtags-update-tags))) + +(defun spacemacs/ggtags-mode-enable () + "Enable ggtags and eldoc mode. + +For eldoc, ggtags advises the eldoc function at the lowest priority +so that if the major mode has better support it will use it first." + (when gtags-enable-by-default + (ggtags-mode 1) + (eldoc-mode 1))) diff --git a/layers/+tags/gtags/packages.el b/layers/+tags/gtags/packages.el new file mode 100644 index 0000000..2a35884 --- /dev/null +++ b/layers/+tags/gtags/packages.el @@ -0,0 +1,56 @@ +;;; packages.el --- gtags Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; and: Christian E. Hopps +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defconst gtags-packages + '( + ggtags + (helm-gtags :toggle (configuration-layer/package-usedp 'helm)) + )) + +(defun gtags/init-ggtags () + (use-package ggtags + :defer t + :init + (progn + ;; modes that do not have a layer, add here. + (add-hook 'awk-mode-local-vars-hook #'spacemacs/ggtags-mode-enable) + (add-hook 'shell-mode-local-vars-hook #'spacemacs/ggtags-mode-enable) + (add-hook 'tcl-mode-local-vars-hook #'spacemacs/ggtags-mode-enable) + (add-hook 'vhdl-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + :config + (when (configuration-layer/package-usedp 'helm-gtags) + ;; If anyone uses helm-gtags, they would want to use these key bindings. + ;; These are bound in `ggtags-mode-map', since the functionality of + ;; `helm-gtags-mode' is basically entirely contained within + ;; `ggtags-mode-map' --- this way we don't have to enable both. + ;; Note: all of these functions are autoloadable. + (define-key ggtags-mode-map (kbd "M-.") 'helm-gtags-dwim) + (define-key ggtags-mode-map (kbd "C-x 4 .") 'helm-gtags-find-tag-other-window) + (define-key ggtags-mode-map (kbd "M-,") 'helm-gtags-pop-stack) + (define-key ggtags-mode-map (kbd "M-*") 'helm-gtags-pop-stack)))) + +(defun gtags/init-helm-gtags () + (use-package helm-gtags + :defer t + :init + (progn + (setq helm-gtags-ignore-case t + helm-gtags-auto-update t + helm-gtags-use-input-at-cursor t + helm-gtags-pulse-at-cursor t) + ;; modes that do not have a layer, define here + (spacemacs/helm-gtags-define-keys-for-mode 'tcl-mode) + (spacemacs/helm-gtags-define-keys-for-mode 'vhdl-mode) + (spacemacs/helm-gtags-define-keys-for-mode 'awk-mode) + (spacemacs/helm-gtags-define-keys-for-mode 'dired-mode) + (spacemacs/helm-gtags-define-keys-for-mode 'compilation-mode) + (spacemacs/helm-gtags-define-keys-for-mode 'shell-mode)))) diff --git a/layers/+themes/colors/README.org b/layers/+themes/colors/README.org new file mode 100644 index 0000000..420168f --- /dev/null +++ b/layers/+themes/colors/README.org @@ -0,0 +1,110 @@ +#+TITLE: Colors layer + +[[file:img/rainbow_dash.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#configuration][Configuration]] + - [[#colorize-identifiers][Colorize identifiers]] + - [[#enable-nyan-cat][Enable Nyan cat]] + - [[#key-bindings][Key bindings]] + - [[#colorize-identifiers-1][Colorize Identifiers]] + - [[#rainbow-mode][Rainbow Mode]] + - [[#nyan-mode][Nyan Mode]] + +* Description +This layer colors your life with: +- [[https://github.com/Fanael/rainbow-identifiers][rainbow identifiers]] mode will colorize all identifiers (christmas tree mode :-)) + with an almost unique color. +- [[https://github.com/ankurdave/color-identifiers-mode][color-identifiers]] mode will colorize only identifiers recognized as variables. +- [[https://julien.danjou.info/projects/emacs-packages][rainbow mode]] displays strings representing colors with the color they + represent as background. +- [[https://github.com/syl20bnr/nyan-mode][nyan mode]] display a Nyan cat progress bar in the mode-line. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =colors= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Configuration +** Colorize identifiers +To colorize some identifiers by default in programming language buffers, set +the layer variables =colors-colorize-identifiers= to either =variables= or +=all=. =variables= will colorize only words recognized as variables, =all= +will colorize all the words. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (colors :variables colors-colorize-identifiers 'all))) +#+END_SRC + +When using the value =all= the Saturation and lightness of can be set per theme +by adding an entry in the variable =colors-theme-identifiers-sat&light=. This is +an alist where the key is a theme symbol and the value is a pair =(saturation +lightness)=. + +For now saturation and lightness are not supported with the =variables= value. + +Example: + +#+BEGIN_SRC emacs-lisp + (push '(mytheme . (50 50)) colors-theme-identifiers-sat&light) +#+END_SRC + +** Enable Nyan cat +To enable the package =nyan-mode= set the variable +=colors-enable-nyan-cat-progress-bar= to =t=: + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (colors :variables colors-enable-nyan-cat-progress-bar t))) +#+END_SRC + +It may be handy to enable it only in a GUI, you can do it by using +a quasi-quoted list: + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers + =((colors :variables + colors-enable-nyan-cat-progress-bar ,(display-graphic-p)))) +#+END_SRC + +* Key bindings +The prefix associated with colors is ~C~. + +** Colorize Identifiers + +| Key Binding | Description | +|-------------+-----------------------------------------------------------------| +| ~SPC C a~ | colorize all idendifiers in current buffer | +| ~SPC C C-a~ | globally colorize all idendifiers and all subsequent buffers | +| ~SPC C v~ | colorize all variables only in current buffer | +| ~SPC C C-v~ | globally colorize all variables only and all subsequent buffers | + +The =saturation= and =lightness= of identifier colors can be adjusted live +when colorizing all the identifiers with the transient-state: + +| Key Binding | Description | +|-----------------+------------------------------------------| +| ~SPC C i s~ | initiate change =saturation= mini-mode | +| ~SPC C i l~ | initiate change =lightness= mini-mode | +| ~+~ | increase the =saturation= or =lightness= | +| ~-~ | decrease the =saturation= or =lightness= | +| ~=~ | reset the =saturation= or =lightness= | +| ~Any other key~ | leave the change mini-mode | + +** Rainbow Mode + +[[file:img/rainbow-mode.png]] + +=rainbow-mode= mode can be toggled on and off with: + + ~SPC t C c~ + +** Nyan Mode +=nyan-mode= mode can be toggled on and off with: + + ~SPC t m n~ + +Note that the toggle is local to the current buffer. diff --git a/layers/+themes/colors/config.el b/layers/+themes/colors/config.el new file mode 100644 index 0000000..c165af0 --- /dev/null +++ b/layers/+themes/colors/config.el @@ -0,0 +1,32 @@ +;;; config.el --- Colors Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar colors-colorize-identifiers nil + "If `variables' colorize variables, if `all' colorize all identifiers in +programming language buffers.") + +(defvar colors-enable-nyan-cat-progress-bar nil + "If non nil all nyan cat packages are enabled (for now only `nyan-mode').") + +(defvar colors-theme-identifiers-sat&light + '((jazz . (50 55)) + (gotham . (45 60)) + (leuven . (100 40)) + (material . (95 105)) + (monokai . (55 60)) + (solarized-dark . (65 55)) + (solarized-light . (60 55)) + (spacemacs-light . (65 45)) + (spacemacs-dark . (125 100)) + (zenburn . (40 65))) + "alist of theme symbols and pair of saturation and lightness values.") diff --git a/layers/+themes/colors/funcs.el b/layers/+themes/colors/funcs.el new file mode 100644 index 0000000..99f52d4 --- /dev/null +++ b/layers/+themes/colors/funcs.el @@ -0,0 +1,119 @@ +;;; funcs.el --- Colors Layer functions File +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; rainbow-identifiers + +(defun colors//rainbow-identifiers-mode-maybe () + "Enable rainbow identifiers if the major mode is a prog mode." + (when (derived-mode-p 'prog-mode) + (rainbow-identifiers-mode))) + +(defun colors//tweak-theme-colors (theme) + "Tweak color themes by adjusting rainbow-identifiers." + (interactive) + ;; tweak the saturation and lightness of identifier colors + (when (not (assq theme (get 'rainbow-identifiers-cie-l*a*b*-saturation + 'theme-value))) + (let ((sat&light (assq theme colors-theme-identifiers-sat&light))) + (if sat&light + (setq rainbow-identifiers-cie-l*a*b*-saturation (cadr sat&light) + rainbow-identifiers-cie-l*a*b*-lightness (caddr sat&light)) + ;; default + (setq rainbow-identifiers-cie-l*a*b*-saturation 80 + rainbow-identifiers-cie-l*a*b*-lightness 45))))) + +(defun colors//change-color-mini-mode-doc (component) + "Display a short documentation in the mini buffer." + (let ((var (intern (format + "rainbow-identifiers-cie-l*a*b*-%s" component)))) + (spacemacs/echo "Change color %s mini-mode (value: %s) + + to increase %s + - to decrease %s + = to reset +Press any other key to exit." component (eval var) component component))) + +(defun colors/change-color-component-overlay-map (component) + "Set a temporary overlay map to easily change a color COMPONENT from + rainbow-identifier mode. The color COMPONENT can be 'saturation' or + 'lightness'." + (set-temporary-overlay-map + (let ((map (make-sparse-keymap)) + (up-func (intern (format "colors/change-color-%s-up" component))) + (down-func (intern (format "colors/change-color-%s-down" component))) + (reset-func (intern (format "colors/change-color-%s-reset" component)))) + (define-key map (kbd "+") up-func) + (define-key map (kbd "-") down-func) + (define-key map (kbd "=") reset-func) + map) t) + (colors//change-color-mini-mode-doc component)) + +(defun colors/init-rainbow-mode () + (use-package rainbow-mode + :commands rainbow-mode + :init (spacemacs/set-leader-keys "tCc" 'rainbow-mode) + :config (spacemacs|hide-lighter rainbow-mode))) + +(defun colors/start-change-color-saturation () + "Initiate the overlay map to change the saturation." + (interactive) + (colors/change-color-component-overlay-map "saturation")) + +(defun colors/change-color-saturation-up () + "Increase the saturation by 5 units." + (interactive) + (colors//change-color-component-func "saturation" 5)) + +(defun colors/change-color-saturation-down () + "Decrease the saturation by 5 units." + (interactive) + (colors//change-color-component-func "saturation" -5)) + +(defun colors/change-color-saturation-reset () + "Reset the saturation to 100." + (interactive) + (colors//change-color-component-func "saturation" 100 t)) + +(defun colors/start-change-color-lightness () + "Initiate the overlay map to change the lightness." + (interactive) + (colors/change-color-component-overlay-map "lightness")) + +(defun colors/change-color-lightness-up () + "Increase the lightness by 5 units." + (interactive) + (colors//change-color-component-func "lightness" 5)) + +(defun colors/change-color-lightness-down () + "Decrease the lightness by 5 units." + (interactive) + (colors//change-color-component-func "lightness" -5)) + +(defun colors/change-color-lightness-reset () + "Reset the lightness to 40." + (interactive) + (colors//change-color-component-func "lightness" 40 t)) + +(defun colors//change-color-component-func + (component inc &optional reset) + "Change the color component by adding INC value to it. If RESET is not + nil the color component is set to INC." + (let* ((var (intern (format + "rainbow-identifiers-cie-l*a*b*-%s" component))) + (new-value (+ (eval var) inc))) + (if reset + (set var inc) + (progn + (if (< new-value 0) + (setq new-value 0)) + (set var new-value))) + (font-lock-fontify-buffer) + (colors/change-color-component-overlay-map component))) diff --git a/layers/+themes/colors/img/rainbow-mode.png b/layers/+themes/colors/img/rainbow-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c6a640474a50f64d2f8abf778dec9ad264946c GIT binary patch literal 36149 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

SHrW!|8mq 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 I3H)R+e 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 literal 0 HcmV?d00001 diff --git a/layers/+themes/colors/img/rainbow_dash.png b/layers/+themes/colors/img/rainbow_dash.png new file mode 100644 index 0000000000000000000000000000000000000000..508bfe132db8db8d453336b22bb753696c13bcfd GIT binary patch literal 77617 zcmY(o1C%GRw=MkZY1`(sZQHhO+qP}n*0il@+qP}<&Hvu}-S54uRmsVzoxO8v)v8Kz zBIISoV4<*}00022gt)LG002bu&mM&U`&W14wp#sbfSeS?1Oc_vIA{MlkoMvlP5=Nj z@_#NMKxQ_^KY)gXvbwXnj5Mc_oeiylv7Mm_t-Fo=KQsWq?auknv@vluAaJ*_wsqok z=OO$r1m{2dKW;igg8zazTk#O8%g7T5**TgJu+TEo(i8GR5fBh?I~tpEDhiAK&+vae z9zt_xXM0XMIyW~rS~n(IJ4Z7*1`ZAmI(kMrMn;-{2pT63TW14z8e1o#|0enWc!W)y zj2tcOoh|Ha3I4-tU})#!%tJ`{AEEy(|2_YcnEX@z4?iyh_kSV(AK(AzaMS%q{QsKFe@FUX-hZL;LUGgm?_=YIk{%$_ z008&_62bz??m(A5;QF{j&CeNI8%thpH(SG?Z1ojj3)+W*66OKK$q2tzSBVj~N{bWv zpo77Ikop*D9&HyofzYk(lT0*JZ#rxyesb2fs;D&D__w|M>W6#Qx6YWj96kdR1Te#_hL&$pk@;OBLizj1tv zOq2~akn5HVUwhep8+qj$A$*On7L@J(F!0E0S1Vdn$PP)>$v%MET9w-nSK6|XlSzz8 z!ONSFJ7d@AwhvmyMf{<$6KX471GU53NAee#ol)T{Y;z5OZr@S%G5Q%=Y=^xNg>QK0IWD=U&YrL znxU*|jk6CP;3b*AlN{^KnmL$1eDmnH#sPfb*S?y&57&uTPmz5&G*MT#JZJ}nyg659 z+dZh0oFxEDbM@GFK!?@3^^rMeCR|`;CbdCl@l@lNk4ZwSsZ@wtUx$N`+3IYaDfU)f zP#J=j!=S-;{Aw}YV&^(L{*f0Y-*@wby}r>uV#k5?1_S}0k;tXb^34}c03Zxpju%AA zeil;rb-2)5AS@z`^ec1^y>g<;Ds)5Hr2s;OjnH%uMN-~9`Z+RlS=IBd*1q-XATER& zoywsC{q~w40KFu2M~==WjC#&Tz~=eLkhBHqiywo< zlwHd)^SJ$7Mn<$fFnPAOUosIrkIJ?XeW4=V0t~$0&!&}Mi_6%^LNXcn9Ve%sY@ooe zES-4OtlkcHeiEIi+)B5|7G)m4V)Fa~F_#BJx!4P565u5p7Z?PGbr@rwi9J(^i7JR1 zx`$T$7L2D_gmRgex>}y=Vv~YkDw1q&rLNXfIr~^wF0lg_Z!Lt&Ieq{ylL}J*!+_Qm zHqZGgu!j85`P?Uh-hQ_2RixZST+%wy+-PlObbjF1HJa`?C{BU_HKxsD%f`aoI*&?q zy|Qdu$;FYHDBHlPj_5SPgs-Wq4 zfg{WWA*gTI03*X*8rMfJBLtLE!R>CIC>UXdMI=Uf{5CVcA=p6kAS-|bCqmIw6H3SD z+M>2u?UREtk!kqt-HaO2N0RL-jnZ%#L}~H}P8#C8&_9vKbf-rI>bKpr+B|1lp5r3O zQOrzFges_uA3sZ-Em=o;I;X+?%?G@nwB&A9IHyhM9 zu4;6^xP~-2?Oid|)j^^(=XMeK2(X^09oy#EB2-}==vNgGQ=$u2CN{(H5u}lROa7*` zfW{cHB9g${JL(>AZhHVoBtQtlQIbu%0DAyNL>elP!rFpqDwA}px|+p8D@EewhE>24 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 JPDHLkV1j30vVs5r literal 0 HcmV?d00001 diff --git a/layers/+themes/colors/img/theme-tweaks-python.png b/layers/+themes/colors/img/theme-tweaks-python.png new file mode 100644 index 0000000000000000000000000000000000000000..f94c9f01b92c4c2c5cbca1c8f32cebbae0de3866 GIT binary patch literal 271079 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

Z?6p+X*R^zJ#BqGpyOP3AOc>#YZo6G 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq java-packages + '( + company + (company-emacs-eclim :toggle (configuration-layer/package-usedp 'company)) + eclim + ggtags + helm-gtags + (java-mode :location built-in) + )) + +(defun java/post-init-company () + (spacemacs|add-company-hook java-mode)) + +(defun java/init-company-emacs-eclim () + (use-package company-emacs-eclim + :defer t + :init (push 'company-emacs-eclim company-backends-java-mode))) + +(defun java/init-eclim () + (use-package eclim + :defer t + :diminish eclim-mode + :init + (progn + (add-hook 'java-mode-hook 'eclim-mode) + (add-to-list 'spacemacs-jump-handlers-java-mode 'eclim-java-find-declaration)) + :config + (progn + (require 'eclimd) + (setq help-at-pt-display-when-idle t + help-at-pt-timer-delay 0.1) + (help-at-pt-set-timer) + + (add-to-list 'minor-mode-alist + '(eclim-mode (:eval (eclim-modeline-string)))) + + (evil-define-key 'insert java-mode-map + (kbd ".") 'spacemacs/java-completing-dot + (kbd ":") 'spacemacs/java-completing-double-colon + (kbd "M-.") 'eclim-java-find-declaration + (kbd "M-,") 'pop-tag-mark + (kbd "M-") 'eclim-java-find-declaration + (kbd "") 'pop-tag-mark) + + (evil-define-key 'normal java-mode-map + (kbd "M-.") 'eclim-java-find-declaration + (kbd "M-,") 'pop-tag-mark + (kbd "M-") 'eclim-java-find-declaration + (kbd "") 'pop-tag-mark) + + (evil-define-key 'normal eclim-problems-mode-map + (kbd "a") 'eclim-problems-show-all + (kbd "e") 'eclim-problems-show-errors + (kbd "g") 'eclim-problems-buffer-refresh + (kbd "q") 'eclim-quit-window + (kbd "w") 'eclim-problems-show-warnings + (kbd "f") 'eclim-problems-toggle-filefilter + (kbd "c") 'eclim-problems-correct + (kbd "RET") 'eclim-problems-open-current) + + (evil-define-key 'normal eclim-project-mode-map + (kbd "N") 'eclim-project-create + (kbd "m") 'eclim-project-mark-current + (kbd "M") 'eclim-project-mark-all + (kbd "u") 'eclim-project-unmark-current + (kbd "U") 'eclim-project-unmark-all + (kbd "o") 'eclim-project-open + (kbd "c") 'eclim-project-close + (kbd "i") 'eclim-project-info-mode + (kbd "I") 'eclim-project-import + (kbd "RET") 'eclim-project-goto + (kbd "D") 'eclim-project-delete + (kbd "p") 'eclim-project-update + (kbd "g") 'eclim-project-mode-refresh + (kbd "R") 'eclim-project-rename + (kbd "q") 'eclim-quit-window) + + (spacemacs/set-leader-keys-for-major-mode 'java-mode + "ea" 'eclim-problems-show-all + "eb" 'eclim-problems + "ec" 'eclim-problems-correct + "ee" 'eclim-problems-show-errors + "ef" 'eclim-problems-toggle-filefilter + "en" 'eclim-problems-next-same-window + "eo" 'eclim-problems-open + "ep" 'eclim-problems-previous-same-window + "ew" 'eclim-problems-show-warnings + + "ds" 'start-eclimd + "dk" 'stop-eclimd + + "ff" 'eclim-java-find-generic + + "gt" 'eclim-java-find-type + + "rc" 'eclim-java-constructor + "rg" 'eclim-java-generate-getter-and-setter + "rf" 'eclim-java-format + "ri" 'eclim-java-import-organize + "rj" 'eclim-java-implement + "rr" 'eclim-java-refactor-rename-symbol-at-point + + "hc" 'eclim-java-call-hierarchy + "hh" 'eclim-java-show-documentation-for-current-element + "hi" 'eclim-java-hierarchy + "hu" 'eclim-java-find-references + + "mi" 'spacemacs/java-maven-clean-install + "mI" 'spacemacs/java-maven-install + "mp" 'eclim-maven-lifecycle-phases + "mr" 'eclim-maven-run + "mR" 'eclim-maven-lifecycle-phase-run + "mt" 'spacemacs/java-maven-test + + "aa" 'eclim-ant-run + "ac" 'eclim-ant-clear-cache + "ar" 'eclim-ant-run + "av" 'eclim-ant-validate + + "pb" 'eclim-project-build + "pc" 'eclim-project-create + "pd" 'eclim-project-delete + "pg" 'eclim-project-goto + "pi" 'eclim-project-import + "pj" 'eclim-project-info-mode + "pk" 'eclim-project-close + "po" 'eclim-project-open + "pp" 'eclim-project-mode + "pu" 'eclim-project-update + + "tt" 'eclim-run-junit)))) + +(defun java/post-init-ggtags () + (add-hook 'java-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun java/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'java-mode)) + +(defun java/init-java-mode () + (setq java/key-binding-prefixes '(("me" . "errors") + ("md" . "eclimd") + ("mf" . "find") + ("mg" . "goto") + ("mr" . "refactor") + ("mh" . "documentation") + ("mm" . "maven") + ("ma" . "ant") + ("mp" . "project") + ("mt" . "test"))) + (mapc (lambda(x) (spacemacs/declare-prefix-for-mode + 'java-mode (car x) (cdr x))) + java/key-binding-prefixes)) diff --git a/layers/+lang/javascript/README.org b/layers/+lang/javascript/README.org new file mode 100644 index 0000000..b6e3659 --- /dev/null +++ b/layers/+lang/javascript/README.org @@ -0,0 +1,212 @@ +#+TITLE: JavaScript layer + +[[file:img/javascript.png]] [[file:img/coffee.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features:]] + - [[#install][Install]] + - [[#configuration][Configuration]] + - [[#tern][Tern]] + - [[#indentation][Indentation]] + - [[#repl][REPL]] + - [[#key-bindings][Key Bindings]] + - [[#js2-mode][js2-mode]] + - [[#folding-js2-mode][Folding (js2-mode)]] + - [[#refactoring-js2-refactor][Refactoring (js2-refactor)]] + - [[#formatting-web-beautify][Formatting (web-beautify)]] + - [[#documentation-js-doc][Documentation (js-doc)]] + - [[#auto-complete-and-documentation-tern][Auto-complete and documentation (tern)]] + - [[#json][JSON]] + - [[#repl-skewer-mode][REPL (skewer-mode)]] + +* Description + +This layer adds support for the JavaScript language using [[https://github.com/mooz/js2-mode][js2-mode]]. + +** Features: +- Smart code folding +- Refactoring: done using [[https://github.com/magnars/js2-refactor.el][js2-refactor]]. +- Auto-completion and documentation: provided by [[http://ternjs.net/][tern]] +- CoffeeScript support +- Formatting with [[https://github.com/yasuyk/web-beautify][web-beautify]] +- Get the path to a JSON value with [[https://github.com/Sterlingg/json-snatcher][json-snatcher]] +- REPL available via [[https://github.com/skeeto/skewer-mode][skewer-mode]] and [[https://github.com/pandeiro/livid-mode][livid-mode]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =javascript= to the existing =dotspacemacs-configuration-layers= list in +this file. + +You will also need to install =tern= to use the auto-completion and +documentation features: +#+BEGIN_SRC sh + $ npm install -g tern +#+END_SRC + +To use the formatting features, install =js-beautify=: +#+BEGIN_SRC sh + $ npm install -g js-beautify +#+END_SRC + +To activate error checking using flycheck, install one of the [[http://www.flycheck.org/en/latest/languages.html#javascript][available linters]] +such as =ESLint= or =JSHint=: +#+BEGIN_SRC sh + $ npm install -g eslint + # or + $ npm install -g jshint +#+END_SRC + +* Configuration +** Tern +To make tern re-use the server across multiple different editing sessions (thus +creating multiple =.tern-port= files for each document you have open [[http://ternjs.net/doc/manual.html][see here +for more details]]): + +The variables provided below can be set when adding the =javascript= +configuration layer, as detailed in [[file:../../../doc/DOCUMENTATION.org::Setting%20configuration%20layers%20variables][this]] section of the documentation. + +#+BEGIN_SRC emacs-lisp + (javascript :variables javascript-disable-tern-port-files nil) +#+END_SRC + +Windows users may need to set the variable =tern-command= in order for emacs to +locate and launch tern server successfully. See [[https://github.com/syl20bnr/spacemacs/issues/5733][this open issue for more +details]]. The variable can be set when adding the =javascript= configuration +layer: + +#+BEGIN_SRC emacs-lisp + (javascript :variables tern-command '("node" "/path/to/tern/bin/tern")) +#+END_SRC + +** Indentation +To change how js2-mode indents code, set the variable =js2-basic-offset=, as +such: + +#+BEGIN_SRC emacs-lisp + (setq-default js2-basic-offset 2) +#+END_SRC + +Similarly, to change how js-mode indents JSON files, set the variable +=js-indent-level=, as such: + +#+BEGIN_SRC emacs-lisp + (setq-default js-indent-level 2) +#+END_SRC + +** REPL +To use the available JS repl, you need a running httpd server and a page loaded +with skewer. If a blank page serves your needs, just use the run-skewer command +in your javascript buffer. If you want to inject it in your own page, follow +[[https://github.com/skeeto/skewer-mode#skewering-with-cors][these instructions]] (install the Greasemonkey script and then click the triangle +in the top-right corner - if it turns green, you're good to go). + +* Key Bindings + +** js2-mode + +| Key Binding | Description | +|-------------+--------------------------------------| +| ~SPC m w~ | toggle js2-mode warnings and errors | +| ~%~ | jump between blockswith [[https://github.com/redguardtoo/evil-matchit][evil-matchit]] | + +** Folding (js2-mode) + +| Key Binding | Description | +|-------------+--------------------------| +| ~SPC m z c~ | hide element | +| ~SPC m z o~ | show element | +| ~SPC m z r~ | show all element | +| ~SPC m z e~ | toggle hide/show element | +| ~SPC m z F~ | toggle hide functions | +| ~SPC m z C~ | toggle hide comments | + +** Refactoring (js2-refactor) + +Bindings should match the plain emacs assignments. + +| Key Binding | Description | +|---------------+----------------------------------------------------------------------------------------------------------------| +| ~SPC m k~ | deletes to the end of the line, but does not cross semantic boundaries | +| ~SPC m r 3 i~ | converts ternary operator to if-statement | +| ~SPC m r a g~ | creates a =/* global */= annotation if it is missing, and adds var to point to it | +| ~SPC m r a o~ | replaces arguments to a function call with an object literal of named arguments | +| ~SPC m r b a~ | moves the last child out of current function, if-statement, for-loop or while-loop | +| ~SPC m r c a~ | converts a multiline array to one line | +| ~SPC m r c o~ | converts a multiline object literal to one line | +| ~SPC m r c u~ | converts a multiline function to one line (expecting semicolons as statement delimiters) | +| ~SPC m r e a~ | converts a one line array to multiline | +| ~SPC m r e f~ | extracts the marked expressions into a new named function | +| ~SPC m r e m~ | extracts the marked expressions out into a new method in an object literal | +| ~SPC m r e o~ | converts a one line object literal to multiline | +| ~SPC m r e u~ | converts a one line function to multiline (expecting semicolons as statement delimiters) | +| ~SPC m r e v~ | takes a marked expression and replaces it with a var | +| ~SPC m r i g~ | creates a shortcut for a marked global by injecting it in the wrapping immediately invoked function expression | +| ~SPC m r i p~ | changes the marked expression to a parameter in a local function | +| ~SPC m r i v~ | replaces all instances of a variable with its initial value | +| ~SPC m r l p~ | changes a parameter to a local var in a local function | +| ~SPC m r l t~ | adds a console.log statement for what is at point (or region) | +| ~SPC m r r v~ | renames the variable on point and all occurrences in its lexical scope | +| ~SPC m r s l~ | moves the next statement into current function, if-statement, for-loop, while-loop | +| ~SPC m r s s~ | splits a =String= | +| ~SPC m r s v~ | splits a =var= with multiple vars declared into several =var= statements | +| ~SPC m r t f~ | toggle between function declaration and function expression | +| ~SPC m r u w~ | replaces the parent statement with the selected region | +| ~SPC m r v t~ | changes local =var a= to be =this.a= instead | +| ~SPC m r w i~ | wraps the entire buffer in an immediately invoked function expression | +| ~SPC m r w l~ | wraps the region in a for-loop | +| ~SPC m x m j~ | move line down, while keeping commas correctly placed | +| ~SPC m x m k~ | move line up, while keeping commas correctly placed | + +** Formatting (web-beautify) + +| Key Binding | Description | +|-------------+--------------------------------------------------------------| +| ~SPC m =~ | beautify code in js2-mode, json-mode, web-mode, and css-mode | + +*** Documentation (js-doc) + +You can check more [[https://github.com/mooz/js-doc/][here]] + +| Key Binding | Description | +|---------------+---------------------------------------| +| ~SPC m r d b~ | insert JSDoc comment for current file | +| ~SPC m r d f~ | insert JSDoc comment for function | +| ~SPC m r d t~ | insert tag to comment | +| ~SPC m r d h~ | show list of available jsdoc tags | + +** Auto-complete and documentation (tern) + +| Key Binding | Description | +|---------------+------------------------------------------------------------------------------------------| +| ~SPC m C-g~ | brings you back to last place you were when you pressed M-.. | +| ~SPC m g g~ | jump to the definition of the thing under the cursor | +| ~SPC m g G~ | jump to definition for the given name | +| ~SPC m h d~ | find docs of the thing under the cursor. Press again to open the associated URL (if any) | +| ~SPC m h t~ | find the type of the thing under the cursor | +| ~SPC m r r V~ | rename variable under the cursor using tern | + +** JSON + +| Key Binding | Description | +|-------------+------------------------------------| +| ~SPC m h p~ | Get the path of the value at point | + +** REPL (skewer-mode) + +| Key Binding | Description | +|-------------+------------------------------------------------------------------| +| ~SPC m e e~ | evaluates the last expression | +| ~SPC m e E~ | evaluates and inserts the result of the last expression at point | + +| Key Binding | Description | +|-------------+------------------------------------------------------------------------------------| +| ~SPC m s a~ | Toggle live evaluation of whole buffer in REPL on buffer changes | +| ~SPC m s b~ | send current buffer contents to the skewer REPL | +| ~SPC m s B~ | send current buffer contents to the skewer REPL and switch to it in insert state | +| ~SPC m s f~ | send current function at point to the skewer REPL | +| ~SPC m s F~ | send current function at point to the skewer REPL and switch to it in insert state | +| ~SPC m s i~ | starts/switch to the skewer REPL | +| ~SPC m s r~ | send current region to the skewer REPL | +| ~SPC m s R~ | send current region to the skewer REPL and switch to it in insert state | +| ~SPC m s s~ | switch to REPL | diff --git a/layers/+lang/javascript/config.el b/layers/+lang/javascript/config.el new file mode 100644 index 0000000..184e760 --- /dev/null +++ b/layers/+lang/javascript/config.el @@ -0,0 +1,19 @@ +;;; config.el --- Javascript Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(spacemacs|defvar-company-backends js2-mode) + +(spacemacs|define-jump-handlers js2-mode) + +(defvar javascript-disable-tern-port-files t + "Stops tern from creating tern port files.") diff --git a/layers/+lang/javascript/funcs.el b/layers/+lang/javascript/funcs.el new file mode 100644 index 0000000..f1b2a60 --- /dev/null +++ b/layers/+lang/javascript/funcs.el @@ -0,0 +1,31 @@ +;;; funcs.el --- Javascript Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Muneeb Shaikh +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;; tern + +(defun spacemacs//set-tern-key-bindings (mode) + "Set the key bindings for tern and the given MODE." + (add-to-list (intern (format "spacemacs-jump-handlers-%S" mode)) + 'tern-find-definition) + (spacemacs/set-leader-keys-for-major-mode mode + "rrV" 'tern-rename-variable + "hd" 'tern-get-docs + "gG" 'tern-find-definition-by-name + (kbd "C-g") 'tern-pop-find-definition + "ht" 'tern-get-type)) + +(defun spacemacs//tern-detect () + "Detect tern binary and warn if not found." + (let ((found (executable-find "tern"))) + (unless found + (spacemacs-buffer/warning "tern binary not found!")) + found)) diff --git a/layers/+lang/javascript/img/coffee.png b/layers/+lang/javascript/img/coffee.png new file mode 100644 index 0000000000000000000000000000000000000000..e86758fde1bf62d20fd934a4753e1cbcf1c06f9f GIT binary patch literal 12713 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/javascript/img/javascript.png b/layers/+lang/javascript/img/javascript.png new file mode 100644 index 0000000000000000000000000000000000000000..26409d5dcbdb5a81809e5a4d8ef893cb3d0fda5a GIT binary patch literal 1899 zcmbVNX;c$e6b_|mQBf(1LZF5~iwa3*k`Tz4h>-+IB^n@Ta6z&R5Fwc`86Y5a0oR~# zw2F!dE(cIh#FbM70TC3iZip?4AeBuJDVsf|E}bZ7f0X{{oSAv=zVm(Gz3<-p&f6tk zw!~tR?IZ$$U?KG3`{QGp@%zdY|4(k&at|MDFo6^cKti!t84444N<<`P7 zaZxoehd?kTt0YoPD)NOCh?*)hVyJqx7H1O(98bMgrig$sk{k|GX}ILRt7T-8O35X! zbQ1w0trr}w@`*>`fcRw+MSO&Utt5LcBysc*E}(`n8A-2>)aW2Rm;6B&!so_i8kzI~ zf<;P)rXK{^l==$?0!Khoyc z*XYyVBpGT;xN+I%;q|3k;$$M!*F8E11Ddh7c`o}NRpQM}w zrfg4A#OSo4E$`Lt7;~o6o#QI=-O6==iT9>;K5Joh_u2Pmt?CP3*PZsAH1XU2^Ons{ zPFZnnnq^VlrMHV9VuZy+7trrsb46uFy|+WAVcW*WBTKC3>phyTY_8urSZGHVKcejB znMWFmcE0fk3iUIsCrE2^`fXh=x#jh4EGFa&s$T7_KOe64iyG8J*2UTC#$r$6WYNTi zFAN=W%b^gsu19%hVOW);zMyE}fLSoI7v#RoEjSxVOsv>pRvH_4sKlx!XDKm@_jP7L z`o@eC3+25{16F%yul%_hZM<*ke4t}TcUx^gGj&$!br)p_T4h)1UnpozI9?Wr&QaQnMX?XmGPY&P``EwKF?|Xn8#G(PVB&m?ZKP zlp3|DK-(cPCAM2G!OT}YtZvwaUHtLwio+M4oePo@4@Er{?2ME4UrWE4^5Uki>y;_* zIL=+r84F)k_`xs36x?E)m*k{~^M>Tx52~a)3>FKLXUVE~L1C3oOA|PJ$%%7qcyDXw>P}zlfsp+>cNS7%;E&>e){g-8*gh$ zXp-#q)U4d+-T9~aBaou=QUAJ3O1Q>I^V`t+Ryn=h +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq javascript-packages + '( + coffee-mode + company + (company-tern :toggle (configuration-layer/package-usedp 'company)) + evil-matchit + flycheck + ggtags + helm-gtags + js-doc + js2-mode + js2-refactor + json-mode + json-snatcher + (tern :toggle (spacemacs//tern-detect)) + web-beautify + skewer-mode + livid-mode + )) + +(defun javascript/init-coffee-mode () + (use-package coffee-mode + :defer t + :init + (progn + (defun javascript/coffee-indent () + (if (coffee-line-wants-indent) + ;; We need to insert an additional tab because the last line was special. + (coffee-insert-spaces (+ (coffee-previous-indent) coffee-tab-width)) + ;; otherwise keep at the same indentation level + (coffee-insert-spaces (coffee-previous-indent))) + ) + ;; indent to right position after `evil-open-below' and `evil-open-above' + (add-hook 'coffee-mode-hook '(lambda () + (setq indent-line-function 'javascript/coffee-indent + evil-shift-width coffee-tab-width)))))) + +(defun javascript/post-init-company () + (spacemacs|add-company-hook js2-mode)) + +(defun javascript/init-company-tern () + (use-package company-tern + :if (and (configuration-layer/package-usedp 'company) + (configuration-layer/package-usedp 'tern)) + :defer t + :init + (push 'company-tern company-backends-js2-mode))) + +(defun javascript/post-init-flycheck () + (dolist (mode '(coffee-mode js2-mode json-mode)) + (spacemacs/add-flycheck-hook mode))) + +(defun javascript/post-init-ggtags () + (add-hook 'js2-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun javascript/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'js2-mode)) + +(defun javascript/init-js-doc () + (use-package js-doc + :defer t + :init + (progn + (defun spacemacs/js-doc-require () + "Lazy load js-doc" + (require 'js-doc)) + (add-hook 'js2-mode-hook 'spacemacs/js-doc-require) + + (defun spacemacs/js-doc-set-key-bindings (mode) + "Setup the key bindings for `js2-doc' for the given MODE." + (spacemacs/declare-prefix-for-mode mode "mrd" "documentation") + (spacemacs/set-leader-keys-for-major-mode mode "rdb" 'js-doc-insert-file-doc) + (spacemacs/set-leader-keys-for-major-mode mode "rdf" 'js-doc-insert-function-doc) + (spacemacs/set-leader-keys-for-major-mode mode "rdt" 'js-doc-insert-tag) + (spacemacs/set-leader-keys-for-major-mode mode "rdh" 'js-doc-describe-tag)) + (spacemacs/js-doc-set-key-bindings 'js2-mode)))) + +(defun javascript/init-js2-mode () + (use-package js2-mode + :defer t + :init + (progn + (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode)) + ;; Required to make imenu functions work correctly + (add-hook 'js2-mode-hook 'js2-imenu-extras-mode)) + :config + (progn + (spacemacs/declare-prefix-for-mode 'js2-mode "mh" "documentation") + (spacemacs/declare-prefix-for-mode 'js2-mode "mg" "goto") + (spacemacs/declare-prefix-for-mode 'js2-mode "mr" "refactor") + (spacemacs/declare-prefix-for-mode 'js2-mode "mz" "folding") + (spacemacs/set-leader-keys-for-major-mode 'js2-mode + "w" 'js2-mode-toggle-warnings-and-errors + "zc" 'js2-mode-hide-element + "zo" 'js2-mode-show-element + "zr" 'js2-mode-show-all + "ze" 'js2-mode-toggle-element + "zF" 'js2-mode-toggle-hide-functions + "zC" 'js2-mode-toggle-hide-comments)))) + +(defun javascript/post-init-evil-matchit () + (add-hook `js2-mode `turn-on-evil-matchit-mode)) + +(defun javascript/init-js2-refactor () + (use-package js2-refactor + :defer t + :init + (progn + (defun spacemacs/js2-refactor-require () + "Lazy load js2-refactor" + (require 'js2-refactor)) + (add-hook 'js2-mode-hook 'spacemacs/js2-refactor-require) + + (defun spacemacs/js2-refactor-set-key-bindings (mode) + (spacemacs/declare-prefix-for-mode mode "mr3" "ternary") + (spacemacs/set-leader-keys-for-major-mode mode "r3i" 'js2r-ternary-to-if) + + (spacemacs/declare-prefix-for-mode mode "mra" "add/args") + (spacemacs/set-leader-keys-for-major-mode mode "rag" 'js2r-add-to-globals-annotation) + (spacemacs/set-leader-keys-for-major-mode mode "rao" 'js2r-arguments-to-object) + + (spacemacs/declare-prefix-for-mode mode "mrb" "barf") + (spacemacs/set-leader-keys-for-major-mode mode "rba" 'js2r-forward-barf) + + (spacemacs/declare-prefix-for-mode mode "mrc" "contract") + (spacemacs/set-leader-keys-for-major-mode mode "rca" 'js2r-contract-array) + (spacemacs/set-leader-keys-for-major-mode mode "rco" 'js2r-contract-object) + (spacemacs/set-leader-keys-for-major-mode mode "rcu" 'js2r-contract-function) + + (spacemacs/declare-prefix-for-mode mode "mre" "expand/extract") + (spacemacs/set-leader-keys-for-major-mode mode "rea" 'js2r-expand-array) + (spacemacs/set-leader-keys-for-major-mode mode "ref" 'js2r-extract-function) + (spacemacs/set-leader-keys-for-major-mode mode "rem" 'js2r-extract-method) + (spacemacs/set-leader-keys-for-major-mode mode "reo" 'js2r-expand-object) + (spacemacs/set-leader-keys-for-major-mode mode "reu" 'js2r-expand-function) + (spacemacs/set-leader-keys-for-major-mode mode "rev" 'js2r-extract-var) + + (spacemacs/declare-prefix-for-mode mode "mri" "inline/inject/introduct") + (spacemacs/set-leader-keys-for-major-mode mode "rig" 'js2r-inject-global-in-iife) + (spacemacs/set-leader-keys-for-major-mode mode "rip" 'js2r-introduce-parameter) + (spacemacs/set-leader-keys-for-major-mode mode "riv" 'js2r-inline-var) + + (spacemacs/declare-prefix-for-mode mode "mrl" "localize/log") + (spacemacs/set-leader-keys-for-major-mode mode "rlp" 'js2r-localize-parameter) + (spacemacs/set-leader-keys-for-major-mode mode "rlt" 'js2r-log-this) + + (spacemacs/declare-prefix-for-mode mode "mrr" "rename") + (spacemacs/set-leader-keys-for-major-mode mode "rrv" 'js2r-rename-var) + + (spacemacs/declare-prefix-for-mode mode "mrs" "split/slurp") + (spacemacs/set-leader-keys-for-major-mode mode "rsl" 'js2r-forward-slurp) + (spacemacs/set-leader-keys-for-major-mode mode "rss" 'js2r-split-string) + (spacemacs/set-leader-keys-for-major-mode mode "rsv" 'js2r-split-var-declaration) + + (spacemacs/declare-prefix-for-mode mode "mrt" "toggle") + (spacemacs/set-leader-keys-for-major-mode mode "rtf" 'js2r-toggle-function-expression-and-declaration) + + (spacemacs/declare-prefix-for-mode mode "mru" "unwrap") + (spacemacs/set-leader-keys-for-major-mode mode "ruw" 'js2r-unwrap) + + (spacemacs/declare-prefix-for-mode mode "mrv" "var") + (spacemacs/set-leader-keys-for-major-mode mode "rvt" 'js2r-var-to-this) + + (spacemacs/declare-prefix-for-mode mode "mrw" "wrap") + (spacemacs/set-leader-keys-for-major-mode mode "rwi" 'js2r-wrap-buffer-in-iife) + (spacemacs/set-leader-keys-for-major-mode mode "rwl" 'js2r-wrap-in-for-loop) + + (spacemacs/set-leader-keys-for-major-mode mode "k" 'js2r-kill) + + (spacemacs/declare-prefix-for-mode mode "mx" "text") + (spacemacs/declare-prefix-for-mode mode "mxm" "move") + (spacemacs/set-leader-keys-for-major-mode mode "xmj" 'js2r-move-line-down) + (spacemacs/set-leader-keys-for-major-mode mode "xmk" 'js2r-move-line-up)) + + (spacemacs/js2-refactor-set-key-bindings 'js2-mode)))) + +(defun javascript/init-json-mode () + (use-package json-mode + :defer t)) + +(defun javascript/init-json-snatcher () + (use-package json-snatcher + :defer t + :config + (spacemacs/set-leader-keys-for-major-mode 'json-mode + "hp" 'jsons-print-path) + )) + +(defun javascript/init-tern () + (use-package tern + :defer t + :diminish tern-mode + :init (add-hook 'js2-mode-hook 'tern-mode) + :config + (progn + (when javascript-disable-tern-port-files + (add-to-list 'tern-command "--no-port-file" 'append)) + (spacemacs//set-tern-key-bindings 'js2-mode)))) + +(defun javascript/init-web-beautify () + (use-package web-beautify + :defer t + :init + (progn + (spacemacs/set-leader-keys-for-major-mode 'js2-mode "=" 'web-beautify-js) + (spacemacs/set-leader-keys-for-major-mode 'json-mode "=" 'web-beautify-js) + (spacemacs/set-leader-keys-for-major-mode 'web-mode "=" 'web-beautify-html) + (spacemacs/set-leader-keys-for-major-mode 'css-mode "=" 'web-beautify-css)))) + +(defun javascript/init-skewer-mode () + (use-package skewer-mode + :defer t + :diminish skewer-mode + :init + (progn + (spacemacs/register-repl 'skewer-mode 'spacemacs/skewer-start-repl "skewer") + (add-hook 'js2-mode-hook 'skewer-mode)) + :config + (progn + (defun spacemacs/skewer-start-repl () + "Attach a browser to Emacs and start a skewer REPL." + (interactive) + (run-skewer) + (skewer-repl)) + + (defun spacemacs/skewer-load-buffer-and-focus () + "Execute whole buffer in browser and switch to REPL in insert state." + (interactive) + (skewer-load-buffer) + (skewer-repl) + (evil-insert-state)) + + (defun spacemacs/skewer-eval-defun-and-focus () + "Execute function at point in browser and switch to REPL in insert state." + (interactive) + (skewer-eval-defun) + (skewer-repl) + (evil-insert-state)) + + (defun spacemacs/skewer-eval-region (beg end) + "Execute the region as JavaScript code in the attached browser." + (interactive "r") + (skewer-eval (buffer-substring beg end) #'skewer-post-minibuffer)) + + (defun spacemacs/skewer-eval-region-and-focus (beg end) + "Execute the region in browser and swith to REPL in insert state." + (interactive "r") + (spacemacs/skewer-eval-region beg end) + (skewer-repl) + (evil-insert-state)) + + (spacemacs/declare-prefix-for-mode 'js2-mode "ms" "skewer") + (spacemacs/declare-prefix-for-mode 'js2-mode "me" "eval") + (spacemacs/set-leader-keys-for-major-mode 'js2-mode + "'" 'spacemacs/skewer-start-repl + "ee" 'skewer-eval-last-expression + "eE" 'skewer-eval-print-last-expression + "sb" 'skewer-load-buffer + "sB" 'spacemacs/skewer-load-buffer-and-focus + "si" 'spacemacs/skewer-start-repl + "sf" 'skewer-eval-defun + "sF" 'spacemacs/skewer-eval-defun-and-focus + "sr" 'spacemacs/skewer-eval-region + "sR" 'spacemacs/skewer-eval-region-and-focus + "ss" 'skewer-repl)))) + +(defun javascript/init-livid-mode () + (use-package livid-mode + :defer t + :init (spacemacs|add-toggle javascript-repl-live-evaluation + :mode livid-mode + :documentation "Live evaluation of JS buffer change." + :evil-leader-for-mode (js2-mode . "sa")))) diff --git a/layers/+lang/latex/README.org b/layers/+lang/latex/README.org new file mode 100644 index 0000000..5d0d8f3 --- /dev/null +++ b/layers/+lang/latex/README.org @@ -0,0 +1,165 @@ +#+TITLE: LaTeX layer + +[[file:img/latex.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features]] + - [[#bibtex][BibTeX]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#auto-completion][Auto-completion]] + - [[#previewing][Previewing]] + - [[#build-command][Build command]] + - [[#auto-fill][Auto-fill]] + - [[#folding][Folding]] + - [[#keybindings][Keybindings]] + - [[#folding][Folding]] + - [[#reftex][RefTeX]] + +* Description +This layer adds support for LaTeX files with [[https://savannah.gnu.org/projects/auctex/][AucTeX]]. + +** Features +- Auto-build with [[https://github.com/tom-tan/auctex-latexmk/][auctex-latexmk]] +- Auto-completion with [[https://github.com/alexeyr/company-auctex][company-auctex]] +- Tags navigation on ~%~ with [[https://github.com/redguardtoo/evil-matchit][evil-matchit]] +- Labels, references, citations and index entries management with [[http://www.gnu.org/software/emacs/manual/html_node/reftex/index.html][RefTeX]] + +** BibTeX +For more extensive support of BibTeX files than RefTeX provides, have a look at +the [[../bibtex][BibTeX layer]]. + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =latex= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Auto-completion +Add the layer =auto-completion= to the variable +=dotspacemacs-configuration-layers= of your dotfile =~/.spacemacs=. + +** Previewing +To perform full-document previews (that is, aside from the inline previewing +under ~SPC m p~), add the following to your =.spacemacs= +under =dotspacemacs/user-config=: + +#+BEGIN_SRC emacs-lisp + (add-hook 'doc-view-mode-hook 'auto-revert-mode) +#+END_SRC + +Then when you open up a compiled PDF, the preview will update automatically +when you recompile. + +** Build command +A build command can be specified via the layer variable =latex-build-command=. + +If =LatexMk= is specified, the appropriate =LatexMk= configuration +will be applied. (the default on systems with =latexmk= in the path) +This variable can be set to any of the entities in =TeX-command-list=, +including any custom entries you may have added there. To use the +regular =AucTeX= command set =latex-build-command= to =LaTeX= as shown +below. + +#+BEGIN_SRC emacs-lisp + dotspacemacs-configuration-layers '( + (latex :variables latex-build-command "LaTeX")) +#+END_SRC + +** Auto-fill +To enable auto-fill set the variable =latex-enable-auto-fill= to =t=. + +The variable =latex-nofill-env= provide the list of environment names where +=auto-fill-mode= will be inhibited. + +#+BEGIN_SRC emacs-lisp + dotspacemacs-configuration-layers '( + (latex :variables latex-enable-auto-fill t)) +#+END_SRC + +** Folding +Enable folding of text by setting =latex-enable-folding= to =t=. Default value +is nil. + +#+BEGIN_SRC emacs-lisp + dotspacemacs-configuration-layers '( + (latex :variables latex-enable-folding t)) +#+END_SRC + +* Keybindings + +| Key Binding | Description | +|---------------+--------------------------------------------| +| ~SPC m -~ | recenter output buffer | +| ~SPC m ​,​~ | TeX command on master file | +| ~SPC m .~ | mark LaTeX environment | +| ~SPC m *~ | mark LaTeX section | +| ~SPC m %~ | comment or uncomment a paragraph | +| ~SPC m ;~ | comment or uncomment a region | +| ~SPC m a~ | run all commands (compile and open viewer) | +| ~SPC m b~ | build | +| ~SPC m c~ | close LaTeX environment | +| ~SPC m e~ | insert LaTeX environment | +| ~SPC m i i~ | insert =\item= | +| ~SPC m k~ | kill TeX job | +| ~SPC m l~ | recenter output buffer | +| ~SPC m m~ | insert LaTeX macro | +| ~SPC m s~ | insert LaTeX section | +| ~SPC m v~ | view output | +| ~SPC m h d~ | TeX documentation, can be very slow | +| ~SPC m f e~ | fill LaTeX environment | +| ~SPC m f p~ | fill LaTeX paragraph | +| ~SPC m f r~ | fill LaTeX region | +| ~SPC m f s~ | fill LaTeX section | +| ~SPC m p r~ | preview region | +| ~SPC m p b~ | preview buffer | +| ~SPC m p d~ | preview document | +| ~SPC m p e~ | preview environment | +| ~SPC m p s~ | preview section | +| ~SPC m p p~ | preview at point | +| ~SPC m p f~ | cache preamble for preview | +| ~SPC m p c~ | clear previews | +| ~SPC m v~ | view | +| ~SPC m x b~ | make font bold | +| ~SPC m x B~ | make font medium weight | +| ~SPC m x c~ | make font monospaced (for code) | +| ~SPC m x e~ | make font emphasised | +| ~SPC m x i~ | make font italic | +| ~SPC m x o~ | make font oblique | +| ~SPC m x r~ | remove font properties | +| ~SPC m x f a~ | use calligraphic font | +| ~SPC m x f c~ | use small-caps font | +| ~SPC m x f f~ | use sans serif font | +| ~SPC m x f n~ | use normal font | +| ~SPC m x f r~ | use serif font | +| ~SPC m x f u~ | use upright font | + +** Folding +Available only when =latex-enable-folding= is non nil. + +| Key Binding | Description | +|-------------+----------------------| +| ~SPC m z =~ | fold TeX math | +| ~SPC m z b~ | fold TeX buffer | +| ~SPC m z e~ | fold TeX environment | +| ~SPC m z m~ | fold TeX macro | +| ~SPC m z r~ | fold TeX region | + +** RefTeX + +| Key Binding | Description | +|---------------+---------------------------------------| +| ~SPC m r c~ | reftex-citation | +| ~SPC m r g~ | reftex-grep-document | +| ~SPC m r i~ | reftex-index-selection-or-word | +| ~SPC m r I~ | reftex-display-index | +| ~SPC m r TAB~ | reftex-index | +| ~SPC m r l~ | reftex-label | +| ~SPC m r p~ | reftex-index-phrase-selection-or-word | +| ~SPC m r P~ | reftex-index-visit-phrases-buffer | +| ~SPC m r r~ | reftex-reference | +| ~SPC m r s~ | reftex-search-document | +| ~SPC m r t~ | reftex-toc | +| ~SPC m r T~ | reftex-toc-recenter | +| ~SPC m r v~ | reftex-view-crossref | diff --git a/layers/+lang/latex/config.el b/layers/+lang/latex/config.el new file mode 100644 index 0000000..68f1ac4 --- /dev/null +++ b/layers/+lang/latex/config.el @@ -0,0 +1,33 @@ +;;; packages.el --- Latex Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|defvar-company-backends LaTeX-mode) + +(spacemacs|define-jump-handlers latex-mode) + +(defvar latex-build-command (if (executable-find "latexmk") "LatexMk" "LaTeX") + "The default command to use with `SPC m b'") + +(defvar latex-enable-auto-fill t + "Whether to use auto-fill-mode or not in tex files.") + +(defvar latex-enable-folding nil + "Whether to use `TeX-fold-mode' or not in tex/latex buffers.") + +(defvar latex-nofill-env '("equation" + "equation*" + "align" + "align*" + "tabular" + "tikzpicture") + "List of environment names in which `auto-fill-mode' will be inhibited.") diff --git a/layers/+lang/latex/funcs.el b/layers/+lang/latex/funcs.el new file mode 100644 index 0000000..84649de --- /dev/null +++ b/layers/+lang/latex/funcs.el @@ -0,0 +1,61 @@ +;;; funcs.el --- Auctex Layer Functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun latex/build () + (interactive) + (progn + (let ((TeX-save-query nil)) + (TeX-save-document (TeX-master-file))) + (TeX-command latex-build-command 'TeX-master-file -1))) + ;; (setq build-proc (TeX-command latex-build-command 'TeX-master-file -1)) + ;; ;; Sometimes, TeX-command returns nil causing an error in set-process-sentinel + ;; (when build-proc + ;; (set-process-sentinel build-proc 'latex//build-sentinel)))) + +(defun latex//build-sentinel (process event) + (if (string= event "finished\n") + (TeX-view) + (message "Errors! Check with C-`"))) + +(defun latex//autofill () + "Check whether the pointer is currently inside one of the +environments described in `latex-nofill-env' and if so, inhibits +the automatic filling of the current paragraph." + (let ((do-auto-fill t) + (current-environment "") + (level 0)) + (while (and do-auto-fill (not (string= current-environment "document"))) + (setq level (1+ level) + current-environment (LaTeX-current-environment level) + do-auto-fill (not (member current-environment latex-nofill-env)))) + (when do-auto-fill + (do-auto-fill)))) + +(defun latex/auto-fill-mode () + "Toggle auto-fill-mode using the custom auto-fill function." + (interactive) + (auto-fill-mode) + (setq auto-fill-function 'latex//autofill)) + +;; Rebindings for TeX-font +(defun latex/font-bold () (interactive) (TeX-font nil ?\C-b)) +(defun latex/font-medium () (interactive) (TeX-font nil ?\C-m)) +(defun latex/font-code () (interactive) (TeX-font nil ?\C-t)) +(defun latex/font-emphasis () (interactive) (TeX-font nil ?\C-e)) +(defun latex/font-italic () (interactive) (TeX-font nil ?\C-i)) +(defun latex/font-clear () (interactive) (TeX-font nil ?\C-d)) +(defun latex/font-calligraphic () (interactive) (TeX-font nil ?\C-a)) +(defun latex/font-small-caps () (interactive) (TeX-font nil ?\C-c)) +(defun latex/font-sans-serif () (interactive) (TeX-font nil ?\C-f)) +(defun latex/font-normal () (interactive) (TeX-font nil ?\C-n)) +(defun latex/font-serif () (interactive) (TeX-font nil ?\C-r)) +(defun latex/font-oblique () (interactive) (TeX-font nil ?\C-s)) +(defun latex/font-upright () (interactive) (TeX-font nil ?\C-u)) diff --git a/layers/+lang/latex/img/latex.png b/layers/+lang/latex/img/latex.png new file mode 100644 index 0000000000000000000000000000000000000000..af5d0f9edafa8c5caa2d682a406793be964da32b GIT binary patch literal 24312 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 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq latex-packages + '( + auctex + (auctex-latexmk :toggle (string= "LatexMk" latex-build-command)) + company + (company-auctex :toggle (configuration-layer/package-usedp 'company)) + evil-matchit + (reftex :location built-in) + flycheck + flyspell + ggtags + helm-gtags + smartparens + typo + yasnippet + which-key + )) + +(defun latex/init-auctex () + (use-package tex + :defer t + :init + (progn + (setq TeX-command-default latex-build-command + TeX-auto-save t + TeX-parse-self t + TeX-syntactic-comment t + ;; Synctex support + TeX-source-correlate-start-server nil + ;; Don't insert line-break at inline math + LaTeX-fill-break-at-separators nil) + (when latex-enable-auto-fill + (add-hook 'LaTeX-mode-hook 'latex/auto-fill-mode)) + (when latex-enable-folding + (add-hook 'LaTeX-mode-hook 'TeX-fold-mode)) + (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) + (add-hook 'LaTeX-mode-hook 'TeX-source-correlate-mode) + (add-hook 'LaTeX-mode-hook 'TeX-PDF-mode)) + :config + (progn + ;; Key bindings for plain TeX + (dolist (mode '(tex-mode latex-mode)) + (spacemacs/set-leader-keys-for-major-mode mode + "\\" 'TeX-insert-macro ;; C-c C-m + "-" 'TeX-recenter-output-buffer ;; C-c C-l + "%" 'TeX-comment-or-uncomment-paragraph ;; C-c % + ";" 'TeX-comment-or-uncomment-region ;; C-c ; or C-c : + ;; TeX-command-run-all runs compile and open the viewer + "a" 'TeX-command-run-all ;; C-c C-a + "b" 'latex/build + "k" 'TeX-kill-job ;; C-c C-k + "l" 'TeX-recenter-output-buffer ;; C-c C-l + "m" 'TeX-insert-macro ;; C-c C-m + "v" 'TeX-view ;; C-c C-v + ;; TeX-doc is a very slow function + "hd" 'TeX-doc + "xb" 'latex/font-bold + "xc" 'latex/font-code + "xe" 'latex/font-emphasis + "xi" 'latex/font-italic + "xr" 'latex/font-clear + "xo" 'latex/font-oblique + "xfc" 'latex/font-small-caps + "xff" 'latex/font-sans-serif + "xfr" 'latex/font-serif) + (when dotspacemacs-major-mode-emacs-leader-key + (spacemacs/set-leader-keys-for-major-mode mode + dotspacemacs-major-mode-emacs-leader-key 'TeX-command-master)) + (when dotspacemacs-major-mode-leader-key + (spacemacs/set-leader-keys-for-major-mode mode + dotspacemacs-major-mode-leader-key 'TeX-command-master)) + (when latex-enable-folding + (spacemacs/set-leader-keys-for-major-mode mode + "z=" 'TeX-fold-math + "zb" 'TeX-fold-buffer + "ze" 'TeX-fold-env + "zm" 'TeX-fold-macro + "zr" 'TeX-fold-region)) + (spacemacs/declare-prefix-for-mode mode "mh" "help") + (spacemacs/declare-prefix-for-mode mode "mx" "text/fonts") + (spacemacs/declare-prefix-for-mode mode "mz" "fold")) + + ;; Key bindings specific to LaTeX + (spacemacs/set-leader-keys-for-major-mode 'latex-mode + "*" 'LaTeX-mark-section ;; C-c * + "." 'LaTeX-mark-environment ;; C-c . + "c" 'LaTeX-close-environment ;; C-c ] + "e" 'LaTeX-environment ;; C-c C-e + "ii" 'LaTeX-insert-item ;; C-c C-j + "s" 'LaTeX-section ;; C-c C-s + "fe" 'LaTeX-fill-environment ;; C-c C-q C-e + "fp" 'LaTeX-fill-paragraph ;; C-c C-q C-p + "fr" 'LaTeX-fill-region ;; C-c C-q C-r + "fs" 'LaTeX-fill-section ;; C-c C-q C-s + "pb" 'preview-buffer + "pc" 'preview-clearout + "pd" 'preview-document + "pe" 'preview-environment + "pf" 'preview-cache-preamble + "pp" 'preview-at-point + "pr" 'preview-region + "ps" 'preview-section + "xB" 'latex/font-medium + "xr" 'latex/font-clear + "xfa" 'latex/font-calligraphic + "xfn" 'latex/font-normal + "xfu" 'latex/font-upright) + (spacemacs/declare-prefix-for-mode 'latex-mode "mi" "insert") + (spacemacs/declare-prefix-for-mode 'latex-mode "mp" "preview") + (spacemacs/declare-prefix-for-mode 'latex-mode "mf" "fill")))) + +(defun latex/init-auctex-latexmk () + (use-package auctex-latexmk + :defer t + :init + (progn + (setq auctex-latexmk-inherit-TeX-PDF-mode t) + (spacemacs|use-package-add-hook tex + :post-config + (auctex-latexmk-setup))))) + +(defun latex/post-init-company () + (spacemacs|add-company-hook LaTeX-mode)) + +(defun latex/init-company-auctex () + (use-package company-auctex + :defer t + :init + (progn + (push 'company-auctex-labels company-backends-LaTeX-mode) + (push 'company-auctex-bibs company-backends-LaTeX-mode) + (push '(company-auctex-macros + company-auctex-symbols + company-auctex-environments) company-backends-LaTeX-mode)))) + +(defun latex/post-init-evil-matchit () + (add-hook 'LaTeX-mode-hook 'evil-matchit-mode)) + +(defun latex/post-init-flycheck () + (spacemacs/add-flycheck-hook 'LaTeX-mode)) + +(defun latex/post-init-flyspell () + (spell-checking/add-flyspell-hook 'LaTeX-mode-hook)) + +(defun latex/init-reftex () + (add-hook 'LaTeX-mode-hook 'turn-on-reftex) + (setq reftex-plug-into-AUCTeX '(nil nil t t t) + reftex-use-fonts t) + (spacemacs/declare-prefix-for-mode 'latex-mode "mr" "reftex") + (spacemacs/set-leader-keys-for-major-mode 'latex-mode + "rc" 'reftex-citation + "rg" 'reftex-grep-document + "ri" 'reftex-index-selection-or-word + "rI" 'reftex-display-index + "r TAB" 'reftex-index + "rl" 'reftex-label + "rp" 'reftex-index-phrase-selection-or-word + "rP" 'reftex-index-visit-phrases-buffer + "rr" 'reftex-reference + "rs" 'reftex-search-document + "rt" 'reftex-toc + "rT" 'reftex-toc-recenter + "rv" 'reftex-view-crossref)) + +(defun latex/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'latex-mode)) + +(defun latex/post-init-ggtags () + (add-hook 'latex-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun latex/post-init-smartparens () + (add-hook 'LaTeX-mode-hook 'smartparens-mode)) + +(defun latex/post-init-typo () + ;; Typo mode isn't useful for LaTeX. + (defun spacemacs//disable-typo-mode () + (typo-mode -1)) + (add-hook 'LaTeX-mode-hook 'spacemacs//disable-typo-mode)) + +(defun latex/post-init-yasnippet () + (add-hook 'LaTeX-mode-hook 'spacemacs/load-yasnippet)) + +(defun latex/post-init-which-key () + (push '("\\`latex/font-\\(.+\\)\\'" . "\\1") + which-key-description-replacement-alist)) diff --git a/layers/+lang/lua/README.org b/layers/+lang/lua/README.org new file mode 100644 index 0000000..ec9023c --- /dev/null +++ b/layers/+lang/lua/README.org @@ -0,0 +1,36 @@ +#+TITLE: Lua contribution layer for Spacemacs + +[[file:img/lua.gif]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features:]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + - [[#commands][Commands]] + +* Description +This layer adds support for editing Lua. + +** Features: +- Editing lua files using [[https://github.com/immerrr/lua-mode][lua-mode]] +- Sending code to a lua REPL +- Code linting using [[https://github.com/mpeterv/luacheck][Luacheck]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =lua= to the existing =dotspacemacs-configuration-layers= list in this +file. + +In order to enable code linting, install [[https://github.com/mpeterv/luacheck][Luacheck]]. + +* Key Bindings +** Commands + +| Key Binding | Description | +|-------------+--------------------------------------------| +| ~SPC m d~ | lookup thing at point in lua documentation | +| ~SPC m s b~ | send buffer contents to REPL | +| ~SPC m s f~ | send current function to REPL | +| ~SPC m s l~ | send current line to REPL | +| ~SPC m s r~ | send current region to REPL | diff --git a/layers/+lang/lua/config.el b/layers/+lang/lua/config.el new file mode 100644 index 0000000..c13d28d --- /dev/null +++ b/layers/+lang/lua/config.el @@ -0,0 +1,14 @@ +;;; packages.el --- Lua Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|define-jump-handlers lua-mode) diff --git a/layers/+lang/lua/img/lua.gif b/layers/+lang/lua/img/lua.gif new file mode 100644 index 0000000000000000000000000000000000000000..73f09bf8f08601d3b9400713853e1172ab680572 GIT binary patch literal 9806 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 | indent region | +| ~SPC m \<~ | exdent region | + +** Header navigation + +| Key Binding | Description | +|-------------+------------------------------| +| ~gj~ | outline forward same level | +| ~gk~ | outline backward same level | +| ~gh~ | outline up one level | +| ~gl~ | outline next visible heading | + +** Buffer-wide commands + +| Key Binding | Description | +|-------------+--------------------------------------------------------------------------------------| +| ~SPC m c ]~ | complete buffer | +| ~SPC m c m~ | other window | +| ~SPC m c p~ | preview | +| ~SPC m c P~ | live preview using engine defined with layer variable =markdown-live-preview-engine= | +| ~SPC m c e~ | export | +| ~SPC m c v~ | export and preview | +| ~SPC m c o~ | open | +| ~SPC m c w~ | kill ring save | +| ~SPC m c c~ | check refs | +| ~SPC m c n~ | cleanup list numbers | +| ~SPC m c r~ | render buffer | + +** List editing + +| Key Binding | Description | +|-------------+------------------| +| ~SPC m l i~ | insert list item | + +** Movement + +| Key Binding | Description | +|-------------+--------------------| +| ~SPC m {~ | backward paragraph | +| ~SPC m }~ | forward paragraph | +| ~SPC m N~ | next link | +| ~SPC m P~ | previous link | + +** Promotion, Demotion + +| Key Binding | Description | +|-------------+--------------------| +| ~M-k~ | markdown-move-up | +| ~M-j~ | markdown-move-down | +| ~M-h~ | markdown-promote | +| ~M-l~ | markdown-demote | diff --git a/layers/+lang/markdown/config.el b/layers/+lang/markdown/config.el new file mode 100644 index 0000000..3326b8e --- /dev/null +++ b/layers/+lang/markdown/config.el @@ -0,0 +1,17 @@ +;;; config.el --- Markdown Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|defvar-company-backends markdown-mode) + +(defvar markdown-live-preview-engine 'eww + "Possibe values are `eww' (built-in browser) or `vmd' (installed with `npm').") diff --git a/layers/+lang/markdown/img/markdown.png b/layers/+lang/markdown/img/markdown.png new file mode 100644 index 0000000000000000000000000000000000000000..22b4439aa8e687da5f6769fcd09941e8a333296a GIT binary patch literal 14081 zcmZu&2|Scv+eV5aV=H7CYyK#rvKt~>wz3yvO-f@o#x^9f@6u#Xku1%G?1RWoWZ%cW zjh*a+?-_c(_gmh6KQ;3>&pG#f&bhC9y9#}%t$O*=wM!%BtdtuEdpOII;lN&B_VOBApVf{;|iF70c|hzjopm3G^MQ_?S(C$ zI$GHXd)PYxqe)0)J*0t;_BL*ooF4Wt2UlqiIquUD(!gipV-ar7(;;pz<+zQt9&#!< zy4Y~u6}}^UiyLx@lao`{<>@nN-TNwkUkAR)aX)u+bCMPjK_C#qh}*)BF18|~Qc_YP zx5Pxm#BKs3Zn}CpxLJDKba3T4o8({f+_!PHc6s6C_QKJDlQ^%Xl_T6uj+>jf(0~8= zE2q8Fe=p?V`d2GJKM@a0ClOKMTO$AICASyP{w?1BdW-m*v)4|wI$KN@*cxdi7aL1A zM;CoZM;L^t(F=!{uGW@LHblK-MgH%Ie@iM$oKjlH<%JEPD^VkesI18Ud-iv{tO!xv z|Dpcb-kv@MHWzXUSm|E}1-ZoBW?)Q0a;H=M{ylvU(v?*2^*fIrkB^T;w+V;6zLN03 zK9}_Fi^xwbpd;WyHts0r~-EkCF~NZ z2PMtH^dRKQ2oxn^UcJ?xc)P}HvhIy}G{M$d?{$E1eSdQBbFAZQ>K7?)bIU_TI+Xh} zlylDaf+QH1iosRq%1i8?(EH!#q$|5XDoJJbVirB|NrwVl#os#azA@E+c!OnRZP{NM z?A{m}cAE9RzPSgj=Xko;OM7ywL^ZyY+?C( z13%eazfevt2!Au8F>70EzBBzKU8|DH?B!B$9lGA7h}P;(bL%>jmG^U)+n2WIKHmlF zA-wyq#J}drsYg>Kj|}t~=oIRJi!t-4MYGSoqd{i#BZN`ILvP%X9n?4OZ6$6Fx3t0H7} z3N>15-kC+MdhVAD{Syz>Jud#^;?_A(JyR?hFuw(EdSW28KlgCeqFg< zejN_~xU^RG1mgX&*ULdKK7ot9o9@LwbQ}Y%oxrxMk(Y$OD!V*o?VO!3ZSO2~L}`$;d-6{A-Tj5DF_xR&dl)!HsfP@QMAh6z1mCiehF5S;F)rG*J2?K>YddOW@=xm(emiyEAKVp3^<5$;a3pKnF zmrnIB{vZ0cmHtvmT#nnsWT8HJn^oJ3w?0L^^}AWcHnz2CUzDS%i)x#hELwBC>a%V> zDRb#<3S-xH;Qn^Ti2}^GJVoe!#yc@!8$L%VXuVr!Vr!}cnH~CbsyJMZo2WX^H1#2H z!$nr#(|I(8(3IiY67h9V>DdF~O|e*|{9#Lbop=AsL`7%APn0f5sloHh)qEJm^5DDjL19Aa;;e zpo`@yDXmwSsO@1?@I_4>BxQ?AG^pV17RucA`QbXcex6H@lYo;8{UJ)mKYOjuPc8rI z8nqSnc9I;uXDW>@q0@42b+E!P^wIY_IX4}iTy2EnQ{S8#cnUSCpNFExcEU<-|KyF0 zvBT-RsWpnMZD7Z7xW^tyBpW{xKyGr+Ja3a6q zC;d{}ep|b8mZlFv&;bnL^0k>C8#R`_61ewv%H_>n<=0td0(tPnzFVaCLfq;)cM0w= zKlMi4^59TW&vjvC{er^VD1_9-7!D zzCXLQ`8ui>b1;=ROdNtt)N#KTIs2Fz4kI!4t;VgoX#%H9+jEgL{V*RT!!ok{nVcx- zY}^^((P5G8M?4Aw6A;&j_vLM;AKjroY;IKJhuiT;!nnIiFK`{J>E&Pv%wAxtuZJx@ z0Mzo5Dbc>NHJ%M+K2cp~S$izcExw`mMX2X>=WBiWb4rjeIaB$=DuH&1V(+r^DMgfd zFm{)k8Pq;e_Dk=6K&BpM{UHTOyxuTcHQkh7=vD;=z&feP?}vHWeS*lXRkZ4zc?S@sWX%<5 zrm?){26pL?L@|nss3a-Z1i{cP_9L6_=_se)lp&1Bix)Z55Jw+sTWk4&iE(E`rf`vW zDBhk*Aq@;Vsz`E|T|1CQ{uTFg*sCp*F6A)2%aYS)2%!(i;0x6vNkbreCkl(s;5OoH zRCOTlh0eq!{{iRR6uxQNZ)= zZ}U*|?4JDiQ+f31oP32U)SPokZB0)tHzG_SZt9DZtu65F7MwheF}pfgtQweu`3mXr z{iOQKDm5iL*rf(fZg73EhVK0MPqw1aABEeuey}Yg681#Kks7uL$q!1YO|M6Zaw$u- zE8B5aLKHYDkBX;Ezsabl1dHS1E$(KnqUQ^uvbjXpzGBo0%r-o5+X5sR>>e1(x!MBf z4^h{qySlm(x8^&?S&q^i59GU`OK0JC7(-qlqM`_OmInka(Q=@<2v6l z#$r3X8xtL=(TaQ!k+7nlLgH{~BVv%b((qaxpJsUPGZRMlfAa8**iWm~lO_|Cg(pwi z`P>>yBQgyq^@sBy!+48nkBlBEOi5mb!*wBDa$cP@#2E7Phj7Z+?xv9N>i0iX0k?5; z=9BfIKI~8>qCI-6K+(sl*{J?=rspR@N!FZ&Wt2UlBw*(*V#%|;%qVgQY3j%t)XJq; zEHpIdM=5^mkzj>;P=sp&^|R&6WHZz!uQ($m-uOlj8m2D(v=LV)KlvT9XPf-xZgoL{ za6DYR`7)@tX@0OfZhpjV*BO~8;+rT{)Yw*b+x{wPdL`Pi1U21XGIlI(#ZmmL9E|<+y04psA;MdMwqYwk z!S~BX;#R%2_CjszOKU#Dm*yhHr+io{#gyCcNFQTn$|`Vqn+nFRU0M#V!X=vc8K?Pf`y|kPDZj4|X5tY$+W8~wn zE52}I?V+DrXdRY24Fc-wFdVmo?NTwp>cRWZK$YyHWN-yLPd=^~2*A)r0`=t##je}~( z7PEtK>7hT;csORwmU+hE=4&4? zIau7&mFnKseGV4<*_)Moh|9An?iPJ8$ul(RemQEjCjSV%voo|h$Oz3W>kQy?2FO3t%sb%5H3TI5J~4$={K0@eKqD=Uj?i@udb1G7fJ9$)Y0=6~73MLX zyTNPI8@DY*-8~J57FfF;s=E~nsGC^iQixz89I>(`Ek)OopG=VmP^h;BB$NbXgAA{I z@`*(QVWG{;;X-byPT|YZZRT12$0(t-*#)?nuYk!nI)Uqw$x5#-erbCI>~M1PN#fx5 zgJDx0e#cPB0ncwPn`uRF?pu5W5PQkM9{|&ZTj)z|!1~&Qqt$4%SDYRAqA0$WYTRSL z{5nWf+ooXwWH?-1K%ZfjaHr$R6mPOo%;m+3!w-4+8oLJCP=xs=l(~00KK&^ajYWML z@Z8UW)v9C~>&SLiLMUkE%m%K=h?ipW^3pPgQS~$%PBl@ESc0aWf?1iw=dL$~g#%4C zTb-(FyV3T25{AGE^jO%!gF-H-QF&%-bLpb5LS9F8ONn!7l zXx&0%o;%PtaA1}$(VS%`x+|44udWKr2_?wVB5m#ms;1J}rj%58-F59OQ=?so0ya$=}g2#;) zw=DQZugCgyYjc0NNiivex`{~mRmv5UIT+OH4&zo?o!^K=iGs1uv+y9p@4Bhdi@fSE zTgbCKc1m6WcakE$+Z2-Tmuka-jnsg?JN{!a3*WIg|1m|H%YiCBr#QJ@K0}UMHy;rO z+?j_9sTm$vbROBiPFB_GWs#C1w=xHIPr|GWJLdMJzDw4)%P)Uj&jRiPPctU!R}A)y zJ1qA#^_tbQG0X19c&ug5@$(NXbzKtryM=_p9fOmY%u~ze^8dC}ASM8ps$6lz{sw^z z)0oNgDTE@@k5(yyb*Ni!uh970uZ7!}*2v6=_ZF#jfoPKe7tV@z&-+D`O%LW^Ze%2< zUL0ND{|p7PnXOfg=_@&&ZUE&ucBg^SM6Vj?gv;nUJ5>_4P$7pEB%^racGWyK9JMoT3DxlR#fnle{}Qx zH?d2uKU)4`PDKS?Jr~Iei4_}J*l zl|K6H(jqR8nU;p{q%yNJ4X|fli?3+k!dDhL1?5Ny-b%=fMEqAOy0ElbBB+iZL zhaQ7cw45Nb>bq&zYXsbcgSR8!K8&uRV{mbhKd-V3#&F8bgP>cU-(G`{edofL4V+{6yHLAE^Wl2oAosp_H`a={)++m< znE*GUjRfaYfm?)cV1cp%6i(B3dhEtvH6XU9`QeE@b@cx-zd85CxXo?sl3hS*CWXjx zBopPjKJC{00~C`oFBv?ZQuu8)onDh}1mU4bAg9ucg!1CsMro{l2vQsBHQuJHe{TXBWF9 zLsM$B3wVdz|82Uu)oE+p8?y?NzLQy;KZ6^0M3idy_XpiP+40;rUsCb6z65vXah0lL zvWE58)z3;bJma5%JNZ4*WUuUPdM2uT70>`t(~D{RJdv4TCAUFz5ela+qWIUAlH2}+ zT;x-GJ+srL#!#t-I7?UrRHzjm- z7USl;7sQ(iiTgtFOnVv;x6Uq|ElM4lAbRjVxL0fZzQrvv&wZb5(s_#XB_;nX^Z-gY zXGeBi)u>8bDicy&Tr)p147Str#-U)icOw;UyW@y4(JxK8|If7vHFz~ldJfE!WCFLz z3S$rKiopOMsvt$5qC1=^tNac{K19+fcr}tuD#w`Qsj$+EBP9NS--e zn+!?m98bHKIrg+t&;I53e7C-{d3{1=*{hEzGSOQv)}mGdA~`<7&j%vGaST&NRtn${ z`*wzVarKb)k1UZ~>IEkqQxmWDuH+2G!@q>+K zH&syHsXOr1c9-l>#--FLK-pVre?O8F$t9L7_&! z`=*)U5^zPAAkd0|uSnT7Us}j++KC=k@^~`_3s&#GI3bEzcFNWz4fD1L+Wm{e8xCjgy;Oee^9KVY5tMZMExnMU1wrF*GhuZR7Fh z;++*jc0;aA@lTWgkW>dUtcH2hrb=c7!O&O4I2T0OS-A?&&h-ZD&q zZMaJkw4!Nhh-0fU-U|7h4jxG{3a9gZyr{UG#418FRl~En8x~1%^DxPnGol!8!?8&I zWOvCG#%esU^3pQ1RG_5G)+o8XNIFe;ylXjWZ<}<@b3m19nVcQKmOOPB?+W$qVt4e* z?|y|z2X>}r)si8xU>~F#%sl+-io7oN$Vq_0GF@^#0W94zqR8KpEgXL|xYSxZ{;a9- zsT@P;1qT{M>|M8Ep_*QXLPuR{j${}vXk_@0vuv6zHMUj;hYPGs%-vVz)Sp9`Mbc>hCNKj6JL$ zXCC>@Fn)Js`_3)Y55iW#hF9{A(w9&CP1yh{bny%o(I~%4zohHqp!prqu*Z3yk|Bb9 zuUT76RFsNq(}K_8qO8Pby%r(j)0#gknpJD0UYlY%%Xs$W>HVWj=EJpMn8~c8+rutq zQgxASu=Mb0V=`7aaY{#thP^m)<_idGNo2Z8OHC#@|_uC68ygi?E^5TB!O?;ot@)LY5(|$Z8;P z3-WHUtDf7;O?L&z4BoGEc|vEIgm57zL!y@Q4CiTOrl0WVfOta(p9%%d{j_g$!xRam zB7Z^-p5$*jhB?b$-x;}_Z0BPkGmL18ZuFl>a`;oIFUccJd6T%$2~p090`B!RtXzR(weo`nX~l z*C>{5WAlA-wq9j4iOTDnqAyf2A~zg@6&V2B+1F@a)0eL4Y%viD32o-#M?2NOf!Oci zi-;@MZhG2DNi{Q-aqF?Bv#R@o<~v7%>1f}e!P><58`D18DSq8FFaWwUcbNLQDt0p|m%ayX;G91~~{sFj+DC zGJj^XHV++hPMQZ$?HlwSP6r%e*tO&lAk`dE#YZ&r4Y^v;JFyIJN1`Cefepc+3Wrq3 zt@vLy<;$R--nkS){Hfo$}G;(l6q6g+>OuiBV4hO~)2G znteUym@%6d4mC0v9L1@w*=gAK(|@#lv)59l1GiQ?;50XXu)D|#-VKMTJLDnpVtvjn zlBfq6ao!hjGr*Vh?Iij1nMD9g!31~89wpN49 zLVlDwsx7<#^iACK?qjYWmEO`1r-f`;?5he%%6pAb@dMNLlbV1CEy*D1F{$ zRW@a9qPd5}BePnG8^B)8G*tY^?%PaP+g^T zDC5Y5e>y8PcXA#OK{5Q-3ev4lE_8;ZCxFSfIQjl~c&Pr3Ca^X+9P5%dy@MTSN*9B6 zFJ%AFK8U>1(8YHJ)V)1yZZlZW!#UC1c6%sfuUoj@go7h+v{%CLV@{U(h9|7hQ@ONw5nATKI?{VZ9)lmH7y965 znfg^aBXLRbYtw?K)PL$!n)AWCQ}KBc(2YaMaADo$+*?dC0UNdUJgZuNYVQFlL%#HC zh!)CvB!oqg%i&;bC*VrOpbGafl!0e2!J02*VU6bpBH?~OdpsB!(0Im~rSW;((He{cu!rvYoJoCMFA?!!wF{!(*kVK+PM;T>{$LVJ{pDw7CX^$8l#OBM@|OZp%iH!e{)OEjA3wej z%b`5!Fz9i< zcA;(v3pMZabcN*;YDb#rhm>7_gm||1KcH0lenXxFp*O{>s_P=MW0ww@0+b!3O~_u) zL$hIcVnxT<+SMBjg_jDn%^HuMRLWf+YfFmyBb?GSc=g^^*Ivq>k_a4%9`yrZ zw8tC)f7$w_1_TFS$7!`?egs**?zZ)fi!Xv|xTJ!1Y zK30w!zW~T;?0@HjC01M*I=9fJccrf+UzqtHF1ps>;$PsV&(0!s|8wCG zRJ?tt%p6yZm#fLlW3@WFGe&R^1KT06g%7MHc8>RTiX)2`@(48Pe9vy&z9>+PM(hd=s#5yh}P>bw1HOjHEFLM2ehQ2hD{ zwZqR=W~4{6beXmR$c$6Drt_zS;qlACokd9W^et7W(2bq3(PNTuPqdNav+ZEL@cip~0kAcR?lqYT*?f&`cE>L5SAVz{lV^B33v`gZstjB&$ zYz+c-B5D}ol^%Q4-0Jc`y-XTc=$QgUd@QJus?}cj*wlnUYIcKMVd&M`yj4(KY;o$w5+)~GG=YN3k6Y>G5*t{iuloD5uKeKf&BNIE<5toe# zJ{*I$I-4mtGGG~eXWF7$+d1JMQ+CH8HW9!bYU-DIk4Y^IBb0m%vR`5gHQXb|ft(p5 z?Qm|op;g@N*a^QA6YQkXNL=NS!mr2D(~j0`BMyEB?I{iA5yx3&I@|9b%CobII{&sw z5+{4Z?0rnyKgeTAvp6}HBRRQ=|Hb6$suG*GE8~gi9t&}Uw4$rC(iPmZHNyj8F$Bf{C(WlM3RZmPnsucNt?RkoAyjBEi z=Cr2)HU*M`vcwmDM3l8VLs>LmLE-eEBgZa!+HT1lKsF50AgD?UVFE>Hdp6d(#{qM` zc{;F1#0@xmbCSs|ie0?cxjtfbsD1Tg>82ofEoABa4Va0$k}vNQ|=U1&a^AZ z-_kY_2=#VU6;97y2srz(x$U`J5sv5eRh2cY0qf>{kMCZ$;CXda7f%Wqf+#zo;H7Ar#0^Y*HpMnXb{lCkjN+ys(t`S^& zvx9SRKTkp@l#o&F#gk&x%G;1Yo2A5k>l&GtL8E!!WNllndEW~vT19do%C)0dc zCHYMAs+=!~xqLO*;IJ;#1#NB0?;wmE*gtn;y*nUTiO`pv zVSGpc=q3fkyczjCxN^PbS&RX#nRe`a<)7Tp_G@HOiHS^Qy24n<{I=&7Bh#z77=|=&5}7`!w=exG zu}?||u931N(~Xk5$0hDfKadfS;YRWE$sF%ZLyX{Qh@IsjdG>oq1ndook{Ew&w(s`b z#Icj$Eo1(DQ7F)KmyXoRpt04Bn{js7&c5Dl*J%yfUuu{8UQ>P4-U6bQWPVvkZ-{Kt zy>6u;W0qcR%+)f`Mssf<@9r$<+mv7RI2bc1D|tcKN`Ig0XtK9|=P*S*HXwF9fG6@U z&6vZ7@g(X8oD}O^)Qxp)YJL2u*TG2y0Ich0|M*?xTxA_GvZ^#X_n_LVhs2paBlH*P zs;y;brEgrdI26_QlgYXgBHr;{+DUQj$wwW^Sl=#?Xn`OXQc8U8!bk}NDrTSo9|A$9 zIaH446l09wkZY)}&WH&doe9@{K*x~H$k=&F5{%{%?J0$*AniE-QsxpP+w?4BS9Xm# z*rB2q8zbl@LMG9JYGLz|r8Vg`DgOH+?Ck7FTf*(JFBE2fJg*-RbbnBZ#?YMKo$fN* zpUKoeCJ_pWttm&^!}jsNuJ{Dmb+Dfy!ZbN;DC z*BwQ_PC0(=w8CH*0?`?)!|B_~zYUPkeu$y6A}BT^BtA`h^gr-*ynvnc-xDLNqi=M zSzcdvk|F_S8NkhAI^&2f1BN6#-6{!C*Es1G0?y__3TEq^zUCbbu(@z+Q*0K%SL%BT znF|uEIe^y-{+?QWO83%aKa(k&!=n*($_V?1$WVL6!w%3b9=&eWKBbf~UpyP7ikGic zKjp9vpYhm208PHD#&?}@>Zs2~Aup=O15z0y7E@1W{Qj3?Hf(9@cDiUpARv{Rf~^Em z4-mjHn=eQgYbA2bF8cE}#J=iqAkt(xC>6qv|JZOmvVD8{7L3BbC+4F(l4V#6eJ7av z-7)a=n?1R9odznW9b7q(r`%a-2AW%9{iz;O>~MSQ^rifOR~~BEJKrytt%lnQn^*fF z^x`ilzp_i=9%z}?gFV`<%`guZ?N%S$FMC7KJXKAOyk36byolVF7j;th26y+W6*22zAGNG# ziOao0b&WoeKcY{Pb2JIy&3FeABBZ}oiTeO-jE2%HPaR@E5FjRFoG^#5P*oIUB*q+=z;-`U$sR2 zZlm}g`Xu}VJo#(W?_cZwULaahN?PuGqhMs^t55ZawMvf-Zh}!7XHns&iM|5M-kxc3 z-Jc~9p#nS#;@x87*3o}2gd|yqj=d}oIu5qv-;j)knfFPu)fQq^Tm_9cnUt{Xa`dQL z+zZi0Rg-za_1tJh~N2)c7Hbn0;)~cU_5A5X^DD! z+yFfFURXO0T9_6P!H~vNRW&L9hl=bKg>cOD&uOtFBe&I_nF7S!Ys!CF;Ou1U96l5^ zNG{3^kv9b6_?i!GrgFvmM;=+bv~PN zSgZ)mBj0_VdlBRGp4C0n0&#K7(az08GXHxKvL_49+f=(%*9}8Y@>ytXW^P7DRxcnYv{J|#lb5En^s0e#@lGT1TVUWg8j`jhoEv4&xvFLhbQqSbPS z5g@9=pVoQ-`WhFDhJYNpPq{0_&>P641vQxj}ER+AqKtpy6 z(?83vUcO|1EQorm12vj0&Og#0KQblKqOj~kyj7ap!VX5B!wA%mQkv;0<18}{1nMbt19SM!&6H>v!zqx{I* z`R>dzq1>Fpii%#`5RX+ID{pn$DS42()g(WM&;_JhEcYxe&unctN}hg15-WF zo%=9cdSj$!-bG3>V%&q%vIZYlZk!wqA$fk+_*&>LvnO;ut3a-w^%8qO-#>BqKQB(o zRD4f~%D=&+WkHw8cx&(GAIpw$BpRLPs{SPUPT6cBce{C{cc%G&qQiWaZ`3ob4q2LJ#7 literal 0 HcmV?d00001 diff --git a/layers/+lang/markdown/packages.el b/layers/+lang/markdown/packages.el new file mode 100644 index 0000000..4048317 --- /dev/null +++ b/layers/+lang/markdown/packages.el @@ -0,0 +1,236 @@ +;;; packages.el --- Markdown Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq markdown-packages + '( + company + company-emoji + emoji-cheat-sheet-plus + gh-md + markdown-mode + markdown-toc + mmm-mode + smartparens + (vmd-mode :toggle (eq 'vmd markdown-live-preview-engine)) + )) + +(defun markdown/post-init-company () + (spacemacs|add-company-hook markdown-mode) + (push 'company-capf company-backends-markdown-mode)) + +(defun markdown/post-init-company-emoji () + (push 'company-emoji company-backends-markdown-mode)) + +(defun markdown/post-init-emoji-cheat-sheet-plus () + (add-hook 'markdown-mode-hook 'emoji-cheat-sheet-plus-display-mode)) + +(defun markdown/init-gh-md () + (use-package gh-md + :defer t + :init + (spacemacs/set-leader-keys-for-major-mode 'markdown-mode + "cr" 'gh-md-render-buffer))) + +(defun markdown/post-init-smartparens () + (add-hook 'markdown-mode-hook 'smartparens-mode)) + +(defun markdown/init-markdown-mode () + (use-package markdown-mode + :mode ("\\.m[k]d" . markdown-mode) + :defer t + :config + (progn + ;; stolen from http://stackoverflow.com/a/26297700 + ;; makes markdown tables saner via orgtbl-mode + (require 'org-table) + (defun cleanup-org-tables () + (save-excursion + (goto-char (point-min)) + (while (search-forward "-+-" nil t) (replace-match "-|-")))) + (add-hook 'markdown-mode-hook 'orgtbl-mode) + (add-hook 'markdown-mode-hook + (lambda() + (add-hook 'after-save-hook 'cleanup-org-tables nil 'make-it-local))) + ;; Insert key for org-mode and markdown a la C-h k + ;; from SE endless http://emacs.stackexchange.com/questions/2206/i-want-to-have-the-kbd-tags-for-my-blog-written-in-org-mode/2208#2208 + (defun spacemacs/insert-keybinding-markdown (key) + "Ask for a key then insert its description. +Will work on both org-mode and any mode that accepts plain html." + (interactive "kType key sequence: ") + (let* ((tag "~%s~")) + (if (null (equal key "\r")) + (insert + (format tag (help-key-description key nil))) + (insert (format tag "")) + (forward-char -6)))) + + ;; Declare prefixes and bind keys + (dolist (prefix '(("mc" . "markdown/command") + ("mh" . "markdown/header") + ("mi" . "markdown/insert") + ("ml" . "markdown/lists") + ("mx" . "markdown/text"))) + (spacemacs/declare-prefix-for-mode + 'markdown-mode (car prefix) (cdr prefix))) + (spacemacs/set-leader-keys-for-major-mode 'markdown-mode + ;; Movement + "{" 'markdown-backward-paragraph + "}" 'markdown-forward-paragraph + ;; Completion, and Cycling + "]" 'markdown-complete + ;; Indentation + ">" 'markdown-indent-region + "<" 'markdown-exdent-region + ;; Buffer-wide commands + "c]" 'markdown-complete-buffer + "cc" 'markdown-check-refs + "ce" 'markdown-export + "cm" 'markdown-other-window + "cn" 'markdown-cleanup-list-numbers + "co" 'markdown-open + "cp" 'markdown-preview + "cv" 'markdown-export-and-preview + "cw" 'markdown-kill-ring-save + ;; headings + "hi" 'markdown-insert-header-dwim + "hI" 'markdown-insert-header-setext-dwim + "h1" 'markdown-insert-header-atx-1 + "h2" 'markdown-insert-header-atx-2 + "h3" 'markdown-insert-header-atx-3 + "h4" 'markdown-insert-header-atx-4 + "h5" 'markdown-insert-header-atx-5 + "h6" 'markdown-insert-header-atx-6 + "h!" 'markdown-insert-header-setext-1 + "h@" 'markdown-insert-header-setext-2 + ;; Insertion of common elements + "-" 'markdown-insert-hr + "if" 'markdown-insert-footnote + "ii" 'markdown-insert-image + "ik" 'spacemacs/insert-keybinding-markdown + "iI" 'markdown-insert-reference-image + "il" 'markdown-insert-link + "iL" 'markdown-insert-reference-link-dwim + "iw" 'markdown-insert-wiki-link + "iu" 'markdown-insert-uri + ;; Element removal + "k" 'markdown-kill-thing-at-point + ;; List editing + "li" 'markdown-insert-list-item + ;; region manipulation + "xb" 'markdown-insert-bold + "xi" 'markdown-insert-italic + "xc" 'markdown-insert-code + "xC" 'markdown-insert-gfm-code-block + "xq" 'markdown-insert-blockquote + "xQ" 'markdown-blockquote-region + "xp" 'markdown-insert-pre + "xP" 'markdown-pre-region + ;; Following and Jumping + "N" 'markdown-next-link + "f" 'markdown-follow-thing-at-point + "P" 'markdown-previous-link + "" 'markdown-jump) + (when (eq 'eww markdown-live-preview-engine) + (spacemacs/set-leader-keys-for-major-mode 'markdown-mode + "cP" 'markdown-live-preview-mode)) + ;; Header navigation in normal state movements + (evil-define-key 'normal markdown-mode-map + "gj" 'outline-forward-same-level + "gk" 'outline-backward-same-level + "gh" 'outline-up-heading + ;; next visible heading is not exactly what we want but close enough + "gl" 'outline-next-visible-heading) + ;; Promotion, Demotion + (define-key markdown-mode-map (kbd "M-h") 'markdown-promote) + (define-key markdown-mode-map (kbd "M-j") 'markdown-move-down) + (define-key markdown-mode-map (kbd "M-k") 'markdown-move-up) + (define-key markdown-mode-map (kbd "M-l") 'markdown-demote)))) + +(defun markdown/init-markdown-toc () + (use-package markdown-toc + :defer t)) + +(defun markdown/init-mmm-mode () + (use-package mmm-mode + :commands mmm-parse-buffer + :init + (spacemacs/set-leader-keys-for-major-mode 'markdown-mode + ;; Highlight code blocks + "cs" 'mmm-parse-buffer) + :config + (progn + (mmm-add-classes '((markdown-python + :submode python-mode + :face mmm-declaration-submode-face + :front "^```python[\n\r]+" + :back "^```$"))) + (mmm-add-classes '((markdown-html + :submode web-mode + :face mmm-declaration-submode-face + :front "^```html[\n\r]+" + :back "^```$"))) + (mmm-add-classes '((markdown-java + :submode java-mode + :face mmm-declaration-submode-face + :front "^```java[\n\r]+" + :back "^```$"))) + (mmm-add-classes '((markdown-ruby + :submode ruby-mode + :face mmm-declaration-submode-face + :front "^```ruby[\n\r]+" + :back "^```$"))) + (mmm-add-classes '((markdown-c + :submode c-mode + :face mmm-declaration-submode-face + :front "^```c[\n\r]+" + :back "^```$"))) + (mmm-add-classes '((markdown-c++ + :submode c++-mode + :face mmm-declaration-submode-face + :front "^```c\+\+[\n\r]+" + :back "^```$"))) + (mmm-add-classes '((markdown-elisp + :submode emacs-lisp-mode + :face mmm-declaration-submode-face + :front "^```elisp[\n\r]+" + :back "^```$"))) + (mmm-add-classes '((markdown-javascript + :submode javascript-mode + :face mmm-declaration-submode-face + :front "^```javascript[\n\r]+" + :back "^```$"))) + (mmm-add-classes '((markdown-ess + :submode R-mode + :face mmm-declaration-submode-face + :front "^```{?r.*}?[\n\r]+" + :back "^```$"))) + (mmm-add-classes '((markdown-rust + :submode rust-mode + :face mmm-declaration-submode-face + :front "^```rust[\n\r]+" + :back "^```$"))) + (setq mmm-global-mode t) + (mmm-add-mode-ext-class 'markdown-mode nil 'markdown-python) + (mmm-add-mode-ext-class 'markdown-mode nil 'markdown-java) + (mmm-add-mode-ext-class 'markdown-mode nil 'markdown-ruby) + (mmm-add-mode-ext-class 'markdown-mode nil 'markdown-c) + (mmm-add-mode-ext-class 'markdown-mode nil 'markdown-c++) + (mmm-add-mode-ext-class 'markdown-mode nil 'markdown-elisp) + (mmm-add-mode-ext-class 'markdown-mode nil 'markdown-html) + (mmm-add-mode-ext-class 'markdown-mode nil 'markdown-javascript) + (mmm-add-mode-ext-class 'markdown-mode nil 'markdown-ess) + (mmm-add-mode-ext-class 'markdown-mode nil 'markdown-rust)))) + +(defun markdown/init-vmd-mode () + (use-package vmd-mode + :defer t + :init (spacemacs/set-leader-keys-for-major-mode 'markdown-mode + "cP" 'vmd-mode))) diff --git a/layers/+lang/nim/README.org b/layers/+lang/nim/README.org new file mode 100644 index 0000000..e96ba8e --- /dev/null +++ b/layers/+lang/nim/README.org @@ -0,0 +1,37 @@ +#+TITLE: Nim layer + +[[file:img/logo.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#working-with-nim][Working with Nim]] + - [[#nim-commands-start-with-m][Nim commands (start with =m=):]] + +* Description +This layer provides the following features for Nim: + +- Code completion. +- Jump to definition. +- Syntax checking. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =nim= to the existing =dotspacemacs-configuration-layers= list in this +file. + +For syntax checking, the =syntax-checking= layer must also be added. + +For all the features to work properly, =nimsuggest= must be installed properly +and =nimsuggest= binary must be in $PATH. + +* Working with Nim + +** Nim commands (start with =m=): + +| Key Binding | Description | +|----------------------+----------------------------| +| ~SPC m c r~ | nim compile --run main.nim | +| ~SPC m g g~ or ~M-.~ | Jump to definition | +| ~SPC m g b~ or ~M-,~ | Jump back | +|----------------------+----------------------------| diff --git a/layers/+lang/nim/config.el b/layers/+lang/nim/config.el new file mode 100644 index 0000000..ac78366 --- /dev/null +++ b/layers/+lang/nim/config.el @@ -0,0 +1,17 @@ +;;; packages.el --- Nim Configuration Layer for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Max Gonzih +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(spacemacs|defvar-company-backends nim-mode) +(spacemacs|defvar-company-backends nimscript-mode) + +(spacemacs|define-jump-handlers nim-mode) diff --git a/layers/+lang/nim/img/logo.png b/layers/+lang/nim/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9cd41df4b8d5ff117986d9f068c4ac8e67224a50 GIT binary patch literal 20440 zcmV*aKvlnqP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 T&b*tT00000NkvXXu0mjfnaokU literal 0 HcmV?d00001 diff --git a/layers/+lang/nim/packages.el b/layers/+lang/nim/packages.el new file mode 100644 index 0000000..04450d4 --- /dev/null +++ b/layers/+lang/nim/packages.el @@ -0,0 +1,35 @@ +(setq nim-packages + '(company + flycheck + flycheck-nim + nim-mode)) + +(defun nim/post-init-company () + (spacemacs|add-company-hook nim-mode) + (spacemacs|add-company-hook nimscript-mode)) + +(defun nim/post-init-flycheck () + (spacemacs/add-flycheck-hook 'nim-mode)) + +(defun nim/init-flycheck-nim () + (use-package flycheck-nim + :if (configuration-layer/package-usedp 'flycheck))) + +(defun nim/init-nim-mode () + (use-package nim-mode + :defer t + :init + (progn + (when (configuration-layer/package-usedp 'company) + (push 'company-capf company-backends-nim-mode)) + (add-hook 'nim-mode-hook 'nimsuggest-mode) + (push 'nimsuggest-find-definition spacemacs-jump-handlers-nim-mode)) + :config + (progn + (defun spacemacs/nim-compile-run () + (interactive) + (shell-command "nim compile --run main.nim")) + + (spacemacs/set-leader-keys-for-major-mode 'nim-mode + "cr" 'spacemacs/nim-compile-run + "gb" 'pop-tag-mark)))) diff --git a/layers/+lang/ocaml/README.org b/layers/+lang/ocaml/README.org new file mode 100644 index 0000000..7e2c0c5 --- /dev/null +++ b/layers/+lang/ocaml/README.org @@ -0,0 +1,95 @@ +#+TITLE: Ocaml layer + +[[file:img/ocaml.png]] + +* Table of Content :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features:]] + - [[#install][Install]] + - [[#layer][Layer]] + - [[#opam-packages][OPAM packages]] + - [[#key-bindings][Key Bindings]] + - [[#repl-utop][REPL (utop)]] + - [[#todos][TODOS]] + - [[#add-more-proper-spacemacs-key-bindings-for-basic-merlin-tasks][Add more proper spacemacs key-bindings for basic merlin tasks]] + - [[#add-proper-keybindings-for-ocamldebug][Add proper keybindings for ocamldebug]] + - [[#add-more-keybindings-for-tuareg-mode][Add more keybindings for tuareg-mode]] + +* Description +This is a very basic layer for editing ocaml files. + +** Features: +- Syntax highlighting (major-mode) via [[https://github.com/ocaml/tuareg][tuareg-mode]] +- Error reporting, completion and type display via [[https://github.com/the-lambda-church/merlin][merlin]] +- auto-completion with company mode via [[https://github.com/the-lambda-church/merlin][merlin]] +- syntax-checking via [[https://github.com/diml/utop][flycheck-ocaml]] + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =ocaml= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** OPAM packages +This layer requires some [[http://opam.ocaml.org][opam]] packages: + +- =merlin= for auto-completion +- =utop= +- =ocp-indent= + +To install them, use the following command: + +#+BEGIN_SRC sh + opam install merlin utop ocp-indent +#+END_SRC + +Make sure opam is initialized and configured. + +#+begin_src sh + opam init + opam config setup -a +#+end_src + +* Key Bindings + +| Key Binding | Description | +|-------------+----------------------------------------------------------| +| ~SPC m =~ | Indent buffer. | +| ~SPC m c c~ | Compile | +| ~SPC m c p~ | Check .merlin for errors | +| ~SPC m c r~ | Refresh changed .cmis in merlin | +| ~SPC m e C~ | Check for errors in current buffer | +| ~SPC m e n~ | Jump to next error | +| ~SPC m e N~ | Jump back to previous error | +| ~SPC m g a~ | Switch ML <-> MLI | +| ~SPC m g b~ | Go back to the last position where the user did a locate | +| ~SPC m g g~ | Locate the identifier under point (same window) | +| ~SPC m g G~ | Locate the identifier under point (different window) | +| ~SPC m g o~ | List occurrences for identifier under point | +| ~SPC m g l~ | Prompt for identifier and locate | +| ~SPC m g i~ | Prompt for module name and switch to ML file | +| ~SPC m g I~ | Prompt for module name and switch to MLI file | +| ~SPC m h h~ | Document the identifier under point | +| ~SPC m h t~ | Highlight identifier under cursor and print its type | +| ~SPC m h T~ | Prompt for expression and show its type | +| ~SPC m r d~ | Case analyze the current enclosing | + +** REPL (utop) + +| Key Binding | Description | +|-------------+------------------------------------------------------------------| +| ~SPC m s b~ | Send buffer to the REPL | +| ~SPC m s B~ | Send buffer to the REPL and switch to the REPL in =insert state= | +| ~SPC m s i~ | Start a REPL | +| ~SPC m s p~ | Send phrase to the REPL | +| ~SPC m s P~ | Send phrase to the REPL and switch to the REPL in =insert state= | +| ~SPC m s r~ | Send region to the REPL | +| ~SPC m s R~ | Send region to the REPL and switch to the REPL in =insert state= | +| ~C-j~ | (in REPL) next item in history | +| ~C-k~ | (in REPL) previous item in history | + +* TODOS + +** TODO Add more proper spacemacs key-bindings for basic merlin tasks +** TODO Add proper keybindings for ocamldebug +** TODO Add more keybindings for tuareg-mode diff --git a/layers/+lang/ocaml/config.el b/layers/+lang/ocaml/config.el new file mode 100644 index 0000000..845829a --- /dev/null +++ b/layers/+lang/ocaml/config.el @@ -0,0 +1,14 @@ +;;; config.el --- ocaml Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|defvar-company-backends merlin-mode) + +(spacemacs|define-jump-handlers tuareg-mode) diff --git a/layers/+lang/ocaml/funcs.el b/layers/+lang/ocaml/funcs.el new file mode 100644 index 0000000..88ed66d --- /dev/null +++ b/layers/+lang/ocaml/funcs.el @@ -0,0 +1,34 @@ +;;; funcs.el --- ocaml Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs//init-ocaml-opam () + (if (executable-find "opam") + (let* ((output (shell-command-to-string + "opam config var share 2> /dev/null")) + (share (when (< 0 (length output)) + (substring output 0 -1)))) + (when share + (setq opam-share share + opam-load-path (concat share "/emacs/site-lisp"))) + (add-to-list 'load-path opam-load-path)) + (spacemacs-buffer/warning + (concat "Cannot find \"opam\" executable. " + "The ocaml layer won't work properly.")))) + +(defun spacemacs/merlin-locate () + (interactive) + (let ((merlin-locate-in-new-window 'never)) + (merlin-locate))) + +(defun spacemacs/merlin-locate-other-window () + (interactive) + (let ((merlin-locate-in-new-window 'always)) + (merlin-locate))) diff --git a/layers/+lang/ocaml/img/ocaml.png b/layers/+lang/ocaml/img/ocaml.png new file mode 100644 index 0000000000000000000000000000000000000000..2b0d2ea12d03140379fce305a1d8625f6fc22c6a GIT binary patch literal 19485 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/ocaml/packages.el b/layers/+lang/ocaml/packages.el new file mode 100644 index 0000000..311e599 --- /dev/null +++ b/layers/+lang/ocaml/packages.el @@ -0,0 +1,158 @@ +;;; packages.el --- ocaml Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq ocaml-packages + '( + ;; auto-complete + company + ;; flycheck + ;; flycheck-ocaml + ggtags + helm-gtags + merlin + ocp-indent + smartparens + tuareg + utop + )) + +(defun ocaml/post-init-company () + (spacemacs|add-company-hook merlin-mode)) + +(when (configuration-layer/layer-usedp 'syntax-checking) + (defun ocaml/post-init-flycheck () + (spacemacs/add-flycheck-hook 'merlin-mode)) + (defun ocaml/init-flycheck-ocaml () + (use-package flycheck-ocaml + :if (configuration-layer/package-usedp 'flycheck) + :defer t + :init + (progn + (with-eval-after-load 'merlin + (setq merlin-error-after-save nil) + (flycheck-ocaml-setup)))))) + +(defun ocaml/post-init-ggtags () + (add-hook 'ocaml-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun ocaml/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'ocaml-mode)) + +(defun ocaml/init-merlin () + (use-package merlin + :defer t + :init + (progn + (add-to-list 'spacemacs-jump-handlers-tuareg-mode + 'spacemacs/merlin-locate) + (add-hook 'tuareg-mode-hook 'merlin-mode) + (setq merlin-completion-with-doc t) + (push 'merlin-company-backend company-backends-merlin-mode) + (spacemacs/set-leader-keys-for-major-mode 'tuareg-mode + "cp" 'merlin-project-check + "cv" 'merlin-goto-project-file + "eC" 'merlin-error-check + "en" 'merlin-error-next + "eN" 'merlin-error-prev + "gb" 'merlin-pop-stack + "gG" 'spacemacs/merlin-locate-other-window + "gl" 'merlin-locate-ident + "gi" 'merlin-switch-to-ml + "gI" 'merlin-switch-to-mli + "go" 'merlin-occurrences + "hh" 'merlin-document + "ht" 'merlin-type-enclosing + "hT" 'merlin-type-expr + "rd" 'merlin-destruct) + (spacemacs/declare-prefix-for-mode 'tuareg-mode "mc" "compile/check") + (spacemacs/declare-prefix-for-mode 'tuareg-mode "me" "errors") + (spacemacs/declare-prefix-for-mode 'tuareg-mode "mg" "goto") + (spacemacs/declare-prefix-for-mode 'tuareg-mode "mh" "help") + (spacemacs/declare-prefix-for-mode 'tuareg-mode "mr" "refactor")))) + +(defun ocaml/init-ocp-indent () + (use-package ocp-indent + :defer t + :init + (add-hook 'tuareg-mode-hook 'ocp-indent-caml-mode-setup) + (spacemacs/set-leader-keys-for-major-mode 'tuareg-mode + "=" 'ocp-indent-buffer))) + +(defun ocaml/post-init-smartparens () + (with-eval-after-load 'smartparens + ;; don't auto-close apostrophes (type 'a = foo) and backticks (`Foo) + (sp-local-pair 'tuareg-mode "'" nil :actions nil) + (sp-local-pair 'tuareg-mode "`" nil :actions nil))) + +(defun ocaml/init-tuareg () + (use-package tuareg + :mode (("\\.ml[ily]?$" . tuareg-mode) + ("\\.topml$" . tuareg-mode)) + :defer t + :init + (progn + (spacemacs//init-ocaml-opam) + (spacemacs/set-leader-keys-for-major-mode 'tuareg-mode + "ga" 'tuareg-find-alternate-file + "cc" 'compile) + ;; Make OCaml-generated files invisible to filename completion + (dolist (ext '(".cmo" ".cmx" ".cma" ".cmxa" ".cmi" ".cmxs" ".cmt" ".cmti" ".annot")) + (add-to-list 'completion-ignored-extensions ext))))) + +(defun ocaml/init-utop () + (use-package utop + :defer t + :init + (progn + (add-hook 'tuareg-mode-hook 'utop-minor-mode) + (spacemacs/register-repl 'utop 'utop "ocaml")) + :config + (progn + (if (executable-find "opam") + (setq utop-command "opam config exec -- utop -emacs") + (spacemacs-buffer/warning "Cannot find \"opam\" executable.")) + + (defun spacemacs/utop-eval-phrase-and-go () + "Send phrase to REPL and evaluate it and switch to the REPL in +`insert state'" + (interactive) + (utop-eval-phrase) + (utop) + (evil-insert-state)) + + (defun spacemacs/utop-eval-buffer-and-go () + "Send buffer to REPL and evaluate it and switch to the REPL in +`insert state'" + (interactive) + (utop-eval-buffer) + (utop) + (evil-insert-state)) + + (defun spacemacs/utop-eval-region-and-go (start end) + "Send region to REPL and evaluate it and switch to the REPL in +`insert state'" + (interactive "r") + (utop-eval-region start end) + (utop) + (evil-insert-state)) + + (spacemacs/set-leader-keys-for-major-mode 'tuareg-mode + "'" 'utop + "sb" 'utop-eval-buffer + "sB" 'spacemacs/utop-eval-buffer-and-go + "si" 'utop + "sp" 'utop-eval-phrase + "sP" 'spacemacs/utop-eval-phrase-and-go + "sr" 'utop-eval-region + "sR" 'spacemacs/utop-eval-region-and-go) + (spacemacs/declare-prefix-for-mode 'tuareg-mode "ms" "send")) + (define-key utop-mode-map (kbd "C-j") 'utop-history-goto-next) + (define-key utop-mode-map (kbd "C-k") 'utop-history-goto-prev))) diff --git a/layers/+lang/octave/README.org b/layers/+lang/octave/README.org new file mode 100644 index 0000000..6f3e7bf --- /dev/null +++ b/layers/+lang/octave/README.org @@ -0,0 +1,42 @@ +#+TITLE: Octave layer + +[[file:img/octave.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + - [[#inferior-repl-process][Inferior REPL process]] + - [[#helpers][Helpers]] + +* Description +This layer activates [[info:octave-mode][octave-mode]] for files with =.m= +extensions and configures spacemacs-style key bindings. + +* Install +Make sure that [[https://gnu.org/software/octave/][GNU Octave]] is installed and +in your PATH. For information about setting up $PATH, check out the +corresponding section in the FAQ (=SPC h SPC $PATH RET=). + +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =octave= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key bindings +** Inferior REPL process +Send code to inferior process with these commands: + +| Key | Description | +|-------------+---------------------------------------| +| ~SPC m s b~ | send buffer | +| ~SPC m s f~ | send function | +| ~SPC m s i~ | start/switch to REPL inferior process | +| ~SPC m s l~ | send line | +| ~SPC m s r~ | send region | + +** Helpers + +| Key Binding | Description | +|-------------+------------------------------------------| +| ~SPC m h h~ | view documentation for function at point | +| ~SPC m h i~ | read octave info documentation | diff --git a/layers/+lang/octave/config.el b/layers/+lang/octave/config.el new file mode 100644 index 0000000..d49504c --- /dev/null +++ b/layers/+lang/octave/config.el @@ -0,0 +1,14 @@ +;;; packages.el --- Octave Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|define-jump-handlers octave-mode) diff --git a/layers/+lang/octave/img/octave.png b/layers/+lang/octave/img/octave.png new file mode 100644 index 0000000000000000000000000000000000000000..d08046e40be5f75a603f541c9424cfa8e1a3bf2a GIT binary patch literal 9901 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/octave/packages.el b/layers/+lang/octave/packages.el new file mode 100644 index 0000000..648fc47 --- /dev/null +++ b/layers/+lang/octave/packages.el @@ -0,0 +1,40 @@ +;;; packages.el --- Octave Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq octave-packages + '( + ggtags + helm-gtags + (octave :location built-in) + )) + +(defun octave/init-octave () + (use-package octave + :mode ("\\.m\\'" . octave-mode) + :commands (run-octave) + :init (spacemacs/register-repl 'octave 'run-octave "octave") + :config (spacemacs/set-leader-keys-for-major-mode 'octave-mode + ;; helpers + "hh" 'octave-help + "hi" 'octave-lookfor + ;; REPL + "'" 'run-octave + "sb" 'octave-send-buffer + "sf" 'octave-send-defun + "si" 'run-octave + "sl" 'octave-send-line + "sr" 'octave-send-region))) + +(defun octave/post-init-ggtags () + (add-hook 'octave-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun octave/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'octave-mode)) diff --git a/layers/+lang/php/README.org b/layers/+lang/php/README.org new file mode 100644 index 0000000..b06407e --- /dev/null +++ b/layers/+lang/php/README.org @@ -0,0 +1,31 @@ +#+TITLE: PHP layer + +[[file:img/php.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#features][Features:]] + - [[#install][Install]] + - [[#key-bindings][Key bindings]] + +* Description + +This layer adds PHP language support to Spacemacs. + +** Features: +- Edit PHP files using [[https://github.com/ejmr/php-mode][php-mode]] +- Edit Drupal files +- Run tests with PHPUnit +- Reformat code with PHP CBF + +The =gtags= layer is recommended to benefit from better =eldoc= and +=helm-gtags=. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =php= to the existing =dotspacemacs-configuration-layers= list in this +file. + +* Key bindings + +TODO ! :-) diff --git a/layers/+lang/php/config.el b/layers/+lang/php/config.el new file mode 100644 index 0000000..6cfefb4 --- /dev/null +++ b/layers/+lang/php/config.el @@ -0,0 +1,16 @@ +;;; config.el --- PHP Layer config File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Kosta Harlan +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|defvar-company-backends php-mode) + +(spacemacs|define-jump-handlers php-mode) diff --git a/layers/+lang/php/img/php.png b/layers/+lang/php/img/php.png new file mode 100644 index 0000000000000000000000000000000000000000..8385a08cc68dc9b9ac9eb31b047273865e52a306 GIT binary patch literal 14648 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 XzW&1 +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq php-packages + '( + company + drupal-mode + eldoc + flycheck + ggtags + helm-gtags + php-auto-yasnippets + (php-extras :location (recipe :fetcher github :repo "arnested/php-extras")) + php-mode + phpcbf + phpunit + )) + +(defun php/post-init-company () + (spacemacs|add-company-hook php-mode)) + +(defun php/init-drupal-mode () + (use-package drupal-mode + :defer t)) + +(defun php/post-init-eldoc () + (add-hook 'php-mode-hook 'eldoc-mode)) + +(defun php/post-init-flycheck () + (spacemacs/add-flycheck-hook 'php-mode)) + +(defun php/post-init-ggtags () + (add-hook 'php-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun php/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'php-mode)) + +(defun php/init-php-auto-yasnippets () + (use-package php-auto-yasnippets + :defer t)) + +(defun php/init-php-extras () + (use-package php-extras + :defer t)) + +(defun php/init-php-mode () + (use-package php-mode + :defer t + :mode ("\\.php\\'" . php-mode))) + +(defun php/init-phpcbf () + (use-package phpcbf + :defer t)) + +(defun php/init-phpunit () + (use-package phpunit + :defer t)) diff --git a/layers/+lang/plantuml/README.org b/layers/+lang/plantuml/README.org new file mode 100644 index 0000000..8f00f2c --- /dev/null +++ b/layers/+lang/plantuml/README.org @@ -0,0 +1,51 @@ +#+TITLE: plantuml layer +[[file:img/logo.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#org-babel-integration][Org-Babel Integration]] + - [[#key-bindings][Key bindings]] + +* Description +This layer enables support for [[https://github.com/skuro/plantuml-mode][plantuml-mode]], which provides +a major-mode for [[http://plantuml.com][plantuml]]. PlantUML is a tool to generate [[https://en.wikipedia.org/wiki/Unified_Modeling_Language][UML diagrams]] from plain-text. + +For help with how to use plantuml, see the [[http://plantuml.com][plantuml website]] and the [[http://plantuml.com/PlantUML_Language_Reference_Guide.pdf][reference guide]]. + +The official file extension supported by this layer is =.pum=. If you want something else, +set it in your =user-config= function of your =~/.spacemacs= file. + +For example, the following diagram can be defined as follows: + +#+BEGIN_SRC plantuml +@startuml +JAremko->robbyoconnor : I think the docs can benefit from some kind of illustration +JAremko<-robbyoconnor : I'm too lazy -- I have actual work to do. I link to the docs. If you can write me a diagram in plantuml, I'll gladly compile and add it. +JAremko->robbyoconnor : *gives ths diagram* +robbyoconnor<-JAremko : *robbyoconnor adds it and JAremko is happy* +... +robbyoconnor->theOtherPerson : And they thinks it's funny? Yup, they definitely finds it funny. Right? +@enduml +#+END_SRC + +[[file:img/dia.png]] + +* Install +To use this contribution add it to your =~/.spacemacs= + +#+begin_src emacs-lisp + (setq-default dotspacemacs-configuration-layers '(plantuml)) +#+end_src + +* Org-Babel Integration + +To enable the execution of embedded plantuml code blocks within [[http://orgmode.org/][Org-Mode]] +documents, define a value for =org-plantuml-jar-path= in your =~/.spacemacs=. + +* Key bindings + +| Key Binding | Description | +|--------------------------+-------------------------------------------------------| +| ~SPC m c c~ or ~C-c C-c~ | Build diagram from the text in the current buffer | +| ~SPC m c o~ | Set the output type (~unicode text~, ~svg~, or ~png~) | diff --git a/layers/+lang/plantuml/img/dia.png b/layers/+lang/plantuml/img/dia.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a8e70b31ffea957ceffb89e5049dd44a61aa8c GIT binary patch literal 16790 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 CWNcOd literal 0 HcmV?d00001 diff --git a/layers/+lang/plantuml/img/logo.png b/layers/+lang/plantuml/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..214b4ed6d5624dfa776ab82c451554640644cf38 GIT binary patch literal 3169 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 Hu0mjfgp4wq literal 0 HcmV?d00001 diff --git a/layers/+lang/plantuml/packages.el b/layers/+lang/plantuml/packages.el new file mode 100644 index 0000000..9972389 --- /dev/null +++ b/layers/+lang/plantuml/packages.el @@ -0,0 +1,32 @@ +;;; packages.el --- plantuml layer packages file for Spacemacs. +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Robert O'Connor +;; Contributor: Carlo Sciolla +;; URL: https://github.com/robbyoconnor +;; +;;; Commentary: +;; +;; Adds PlantUML support to Spacemacs using plantuml-mode. +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +;;; Code: +(defconst plantuml-packages + '(org + plantuml-mode)) + +(defun plantuml/post-init-org () + (spacemacs|use-package-add-hook org + :post-config (add-to-list 'org-babel-load-languages '(plantuml . t)))) + +(defun plantuml/init-plantuml-mode () + (use-package plantuml-mode + :defer t + :mode ("\\.pum\\'" . plantuml-mode) + :config (spacemacs/set-leader-keys-for-major-mode 'plantuml-mode + "cc" 'plantuml-preview + "co" 'plantuml-set-output-type))) diff --git a/layers/+lang/purescript/README.org b/layers/+lang/purescript/README.org new file mode 100644 index 0000000..bfe7961 --- /dev/null +++ b/layers/+lang/purescript/README.org @@ -0,0 +1,81 @@ +#+TITLE: Purescript layer + +[[file:img/purescript-logo.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#configuration][Configuration]] + - [[#add-import-on-completion][Add import on completion]] + - [[#error-popup][Error popup]] + - [[#key-bindings][Key bindings]] + - [[#purescript][Purescript]] + - [[#imports][Imports]] + - [[#psc-ide][psc-ide]] + - [[#repl][REPL]] + +* Description + +This layer provides basic Purescript editing support for spacemacs +thanks to the following packages: +- [[https://github.com/dysinger/purescript-mode][purescript-mode]] +- [[https://github.com/ardumont/emacs-psci][psci]] +- [[https://github.com/epost/psc-ide-emacs][psc-ide-emacs]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =purescript= to the existing =dotspacemacs-configuration-layers= list in +this file. + +You'll also need to make sure the PureScript compiler and its associated +binaries (psc-ide-server, psci,...) are on your path. Installation instructions +can be found [[http://www.purescript.org/download/][here]]. + +* Configuration +** Add import on completion +Set =purescript-add-import-on-completion= to nil to make =psc-ide= stop adding +imports on completion. Default value it =t=. + +** Error popup +If you set =purescript-enable-rebuild-on-save= to non-nil, you will get a popup +buffer showing you your current warnings/errors one at a time. This is primarily +meant as an alternative to using flycheck. Default value is nil. + +* Key bindings +** Purescript +*** Imports + +| Key Binding | Description | +|-------------+---------------------------------------------------------------| +| ~SPC m i =~ | Format imports | +| ~SPC m i \~ | Return to where you were editing before navigating to imports | +| ~SPC m i a~ | Align imports | +| ~SPC m i n~ | Navigate to the imports | + +*** psc-ide +=psc-ide= command are available under ~SPC m m~: + +| Key Binding | Description | +|---------------+---------------------------------------------------------------------------| +| ~SPC m m s~ | Start psc-ide-server | +| ~SPC m m l~ | Load definitions for the modules inside your project | +| ~SPC m h t~ | Show type at point | +| ~SPC m g g~ | Goto definition for identifier at point | +| ~SPC m m b~ | Rebuilds the current file and displays any warnings or errors | +| ~SPC m m i a~ | Add an import for the identifier at the current cursor position | +| ~SPC m m i s~ | Inserts a suggestion for the warning/error at the current cursor position | +| ~SPC m m t~ | Add a new clause for the function signature at point | +| ~SPC m m c s~ | Casesplits on the identifier at the current cursor position | +| ~SPC m m q~ | Quit the current psc-ide-server | +| ~SPC m m L~ | Load a specific module (This is mostly used for troubleshooting) | + +** REPL +[[https://github.com/ardumont/emacs-psci][psci]] provides a very basic REPL for purescript. The following key +bindings are available: + +| Key Binding | Description | +|-------------+----------------------------------------------------------------------------------| +| ~SPC m s b~ | Equivalent of =:m /path/to/current/module/file.purs= - Load for importing | +| ~SPC m s i~ | Launch a psci console buffer | +| ~SPC m s m~ | Equivalent of =:i your.current.module.name= - Import for use in PSCI | +| ~SPC m s p~ | Load or reload files defined in the project file .psci | diff --git a/layers/+lang/purescript/config.el b/layers/+lang/purescript/config.el new file mode 100644 index 0000000..0eaeea0 --- /dev/null +++ b/layers/+lang/purescript/config.el @@ -0,0 +1,20 @@ +;;; config.el --- Purescript Layer config File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Ryan L. Bell +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(spacemacs|defvar-company-backends purescript-mode) + +(spacemacs|define-jump-handlers purescript-mode) + +(defvar purescript-add-import-on-completion t + "If non-nil adds imports for completed identifiers") + +(defvar purescript-enable-rebuild-on-save nil + "If non-nil rebuild on save is enabled") diff --git a/layers/+lang/purescript/img/purescript-logo.png b/layers/+lang/purescript/img/purescript-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..092b11caf929cc5b87f736c4dec7e55302f1b3bd GIT binary patch literal 7647 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 z zMLi5~B1Cx9{{X7oeUga7IqP=1b?AQ-WQcnSOjqVoE03o`$Sw z8t5bgyZX`Q41n2M4pWXMaGA5JY)+e9Moz1XhavV>@(+}wj6ZpO>mfciJKyE9!Ew%i zH(~Q$WOznIfp!@fwrlIUVb){hd|aGG(QR7KVaAk8tg436(M>Y_GCI-^&W0Tpl{5<{ zNqD}r@^i&oPp5ScCi+|mOqaN&P|W4ofQ#?CG83qR@&moKSC-q|+k@wGl7#gyI+A19 zx#=rDIX+IsJ<)LXh)EO;V3G=0uzKe-btn=)a-0$@|JI;FC6>_S-S8WVt+C>%9pH`e z-DlbQSlf5GGG?Z_0c#_0kq^z3vb1lw-&Ex~o|k$>J!`aUZ=)2rNyv|F6#lXo)y*fl zYMsM@ieIry9&}#2^dihT<6q+fOgmYy@ONNLyBY$#*^?}ALq2S}B$S{K!rB{6jIFRi=xD($Qu+IMB}P!Gk|o=QAnd zRG=+lQj?SHc7fOU!eJ2!2}?4}!PDXjrp_gjt7*|3w6<oL30pQLZ&DYq&eGmi8~}#h0`61f&u!gJ&X`;C&hh55Jjtb_s+L0f9_X*RakF!& zr6s&v`8xP4Se|2EFi)!Xow8i-((bvucH$bTs-X&h`@H&R7qE?ao}Dp_I+FV!yl`?( zBe&VPW^uD}q%!Q4|6!fS(KJYX;GxAd=2?(cB&+9iUTABs6w(&hQJTK6h4$kBe$ELYIy=ak#50PddQTDaIy})zZ zk?7TnZTPqAq|Vg!Tg__#0Jr<@%BZ)gWbQ2sDvD=m{f4`be#&^MdYj{b*29-%L!3+A-N^Z7ArCgt)*9BbeN>da%tq4;%JF7-RGQ!b|uJ-8teNmJ6ve*G_mjI7yA@x><;E&U& z;o%`>NskSOoe^zlq?{m&7H{a$T``EIQdepXG{baB9i(7oW93)|ni=*z+*or&_r^i? zXfplD3E@6F;hL$zirdL}$n?(h%DHq*F+VtI&`1hXxj}k&*5^uc4m?n8zoYd#&MZf% z0&wDPETOF+=gNLAT)zOLm^&}KdMoeyZ7RG^5vyY z#+S2+vu?BA;ozAH{1j&j<}3~omx^#ocsdNfs|?-K#^maqg;nKV?p@WPY*2m$!J$UR z8lO*2Es+k~-VI;*x&of;!;ClQ(@Nf$<~vmLl++proDBwev`a0yB$%mLzc({tc`r`l zy~QvFaMP$slMURIz$l10#tRztE!PLr^@A_IY;AR^^49^zcA#4?6L=5(QP_(X%5&At znT9X|sqd6S)t`B4DZV=p5`7BgG>48UJmwakdR=+66iK+G@7)&@@KUr@&izdluOBZ1 zr7FBUdwRai;>e6GYL=$-O*LfJ2bI4RD>40G!5dw{X&{FQ&Xb>Xfhxxr6c!7#AI93NkVlj+`38?h$}o{DxtkBn4CU2g40l90gB#BGFw+Gc7Q zU|8&q#zVFhTLxp-)kcnV=jA>}2_ZhQ1Bp1h;FYJZL*~nYs?`^9$~p=;gV#n!?-%x> zc0nG~eeUn)0%`1E1g)dma1S0n_Ng*XbJ?QHB_Xm7wHmC&XG4dU9l+HF-Z_cq;8;tn zt2?gDcA^WwJ~syE3Ur-Est)YHqVEa5zXl zF`^)$%LUTORQ>8_sdQ8SM~eF3700U#lvgxs#ogf3PzP*-D@C1mZX zDDf{lK)h@A2zwJPG7kCvKDo+4*L5NQe1GH6Yco=mWx)Pg87J#F6%ASj{Ykzw3xY(U zpz!FYE64^XNvrbFO5lBq@TY}_2b0Cvj68^BGjBR`>nUfZ)b&Ay1zm{T(F~jV?(8cI z?}JgjE_VmL;Q*2$Mh&}Y-N`Qn39baZfXXq~PUoW7O6@W=0.9.0" "json-rpc>=1.8.1" "service_factory>=0.1.5" +#+end_src + +Source: https://github.com/proofit404/anaconda-mode#issues + +If you are facing errors such as "Unable to run anaconda-mode server", try +setting your ~PYTHONPATH~ as explained at +https://github.com/proofit404/anaconda-mode#pythonpath + +*** Syntax checking +Syntax checking uses `flake8` package: + +#+begin_src sh + pip install flake8 +#+end_src + +** Test runner +Both =nose= and =pytest= are supported. By default =nose= is used. +To choose your test runner set the layer variable =python-test-runner= to +either =nose= or =pytest=. + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((python :variables python-test-runner 'pytest))) +#+END_SRC + +If you need both then you can set =python-test-runner= to a list like this: +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers + '((python :variables python-test-runner '(pytest nose)))) +#+END_SRC + +This means that =pytest= is your primary test runner. To use the secondary test +runner you can call the test functions with a prefix argument e.g. ~SPC u SPC m +t t~ to run one test with =nose=. + +To set project specific test runners you can set =python-test-runner= in a +directory local variable in your project root. ~SPC f v d~ in Spacemacs. See +[[https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html][the official documentation]] for more information. + +The root of the project is detected with a =.git= directory or a =setup.cfg= file. + +** Automatic buffer formatting on save +To enable automatic buffer formatting on save with [[https://github.com/google/yapf][YAPF]] set the variable +=python-enable-yapf-format-on-save= to =t=. + +#+BEGIN_SRC emacs-lisp + (setq-default dotspacemacs-configuration-layers '( + (python :variables python-enable-yapf-format-on-save t))) +#+END_SRC + +** autoflake +To be able to suppress unused imports easily, install [[https://github.com/myint/autoflake][autoflake]]: + +#+BEGIN_SRC sh + pip install autoflake +#+END_SRC + +** pylookup +To use =pylookup= on ~SPC m h H~, make sure you update the database first, using +~SPC SPC pylookup-update~. + +** Hy-mode +To be able to connect to an inferior lisp repl in =hy-mode=, you need to make sure +that hy is installed. + +#+BEGIN_SRC sh + pip install hy +#+END_SRC + +* Management of Python versions and virtual environments + +** Manage virtual environments with pyvenv +A virtual environment provides isolation of your Python package versions. For a +general overview see [[http://docs.python-guide.org/en/latest/dev/virtualenvs/][this site]]. [[http://virtualenvwrapper.readthedocs.org/en/latest/index.html][Virtualenvwrapper]] which is also explained in the +previous link, is a program which manages your virtual environments in a central +location set by the ~WORKON_HOME~ environment variable. + +Spacemacs integration of virtual environments and virtualenvwrapper is provided +by the [[https://github.com/jorgenschaefer/pyvenv][pyvenv]] package. It provides the following keybindings: + +| Key Binding | Description | +|-------------+-------------------------------------------------| +| ~SPC m V a~ | activate a virtual environment in any directory | +| ~SPC m V d~ | deactivate active virtual environment | +| ~SPC m V w~ | work on virtual environment in ~WORKON_HOME~ | + +** Manage multiple Python versions with pyenv +If you need multiple Python versions (e.g. Python 2 and Python 3) then take a +look at [[https://github.com/yyuu/pyenv][pyenv]]. It enables the installation and managment of multiple +Python versions. +[[https://www.brianthicks.com/post/2015/04/15/automate-your-python-environment-with-pyenv/][This blogpost]] gives a good overview on how to use the tool. Spacemacs +integration is provided by [[https://github.com/proofit404/pyenv-mode][pyenv mode]] which has the following keybindings. + +| Key Binding | Description | +|-------------+--------------------------------------| +| ~SPC m v s~ | set a pyenv environment with [[https://github.com/yyuu/pyenv][pyenv]] | +| ~SPC m v u~ | unset a pyenv environment with [[https://github.com/yyuu/pyenv][pyenv]] | + +Pyenv can also manage virtual environments for each of the Python versions it +has installed. Those will be listed alongside your Python versions. + +*** Automatic activation of local pyenv version +A project-specific pyenv version may be written to a file called +=.python-version= using the [[https://github.com/yyuu/pyenv/blob/master/COMMANDS.md#pyenv-local][pyenv local]] command. + +Spacemacs can search in parent directories for this file, and automatically set +the pyenv version. The behavior can be set with the variable +=python-auto-set-local-pyenv-version= to: +- =on-visit= (default) set the version when you visit a python buffer, +- =on-project-switch= set the version when you switch projects, +- =nil= to disable. + +* Key Bindings + +** Inferior REPL process +Start a Python or iPython inferior REPL process with ~SPC m s i~. +If =ipython= is available in system executable search paths, =ipython= +will be used to launch python shell; otherwise, default =python= +interpreter will be used. You may change your system executable +search path by activating a virtual environment. + +Send code to inferior process commands: + +| Key Binding | Description | +|-------------+-------------------------------------------------| +| ~SPC m s b~ | send buffer and keep code buffer focused | +| ~SPC m s B~ | send buffer and switch to REPL in insert mode | +| ~SPC m s f~ | send function and keep code buffer focused | +| ~SPC m s F~ | send function and switch to REPL in insert mode | +| ~SPC m s i~ | start inferior REPL process | +| ~SPC m s r~ | send region and keep code buffer focused | +| ~SPC m s R~ | send region and switch to REPL in insert mode | +| ~CTRL+j~ | next item in REPL history | +| ~CTRL+k~ | previous item in REPL history | + +** Running Python Script in shell +To run a Python script like you would in the shell press ~SPC m c c~ +to start the Python script in comint mode. This is useful when working with +multiple Python files since the REPL does not reload changes made in other +modules. + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------------| +| ~SPC m c c~ | Execute current file in a comint shell | +| ~SPC m c C~ | Execute current file in a comint shell and switch to it in =insert state= | + +*Note:* With the universal argument ~SPC u~ you can enter a new +compilation command. + +** Testing +Test commands start with ~m t~. To use the secondary test runner call the +function with a prefix argument, for example ~SPC u SPC m t a~. + +| No Debug | Description | +|-------------+----------------------------------------------------------| +| ~SPC m t a~ | launch all tests of the project | +| ~SPC m t b~ | launch all tests of the current buffer (same as module) | +| ~SPC m t m~ | launch all tests of the current module | +| ~SPC m t s~ | launch all tests of the current suite (only with =nose=) | +| ~SPC m t t~ | launch the current test (function) | + +| Debug | Description | +|-------------+------------------------------------------------------------------------| +| ~SPC m t A~ | launch all tests of the project in debug mode | +| ~SPC m t B~ | launch all tests of the current buffer (module) in debug mode | +| ~SPC m t M~ | launch all tests of the current module in debug mode | +| ~SPC m t S~ | launch all tests of the current suite in debug mode (only with =nose=) | +| ~SPC m t T~ | launch the current test (function) in debug mode | + +** Refactoring + +| Key Binding | Description | +|-------------+--------------------------------------| +| ~SPC m r i~ | remove unused imports with [[https://github.com/myint/autoflake][autoflake]] | +| ~SPC m r I~ | sort imports with [[https://pypi.python.org/pypi/isort][isort]] | + +** Live coding + +Live coding is provided by the [[https://github.com/donkirkby/live-py-plugin][live-py-plugin.]] + +| Key Binding | Description | +|-------------+---------------------| +| ~SPC m l~ | Toggle live-py-mode | + +** Hy REPL process +Start a Hy inferior repel process with ~SPC m s i~. If =hy= is +available in system executable search paths, =hy= will be used to +launch the shell. You may change your system executable search path +by activating a virtual enviornment. + +Send code to hy REPL commands: + +| Key Binding | Description | +|-------------+-----------------------------------------------------------| +| ~SPC m s b~ | send buffer and keep code buffer focused | +| ~SPC m s B~ | switch to REPL | +| ~SPC m s e~ | send sexp in front of the cursor to the REPL | +| ~SPC m s f~ | send function to REPL and stay in buffer | +| ~SPC m s F~ | send function to REPL and switch to repl buffer | +| ~SPC m s i~ | start inferior hy repl | +| ~SPC m s r~ | send current region to the REPL and stay in buffer | +| ~SPC m s R~ | send current region to the REPL and switch to repl buffer | + +** Other Python commands + +| Key Binding | Description | +|-------------+------------------------------------------------------------------------------| +| ~SPC m =~ | Reformat the buffer according to PEP8 using [[https://github.com/google/yapf][YAPF]] | +| ~SPC m d b~ | toggle a breakpoint using =wdb=, =ipdb=, =pudb= or =pdb= | +| ~SPC m g g~ | go to definition using =anaconda-mode-find-definitions= (~C-o~ to jump back) | +| ~SPC m g a~ | go to assignment using =anaconda-mode-find-assignments= (~C-o~ to jump back) | +| ~SPC m g b~ | jump back | +| ~SPC m g u~ | navigate between usages with =anaconda-mode-find-references= | +| ~SPC m h d~ | look for documentation using =helm-pydoc= | +| ~SPC m h h~ | quick documentation using anaconda | +| ~SPC m h H~ | open documentation in =firefox= using [[https://github.com/tsgates/pylookup][pylookup]] | +| ~SPC m v s~ | set a pyenv environment with [[https://github.com/yyuu/pyenv][pyenv]] | +| ~SPC m v u~ | unset a pyenv environment with [[https://github.com/yyuu/pyenv][pyenv]] | +| ~SPC m V w~ | work on virtual environment in ~WORKON_HOME~ | +| ~SPC m V a~ | activate a virtual environment in any directory | +| ~SPC m V d~ | deactivate active virtual environment | + +* Configuration +** Fill column +If you want to customize the fill column value, use something like this inside +the ~user-init~ function in your ~.spacemacs~: + +#+BEGIN_SRC elisp +(setq-default dotspacemacs-configuration-layers '( + (python :variables python-fill-column 99))) +#+END_SRC + +** Sort imports +If you want imports to be automatically sorted when you save a file (using +[[https://pypi.python.org/pypi/isort][isort]]), set the =python-sort-imports-on-save= variable in the python layer +config section: + +#+BEGIN_SRC elisp +(setq-default dotspacemacs-configuration-layers + '((python :variables python-sort-imports-on-save t))) +#+END_SRC + +or as a directory-local variable (for per-project settings). diff --git a/layers/+lang/python/config.el b/layers/+lang/python/config.el new file mode 100644 index 0000000..3185c07 --- /dev/null +++ b/layers/+lang/python/config.el @@ -0,0 +1,39 @@ +;;; config.el --- Python Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|defvar-company-backends python-mode) +(spacemacs|defvar-company-backends inferior-python-mode) +(spacemacs|defvar-company-backends pip-requirements-mode) + +(spacemacs|define-jump-handlers python-mode) +(spacemacs|define-jump-handlers cython-mode anaconda-mode-goto) + +(defvar python-enable-yapf-format-on-save nil + "If non-nil, automatically format code with YAPF on save.") + +(defvar python-test-runner 'nose + "Test runner to use. Possible values are `nose' or `pytest'.") + +(defvar python-fill-column 79 + "Fill column value for python buffers") + +(defvar python-tab-width 4 + "Tab width value for python buffers") + +(defvar python-auto-set-local-pyenv-version 'on-visit + "Automatically set pyenv version from \".python-version\". + +Possible values are `on-visit', `on-project-switch' or `nil'.") + +(defvar python-sort-imports-on-save nil + "If non-nil, automatically sort imports on save.") diff --git a/layers/+lang/python/funcs.el b/layers/+lang/python/funcs.el new file mode 100644 index 0000000..f0aea5c --- /dev/null +++ b/layers/+lang/python/funcs.el @@ -0,0 +1,179 @@ +;;; funcs.el --- Python Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; from http://pedrokroger.net/2010/07/configuring-emacs-as-a-python-ide-2/ +(defun spacemacs/python-annotate-pdb () + "Highlight break point lines." + (interactive) + (highlight-lines-matching-regexp "import i?pu?db") + (highlight-lines-matching-regexp "i?pu?db.set_trace()")) + +(defun spacemacs/pyenv-executable-find (command) + "Find executable taking pyenv shims into account." + (if (executable-find "pyenv") + (progn + (let ((pyenv-string (shell-command-to-string (concat "pyenv which " command)))) + (unless (string-match "not found" pyenv-string) + pyenv-string))) + (executable-find command))) + +(defun spacemacs/python-setup-shell (&rest args) + (if (spacemacs/pyenv-executable-find "ipython") + (progn (setq python-shell-interpreter "ipython") + (if (version< (replace-regexp-in-string "\n$" "" (shell-command-to-string "ipython --version")) "5") + (setq python-shell-interpreter-args "-i") + (setq python-shell-interpreter-args "--simple-prompt -i"))) + (progn + (setq python-shell-interpreter-args "-i") + (setq python-shell-interpreter "python")))) + +(defun spacemacs/python-toggle-breakpoint () + "Add a break point, highlight it." + (interactive) + (let ((trace (cond ((spacemacs/pyenv-executable-find "wdb") "import wdb; wdb.set_trace()") + ((spacemacs/pyenv-executable-find "ipdb") "import ipdb; ipdb.set_trace()") + ((spacemacs/pyenv-executable-find "pudb") "import pudb; pudb.set_trace()") + (t "import pdb; pdb.set_trace()"))) + (line (thing-at-point 'line))) + (if (and line (string-match trace line)) + (kill-whole-line) + (progn + (back-to-indentation) + (insert-string trace) + (insert-string "\n") + (python-indent-line))))) + +;; from https://www.snip2code.com/Snippet/127022/Emacs-auto-remove-unused-import-statemen +(defun spacemacs/python-remove-unused-imports() + "Use Autoflake to remove unused function" + "autoflake --remove-all-unused-imports -i unused_imports.py" + (interactive) + (if (executable-find "autoflake") + (progn + (shell-command (format "autoflake --remove-all-unused-imports -i %s" + (shell-quote-argument (buffer-file-name)))) + (revert-buffer t t t)) + (message "Error: Cannot find autoflake executable."))) + +(defun spacemacs//pyenv-mode-set-local-version () + "Set pyenv version from \".python-version\" by looking in parent directories." + (interactive) + (let ((root-path (locate-dominating-file default-directory + ".python-version"))) + (when root-path + (let* ((file-path (expand-file-name ".python-version" root-path)) + (version + (with-temp-buffer + (insert-file-contents-literally file-path) + (buffer-substring-no-properties (line-beginning-position) + (line-end-position))))) + (if (member version (pyenv-mode-versions)) + (pyenv-mode-set version) + (message "pyenv: version `%s' is not installed (set by %s)" + version file-path)))))) + + +;; Tests + +(defun spacemacs//disable-semantic-idle-summary-mode () + "Disable semantic-idle-summary in Python mode. +Anaconda provides more useful information but can not do it properly +when this mode is enabled since the minibuffer is cleared all the time." + (semantic-idle-summary-mode 0)) + +(defun spacemacs//python-imenu-create-index-use-semantic-maybe () + "Use semantic if the layer is enabled." + (setq imenu-create-index-function 'spacemacs/python-imenu-create-index)) + +;; fix for issue #2569 (https://github.com/syl20bnr/spacemacs/issues/2569) and +;; Emacs 24.5 and older. use `semantic-create-imenu-index' only when +;; `semantic-mode' is enabled, otherwise use `python-imenu-create-index' +(defun spacemacs/python-imenu-create-index () + (if (bound-and-true-p semantic-mode) + (semantic-create-imenu-index) + (python-imenu-create-index))) + +(defun spacemacs//python-get-main-testrunner () + "Get the main test runner." + (if (listp python-test-runner) (car python-test-runner) python-test-runner)) + +(defun spacemacs//python-get-secondary-testrunner () + "Get the secondary test runner" + (cdr (assoc (spacemacs//python-get-main-testrunner) '((pytest . nose) + (nose . pytest))))) + +(defun spacemacs//python-call-correct-test-function (arg funcalist) + "Call a test function based on the chosen test framework. +ARG is the universal-argument which chooses between the main and +the secondary test runner. FUNCALIST is an alist of the function +to be called for each testrunner. " + (let ((test-runner (if arg + (spacemacs//python-get-secondary-testrunner) + (spacemacs//python-get-main-testrunner)))) + (funcall (cdr (assoc test-runner funcalist))))) + +(defun spacemacs/python-test-all (arg) + "Run all tests." + (interactive "P") + (spacemacs//python-call-correct-test-function arg '((pytest . pytest-all) + (nose . nosetests-all)))) + +(defun spacemacs/python-test-pdb-all (arg) + "Run all tests in debug mode." + (interactive "P") + (spacemacs//python-call-correct-test-function arg '((pytest . pytest-pdb-all) + (nose . nosetests-pdb-all)))) + +(defun spacemacs/python-test-module (arg) + "Run all tests in the current module." + (interactive "P") + (spacemacs//python-call-correct-test-function arg '((pytest . pytest-module) + (nose . nosetests-module)))) + +(defun spacemacs/python-test-pdb-module (arg) + "Run all tests in the current module in debug mode." + (interactive "P") + (spacemacs//python-call-correct-test-function + arg + '((pytest . pytest-pdb-module) + (nose . nosetests-pdb-module)))) + +(defun spacemacs/python-test-one (arg) + "Run current test." + (interactive "P") + (spacemacs//python-call-correct-test-function arg '((pytest . pytest-one) + (nose . nosetests-one)))) + +(defun spacemacs/python-test-pdb-one (arg) + "Run current test in debug mode." + (interactive "P") + (spacemacs//python-call-correct-test-function arg '((pytest . pytest-pdb-one) + (nose . nosetests-pdb-one)))) + +(defun spacemacs//bind-python-testing-keys () + "Bind the keys for testing in Python." + (spacemacs/declare-prefix-for-mode 'python-mode "mt" "test") + (spacemacs/set-leader-keys-for-major-mode 'python-mode + "tA" 'spacemacs/python-test-pdb-all + "ta" 'spacemacs/python-test-all + "tB" 'spacemacs/python-test-pdb-module + "tb" 'spacemacs/python-test-module + "tT" 'spacemacs/python-test-pdb-one + "tt" 'spacemacs/python-test-one + "tM" 'spacemacs/python-test-pdb-module + "tm" 'spacemacs/python-test-module)) + +(defun spacemacs//python-sort-imports () + ;; py-isort-before-save checks the major mode as well, however we can prevent + ;; it from loading the package unnecessarily by doing our own check + (when (and python-sort-imports-on-save + (derived-mode-p 'python-mode)) + (py-isort-before-save))) diff --git a/layers/+lang/python/img/python.png b/layers/+lang/python/img/python.png new file mode 100644 index 0000000000000000000000000000000000000000..a676c42fe3635e4f6b4146325437e20780183138 GIT binary patch literal 28282 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 + +# README + + Pylookup stole idea from 'http://furius.ca/haddoc', one of my favorite + emacs mode for python documentation lookup. I reimplemented python code and + elisp code not just to support new version of python 2.7 but also to extend + it for other documentation lookup interfaces with easy. Importantly, pylookup + mode is much faster and supports fancy highlighting. + + Please check, + Web : http://taesoo.org/proj/pylookup.html + Repo : https://github.com/tsgates/pylookup + +# INSTALL + +## Create database + + You can browse python documents from either online or offline. Since I prefer + offline, here is an easy step: + + make download + + It will download python document, and construct database for you. If you get in + any trouble, follow the below steps manually: + + 1. Download your own version of python document + (i.e. http://docs.python.org/archives/python-2.7.2-docs-html.zip) + 2. Unzip: 'unzip python-2.7.2-docs-html.zip' + 3. Index: './pylookup.py -u python-2.7.1-docs-html' + 4. Test : './pylookup.py -l ljust' + + (see updateing database section for more options) + +## Elisp + + Here is lisp part for emacs. + + - [PATH] parameter depends on your environment (i.e. "~/.emacs.d/pylookup") + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cl} +;; add pylookup to your loadpath, ex) ~/.emacs.d/pylookup +(setq pylookup-dir "[PATH]") +(add-to-list 'load-path pylookup-dir) + +;; load pylookup when compile time +(eval-when-compile (require 'pylookup)) + +;; set executable file and db file +(setq pylookup-program (concat pylookup-dir "/pylookup.py")) +(setq pylookup-db-file (concat pylookup-dir "/pylookup.db")) + +;; set search option if you want +;; (setq pylookup-search-options '("--insensitive" "0" "--desc" "0")) + +;; to speedup, just load it on demand +(autoload 'pylookup-lookup "pylookup" + "Lookup SEARCH-TERM in the Python HTML indexes." t) + +(autoload 'pylookup-update "pylookup" + "Run pylookup-update and create the database at `pylookup-db-file'." t) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Updating Databases + + You can easily accumulate many sources into single database. For example, you + can index python and scipy at the same time. Here are the examples: + + - Single source + ./pylookup.py -u http://docs.python.org + - Multiple sources, remote and local + ./pylookup.py -u http://docs.python.org -u ~/doc/python2.7 + - Adding local source to existing database (duplicate entries are not checked) + ./pylookup.py -a -u ~/doc/python + - Example online documents of python, scipy, numpy, and matplotlib + (you can append new indexes into the current db with '-a' option) + ./pylookup.py -u http://docs.python.org + ./pylookup.py -u http://docs.scipy.org/doc/numpy/genindex.html + ./pylookup.py -u http://docs.scipy.org/doc/scipy/reference/genindex.html + ./pylookup.py -u http://matplotlib.sourceforge.net/genindex.html + + You probably like to type './pylookup.py -h' to see more options. diff --git a/layers/+lang/python/local/pylookup/makefile b/layers/+lang/python/local/pylookup/makefile new file mode 100644 index 0000000..de7f495 --- /dev/null +++ b/layers/+lang/python/local/pylookup/makefile @@ -0,0 +1,19 @@ +VER := $(shell python --version 2>&1 | grep -o "[0-9].[0-9].[0-9]*") +MAJOR_VERSION = $(shell python --version 2>&1 | grep -o "Python [0-9]" | grep -o "[0-9]") +ZIP := python-${VER}-docs-html.zip +URL := https://docs.python.org/2/archives/${ZIP} +URL2:= https://docs.python.org/3/archives/${ZIP} + +ifneq (2,${MAJOR_VERSION}) + URL := ${URL2} +endif + +download: + @if [ ! -e ${ZIP} ] ; then \ + echo "Downloading ${URL}"; \ + wget ${URL}; \ + unzip ${ZIP}; \ + fi + ./pylookup.py -u $(ZIP:.zip=) + +.PHONY: download diff --git a/layers/+lang/python/local/pylookup/pylookup.el b/layers/+lang/python/local/pylookup/pylookup.el new file mode 100644 index 0000000..310e3dd --- /dev/null +++ b/layers/+lang/python/local/pylookup/pylookup.el @@ -0,0 +1,331 @@ +;;; pylookup.el --- Look up python documents (reference) in Emacs + +;; Copyright (C) 2010-2013 Taesoo Kim + +;; Author: Taesoo Kim +;; Maintainer: Taesoo Kim +;; Created: 19 June 2009 +;; Keywords: python,reference,document,help + +;; This file is not part of GNU Emacs. + +;; 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 . + +;;; Code: + +(eval-when-compile + (require 'browse-url) + (require 'simple) + (require 'cl) + (require 'ido)) + +;;================================================================= +;; user options +;;================================================================= + +(defvar pylookup-db-file "pylookup.db" "Pylookup database file") +(defvar pylookup-program "pylookup.py" "Pylookup execution file") +(defvar pylookup-search-options nil + "Pylookup search options (see ./pylookup.py -h)") + +;;================================================================= +;; internal variables +;;================================================================= + +(defvar pylookup-html-locations '("http://docs.python.org")) +(defvar pylookup-history nil) +(defvar pylookup-cache nil) +(defvar pylookup-return-window-config nil) +(defvar pylookup-temp-buffer-name "*Pylookup Completions*") + +(defvar pylookup-mode-map + (let ((map (make-sparse-keymap))) + (define-key map [mouse-1] 'pylookup-mode-lookup-and-leave) + (define-key map [mouse-2] 'pylookup-mode-lookup) + (define-key map "\C-m" 'pylookup-mode-lookup-and-leave) + (define-key map " " 'pylookup-mode-lookup-and-leave) + (define-key map "f" 'pylookup-mode-lookup) + (define-key map "q" 'pylookup-mode-quit-window) + (define-key map "n" 'pylookup-mode-next-line) + (define-key map "j" 'pylookup-mode-next-line) + (define-key map "p" 'pylookup-move-prev-line) + (define-key map "k" 'pylookup-move-prev-line) + (define-key map "/" 'isearch-forward) + + (define-key map "v" 'scroll-down) + (define-key map "V" 'scroll-up) + (define-key map "l" 'recenter) + (define-key map "<" 'beginning-of-buffer) + (define-key map ">" 'end-of-buffer) + (define-key map "v" 'scroll-down) + + map) + "Keymap for `pylookup-mode-mode'.") + +(put 'pylookup-mode 'mode-class 'special) + +(defvar pylookup-completing-read + (if (null ido-mode) 'completing-read 'ido-completing-read) + "Ido support with convenience") + +;;================================================================= +;; pylookup mode specific interactive functions +;;================================================================= + +(defun pylookup-trim (desc n) + "Trim desc string to fit into the length, n" + + (if (> (length desc) (- n 2)) + (concat (substring desc 0 (- n 2)) "..") + desc)) + +(defun pylookup-mode () + "Major mode for output from \\[pylookup-lookup]." + (interactive) + + (kill-all-local-variables) + (use-local-map pylookup-mode-map) + (setq major-mode 'pylookup-mode) + (setq mode-name "Pylookup") + (setq buffer-read-only t) + (run-mode-hooks)) + +(defun pylookup-move-prev-line () + "Move to previous entry" + (interactive) + + (when (< 3 (line-number-at-pos)) + (call-interactively 'previous-line))) + +(defun pylookup-mode-next-line () + "Move to next entry" + (interactive) + + (when (< (line-number-at-pos) + (- (line-number-at-pos (point-max)) 1)) + (call-interactively 'next-line))) + +(defun pylookup-mode-lookup-and-leave () + "Lookup the current line in a browser and leave the completions window." + (interactive) + + (call-interactively 'pylookup-mode-lookup) + (pylookup-mode-quit-window)) + +(defun pylookup-mode-lookup () + "Lookup the current line in a browser." + (interactive) + + (let ((url (get-text-property (point) 'pylookup-target-url))) + (if url + (progn + (beginning-of-line) + (message "Browsing: \"%s\"" url) + (browse-url url)) + (error "No URL on this line")))) + +(defun pylookup-mode-quit-window () + "Leave the completions window." + (interactive) + + (set-window-configuration pylookup-return-window-config)) + +;;================================================================= +;; execute pylookup +;;================================================================= + +(defun pylookup-exec-get-cache () + "Run a pylookup process and get a list of cache (db key)" + + (split-string + (with-output-to-string + (call-process pylookup-program nil standard-output nil + "-d" (expand-file-name pylookup-db-file) + "-c")))) + +(defun pylookup-exec-lookup (search-term) + "Runs a pylookup process and returns a list of (term, url) pairs." + + (mapcar + (lambda (x) (split-string x ";")) + (split-string + (with-output-to-string + (apply 'call-process pylookup-program nil standard-output nil + "-d" (expand-file-name pylookup-db-file) + "-l" search-term + "-f" "Emacs" + pylookup-search-options)) + "\n" t))) + +;;================================================================= +;; interactive user interfaces +;;================================================================= + +;;;###autoload +(defun pylookup-lookup (search-term) + "Lookup SEARCH-TERM in the Python HTML indexes." + (interactive + (list + (let ((initial (thing-at-point 'word))) + (funcall pylookup-completing-read + "Search: " + (if pylookup-cache + pylookup-cache + (setq pylookup-cache (pylookup-exec-get-cache))) + nil nil initial 'pylookup-history)) + )) + + (let ((matches (pylookup-exec-lookup search-term))) + (cond + + ;; 0. No results. + ((eq matches nil) + (message "No matches for \"%s\"." search-term)) + + ;; 1. A single result. + ((= (length matches) 1) + ;; Point the browser at the unique result and get rid of the buffer + (let ((data (car matches))) + (message "Browsing: \"%s\"" (car data)) + (browse-url (cadr data)))) + + ;; N. Multiple results. + (t + ;; Decorate the temporary buffer lines with appropriate properties for + ;; selection. + (let* ((cur-window-conf (current-window-configuration)) + (tmpbuf (get-buffer-create pylookup-temp-buffer-name)) + (index 0)) + + (display-buffer tmpbuf) + (pop-to-buffer tmpbuf) + + (setq buffer-read-only nil) + (erase-buffer) + + ;; Insert the text in the buffer + (insert (format "Python index matches for %s:\n\n" search-term)) + (dolist (x matches) + ;; split like + ;; waitpid() (in module os) [lib] + ;; --------- -------------- ----- + ;; => + ;; waitpid (in module os) [lib] + ;; api module type + + (let* ((tokens (split-string (car x))) + (api (car tokens)) + (iter (cdr tokens)) + (type (car (last tokens))) + (module "")) + + (while (not (or (equal iter nil) + (string= (car iter) type))) + (setq module (concat module " " (car iter))) + (setq iter (cdr iter))) + + (incf index) + (insert (format " %03d) %-25s %-30s %10s" + index + (pylookup-trim api 25) + (pylookup-trim module 30) + (pylookup-trim type 10)))) + + (put-text-property + (line-beginning-position) (line-end-position) + 'pylookup-target-url (cadr x)) + (insert "\n")) + + ;; goto first entry + (goto-line 3) + + ;; turn mode on + (pylookup-mode) + + ;; highlighting + (font-lock-add-keywords nil `((,(format "\\(%s\\|%s\\|%s\\)" + search-term + (upcase search-term) + (upcase-initials search-term)) + 1 + font-lock-keyword-face prepend))) + + (font-lock-add-keywords nil '(("\\<\\(lib\\)" + 1 + font-lock-constant-face prepend))) + + (font-lock-add-keywords nil '(("\\<\\(in module.*)\\)" + 1 + font-lock-doc-face prepend))) + + ;; store window configuration + (set (make-local-variable 'pylookup-return-window-config) cur-window-conf) + + ;; make fit to screen + (shrink-window-if-larger-than-buffer (get-buffer-window tmpbuf))))))) + +;;;###autoload +(defun pylookup-set-search-option (option-string) + "Set search option interactively" + (interactive + (list (read-string "Search option: " + (mapconcat 'identity pylookup-search-options " ")))) + (setq pylookup-search-options (split-string option-string " "))) + +;;;###autoload +(defun pylookup-update (src &optional append) + "Run pylookup-update and create the database at `pylookup-db-file'." + (interactive + (list (funcall pylookup-completing-read + "Python Html Documentation source: " + pylookup-html-locations))) + + ;; pylookup.py -d /home/myuser/.pylookup/pylookup.db -l + (message (with-output-to-string + (call-process pylookup-program nil standard-output nil + "-u" src + "-d" (expand-file-name pylookup-db-file) + (if append + "-a" + ""))))) + +;;;###autoload +(defun pylookup-update-all () + "Run pylookup-update for all sources and create the database at `pylookup-db-file'." + (interactive) + ;; truncate db file + (with-temp-buffer (write-file pylookup-db-file)) + (mapc (lambda (s) (pylookup-update s t)) pylookup-html-locations)) + +;;;###autoload +(defun pylookup-lookup-at-point () + "Query the for string with help of word read at point and call `pylookup-lookup'" + (interactive) + (let* ((default-word (thing-at-point 'word)) + (default-prompt (concat "Lookup Word " + (if default-word + (concat "(" default-word ")") nil) + ": ")) + (pylookup-query + (funcall #'(lambda (str) + "Remove Whitespace from beginning and end of a string." + (replace-regexp-in-string "^[ \n\t]*\\(.*?\\)[ \n\t]*$" + "\\1" + str)) + (read-string default-prompt nil nil default-word)))) + (if (= (length pylookup-query) 0) nil + (pylookup-lookup pylookup-query)))) + +(provide 'pylookup) +;;; pylookup.el ends here diff --git a/layers/+lang/python/local/pylookup/pylookup.py b/layers/+lang/python/local/pylookup/pylookup.py new file mode 100755 index 0000000..9675a97 --- /dev/null +++ b/layers/+lang/python/local/pylookup/pylookup.py @@ -0,0 +1,329 @@ +#!/usr/bin/env python + +""" +Pylookup is to lookup entries from python documentation, especially within +emacs. Pylookup adopts most of ideas from haddoc, lovely toolkit by Martin +Blais. + +(usage) + ./pylookup.py -l ljust + ./pylookup.py -u http://docs.python.org + +""" + +from __future__ import with_statement + +import os +import sys +import re +try: + import cPickle as pickle +except: + import pickle +import formatter + +from os.path import join, dirname, exists, abspath, expanduser +from contextlib import closing + +if sys.version_info[0] == 3: + import html.parser as htmllib + import urllib.parse as urlparse + import urllib.request as urllib +else: + import htmllib, urllib, urlparse + +VERBOSE = False +FORMATS = { + "Emacs" : "{entry}\t({desc})\t[{book}];{url}", + "Terminal" : "{entry}\t({desc})\t[{book}]\n{url}" + } + +def build_book(s, num): + """ + Build book identifier from `s`, with `num` links. + """ + for matcher, replacement in (("library", "lib"), + ("c-api", "api"), + ("reference", "ref"), + ("", "etc")): + if matcher in s: + return replacement if num == 1 else "%s/%d" % (replacement, num) + +def trim(s): + """ + Add any globle filtering rules here + """ + s = s.replace( "Python Enhancement Proposals!", "") + s = s.replace( "PEP ", "PEP-") + return s + +class Element(object): + def __init__(self, entry, desc, book, url): + self.book = book + self.url = url + self.desc = desc + self.entry = entry + + def __format__(self, format_spec): + return format_spec.format(entry=self.entry, desc=self.desc, + book=self.book, url=self.url) + + def match_insensitive(self, key): + """ + Match key case insensitive against entry and desc. + + `key` : Lowercase string. + """ + return key in self.entry.lower() or key in self.desc.lower() + + def match_sensitive(self, key): + """ + Match key case sensitive against entry and desc. + + `key` : Lowercase string. + """ + return key in self.entry or key in self.desc + + def match_in_entry_insensitive(self, key): + """ + Match key case insensitive against entry. + + `key` : Lowercase string. + """ + return key in self.entry.lower() + + def match_in_entry_sensitive(self, key): + """ + Match key case sensitive against entry. + + `key` : Lowercase string. + """ + return key in self.entry + + +def get_matcher(insensitive=True, desc=True): + """ + Get `Element.match_*` function. + + >>> get_matcher(0, 0) + + >>> get_matcher(1, 0) + + >>> get_matcher(0, 1) + + >>> get_matcher(1, 1) + + + """ + _sensitive = "_insensitive" if insensitive else "_sensitive" + _in_entry = "" if desc else "_in_entry" + return getattr(Element, "match{0}{1}".format(_in_entry, _sensitive)) + + +class IndexProcessor( htmllib.HTMLParser ): + """ + Extract the index links from a Python HTML documentation index. + """ + + def __init__( self, writer, dirn): + htmllib.HTMLParser.__init__( self, formatter.NullFormatter() ) + + self.writer = writer + self.dirn = dirn + self.entry = "" + self.desc = "" + self.list_entry = False + self.do_entry = False + self.one_entry = False + self.num_of_a = 0 + self.desc_cnt = 0 + + def start_dd( self, att ): + self.list_entry = True + + def end_dd( self ): + self.list_entry = False + + def start_dt( self, att ): + self.one_entry = True + self.num_of_a = 0 + + def end_dt( self ): + self.do_entry = False + + def start_a( self, att ): + if self.one_entry: + self.url = join( self.dirn, dict( att )[ 'href' ] ) + self.save_bgn() + + def end_a( self ): + global VERBOSE + if self.one_entry: + if self.num_of_a == 0 : + self.desc = self.save_end() + + if VERBOSE: + self.desc_cnt += 1 + if self.desc_cnt % 100 == 0: + sys.stdout.write("%04d %s\r" \ + % (self.desc_cnt, self.desc.ljust(80))) + + # extract fist element + # ex) __and__() (in module operator) + if not self.list_entry : + self.entry = re.sub( "\([^)]+\)", "", self.desc ) + + # clean up PEP + self.entry = trim(self.entry) + + match = re.search( "\([^)]+\)", self.desc ) + if match : + self.desc = match.group(0) + + self.desc = trim(re.sub( "[()]", "", self.desc )) + + self.num_of_a += 1 + book = build_book(self.url, self.num_of_a) + e = Element(self.entry, self.desc, book, self.url) + + self.writer(e) + +def update(db, urls, append=False): + """Update database with entries from urls. + + `db` : filename to database + `urls` : list of URL + `append` : append to db + """ + mode = "ab" if append else "wb" + with open(db, mode) as f: + writer = lambda e: pickle.dump(e, f) + for url in urls: + # detech 'file' or 'url' schemes + parsed = urlparse.urlparse(url) + if not parsed.scheme or parsed.scheme == "file": + dst = abspath(expanduser(parsed.path)) + if not os.path.exists(dst): + print("Error: %s doesn't exist" % dst) + exit(1) + url = "file://%s" % dst + else: + url = parsed.geturl() + + potential_urls = [] + if url.endswith('.html'): + potential_urls.append(url) + else: + # guess index URLs + # for stdlib, this is genindex-all.html + # for django, numpy, etc. it's genindex.html + url = url.rstrip("/") + potential_urls.append(url + "/genindex-all.html") + potential_urls.append(url + "/genindex.html") + + success = False + for index_url in potential_urls: + try: + print("Wait for a few seconds...") + print("Fetching index from '%s'" % index_url) + + index = urllib.urlopen(index_url).read() + if not issubclass(type(index), str): + index = index.decode() + + parser = IndexProcessor(writer, dirname(index_url)) + with closing(parser): + parser.feed(index) + + # success, we don't need to try other potential urls + print("Loaded index from '%s'" % index_url) + success = True + break + except IOError: + print("Error: fetching file from '%s'" % index_url) + + if not success: + print("Failed to load index for input '%s'" % url) + + +def lookup(db, key, format_spec, out=sys.stdout, insensitive=True, desc=True): + """Lookup key from database and print to out. + + `db` : filename to database + `key` : key to lookup + `out` : file-like to write to + `insensitive` : lookup key case insensitive + """ + matcher = get_matcher(insensitive, desc) + if insensitive: + key = key.lower() + with open(db, "rb") as f: + try: + while True: + e = pickle.load(f) + if matcher(e, key): + out.write('%s\n' % format(e, format_spec)) + except EOFError: + pass + +def cache(db, out=sys.stdout): + """Print unique entries from db to out. + + `db` : filename to database + `out` : file-like to write to + """ + with open(db, "rb") as f: + keys = set() + try: + while True: + e = pickle.load(f) + k = e.entry + k = re.sub( "\([^)]*\)", "", k ) + k = re.sub( "\[[^]]*\]", "", k ) + keys.add(k) + except EOFError: + pass + for k in keys: + out.write('%s\n' % k) + +if __name__ == "__main__": + import optparse + parser = optparse.OptionParser( __doc__.strip() ) + parser.add_option( "-d", "--db", + help="database name", + dest="db", default="pylookup.db" ) + parser.add_option( "-l", "--lookup", + help="keyword to search", + dest="key" ) + parser.add_option( "-u", "--update", + help="update url or path", + action="append", type="str", dest="url" ) + parser.add_option( "-c", "--cache" , + help="extract keywords, internally used", + action="store_true", default=False, dest="cache") + parser.add_option( "-a", "--append", + help="append to the db from multiple sources", + action="store_true", default=False, dest="append") + parser.add_option( "-f", "--format", + help="type of output formatting, valid: Emacs, Terminal", + choices=["Emacs", "Terminal"], + default="Terminal", dest="format") + parser.add_option( "-i", "--insensitive", default=1, choices=['0', '1'], + help="SEARCH OPTION: insensitive search " + "(valid: 0, 1; default: %default)") + parser.add_option( "-s", "--desc", default=1, choices=['0', '1'], + help="SEARCH OPTION: include description field " + "(valid: 0, 1; default: %default)") + parser.add_option("-v", "--verbose", + help="verbose", action="store_true", + dest="verbose", default=False) + ( opts, args ) = parser.parse_args() + + VERBOSE = opts.verbose + if opts.url: + update(opts.db, opts.url, opts.append) + if opts.cache: + cache(opts.db) + if opts.key: + lookup(opts.db, opts.key, FORMATS[opts.format], + insensitive=int(opts.insensitive), desc=int(opts.desc)) diff --git a/layers/+lang/python/packages.el b/layers/+lang/python/packages.el new file mode 100644 index 0000000..f134cb0 --- /dev/null +++ b/layers/+lang/python/packages.el @@ -0,0 +1,448 @@ +;;; packages.el --- Python Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq python-packages + '( + anaconda-mode + company + (company-anaconda :toggle (configuration-layer/package-usedp 'company)) + cython-mode + eldoc + evil-matchit + flycheck + ggtags + helm-cscope + helm-gtags + (helm-pydoc :toggle (configuration-layer/package-usedp 'helm)) + hy-mode + live-py-mode + (nose :location local) + org + pip-requirements + py-isort + pyenv-mode + (pylookup :location local) + pytest + (python :location built-in) + pyvenv + semantic + smartparens + stickyfunc-enhance + xcscope + yapfify + )) + +(defun python/init-anaconda-mode () + (use-package anaconda-mode + :defer t + :init + (progn + (setq anaconda-mode-installation-directory + (concat spacemacs-cache-directory "anaconda-mode")) + (add-hook 'python-mode-hook 'anaconda-mode) + (add-to-list 'spacemacs-jump-handlers-python-mode + '(anaconda-mode-find-definitions :async t))) + :config + (progn + (spacemacs/set-leader-keys-for-major-mode 'python-mode + "hh" 'anaconda-mode-show-doc + "ga" 'anaconda-mode-find-assignments + "gb" 'anaconda-mode-go-back + "gu" 'anaconda-mode-find-references) + (evilified-state-evilify anaconda-mode-view-mode anaconda-mode-view-mode-map + (kbd "q") 'quit-window) + (spacemacs|hide-lighter anaconda-mode) + + (defadvice anaconda-mode-goto (before python/anaconda-mode-goto activate) + (evil--jumps-push))))) + +(defun python/post-init-company () + (spacemacs|add-company-hook python-mode) + (spacemacs|add-company-hook inferior-python-mode) + (push '(company-files company-capf) company-backends-inferior-python-mode) + (add-hook 'inferior-python-mode-hook (lambda () + (setq-local company-minimum-prefix-length 0) + (setq-local company-idle-delay 0.5)))) + +(defun python/init-company-anaconda () + (use-package company-anaconda + :defer t + :init + (push 'company-anaconda company-backends-python-mode))) + +(defun python/init-cython-mode () + (use-package cython-mode + :defer t + :init + (progn + (spacemacs/set-leader-keys-for-major-mode 'cython-mode + "hh" 'anaconda-mode-view-doc + "gu" 'anaconda-mode-usages)))) + +(defun python/post-init-eldoc () + (defun spacemacs//init-eldoc-python-mode () + (eldoc-mode) + (when (configuration-layer/package-usedp 'anaconda-mode) + (anaconda-eldoc-mode))) + (add-hook 'python-mode-hook 'spacemacs//init-eldoc-python-mode)) + +(defun python/post-init-evil-matchit () + (add-hook `python-mode-hook `turn-on-evil-matchit-mode)) + +(defun python/post-init-flycheck () + (spacemacs/add-flycheck-hook 'python-mode)) + +(defun python/pre-init-helm-cscope () + (spacemacs|use-package-add-hook xcscope + :post-init + (spacemacs/setup-helm-cscope 'python-mode))) + +(defun python/post-init-helm-gtags () + (spacemacs/helm-gtags-define-keys-for-mode 'python-mode)) + +(defun python/post-init-ggtags () + (add-hook 'python-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) + +(defun python/init-helm-pydoc () + (use-package helm-pydoc + :defer t + :init + (spacemacs/set-leader-keys-for-major-mode 'python-mode "hd" 'helm-pydoc))) + +(defun python/init-hy-mode () + (use-package hy-mode + :defer t + :init + (progn + (let ((hy-path (executable-find "hy"))) + (when hy-path + (setq hy-mode-inferior-lisp-command (concat hy-path " --spy")) + (spacemacs/set-leader-keys-for-major-mode 'hy-mode + "si" 'inferior-lisp + "sb" 'lisp-load-file + "sB" 'switch-to-lisp + "se" 'lisp-eval-last-sexp + "sf" 'lisp-eval-defun + "sF" 'lisp-eval-defun-and-go + "sr" 'lisp-eval-region + "sR" 'lisp-eval-region-and-go)))))) + +(defun python/init-live-py-mode () + (use-package live-py-mode + :defer t + :commands live-py-mode + :init + (spacemacs/set-leader-keys-for-major-mode 'python-mode + "l" 'live-py-mode))) + +(defun python/init-nose () + (use-package nose + :if (or (eq 'nose python-test-runner) + (if (listp python-test-runner) (member 'nose python-test-runner))) + :commands (nosetests-one + nosetests-pdb-one + nosetests-all + nosetests-pdb-all + nosetests-module + nosetests-pdb-module + nosetests-suite + nosetests-pdb-suite) + :init + (progn + (spacemacs//bind-python-testing-keys) + (spacemacs/set-leader-keys-for-major-mode 'python-mode + "tS" 'nosetests-pdb-suite + "ts" 'nosetests-suite)) + :config + (progn + (add-to-list 'nose-project-root-files "setup.cfg") + (setq nose-use-verbose nil)))) + +(defun python/pre-init-org () + (spacemacs|use-package-add-hook org + :post-config (add-to-list 'org-babel-load-languages '(python . t)))) + +(defun python/init-pip-requirements () + (use-package pip-requirements + :defer t + :init + (progn + ;; company support + (push 'company-capf company-backends-pip-requirements-mode) + (spacemacs|add-company-hook pip-requirements-mode)))) + +(defun python/init-py-isort () + (use-package py-isort + :defer t + :init + (progn + (add-hook 'before-save-hook 'spacemacs//python-sort-imports) + (spacemacs/set-leader-keys-for-major-mode 'python-mode + "rI" 'py-isort-buffer)))) + +(defun python/init-pyenv-mode () + (use-package pyenv-mode + :if (executable-find "pyenv") + :commands (pyenv-mode-versions) + :init + (progn + (pcase python-auto-set-local-pyenv-version + (`on-visit + (spacemacs/add-to-hooks 'spacemacs//pyenv-mode-set-local-version + '(python-mode-hook + hy-mode-hook))) + (`on-project-switch + (add-hook 'projectile-after-switch-project-hook + 'spacemacs//pyenv-mode-set-local-version))) + ;; setup shell correctly on environment switch + (dolist (func '(pyenv-mode-set pyenv-mode-unset)) + (advice-add func :after 'spacemacs/python-setup-shell)) + (spacemacs/set-leader-keys-for-major-mode 'python-mode + "vu" 'pyenv-mode-unset + "vs" 'pyenv-mode-set)))) + +(defun python/init-pyvenv () + (use-package pyvenv + :defer t + :init + (progn + (dolist (mode '(python-mode hy-mode)) + (spacemacs/set-leader-keys-for-major-mode mode + "Va" 'pyvenv-activate + "Vd" 'pyvenv-deactivate + "Vw" 'pyvenv-workon)) + ;; setup shell correctly on environment switch + (dolist (func '(pyvenv-activate pyvenv-deactivate pyvenv-workon)) + (advice-add func :after 'spacemacs/python-setup-shell))))) + +(defun python/init-pylookup () + (use-package pylookup + :commands (pylookup-lookup pylookup-update pylookup-update-all) + :init + (progn + (evilified-state-evilify pylookup-mode pylookup-mode-map) + (spacemacs/set-leader-keys-for-major-mode 'python-mode + "hH" 'pylookup-lookup)) + :config + (progn + (let ((dir (configuration-layer/get-layer-local-dir 'python))) + (setq pylookup-dir (concat dir "pylookup/") + pylookup-program (concat pylookup-dir "pylookup.py") + pylookup-db-file (concat pylookup-dir "pylookup.db"))) + (setq pylookup-completing-read 'completing-read)))) + +(defun python/init-pytest () + (use-package pytest + :if (or (eq 'pytest python-test-runner) + (if (listp python-test-runner) (member 'pytest python-test-runner))) + :defer t + :commands (pytest-one + pytest-pdb-one + pytest-all + pytest-pdb-all + pytest-module + pytest-pdb-module) + :init (spacemacs//bind-python-testing-keys) + :config (add-to-list 'pytest-project-root-files "setup.cfg"))) + +(defun python/init-python () + (use-package python + :defer t + :init + (progn + (spacemacs/register-repl 'python 'python-start-or-switch-repl "python") + + (defun python-default () + (setq mode-name "Python" + tab-width python-tab-width + fill-column python-fill-column) + (when (version< emacs-version "24.5") + ;; auto-indent on colon doesn't work well with if statement + ;; should be fixed in 24.5 and above + (setq electric-indent-chars (delq ?: electric-indent-chars))) + (setq-local comment-inline-offset 2) + (spacemacs/python-annotate-pdb) + ;; make C-j work the same way as RET + (local-set-key (kbd "C-j") 'newline-and-indent)) + + + (defun inferior-python-setup-hook () + (setq indent-tabs-mode t)) + + (add-hook 'inferior-python-mode-hook #'inferior-python-setup-hook) + (add-hook 'python-mode-hook #'python-default) + ;; call `spacemacs/python-setup-shell' once, don't put it in a hook (see issue #5988) + (spacemacs/python-setup-shell)) + :config + (progn + ;; add support for `ahs-range-beginning-of-defun' for python-mode + (with-eval-after-load 'auto-highlight-symbol + (add-to-list 'ahs-plugin-bod-modes 'python-mode)) + + (defun python-shell-send-buffer-switch () + "Send buffer content to shell and switch to it in insert mode." + (interactive) + (python-shell-send-buffer) + (python-shell-switch-to-shell) + (evil-insert-state)) + + (defun python-shell-send-defun-switch () + "Send function content to shell and switch to it in insert mode." + (interactive) + (python-shell-send-defun nil) + (python-shell-switch-to-shell) + (evil-insert-state)) + + (defun python-shell-send-region-switch (start end) + "Send region content to shell and switch to it in insert mode." + (interactive "r") + (python-shell-send-region start end) + (python-shell-switch-to-shell) + (evil-insert-state)) + + (defun python-start-or-switch-repl () + "Start and/or switch to the REPL." + (interactive) + (let ((shell-process + (or (python-shell-get-process) + ;; `run-python' has different return values and different + ;; errors in different emacs versions. In 24.4, it throws an + ;; error when the process didn't start, but in 25.1 it + ;; doesn't throw an error, so we demote errors here and + ;; check the process later + (with-demoted-errors "Error: %S" + ;; in Emacs 24.5 and 24.4, `run-python' doesn't return the + ;; shell process + (call-interactively #'run-python) + (python-shell-get-process))))) + (unless shell-process + (error "Failed to start python shell properly")) + (pop-to-buffer (process-buffer shell-process)) + (evil-insert-state))) + + (defun spacemacs/python-execute-file (arg) + "Execute a python script in a shell." + (interactive "P") + ;; set compile command to buffer-file-name + ;; universal argument put compile buffer in comint mode + (let ((universal-argument t) + (compile-command (format "python %s" (file-name-nondirectory + buffer-file-name)))) + (if arg + (call-interactively 'compile) + (compile compile-command t) + (with-current-buffer (get-buffer "*compilation*") + (inferior-python-mode))))) + + (defun spacemacs/python-execute-file-focus (arg) + "Execute a python script in a shell and switch to the shell buffer in +`insert state'." + (interactive "P") + (spacemacs/python-execute-file arg) + (switch-to-buffer-other-window "*compilation*") + (end-of-buffer) + (evil-insert-state)) + + ;; fix for issue #2569 (https://github.com/syl20bnr/spacemacs/issues/2569) + (when (version< emacs-version "25") + (advice-add 'wisent-python-default-setup :after + #'spacemacs//python-imenu-create-index-use-semantic-maybe)) + + (spacemacs/declare-prefix-for-mode 'python-mode "mc" "execute") + (spacemacs/declare-prefix-for-mode 'python-mode "md" "debug") + (spacemacs/declare-prefix-for-mode 'python-mode "mh" "help") + (spacemacs/declare-prefix-for-mode 'python-mode "mg" "goto") + (spacemacs/declare-prefix-for-mode 'python-mode "ms" "send to REPL") + (spacemacs/declare-prefix-for-mode 'python-mode "mr" "refactor") + (spacemacs/declare-prefix-for-mode 'python-mode "mv" "pyenv") + (spacemacs/declare-prefix-for-mode 'python-mode "mV" "pyvenv") + (spacemacs/set-leader-keys-for-major-mode 'python-mode + "'" 'python-start-or-switch-repl + "cc" 'spacemacs/python-execute-file + "cC" 'spacemacs/python-execute-file-focus + "db" 'spacemacs/python-toggle-breakpoint + "ri" 'spacemacs/python-remove-unused-imports + "sB" 'python-shell-send-buffer-switch + "sb" 'python-shell-send-buffer + "sF" 'python-shell-send-defun-switch + "sf" 'python-shell-send-defun + "si" 'python-start-or-switch-repl + "sR" 'python-shell-send-region-switch + "sr" 'python-shell-send-region) + + ;; Emacs users won't need these key bindings + ;; TODO: make these key bindings dynamic given the current style + ;; Doing it only at init time won't update it if the user switches style + ;; Also find a way to generalize these bindings. + (when (eq dotspacemacs-editing-style 'vim) + ;; the default in Emacs is M-n + (define-key inferior-python-mode-map (kbd "C-j") 'comint-next-input) + ;; the default in Emacs is M-p and this key binding overrides + ;; default C-k which prevents Emacs users to kill line + (define-key inferior-python-mode-map (kbd "C-k") 'comint-previous-input) + ;; the default in Emacs is M-r; C-r to search backward old output + ;; and should not be changed + (define-key inferior-python-mode-map + (kbd "C-r") 'comint-history-isearch-backward) + ;; this key binding is for recentering buffer in Emacs + ;; it would be troublesome if Emacs user + ;; Vim users can use this key since they have other key + (define-key inferior-python-mode-map + (kbd "C-l") 'spacemacs/comint-clear-buffer)) + + ;; add this optional key binding for Emacs user, since it is unbound + (define-key inferior-python-mode-map + (kbd "C-c M-l") 'spacemacs/comint-clear-buffer)))) + +(defun python/post-init-semantic () + (when (configuration-layer/package-usedp 'anaconda-mode) + (add-hook 'python-mode-hook + 'spacemacs//disable-semantic-idle-summary-mode t)) + (spacemacs/add-to-hook 'python-mode-hook + '(semantic-mode + spacemacs//python-imenu-create-index-use-semantic-maybe)) + (defadvice semantic-python-get-system-include-path + (around semantic-python-skip-error-advice activate) + "Don't cause error when Semantic cannot retrieve include +paths for Python then prevent the buffer to be switched. This +issue might be fixed in Emacs 25. Until then, we need it here to +fix this issue." + (condition-case-unless-debug nil + ad-do-it + (error nil)))) + +(defun python/post-init-smartparens () + (spacemacs/add-to-hooks 'smartparens-mode '(inferior-python-mode-hook + hy-mode-hook)) + (defadvice python-indent-dedent-line-backspace + (around python/sp-backward-delete-char activate) + (let ((pythonp (or (not smartparens-strict-mode) + (char-equal (char-before) ?\s)))) + (if pythonp + ad-do-it + (call-interactively 'sp-backward-delete-char))))) + +(defun python/post-init-stickyfunc-enhance () + (add-hook 'python-mode-hook 'spacemacs/lazy-load-stickyfunc-enhance)) + +(defun python/pre-init-xcscope () + (spacemacs|use-package-add-hook xcscope + :post-init + (spacemacs/set-leader-keys-for-major-mode 'python-mode + "gi" 'cscope/run-pycscope))) + +(defun python/init-yapfify () + (use-package yapfify + :defer t + :init (spacemacs/set-leader-keys-for-major-mode 'python-mode + "=" 'yapfify-buffer) + :config (when python-enable-yapf-format-on-save + (add-hook 'python-mode-hook 'yapf-mode)))) diff --git a/layers/+lang/racket/README.org b/layers/+lang/racket/README.org new file mode 100644 index 0000000..f2772db --- /dev/null +++ b/layers/+lang/racket/README.org @@ -0,0 +1,74 @@ +#+TITLE: Racket layer + +[[file:img/racket.png]] + +* Table of Contents :TOC_4_gh:noexport: + - [[#description][Description]] + - [[#install][Install]] + - [[#key-bindings][Key Bindings]] + - [[#navigation][Navigation]] + - [[#documentation][Documentation]] + - [[#tests][Tests]] + - [[#repl][REPL]] + - [[#other-key-bindings][Other key bindings]] + +* Description + +Adds support for the [[http://racket-lang.org/][Racket]] programming language. + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =racket= to the existing =dotspacemacs-configuration-layers= list in this +file. You will also need DrRacket installed. Alternatively, one can use the +"Minimal Racket" installation, and then run the following command. + +#+BEGIN_SRC Bash +raco pkg install drracket +#+END_SRC + +* Key Bindings + +** Navigation + +| Key Binding | Description | +|-------------+-------------------------------------| +| ~SPC m g `~ | Return to previous location | +| ~SPC m g g~ | Go to definition of symbol at point | +| ~SPC m g m~ | Go to module at point | +| ~SPC m g r~ | Open require path | + +** Documentation + +| Key Binding | Description | +|-------------+---------------------------------------------------------------| +| ~SPC m h d~ | Describes the function at point in a =Racket Describe= buffer | +| ~SPC m h h~ | View documentation of the identifier or string at point. | + +** Tests + +| Key Binding | Description | +|-------------+-----------------------------------| +| ~SPC m t b~ | Run tests of buffer | +| ~SPC m t B~ | Run tests of buffer with coverage | + +** REPL + +| Key Binding | Description | +|-------------+-----------------------------------------------------------------| +| ~SPC m s b~ | Send buffer to REPL | +| ~SPC m s B~ | Send buffer to REPL and switch to REPL buffer in =insert state= | +| ~SPC m s e~ | Send last sexp to REPL | +| ~SPC m s E~ | Send last sexp to REPL and switch to REPL in =insert state= | +| ~SPC m s f~ | Send function at point to REPL | +| ~SPC m s F~ | Send function at point and switch to REPL in =insert state= | +| ~SPC m s i~ | Start a REPL or switch to REPL buffer | +| ~SPC m s r~ | Send region to REPL | +| ~SPC m s R~ | Send region to REPL and switch to REPL in =insert state= | +| ~SPC m s s~ | Show and switch to REPL buffer | + +** Other key bindings + +| Key Binding | Description | +|-------------+---------------------------------------------------------------------------------| +| ~SPC m i l~ | Insert lambda character | +| ~H-r~ | Run current file and open REPL (=H= is hyper, *may* be bound to command on OSX) | diff --git a/layers/+lang/racket/config.el b/layers/+lang/racket/config.el new file mode 100644 index 0000000..3b3b7b4 --- /dev/null +++ b/layers/+lang/racket/config.el @@ -0,0 +1,14 @@ +;;; config.el --- Racket Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2016 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; variables + +(spacemacs|define-jump-handlers racket-mode racket-visit-definition) diff --git a/layers/+lang/racket/img/racket.png b/layers/+lang/racket/img/racket.png new file mode 100644 index 0000000000000000000000000000000000000000..2ddee2d18f4b764a2b356717727c1d7875365aee GIT binary patch literal 30018 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

*y8NV= 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 W=nn+QR^);YK<>*a%NE}?3I0F4caClV literal 0 HcmV?d00001 diff --git a/doc/img/spacemacs-python.png b/doc/img/spacemacs-python.png new file mode 100644 index 0000000000000000000000000000000000000000..497075b06b56529f2b916bec77eb1c360a23b36a GIT binary patch literal 174427 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 z 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 S-+qC8kc6nLNR^O&!2boyw%?Ed literal 0 HcmV?d00001 diff --git a/doc/img/spacemacs-scale-transient-state.png b/doc/img/spacemacs-scale-transient-state.png new file mode 100644 index 0000000000000000000000000000000000000000..1b2726ad00a93938a73a92ad8764d2c9c0b0fa30 GIT binary patch literal 34199 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¬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