diff --git a/.emacs.d/CHANGELOG.org b/.emacs.d/CHANGELOG.org new file mode 100644 index 0000000..1051d45 --- /dev/null +++ b/.emacs.d/CHANGELOG.org @@ -0,0 +1,2562 @@ +* 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 oboslete 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 qitting =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-tidle-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-visite= + (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= + syle 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 =flychek= 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 bindins 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 =flcheck= 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 doftile 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-spacemac= +- 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 indentifiers= color profiles for =gotham= and + =material= themes. +- Add colorization of keywords and function names for + =rainbow indentifiers=. +- 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 convetions (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/.emacs.d/CONTRIBUTING.org b/.emacs.d/CONTRIBUTING.org new file mode 100644 index 0000000..4a78aa9 --- /dev/null +++ b/.emacs.d/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 extensions 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 [[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 extensions 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/.emacs.d/README.md b/.emacs.d/README.md new file mode 100644 index 0000000..44f9f2c --- /dev/null +++ b/.emacs.d/README.md @@ -0,0 +1,390 @@ + +Made with SpacemacsTwitter
+*** +

Spacemacs

+

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

+*** +

+Gitter +Build Status +PR being merged +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) + - [OS X](#os-x) + - [Windows](#windows) +- [Install](#install) + - [Default installation](#default-installation) + - [Installation alongside another configuration](#installation-alongside-another-configuration) + - [Spacemacs logo](#spacemacs-logo) +- [Update](#update) + - [Automatic update](#automatic-update) + - [On develop branch](#on-develop-branch) + - [Revert to a specific version](#revert-to-a-specific-version) +- [Quotes](#quotes) +- [Contributions](#contributions) +- [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. + +To go to the general documentation [click here][DOCUMENTATION.org]. + +You can also check the [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 is operational with Emacs 24.3, but Emacs 24.4 and above are highly +recommended to enjoy a full experience. The next Emacs major release, Emacs 25, +is not *officially* supported but is partially working (i.e. bugs should be +expected). + +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 are advised to [build from source][build_source] Emacs 24.4 or +greater, as most packages require this version. The same may be true for other +distributions as well. + +### OS X + +The recommended way of installing Emacs on OS X is using [homebrew][]: + +```sh +$ brew tap d12frosted/emacs-plus +$ brew install emacs-plus --with-cocoa --with-gnutls --with-librsvg --with-imagemagick --with-spacemacs-icon +$ brew linkapps +``` + +*Note:* these homebrew commands will install 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 Emacs into Spacemacs. + +*Note:* the proposed `emacs-plus` tap is indentical to the `emacs` formulae, +it just defines some additional options like `--with-spacemacs-icon`. + +*Note:* after you have completed the [install process below](#install), it is +also recommended to add the [osx layer][] to your [dotfile][]. Install +instructions are available in the [osx layer][] documentation. + +### Windows + +Good quality builds can be found [on this page][emacs-for-windows]. It is +recommended to install the most stable build. + +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: [Stackoverflow][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. 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 + ``` + + 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 reinstalled. + +4. Restart Emacs to complete the installation. + +If the mode-line turns red then be sure to consult the [FAQ][FAQ.org]. + +## Installation alongside another configuration + +To try out Spacemacs (or any other Emacs configuration you desire) without +having to go through the trouble of backing up you `~/.emacs.d` directory and +then cloning the new configuration: + +```sh +mkdir ~/spacemacs +git clone git@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` + +## Spacemacs logo + +If you are using Ubuntu and Unity then you can add the Spacemacs logo by +following the instructions [here][cpaulik-unity-icon]. + +If you're on a mac follow [these instructions][icon-mac-instructions]. You can +find an .icns version of the logo by [Nasser Alshammari](http://www.nass3r.com) +in [his repository][icon-repository]. + +# 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.» + +# Contributions + +Spacemacs is a community-driven project, it needs _you_ to keep it up to +date and propose useful and complete configuration! + +Before contributing be sure to consult the +[contribution guidelines][CONTRIBUTING.org] and [conventions][CONVENTIONS.org]. + +# 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 +license. + +# 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. + +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://github.com/syl20bnr/spacemacs) + +- For Markdown: + + ``` + [![Built with Spacemacs](https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg)](http://github.com/syl20bnr/spacemacs) + ``` + +- For HTML: + + ``` + + ``` + +- For Org-mode: + + ``` + [[https://github.com/syl20bnr/spacemacs][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/osx/README +[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/ +[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 +[build_source]: https://www.gnu.org/software/emacs/manual/html_node/efaq/Installing-Emacs.html +[Bountysource]: https://salt.bountysource.com/teams/spacemacs diff --git a/.emacs.d/assets/spacemacs-badge.svg b/.emacs.d/assets/spacemacs-badge.svg new file mode 100644 index 0000000..055e527 --- /dev/null +++ b/.emacs.d/assets/spacemacs-badge.svg @@ -0,0 +1,166 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + built with + built with + Spacemacs + Spacemacs + + + + + + + + diff --git a/.emacs.d/assets/spacemacs.svg b/.emacs.d/assets/spacemacs.svg new file mode 100644 index 0000000..fa8a768 --- /dev/null +++ b/.emacs.d/assets/spacemacs.svg @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.emacs.d/core/aprilfool/zemacs.el b/.emacs.d/core/aprilfool/zemacs.el new file mode 100644 index 0000000..8148d52 --- /dev/null +++ b/.emacs.d/core/aprilfool/zemacs.el @@ -0,0 +1,120 @@ +;;; 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 +(require 'help-mode) + +(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 user-emacs-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/.emacs.d/core/banners/000-banner.txt b/.emacs.d/core/banners/000-banner.txt new file mode 100644 index 0000000..ac629f1 --- /dev/null +++ b/.emacs.d/core/banners/000-banner.txt @@ -0,0 +1,8 @@ + +Welcome to +███████╗██████╗**█████╗**██████╗███████╗███╗***███╗*█████╗**██████╗███████╗ B +██╔════╝██╔══██╗██╔══██╗██╔════╝██╔════╝████╗*████║██╔══██╗██╔════╝██╔════╝ E +███████╗██████╔╝███████║██║*****█████╗**██╔████╔██║███████║██║*****███████╗ T +╚════██║██╔═══╝*██╔══██║██║*****██╔══╝**██║╚██╔╝██║██╔══██║██║*****╚════██║ A +███████║██║*****██║**██║╚██████╗███████╗██║*╚═╝*██║██║**██║╚██████╗███████║ +╚══════╝╚═╝*****╚═╝**╚═╝*╚═════╝╚══════╝╚═╝*****╚═╝╚═╝**╚═╝*╚═════╝╚══════╝ diff --git a/.emacs.d/core/banners/001-banner.txt b/.emacs.d/core/banners/001-banner.txt new file mode 100644 index 0000000..d363d3f --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/banners/002-banner.txt b/.emacs.d/core/banners/002-banner.txt new file mode 100644 index 0000000..0b79203 --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/banners/003-banner.txt b/.emacs.d/core/banners/003-banner.txt new file mode 100644 index 0000000..f9b50e8 --- /dev/null +++ b/.emacs.d/core/banners/003-banner.txt @@ -0,0 +1,17 @@ + + ⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + ⠀⣠⣾⣿⣿⣿⣷⣶⣤⣀⡤⣤⡒⢖⠖⢖⢒⠢⠤⢄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + ⠠⣿⠛⠉⠁⢉⣹⢿⣿⣿⣿⣷⣼⢸⢸⢨⠢⡡⢑⡠⠀⠑⠢⢄⠀⠀⠀⠀⠀⠀ + ⠨⡃⠀⢀⡴⡣⣗⢵⣣⢟⣟⣿⣿⣿⣎⡎⡎⡜⡐⢽⣾⡄⠀⠈⠑⢄⠀⠀⠀⠀ + ⠀⢇⣠⢯⡪⣯⣺⢽⢾⣽⡽⣾⣺⣝⢿⣿⣼⢨⠢⡑⢿⣷⠀⠀⠀⠀⠳⡀⠀⠀ + ⠀⡸⡪⡪⣿⣾⣺⡽⣿⣳⢯⡿⣵⢷⣝⢼⢻⣯⣎⠢⢹⣿⣇⠀⠀⠀⠀⠱⡀⠀ + ⢰⡫⢪⢪⡘⠿⣿⣿⣿⣾⣯⣿⢽⡳⣕⢇⢗⢜⢻⣧⡡⣿⣿⡄⠀⠀⠀⠀⢣⠀ Welcome to + ⣞⢨⢊⢎⢆⠀⠀⠉⢿⣿⣿⣿⣿⣿⣷⣯⣮⣮⣦⣽⣿⣿⣿⣇⠀⠀⠀⠀⠈⡆ + ⡧⢑⠔⡡⢣⠂⠀⠀⠀⢓⢝⢟⡻⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠀⠀⠀⡇ [ S p a c e m a c s ] + ⡏⠄⠡⢊⢂⢅⠀⠀⠀⠀⠇⡇⠎⢎⠢⡩⠛⠻⢿⣿⣿⣿⣿⣿⡆⠀⠀⠀⢀⠇ + ⢸⡀⡁⢁⠂⡂⠀⠀⠀⠀⠈⠔⡑⠡⢊⠐⡈⠌⢀⠀⠙⠻⢿⣿⣷⠀⠀⠀⡸⠀ + ⠀⢣⠀⠀⠠⠈⠀⠀⠀⠀⠀⠀⠂⠌⠐⠠⠀⠀⠀⠀⠀⠀⠀⠈⠙⠀⠀⢠⠃⠀ + ⠀⠀⢣⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠃⠀⠀ + ⠀⠀⠀⠑⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⠁⠀⠀⠀ + ⠀⠀⠀⠀⠀⠙⠤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠁⠀⠀⠀⠀⠀ + ⠀⠀⠀⠀⠀⠀⠀⠙⠒⠤⠤⣀⣀⣀⣀⣀⡠⠤⠔⠒⠉⠀⠀⠀⠀⠀⠀⠀⠀ diff --git a/.emacs.d/core/banners/004-banner.txt b/.emacs.d/core/banners/004-banner.txt new file mode 100644 index 0000000..d1025d0 --- /dev/null +++ b/.emacs.d/core/banners/004-banner.txt @@ -0,0 +1,17 @@ + + ⠀⠀⠀⣀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + ⠀⢀⠎⠁⠀⠀⠈⠉⠒⠦⢀⡀⡄⡤⡤⡤⡤⡤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + ⠀⡎⡠⠒⠉⠉⢑⢲⢀⠀⠀⠈⠪⢣⢫⡺⣹⡹⣝⠾⣻⣶⣤⡀⠀⠀⠀⠀⠀⠀ + ⠀⢿⡅⠀⠠⡰⡊⡎⡪⢊⠢⡠⢀⠀⠘⠜⣜⢎⡯⣳⠀⠳⣻⣿⣷⡄⠀⠀⠀⠀ + ⠀⢹⣇⡠⠫⡪⡊⡢⢊⠨⠨⡂⢕⢐⠄⡀⠈⢺⢸⣝⡆⠀⢻⣷⣿⣿⣦⡀⠀⠀ + ⠀⠈⣟⢪⢇⠀⠑⠌⠢⠡⡃⠢⡑⡐⢅⢇⢆⠀⠑⢕⣯⡀⠀⢿⣿⣿⣿⣷⡀⠀ + ⠀⣐⢵⢣⢻⣦⣀⠀⠀⠁⠈⠌⠢⡊⡜⡔⡕⡭⢆⠈⠺⡄⠀⠸⣿⣿⣿⣿⣧⠀ Welcome to + ⠀⣵⡫⡮⡣⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠈⠘⠘⠙⠑⠀⠀⠀⠀⢿⣿⣿⣿⣿⡀ + ⠀⣗⡯⣞⢵⢽⣿⣿⣿⣟⡕⡕⡤⡠⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⡆ [ S p a c e m a c s ] + ⠀⣯⢿⣺⣝⢮⣿⣿⣿⣿⣿⡪⡮⣳⢝⡽⣲⢤⣄⡀⠀⠀⠀⠀⠈⣿⣿⣿⣿⠂ + ⠀⢸⣿⡽⣾⣳⣻⣿⣿⣿⣿⣾⡽⣺⢵⡯⣯⣿⣳⡿⣷⣦⣄⠀⠀⢿⣿⣿⡟⠀ + ⠀⠀⢺⣿⣯⣿⣽⣿⣿⣿⣿⣿⣿⣽⣯⣟⣿⣾⣿⣿⣿⣿⣿⣿⣶⣼⣿⡿⠁⠀ + ⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⠀⠀ + ⠀⠀⠀⠀⠘⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀ + ⠀⠀⠀⠀⠀⠀⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠀⠀⠀⠀⠀⠀ + ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⠻⠻⠿⠿⠿⠛⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀ diff --git a/.emacs.d/core/banners/999-banner.txt b/.emacs.d/core/banners/999-banner.txt new file mode 100644 index 0000000..8568c06 --- /dev/null +++ b/.emacs.d/core/banners/999-banner.txt @@ -0,0 +1,26 @@ + + ░░░░░░░░░▄░░░░░░░░░░░░░░▄░░░░ + ░░░░░░░░▌▒█░░░░░░░░░░░▄▀▒▌░░░ + Such powerful ░░░░░░░░▌▒▒█░░░░░░░░▄▀▒▒▒▐░░░ + ░░░░░░░▐▄▀▒▒▀▀▀▀▄▄▄▀▒▒▒▒▒▐░░░ + ░░░░░▄▄▀▒░▒▒▒▒▒▒▒▒▒█▒▒▄█▒▐░░░ Vim and Emacs + ░░░▄▀▒▒▒░░░▒▒▒░░░▒▒▒▀██▀▒▌░░░ So love + ░░▐▒▒▒▄▄▒▒▒▒░░░▒▒▒▒▒▒▒▀▄▒▒▌░░ Much forbidden + ░░▌░░▌█▀▒▒▒▒▒▄▀█▄▒▒▒▒▒▒▒█▒▐░░ +Very modes ░▐░░░▒▒▒▒▒▒▒▒▌██▀▒▒░░░▒▒▒▀▄▌░ + ░▌░▒▄██▄▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒▌░ + ▀▒▀▐▄█▄█▌▄░▀▒▒░░░░░░░░░░▒▒▒▐░ + ▐▒▒▐▀▐▀▒░▄▄▒▄▒▒▒▒▒▒░▒░▒░▒▒▒▒▌ + ▐▒▒▒▀▀▄▄▒▒▒▄▒▒▒▒▒▒▒▒░▒░▒░▒▒▐░ + ░▌▒▒▒▒▒▒▀▀▀▒▒▒▒▒▒░▒░▒░▒░▒▒▒▌░ + ░▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▒▄▒▒▐░░ + ░░▀▄▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▄▒▒▒▒▌░░ + ░░░░▀▄▒▒▒▒▒▒▒▒▒▒▄▄▄▀▒▒▒▒▄▀░░░ Wow. + ░░░░░░▀▄▄▄▄▄▄▀▀▀▒▒▒▒▒▄▄▀░░░░░ + ░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▀▀░░░░░░░░ + ██████╗ ██████╗ ██████╗ ███████╗███╗ ███╗ █████╗ ██████╗███████╗ + ██╔══██╗██╔═══██╗██╔════╝ ██╔════╝████╗ ████║██╔══██╗██╔════╝██╔════╝ + ██║ ██║██║ ██║██║ ███╗█████╗ ██╔████╔██║███████║██║ ███████╗ + ██║ ██║██║ ██║██║ ██║██╔══╝ ██║╚██╔╝██║██╔══██║██║ ╚════██║ + ██████╔╝╚██████╔╝╚██████╔╝███████╗██║ ╚═╝ ██║██║ ██║╚██████╗███████║ + ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚══════╝ diff --git a/.emacs.d/core/banners/img/spacemacs.png b/.emacs.d/core/banners/img/spacemacs.png new file mode 100644 index 0000000..aa8953c Binary files /dev/null and b/.emacs.d/core/banners/img/spacemacs.png differ diff --git a/.emacs.d/core/banners/img/zemacs.png b/.emacs.d/core/banners/img/zemacs.png new file mode 100644 index 0000000..2e261af Binary files /dev/null and b/.emacs.d/core/banners/img/zemacs.png differ diff --git a/.emacs.d/core/core-auto-completion.el b/.emacs.d/core/core-auto-completion.el new file mode 100644 index 0000000..a37f8be --- /dev/null +++ b/.emacs.d/core/core-auto-completion.el @@ -0,0 +1,76 @@ +;;; core-auto-completion.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 + +;; Company ------------------------------------------------------------------- + +(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)) + '((company-dabbrev-code company-gtags company-etags company-keywords) + company-files company-dabbrev) + ,(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/.emacs.d/core/core-command-line.el b/.emacs.d/core/core-command-line.el new file mode 100644 index 0000000..d90eb20 --- /dev/null +++ b/.emacs.d/core/core-command-line.el @@ -0,0 +1,54 @@ +;;; 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'.") + +(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 dotspacemacs-elpa-https nil)) + ("--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/.emacs.d/core/core-configuration-layer.el b/.emacs.d/core/core-configuration-layer.el new file mode 100644 index 0000000..7ac7df1 --- /dev/null +++ b/.emacs.d/core/core-configuration-layer.el @@ -0,0 +1,1306 @@ +;;; 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 +;; +;;; Commentary: +;; +;;; Code: + +(require 'cl-lib) +(require 'eieio) +(require 'package) +(require 'warnings) +(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 user-emacs-directory "layers/")) + "Spacemacs contribution layers base directory.") + +(defconst configuration-layer-private-directory + (expand-file-name (concat user-emacs-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.") + +(defconst configuration-layer-rollback-directory + (expand-file-name (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 + :type string + :documentation "Absolute path to the layer directory.") + (variables :initarg :variables + :initform nil + :type list + :documentation "A list of variable-value pairs.") + (disabled :initarg :disabled-for + :initform nil + :type list + :documentation "A list of layer where this layer is disabled.")) + "A configuration layer.") + +(defclass cfgl-package () + ((name :initarg :name + :type symbol + :documentation "Name of the package.") + (owner :initarg :owner + :initform nil + :type symbol + :documentation "The layer defining the init function.") + (pre-layers :initarg :pre-layers + :initform '() + :type list + :documentation "Layers with a pre-init function.") + (post-layers :initarg :post-layers + :initform '() + :type list + :documentation "Layers with a post-init function.") + (location :initarg :location + :initform elpa + :type (satisfies (lambda (x) + (or (stringp x) + (member x '(built-in local elpa)) + (and (listp x) (eq 'recipe (car x)))))) + :documentation "Location of the package.") + (step :initarg :step + :initform nil + :type (satisfies (lambda (x) (member x '(nil pre)))) + :documentation "Initialization step.") + (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."))) + +(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--package-archives-refreshed nil + "Non nil if package archives have already been refreshed.") + +(defvar configuration-layer--layers '() + "A non-sorted list of `cfgl-layer' objects.") + +(defvar configuration-layer--packages '() + "An alphabetically sorted list of `cfgl-package' objects.") + +(defvar configuration-layer--used-distant-packages '() + "A list of all distant packages that are effectively used.") + +(defvar configuration-layer--skipped-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-error-count nil + "Non nil indicates the number of errors occurred during the +installation of initialization.") + +(defvar configuration-layer-paths (make-hash-table :size 256) + "Hash table of layers locations. The key is a layer symbol and the value is +the path for this layer.") + +(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 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) + ;; TODO remove the following hack when 24.3 support ends + ;; Emacs 24.3 and above ships with python.el but in some Emacs 24.3.1 + ;; packages for Ubuntu, python.el seems to be missing. + ;; This hack adds marmalade repository for this case only. + (unless (or (package-installed-p 'python) (version< emacs-version "24.3")) + (add-to-list 'package-archives + '("marmalade" . "https://marmalade-repo.org/packages/"))))) + +(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 (string-match-p "http" (cdr x)) + (cdr x) + (concat (if (and dotspacemacs-elpa-https + ;; 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 () + "Synchronize declared layers in dotfile with spacemacs." + (dotspacemacs|call-func dotspacemacs/layers "Calling dotfile layers...") + (when (spacemacs-buffer//choose-banner) + (spacemacs-buffer//inject-version t)) + ;; layers + (setq configuration-layer--layers (configuration-layer//declare-layers)) + (configuration-layer//configure-layers configuration-layer--layers) + ;; packages + (setq configuration-layer--packages (configuration-layer//declare-packages + configuration-layer--layers)) + (setq configuration-layer--used-distant-packages + (configuration-layer//get-distant-used-packages + configuration-layer--packages)) + (configuration-layer//load-packages configuration-layer--packages) + (when dotspacemacs-delete-orphan-packages + (configuration-layer/delete-orphan-packages configuration-layer--packages))) + +(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 (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/make-layer (layer) + "Return a `cfgl-layer' object based on LAYER." + (let* ((name-sym (if (listp layer) (car layer) layer)) + (name-str (symbol-name name-sym)) + (base-dir (configuration-layer/get-layer-path name-sym)) + (disabled (when (listp layer) + (spacemacs/mplist-get layer :disabled-for))) + (variables (when (listp layer) + (spacemacs/mplist-get layer :variables)))) + (if base-dir + (let* ((dir (format "%s%s/" base-dir name-str))) + (cfgl-layer name-str + :name name-sym + :dir dir + :disabled-for disabled + :variables variables)) + (spacemacs-buffer/warning "Cannot find layer %S !" name-sym) + nil))) + +(defun configuration-layer//make-layers (symbols) + "Make `cfgl-layer' objects from the passed layer SYMBOLS." + (delq nil (mapcar 'configuration-layer/make-layer symbols))) + +(defun configuration-layer/make-package (pkg &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'." + (let* ((name-sym (if (listp pkg) (car pkg) pkg)) + (name-str (symbol-name name-sym)) + (location (when (listp pkg) (plist-get (cdr pkg) :location))) + (step (when (listp pkg) (plist-get (cdr pkg) :step))) + (excluded (when (listp pkg) (plist-get (cdr pkg) :excluded))) + (protected (when (listp pkg) (plist-get (cdr pkg) :protected))) + (copyp (not (null obj))) + (obj (if obj obj (cfgl-package name-str :name name-sym)))) + (when location (oset obj :location location)) + (when step (oset obj :step step)) + (oset obj :excluded excluded) + ;; cannot override protected packages + (unless copyp + (oset obj :protected protected) + (when protected + (push name-sym configuration-layer--protected-packages))) + obj)) + +(defun configuration-layer/get-packages (layers &optional dotfile) + "Read the package lists of LAYERS and dotfile and return a list of packages." + (let (result) + (dolist (layer layers) + (let* ((name (oref layer :name)) + (dir (oref layer :dir)) + (packages-file (concat dir "packages.el")) + (extensions-file (concat dir "extensions.el"))) + ;; packages + (when (file-exists-p packages-file) + ;; required for lazy-loading of unused layers + ;; for instance for helm-spacemacs + (eval `(defvar ,(intern (format "%S-packages" name)) nil)) + (unless (configuration-layer/layer-usedp name) + (load packages-file)) + (dolist (pkg (symbol-value (intern (format "%S-packages" name)))) + (let* ((pkg-name (if (listp pkg) (car pkg) pkg)) + (init-func (intern (format "%S/init-%S" + name pkg-name))) + (pre-init-func (intern (format "%S/pre-init-%S" + name pkg-name))) + (post-init-func (intern (format "%S/post-init-%S" + name pkg-name))) + (obj (object-assoc pkg-name :name result))) + (if obj + (setq obj (configuration-layer/make-package pkg obj)) + (setq obj (configuration-layer/make-package pkg)) + (push obj result)) + (when (fboundp init-func) + ;; last owner wins over the previous one, + ;; still warn about mutliple owners + (when (oref obj :owner) + (spacemacs-buffer/warning + (format (concat "More than one init function found for " + "package %S. Previous owner was %S, " + "replacing it with layer %S.") + pkg (oref obj :owner) name))) + (oset obj :owner name)) + (when (fboundp pre-init-func) + (push name (oref obj :pre-layers))) + (when (fboundp post-init-func) + (push name (oref obj :post-layers))))) + ;; TODO remove support for -excluded-packages in 0.106.0 + (let ((xvar (intern (format "%S-excluded-packages" name)))) + (when (boundp xvar) + (dolist (xpkg (symbol-value xvar)) + (let ((obj (object-assoc xpkg :name result))) + (unless obj + (setq obj (configuration-layer/make-package xpkg)) + (push obj result)) + (oset obj :excluded t)))))) + ;; extensions (dummy duplication of the code above) + ;; TODO remove extensions in 0.106.0 + (when (file-exists-p extensions-file) + ;; required for lazy-loading of unused layers + ;; for instance for helm-spacemacs + (unless (configuration-layer/layer-usedp name) + (load extensions-file)) + (dolist (step '(pre post)) + (eval `(defvar ,(intern (format "%S-%S-extensions" name step)) nil)) + (let ((var (intern (format "%S-%S-extensions" name step)))) + (when (boundp var) + (dolist (pkg (symbol-value var)) + (let ((pkg-name (if (listp pkg) (car pkg) pkg))) + (when (fboundp (intern (format "%S/init-%S" + name pkg-name))) + (let ((obj (configuration-layer/make-package pkg)) + (init-func (intern (format "%S/init-%S" + name pkg-name))) + (pre-init-func (intern (format "%S/pre-init-%S" + name pkg-name))) + (post-init-func (intern (format "%S/post-init-%S" + name pkg-name))) + (obj (object-assoc pkg :name result))) + (unless obj + (setq obj (configuration-layer/make-package pkg)) + (push obj result)) + (when (fboundp init-func) + ;; last owner wins over the previous one, + ;; still warn about mutliple owners + (when (oref obj :owner) + (spacemacs-buffer/warning + (format (concat + "More than one init function found for " + "package %S. Previous owner was %S, " + "replacing it with layer %S.") + pkg (oref obj :owner) name))) + (oset obj :owner name)) + (when (fboundp pre-init-func) + (push name (oref obj :pre-layers))) + (when (fboundp post-init-func) + (push name (oref obj :post-layers))) + (oset obj :location 'local) + (oset obj :step (when (eq 'pre step) step)))))))))))) + ;; additional and excluded packages from dotfile + (when dotfile + (dolist (pkg dotspacemacs-additional-packages) + (let* ((pkg-name (if (listp pkg) (car pkg) pkg)) + (obj (object-assoc pkg-name :name result))) + (if obj + (setq obj (configuration-layer/make-package pkg obj)) + (setq obj (configuration-layer/make-package pkg)) + (push obj result) + (oset obj :owner 'dotfile)))) + (dolist (xpkg dotspacemacs-excluded-packages) + (let ((obj (object-assoc xpkg :name result))) + (unless obj + (setq obj (configuration-layer/make-package xpkg)) + (push obj result)) + (oset obj :excluded t)))) + result)) + +(defun configuration-layer//sort-packages (packages) + "Return a sorted list of PACKAGES objects." + (sort packages (lambda (x y) (string< (symbol-name (oref x :name)) + (symbol-name (oref y :name)))))) + +(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-used-packages (packages) + "Return the distant packages (ie to be intalled) that are effectively used." + (configuration-layer/filter-objects + packages (lambda (x) (and (not (null (oref x :owner))) + (not (memq (oref x :location) '(built-in local))) + (not (stringp (oref x :location))) + (not (oref x :excluded)))))) + +(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 "extensions.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 () + "Return a hash table where the key is the layer symbol and the value is its +path." + ;; 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. + (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 '()) + (result (make-hash-table :size 256))) + ;; 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 (file-name-nondirectory sub)) + (layer-dir (file-name-directory sub))) + (spacemacs-buffer/message + "-> Discovered configuration layer: %s" layer-name) + (push (cons (intern layer-name) layer-dir) discovered))) + (t + ;; layer not found, add it to search path + (setq search-paths (cons sub search-paths))))))))) + ;; add discovered layers to hash table + (mapc (lambda (l) + (if (ht-contains? result (car l)) + ;; the same layer may have been discovered twice, + ;; in which case we don't need a warning + (unless (string-equal (ht-get result (car l)) (cdr l)) + (spacemacs-buffer/warning + (concat "Duplicated layer %s detected in directory \"%s\", " + "keeping only the layer in directory \"%s\"") + (car l) (cdr l) (ht-get result (car l)))) + (puthash (car l) (cdr l) result))) + discovered) + result)) + +(defun configuration-layer//declare-layers () + "Declare default layers and user layers declared in the dotfile." + (setq configuration-layer--layers nil) + (setq configuration-layer-paths (configuration-layer//discover-layers)) + (when (eq 'all dotspacemacs-configuration-layers) + (setq dotspacemacs-configuration-layers + (ht-keys configuration-layer-paths))) + (dolist (layer dotspacemacs-configuration-layers) + (let ((layer-name (if (listp layer) (car layer) layer))) + (if (ht-contains? configuration-layer-paths layer-name) + (unless (string-match-p "+distribution" + (ht-get configuration-layer-paths layer-name)) + (push (configuration-layer/make-layer layer) + configuration-layer--layers)) + (spacemacs-buffer/warning "Unknown layer %s declared in dotfile." + layer-name)))) + (setq configuration-layer--layers (reverse configuration-layer--layers)) + ;; distribution layer is always first + (push (configuration-layer/make-layer dotspacemacs-distribution) + configuration-layer--layers)) + +(defun configuration-layer/declare-layers (layer-names) + "Add layer with LAYER-NAMES to used layers." + (mapc 'configuration-layer/declare-layer layer-names)) + +(defun configuration-layer/declare-layer (layer-name) + "Declare a single layer" + (unless (object-assoc layer-name :name configuration-layer--layers) + (let ((new-layer (configuration-layer/make-layer layer-name))) + (push new-layer configuration-layer--layers) + (configuration-layer//configure-layer new-layer)))) + +(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)))) + (spacemacs-buffer/warning "Missing value for variable %s !" + var)))))) + +(defun configuration-layer/layer-usedp (name) + "Return non-nil if NAME is the name of a used layer." + (not (null (object-assoc name :name configuration-layer--layers)))) + +(defun configuration-layer/package-usedp (name) + "Return non-nil if NAME is the name of a used package." + (let ((obj (object-assoc name :name configuration-layer--packages))) + (when (and obj (not (oref obj :excluded))) (oref obj :owner)))) + +(defun configuration-layer//configure-layers (layers) + "Configure LAYERS." + ;; FIFO loading of layers, this allow the user to put her layers at the + ;; end of the list to override previous layers. + (let ((warning-minimum-level :error)) + (dolist (l layers) + (configuration-layer//configure-layer l)))) + +(defun configuration-layer//configure-layer (layer) + "Configure LAYER." + (configuration-layer//set-layer-variables layer) + (configuration-layer//load-layer-files layer '("funcs.el" + "config.el" + "keybindings.el"))) + +(defun configuration-layer//declare-packages (layers) + "Declare all packages contained in LAYERS." + (let ((layers2 layers) + (warning-minimum-level :error)) + ;; TODO remove extensions in 0.106.0 + (configuration-layer//load-layers-files layers2 '("packages.el" "extensions.el")) + ;; gather all the packages of current layer + (configuration-layer//sort-packages (configuration-layer/get-packages + layers2 t)))) + +(defun configuration-layer//load-packages (packages) + "Load PACKAGES." + ;; number of chuncks for the loading screen + (setq spacemacs-loading-dots-chunk-threshold + (/ (configuration-layer/configured-packages-count) + spacemacs-loading-dots-chunk-count)) + (configuration-layer//install-packages packages) + (configuration-layer//configure-packages packages)) + +(defun configuration-layer//load-layers-files (layers files) + "Load the files of list FILES for all passed LAYERS." + (dolist (layer layers) + (configuration-layer//load-layer-files layer files))) + +(defun configuration-layer//load-layer-files (layer files) + "Load the files of list FILES for the given LAYER." + (dolist (file files) + (let ((file (concat (oref layer :dir) file))) + (if (file-exists-p file) (load file))))) + +(defun configuration-layer/configured-packages-count () + "Return the number of configured packages." + (length configuration-layer--packages)) + +(defun configuration-layer//install-packages (packages) + "Install PACKAGES." + (interactive) + (let* ((noinst-pkg-names + (configuration-layer//get-uninstalled-packages + (mapcar 'car + (object-assoc-list + :name configuration-layer--used-distant-packages)))) + (noinst-count (length noinst-pkg-names)) + installed-count) + ;; installation + (when noinst-pkg-names + (spacemacs-buffer/append + (format "Found %s new package(s) to install...\n" + noinst-count)) + (configuration-layer/retrieve-package-archives) + (setq installed-count 0) + (dolist (pkg-name noinst-pkg-names) + (setq installed-count (1+ installed-count)) + (let* ((pkg (object-assoc pkg-name :name configuration-layer--packages)) + (layer (when pkg (oref pkg :owner))) + (location (when pkg (oref pkg :location)))) + (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 noinst-count) t) + (unless (package-installed-p pkg-name) + (condition-case err + (cond + ((or (null pkg) (eq 'elpa location)) + (configuration-layer//install-from-elpa pkg-name)) + ((and (listp location) (eq 'recipe (car location))) + (configuration-layer//install-from-recipe pkg)) + (t (spacemacs-buffer/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)) + (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)) + (dolist + (dep (configuration-layer//get-package-deps-from-archive + pkg-name)) + (if (package-installed-p (car dep)) + (configuration-layer//activate-package (car dep)) + (package-install (car dep)))) + (package-install pkg-name))) + +(defun configuration-layer//install-from-recipe (pkg) + "Install PKG from a recipe." + (let* ((pkg-name (oref pkg :name)) + (layer (oref pkg :owner)) + (recipe (cons pkg-name (cdr (oref pkg :location))))) + (if recipe + (quelpa recipe) + (spacemacs-buffer/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 PACKAGES 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) (not (package-installed-p x))))) + +(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 (object-assoc pkg-name :name configuration-layer--packages) + (let* ((pkg (object-assoc pkg-name :name configuration-layer--packages)) + (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 (object-assoc pkg-name :name configuration-layer--packages))) + (when pkg + (let ((location (oref pkg :location))) + (when (and (listp location) (eq 'recipe (car location))) + 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)) + new-version) + (when cur-version + (setq new-version + (if recipe + (quelpa-checkout recipe (expand-file-name (symbol-name pkg-name) + quelpa-build-dir)) + (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--skipped-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." + (configuration-layer//configure-packages-2 + (configuration-layer/filter-objects + packages (lambda (x) (eq 'pre (oref x :step))))) + (configuration-layer//configure-packages-2 + (configuration-layer/filter-objects + packages (lambda (x) (null (oref x :step)))))) + +(defun configuration-layer//configure-packages-2 (packages) + "Configure all passed PACKAGES." + (dolist (pkg packages) + (spacemacs-buffer/loading-animation) + (let ((pkg-name (oref pkg :name))) + (cond + ((and (oref pkg :excluded) + (not (oref pkg :protected))) + (spacemacs-buffer/message + (format "%S ignored since it has been excluded." pkg-name))) + ((null (oref pkg :owner)) + (spacemacs-buffer/message + (format "%S ignored since it has no owner layer." 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) + (spacemacs-buffer/warning + "Location path for package %S does not exists (value: %s)." + pkg location))) + ((and (eq 'local location) + (eq 'dotfile (oref pkg :owner))) + (push (file-name-as-directory + (concat configuration-layer-private-directory "local/" + (symbol-name (oref pkg :name)))) + load-path)) + ((eq 'local location) + (let* ((owner (object-assoc (oref pkg :owner) + :name configuration-layer--layers)) + (dir (when owner (oref owner :dir)))) + (push (format "%slocal/%S/" dir pkg-name) load-path) + ;; TODO remove extensions in 0.106.0 + (push (format "%sextensions/%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 (oref pkg :owner)) + (spacemacs-buffer/message + (format "%S is configured in the dotfile." pkg-name))) + (t + (configuration-layer//configure-package pkg)))))))) + +(defun configuration-layer//configure-package (pkg) + "Configure PKG." + (let* ((pkg-name (oref pkg :name)) + (owner (oref pkg :owner)) + (owner-layer (object-assoc owner :name configuration-layer--layers)) + (disabled-for-layers (oref owner-layer :disabled-for))) + (spacemacs-buffer/message (format "Configuring %S..." pkg-name)) + ;; pre-init + (mapc (lambda (layer) + (if (memq layer disabled-for-layers) + (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) + (if (memq layer disabled-for-layers) + (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--skipped-packages nil) + (let* ((update-packages + (configuration-layer//get-packages-to-update + (mapcar 'car (object-assoc-list + :name configuration-layer--used-distant-packages)))) + (skipped-count (length configuration-layer--skipped-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--skipped-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--skipped-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 "%s\n" x) t)) + update-packages) + (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) + (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) + (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 + "\nEmacs has to be restarted to actually install the new packages.\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 (concat user-emacs-directory "elpa/")) + (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))))) + (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." + (if (version< emacs-version "24.3.50") + ;; fake version list to always activate the package + (package-activate pkg '(0 0 0 0)) + (unless (memq pkg package-activated-list) + (package-activate pkg)))) + +(defun configuration-layer/get-layers-list () + "Return a list of all discovered layer symbols." + (ht-keys configuration-layer-paths)) + +(defun configuration-layer/get-layer-property (layer slot) + "Return the value of SLOT for the given LAYER." + (slot-value (object-assoc layer :name configuration-layer--layers) slot)) + +(defun configuration-layer/get-layer-local-dir (layer) + "Return the value of SLOT for the given LAYER." + (concat (slot-value (object-assoc layer :name configuration-layer--layers) + :dir) "local/")) + +(defun configuration-layer/get-layer-path (layer) + "Return the path for LAYER symbol." + (ht-get configuration-layer-paths layer)) + +(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 (object-assoc pkg-sym :name 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 (object-assoc pkg-name :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 (object-assoc pkg-name :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))) + (cond + ((version< emacs-version "24.3.50") + (let* ((version (aref (cdr pkg-desc) 0)) + (elpa-dir (concat user-emacs-directory "elpa/")) + (pkg-dir-name (format "%s-%s.%s" + (symbol-name pkg-name) + (car version) + (cadr version)))) + (expand-file-name (concat elpa-dir pkg-dir-name)))) + (t (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 + (cond + ((version< emacs-version "24.3.50") (aref (cdr pkg-desc) 1)) + (t (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 (if (version< emacs-version "24.3.50") + (aref (cdr pkg-arch) 1) + (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 + (cond + ((version< emacs-version "24.3.50") (package-version-join + (aref (cdr pkg-desc) 0))) + (t (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 + (cond + ((version< emacs-version "24.3.50") (package-version-join + (aref (cdr pkg-arch) 0))) + (t (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< emacs-version "24.3.50") + (let ((v (configuration-layer//get-package-version-string pkg-name))) + (when v (package-delete (symbol-name pkg-name) v)))) + ((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 + configuration-layer--used-distant-packages)) + (orphans (configuration-layer//get-orphan-packages + configuration-layer--used-distant-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//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/.emacs.d/core/core-debug.el b/.emacs.d/core/core-debug.el new file mode 100644 index 0000000..b2af85c --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/core-display-init.el b/.emacs.d/core/core-display-init.el new file mode 100644 index 0000000..6002edc --- /dev/null +++ b/.emacs.d/core/core-display-init.el @@ -0,0 +1,41 @@ +;;; 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) + ((boundp 'w32-initialized) 'w32-initialized) + ((boundp 'x-initialized) 'x-initialized) + (t 't)))) ; fallback to normal loading behavior + (if (symbol-value init) + (progn + ,@body) + (push (lambda () ,@body) spacemacs--after-display-system-init-list)))) + +(provide 'core-display-init) diff --git a/.emacs.d/core/core-documentation.el b/.emacs.d/core/core-documentation.el new file mode 100644 index 0000000..4d70e7c --- /dev/null +++ b/.emacs.d/core/core-documentation.el @@ -0,0 +1,142 @@ +;;; 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) + +(defvar spacemacs--category-names + '(("config-files" . "Configuration files") + ("email" . "E-mail") + ("irc" . "IRC") + ("lang" . "Programming languages")) + "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 user-emacs-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")) + (insert "* General layers\n") + (spacemacs//generate-layers-from-path configuration-layer-directory "*") + (write-file (concat user-emacs-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/publish-doc () + "Publishe 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) + (let* ((header + " + + + + ") + (publish-target (concat user-emacs-directory "export/")) + (org-html-htmlize-output-type 'css) + (org-publish-project-alist + `(("spacemacs" + :components ("spacemacs-doc" + "spacemacs-doc-static" + "layers-doc" + "layers-doc-static")) + ("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 user-emacs-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 "extensions" + :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 user-emacs-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)) + +(provide 'core-documentation) diff --git a/.emacs.d/core/core-dotspacemacs.el b/.emacs.d/core/core-dotspacemacs.el new file mode 100644 index 0000000..843f271 --- /dev/null +++ b/.emacs.d/core/core-dotspacemacs.el @@ -0,0 +1,582 @@ +;;; 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.") + +(defconst dotspacemacs-directory + (let* ((env (getenv "SPACEMACSDIR")) + (env-dir (when env (expand-file-name (concat env "/")))) + (no-env-dir-default (expand-file-name + (concat user-home-directory + ".spacemacs.d/")))) + (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.") + +(defconst dotspacemacs-filepath + (let* ((default (concat user-home-directory ".spacemacs")) + (spacemacs-dir-init (when dotspacemacs-directory + (concat dotspacemacs-directory + "init.el")))) + (if (and (not (file-exists-p default)) + dotspacemacs-directory + (file-exists-p spacemacs-dir-init)) + spacemacs-dir-init + default)) + "Filepath to the installed dotfile. 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 +`+distribution'. 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-configuration-layer-path '() + "List of additional paths where to look for configuration layers. +Paths must have a trailing slash (ie. `~/.mycontribs/')") + +(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'. Evil is always enabled but if the +variable is `emacs' then the `holy-mode' is enabled at startup. `hybrid' +uses emacs key bindings for vim's insert mode, but otherwise leaves evil +unchanged.") + +(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 t + "If non nil then spacemacs will check for updates at startup +when the current branch is not `develop'") + +(defvar dotspacemacs-configuration-layers '(emacs-lisp) + "List of configuration layers to load. If it is the symbol `all' instead +of a list then all discovered layers will be installed.") + +(defvar dotspacemacs-themes '(spacemacs-dark + spacemacs-light + solarized-dark + solarized-light + leuven) + "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") + +(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-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. `powerline-scale' allows to quickly tweak the mode-line +size to make separators look not too crappy.") + +(defvar dotspacemacs-command-key ":" + "The key used for Evil commands (ex-commands) and Emacs commands (M-x). +By default the command key is `:' so ex-commands are executed like in Vim +with `:' and Emacs commands are executed with ` :'.") + +(defvaralias 'dotspacemacs-remap-Y-to-y$ 'evil-want-Y-yank-to-eol + "If non nil `Y' is remapped to `y$'.") + +(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-use-ido nil + "If non nil then `ido' replaces `helm' for some commands. For now only +`find-files' (SPC f f) is replaced.") + +(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-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-micro-state t + "If non nil the paste micro-state is enabled. While enabled pressing `p` +several times cycle between the kill ring content.'") + +(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-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 the 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-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-delete-orphan-packages t + "If non-nil spacemacs will delete any orphan packages, i.e. packages that are +declared in a layer which is not a member of +`dotspacemacs-configuration-layers'") + +(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 projects) + "List of items to show in the startup buffer. If nil it is disabled. +Possible values are: `recents' `bookmarks' `projects'.") + +(defvar dotspacemacs-startup-recent-list-size 5 + "Number of recent files to show in the startup buffer. Ignored if +`dotspacemacs-startup-lists' doesn't include `recents'.") + +(defvar dotspacemacs-excluded-packages '() + "A list of packages and/or extensions that will not be install and loaded.") + +;; 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/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...") + (configuration-layer/sync) + (if (member arg '((4) (16))) + (message (concat "Done (`dotspacemacs/user-config' function has " + "been skipped).")) + ;; TODO remove support for dotspacemacs/config in 0.106 + (if (fboundp 'dotspacemacs/user-config) + (dotspacemacs|call-func dotspacemacs/user-config + "Calling dotfile user config...") + (spacemacs-buffer/warning (concat "`dotspacemacs/config' is deprecated, " + "please rename your function to " + "`dotspacemacs/user-config'")) + (dotspacemacs|call-func dotspacemacs/config + "Calling dotfile user config...")) + (message "Done.")) + (when (configuration-layer/package-usedp 'spaceline) + (spacemacs//restore-powerline (current-buffer)))) + (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 overwite 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 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) + ("A minimalist distribution that you can build on. (spacemacs-base)" + spacemacs-base))))))))) + (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 overwite it ? " + dotspacemacs-filepath)) t))) + (when install + (write-file dotspacemacs-filepath) + (message "%s has been installed." dotspacemacs-filepath) + t))))) + +(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-delete-orphan-packages nil) + (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-delete-orphan-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) (member x '(vim emacs hybrid))) + 'dotspacemacs-editing-style "is \'vim, \'emacs or \'hybrid") + (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) (member x '(recents bookmarks projects))) + 'dotspacemacs-startup-lists (concat "includes only \'recents, " + "\'bookmarks or \'projects")) + (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-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) + (setq configuration-layer-paths (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/.emacs.d/core/core-emacs-backports.el b/.emacs.d/core/core-emacs-backports.el new file mode 100644 index 0000000..58dd45a --- /dev/null +++ b/.emacs.d/core/core-emacs-backports.el @@ -0,0 +1,47 @@ +;;; 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 + +(unless (featurep 'subr-x) + ;; `subr-x' function for Emacs 24.3 and below + (defsubst string-join (strings &optional separator) + "Join all STRINGS using SEPARATOR." + (mapconcat 'identity strings separator)) + + (defsubst string-trim-left (string) + "Remove leading whitespace from STRING." + (if (string-match "\\`[ \t\n\r]+" string) + (replace-match "" t t string) + string)) + + (defsubst string-trim-right (string) + "Remove trailing whitespace from STRING." + (if (string-match "[ \t\n\r]+\\'" string) + (replace-match "" t t string) + string)) + + (defsubst string-trim (string) + "Remove leading and trailing whitespace from STRING." + (string-trim-left (string-trim-right string))) + + (defsubst string-empty-p (string) + "Check whether STRING is empty." + (string= string ""))) + +(unless (fboundp 'with-eval-after-load) + ;; `with-eval-after-load' function for Emacs 24.3 and below + (defmacro with-eval-after-load (file &rest body) + "Execute BODY after FILE is loaded. +FILE is normally a feature name, but it can also be a file name, +in case that file does not provide any feature." + (declare (indent 1) (debug t)) + `(eval-after-load ,file (lambda () ,@body)))) + +(provide 'core-emacs-backports) diff --git a/.emacs.d/core/core-fonts-support.el b/.emacs.d/core/core-fonts-support.el new file mode 100644 index 0000000..feb0ee7 --- /dev/null +++ b/.emacs.d/core/core-fonts-support.el @@ -0,0 +1,100 @@ +;;; 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 (plist) + "Set the font given the passed PLIST. + +PLIST has the form (\"fontname\" :prop1 val1 :prop2 val2 ...)" + (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) + (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))) + )) + +(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 unicode &optional ascii) + "Diminish MODE name in mode line to UNICODE or ASCII depending on the value +`dotspacemacs-mode-line-unicode-symbols'. +If ASCII si not provided then UNICODE is used instead." + `(add-to-list 'spacemacs--diminished-minor-modes '(,mode ,unicode ,ascii))) + +(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/.emacs.d/core/core-funcs.el b/.emacs.d/core/core-funcs.el new file mode 100644 index 0000000..2a6e8be --- /dev/null +++ b/.emacs.d/core/core-funcs.el @@ -0,0 +1,266 @@ +;;; 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) + +(defun spacemacs/load-or-install-protected-package (pkg &optional log file-to-load) + "Load PKG package, and protect it against being deleted as an orphan. +See `spacemacs/load-or-install-package' for more information." + (push pkg configuration-layer--protected-packages) + (spacemacs/load-or-install-package pkg log file-to-load)) + +(defun spacemacs/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)) + (condition-case nil + (require pkg) + (error + ;; 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 spacemacs//get-package-directory (pkg) + "Return the directory of PKG. Return nil if not found." + (let ((elpa-dir (concat user-emacs-directory "elpa/"))) + (when (file-exists-p elpa-dir) + (let ((dir (cl-reduce (lambda (x y) (if x x y)) + (mapcar (lambda (x) + (when (string-match + (concat "/" + (symbol-name pkg) + "-[0-9]+") x) x)) + (directory-files elpa-dir 'full)) + :initial-value nil))) + (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))) + +;; From 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" + (save-excursion + (let ((buf (find-file-noselect filename))) + (set-buffer buf) + (erase-buffer) + (spacemacs/dump varlist buf) + (make-directory (file-name-directory filename) t) + (save-buffer) + (kill-buffer)))) + +;; 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))) + `((unless (null ',evil-leader) + (dolist (key ',evil-leader) + (spacemacs/set-leader-keys key ',func))) + (unless (null ',evil-leader-for-mode) + (dolist (val ',evil-leader-for-mode) + (spacemacs/set-leader-keys-for-major-mode + (car val) (cdr val) ',func))) + (unless (null ',global-key) + (dolist (key ',global-key) + (global-set-key (kbd key) ',func))) + (unless (null ',def-key) + (dolist (val ',def-key) + (define-key (eval (car val)) (kbd (cdr val)) ',func)))))) + +(defun spacemacs/view-org-file (file &optional anchor-text expand-scope) + "Open the change log for the current version." + (interactive) + (find-file file) + (org-indent-mode) + (view-mode) + (goto-char (point-min)) + + (when 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)) + + ;; 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)))) + + (setq-local org-hide-emphasis-markers t)) + +(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)) + +(provide 'core-funcs) + diff --git a/.emacs.d/core/core-keybindings.el b/.emacs.d/core/core-keybindings.el new file mode 100644 index 0000000..fc3cf6d --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/core-load-paths.el b/.emacs.d/core/core-load-paths.el new file mode 100644 index 0000000..cc2c955 --- /dev/null +++ b/.emacs.d/core/core-load-paths.el @@ -0,0 +1,64 @@ +;;; 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)) + +;; paths +(defconst spacemacs-core-directory + (expand-file-name (concat user-emacs-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-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 user-emacs-directory "doc/")) + "Spacemacs documentation directory.") +(defconst spacemacs-assets-directory + (expand-file-name (concat user-emacs-directory "assets/")) + "Spacemacs assets directory.") +(defconst spacemacs-test-directory + (expand-file-name (concat user-emacs-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)) + +(defconst user-dropbox-directory + (expand-file-name (concat user-home-directory "Dropbox/")) + "Dropbox directory.") + +;; load paths +(mapc 'add-to-load-path + `( + ,(concat user-emacs-directory "core/") + ,(concat user-emacs-directory "core/libs/") + ,(concat user-emacs-directory "core/aprilfool/") + ,(concat user-dropbox-directory "emacs/") + )) diff --git a/.emacs.d/core/core-micro-state.el b/.emacs.d/core/core-micro-state.el new file mode 100644 index 0000000..ea5b419 --- /dev/null +++ b/.emacs.d/core/core-micro-state.el @@ -0,0 +1,268 @@ +;;; -*- 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 +(require 'corelv) + +(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) + +(defun spacemacs//micro-state-set-minibuffer-height (str) + "Set the max mini windows size given a string STR." + (let ((line-count (1+ (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 + 'corelv-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 + (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)))))) + ,(when exec-binding + (spacemacs//micro-state-auto-execute bindings)) + (,(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)) + (if bdoc + (apply ',msg-func + (list (spacemacs//micro-state-propertize-doc + (format "%S: %s" ',name bdoc)))) + (when (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 corelv-wnd) + (let ((buf (window-buffer corelv-wnd))) + (delete-window corelv-wnd) + (kill-buffer buf)))) + +(provide 'core-micro-state) diff --git a/.emacs.d/core/core-release-management.el b/.emacs.d/core/core-release-management.el new file mode 100644 index 0000000..9e25907 --- /dev/null +++ b/.emacs.d/core/core-release-management.el @@ -0,0 +1,302 @@ +;;; 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.") +(defvar spacemacs-version-check-timer nil + "The current timer for new version check.") +(defvar spacemacs-version-check-interval "6 hours" + "Time between two version checks.") +(defvar spacemacs-version-check-lighter "[+]" + "Text displayed in the mode-line when a new version is available.") + +(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 "Your Emacs directory is not clean.\ngit 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 "Succesfully 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 (&optional interval) + "Periodicly check for new for new Spacemacs version. +Update `spacemacs-new-version' variable if any new version has been +found." + (cond + ((not dotspacemacs-check-for-update) + (message "Skipping check for new version (reason: dotfile)")) + ((string-equal "develop" (spacemacs/git-get-current-branch)) + (message "Skipping check for new version (reason: develop branch)")) + (t + (message "Start checking for new version...") + (async-start + `(lambda () + ,(async-inject-variables "\\`user-emacs-directory\\'") + (load-file (concat user-emacs-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)))))) + +(defun spacemacs/get-last-version () + "Return the last tagged version." + (spacemacs//get-last-version spacemacs-repository + spacemacs-repository-owner + spacemacs-checkversion-remote + spacemacs-checkversion-branch)) + +(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) + (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/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/git-has-remote (remote) + "Return non nil if REMOTE is declared." + (let((proc-buffer "git-has-remote") + (default-directory (file-truename user-emacs-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 user-emacs-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 user-emacs-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-remove-remote") + (default-directory (file-truename user-emacs-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 user-emacs-directory))) + (prog2 + ;; seems necessary to fetch first + (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 user-emacs-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 user-emacs-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 user-emacs-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 user-emacs-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-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 user-emacs-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/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 user-emacs-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/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) + +(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))))) + +(provide 'core-release-management) diff --git a/.emacs.d/core/core-spacemacs-buffer.el b/.emacs.d/core/core-spacemacs-buffer.el new file mode 100644 index 0000000..8f782da --- /dev/null +++ b/.emacs.d/core/core-spacemacs-buffer.el @@ -0,0 +1,645 @@ +;;; 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.105" + "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--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--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-mode-map + (let ((map (make-sparse-keymap))) + (define-key map [tab] 'widget-forward) + (define-key map (kbd "C-i") 'widget-forward) + (define-key map [backtab] 'widget-backward) + (define-key map (kbd "RET") 'widget-button-press) + (define-key map [down-mouse-1] 'widget-button-click) + (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 + (setq buffer-read-only t + truncate-lines t) + (page-break-lines-mode) + ;; 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 + (unless (eq dotspacemacs-editing-style 'emacs) + (evil-set-initial-state 'spacemacs-buffer-mode 'motion))) + +(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*'. +`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) + (insert-file-contents banner)) + (spacemacs-buffer//inject-version)) + (spacemacs-buffer//insert-buttons) + (if (file-exists-p spacemacs-buffer--cache-file) + (load spacemacs-buffer--cache-file) + (unless (file-exists-p dotspacemacs-filepath) + ;; fresh install of spacemacs, the release notes are not displayed + (setq spacemacs-buffer--release-note-version spacemacs-version) + (spacemacs/dump-vars-to-file + '(spacemacs-buffer--release-note-version) spacemacs-buffer--cache-file))) + ;; if there is no installed dotfile we assume the user is + ;; new to spacemacs and open the quickhelp + (when (not (file-exists-p dotspacemacs-filepath)) + (spacemacs-buffer/toggle-note (concat spacemacs-info-directory "quickhelp.txt") + (spacemacs-buffer//insert-note-p 'quickhelp))) + ;; if there is an installed dotfile we check the variable + ;; spacemacs-buffer--release-note-version to decide whether + ;; we show the release note + (when (and (file-exists-p dotspacemacs-filepath) + (or (not spacemacs-buffer--release-note-version) + (version< spacemacs-buffer--release-note-version + spacemacs-version))) + (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)) + ((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))))) + +(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." + (let* ((files (directory-files spacemacs-banner-directory t)) + (count (length files)) + ;; -2 then +2 to remove `.' and `..' + (choice (+ 2 (random (- count (if all 2 3)))))) + (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 (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 (floor (/ (- spacemacs-buffer--banner-length + (+ (length title) 1)) 2)) ?\ )) + (insert (format "%s\n\n" title))))) + +(defun spacemacs-buffer//inject-version (&optional insert-distro) + "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) + (lhs (format "(emacs-%s)" emacs-version)) + (rhs (if insert-distro + (format "(%s-%s)" + dotspacemacs-distribution + spacemacs-version) + (format "(%s)" spacemacs-version))) + (len (- maxcol (length lhs))) + (buffer-read-only nil)) + (goto-char (point-min)) + (delete-region (point) (progn (end-of-line) (point))) + (insert (format + (format "%%s %%%ds" len) + lhs rhs)))))) + +(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)) + (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 user-emacs-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)))) + +(defun spacemacs-buffer/warning (msg &rest args) + "Display MSG as a warning message but in buffer `*Messages*'. +The message is always displayed. " + (message "(Spacemacs) Warning: %s" (apply 'format msg args))) + +(defun spacemacs-buffer/insert-page-break () + "Insert a page break line in spacemacs buffer." + (spacemacs-buffer/append "\n \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 (+ (- 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 dotspacemacs-loading-progress-bar + (setq spacemacs-loading-counter (1+ spacemacs-loading-counter)) + (when (>= spacemacs-loading-counter spacemacs-loading-dots-chunk-threshold) + (setq spacemacs-loading-counter 0) + (setq spacemacs-loading-string + (concat spacemacs-loading-string + (make-string spacemacs-loading-dots-chunk-size + spacemacs-loading-char))) + (spacemacs-buffer/set-mode-line spacemacs-loading-string) + (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//insert-buttons () + (goto-char (point-max)) + (insert " ") + (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)) + (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)) + (insert "\n") + (insert " ") + (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 "Find Spacemacs package and layer configs using helm-spacemacs." + :action (lambda (&rest ignore) (call-interactively 'helm-spacemacs)) + :mouse-face 'highlight + :follow-link "\C-m") + (insert "\n\n")) + +(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/insert-startupify-lists () + (interactive) + (with-current-buffer (get-buffer spacemacs-buffer-name) + (let ((buffer-read-only nil) + (list-separator "\n\n")) + (goto-char (point-max)) + (spacemacs-buffer/insert-page-break) + (mapc (lambda (el) + (cond + ((eq el 'recents) + (recentf-mode) + (when (spacemacs-buffer//insert-file-list "Recent Files:" (recentf-elements dotspacemacs-startup-recent-list-size)) + (spacemacs//insert--shortcut "r" "Recent Files:") + (insert list-separator))) + ((eq el 'bookmarks) + (helm-mode) + (when (spacemacs-buffer//insert-bookmark-list "Bookmarks:" (bookmark-all-names)) + (spacemacs//insert--shortcut "b" "Bookmarks:") + (insert list-separator))) + ((eq el 'projects) + (projectile-mode) + (when (spacemacs-buffer//insert-file-list "Projects:" (projectile-relevant-known-projects)) + (spacemacs//insert--shortcut "p" "Projects:") + (insert list-separator))))) dotspacemacs-startup-lists)))) + +(defun spacemacs-buffer/goto-link-line () + "Move the 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)) + (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))) + +(defun spacemacs-buffer/goto-buffer () + "Create the special buffer for `spacemacs-buffer-mode' if it doesn't +already exist, and switch to it." + (interactive) + (unless (buffer-live-p (get-buffer spacemacs-buffer-name)) + (with-current-buffer (get-buffer-create spacemacs-buffer-name) + (save-excursion + (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 is loaded + (if after-init-time + (progn + (when dotspacemacs-startup-lists + (spacemacs-buffer/insert-startupify-lists)) + (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))))) + (spacemacs-buffer/goto-link-line) + (switch-to-buffer spacemacs-buffer-name) + (spacemacs//redisplay)) + +(provide 'core-spacemacs-buffer) diff --git a/.emacs.d/core/core-spacemacs.el b/.emacs.d/core/core-spacemacs.el new file mode 100644 index 0000000..9a18798 --- /dev/null +++ b/.emacs.d/core/core-spacemacs.el @@ -0,0 +1,294 @@ +;;; 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 'core-debug) +(require 'core-command-line) +(require 'core-dotspacemacs) +(require 'core-emacs-backports) +(require 'core-release-management) +(require 'core-auto-completion) +(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-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-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--default-mode-line mode-line-format + "Backup of default mode line format.") + +(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...") + (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 (find-font (font-spec :name (car dotspacemacs-default-font))) + (spacemacs/set-default-font dotspacemacs-default-font) + (spacemacs-buffer/warning "Cannot find font \"%s\"!" + (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))) + (setq initial-buffer-choice nil) + (setq inhibit-startup-screen t) + ;; bootstrap packages + (spacemacs/load-or-install-protected-package 'evil t) + (spacemacs/load-or-install-protected-package 'bind-map t) + ;; bind-key is required by use-package + (spacemacs/load-or-install-protected-package 'bind-key t) + (spacemacs/load-or-install-protected-package 'which-key t) + (spacemacs/load-or-install-protected-package 'use-package t) + (setq use-package-verbose init-file-debug) + ;; package-build is required by quelpa + (spacemacs/load-or-install-protected-package 'package-build t) + (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) + (spacemacs/load-or-install-protected-package 'quelpa t) + ;; inject use-package hooks for easy customization of stock package + ;; configuration + (setq use-package-inject-hooks 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 "[⇪]")) + (spacemacs/set-new-version-lighter-mode-line-faces)) + +(defun spacemacs//removes-gui-elements () + "Remove the menu bar, tool bar and scroll bars." + ;; removes the GUI elements + (unless (eq window-system '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) + (dotspacemacs/sync-configuration-layers '(16))))) + +(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/setup-startup-hook () + "Add post init processing." + (add-hook + 'emacs-startup-hook + (lambda () + ;; Ultimate configuration decisions are given to the user who can defined + ;; them in his/her ~/.spacemacs file + ;; TODO remove support for dotspacemacs/config in 0.106 + (if (fboundp 'dotspacemacs/user-config) + (dotspacemacs|call-func dotspacemacs/user-config + "Calling dotfile user config...") + (spacemacs-buffer/warning (concat "`dotspacemacs/config' is deprecated, " + "please rename your function to " + "`dotspacemacs/user-config'")) + (dotspacemacs|call-func dotspacemacs/config + "Calling dotfile user config...")) + (when (fboundp dotspacemacs-scratch-mode) + (with-current-buffer "*scratch*" + (funcall dotspacemacs-scratch-mode))) + ;; from jwiegley + ;; https://github.com/jwiegley/dot-emacs/blob/master/init.el + (let ((elapsed (float-time + (time-subtract (current-time) emacs-start-time)))) + (spacemacs-buffer/append + (format "\n[%s packages loaded in %.3fs]\n" + (configuration-layer/configured-packages-count) + elapsed))) + (spacemacs/check-for-new-version spacemacs-version-check-interval)))) + +(defun spacemacs//describe-system-info-string () + "Gathers info about your Spacemacs setup and returns it as a string." + (format + (concat "#### System Info\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") + 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 'spacemacs-helm) + 'helm) + ((configuration-layer/layer-usedp 'spacemacs-ivy) + 'ivy) + (t 'helm)) + (pp-to-string dotspacemacs-configuration-layers))) + +(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." + (view-lossage) + (let* ((lossage-buffer "*Help*") + (last-keys (format "#### Emacs last keys\n```text\n%s```\n" + (with-current-buffer lossage-buffer + (buffer-string))))) + (kill-buffer lossage-buffer) + last-keys)) + +(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) + "Browse the page for creating a new Spacemacs issue on GitHub, +with the message pre-filled with template and information." + (interactive "P") + (let* ((url "http://github.com/syl20bnr/spacemacs/issues/new?body=") + (template (with-temp-buffer + (insert-file-contents-literally + (concat configuration-layer-template-directory "REPORTING.template")) + (buffer-string)))) + ;; Include the system info description directly into the template + (setq template (replace-regexp-in-string + "%SYSTEM_INFO%" + (spacemacs//describe-system-info-string) + template [keep-case])) + ;; Include the backtrace directly in the template, if it exists + (setq template (replace-regexp-in-string + "%BACKTRACE%" + (if (get-buffer "*Backtrace*") + (with-current-buffer "*Backtrace*" + (buffer-substring-no-properties + (point-min) (min (point-max) 1000))) + "BACKTRACE IF RELEVANT") + template [keep-case])) + ;; Include the last keys description directly into the template, if + ;; prefix argument has been passed + (setq template (replace-regexp-in-string + "(%LAST_KEYS%)\n" + (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") + "") + template [keep-case])) + ;; Create the encoded url + (setq url (url-encode-url (concat url template))) + ;; 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/.emacs.d/core/core-themes-support.el b/.emacs.d/core/core-themes-support.el new file mode 100644 index 0000000..9c2c5d5 --- /dev/null +++ b/.emacs.d/core/core-themes-support.el @@ -0,0 +1,277 @@ +;;; 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-dark . base16-theme) + (base16-3024-light . base16-theme) + (base16-apathy-dark . base16-theme) + (base16-apathy-light . base16-theme) + (base16-ashes-dark . base16-theme) + (base16-ashes-light . base16-theme) + (base16-ateliercave-dark . base16-theme) + (base16-ateliercave-light . base16-theme) + (base16-atelierdune-dark . base16-theme) + (base16-atelierdune-light . base16-theme) + (base16-atelierestuary-dark . base16-theme) + (base16-atelierestuary-light . base16-theme) + (base16-atelierforest-dark . base16-theme) + (base16-atelierforest-light . base16-theme) + (base16-atelierheath-dark . base16-theme) + (base16-atelierheath-light . base16-theme) + (base16-atelierlakeside-dark . base16-theme) + (base16-atelierlakeside-light . base16-theme) + (base16-atelierplateau-dark . base16-theme) + (base16-atelierplateau-light . base16-theme) + (base16-ateliersavanna-dark . base16-theme) + (base16-ateliersavanna-light . base16-theme) + (base16-atelierseaside-dark . base16-theme) + (base16-atelierseaside-light . base16-theme) + (base16-ateliersulphurpool-dark . base16-theme) + (base16-ateliersulphurpool-light . base16-theme) + (base16-bespin-dark . base16-theme) + (base16-bespin-light . base16-theme) + (base16-brewer-dark . base16-theme) + (base16-brewer-light . base16-theme) + (base16-bright-dark . base16-theme) + (base16-bright-light . base16-theme) + (base16-chalk-dark . base16-theme) + (base16-chalk-light . base16-theme) + (base16-codeschool-dark . base16-theme) + (base16-codeschool-light . base16-theme) + (base16-colors-dark . base16-theme) + (base16-colors-light . base16-theme) + (base16-darktooth-dark . base16-theme) + (base16-darktooth-light . base16-theme) + (base16-default-dark . base16-theme) + (base16-default-light . base16-theme) + (base16-eighties-dark . base16-theme) + (base16-eighties-light . base16-theme) + (base16-embers-dark . base16-theme) + (base16-embers-light . base16-theme) + (base16-flat-dark . base16-theme) + (base16-flat-light . base16-theme) + (base16-google-dark . base16-theme) + (base16-google-light . base16-theme) + (base16-grayscale-dark . base16-theme) + (base16-grayscale-light . base16-theme) + (base16-greenscreen-dark . base16-theme) + (base16-greenscreen-light . base16-theme) + (base16-harmonic16-dark . base16-theme) + (base16-harmonic16-light . base16-theme) + (base16-hopscotch-dark . base16-theme) + (base16-hopscotch-light . base16-theme) + (base16-irblack-dark . base16-theme) + (base16-irblack-light . base16-theme) + (base16-isotope-dark . base16-theme) + (base16-isotope-light . base16-theme) + (base16-londontube-dark . base16-theme) + (base16-londontube-light . base16-theme) + (base16-marrakesh-dark . base16-theme) + (base16-marrakesh-light . base16-theme) + (base16-mocha-dark . base16-theme) + (base16-mocha-light . base16-theme) + (base16-monokai-dark . base16-theme) + (base16-monokai-light . base16-theme) + (base16-ocean-dark . base16-theme) + (base16-ocean-light . base16-theme) + (base16-oceanicnext-dark . base16-theme) + (base16-oceanicnext-light . base16-theme) + (base16-paraiso-dark . base16-theme) + (base16-paraiso-light . base16-theme) + (base16-phd-dark . base16-theme) + (base16-phd-light . base16-theme) + (base16-pop-dark . base16-theme) + (base16-pop-light . base16-theme) + (base16-railscasts-dark . base16-theme) + (base16-railscasts-light . base16-theme) + (base16-setiui-dark . base16-theme) + (base16-setiui-light . base16-theme) + (base16-shapeshifter-dark . base16-theme) + (base16-shapeshifter-light . base16-theme) + (base16-solarized-dark . base16-theme) + (base16-solarized-light . base16-theme) + (base16-summerfruit-dark . base16-theme) + (base16-summerfruit-light . base16-theme) + (base16-tomorrow-dark . base16-theme) + (base16-tomorrow-light . base16-theme) + (base16-twilight-dark . base16-theme) + (base16-twilight-light . base16-theme) + (base16-yesterday-dark . base16-theme) + (base16-yesterday-light . base16-theme) + (base16-yesterdaybright-dark . base16-theme) + (base16-yesterdaybright-light . base16-theme) + (base16-yesterdaynight-dark . base16-theme) + (base16-yesterdaynight-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) + (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) + (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.") + +(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 err + (progn + (when (or (eq 'zonokai-blue theme) + (eq 'zonokai-red theme) + (eq 'solarized-light theme) + (eq 'solarized-dark theme)) + (spacemacs/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 (spacemacs/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))) + (spacemacs/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) + (when (fboundp 'spacemacs/set-state-faces) + (spacemacs/set-state-faces)) + (when (fboundp 'spacemacs/set-flycheck-mode-line-faces) + (spacemacs/set-flycheck-mode-line-faces)) + (when (fboundp 'spacemacs/set-new-version-lighter-mode-line-faces) + (spacemacs/set-new-version-lighter-mode-line-faces)) + (when (fboundp 'spacemacs/defface-micro-state-faces) + (spacemacs/defface-micro-state-faces)) + (when (fboundp 'spacemacs/customize-powerline-faces) + (spacemacs/customize-powerline-faces)) + (when (fboundp 'powerline-reset) + (powerline-reset)) + (when (fboundp 'spacemacs/adaptive-evil-highlight-persist-face) + (spacemacs/adaptive-evil-highlight-persist-face))) + +(provide 'core-themes-support) diff --git a/.emacs.d/core/core-toggle.el b/.emacs.d/core/core-toggle.el new file mode 100644 index 0000000..5c2ba8f --- /dev/null +++ b/.emacs.d/core/core-toggle.el @@ -0,0 +1,92 @@ +;;; 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. + +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-on (intern (format "%s-on" wrapper-func))) + (wrapper-func-off (intern (format "%s-off" wrapper-func))) + (status (plist-get props :status)) + (condition (plist-get props :if)) + (doc (plist-get props :documentation)) + (on-body (spacemacs/mplist-get props :on)) + (off-body (spacemacs/mplist-get props :off)) + (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) ',props) + spacemacs-toggles) + ;; toggle function + (defun ,wrapper-func () + ,(format "Toggle %s on and off." (symbol-name name)) + (interactive) + (if (or (null ',condition) + (and (or (and (symbolp ',condition) (boundp ',condition)) + (listp ',condition)) + ,condition)) + (if ,status-eval + (progn ,@off-body + (message ,(format "%s disabled." name))) + ,@on-body + (message ,(format "%s enabled." name))) + (message "This toggle is not supported."))) + ;; 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 ,status-eval (,wrapper-func))) + ;; off-function + (defun ,wrapper-func-off () + ,(format "Toggle %s off." (symbol-name name)) + (interactive) + (when ,status-eval (,wrapper-func))))) + ,@bindkeys))) + +(provide 'core-toggle) diff --git a/.emacs.d/core/core-use-package-ext.el b/.emacs.d/core/core-use-package-ext.el new file mode 100644 index 0000000..6b5b0c3 --- /dev/null +++ b/.emacs.d/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: + + (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/.emacs.d/core/info/quickhelp.txt b/.emacs.d/core/info/quickhelp.txt new file mode 100644 index 0000000..3d6ff52 --- /dev/null +++ b/.emacs.d/core/info/quickhelp.txt @@ -0,0 +1,28 @@ +Press [TAB] to move to next button. + +Press [Shift-TAB] 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/.emacs.d/core/info/release-notes/0.101.txt b/.emacs.d/core/info/release-notes/0.101.txt new file mode 100644 index 0000000..be5f02a --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/info/release-notes/0.102.txt b/.emacs.d/core/info/release-notes/0.102.txt new file mode 100644 index 0000000..1305f63 --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/info/release-notes/0.103.txt b/.emacs.d/core/info/release-notes/0.103.txt new file mode 100644 index 0000000..bc67213 --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/info/release-notes/0.104.txt b/.emacs.d/core/info/release-notes/0.104.txt new file mode 100644 index 0000000..fa6ac4d --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/info/release-notes/0.105.txt b/.emacs.d/core/info/release-notes/0.105.txt new file mode 100644 index 0000000..e114293 --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/info/release-notes/af-1.01.txt b/.emacs.d/core/info/release-notes/af-1.01.txt new file mode 100644 index 0000000..70c43e1 --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/libs/corelv.el b/.emacs.d/core/libs/corelv.el new file mode 100644 index 0000000..8d7fb23 --- /dev/null +++ b/.emacs.d/core/libs/corelv.el @@ -0,0 +1,117 @@ +;;; corelv.el --- Other echo area + +;; Copyright (C) 2015 Free Software Foundation, Inc. + +;; Author: Oleh Krehel + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: +;; +;; This package provides `corelv-message' intended to be used in place of +;; `message' when semi-permanent hints are needed, in order to not +;; interfere with Echo Area. +;; +;; "Я тихо-тихо пiдглядаю, +;; І тiшуся собi, як бачу то, +;; Шо страшить i не пiдпускає, +;; А iншi п’ють тебе, як воду пiсок." +;; -- Андрій Кузьменко, L.V. + +;;; Code: + +(defgroup corelv nil + "The other echo area." + :group 'minibuffer + :group 'hydra) + +(defcustom corelv-use-separator nil + "Whether to draw a line between the LV window and the Echo Area." + :group 'corelv + :type 'boolean) + +(defface corelv-separator + '((((class color) (background light)) :background "grey80") + (((class color) (background dark)) :background "grey30")) + "Face used to draw line between the corelv window and the echo area. +This is only used if option `corelv-use-separator' is non-nil. +Only the background color is significant." + :group 'corelv) + +(defvar corelv-wnd nil + "Holds the current LV window.") + +(defun corelv-window () + "Ensure that LV window is live and return it." + (if (window-live-p corelv-wnd) + corelv-wnd + (let ((ori (selected-window)) + buf) + (prog1 (setq corelv-wnd + (select-window + (let ((ignore-window-parameters t)) + (split-window + (frame-root-window) -1 'below)))) + (if (setq buf (get-buffer "*LV*")) + (switch-to-buffer buf) + (switch-to-buffer "*LV*") + (set-window-hscroll corelv-wnd 0) + (setq window-size-fixed t) + (setq mode-line-format nil) + (setq cursor-type nil) + (set-window-dedicated-p corelv-wnd t) + (set-window-parameter corelv-wnd 'no-other-window t)) + (select-window ori))))) + +(defvar golden-ratio-mode) + +(defvar corelv-force-update nil + "When non-nil, `corelv-message' will refresh even for the same string.") + +(defun corelv-message (format-string &rest args) + "Set LV window contents to (`format' FORMAT-STRING ARGS)." + (let* ((str (apply #'format format-string args)) + (n-lines (cl-count ?\n str)) + deactivate-mark + golden-ratio-mode) + (with-selected-window (corelv-window) + (unless (and (string= (buffer-string) str) + (null corelv-force-update)) + (delete-region (point-min) (point-max)) + (insert str) + (when (and (window-system) corelv-use-separator) + (unless (looking-back "\n" nil) + (insert "\n")) + (insert + (propertize "__" 'face 'corelv-separator 'display '(space :height (1))) + (propertize "\n" 'face 'corelv-separator 'line-height t))) + (setq-local window-min-height n-lines) + (setq truncate-lines (> n-lines 1)) + (let ((window-resize-pixelwise t) + (window-size-fixed nil)) + (fit-window-to-buffer nil nil 1))) + (goto-char (point-min))))) + +(defun corelv-delete-window () + "Delete LV window and kill its buffer." + (when (window-live-p corelv-wnd) + (let ((buf (window-buffer corelv-wnd))) + (delete-window corelv-wnd) + (kill-buffer buf)))) + +(provide 'corelv) + +;;; corelv.el ends here diff --git a/.emacs.d/core/libs/ht.el b/.emacs.d/core/libs/ht.el new file mode 100644 index 0000000..0d5d8b0 --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/libs/mocker.el b/.emacs.d/core/libs/mocker.el new file mode 100644 index 0000000..c06080e --- /dev/null +++ b/.emacs.d/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/.emacs.d/core/templates/.spacemacs.template b/.emacs.d/core/templates/.spacemacs.template new file mode 100644 index 0000000..170910c --- /dev/null +++ b/.emacs.d/core/templates/.spacemacs.template @@ -0,0 +1,255 @@ +;; -*- 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 + ;; 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. If it is the symbol `all' instead + ;; of a list then all discovered layers will be installed. + 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. + ;; ---------------------------------------------------------------- + ;; 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 and/or extensions that will not be install and loaded. + dotspacemacs-excluded-packages '() + ;; If non-nil spacemacs will delete any orphan packages, i.e. packages that + ;; are declared in a layer which is not a member of + ;; the list `dotspacemacs-configuration-layers'. (default t) + dotspacemacs-delete-orphan-packages t)) + +(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'. (default t) + dotspacemacs-check-for-update t + ;; One of `vim', `emacs' or `hybrid'. Evil is always enabled but if the + ;; variable is `emacs' then the `holy-mode' is enabled at startup. `hybrid' + ;; uses emacs key bindings for vim's insert mode, but otherwise leaves evil + ;; unchanged. (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 the startup buffer. If nil it is disabled. + ;; Possible values are: `recents' `bookmarks' `projects'. + ;; (default '(recents projects)) + dotspacemacs-startup-lists '(recents projects) + ;; Number of recent files to show in the startup buffer. Ignored if + ;; `dotspacemacs-startup-lists' doesn't include `recents'. (default 5) + dotspacemacs-startup-recent-list-size 5 + ;; 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 + solarized-light + solarized-dark + leuven + monokai + zenburn) + ;; If non nil the cursor color matches the state color in GUI Emacs. + dotspacemacs-colorize-cursor-according-to-state t + ;; Default font. `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 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 + ;; (Not implemented) dotspacemacs-distinguish-gui-ret nil + ;; The command key used for Evil commands (ex-commands) and + ;; Emacs commands (M-x). + ;; By default the command key is `:' so ex-commands are executed like in Vim + ;; with `:' and Emacs commands are executed with ` :'. + dotspacemacs-command-key ":" + ;; If non nil `Y' is remapped to `y$'. (default t) + dotspacemacs-remap-Y-to-y$ t + ;; 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 + ;; 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 then `ido' replaces `helm' for some commands. For now only + ;; `find-files' (SPC f f), `find-spacemacs-file' (SPC f e s), and + ;; `find-contrib-file' (SPC f e c) are replaced. (default nil) + dotspacemacs-use-ido nil + ;; 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 + ;; 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-micro-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 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 the + ;; 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 + ;; If non-nil smartparens-strict-mode will be enabled in programming modes. + ;; (default nil) + dotspacemacs-smartparens-strict-mode 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 advises 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/.emacs.d/core/templates/README.org.template b/.emacs.d/core/templates/README.org.template new file mode 100644 index 0000000..e209a32 --- /dev/null +++ b/.emacs.d/core/templates/README.org.template @@ -0,0 +1,29 @@ +#+TITLE: %LAYER_NAME% layer +#+HTML_HEAD_EXTRA: + +#+CAPTION: logo + +# The maximum height of the logo should be 200 pixels. +[[img/%LAYER_NAME%.png]] + +* Table of Contents :TOC_4_org:noexport: + - [[Decsription][Description]] + - [[Install][Install]] + - [[Key bindings][Key bindings]] + +* Description +This layer does wonderful things: + - thing01 + +* Install +To use this contribution add it to your =~/.spacemacs= + +#+begin_src emacs-lisp + (setq-default dotspacemacs-configuration-layers '(%LAYER_NAME%)) +#+end_src + +* Key bindings + +| Key Binding | Description | +|-----------------+----------------| +| ~ x x x~ | Does thing01 | diff --git a/.emacs.d/core/templates/REPORTING.template b/.emacs.d/core/templates/REPORTING.template new file mode 100644 index 0000000..8bcafff --- /dev/null +++ b/.emacs.d/core/templates/REPORTING.template @@ -0,0 +1,22 @@ + +#### Description +DESCRIPTION OF THE PROBLEM + +#### Reproduction guide +- Start Emacs +- REPRODUCTION STEPS + +*Observed behaviour:* +DESCRIPTION OF THE OBSERVED BEHAVIOUR + +*Expected behaviour:* +DESCRIPTION OF THE EXPECTED BEHAVIOUR + +(%LAST_KEYS%) + +%SYSTEM_INFO% + +#### Backtrace +``` +%BACKTRACE% +``` diff --git a/.emacs.d/core/templates/packages.el.template b/.emacs.d/core/templates/packages.el.template new file mode 100644 index 0000000..af6bce2 --- /dev/null +++ b/.emacs.d/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/.emacs.d/doc/CONVENTIONS.org b/.emacs.d/doc/CONVENTIONS.org new file mode 100644 index 0000000..f43ed81 --- /dev/null +++ b/.emacs.d/doc/CONVENTIONS.org @@ -0,0 +1,366 @@ +#+TITLE: Spacemacs Conventions +#+HTML_HEAD_EXTRA: + +* Spacemacs conventions :TOC_4_org: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]] + - [[Micro-state][Micro-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]] + - [[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 ~,~. + +*** Micro-state +Whenever possible a micro-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 micro-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 micro-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 micro-state should be provided to smooth the navigation +experience. A micro-state allows to repeat key bindings without entering +each time the prefix commands. More info on micro-states in the +[[file:DOCUMENTATION.org::Micro-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 the 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 micro-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~. + +** 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/.emacs.d/doc/DOCUMENTATION.org b/.emacs.d/doc/DOCUMENTATION.org new file mode 100644 index 0000000..f02b81b --- /dev/null +++ b/.emacs.d/doc/DOCUMENTATION.org @@ -0,0 +1,2756 @@ +#+TITLE: Spacemacs documentation +#+HTML_HEAD_EXTRA: + +* Spacemacs documentation :TOC_4_org: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]] + - [[Packages][Packages]] + - [[Within a layer][Within a layer]] + - [[Declaration][Declaration]] + - [[Initialization][Initialization]] + - [[Exclusion][Exclusion]] + - [[Without a layer][Without a layer]] + - [[Packages synchronization (Vundle like feature)][Packages synchronization (Vundle like feature)]] + - [[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]] + - [[Installation][Installation]] + - [[Alternative setup][Alternative setup]] + - [[Synchronization of dotfile changes][Synchronization of dotfile changes]] + - [[Testing][Testing]] + - [[Content][Content]] + - [[Using configuration layers][Using configuration layers]] + - [[Setting configuration layers variables][Setting configuration layers variables]] + - [[Excluding packages][Excluding packages]] + - [[Hooks][Hooks]] + - [[Binding keys][Binding keys]] + - [[Custom variables][Custom variables]] + - [[Main principles][Main principles]] + - [[Editing Styles][Editing Styles]] + - [[Vim][Vim]] + - [[Emacs][Emacs]] + - [[Hybrid][Hybrid]] + - [[Evilified modes][Evilified modes]] + - [[States][States]] + - [[Evil leader][Evil leader]] + - [[Universal argument][Universal argument]] + - [[Micro-states][Micro-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]] + - [[Spacemacs UI][Spacemacs UI]] + - [[Graphical UI][Graphical UI]] + - [[Color themes][Color themes]] + - [[Font][Font]] + - [[Graphical UI Toggles][Graphical UI Toggles]] + - [[Global line numbers][Global line numbers]] + - [[Mouse usage][Mouse usage]] + - [[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]] + - [[Commands][Commands]] + - [[Vim key bindings][Vim key bindings]] + - [[Escaping][Escaping]] + - [[Executing Vim and Emacs ex/M-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]] + - [[Helm][Helm]] + - [[C-z and Tab switch][C-z and Tab switch]] + - [[Helm focus][Helm focus]] + - [[Helm micro-state][Helm micro-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]] + - [[Point/Cursor][Point/Cursor]] + - [[Smooth scrolling][Smooth scrolling]] + - [[Vim motions with avy][Vim motions with avy]] + - [[ace-link mode][ace-link mode]] + - [[Window manipulation][Window manipulation]] + - [[Window manipulation key bindings][Window manipulation key bindings]] + - [[Window manipulation micro-state][Window manipulation micro-state]] + - [[Golden ratio][Golden ratio]] + - [[Buffers and Files][Buffers and Files]] + - [[Buffers manipulation key bindings][Buffers manipulation key bindings]] + - [[Buffers manipulation micro-state][Buffers manipulation micro-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 micro-state][Ido micro-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 Micro-state][Paste Micro-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]] + - [[Increase/Decrease 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]] + - [[Line formatting][Line formatting]] + - [[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]] + - [[Commenting][Commenting]] + - [[Deleting files][Deleting files]] + - [[Editing Lisp code][Editing Lisp code]] + - [[Lisp Key Bindings][Lisp Key Bindings]] + - [[Managing projects][Managing projects]] + - [[Registers][Registers]] + - [[Errors handling][Errors handling]] + - [[Compiling][Compiling]] + - [[Modes][Modes]] + - [[Major Mode leader key][Major Mode leader key]] + - [[Helm][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]] + - [[Upgrading/Downgrading 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]] + - [[Specials][Specials]] + - [[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*, keep 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 + +/Python/ [[file:img/spacemacs-python.png]] + +*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*. + +* 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 a arrow will appear in the modeline. +Click it to update Spacemacs. You must restart Emacs after updating. + +Update Button: +[[file:img/powerline-update.png]] + +*Note*: If you use the =develop= branch of Spacemacs, you must update 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 --rebase +#+END_SRC + + +** 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 next to the =[Update +Packages]= link and choose a rollback slot (sorted by date). This button uses +the command =configuration-layer/rollback=. + +* Configuration layers +*Note*: This is a very simple overview of how layers work. A more extensive +introduction to writing configuration layers can be found [[file:LAYERS.org][here]]. + +** 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 + +** Structure +Configuration is organized in layers. Each layer has the following structure: + +#+BEGIN_EXAMPLE + [layer_name] + |__ [local] + | |__ [package 1] + | | ... + | |__ [package n] + |__ config.el + |__ funcs.el + |__ keybindings.el + |__ packages.el + + [] = directory +#+END_EXAMPLE + +Where: + +| File | Usage | +|----------------+----------------------------------------------------------------------| +| config.el | Emacs built-in configuration or mandatory configuration | +| funcs.el | Various functions and macros (often used in keybindings.el) | +| keybindings.el | Emacs built-in key bindings or mandatory key bindings | +| packages.el | The list of packages to install and the functions to initialize them | + +=Packages= are =ELPA= packages which can be installed from an =ELPA= compliant +repository, local packages in a layer's =local= folder, or packages that can be +installed from an online source using [[https://github.com/quelpa/quelpa][quelpa]]. + +** Packages +*** Within a layer +**** Declaration +=Packages= are declared in variables and =-packages= where == is +the layer name. They are processed in alphabetical order so sometimes you'll +have to use some =eval-after-load= black magic. + +Example: + +#+BEGIN_SRC emacs-lisp +(setq -packages '(package1 package2 ...) +#+END_SRC + +For details on installing local packages using quelpa or in the layer's =local= +folder, see [[file:LAYERS.org::packages.el][LAYERS]]. + +**** Initialization +To initialize an extension or a package =xxx=, define a function with this +format in or =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 without any configuration associated to it. A good +example is some niche language where you are only interested syntax +highlighting. + +You can install such packages by adding them to the variable +=dotspacemacs-additional-packages= in your dotfile. + +If you want to add some configuration for them then consider to create a layer, +or just put the configuration in the =dotspacemacs/user-config= function. + +Example to install =llvm-mode= and =dts-mode=: + +#+BEGIN_SRC emacs-lisp +(setq dotspacemacs-additional-packages '(llvm-mode dts-mode) +#+END_SRC + +** Packages synchronization (Vundle like feature) +Spacemacs features a synchronization engine for the ELPA packages. It means +that Spacemacs will auto-install the new packages in =-packages= lists +/and/ auto-delete orphan packages in your =elpa= directory. + +It effectively makes Spacemacs behave like [[https://github.com/gmarik/Vundle.vim][Vundle]]. + +** Types of configuration layers +There are three types of configuration layers: + - core (this is the Spacemacs layer) + - private (in the =private= directory, they are ignored by Git) + - contrib (in the =layers= directory, those layers are contributions shared + by the community and merged upstream). + +** Submitting a configuration layer upstream +If you decide to provide a =contrib= configuration layer, please check the +contribution guidelines in [[file:../CONTRIBUTING.org][CONTRIBUTING]]. + +** Example: Themes Megapack example +This is a simple =contrib= configuration layer listing a bunch of themes, you +can find it [[../layers/themes-megapack][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 + +You have now installed around 100 themes you are free to try with ~SPC T h~ +(helm-themes). + +** Managing private configuration layers +Spacemacs 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. + +** Installation +The very first time Spacemacs starts up, it will prompt you to choose your +editing style. Once you choose a style, the =.spacemacs= file will be created +from a template. + +*** Alternative setup +Since v0.104 you have the option of using =~/.spacemacs.d/init.el= for your +dotfile instead of =~/.spacemacs=. If you want to use this option, simply move +=~/.spacemacs= to =~/.spacemacs.d/init.el=. =~/.spacemacs= will always take +priority over =~/.spacemacs.d/init.el=, so =~/.spacemacs= must be missing for +=~/.spacemacs.d/init.el= to be used by spacemacs. + +If you use this option, everything that applies to =~/.spacemacs= in this guide +will now apply 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. + +** 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= 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 +You can use the command =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~. + +** Content +*** Using configuration layers +To use a configuration layer, add it to the =dotspacemacs-configuration-layers= +variable of your =~/.spacemacs=. + +For instance to add the configuration layer of [[Thank you][RMS]]: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-configuration-layers '(rms)) +#+END_SRC + +If this layer does not exist you can still try another one in [[file:../layers][the =layers= +directory]]. + +Configuration layers are expected to be stored in =~/.emacs.d/private= or +=~/.emacs.d/layers=. But you are free to keep them somewhere else by declaring +additional paths where Spacemacs can look for configuration layers. This is +done by setting the list =dotspacemacs-configuration-layer-path= in your +=~/.spacemacs=: + +#+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 +support. 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) + smex))) +#+END_SRC + +*** Excluding packages +You can exclude packages you don't want to install with the variable +=dotspacemacs-excluded-packages=, this variable can exclude both packages and +extensions (see [[Configuration layers][Configuration layers]] for more info on +packages and extensions). + +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. All the orphan dependencies are as well delete +automatically. + +*** Hooks +Three special functions of the =~/.spacemacs= file can be used to perform +configuration at the beginning and end of Spacemacs loading process. + + - =dotspacemacs/init= is triggered at the very beginning of Spacemacs + loading. You can configure Spacemacs variables here. + - =dotspacemacs/user-init= is also triggered at the very beginning of Spacemacs + loading. User initialization occurs here. + - =dotspacemacs/user-config= is triggered at the very end of Spacemacs + loading. Most user configuration should go here. + +*** 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 the global-map uses the function +=global-set-key= as follows (to the command =forward-char= in this case). + +#+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 evil-leader package, +which binds keys to the evil-leader keymap. This is where most of the spacemacs +bindings live. There are two related commands from this package which are used +as follows. + +#+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 would not be in effect in =org-mode= for +example. + +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 ac~ 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. + +*** Custom variables +Custom variables configuration from =M-x customize-group= which are +automatically saved by Emacs are stored at the end of your =~/.spacemacs= file. + +* Main principles +** Editing Styles +*** 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. + +*** 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 dynamically +switch between evil and holy mode using ~SPC t E h~ and ~M-m t E h~. + +*** Hybrid +The hybrid editing style is like the Vim style except that insert state +has all the Emacs key bindings available like in emacs state. The insert state +in hybrid mode is called the hybrid state and you have to map your key bindings +in =evil-hybrid-state-map= keymap instead of =evil-insert-state-map=. + +Hybrid mode can be enabled by setting =dotspacemacs-editing-style= to =hybrid=. +To switch between evil and hybrid mode use ~SPC t E y~ and ~M-m t E y~. + +The default state in hybrid mode can be changed by setting the variable +=hybrid-mode-default-state= to a state value, the default is =normal=, set it +to =hybrid= to start in hybrid insert state instead of normal state. + +** Evilified modes +Some buffers (such as Magit, for using git from within Emacs), are not for +editing text, and provide their own keybindings for certain operations. These +often conflict with Vim bindings. To make such buffers behave Vim-like 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. + +** States +Spacemacs has 10 states: + +| State | 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. + +** Evil leader +Spacemacs heavily uses the [[https://github.com/cofi/evil-leader][evil-leader]] mode which brings the Vim leader key to +the Emacs world. + +This leader key is commonly set to ~,~ by Vim users, in Spacemacs the leader +key is set on ~SPC~ (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]]. + +So 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 :~). Instead, call +=helm-M-x= first, select the command you want to run, and press ~C-u~ before +pressing ~RETURN~. For instance: ~SPC : org-reload C-u RET~ + +** Micro-states +Spacemacs defines a wide variety of =micro-states= (temporary overlay maps) +where it makes sense. This prevents one from doing repetitive and tedious +presses on the ~SPC~ key. + +When a =micro-state= is active, a documentation is displayed in the minibuffer. +Additional information may as well be displayed in the minibuffer. + +Auto-highlight-symbol micro-state: +[[file:img/spacemacs-ahs-micro-state.png]] + +[[Text][Text scale micro-state]]: +[[file:img/spacemacs-scale-micro-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). +- The ~Y~ key does not yank the whole line. It yanks from the current point to + the end of the line. This is more consistent with the behavior of ~C~ and ~D~ + and is also recommended by the vim documentation. + +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 let me explain why this is +the case: + - ~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= + - 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/cofi/evil-leader][evil-leader]] | vim leader that bring a new layer of keys in normal mode | +| [[https://github.com/cofi/evil-indent-textobject][evil-indent-textobject]] | add text object based on indentation level | +| [[https://github.com/bling/evil-visualstar][evil-visualstar]] | search for current selection with ~*~ | +| [[https://github.com/Dewdrops/evil-exchange][evil-exchange]] | port of [[https://github.com/tommcdo/vim-exchange][vim-exchange]] | +| [[https://github.com/timcharper/evil-surround][evil-surround]] | port of [[https://github.com/tpope/vim-surround][vim-surround]] | +| [[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/juanjux/evil-search-highlight-persist][evil-search-highlight-persist]] | emulation of hlsearch behavior | +| [[https://github.com/cofi/evil-numbers][evil-numbers]] | like ~C-a~ and ~C-x~ in vim | +| [[https://github.com/wcsmith/evil-args][evil-args]] | motions and text objects for arguments | +| [[https://github.com/jaypei/emacs-neotree][NeoTree]] | mimic [[https://github.com/scrooloose/nerdtree][NERD Tree]] | + +* Spacemacs UI +Spacemacs has unique UI elements to make the Emacs experience even more +enjoyable: + - dedicated startup page with a mode aimed at easily managing Spacemacs + - dedicated helm source via =helm-spacemacs= + - a [[https://github.com/justbur/emacs-which-key][which-key]] buffer + +** Graphical UI +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 =solarized-light=, +=leuven= and =zenburn=: + +#+BEGIN_SRC emacs-lisp +(setq-default dotspacemacs-themes '(solarized-light leuven zenburn)) +#+END_SRC + +| Key Binding | Description | +|-------------+-------------------------------------------------------| +| ~SPC T n~ | switch to next theme listed in =dotspacemacs-themes=. | +| ~SPC T h~ | 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. + +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 + +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). + +/Ugly separators/ + +#+CAPTION: ugly-separators + +[[file:img/crappy-powerline-separators.png]] + +*** Graphical UI Toggles +Some graphical UI indicators can be toggled on and off (toggles start with ~t~ +and ~T~): + +| Key Binding | Description | +|-------------+-------------------------------------------------------------------| +| ~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 micro-state | + +*Note*: These toggles are all available via the =helm-spacemacs= interface (press +~SPC h SPC~ to display the =helm-spacemacs= 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 + +*** 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 + +*** 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. + +#+CAPTION: powerline-wave + +[[file:img/powerline-wave.png]] + +**** 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. + +#+CAPTION: powerline-anzu + +[[file:img/powerline-anzu.png]] + +**** 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=. 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 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~ | | | 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~ | =ⓟ= | | 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 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. + +* 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 : 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 :~ | + +The command key ~:~ can be easily changed with the variable +=dotspacemacs-command-key= of your =~/.spacemacs=. Note that is will change both +~:~ and ~SPC :~ bindings to keep the symmetry between Vim and Emacs. A good key +can be ~,~ for example. + +*** 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. + +** Helm +Spacemacs is powered by [[https://github.com/emacs-helm/helm][Helm]] which is an incremental completion and selection +narrowing framework. + +=Helm= is the central control tower of Spacemacs, it is used to manage +buffers, projects, search results, configuration layers, toggles and more... + +Mastering =Helm= will make you a Spacemacs power user. 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 micro-state +Spacemacs defines a [[Micro-states][micro-state]] for =Helm= to make it work like [[https://github.com/Shougo/unite.vim][Vim's Unite]] +plugin. + +Initiate the micro-state with ~M-SPC~ or ~s-M-SPC~ while in a =Helm= buffer. + +| Key Binding | Description | +|----------------------+--------------------------------------------------| +| ~M-SPC~ or ~s-M-SPC~ | initiate the micro-state | +| ~q~ | quit micro-state | +| ~TAB~ | switch to actions page and leave the micro-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 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 | +| ~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 L~ | go to library a implementation | +| ~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 a page for creating a new Spacemacs issue on GitHub with information pre-filled | +| ~SPC u SPC h I~ | Open a page for creating a new Spacemacs issue on GitHub with information pre-filled | + +/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= accessible with ~SPC f +e h~. + +The following helm actions are available: + - default: open the layer =README.org= + - 2nd: open the layer =packages.el= + - 3nd: open the layer =extensions.el= + +**** Available packages in Spacemacs +=helm-spacemacs= 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= is also a central place to discover the available toggles. To +display only the toggles source press ~C-l~ (or in [[Helm micro-state][Helm micro-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 h~ | go to the beginning of line (and set a mark at the previous location in the line) | +| ~SPC j l~ | 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 j~ | initiate avy jump char | +| ~SPC j w~ | initiate avy jump word | +| ~SPC j l~ | initiate avy jump line | +| ~SPC j u~ | go back to the previous location (before the jump) | + +**** 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= | + +*** 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~ | close a window | +| ~SPC w C~ | delete another window using [[https://github.com/abo-abo/ace-window][ace-delete-window]] | +| ~SPC w d~ | toggle window dedication (dedicated window cannot be reused by a mode) | +| ~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~ | maximize/minimize a window, when maximized the buffer is centered | +| ~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 clockwise | +| ~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 SPC~ | select window using [[https://github.com/abo-abo/ace-window][ace-window]] | + +**** Window manipulation micro-state +A convenient window manipulation micro-state allows to perform most of the +actions listed above. The micro-state allows additional actions as well like +window resizing. + +| Key Binding | Description | +|---------------+---------------------------------------------------------------| +| ~SPC w .~ | initiate micro-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 | +| ~c~ | close window | +| ~C~ | close 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 | +| ~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 micro-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 +Since =helm= is used everywhere, by default Spacemacs uses =helm= to open files. + +Some users prefer the =ido= way to navigate the file system because it can +remember the last selected directories and buffers and ~RET~ is used to open +directories instead of ~TAB~ or ~C-z~ in =helm=. It is possible to use =ido= +instead of =helm= by setting the variable =dotspacemacs-use-ido= to =t= in your +dotfile. + +**** 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 =helm= | +| ~SPC b d~ | kill the current buffer (does not delete the visited file) | +| ~SPC b e~ | erase the content of the buffer (ask for confirmation) | +| ~SPC b h~ | open =*spacemacs*= home buffer | +| ~SPC b k~ | kill a buffer | +| ~SPC b K~ | kill all buffers except the current one | +| ~SPC b C-k~ | kill all buffers matching the regexp | +| ~SPC b m h~ | move a buffer to the left | +| ~SPC b m j~ | move a buffer to the bottom | +| ~SPC b m k~ | move a buffer to the top | +| ~SPC b m l~ | move a buffer to the right | +| ~SPC b M~ | swap windows using [[https://github.com/abo-abo/ace-window][ace-swap-window]] | +| ~SPC b n~ | switch to next buffer avoiding special buffers | +| ~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 micro-state +A convenient buffer manipulation micro-state allows to quickly cycles through +the opened buffer and kill them. + +| Key Binding | Description | +|---------------+-----------------------------------------------| +| ~SPC b .~ | initiate micro-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 micro-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 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= (or =ido=) | +| ~SPC f F~ | try to open the file under point =helm= | +| ~SPC f j~ | jump to the current buffer file in dired | +| ~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 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 c~ | open =ido= in the =contrib= folder | +| ~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 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 micro-state +Spacemacs defines a [[Micro-states][micro-state]] for =ido=. + +Initiate the micro-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 micro-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 micro-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~ with the hope to provide a fast navigation +experience like in [[http://ranger.nongnu.org/][ranger]]: + +| Key Binding | Description | +|--------------+------------------------------------------------------------------------| +| ~h~ | collapse expanded directory or go to parent node | +| ~H~ | previous sibling | +| ~j~ | next file or directory | +| ~J~ | next expanded directory on level down | +| ~k~ | previous file or directory | +| ~K~ | parent directory, when reaching the root change it to parent directory | +| ~l~ or ~RET~ | expand directory | +| ~L~ | next sibling | +| ~R~ | make a directory the root directory | + +*Note*: The 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 | + +**** 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 h 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 | +|-----------------+--------------------------------------------------------------------------| +| ~SPC h l~ | resume the last =helm= buffer | +| ~F3~ | in a =helm= buffer, convert a =helm= search buffer into a regular buffer | +| ~SPC s `~ | go back to the previous place reached with =helm-ag= | +| ~SPC s l~ | focus the last converted search buffer | +| Prefix argument | will ask for file extensions | + +**** 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 micro-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 micro-state on current symbol and jump forwards | +| ~#~ | initiate navigation micro-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 micro-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 micro-state | + +(*) using [[https://github.com/tsdh/iedit][iedit]] or the default implementation +of =auto-highlight-symbol= + +The micro-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 micro-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 Micro-state +The paste micro-state can be enabled by settings the variable +=dotspacemacs-enable-paste-micro-state= to =t=. By default it is disabled. + +When the micro-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= micro-state | +| ~p~ | in micro-state: replace paste text with the previously copied one | +| ~P~ | in micro-state: replace paste text with the next copied one | +| ~.~ | paste the same text and leave the micro-state | +| Any other key | leave the micro-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 o~ | use avy to select a link in the buffer and open it | + | ~SPC x u~ | set the selected text to lower case | + | ~SPC x U~ | set the selected text to upper case | + | ~SPC x a a~ | align region (or guessed section) 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 . (for numeric tables) | + | ~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 ¦ | + | ~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~ | move down a line of text (enter micro-state) | + | ~SPC x K~ | move up a line of text (enter micro-state) | + | ~SPC x l s~ | sort lines | + | ~SPC x l u~ | uniquify lines | + | ~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 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 | + +*** Text insertion commands +Text insertion commands (start with ~i~): + + | Key binding | Description | + |-------------+-----------------------------------------------------------------------| + | ~SPC i u~ | Search for Unicode characters and insert them into the active buffer. | + | ~SPC i l l~ | insert lorem-ipsum list | + | ~SPC i l p~ | insert lorem-ipsum paragraph | + | ~SPC i l s~ | insert lorem-ipsum sentence | + +*** 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 micro-state | +| ~SPC z x =~ | scale up the font and initiate the font scaling micro-state | +| ~SPC z x -~ | scale down the font and initiate the font scaling micro-state | +| ~SPC z x 0~ | reset the font size (no scaling) and initiate the font scaling micro-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 micro-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 micro-state | +| ~SPC z f =~ | zoom in the frame content and initiate the frame scaling micro-state | +| ~SPC z f -~ | zoom out the frame content and initiate the frame scaling micro-state | +| ~SPC z f 0~ | reset the frame content size and initiate the frame scaling micro-state | +| ~+~ | zoom in | +| ~=~ | zoom in | +| ~-~ | zoom out | +| ~0~ | reset zoom | +| Any other key | leave the zoom frame micro-state | + +*** Increase/Decrease numbers +Spacemacs uses [[https://github.com/cofi/evil-numbers][evil-numbers]] to easily increase or increase numbers. + +| Key Binding | Description | +|-------------+-----------------------------------------------------------------| +| ~SPC n +~ | increase the number under point by one and initiate micro-state | +| ~SPC n -~ | decrease the number under point by one and initiate micro-state | + +In micro-state: + +| Key Binding | Description | +|---------------+----------------------------------------| +| ~+~ | increase the number under point by one | +| ~-~ | decrease the number under point by one | +| Any other key | leave the micro-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/cofi/evil-indent-textobject][evil-indent-textobject]] the following action can be performed in =normal +state=: + - ~ii~ - Inner Indentation: the surrounding textblock with the same indentation + - ~ai~ - Above and Indentation: ~ii~ + the line above with a different indentation + - ~aI~ - Above and Indentation+: ~ai~ + the line below with a different indentation + +Example (=|= is the 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 +- ~vai~ will select the whole while loop +- ~vaI~ 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 | + +*** Line formatting +Spacemacs performs =go to the line below point and indent it= with ~SPC j k~. +You may repeat this operation with =evil-repeat= if you need to indent many +lines. + +Line formatting commands start with ~j~: + + | Key Binding | Description | + |-------------+----------------------------------------------------------| + | ~J~ | join the current line with the next line | + | ~SPC j j~ | same as SPC j k but will split the current line at point | + | ~SPC J~ | split a quoted string or s-expression in place | + | ~SPC j J~ | split a quoted string or s-expression and auto-indent | + | ~SPC j k~ | go to next line and indent it using auto-indent rules | + +Used together these key bindings are very powerful to quickly reformat code. + +*** 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 +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. + +*** 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 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~ + +*** 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 parenthesis then slurping 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 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 | + +** 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 !~ | run shell command in root | + | ~SPC p &~ | run async shell command in root | + | ~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 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 s~ | see [[Searching in a project][search in project]] | + | ~SPC p t~ | open =NeoTree= in =projectile= root | + | ~SPC p T~ | find test files | + | ~SPC p v~ | open project root in =vc-dir= or =magit= | + | ~SPC p y~ | find tags | + | ~SPC /~ | search in project with the best search tool available | + | ~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) | + +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 k~ | kill compilation | + | ~SPC c m~ | =helm-make= | + | ~SPC c r~ | recompile | + | ~SPC c q~ | close compilation window | + +** 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 the case 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 : 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]] | + +** 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]] | + +** 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]] | +| 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]] | + +** 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]] | + +** Specials +| 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]] | + +* Thank you +[[Using configuration layers][Jokes aside]], 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/.emacs.d/doc/FAQ.org b/.emacs.d/doc/FAQ.org new file mode 100644 index 0000000..0834cc3 --- /dev/null +++ b/.emacs.d/doc/FAQ.org @@ -0,0 +1,489 @@ +#+TITLE: Frequently Asked Questions +#+HTML_HEAD_EXTRA: + +* FAQ :TOC_4_org: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 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 =Symbol's 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 .#?]] + - [[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 copy/paste 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?]] + - [[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 isn't shown correctly when Spacemacs is used within =PuTTY=.][The powerline isn't shown correctly when Spacemacs is used within =PuTTY=.]] + - [[OS X][OS X]] + - [[Why are the powerline colors not correct on OS X?][Why are the powerline colors not correct on OS X?]] + +* 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 are packages installed with =package-install= automatically deleted by Spacemacs when it boots? +To declare new packages you have to create a new configuration layer or add the +package name to the variable =dotspacemacs-additonal-packages= of your dotfile, +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 =+distribution= 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 + +* 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 =dostpacemacs/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 is two way 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. + +* Windows +** Why do the fonts look crappy on Windows? +You can install [[https://code.google.com/p/mactype/][MacType]] 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. + +* OS X +** Why are the powerline colors not correct on OS X? +This is a [[https://github.com/milkypostman/powerline/issues/54][known issue]] as of Emacs 24.4 due to =ns-use-srgb-colorspace= +defaulting to true. It is recommended to use the [[http://github.com/railwaycat/homebrew-emacsmacport][emacs-mac-port]] build. See the +install section in the [[file:../README.md][README]] for more details. diff --git a/.emacs.d/doc/LAYERS.org b/.emacs.d/doc/LAYERS.org new file mode 100644 index 0000000..0c9eb8f --- /dev/null +++ b/.emacs.d/doc/LAYERS.org @@ -0,0 +1,588 @@ +#+TITLE: Configuration layers +#+HTML_HEAD_EXTRA: + +* Configuration Layers :TOC_4_org: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]] + - [[packages.el][packages.el]] + - [[config.el, funcs.el and keybindings.el][config.el, funcs.el and 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][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. + +**Note**: =with-eval-after-load= is backported for those still on Emacs 24.3 + +** 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 +contains /at least one/ of these files, ordered vaguely by importance. + +- =packages.el= :: for specifying which packages the layer uses +- =config.el= :: for miscellaneous configuration +- =funcs.el= :: for defining general utility functions +- =keybindings.el= :: for defining general keybindings + +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. + +** packages.el +This file should 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 + (setq 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). See the [[https://github.com/milkypostman/melpa#recipe-format][MELPA documentation]] for more +information about recipes. + +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. + +** config.el, funcs.el and keybindings.el +These files contain no magic variables or functions, merely code that is +executed. The intended use cases are + +- config.el :: configuration code that is independent of packages, declaration + layer variables, and so on +- funcs.el :: definition of general utility functions +- keybindings.el :: general keybindings + +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. A handful of packages are installed and loaded as part of the bootstrap process. + Among these packages, of particular interest to us, is =use-package=. All + subsequent code in the loading process may make use of it. +2. Spacemacs goes through all the enabled layers and evaluates their files. The + changes introduced by =config.el= are thus applied, but nothing happens from + =packages.el=, since these files only define functions and variables. +3. 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. +4. All packages which should be installed are installed, and all packages which + are installed but which shouldn't be are removed. (This last behavior is + optional but default.) +5. The =pre-init=, =init= and =post-init= functions for each installed package + are executed in turn. + +It is step five 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 + (setq yoyo-packages '( + ;; ... + some-weird-package + ;; ... + ) + + (when (configuration-layer/layer-usedp 'auto-completion) + (defun yoyo/init-some-weird-package () + (use-package some-weird-package + ;; Only if company is installed + :if (configuration-layer/package-usedp 'company) + :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 + (setq 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/.emacs.d/doc/QUICK_START.org b/.emacs.d/doc/QUICK_START.org new file mode 100644 index 0000000..0b208f3 --- /dev/null +++ b/.emacs.d/doc/QUICK_START.org @@ -0,0 +1,164 @@ +#+TITLE: Quick start +#+HTML_HEAD_EXTRA: + +* Configuration :TOC_4_org:noexport: + - [[Configuration layers][Configuration layers]] + - [[Dotfile (.spacemacs)][Dotfile (.spacemacs)]] + - [[Dotdirectory (~/.spacemacs.d)][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-To's][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 + : 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 + : dotspacemacs/install RET +#+END_EXAMPLE + +To open the installed dotfile: + +#+BEGIN_EXAMPLE + 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. + +* 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= 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:HOWTOs.org][HOWTOs.org]] file. diff --git a/.emacs.d/doc/VIMUSERS.org b/.emacs.d/doc/VIMUSERS.org new file mode 100644 index 0000000..40b9bad --- /dev/null +++ b/.emacs.d/doc/VIMUSERS.org @@ -0,0 +1,486 @@ +#+TITLE: Migrating from Vim +#+HTML_HEAD_EXTRA: + +* Migrating from vim :TOC_4_org: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]] + - [[Micro-states][Micro-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]]. + +*** Micro-states +Spacemacs provides a special functionality called micro-states. Micro-states +allow similar commands to be run in succession without repeatedly pressing the +~~ key. Micro-states are usually triggered by using a keybinding with the +following pattern: ~ .~ where group is the category the +micro-state falls under. When in a micro-state you will see documentation at the +bottom of your window. To exit a micro-state press ~q~. + +#+CAPTION: Micro-state documentation window + +[[file:img/spacemacs-scale-micro-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 :~. 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 :~. + +** 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 k~ | Search for a buffer to kill. | +| ~SPC b K~ | Kill all buffers except the current buffer. | +| ~SPC b .~ | Buffer micro-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 micro-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 function 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") 'spacemacs/previous-useful-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" '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 :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/.emacs.d/doc/img/crappy-powerline-separators.png b/.emacs.d/doc/img/crappy-powerline-separators.png new file mode 100644 index 0000000..0d813b8 Binary files /dev/null and b/.emacs.d/doc/img/crappy-powerline-separators.png differ diff --git a/.emacs.d/doc/img/dot-error.png b/.emacs.d/doc/img/dot-error.png new file mode 100644 index 0000000..9e1d366 Binary files /dev/null and b/.emacs.d/doc/img/dot-error.png differ diff --git a/.emacs.d/doc/img/dot-info.png b/.emacs.d/doc/img/dot-info.png new file mode 100644 index 0000000..7583bbe Binary files /dev/null and b/.emacs.d/doc/img/dot-info.png differ diff --git a/.emacs.d/doc/img/dot-warning.png b/.emacs.d/doc/img/dot-warning.png new file mode 100644 index 0000000..2e8a36c Binary files /dev/null and b/.emacs.d/doc/img/dot-warning.png differ diff --git a/.emacs.d/doc/img/flycheck-error.png b/.emacs.d/doc/img/flycheck-error.png new file mode 100644 index 0000000..3405cdf Binary files /dev/null and b/.emacs.d/doc/img/flycheck-error.png differ diff --git a/.emacs.d/doc/img/flycheck-info.png b/.emacs.d/doc/img/flycheck-info.png new file mode 100644 index 0000000..c3428f1 Binary files /dev/null and b/.emacs.d/doc/img/flycheck-info.png differ diff --git a/.emacs.d/doc/img/flycheck-mode-line.png b/.emacs.d/doc/img/flycheck-mode-line.png new file mode 100644 index 0000000..f23e315 Binary files /dev/null and b/.emacs.d/doc/img/flycheck-mode-line.png differ diff --git a/.emacs.d/doc/img/flycheck-warning.png b/.emacs.d/doc/img/flycheck-warning.png new file mode 100644 index 0000000..b32026f Binary files /dev/null and b/.emacs.d/doc/img/flycheck-warning.png differ diff --git a/.emacs.d/doc/img/powerline-alternate.png b/.emacs.d/doc/img/powerline-alternate.png new file mode 100644 index 0000000..4979224 Binary files /dev/null and b/.emacs.d/doc/img/powerline-alternate.png differ diff --git a/.emacs.d/doc/img/powerline-anzu.png b/.emacs.d/doc/img/powerline-anzu.png new file mode 100644 index 0000000..b5a2f9c Binary files /dev/null and b/.emacs.d/doc/img/powerline-anzu.png differ diff --git a/.emacs.d/doc/img/powerline-arrow-fade.png b/.emacs.d/doc/img/powerline-arrow-fade.png new file mode 100644 index 0000000..0facdec Binary files /dev/null and b/.emacs.d/doc/img/powerline-arrow-fade.png differ diff --git a/.emacs.d/doc/img/powerline-arrow.png b/.emacs.d/doc/img/powerline-arrow.png new file mode 100644 index 0000000..e887a36 Binary files /dev/null and b/.emacs.d/doc/img/powerline-arrow.png differ diff --git a/.emacs.d/doc/img/powerline-bar.png b/.emacs.d/doc/img/powerline-bar.png new file mode 100644 index 0000000..4c810f1 Binary files /dev/null and b/.emacs.d/doc/img/powerline-bar.png differ diff --git a/.emacs.d/doc/img/powerline-box.png b/.emacs.d/doc/img/powerline-box.png new file mode 100644 index 0000000..7ec53ca Binary files /dev/null and b/.emacs.d/doc/img/powerline-box.png differ diff --git a/.emacs.d/doc/img/powerline-brace.png b/.emacs.d/doc/img/powerline-brace.png new file mode 100644 index 0000000..e667039 Binary files /dev/null and b/.emacs.d/doc/img/powerline-brace.png differ diff --git a/.emacs.d/doc/img/powerline-butt.png b/.emacs.d/doc/img/powerline-butt.png new file mode 100644 index 0000000..981263c Binary files /dev/null and b/.emacs.d/doc/img/powerline-butt.png differ diff --git a/.emacs.d/doc/img/powerline-chamfer.png b/.emacs.d/doc/img/powerline-chamfer.png new file mode 100644 index 0000000..9fb4f4b Binary files /dev/null and b/.emacs.d/doc/img/powerline-chamfer.png differ diff --git a/.emacs.d/doc/img/powerline-contour.png b/.emacs.d/doc/img/powerline-contour.png new file mode 100644 index 0000000..b4112eb Binary files /dev/null and b/.emacs.d/doc/img/powerline-contour.png differ diff --git a/.emacs.d/doc/img/powerline-curve.png b/.emacs.d/doc/img/powerline-curve.png new file mode 100644 index 0000000..6d31e5e Binary files /dev/null and b/.emacs.d/doc/img/powerline-curve.png differ diff --git a/.emacs.d/doc/img/powerline-fix-windows.png b/.emacs.d/doc/img/powerline-fix-windows.png new file mode 100644 index 0000000..fa87e7f Binary files /dev/null and b/.emacs.d/doc/img/powerline-fix-windows.png differ diff --git a/.emacs.d/doc/img/powerline-nil.png b/.emacs.d/doc/img/powerline-nil.png new file mode 100644 index 0000000..9da702e Binary files /dev/null and b/.emacs.d/doc/img/powerline-nil.png differ diff --git a/.emacs.d/doc/img/powerline-rounded.png b/.emacs.d/doc/img/powerline-rounded.png new file mode 100644 index 0000000..9666167 Binary files /dev/null and b/.emacs.d/doc/img/powerline-rounded.png differ diff --git a/.emacs.d/doc/img/powerline-roundstub.png b/.emacs.d/doc/img/powerline-roundstub.png new file mode 100644 index 0000000..90402c6 Binary files /dev/null and b/.emacs.d/doc/img/powerline-roundstub.png differ diff --git a/.emacs.d/doc/img/powerline-slant.png b/.emacs.d/doc/img/powerline-slant.png new file mode 100644 index 0000000..f02078d Binary files /dev/null and b/.emacs.d/doc/img/powerline-slant.png differ diff --git a/.emacs.d/doc/img/powerline-update.png b/.emacs.d/doc/img/powerline-update.png new file mode 100644 index 0000000..9bd6523 Binary files /dev/null and b/.emacs.d/doc/img/powerline-update.png differ diff --git a/.emacs.d/doc/img/powerline-wave.png b/.emacs.d/doc/img/powerline-wave.png new file mode 100644 index 0000000..d6090f5 Binary files /dev/null and b/.emacs.d/doc/img/powerline-wave.png differ diff --git a/.emacs.d/doc/img/powerline-zigzag.png b/.emacs.d/doc/img/powerline-zigzag.png new file mode 100644 index 0000000..7fb3cf2 Binary files /dev/null and b/.emacs.d/doc/img/powerline-zigzag.png differ diff --git a/.emacs.d/doc/img/spacemacs-ahs-micro-state.png b/.emacs.d/doc/img/spacemacs-ahs-micro-state.png new file mode 100644 index 0000000..cef0dac Binary files /dev/null and b/.emacs.d/doc/img/spacemacs-ahs-micro-state.png differ diff --git a/.emacs.d/doc/img/spacemacs-lisp-micro-state.png b/.emacs.d/doc/img/spacemacs-lisp-micro-state.png new file mode 100644 index 0000000..f3eb236 Binary files /dev/null and b/.emacs.d/doc/img/spacemacs-lisp-micro-state.png differ diff --git a/.emacs.d/doc/img/spacemacs-python.png b/.emacs.d/doc/img/spacemacs-python.png new file mode 100644 index 0000000..497075b Binary files /dev/null and b/.emacs.d/doc/img/spacemacs-python.png differ diff --git a/.emacs.d/doc/img/spacemacs-scale-micro-state.png b/.emacs.d/doc/img/spacemacs-scale-micro-state.png new file mode 100644 index 0000000..1b2726a Binary files /dev/null and b/.emacs.d/doc/img/spacemacs-scale-micro-state.png differ diff --git a/.emacs.d/doc/img/spacemacs-startup.png b/.emacs.d/doc/img/spacemacs-startup.png new file mode 100644 index 0000000..4118b01 Binary files /dev/null and b/.emacs.d/doc/img/spacemacs-startup.png differ diff --git a/.emacs.d/doc/img/spacemacs-urxvt.png b/.emacs.d/doc/img/spacemacs-urxvt.png new file mode 100644 index 0000000..a837e64 Binary files /dev/null and b/.emacs.d/doc/img/spacemacs-urxvt.png differ diff --git a/.emacs.d/doc/img/title.png b/.emacs.d/doc/img/title.png new file mode 100644 index 0000000..331537e Binary files /dev/null and b/.emacs.d/doc/img/title.png differ diff --git a/.emacs.d/doc/img/title2.png b/.emacs.d/doc/img/title2.png new file mode 100644 index 0000000..3c3e62d Binary files /dev/null and b/.emacs.d/doc/img/title2.png differ diff --git a/.emacs.d/doc/img/update-green.png b/.emacs.d/doc/img/update-green.png new file mode 100644 index 0000000..e2f7166 Binary files /dev/null and b/.emacs.d/doc/img/update-green.png differ diff --git a/.emacs.d/doc/img/update-orange.png b/.emacs.d/doc/img/update-orange.png new file mode 100644 index 0000000..253df50 Binary files /dev/null and b/.emacs.d/doc/img/update-orange.png differ diff --git a/.emacs.d/doc/img/update-red.png b/.emacs.d/doc/img/update-red.png new file mode 100644 index 0000000..9601734 Binary files /dev/null and b/.emacs.d/doc/img/update-red.png differ diff --git a/.emacs.d/doc/img/which-key.png b/.emacs.d/doc/img/which-key.png new file mode 100644 index 0000000..4a1409d Binary files /dev/null and b/.emacs.d/doc/img/which-key.png differ diff --git a/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line-autoloads.el b/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line-autoloads.el new file mode 100644 index 0000000..e51c805 --- /dev/null +++ b/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line-autoloads.el @@ -0,0 +1,53 @@ +;;; ace-jump-helm-line-autoloads.el --- automatically extracted autoloads +;; +;;; Code: +(add-to-list 'load-path (or (file-name-directory #$) (car load-path))) + +;;;### (autoloads nil "ace-jump-helm-line" "ace-jump-helm-line.el" +;;;;;; (22488 27540 664841 179000)) +;;; Generated autoloads from ace-jump-helm-line.el + +(autoload 'ace-jump-helm-line "ace-jump-helm-line" "\ +Jump to a candidate and execute the default action. + +\(fn)" t nil) + +(autoload 'ace-jump-helm-line-and-select "ace-jump-helm-line" "\ +Jump to and select the candidate in helm window. + +\(fn)" t nil) + +(defalias 'ace-jump-helm-line-execute-action 'ace-jump-helm-line-and-select) + +(autoload 'ace-jump-helm-line-idle-exec-add "ace-jump-helm-line" "\ + + +\(fn FUNC)" nil nil) + +(autoload 'ace-jump-helm-line-idle-exec-remove "ace-jump-helm-line" "\ + + +\(fn FUNC)" nil nil) + +(defvar ace-jump-helm-line-autoshow-mode nil "\ +Non-nil if Ace-Jump-Helm-Line-Autoshow mode is enabled. +See the command `ace-jump-helm-line-autoshow-mode' for a description of this minor mode. +Setting this variable directly does not take effect; +either customize it (see the info node `Easy Customization') +or call the function `ace-jump-helm-line-autoshow-mode'.") + +(custom-autoload 'ace-jump-helm-line-autoshow-mode "ace-jump-helm-line" nil) + +(autoload 'ace-jump-helm-line-autoshow-mode "ace-jump-helm-line" "\ +Automatically show line labels in `helm'. + +\(fn &optional ARG)" t nil) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; End: +;;; ace-jump-helm-line-autoloads.el ends here diff --git a/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line-pkg.el b/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line-pkg.el new file mode 100644 index 0000000..65931a8 --- /dev/null +++ b/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line-pkg.el @@ -0,0 +1 @@ +(define-package "ace-jump-helm-line" "20160329.1218" "Ace-jump to a candidate in helm window" '((avy "0.4.0") (helm "1.6.3")) :url "https://github.com/cute-jumper/ace-jump-helm-line" :keywords '("extensions")) diff --git a/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line-pkg.elc b/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line-pkg.elc new file mode 100644 index 0000000..7923aa2 Binary files /dev/null and b/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line-pkg.elc differ diff --git a/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line.el b/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line.el new file mode 100644 index 0000000..d6f1e46 --- /dev/null +++ b/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line.el @@ -0,0 +1,626 @@ +;;; ace-jump-helm-line.el --- Ace-jump to a candidate in helm window + +;; Copyright (C) 2015 Junpeng Qiu + +;; Author: Junpeng Qiu +;; URL: https://github.com/cute-jumper/ace-jump-helm-line +;; Package-Version: 20160329.1218 +;; Keywords: extensions +;; Version: 0.4.0 +;; Package-Requires: ((avy "0.4.0") (helm "1.6.3")) + +;; 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: + +;; ____________________ + +;; ACE-JUMP-HELM-LINE + +;; Junpeng Qiu +;; ____________________ + + +;; Table of Contents +;; _________________ + +;; 1 Setup +;; 2 Usage +;; .. 2.1 Keys & UI +;; .. 2.2 Different Actions: move-only, persistent or select +;; .. 2.3 Automatic Idle Execution +;; .. 2.4 Line Hints Preview +;; 3 Example settings +;; 4 Demos(only showing the basic feature) +;; 5 Similar Package +;; 6 Acknowledgment + + +;; [[file:http://melpa.org/packages/ace-jump-helm-line-badge.svg]] +;; [[file:http://stable.melpa.org/packages/ace-jump-helm-line-badge.svg]] + +;; *Ace-jump to a candidate in helm window.* + +;; This package makes use of the `avy.el'. + + +;; [[file:http://melpa.org/packages/ace-jump-helm-line-badge.svg]] +;; http://melpa.org/#/ace-jump-helm-line + +;; [[file:http://stable.melpa.org/packages/ace-jump-helm-line-badge.svg]] +;; http://stable.melpa.org/#/ace-jump-helm-line + + +;; 1 Setup +;; ======= + +;; ,---- +;; | (add-to-list 'load-path "/path/to/ace-jump-helm-line.el") +;; | (require 'ace-jump-helm-line) +;; `---- + +;; You can use the following code to bind `ace-jump-helm-line' to a +;; key(say, C-'): +;; ,---- +;; | (eval-after-load "helm" +;; | '(define-key helm-map (kbd "C-'") 'ace-jump-helm-line)) +;; `---- + + +;; 2 Usage +;; ======= + +;; When in a helm session, for example, after you call `helm-M-x', you +;; can use your key binding(for example, C-') to invoke +;; `ace-jump-helm-line'. See the following demos. + +;; *Note*: Since *2016-02-19*, you can configure `ace-jump-helm-line' in +;; a similar way as `avy'. The old-fashioned variable +;; `ace-jump-helm-line-use-avy-style' is discarded now. There is no +;; effect by setting this variable(I dropped this variable because `avy' +;; has become much more configurable since I first developed this +;; package). + + +;; 2.1 Keys & UI +;; ~~~~~~~~~~~~~ + +;; You can customize following variables: +;; 1. `ace-jump-helm-line-keys': the keys to be used for +;; `ace-jump-helm-line'. If you don't set this variable, `avy-keys' +;; will be used. +;; 2. `ace-jump-helm-line-style': You can set the styles to be used for +;; `ace-jump-helm-line'. The values can be `pre', `at', `at-full', +;; `post', and `de-bruijn', the same as `avy-style'. If you don't set +;; this variable, `avy-style' will be used. +;; 3. `ace-jump-helm-line-background': Whether you want to use a +;; background or not. The default value is `nil'. + +;; For old version users: if you want to achieve the same effect of +;; `(setq ace-jump-helm-line-use-avy-style nil)', use the following +;; code: +;; ,---- +;; | (setq ace-jump-helm-line-keys (number-sequence ?a ?z)) +;; | (setq ace-jump-helm-line-style 'at) +;; | (setq ace-jump-helm-line-background t) +;; `---- + + +;; 2.2 Different Actions: move-only, persistent or select +;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +;; You can now specify the action that will be executed after the cursor +;; has been moved to the candidate. This is controlled by the value of +;; `ace-jump-helm-line-default-action'. Three different kinds of values +;; are available: +;; 1. `nil' or `move-only': This is the default one. Just move the cursor +;; to the candidate and do nothing. +;; 2. `persistent': After the cursor has been moved to the candidate, +;; execute the persistent action on that candidate. +;; 3. `select': After the cursor has been moved to the candidate, select +;; the candidate and exit the helm session. + +;; Thanks to `avy' 0.4.0, we can now switch the action after we see the +;; avy prompt. Three different keys can be used to switch the action: +;; 1. `ace-jump-helm-line-move-only-key' +;; 2. `ace-jump-helm-line-persistent-key' +;; 3. `ace-jump-helm-line-select-key' + +;; For example, if we have following settings: +;; ,---- +;; | (setq ace-jump-helm-line-default-action 'select) +;; | (setq ace-jump-helm-line-select-key ?e) ;; this line is not neeeded +;; | ;; Set the move-only and persistent keys +;; | (setq ace-jump-helm-line-move-only-key ?o) +;; | (setq ace-jump-helm-line-persistent-key ?p) +;; `---- + +;; Say after we invoke `ace-jump-helm-line', we can use f to jump to a +;; candidate. Since the default action is `select', the candidate will be +;; automatically selected and the helm session will be ended after the +;; cursor has been moved to it. But suddenly I change my mind and only +;; want to move to it. Instead of pressing f, I can press of where o is +;; defined by the `ace-jump-helm-line-move-only-key' and is used to +;; switch the action to `move-only'. Similarly, if I press pf, then the +;; persistent action on the candidate will be executed. + +;; Note in this example, setting `ace-jump-helm-line-select-key' has no +;; effect because the default action is `select'. It makes no senses that +;; we need to have an extra key to switch to the `select' action. So if +;; your default action is `nil' or `move-only', +;; `ace-jump-helm-line-move-only-key' is not needed and +;; `ace-jump-helm-line-persistent-key' is not needed if your default +;; action is `persistent'. However, you're *safe* to set these variables +;; regardless of your default action since the variable corresponding to +;; your default action will just be ignored. + +;; If you wonder why this feature is useful, here is an example: if you use +;; `helm-find-files' and set the default action to be `select', you can now +;; use `ace-jump-helm-line-persistent-key' to complete the directory name +;; instead of opening the directory in dired. This means you can use +;; `ace-jump-helm-line' until you finally find the target file. + +;; For compatibility issues, there are also two identical pre-defined +;; commands: `ace-jump-helm-line-and-select' and +;; `ace-jump-helm-line-execute-action'. Their default action is to select +;; the candidate and exit the helm session. Now you can achieve the same +;; effect using `ace-jump-helm-line' by the following setting: +;; ,---- +;; | (setq ace-jump-helm-line-default-action 'select) +;; `---- + + +;; 2.3 Automatic Idle Execution +;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +;; `ace-jump-helm-line' can be automatically executed if there is no +;; input after the user launches a helm command. The delay can be +;; specified by setting the variable `ace-jump-helm-line-idle-delay' in +;; seconds. The default value is 1. + +;; Use the following code to enable this feature for a helm command, say, +;; `helm-mini': +;; ,---- +;; | (ace-jump-helm-line-idle-exec-add 'helm-mini) +;; `---- + +;; After adding this setting, `ace-jump-helm-line' will be automatically +;; triggerred if there is no input for `ace-jump-helm-line-idle-delay' +;; seconds after `helm-mini' is called. + +;; To remove it, use: +;; ,---- +;; | (ace-jump-helm-line-idle-exec-remove 'helm-mini) +;; `---- + +;; Note this feature is *experimental*. Please file an issue if you find +;; any problems. As I couldn't find good documentation about adding hooks +;; to a helm command, the implementation is a simple yet dirty hack. And +;; don't try to set the value of `ace-jump-helm-line-idle-delay' to be +;; `nil'. It doesn't work. + + +;; 2.4 Line Hints Preview +;; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +;; You can preview the line hints without invoking `ace-jump-helm-line' by +;; enabling `ace-jump-helm-line-autoshow-mode'. This is similar to `linum-mode'. +;; With `avy-style' set to `at-full', the result is shown below: +;; https://github.com/cute-jumper/ace-jump-helm-line/screencasts/autoshow.png + +;; Or if you may prefer to show the hints using `linum-mode', you can set +;; `ace-jump-helm-line-autoshow-use-linum' to `t': +;; ,---- +;; | (setq ace-jump-helm-line-autoshow-use-linum t) +;; `---- + +;; The result: +;; https://github.com/cute-jumper/ace-jump-helm-line/screencasts/autoshow-linum.png + + +;; 3 Example settings +;; ================== + +;; ,---- +;; | (eval-after-load "helm" +;; | '(define-key helm-map (kbd "C-'") 'ace-jump-helm-line)) +;; | ;; or if using key-chord-mode +;; | ;; (eval-after-load "helm" +;; | ;; '(key-chord-define helm-map "jj" 'ace-jump-helm-line)) +;; | (setq ace-jump-helm-line-style 'pre) +;; | (setq ace-jump-helm-line-background t) +;; | (setq ace-jump-helm-line-default-action 'select) +;; | (setq ace-jump-helm-line-select-key ?e) ;; this line is not neeeded +;; | ;; Set the move-only and persistent keys +;; | (setq ace-jump-helm-line-move-only-key ?o) +;; | (setq ace-jump-helm-line-persistent-key ?p) +;; | ;; enable idle execution for `helm-mini' +;; | (ace-jump-helm-line-idle-exec-add 'helm-mini) +;; | ;; enable hints preview +;; | (ace-jump-helm-line-autoshow-mode +1) +;; | ;; use `linum-mode' to show +;; | (setq ace-jump-helm-line-autoshow-mode-use-linum t) +;; `---- + + +;; 4 Demos(only showing the basic feature) +;; ======================================= + +;; The following demo are recorded in pre-0.4 version. It's a little +;; out-dated. + +;; Use `avy' style to jump to a helm candidate: +;; [./screencasts/avy-jump-style.gif] + +;; Or use a different style similar to `ace-jump-mode' (by setting the +;; values of `ace-jump-helm-line-keys', `ace-jump-helm-line-style' and +;; `ace-jump-helm-line-background'): +;; [./screencasts/ace-jump-mode-style.gif] + +;; The new features after v0.4 are not recorded yet.:-( + + +;; 5 Similar Package +;; ================= + +;; [This issue of Helm] has been solved by adding a new minor mode +;; `helm-linum-relative-mode' to `linum-relative'. You can take a look if +;; you don't like `avy' and want to find an alternative. As a heavy user +;; of `avy', I don't find the way that `helm-linum-relative-mode' +;; provides very appealing. Thanks to `avy', this package provides more +;; customizations and more consistent user experience for `avy' users. + + +;; [This issue of Helm] https://github.com/emacs-helm/helm/issues/1257 + + +;; 6 Acknowledgment +;; ================ + +;; - Thank [Oleh Krehel] for the awesome [avy] package. +;; - Thank @hick for the original idea. + + +;; [Oleh Krehel] https://github.com/abo-abo/ + +;; [avy] https://github.com/abo-abo/avy + +;;; Code: + +(require 'avy) +(require 'helm) +(require 'linum) + +(defvar ace-jump-helm-line-keys nil + "Keys used for `ace-jump-helm-line'.") + +(defvar ace-jump-helm-line-style nil + "Style used for `ace-jump-helm-line'.") + +(defvar ace-jump-helm-line-background nil + "Use background or not in `ace-jump-helm-line'.") + +(defvar ace-jump-helm-line-use-avy-style t + "Useless variable since v0.4. +Please set `ace-jump-helm-line-keys', `ace-jump-helm-line-style' +and `ace-jump-helm-line-background' instead.") + +(defvar ace-jump-helm-line-persistent-key nil + "The key to perform persistent action.") + +(defvar ace-jump-helm-line-select-key nil + "The key to select. +Used for `ace-jump-helm-line'.") + +(defvar ace-jump-helm-line-move-only-key nil + "The key to only move the selection. + Used for `ace-jump-helm-line-and-select'.") + +(defvar ace-jump-helm-line-default-action nil + "The default action when jumping to a candidate.") + +(defvar ace-jump-helm-line-idle-delay 1 + "The delay to trigger automatic `ace-jump-helm-line'.") + +(defvar ace-jump-helm-line-autoshow-use-linum nil + "Whether showing the line hints using `linum-mode' or not.") + +(defvar ace-jump-helm-line--tree-leafs nil) + +(defvar ace-jump-helm-line--original-linum-format nil) +(unless ace-jump-helm-line--original-linum-format + (setq ace-jump-helm-line--original-linum-format linum-format)) + +(defvar ace-jump-helm-line--action-type nil) + +(defvar ace-jump-helm-line--last-win-start -1) + +(defun ace-jump-helm-line-action-persistent (pt) + (goto-char pt) + (setq ace-jump-helm-line--action-type 'persistent) + (ace-jump-helm-line--move-selection) + (helm-execute-persistent-action)) + +(defun ace-jump-helm-line-action-select (pt) + (goto-char pt) + (setq ace-jump-helm-line--action-type 'select) + (ace-jump-helm-line--move-selection) + (helm-exit-minibuffer)) + +(defun ace-jump-helm-line-action-move-only (pt) + (goto-char pt) + (setq ace-jump-helm-line--action-type 'move-only) + (ace-jump-helm-line--move-selection)) + +(defun ace-jump-helm-line--move-selection () + (let (helm-after-preselection-hook + helm-move-selection-after-hook + helm-after-update-hook + (orig-point (point))) + (helm-move-selection-common :where 'line :direction 'previous) + (unless (= (point) orig-point) + (helm-move-selection-common :where 'line :direction 'next)))) + +(defun ace-jump-helm-line--get-dispatch-alist () + (when (boundp 'avy-dispatch-alist) + (let* ((default-action (or ace-jump-helm-line-default-action + 'move-only)) + (full-list (list 'persistent 'select 'move-only)) + (action-list (delete default-action full-list)) + dispatch-alist) + (dolist (w action-list dispatch-alist) + (let ((key-sym (intern (format "ace-jump-helm-line-%s-key" w))) + (action-sym (intern (format "ace-jump-helm-line-action-%s" w)))) + (eval `(and ,key-sym + (push (cons ,key-sym ',action-sym) dispatch-alist)))))))) + +(defun ace-jump-helm-line--collect-lines (win-start &optional win-end) + "Collect lines in helm window." + (save-excursion + (save-restriction + (let ((win-end (or win-end + (save-excursion + (goto-char win-start) + (forward-line + (ceiling (window-screen-lines))) + (line-beginning-position)))) + candidates) + (setq ace-jump-helm-line--last-win-start win-start) + (narrow-to-region win-start win-end) + (goto-char (point-min)) + (while (or (helm-pos-header-line-p) + (helm-pos-candidate-separator-p)) + (forward-line 1)) + (while (< (point) (point-max)) + (push (cons (point) (selected-window)) + candidates) + (forward-line 1) + (while (and (or (helm-pos-header-line-p) + (helm-pos-candidate-separator-p)) + (< (point) (point-max))) + (forward-line 1))) + (nreverse candidates))))) + +(defun ace-jump-helm-line--scroll-function (win start-pos) + (unless (= ace-jump-helm-line--last-win-start start-pos) + (setq ace-jump-helm-line--last-win-start start-pos) + (ace-jump-helm-line--update-line-overlays-maybe start-pos))) + +(defun ace-jump-helm-line--add-scroll-function () + (with-helm-buffer + (add-hook 'window-scroll-functions + 'ace-jump-helm-line--scroll-function nil t))) + +(defun ace-jump-helm-line--do () + (if helm-alive-p + (let* ((orig-window (selected-window)) + (avy-background ace-jump-helm-line-background) + (avy-keys (or ace-jump-helm-line-keys + avy-keys)) + (avy-dispatch-alist (ace-jump-helm-line--get-dispatch-alist)) + (avy-style + (or ace-jump-helm-line-style + avy-style)) + avy-action + avy-all-windows) + (unwind-protect + (with-selected-window (helm-window) + (and ace-jump-helm-line-autoshow-mode + ace-jump-helm-line-autoshow-use-linum + (linum-mode -1)) + (and (numberp + (avy--process (ace-jump-helm-line--collect-lines + (window-start) + (window-end (selected-window) t)) + (avy--style-fn avy-style))) + (or avy-action + (ace-jump-helm-line--exec-default-action)))) + (when ace-jump-helm-line-autoshow-mode + (when ace-jump-helm-line-autoshow-use-linum + (turn-on-ace-jump-helm-line--linum)) + (ace-jump-helm-line--update-line-overlays-maybe)) + (select-window orig-window))) + (error "No helm session is running"))) + +(defun ace-jump-helm-line--exec-default-action () + (when (and helm-alive-p + (eq ace-jump-helm-line-default-action + ace-jump-helm-line--action-type)) + (ace-jump-helm-line--move-selection) + (cond + ((eq ace-jump-helm-line-default-action 'select) + (helm-exit-minibuffer)) + ((eq ace-jump-helm-line-default-action 'persistent) + (helm-execute-persistent-action))))) + +(defmacro ace-jump-helm-line--with-helm-minibuffer-setup-hook (fun &rest body) + "Temporarily add FUN to `helm-minibuffer-set-up-hook' while executing BODY." + (declare (indent 1) (debug t)) + (let ((hook (make-symbol "setup-hook"))) + `(let (,hook) + (setq ,hook + (lambda () + (remove-hook 'helm-minibuffer-set-up-hook ,hook) + (funcall ,fun))) + (unwind-protect + (progn + (add-hook 'helm-minibuffer-set-up-hook ,hook) + ,@body) + (remove-hook 'helm-minibuffer-set-up-hook ,hook))))) + +(defun ace-jump-helm-line--do-if-empty () + (when (string-equal (minibuffer-contents) "") + (condition-case err + (ace-jump-helm-line) + (error + (message "%s" (error-message-string err)))))) + +(defun ace-jump-helm-line--maybe (orig-func &rest args) + (ace-jump-helm-line--with-helm-minibuffer-setup-hook + (lambda () + (run-at-time ace-jump-helm-line-idle-delay nil + #'ace-jump-helm-line--do-if-empty)) + (apply orig-func args))) + +(defun ace-jump-helm-line--update-line-overlays-maybe (&optional win-start) + (interactive) + (let (avy--leafs + avy-background + (avy-current-path "") + (avy-style (or ace-jump-helm-line-style + avy-style)) + candidates + (keys (or ace-jump-helm-line-keys avy-keys))) + (when helm-alive-p + (with-helm-window + (setq candidates (ace-jump-helm-line--collect-lines + (or win-start (window-start)) + (and (not win-start) (window-end (selected-window) t)))) + (if (eq avy-style 'de-bruijn) + (let* ((path-len (ceiling (log (length candidates) (length keys)))) + (alist (avy--path-alist-1 candidates path-len keys))) + (while (not alist) + (cl-incf path-len) + (setq alist (avy--path-alist-1 lst path-len keys))) + (setq avy--leafs + (reverse + (mapcar + (lambda (x) (cons (reverse (car x)) (cdr x))) + alist)))) + (avy-traverse + (avy-tree candidates keys) + (lambda (path leaf) + (push (cons path leaf) avy--leafs)))) + (setq ace-jump-helm-line--tree-leafs avy--leafs) + (if ace-jump-helm-line-autoshow-use-linum + (linum-update helm-buffer) + (avy--remove-leading-chars) + (dolist (x avy--leafs) + (funcall (avy--style-fn avy-style) + (car x) (cdr x)))))))) + +(defun ace-jump-helm-line--cleanup-overlays () + (with-helm-window (avy--done))) + +(defun ace-jump-helm-line--linum (line-number) + (when helm-alive-p + (let (fmt + (start-point + (save-excursion + (with-helm-window + (save-excursion + (goto-line line-number) + (line-beginning-position)))))) + (catch 'done + (dolist (elem ace-jump-helm-line--tree-leafs) + (when (= (nth 1 elem) start-point) + (setq fmt (mapconcat (lambda (x) (format "%c" x)) + (reverse (car elem)) + "")) + (throw 'done t)))) + (setq fmt (and fmt (propertize fmt 'face 'avy-lead-face))) + (when (or avy-highlight-first (> (length fmt) 1)) + (set-text-properties 0 1 '(face avy-lead-face-0) fmt)) + (if fmt + (format "%3s" fmt) + (propertize "" 'invisible t))))) + +(defun turn-on-ace-jump-helm-line--linum () + (when ace-jump-helm-line-autoshow-use-linum + (with-helm-buffer + (set (make-local-variable 'linum-format) + 'ace-jump-helm-line--linum) + (linum-mode +1)))) + +;;;###autoload +(defun ace-jump-helm-line () + "Jump to a candidate and execute the default action." + (interactive) + (let ((ace-jump-helm-line--action-type + ace-jump-helm-line-default-action)) + (ace-jump-helm-line--do))) + +;;;###autoload +(defun ace-jump-helm-line-and-select () + "Jump to and select the candidate in helm window." + (interactive) + (let ((ace-jump-helm-line-default-action 'select)) + (ace-jump-helm-line))) + +;;;###autoload +(defalias 'ace-jump-helm-line-execute-action 'ace-jump-helm-line-and-select) + +;;;###autoload +(defun ace-jump-helm-line-idle-exec-add (func) + (advice-add func :around #'ace-jump-helm-line--maybe)) + +;;;###autoload +(defun ace-jump-helm-line-idle-exec-remove (func) + (advice-remove func #'ace-jump-helm-line--maybe)) + +;;;###autoload +(define-minor-mode ace-jump-helm-line-autoshow-mode + "Automatically show line labels in `helm'." + :global t + (if ace-jump-helm-line-autoshow-mode + (progn + (add-hook 'helm-after-preselection-hook + 'ace-jump-helm-line--update-line-overlays-maybe) + (add-hook 'helm-move-selection-after-hook + 'ace-jump-helm-line--update-line-overlays-maybe) + (add-hook 'helm-after-update-hook + 'ace-jump-helm-line--update-line-overlays-maybe t) + (add-hook 'helm-after-initialize-hook + 'ace-jump-helm-line--add-scroll-function) + (add-hook 'helm-cleanup-hook 'ace-jump-helm-line--cleanup-overlays) + ;; hooks for linum + (add-hook 'helm-after-initialize-hook + 'turn-on-ace-jump-helm-line--linum)) + (remove-hook 'helm-after-preselection-hook + 'ace-jump-helm-line--update-line-overlays-maybe) + (remove-hook 'helm-move-selection-after-hook + 'ace-jump-helm-line--update-line-overlays-maybe) + (remove-hook 'helm-after-update-hook + 'ace-jump-helm-line--update-line-overlays-maybe) + (remove-hook 'helm-after-initialize-hook + 'ace-jump-helm-line--add-scroll-function) + (remove-hook 'helm-cleanup-hook 'ace-jump-helm-line--cleanup-overlays) + ;; hooksf for linum + (remove-hook 'helm-after-initialize-hook + 'turn-on-ace-jump-helm-line--linum))) + +(make-obsolete-variable 'ace-jump-helm-line-use-avy-style nil "0.4") + +(provide 'ace-jump-helm-line) +;;; ace-jump-helm-line.el ends here diff --git a/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line.elc b/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line.elc new file mode 100644 index 0000000..023cd81 Binary files /dev/null and b/.emacs.d/elpa/ace-jump-helm-line-20160329.1218/ace-jump-helm-line.elc differ diff --git a/.emacs.d/elpa/ace-link-20160912.853/ace-link-autoloads.el b/.emacs.d/elpa/ace-link-20160912.853/ace-link-autoloads.el new file mode 100644 index 0000000..c22307e --- /dev/null +++ b/.emacs.d/elpa/ace-link-20160912.853/ace-link-autoloads.el @@ -0,0 +1,72 @@ +;;; ace-link-autoloads.el --- automatically extracted autoloads +;; +;;; Code: +(add-to-list 'load-path (or (file-name-directory #$) (car load-path))) + +;;;### (autoloads nil "ace-link" "ace-link.el" (22488 27541 214841 +;;;;;; 169000)) +;;; Generated autoloads from ace-link.el + +(autoload 'ace-link "ace-link" "\ +Call the ace link function for the current `major-mode' + +\(fn)" t nil) + +(autoload 'ace-link-info "ace-link" "\ +Open a visible link in an `Info-mode' buffer. + +\(fn)" t nil) + +(autoload 'ace-link-help "ace-link" "\ +Open a visible link in a `help-mode' buffer. + +\(fn)" t nil) + +(autoload 'ace-link-woman "ace-link" "\ +Open a visible link in a `woman-mode' buffer. + +\(fn)" t nil) + +(autoload 'ace-link-eww "ace-link" "\ +Open a visible link in an `eww-mode' buffer. + +\(fn)" t nil) + +(autoload 'ace-link-compilation "ace-link" "\ +Open a visible link in a `compilation-mode' buffer. + +\(fn)" t nil) + +(autoload 'ace-link-gnus "ace-link" "\ +Open a visible link in a `gnus-article-mode' buffer. + +\(fn)" t nil) + +(autoload 'ace-link-org "ace-link" "\ +Open a visible link in an `org-mode' buffer. + +\(fn)" t nil) + +(autoload 'ace-link-custom "ace-link" "\ +Open a visible link in an `Custom-mode' buffer. + +\(fn)" t nil) + +(autoload 'ace-link-addr "ace-link" "\ +Open a visible link in a goto-address buffer. + +\(fn)" t nil) + +(autoload 'ace-link-setup-default "ace-link" "\ +Bind KEY to appropriate functions in appropriate keymaps. + +\(fn &optional KEY)" nil nil) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; End: +;;; ace-link-autoloads.el ends here diff --git a/.emacs.d/elpa/ace-link-20160912.853/ace-link-pkg.el b/.emacs.d/elpa/ace-link-20160912.853/ace-link-pkg.el new file mode 100644 index 0000000..c5a4de6 --- /dev/null +++ b/.emacs.d/elpa/ace-link-20160912.853/ace-link-pkg.el @@ -0,0 +1 @@ +(define-package "ace-link" "20160912.853" "Quickly follow links" '((avy "0.2.0")) :url "https://github.com/abo-abo/ace-link" :keywords '("convenience" "links")) diff --git a/.emacs.d/elpa/ace-link-20160912.853/ace-link-pkg.elc b/.emacs.d/elpa/ace-link-20160912.853/ace-link-pkg.elc new file mode 100644 index 0000000..dacd17b Binary files /dev/null and b/.emacs.d/elpa/ace-link-20160912.853/ace-link-pkg.elc differ diff --git a/.emacs.d/elpa/ace-link-20160912.853/ace-link.el b/.emacs.d/elpa/ace-link-20160912.853/ace-link.el new file mode 100644 index 0000000..30f3039 --- /dev/null +++ b/.emacs.d/elpa/ace-link-20160912.853/ace-link.el @@ -0,0 +1,420 @@ +;;; ace-link.el --- Quickly follow links + +;; Copyright (C) 2014-2015 Oleh Krehel + +;; Author: Oleh Krehel +;; URL: https://github.com/abo-abo/ace-link +;; Package-Version: 20160912.853 +;; Version: 0.4.0 +;; Package-Requires: ((avy "0.2.0")) +;; Keywords: convenience, links + +;; This file is not part of GNU Emacs + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This 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. + +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; +;; This package offers an alternative to tabbing through links in +;; buffers, for instance, in an Info buffer. `avy' is used to turn +;; opening a link from an O(N) operation into an O(1). +;; +;; Use `ace-link-setup-default' to set up the default bindings, which currently +;; bind e.g. `ace-link-info' to "o", which was previously unbound and is +;; close to "l" (which by default goes back). +;; +;; Supported modes: `Info-mode', `help-mode', `org-mode', `eww-mode', +;; `gnus-article-mode', `Custom-mode', `woman-mode', `goto-address-mode'. + +;;; Code: +(require 'avy) + +;;* `ace-link' +;;;###autoload +(defun ace-link () + "Call the ace link function for the current `major-mode'" + (interactive) + (cl-case major-mode + (Info-mode + (ace-link-info)) + ((help-mode package-menu-mode) + (ace-link-help)) + (woman-mode + (ace-link-woman)) + (eww-mode + (ace-link-eww)) + ((compilation-mode grep-mode) + (ace-link-compilation)) + (gnus-mode + (ace-link-gnus)) + (org-mode + (ace-link-org)) + (Custom-mode + (ace-link-org)) + (t + (error "%S isn't supported" major-mode)))) + +;;* `ace-link-info' +;;;###autoload +(defun ace-link-info () + "Open a visible link in an `Info-mode' buffer." + (interactive) + (let ((pt (avy-with ace-link-info + (avy--process + (mapcar #'cdr + (ace-link--info-collect)) + (avy--style-fn avy-style))))) + (ace-link--info-action pt))) + +(defun ace-link--info-action (pt) + (when (numberp pt) + (push-mark) + (goto-char pt) + (let ((we (window-end))) + (while (not (ignore-errors + (Info-follow-nearest-node))) + (forward-char 1) + (when (> (point) we) + (error "Could not follow link")))))) + +(declare-function Info-follow-nearest-node "info") +(declare-function Info-next-reference "info") +(declare-function Info-try-follow-nearest-node "info") +(declare-function Info-goto-node "info") + +(defun ace-link--info-current () + "Return the node at point." + (cons (cl-letf (((symbol-function #'Info-goto-node) + (lambda (node _) node))) + (Info-try-follow-nearest-node)) + (1- (point)))) + +(defun ace-link--info-collect () + "Collect the positions of visible links in the current `Info-mode' buffer." + (let ((end (window-end)) + points) + (save-excursion + (goto-char (window-start)) + (when (ignore-errors (Info-next-reference) t) + (push (ace-link--info-current) points) + (Info-next-reference) + (while (and (< (point) end) + (> (point) (cdar points))) + (push (ace-link--info-current) points) + (Info-next-reference)) + (nreverse points))))) + +;;* `ace-link-help' +;;;###autoload +(defun ace-link-help () + "Open a visible link in a `help-mode' buffer." + (interactive) + (let ((pt (avy-with ace-link-help + (avy--process + (mapcar #'cdr (ace-link--help-collect)) + (avy--style-fn avy-style))))) + (ace-link--help-action pt))) + +(defun ace-link--help-action (pt) + (when (numberp pt) + (goto-char (1+ pt)) + (push-button))) + +(defun ace-link--help-collect () + "Collect the positions of visible links in the current `help-mode' buffer." + (let ((skip (text-property-any + (window-start) (window-end) 'button nil)) + candidates) + (save-excursion + (while (setq skip (text-property-not-all + skip (window-end) 'button nil)) + (goto-char skip) + (push (cons (button-label (button-at skip)) skip) candidates) + (setq skip (text-property-any (point) (window-end) + 'button nil)))) + (nreverse candidates))) + +;;* `ace-link-woman' +;;;###autoload +(defun ace-link-woman () + "Open a visible link in a `woman-mode' buffer." + (interactive) + (let ((pt (avy-with ace-link-woman + (avy--process + (mapcar #'cdr (ace-link--woman-collect)) + (avy--style-fn avy-style))))) + (ace-link--woman-action pt))) + +(defun ace-link--woman-action (pt) + (when (number-or-marker-p pt) + (goto-char (1+ pt)) + (push-button))) + +(defun ace-link--woman-collect () + "Collect all links visible in the current `woman-mode' buffer." + (let ((end (window-end)) + candidates) + (save-excursion + (goto-char (window-start)) + (while (and (condition-case nil (forward-button 1) + (error nil)) + (< (point) end)) + (push (cons (button-label (button-at (point))) (point)) + candidates)) + (nreverse candidates)))) + +;;* `ace-link-eww' +;;;###autoload +(defun ace-link-eww () + "Open a visible link in an `eww-mode' buffer." + (interactive) + (let ((pt (avy-with ace-link-eww + (avy--process + (mapcar #'cdr (ace-link--eww-collect)) + (avy--style-fn avy-style))))) + (ace-link--eww-action pt))) + +(declare-function eww-follow-link "eww") + +(defun ace-link--eww-action (pt) + (when (number-or-marker-p pt) + (goto-char (1+ pt)) + (eww-follow-link))) + +(defun ace-link--eww-collect () + "Collect the positions of visible links in the current `eww' buffer." + (save-excursion + (save-restriction + (narrow-to-region + (window-start) + (window-end)) + (goto-char (point-min)) + (let (beg end candidates) + (setq end + (if (get-text-property (point) 'help-echo) + (point) + (text-property-any + (point) (point-max) 'help-echo nil))) + (while (setq beg (text-property-not-all + end (point-max) 'help-echo nil)) + (goto-char beg) + (setq end (text-property-any + (point) (point-max) 'help-echo nil)) + (push (cons (buffer-substring-no-properties beg end) beg) + candidates)) + (nreverse candidates))))) + +;;* `ace-link-compilation' +;;;###autoload +(defun ace-link-compilation () + "Open a visible link in a `compilation-mode' buffer." + (interactive) + (let ((pt (avy-with ace-link-compilation + (avy--process + (mapcar #'cdr (ace-link--eww-collect)) + (avy--style-fn avy-style))))) + (ace-link--compilation-action pt))) + +(defun ace-link--compilation-action (pt) + (when (number-or-marker-p pt) + (goto-char (1+ pt)) + (compile-goto-error))) + +(declare-function compile-goto-error "compile") + +;;* `ace-link-gnus' +;;;###autoload +(defun ace-link-gnus () + "Open a visible link in a `gnus-article-mode' buffer." + (interactive) + (when (eq major-mode 'gnus-summary-mode) + (gnus-summary-widget-forward 1)) + (let ((pt (avy-with ace-link-gnus + (avy--process + (ace-link--gnus-collect) + (avy--style-fn avy-style))))) + (ace-link--gnus-action pt))) + +(defun ace-link--gnus-action (pt) + (when (number-or-marker-p pt) + (goto-char (1+ pt)) + (widget-button-press (point)))) + +(declare-function widget-forward "wid-edit") +(declare-function gnus-summary-widget-forward "gnus-sum") +(declare-function widget-button-press "wid-edit") + +(defun ace-link--gnus-collect () + "Collect the positions of visible links in the current gnus buffer." + (require 'wid-edit) + (let (candidates pt) + (save-excursion + (save-restriction + (narrow-to-region + (window-start) + (window-end)) + (goto-char (point-min)) + (setq pt (point)) + (while (progn (widget-forward 1) + (> (point) pt)) + (setq pt (point)) + (when (or (plist-get (text-properties-at (point)) 'gnus-string) + (plist-get (text-properties-at (point)) 'shr-url)) + (push (point) candidates))) + (nreverse candidates))))) + +;;* `ace-link-org' +;;;###autoload +(defun ace-link-org () + "Open a visible link in an `org-mode' buffer." + (interactive) + (require 'org) + (let ((pt (avy-with ace-link-org + (avy--process + (mapcar #'cdr (ace-link--org-collect)) + (avy--style-fn avy-style))))) + (ace-link--org-action pt))) + +(declare-function org-open-at-point "org") +(declare-function outline-invisible-p "outline") +(defvar org-any-link-re) + +(defun ace-link--org-action (pt) + (when (numberp pt) + (goto-char pt) + (org-open-at-point))) + +(defun ace-link--org-collect () + (let ((end (window-end)) + res) + (save-excursion + (goto-char (window-start)) + (while (re-search-forward org-any-link-re end t) + ;; Check that the link is visible. Look at the last character + ;; position in the link ("...X]]") to cover links with and + ;; without a description. + (when (not (outline-invisible-p (- (match-end 0) 3))) + (push + (cons + (buffer-substring-no-properties + (match-beginning 0) + (match-end 0)) + (match-beginning 0)) + res))) + (nreverse res)))) + +;;* `ace-link-custom' +;;;###autoload +(defun ace-link-custom () + "Open a visible link in an `Custom-mode' buffer." + (interactive) + (let ((pt (avy-with ace-link-custom + (avy--process + (ace-link--custom-collect) + (avy--style-fn avy-style))))) + (ace-link--custom-action pt))) + +(declare-function Custom-newline "cus-edit") + +(defun ace-link--custom-action (pt) + (when (number-or-marker-p pt) + (goto-char pt) + (Custom-newline (point)))) + +(defun ace-link--custom-collect () + "Collect the positions of visible links in the current `Custom-mode' buffer." + (let (candidates pt) + (save-excursion + (save-restriction + (narrow-to-region + (window-start) + (window-end)) + (goto-char (point-min)) + (setq pt (point)) + (while (progn (widget-forward 1) + (> (point) pt)) + (setq pt (point)) + (when (get-char-property (point) 'button) + (push (point) candidates))))) + (nreverse candidates))) + +;;* `ace-link-addr' +;;;###autoload +(defun ace-link-addr () + "Open a visible link in a goto-address buffer." + (interactive) + (let ((pt (avy-with ace-link-addr + (avy--process + (ace-link--addr-collect) + (avy--style-fn avy-style))))) + (ace-link--addr-action pt))) + +(defun ace-link--addr-action (pt) + (when (number-or-marker-p pt) + (goto-char (1+ pt)) + (goto-address-at-point))) + +(defun ace-link--addr-collect () + (let (candidates) + (dolist (overlay (overlays-in (window-start) (window-end))) + (if (overlay-get overlay 'goto-address) + (push (overlay-start overlay) candidates))) + (nreverse candidates))) + +;;* Bindings +(defvar eww-link-keymap) +(defvar eww-mode-map) +(defvar custom-mode-map) + +;;;###autoload +(defun ace-link-setup-default (&optional key) + "Bind KEY to appropriate functions in appropriate keymaps." + (setq key (or key "o")) + (add-to-list 'avy-styles-alist + '(ace-link-info . at)) + (add-to-list 'avy-styles-alist + '(ace-link-help . post)) + (add-to-list 'avy-styles-alist + '(ace-link-woman . post)) + (add-to-list 'avy-styles-alist + '(ace-link-eww . post)) + (add-to-list 'avy-styles-alist + '(ace-link-compilation . post)) + (add-to-list 'avy-styles-alist + '(ace-link-gnus . post)) + (add-to-list 'avy-styles-alist + '(ace-link-org . pre)) + (add-to-list 'avy-styles-alist + '(ace-link-custom . pre)) + (add-to-list 'avy-styles-alist + '(ace-link-addr . pre)) + (eval-after-load "info" + `(define-key Info-mode-map ,key 'ace-link-info)) + (eval-after-load "compile" + `(define-key compilation-mode-map ,key 'ace-link-compilation)) + (eval-after-load "help-mode" + `(define-key help-mode-map ,key 'ace-link-help)) + (eval-after-load "woman" + `(define-key woman-mode-map ,key 'ace-link-woman)) + (eval-after-load "eww" + `(progn + (define-key eww-link-keymap ,key 'ace-link-eww) + (define-key eww-mode-map ,key 'ace-link-eww))) + (eval-after-load 'cus-edit + `(progn + (define-key custom-mode-map ,key 'ace-link-custom)))) + +(provide 'ace-link) + +;;; ace-link.el ends here diff --git a/.emacs.d/elpa/ace-link-20160912.853/ace-link.elc b/.emacs.d/elpa/ace-link-20160912.853/ace-link.elc new file mode 100644 index 0000000..904c058 Binary files /dev/null and b/.emacs.d/elpa/ace-link-20160912.853/ace-link.elc differ diff --git a/.emacs.d/elpa/ace-window-20160225.819/ace-window-autoloads.el b/.emacs.d/elpa/ace-window-20160225.819/ace-window-autoloads.el new file mode 100644 index 0000000..fd0b13c --- /dev/null +++ b/.emacs.d/elpa/ace-window-20160225.819/ace-window-autoloads.el @@ -0,0 +1,67 @@ +;;; ace-window-autoloads.el --- automatically extracted autoloads +;; +;;; Code: +(add-to-list 'load-path (or (file-name-directory #$) (car load-path))) + +;;;### (autoloads nil "ace-window" "ace-window.el" (22488 27541 839841 +;;;;;; 158000)) +;;; Generated autoloads from ace-window.el + +(autoload 'ace-select-window "ace-window" "\ +Ace select window. + +\(fn)" t nil) + +(autoload 'ace-delete-window "ace-window" "\ +Ace delete window. + +\(fn)" t nil) + +(autoload 'ace-swap-window "ace-window" "\ +Ace swap window. + +\(fn)" t nil) + +(autoload 'ace-maximize-window "ace-window" "\ +Ace maximize window. + +\(fn)" t nil) + +(autoload 'ace-window "ace-window" "\ +Select a window. +Perform an action based on ARG described below. + +By default, behaves like extended `other-window'. + +Prefixed with one \\[universal-argument], does a swap between the +selected window and the current window, so that the selected +buffer moves to current window (and current buffer moves to +selected window). + +Prefixed with two \\[universal-argument]'s, deletes the selected +window. + +\(fn ARG)" t nil) + +(defvar ace-window-display-mode nil "\ +Non-nil if Ace-Window-Display mode is enabled. +See the command `ace-window-display-mode' for a description of this minor mode. +Setting this variable directly does not take effect; +either customize it (see the info node `Easy Customization') +or call the function `ace-window-display-mode'.") + +(custom-autoload 'ace-window-display-mode "ace-window" nil) + +(autoload 'ace-window-display-mode "ace-window" "\ +Minor mode for showing the ace window key in the mode line. + +\(fn &optional ARG)" t nil) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; End: +;;; ace-window-autoloads.el ends here diff --git a/.emacs.d/elpa/ace-window-20160225.819/ace-window-pkg.el b/.emacs.d/elpa/ace-window-20160225.819/ace-window-pkg.el new file mode 100644 index 0000000..906a38c --- /dev/null +++ b/.emacs.d/elpa/ace-window-20160225.819/ace-window-pkg.el @@ -0,0 +1 @@ +(define-package "ace-window" "20160225.819" "Quickly switch windows." '((avy "0.2.0")) :url "https://github.com/abo-abo/ace-window" :keywords '("window" "location")) diff --git a/.emacs.d/elpa/ace-window-20160225.819/ace-window-pkg.elc b/.emacs.d/elpa/ace-window-20160225.819/ace-window-pkg.elc new file mode 100644 index 0000000..0b5ee55 Binary files /dev/null and b/.emacs.d/elpa/ace-window-20160225.819/ace-window-pkg.elc differ diff --git a/.emacs.d/elpa/ace-window-20160225.819/ace-window.el b/.emacs.d/elpa/ace-window-20160225.819/ace-window.el new file mode 100644 index 0000000..c8a07a0 --- /dev/null +++ b/.emacs.d/elpa/ace-window-20160225.819/ace-window.el @@ -0,0 +1,558 @@ +;;; ace-window.el --- Quickly switch windows. -*- lexical-binding: t -*- + +;; Copyright (C) 2015 Free Software Foundation, Inc. + +;; Author: Oleh Krehel +;; Maintainer: Oleh Krehel +;; URL: https://github.com/abo-abo/ace-window +;; Package-Version: 20160225.819 +;; Version: 0.9.0 +;; Package-Requires: ((avy "0.2.0")) +;; Keywords: window, location + +;; This file is part of GNU Emacs. + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This 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. + +;; For a full copy of the GNU General Public License +;; see . + +;;; Commentary: +;; +;; The main function, `ace-window' is meant to replace `other-window'. +;; In fact, when there are only two windows present, `other-window' is +;; called. If there are more, each window will have its first +;; character highlighted. Pressing that character will switch to that +;; window. +;; +;; To setup this package, just add to your .emacs: +;; +;; (global-set-key (kbd "M-p") 'ace-window) +;; +;; replacing "M-p" with an appropriate shortcut. +;; +;; Depending on your window usage patterns, you might want to set +;; +;; (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)) +;; +;; This way they are all on the home row, although the intuitive +;; ordering is lost. +;; +;; If you don't want the gray background that makes the red selection +;; characters stand out more, set this: +;; +;; (setq aw-background nil) +;; +;; If you want to know the selection characters ahead of time, you can +;; turn on `ace-window-display-mode'. +;; +;; When prefixed with one `universal-argument', instead of switching +;; to selected window, the selected window is swapped with current one. +;; +;; When prefixed with two `universal-argument', the selected window is +;; deleted instead. + +;;; Code: +(require 'avy) +(require 'ring) + +;;* Customization +(defgroup ace-window nil + "Quickly switch current window." + :group 'convenience + :prefix "aw-") + +(defcustom aw-keys '(?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9) + "Keys for selecting window.") + +(defcustom aw-scope 'global + "The scope used by `ace-window'." + :type '(choice + (const :tag "visible frames" visible) + (const :tag "global" global) + (const :tag "frame" frame))) + +(defcustom aw-ignored-buffers '("*Calc Trail*" "*LV*") + "List of buffers to ignore when selecting window." + :type '(repeat string)) + +(defcustom aw-ignore-on t + "When t, `ace-window' will ignore `aw-ignored-buffers'. +Use M-0 `ace-window' to toggle this value." + :type 'boolean) + +(defcustom aw-ignore-current nil + "When t, `ace-window' will ignore `selected-window'." + :type 'boolean) + +(defcustom aw-background t + "When t, `ace-window' will dim out all buffers temporarily when used.'." + :type 'boolean) + +(defcustom aw-leading-char-style 'char + "Style of the leading char overlay." + :type '(choice + (const :tag "single char" 'char) + (const :tag "full path" 'path))) + +(defcustom aw-dispatch-always nil + "When non-nil, `ace-window' will issue a `read-char' even for one window. +This will make `ace-window' act different from `other-window' for + one or two windows." + :type 'boolean) + +(defface aw-leading-char-face + '((((class color)) (:foreground "red")) + (((background dark)) (:foreground "gray100")) + (((background light)) (:foreground "gray0")) + (t (:foreground "gray100" :underline nil))) + "Face for each window's leading char.") + +(defface aw-background-face + '((t (:foreground "gray40"))) + "Face for whole window background during selection.") + +(defface aw-mode-line-face + '((t (:inherit mode-line-buffer-id))) + "Face used for displaying the ace window key in the mode-line.") + +;;* Implementation +(defun aw-ignored-p (window) + "Return t if WINDOW should be ignored." + (or (and aw-ignore-on + (member (buffer-name (window-buffer window)) + aw-ignored-buffers)) + (and aw-ignore-current + (equal window (selected-window))))) + +(defun aw-window-list () + "Return the list of interesting windows." + (sort + (cl-remove-if + (lambda (w) + (let ((f (window-frame w))) + (or (not (and (frame-live-p f) + (frame-visible-p f))) + (string= "initial_terminal" (terminal-name f)) + (aw-ignored-p w)))) + (cl-case aw-scope + (visible + (cl-mapcan #'window-list (visible-frame-list))) + (global + (cl-mapcan #'window-list (frame-list))) + (frame + (window-list)) + (t + (error "Invalid `aw-scope': %S" aw-scope)))) + 'aw-window<)) + +(defvar aw-overlays-back nil + "Hold overlays for when `aw-background' is t.") + +(defvar ace-window-mode nil + "Minor mode during the selection process.") + +;; register minor mode +(or (assq 'ace-window-mode minor-mode-alist) + (nconc minor-mode-alist + (list '(ace-window-mode ace-window-mode)))) + +(defvar aw-empty-buffers-list nil + "Store the read-only empty buffers which had to be modified. +Modify them back eventually.") + +(defun aw--done () + "Clean up mode line and overlays." + ;; mode line + (aw-set-mode-line nil) + ;; background + (mapc #'delete-overlay aw-overlays-back) + (setq aw-overlays-back nil) + (avy--remove-leading-chars) + (dolist (b aw-empty-buffers-list) + (with-current-buffer b + (when (string= (buffer-string) " ") + (let ((inhibit-read-only t)) + (delete-region (point-min) (point-max)))))) + (setq aw-empty-buffers-list nil)) + +(defun aw--lead-overlay (path leaf) + "Create an overlay using PATH at LEAF. +LEAF is (PT . WND)." + (let ((wnd (cdr leaf))) + (with-selected-window wnd + (when (= 0 (buffer-size)) + (push (current-buffer) aw-empty-buffers-list) + (let ((inhibit-read-only t)) + (insert " "))) + (let* ((pt (car leaf)) + (ol (make-overlay pt (1+ pt) (window-buffer wnd))) + (old-str (or + (ignore-errors + (with-selected-window wnd + (buffer-substring pt (1+ pt)))) + "")) + (new-str + (concat + (cl-case aw-leading-char-style + (char + (string (avy--key-to-char (car (last path))))) + (path + (mapconcat + (lambda (x) (string (avy--key-to-char x))) + (reverse path) + "")) + (t + (error "Bad `aw-leading-char-style': %S" + aw-leading-char-style))) + (cond ((string-equal old-str "\t") + (make-string (1- tab-width) ?\ )) + ((string-equal old-str "\n") + "\n") + (t + (make-string + (max 0 (1- (string-width old-str))) + ?\ )))))) + (overlay-put ol 'face 'aw-leading-char-face) + (overlay-put ol 'window wnd) + (overlay-put ol 'display new-str) + (push ol avy--overlays-lead))))) + +(defun aw--make-backgrounds (wnd-list) + "Create a dim background overlay for each window on WND-LIST." + (when aw-background + (setq aw-overlays-back + (mapcar (lambda (w) + (let ((ol (make-overlay + (window-start w) + (window-end w) + (window-buffer w)))) + (overlay-put ol 'face 'aw-background-face) + ol)) + wnd-list)))) + +(define-obsolete-variable-alias + 'aw-flip-keys 'aw--flip-keys "0.1.0" + "Use `aw-dispatch-alist' instead.") + +(defvar aw-dispatch-function 'aw-dispatch-default + "Function to call when a character not in `aw-keys' is pressed.") + +(defvar aw-action nil + "Function to call at the end of `aw-select'.") + +(defun aw-set-mode-line (str) + "Set mode line indicator to STR." + (setq ace-window-mode str) + (force-mode-line-update)) + +(defvar aw-dispatch-alist + '((?x aw-delete-window " Ace - Delete Window") + (?m aw-swap-window " Ace - Swap Window") + (?M aw-move-window " Ace - Move Window") + (?n aw-flip-window) + (?v aw-split-window-vert " Ace - Split Vert Window") + (?b aw-split-window-horz " Ace - Split Horz Window") + (?i delete-other-windows " Ace - Maximize Window") + (?o delete-other-windows)) + "List of actions for `aw-dispatch-default'.") + +(defun aw-dispatch-default (char) + "Perform an action depending on CHAR." + (let ((val (cdr (assoc char aw-dispatch-alist)))) + (if val + (if (and (car val) (cadr val)) + (prog1 (setq aw-action (car val)) + (aw-set-mode-line (cadr val))) + (funcall (car val)) + (throw 'done 'exit)) + (avy-handler-default char)))) + +(defun aw-select (mode-line &optional action) + "Return a selected other window. +Amend MODE-LINE to the mode line for the duration of the selection." + (setq aw-action action) + (let ((start-window (selected-window)) + (next-window-scope (cl-case aw-scope + ('visible 'visible) + ('global 'visible) + ('frame 'frame))) + (wnd-list (aw-window-list)) + window) + (setq window + (cond ((<= (length wnd-list) 1) + (when aw-dispatch-always + (setq aw-action + (unwind-protect + (catch 'done + (funcall aw-dispatch-function (read-char))) + (aw--done))) + (when (eq aw-action 'exit) + (setq aw-action nil))) + (or (car wnd-list) start-window)) + ((and (= (length wnd-list) 2) + (not aw-dispatch-always) + (not aw-ignore-current)) + (let ((wnd (next-window nil nil next-window-scope))) + (while (and (or (not (memq wnd wnd-list)) + (aw-ignored-p wnd)) + (not (equal wnd start-window))) + (setq wnd (next-window wnd nil next-window-scope))) + wnd)) + (t + (let ((candidate-list + (mapcar (lambda (wnd) + (cons (aw-offset wnd) wnd)) + wnd-list))) + (aw--make-backgrounds wnd-list) + (aw-set-mode-line mode-line) + ;; turn off helm transient map + (remove-hook 'post-command-hook 'helm--maybe-update-keymap) + (unwind-protect + (let* ((avy-handler-function aw-dispatch-function) + (avy-translate-char-function #'identity) + (res (avy-read (avy-tree candidate-list aw-keys) + #'aw--lead-overlay + #'avy--remove-leading-chars))) + (if (eq res 'exit) + (setq aw-action nil) + (or (cdr res) + start-window))) + (aw--done)))))) + (if aw-action + (funcall aw-action window) + window))) + +;;* Interactive +;;;###autoload +(defun ace-select-window () + "Ace select window." + (interactive) + (aw-select " Ace - Window" + #'aw-switch-to-window)) + +;;;###autoload +(defun ace-delete-window () + "Ace delete window." + (interactive) + (aw-select " Ace - Delete Window" + #'aw-delete-window)) + +;;;###autoload +(defun ace-swap-window () + "Ace swap window." + (interactive) + (aw-select " Ace - Swap Window" + #'aw-swap-window)) + +;;;###autoload +(defun ace-maximize-window () + "Ace maximize window." + (interactive) + (aw-select " Ace - Maximize Window" + #'delete-other-windows)) + +;;;###autoload +(defun ace-window (arg) + "Select a window. +Perform an action based on ARG described below. + +By default, behaves like extended `other-window'. + +Prefixed with one \\[universal-argument], does a swap between the +selected window and the current window, so that the selected +buffer moves to current window (and current buffer moves to +selected window). + +Prefixed with two \\[universal-argument]'s, deletes the selected +window." + (interactive "p") + (cl-case arg + (0 + (setq aw-ignore-on + (not aw-ignore-on)) + (ace-select-window)) + (4 (ace-swap-window)) + (16 (ace-delete-window)) + (t (ace-select-window)))) + +;;* Utility +(defun aw-window< (wnd1 wnd2) + "Return true if WND1 is less than WND2. +This is determined by their respective window coordinates. +Windows are numbered top down, left to right." + (let ((f1 (window-frame wnd1)) + (f2 (window-frame wnd2)) + (e1 (window-edges wnd1)) + (e2 (window-edges wnd2))) + (cond ((string< (frame-parameter f1 'window-id) + (frame-parameter f2 'window-id)) + t) + ((< (car e1) (car e2)) + t) + ((> (car e1) (car e2)) + nil) + ((< (cadr e1) (cadr e2)) + t)))) + +(defvar aw--window-ring (make-ring 10) + "Hold the window switching history.") + +(defun aw--push-window (window) + "Store WINDOW to `aw--window-ring'." + (when (or (zerop (ring-length aw--window-ring)) + (not (equal + (ring-ref aw--window-ring 0) + window))) + (ring-insert aw--window-ring (selected-window)))) + +(defun aw--pop-window () + "Return the removed top of `aw--window-ring'." + (let (res) + (condition-case nil + (while (or (not (window-live-p + (setq res (ring-remove aw--window-ring 0)))) + (equal res (selected-window)))) + (error + (if (= (length (aw-window-list)) 2) + (progn + (other-window 1) + (setq res (selected-window))) + (error "No previous windows stored")))) + res)) + +(defun aw-switch-to-window (window) + "Switch to the window WINDOW." + (let ((frame (window-frame window))) + (aw--push-window (selected-window)) + (when (and (frame-live-p frame) + (not (eq frame (selected-frame)))) + (select-frame-set-input-focus frame)) + (if (window-live-p window) + (select-window window) + (error "Got a dead window %S" window)))) + +(defun aw-flip-window () + "Switch to the window you were previously in." + (interactive) + (aw-switch-to-window (aw--pop-window))) + +(defun aw-delete-window (window) + "Delete window WINDOW." + (let ((frame (window-frame window))) + (when (and (frame-live-p frame) + (not (eq frame (selected-frame)))) + (select-frame-set-input-focus (window-frame window))) + (if (= 1 (length (window-list))) + (delete-frame frame) + (if (window-live-p window) + (delete-window window) + (error "Got a dead window %S" window))))) + +(defcustom aw-swap-invert nil + "When non-nil, the other of the two swapped windows gets the point." + :type 'boolean) + +(defun aw-swap-window (window) + "Swap buffers of current window and WINDOW." + (cl-labels ((swap-windows (window1 window2) + "Swap the buffers of WINDOW1 and WINDOW2." + (let ((buffer1 (window-buffer window1)) + (buffer2 (window-buffer window2))) + (set-window-buffer window1 buffer2) + (set-window-buffer window2 buffer1) + (select-window window2)))) + (let ((frame (window-frame window)) + (this-window (selected-window))) + (when (and (frame-live-p frame) + (not (eq frame (selected-frame)))) + (select-frame-set-input-focus (window-frame window))) + (when (and (window-live-p window) + (not (eq window this-window))) + (aw--push-window this-window) + (if aw-swap-invert + (swap-windows window this-window) + (swap-windows this-window window)))))) + +(defun aw-move-window (window) + "Move the current buffer to WINDOW. +Switch the current window to the previous buffer." + (let ((buffer (current-buffer))) + (switch-to-buffer (other-buffer)) + (aw-switch-to-window window) + (switch-to-buffer buffer))) + +(defun aw-split-window-vert (window) + "Split WINDOW vertically." + (select-window window) + (split-window-vertically)) + +(defun aw-split-window-horz (window) + "Split WINDOW horizontally." + (select-window window) + (split-window-horizontally)) + +(defun aw-offset (window) + "Return point in WINDOW that's closest to top left corner. +The point is writable, i.e. it's not part of space after newline." + (let ((h (window-hscroll window)) + (beg (window-start window)) + (end (window-end window)) + (inhibit-field-text-motion t)) + (with-current-buffer + (window-buffer window) + (save-excursion + (goto-char beg) + (while (and (< (point) end) + (< (- (line-end-position) + (line-beginning-position)) + h)) + (forward-line)) + (+ (point) h))))) + +;;* Mode line +;;;###autoload +(define-minor-mode ace-window-display-mode + "Minor mode for showing the ace window key in the mode line." + :global t + (if ace-window-display-mode + (progn + (aw-update) + (set-default + 'mode-line-format + `((ace-window-display-mode + (:eval (window-parameter (selected-window) 'ace-window-path))) + ,@(assq-delete-all + 'ace-window-display-mode + (default-value 'mode-line-format)))) + (force-mode-line-update t) + (add-hook 'window-configuration-change-hook 'aw-update)) + (set-default + 'mode-line-format + (assq-delete-all + 'ace-window-display-mode + (default-value 'mode-line-format))) + (remove-hook 'window-configuration-change-hook 'aw-update))) + +(defun aw-update () + "Update ace-window-path window parameter for all windows." + (avy-traverse + (avy-tree (aw-window-list) aw-keys) + (lambda (path leaf) + (set-window-parameter + leaf 'ace-window-path + (propertize + (apply #'string (reverse path)) + 'face 'aw-mode-line-face))))) + +(provide 'ace-window) + +;;; ace-window.el ends here diff --git a/.emacs.d/elpa/ace-window-20160225.819/ace-window.elc b/.emacs.d/elpa/ace-window-20160225.819/ace-window.elc new file mode 100644 index 0000000..f98c66a Binary files /dev/null and b/.emacs.d/elpa/ace-window-20160225.819/ace-window.elc differ diff --git a/.emacs.d/elpa/adaptive-wrap-0.5.signed b/.emacs.d/elpa/adaptive-wrap-0.5.signed new file mode 100644 index 0000000..2039cee --- /dev/null +++ b/.emacs.d/elpa/adaptive-wrap-0.5.signed @@ -0,0 +1 @@ +Good signature from 474F05837FBDEF9B GNU ELPA Signing Agent (trust undefined) created at 2014-09-24T16:20:01+0200 using DSA \ No newline at end of file diff --git a/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap-autoloads.el b/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap-autoloads.el new file mode 100644 index 0000000..657c48c --- /dev/null +++ b/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap-autoloads.el @@ -0,0 +1,22 @@ +;;; adaptive-wrap-autoloads.el --- automatically extracted autoloads +;; +;;; Code: +(add-to-list 'load-path (or (file-name-directory #$) (car load-path))) + +;;;### (autoloads nil "adaptive-wrap" "adaptive-wrap.el" (22488 27543 +;;;;;; 113841 135000)) +;;; Generated autoloads from adaptive-wrap.el + +(autoload 'adaptive-wrap-prefix-mode "adaptive-wrap" "\ +Wrap the buffer text with adaptive filling. + +\(fn &optional ARG)" t nil) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; End: +;;; adaptive-wrap-autoloads.el ends here diff --git a/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap-pkg.el b/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap-pkg.el new file mode 100644 index 0000000..8c461c7 --- /dev/null +++ b/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap-pkg.el @@ -0,0 +1 @@ +(define-package "adaptive-wrap" "0.5" "Smart line-wrapping with wrap-prefix" 'nil :url "http://elpa.gnu.org/packages/adaptive-wrap.html" :keywords nil) diff --git a/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap-pkg.elc b/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap-pkg.elc new file mode 100644 index 0000000..2f36feb Binary files /dev/null and b/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap-pkg.elc differ diff --git a/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap.el b/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap.el new file mode 100644 index 0000000..101c4df --- /dev/null +++ b/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap.el @@ -0,0 +1,174 @@ +;;; adaptive-wrap.el --- Smart line-wrapping with wrap-prefix + +;; Copyright (C) 2011-2013 Free Software Foundation, Inc. + +;; Author: Stephen Berman +;; Stefan Monnier +;; Version: 0.5 + +;; 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 package provides the `adaptive-wrap-prefix-mode' minor mode which sets +;; the wrap-prefix property on the fly so that single-long-line paragraphs get +;; word-wrapped in a way similar to what you'd get with M-q using +;; adaptive-fill-mode, but without actually changing the buffer's text. + +;;; Code: + +(require 'easymenu) + +(defcustom adaptive-wrap-extra-indent 0 + "Number of extra spaces to indent in `adaptive-wrap-prefix-mode'. + +`adaptive-wrap-prefix-mode' indents the visual lines to +the level of the actual line plus `adaptive-wrap-extra-indent'. +A negative value will do a relative de-indent. + +Examples: + +actual indent = 2 +extra indent = -1 + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. + +actual indent = 2 +extra indent = 2 + + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat." + :type 'integer + :group 'visual-line) +(make-variable-buffer-local 'adaptive-wrap-extra-indent) + +(defun adaptive-wrap-fill-context-prefix (beg en) + "Like `fill-context-prefix', but with length adjusted by `adaptive-wrap-extra-indent'." + ;; Note: fill-context-prefix may return nil; See: + ;; http://article.gmane.org/gmane.emacs.devel/156285 + (let* ((fcp (or (fill-context-prefix beg en) "")) + (fcp-len (string-width fcp)) + (fill-char (if (< 0 fcp-len) + (string-to-char (substring fcp -1)) + ?\ ))) + (cond + ((= 0 adaptive-wrap-extra-indent) + fcp) + ((< 0 adaptive-wrap-extra-indent) + (concat fcp + (make-string adaptive-wrap-extra-indent fill-char))) + ((< 0 (+ adaptive-wrap-extra-indent fcp-len)) + (substring fcp + 0 + (+ adaptive-wrap-extra-indent fcp-len))) + (t + "")))) + +(defun adaptive-wrap-prefix-function (beg end) + "Indent the region between BEG and END with adaptive filling." + (goto-char beg) + (while (< (point) end) + (let ((lbp (line-beginning-position))) + (put-text-property (point) + (progn (search-forward "\n" end 'move) (point)) + 'wrap-prefix + (adaptive-wrap-fill-context-prefix lbp (point)))))) + +;;;###autoload +(define-minor-mode adaptive-wrap-prefix-mode + "Wrap the buffer text with adaptive filling." + :lighter "" + :group 'visual-line + (if adaptive-wrap-prefix-mode + (jit-lock-register #'adaptive-wrap-prefix-function) + (jit-lock-unregister #'adaptive-wrap-prefix-function) + (with-silent-modifications + (save-restriction + (widen) + (remove-text-properties (point-min) (point-max) '(wrap-prefix nil)))))) + +(define-key-after (lookup-key menu-bar-options-menu [line-wrapping]) + [adaptive-wrap] + '(menu-item "Adaptive Wrap" adaptive-wrap-prefix-mode + :visible (menu-bar-menu-frame-live-and-visible-p) + :help "Show wrapped long lines with an adjustable prefix" + :button (:toggle . (bound-and-true-p adaptive-wrap-prefix-mode))) + word-wrap) + +;;;; ChangeLog: + +;; 2013-07-31 Stephen Berman +;; +;; * adaptive-wrap.el: Fix bug#14974 by using define-key-after +;; instead of easy-menu-add-item. +;; (adaptive-wrap-unload-function): Remove. +;; +;; 2013-07-29 Stephen Berman +;; +;; * adaptive-wrap.el: Require easymenu (bug#14974). +;; +;; 2013-07-19 R?diger Sonderfeld +;; +;; * adaptive-wrap.el (menu-bar-options-menu): Add checkbox for Adaptive Wrap +;; to the Line Wrapping submenu. +;; (adaptive-wrap-unload-function): New function. +;; +;; 2013-02-01 Stephen Berman +;; +;; Fix error during redisplay: (wrong-type-argument stringp nil) +;; +;; 2012-12-05 Stefan Monnier +;; +;; * adaptive-wrap.el (adaptive-wrap-extra-indent): Fix buffer-localness. +;; Reported by Jonathan Kotta . +;; +;; 2012-10-30 Stefan Monnier +;; +;; Clean up copyright notices. +;; +;; 2012-05-21 Jonathan Kotta (tiny change) +;; +;; Add adaptive-wrap-extra-indent. +;; * adaptive-wrap/adaptive-wrap.el (adaptive-wrap-extra-indent): New var. +;; (adaptive-wrap-fill-context-prefix): New function. +;; (adaptive-wrap-prefix-function): Use it. +;; (adaptive-wrap-prefix-mode): Add to visual-line custom group. +;; +;; 2012-01-05 Chong Yidong +;; +;; Rename adaptive-wrap-prefix to adaptive-wrap. +;; +;; The old name overflowed the column in list-packages. +;; +;; 2011-12-04 Stefan Monnier +;; +;; * adaptive-wrap-prefix.el: Improve commentary. +;; +;; 2011-12-04 Stefan Monnier +;; +;; Rename awp-mode since we're not bound to 8+3. +;; +;; 2011-11-25 Stefan Monnier +;; +;; * awp-mode: New package. +;; + + +(provide 'adaptive-wrap) +;;; adaptive-wrap.el ends here diff --git a/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap.elc b/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap.elc new file mode 100644 index 0000000..8b08512 Binary files /dev/null and b/.emacs.d/elpa/adaptive-wrap-0.5/adaptive-wrap.elc differ diff --git a/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent-autoloads.el b/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent-autoloads.el new file mode 100644 index 0000000..82844b3 --- /dev/null +++ b/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent-autoloads.el @@ -0,0 +1,63 @@ +;;; aggressive-indent-autoloads.el --- automatically extracted autoloads +;; +;;; Code: +(add-to-list 'load-path (or (file-name-directory #$) (car load-path))) + +;;;### (autoloads nil "aggressive-indent" "aggressive-indent.el" +;;;;;; (22488 27543 718841 124000)) +;;; Generated autoloads from aggressive-indent.el + +(autoload 'aggressive-indent-indent-defun "aggressive-indent" "\ +Indent current defun. +Throw an error if parentheses are unbalanced. +If L and R are provided, use them for finding the start and end of defun. + +\(fn &optional L R)" t nil) + +(autoload 'aggressive-indent-indent-region-and-on "aggressive-indent" "\ +Indent region between L and R, and then some. +Call `indent-region' between L and R, and then keep indenting +until nothing more happens. + +\(fn L R)" t nil) + +(autoload 'aggressive-indent-mode "aggressive-indent" "\ +Toggle Aggressive-Indent mode on or off. +With a prefix argument ARG, enable Aggressive-Indent mode if ARG is +positive, and disable it otherwise. If called from Lisp, enable +the mode if ARG is omitted or nil, and toggle it if ARG is `toggle'. +\\{aggressive-indent-mode-map} + +\(fn &optional ARG)" t nil) + +(defvar global-aggressive-indent-mode nil "\ +Non-nil if Global-Aggressive-Indent mode is enabled. +See the command `global-aggressive-indent-mode' for a description of this minor mode. +Setting this variable directly does not take effect; +either customize it (see the info node `Easy Customization') +or call the function `global-aggressive-indent-mode'.") + +(custom-autoload 'global-aggressive-indent-mode "aggressive-indent" nil) + +(autoload 'global-aggressive-indent-mode "aggressive-indent" "\ +Toggle Aggressive-Indent mode in all buffers. +With prefix ARG, enable Global-Aggressive-Indent mode if ARG is positive; +otherwise, disable it. If called from Lisp, enable the mode if +ARG is omitted or nil. + +Aggressive-Indent mode is enabled in all buffers where +`aggressive-indent-mode' would do it. +See `aggressive-indent-mode' for more information on Aggressive-Indent mode. + +\(fn &optional ARG)" t nil) + +(defalias 'aggressive-indent-global-mode #'global-aggressive-indent-mode) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; End: +;;; aggressive-indent-autoloads.el ends here diff --git a/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent-pkg.el b/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent-pkg.el new file mode 100644 index 0000000..2bdc3e5 --- /dev/null +++ b/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent-pkg.el @@ -0,0 +1 @@ +(define-package "aggressive-indent" "20160608.1625" "Minor mode to aggressively keep your code always indented" '((emacs "24.1") (cl-lib "0.5")) :url "https://github.com/Malabarba/aggressive-indent-mode" :keywords '("indent" "lisp" "maint" "tools")) diff --git a/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent-pkg.elc b/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent-pkg.elc new file mode 100644 index 0000000..19e47f2 Binary files /dev/null and b/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent-pkg.elc differ diff --git a/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent.el b/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent.el new file mode 100644 index 0000000..ed0d461 --- /dev/null +++ b/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent.el @@ -0,0 +1,437 @@ +;;; aggressive-indent.el --- Minor mode to aggressively keep your code always indented + +;; Copyright (C) 2014 Free Software Foundation, Inc. + +;; Author: Artur Malabarba +;; URL: https://github.com/Malabarba/aggressive-indent-mode +;; Package-Version: 20160608.1625 +;; Version: 1.8.1 +;; Package-Requires: ((emacs "24.1") (cl-lib "0.5")) +;; Keywords: indent lisp maint tools +;; Prefix: aggressive-indent +;; Separator: - + +;;; Commentary: +;; +;; `electric-indent-mode' is enough to keep your code nicely aligned when +;; all you do is type. However, once you start shifting blocks around, +;; transposing lines, or slurping and barfing sexps, indentation is bound +;; to go wrong. +;; +;; `aggressive-indent-mode' is a minor mode that keeps your code always +;; indented. It reindents after every change, making it more reliable +;; than `electric-indent-mode'. +;; +;; ### Instructions ### +;; +;; This package is available fom Melpa, you may install it by calling +;; +;; M-x package-install RET aggressive-indent +;; +;; Then activate it with +;; +;; (add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode) +;; (add-hook 'css-mode-hook #'aggressive-indent-mode) +;; +;; You can use this hook on any mode you want, `aggressive-indent' is not +;; exclusive to emacs-lisp code. In fact, if you want to turn it on for +;; every programming mode, you can do something like: +;; +;; (global-aggressive-indent-mode 1) +;; (add-to-list 'aggressive-indent-excluded-modes 'html-mode) +;; +;; ### Manual Installation ### +;; +;; If you don't want to install from Melpa, you can download it manually, +;; place it in your `load-path' and require it with +;; +;; (require 'aggressive-indent) + +;;; Instructions: +;; +;; INSTALLATION +;; +;; This package is available fom Melpa, you may install it by calling +;; M-x package-install RET aggressive-indent. +;; +;; Then activate it with +;; (add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode) +;; +;; You can also use an equivalent hook for another mode, +;; `aggressive-indent' is not exclusive to emacs-lisp code. +;; +;; Alternatively, you can download it manually, place it in your +;; `load-path' and require it with +;; +;; (require 'aggressive-indent) + +;;; License: +;; +;; 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 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. +;; + +;;; Code: + +(require 'cl-lib) + +(defgroup aggressive-indent nil + "Customization group for aggressive-indent." + :prefix "aggressive-indent-" + :group 'electricity + :group 'indent) + +(defun aggressive-indent-bug-report () + "Opens github issues page in a web browser. Please send any bugs you find. +Please include your Emacs and `aggressive-indent' versions." + (interactive) + (message "Your `aggressive-indent-version' is: %s, and your emacs version is: %s. +Please include this in your report!" + (eval-when-compile + (ignore-errors + (require 'lisp-mnt) + (lm-version))) + emacs-version) + (browse-url "https://github.com/Malabarba/aggressive-indent-mode/issues/new")) + +(defvar aggressive-indent-mode) + +;;; Configuring indentarion +(defcustom aggressive-indent-dont-electric-modes nil + "List of major-modes where `electric-indent' should be disabled." + :type '(choice + (const :tag "Never use `electric-indent-mode'." t) + (repeat :tag "List of major-modes to avoid `electric-indent-mode'." symbol)) + :package-version '(aggressive-indent . "0.3.1")) + +(defcustom aggressive-indent-excluded-modes + '( + bibtex-mode + cider-repl-mode + coffee-mode + comint-mode + conf-mode + Custom-mode + diff-mode + doc-view-mode + dos-mode + erc-mode + jabber-chat-mode + haml-mode + haskell-mode + haskell-interactive-mode + image-mode + inf-ruby-mode + makefile-mode + makefile-gmake-mode + minibuffer-inactive-mode + netcmd-mode + python-mode + sass-mode + scala-mode + slim-mode + special-mode + shell-mode + snippet-mode + eshell-mode + tabulated-list-mode + term-mode + TeX-output-mode + text-mode + yaml-mode + ) + "Modes in which `aggressive-indent-mode' should not be activated. +This variable is only used if `global-aggressive-indent-mode' is +active. If the minor mode is turned on with the local command, +`aggressive-indent-mode', this variable is ignored." + :type '(repeat symbol) + :package-version '(aggressive-indent . "0.3.1")) + +(defcustom aggressive-indent-protected-commands '(undo undo-tree-undo undo-tree-redo whitespace-cleanup) + "Commands after which indentation will NOT be performed. +Aggressive indentation could break things like `undo' by locking +the user in a loop, so this variable is used to control which +commands will NOT be followed by a re-indent." + :type '(repeat symbol) + :package-version '(aggressive-indent . "0.1")) + +(defcustom aggressive-indent-comments-too nil + "If non-nil, aggressively indent in comments as well." + :type 'boolean + :package-version '(aggressive-indent . "0.3")) + +(defcustom aggressive-indent-modes-to-prefer-defun + '(emacs-lisp-mode lisp-mode scheme-mode clojure-mode) + "List of major-modes in which indenting defun is preferred. +Add here any major modes with very good definitions of +`end-of-defun' and `beginning-of-defun', or modes which bug out +if you have `after-change-functions' (such as paredit). + +If current major mode is derived from one of these, +`aggressive-indent' will call `aggressive-indent-indent-defun' +after every command. Otherwise, it will call +`aggressive-indent-indent-region-and-on' after every buffer +change." + :type '(repeat symbol) + :package-version '(aggressive-indent . "0.3")) + +;;; Preventing indentation +(defvar aggressive-indent--internal-dont-indent-if + '((memq this-command aggressive-indent-protected-commands) + (region-active-p) + buffer-read-only + undo-in-progress + (null (buffer-modified-p)) + (and (boundp 'smerge-mode) smerge-mode) + (let ((line (thing-at-point 'line))) + (and (stringp line) + ;; If the user is starting to type a comment. + (stringp comment-start) + (string-match (concat "\\`[[:blank:]]*" + (substring comment-start 0 1) + "[[:blank:]]*$") + line))) + (let ((sp (syntax-ppss))) + ;; Comments. + (or (and (not aggressive-indent-comments-too) (elt sp 4)) + ;; Strings. + (elt sp 3)))) + "List of forms which prevent indentation when they evaluate to non-nil. +This is for internal use only. For user customization, use +`aggressive-indent-dont-indent-if' instead.") + +(eval-after-load 'yasnippet + '(when (boundp 'yas--active-field-overlay) + (add-to-list 'aggressive-indent--internal-dont-indent-if + '(and + (overlayp yas--active-field-overlay) + (overlay-end yas--active-field-overlay)) + 'append))) +(eval-after-load 'company + '(when (boundp 'company-candidates) + (add-to-list 'aggressive-indent--internal-dont-indent-if + 'company-candidates))) +(eval-after-load 'auto-complete + '(when (boundp 'ac-completing) + (add-to-list 'aggressive-indent--internal-dont-indent-if + 'ac-completing))) +(eval-after-load 'multiple-cursors-core + '(when (boundp 'multiple-cursors-mode) + (add-to-list 'aggressive-indent--internal-dont-indent-if + 'multiple-cursors-mode))) +(eval-after-load 'iedit + '(when (boundp 'iedit-mode) + (add-to-list 'aggressive-indent--internal-dont-indent-if + 'iedit-mode))) +(eval-after-load 'evil + '(when (boundp 'iedit-mode) + (add-to-list 'aggressive-indent--internal-dont-indent-if + 'iedit-mode))) +(eval-after-load 'coq + '(add-to-list 'aggressive-indent--internal-dont-indent-if + '(and (derived-mode-p 'coq-mode) + (not (string-match "\\.[[:space:]]*$" + (thing-at-point 'line)))))) + +(defcustom aggressive-indent-dont-indent-if '() + "List of variables and functions to prevent aggressive indenting. +This variable is a list where each element is a Lisp form. +As long as any one of these forms returns non-nil, +aggressive-indent will not perform any indentation. + +See `aggressive-indent--internal-dont-indent-if' for usage examples." + :type '(repeat sexp) + :package-version '(aggressive-indent . "0.2")) + +(defvar aggressive-indent--error-message "One of the forms in `aggressive-indent-dont-indent-if' had the following error, I've disabled it until you fix it: %S" + "Error message thrown by `aggressive-indent-dont-indent-if'.") + +(defvar aggressive-indent--has-errored nil + "Keep track of whether `aggressive-indent-dont-indent-if' is throwing. +This is used to prevent an infinite error loop on the user.") + +(defun aggressive-indent--run-user-hooks () + "Safely run forms in `aggressive-indent-dont-indent-if'. +If any of them errors out, we only report it once until it stops +erroring again." + (and aggressive-indent-dont-indent-if + (condition-case er + (prog1 (eval (cons 'or aggressive-indent-dont-indent-if)) + (setq aggressive-indent--has-errored nil)) + (error (unless aggressive-indent--has-errored + (setq aggressive-indent--has-errored t) + (message aggressive-indent--error-message er)))))) + +;;; Indenting defun +;;;###autoload +(defun aggressive-indent-indent-defun (&optional l r) + "Indent current defun. +Throw an error if parentheses are unbalanced. +If L and R are provided, use them for finding the start and end of defun." + (interactive) + (let ((p (point-marker))) + (set-marker-insertion-type p t) + (indent-region + (save-excursion + (when l (goto-char l)) + (beginning-of-defun 1) (point)) + (save-excursion + (when r (goto-char r)) + (end-of-defun 1) (point))) + (goto-char p))) + +(defun aggressive-indent--softly-indent-defun (&optional l r) + "Indent current defun unobstrusively. +Like `aggressive-indent-indent-defun', but without errors or +messages. L and R passed to `aggressive-indent-indent-defun'." + (cl-letf (((symbol-function 'message) #'ignore)) + (ignore-errors (aggressive-indent-indent-defun l r)))) + +;;; Indenting region +;;;###autoload +(defun aggressive-indent-indent-region-and-on (l r) + "Indent region between L and R, and then some. +Call `indent-region' between L and R, and then keep indenting +until nothing more happens." + (interactive "r") + (let ((p (point-marker)) + was-begining-of-line) + (set-marker-insertion-type p t) + (unwind-protect + (progn + (unless (= l r) + (when (= (char-before r) ?\n) + (cl-decf r))) + ;; If L is at the end of a line, skip that line. + (unless (= l r) + (when (= (char-after l) ?\n) + (cl-incf l))) + ;; Indent the affected region. + (goto-char r) + (unless (= l r) (indent-region l r)) + ;; And then we indent each following line until nothing happens. + (forward-line 1) + (skip-chars-forward "[:blank:]\n\r\xc") + (let* ((eod (ignore-errors + (save-excursion (end-of-defun) + (point-marker)))) + (point-limit (if (and eod (< (point) eod)) + eod (point-max-marker)))) + (while (and (null (eobp)) + (let ((op (point)) + (np (progn (indent-according-to-mode) + (point)))) + ;; As long as we're indenting things to the + ;; left, keep indenting. + (or (< np op) + ;; If we're indenting to the right, or + ;; not at all, stop at the limit. + (< (point) point-limit)))) + (forward-line 1) + (skip-chars-forward "[:blank:]\n\r\f")))) + (goto-char p)))) + +(defun aggressive-indent--softly-indent-region-and-on (l r &rest _) + "Indent region between L and R, and a bit more. +Like `aggressive-indent-indent-region-and-on', but without errors +or messages." + (cl-letf (((symbol-function 'message) #'ignore)) + (ignore-errors (aggressive-indent-indent-region-and-on l r)))) + +;;; Tracking changes +(defvar aggressive-indent--changed-list nil + "List of (left right) limit of regions changed in the last command loop.") +(make-variable-buffer-local 'aggressive-indent--changed-list) + +(defun aggressive-indent--proccess-changed-list-and-indent () + "Indent the regions in `aggressive-indent--changed-list'." + (let ((inhibit-modification-hooks t) + (inhibit-point-motion-hooks t) + (indent-function + (if (cl-member-if #'derived-mode-p aggressive-indent-modes-to-prefer-defun) + #'aggressive-indent--softly-indent-defun #'aggressive-indent--softly-indent-region-and-on))) + ;; Take the 10 most recent changes. + (let ((cell (nthcdr 10 aggressive-indent--changed-list))) + (when cell (setcdr cell nil))) + ;; (message "----------") + (while aggressive-indent--changed-list + ;; (message "%S" (car aggressive-indent--changed-list)) + (apply indent-function (car aggressive-indent--changed-list)) + (setq aggressive-indent--changed-list + (cdr aggressive-indent--changed-list))))) + +(defun aggressive-indent--indent-if-changed () + "Indent any region that changed in the last command loop." + (when aggressive-indent--changed-list + (save-excursion + (save-selected-window + (unless (or (run-hook-wrapped 'aggressive-indent--internal-dont-indent-if #'eval) + (aggressive-indent--run-user-hooks)) + (while-no-input + (redisplay) + (aggressive-indent--proccess-changed-list-and-indent))))))) + +(defun aggressive-indent--keep-track-of-changes (l r &rest _) + "Store the limits (L and R) of each change in the buffer." + (when aggressive-indent-mode + (push (list l r) aggressive-indent--changed-list))) + +;;; Minor modes +;;;###autoload +(define-minor-mode aggressive-indent-mode + nil nil " =>" + `((,(kbd "C-c C-q") . aggressive-indent-indent-defun) + ([backspace] + menu-item "maybe-delete-indentation" ignore :filter + (lambda (&optional _) + (when (and (looking-back "^[[:blank:]]+") + ;; Wherever we don't want to indent, we probably also + ;; want the default backspace behavior. + (not (run-hook-wrapped 'aggressive-indent--internal-dont-indent-if #'eval)) + (not (aggressive-indent--run-user-hooks))) + #'delete-indentation)))) + (if aggressive-indent-mode + (if (and global-aggressive-indent-mode + (or (cl-member-if #'derived-mode-p aggressive-indent-excluded-modes) + (memq major-mode '(text-mode fundamental-mode)) + buffer-read-only)) + (aggressive-indent-mode -1) + ;; Should electric indent be ON or OFF? + (if (or (eq aggressive-indent-dont-electric-modes t) + (cl-member-if #'derived-mode-p aggressive-indent-dont-electric-modes)) + (aggressive-indent--local-electric nil) + (aggressive-indent--local-electric t)) + (add-hook 'after-change-functions #'aggressive-indent--keep-track-of-changes nil 'local) + (add-hook 'before-save-hook #'aggressive-indent--proccess-changed-list-and-indent nil 'local) + (add-hook 'post-command-hook #'aggressive-indent--indent-if-changed nil 'local)) + ;; Clean the hooks + (remove-hook 'after-change-functions #'aggressive-indent--keep-track-of-changes 'local) + (remove-hook 'before-save-hook #'aggressive-indent--proccess-changed-list-and-indent 'local) + (remove-hook 'post-command-hook #'aggressive-indent--indent-if-changed 'local) + (remove-hook 'post-command-hook #'aggressive-indent--softly-indent-defun 'local))) + +(defun aggressive-indent--local-electric (on) + "Turn variable `electric-indent-mode' on or off locally, as per boolean ON." + (if (fboundp 'electric-indent-local-mode) + (electric-indent-local-mode (if on 1 -1)) + (set (make-local-variable 'electric-indent-mode) on))) + +;;;###autoload +(define-globalized-minor-mode global-aggressive-indent-mode + aggressive-indent-mode aggressive-indent-mode) + +;;;###autoload +(defalias 'aggressive-indent-global-mode + #'global-aggressive-indent-mode) + +(provide 'aggressive-indent) +;;; aggressive-indent.el ends here diff --git a/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent.elc b/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent.elc new file mode 100644 index 0000000..a03483e Binary files /dev/null and b/.emacs.d/elpa/aggressive-indent-20160608.1625/aggressive-indent.elc differ diff --git a/.emacs.d/elpa/anzu-20160818.619/anzu-autoloads.el b/.emacs.d/elpa/anzu-20160818.619/anzu-autoloads.el new file mode 100644 index 0000000..8d1d5a3 --- /dev/null +++ b/.emacs.d/elpa/anzu-20160818.619/anzu-autoloads.el @@ -0,0 +1,77 @@ +;;; anzu-autoloads.el --- automatically extracted autoloads +;; +;;; Code: +(add-to-list 'load-path (or (file-name-directory #$) (car load-path))) + +;;;### (autoloads nil "anzu" "anzu.el" (22488 27551 595840 983000)) +;;; Generated autoloads from anzu.el + +(autoload 'anzu-mode "anzu" "\ +minor-mode which display search information in mode-line. + +\(fn &optional ARG)" t nil) + +(defvar global-anzu-mode nil "\ +Non-nil if Global-Anzu mode is enabled. +See the command `global-anzu-mode' for a description of this minor mode. +Setting this variable directly does not take effect; +either customize it (see the info node `Easy Customization') +or call the function `global-anzu-mode'.") + +(custom-autoload 'global-anzu-mode "anzu" nil) + +(autoload 'global-anzu-mode "anzu" "\ +Toggle Anzu mode in all buffers. +With prefix ARG, enable Global-Anzu mode if ARG is positive; +otherwise, disable it. If called from Lisp, enable the mode if +ARG is omitted or nil. + +Anzu mode is enabled in all buffers where +`anzu--turn-on' would do it. +See `anzu-mode' for more information on Anzu mode. + +\(fn &optional ARG)" t nil) + +(autoload 'anzu-query-replace-at-cursor "anzu" "\ + + +\(fn)" t nil) + +(autoload 'anzu-query-replace-at-cursor-thing "anzu" "\ + + +\(fn)" t nil) + +(autoload 'anzu-query-replace "anzu" "\ + + +\(fn ARG)" t nil) + +(autoload 'anzu-query-replace-regexp "anzu" "\ + + +\(fn ARG)" t nil) + +(autoload 'anzu-replace-at-cursor-thing "anzu" "\ + + +\(fn)" t nil) + +(autoload 'anzu-isearch-query-replace "anzu" "\ + + +\(fn ARG)" t nil) + +(autoload 'anzu-isearch-query-replace-regexp "anzu" "\ + + +\(fn ARG)" t nil) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; End: +;;; anzu-autoloads.el ends here diff --git a/.emacs.d/elpa/anzu-20160818.619/anzu-pkg.el b/.emacs.d/elpa/anzu-20160818.619/anzu-pkg.el new file mode 100644 index 0000000..527e319 --- /dev/null +++ b/.emacs.d/elpa/anzu-20160818.619/anzu-pkg.el @@ -0,0 +1 @@ +(define-package "anzu" "20160818.619" "Show number of matches in mode-line while searching" '((cl-lib "0.5") (emacs "24")) :url "https://github.com/syohex/emacs-anzu") diff --git a/.emacs.d/elpa/anzu-20160818.619/anzu-pkg.elc b/.emacs.d/elpa/anzu-20160818.619/anzu-pkg.elc new file mode 100644 index 0000000..fd3232f Binary files /dev/null and b/.emacs.d/elpa/anzu-20160818.619/anzu-pkg.elc differ diff --git a/.emacs.d/elpa/anzu-20160818.619/anzu.el b/.emacs.d/elpa/anzu-20160818.619/anzu.el new file mode 100644 index 0000000..6b1a051 --- /dev/null +++ b/.emacs.d/elpa/anzu-20160818.619/anzu.el @@ -0,0 +1,852 @@ +;;; anzu.el --- Show number of matches in mode-line while searching -*- lexical-binding: t; -*- + +;; Copyright (C) 2016 by Syohei YOSHIDA + +;; Author: Syohei YOSHIDA +;; URL: https://github.com/syohex/emacs-anzu +;; Package-Version: 20160818.619 +;; Version: 0.62 +;; Package-Requires: ((cl-lib "0.5") (emacs "24")) + +;; 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: + +;; `anzu.el' is an Emacs port of `anzu.vim'. +;; +;; `anzu.el' provides a minor mode which displays 'current match/total +;; matches' in the mode-line in various search modes. This makes it +;; easy to understand how many matches there are in the current buffer +;; for your search query. + +;; To use this package, add following code to your init.el or .emacs +;; +;; (global-anzu-mode +1) +;; + +;;; Code: + +(require 'cl-lib) +(require 'thingatpt) + +(declare-function migemo-forward 'migemo) + +(defgroup anzu nil + "Show searched position in mode-line" + :group 'isearch) + +(defcustom anzu-mode-lighter " Anzu" + "Lighter of anzu-mode" + :type 'string) + +(defcustom anzu-cons-mode-line-p t + "Set nil if you use your own mode-line setting" + :type 'boolean) + +(defcustom anzu-minimum-input-length 1 + "Minimum input length to enable anzu" + :type 'integer) + +(defcustom anzu-search-threshold nil + "Limit of search number" + :type '(choice (integer :tag "Threshold of search") + (const :tag "No threshold" nil))) + +(defcustom anzu-replace-threshold nil + "Limit of replacement overlays." + :type '(choice (integer :tag "Threshold of replacement overlays") + (const :tag "No threshold" nil))) + +(defcustom anzu-use-migemo nil + "Flag of using migemo" + :type 'boolean) + +(defcustom anzu-mode-line-update-function #'anzu--update-mode-line-default + "Function which return mode-line string. This must be non-nil." + :type 'function) + +(defcustom anzu-regexp-search-commands '(isearch-forward-regexp + isearch-backward-regexp) + "Search function which use regexp." + :type '(repeat function)) + +(defcustom anzu-input-idle-delay 0.05 + "Idle second for updating modeline at replace commands" + :type 'number) + +(defcustom anzu-deactivate-region nil + "Deactive region if you use anzu a replace command with region" + :type 'boolean) + +(defcustom anzu-replace-at-cursor-thing 'defun + "Replace thing. This parameter is same as `thing-at-point'" + :type 'symbol) + +(defcustom anzu-replace-to-string-separator "" + "Separator of `to' string" + :type 'string) + +(defface anzu-mode-line + '((t (:foreground "magenta" :weight bold))) + "face of anzu modeline") + +(defface anzu-replace-highlight + '((t :inherit query-replace)) + "highlight of replaced string") + +(defface anzu-match-1 + '((((class color) (background light)) + :background "aquamarine" :foreground "black") + (((class color) (background dark)) + :background "limegreen" :foreground "black") + (t :inverse-video t)) + "First group of match.") + +(defface anzu-match-2 + '((((class color) (background light)) + :background "springgreen" :foreground "black") + (((class color) (background dark)) + :background "yellow" :foreground "black") + (t :inverse-video t)) + "Second group of match.") + +(defface anzu-match-3 + '((((class color) (background light)) + :background "yellow" :foreground "black") + (((class color) (background dark)) + :background "aquamarine" :foreground "black") + (t :inverse-video t)) + "Third group of match.") + +(defface anzu-replace-to + '((((class color) (background light)) + :foreground "red") + (((class color) (background dark)) + :foreground "yellow")) + "highlight of replace string") + +(defvar anzu--total-matched 0) +(defvar anzu--current-position 0) +(defvar anzu--overflow-p nil) +(defvar anzu--last-isearch-string nil) +(defvar anzu--cached-positions nil) +(defvar anzu--last-command nil) +(defvar anzu--state nil) +(defvar anzu--cached-count 0) +(defvar anzu--last-replace-input "") +(defvar anzu--last-search-state nil) +(defvar anzu--last-replaced-count nil) +(defvar anzu--outside-point nil) +(defvar anzu--history nil) +(defvar anzu--query-defaults nil) + +(defun anzu--validate-regexp (regexp) + (condition-case nil + (progn + (string-match-p regexp "") + t) + (invalid-regexp nil))) + +(defsubst anzu--construct-position-info (count overflow positions) + (list :count count :overflow overflow :positions positions)) + +(defsubst anzu--case-fold-search (input) + (when case-fold-search + (let ((case-fold-search nil)) + (not (string-match-p "[A-Z]" input))))) + +(defsubst anzu--word-search-p () + (and (not (memq anzu--last-command anzu-regexp-search-commands)) + (not isearch-regexp))) + +(defsubst anzu--isearch-regexp-function () + (or (bound-and-true-p isearch-regexp-function) + (bound-and-true-p isearch-word))) + +(defun anzu--transform-input (str) + (cond ((eq (anzu--isearch-regexp-function) 'isearch-symbol-regexp) + (setq str (isearch-symbol-regexp str))) + ((anzu--word-search-p) + (setq str (regexp-quote str))) + (t str))) + +(defsubst anzu--use-migemo-p () + (when anzu-use-migemo + (unless (featurep 'migemo) + (error "Error: migemo is not loaded")) + (bound-and-true-p migemo-isearch-enable-p))) + +(defun anzu--search-all-position (str) + (unless anzu--last-command + (setq anzu--last-command last-command)) + (let ((input (anzu--transform-input str))) + (if (not (anzu--validate-regexp input)) + anzu--cached-positions + (save-excursion + (goto-char (point-min)) + (let ((positions '()) + (count 0) + (overflow nil) + (finish nil) + (search-func (if (anzu--use-migemo-p) + (lambda (word &optional bound noerror count) + (ignore-errors + (migemo-forward word bound noerror count))) + #'re-search-forward)) + (case-fold-search (anzu--case-fold-search input))) + (while (and (not finish) (funcall search-func input nil t)) + (push (cons (match-beginning 0) (match-end 0)) positions) + (cl-incf count) + (when (= (match-beginning 0) (match-end 0)) ;; Case of anchor such as "^" + (if (eobp) + (setq finish t) + (forward-char 1))) + (when (and anzu-search-threshold (>= count anzu-search-threshold)) + (setq overflow t finish t))) + (let ((result (anzu--construct-position-info count overflow (reverse positions)))) + (setq anzu--cached-positions (copy-sequence result)) + result)))))) + +(defun anzu--where-is-here (positions here) + (cl-loop for (start . end) in positions + for i = 1 then (1+ i) + when (and (>= here start) (<= here end)) + return i + finally return 0)) + +(defun anzu--use-result-cache-p (input) + (and (eq (anzu--isearch-regexp-function) (car anzu--last-search-state)) + (eq isearch-regexp (cdr anzu--last-search-state)) + (string= input anzu--last-isearch-string))) + +(defun anzu--update (query) + (when (>= (length query) anzu-minimum-input-length) + (let ((result (if (anzu--use-result-cache-p query) + anzu--cached-positions + (anzu--search-all-position query)))) + (let ((curpos (anzu--where-is-here (plist-get result :positions) (point)))) + (setq anzu--total-matched (plist-get result :count) + anzu--overflow-p (plist-get result :overflow) + anzu--current-position curpos + anzu--last-search-state (cons (anzu--isearch-regexp-function) isearch-regexp) + anzu--last-isearch-string query) + (force-mode-line-update))))) + +(defun anzu--update-post-hook () + (anzu--update isearch-string)) + +(defconst anzu--mode-line-format '(:eval (anzu--update-mode-line))) + +(defsubst anzu--mode-line-not-set-p () + (and (listp mode-line-format) + (member anzu--mode-line-format mode-line-format))) + +(defun anzu--cons-mode-line-search () + (anzu--cons-mode-line 'search)) + +(defun anzu--cons-mode-line (state) + (setq anzu--state state) + (when (and anzu-cons-mode-line-p (not (anzu--mode-line-not-set-p))) + (setq mode-line-format (cons anzu--mode-line-format mode-line-format)))) + +(defsubst anzu--reset-status () + (setq anzu--total-matched 0 + anzu--current-position 0 + anzu--state nil + anzu--last-command nil + anzu--last-isearch-string nil + anzu--overflow-p nil)) + +(defun anzu--reset-mode-line () + (anzu--reset-status) + (when (and anzu-cons-mode-line-p (anzu--mode-line-not-set-p)) + (setq mode-line-format (delete anzu--mode-line-format mode-line-format)))) + +(defsubst anzu--format-here-position (here total) + (if (and anzu--overflow-p (zerop here)) + (format "%d+" total) + here)) + +(defun anzu--update-mode-line-default (here total) + (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))))) + (propertize status 'face 'anzu-mode-line)))) + +(defun anzu--update-mode-line () + (funcall anzu-mode-line-update-function anzu--current-position anzu--total-matched)) + +;;;###autoload +(define-minor-mode anzu-mode + "minor-mode which display search information in mode-line." + :init-value nil + :global nil + :lighter anzu-mode-lighter + (if anzu-mode + (progn + (set (make-local-variable 'anzu--state) nil) + (add-hook 'isearch-update-post-hook #'anzu--update-post-hook nil t) + (add-hook 'isearch-mode-hook #'anzu--cons-mode-line-search nil t) + (add-hook 'isearch-mode-end-hook #'anzu--reset-mode-line nil t)) + (remove-hook 'isearch-update-post-hook #'anzu--update-post-hook t) + (remove-hook 'isearch-mode-hook #'anzu--cons-mode-line-search t) + (remove-hook 'isearch-mode-end-hook #'anzu--reset-mode-line t) + (anzu--reset-mode-line))) + +(defun anzu--turn-on () + (unless (minibufferp) + (anzu-mode +1))) + +;;;###autoload +(define-globalized-minor-mode global-anzu-mode anzu-mode anzu--turn-on) + +(defsubst anzu--query-prompt-base (use-region use-regexp) + (concat "Query replace" + (if current-prefix-arg " word" "") + (if use-regexp " regexp" "") + (if use-region " in region" "")) ) + +(defun anzu--query-prompt (use-region use-regexp at-cursor isearch-p) + (let ((prompt (anzu--query-prompt-base use-region use-regexp))) + (if (and anzu--query-defaults (not at-cursor) (not isearch-p)) + (format "%s (default %s -> %s) " + prompt + (query-replace-descr (caar anzu--query-defaults)) + (query-replace-descr (cdar anzu--query-defaults))) + prompt))) + +(defvar anzu--replaced-markers nil) +(defsubst anzu--set-marker (beg buf) + (let ((m (make-marker))) + (set-marker m beg buf) + (push m anzu--replaced-markers))) + +(defun anzu--make-overlay (begin end face prio) + (let ((ov (make-overlay begin end))) + (overlay-put ov 'face face) + (overlay-put ov 'priority prio) + (overlay-put ov 'anzu-overlay t) + ov)) + +(defun anzu--add-match-group-overlay (match-data groups) + (when (>= groups 3) + (anzu--make-overlay (cl-fifth match-data) (cl-sixth match-data) + 'anzu-match-3 1001)) + (when (>= groups 2) + (anzu--make-overlay (cl-third match-data) (cl-fourth match-data) + 'anzu-match-2 1001)) + (anzu--make-overlay (cl-first match-data) (cl-second match-data) + 'anzu-match-1 1001)) + +(defun anzu--add-overlay (beg end) + (let* ((match-data (match-data)) + (groups (/ (- (length match-data) 2) 2))) + (when (>= groups 1) + (anzu--add-match-group-overlay (cddr match-data) groups)) + (let ((ov (anzu--make-overlay beg end 'anzu-replace-highlight 1000))) + (overlay-put ov 'from-string (buffer-substring-no-properties beg end)) + (overlay-put ov 'anzu-replace t)))) + +(defsubst anzu--cleanup-markers () + (mapc (lambda (m) (set-marker m nil)) anzu--replaced-markers) + (setq anzu--replaced-markers nil)) + +;; Return highlighted count +(defun anzu--count-and-highlight-matched (buf str replace-beg replace-end + use-regexp overlay-limit case-sensitive) + (anzu--cleanup-markers) + (when (not use-regexp) + (setq str (regexp-quote str))) + (if (not (anzu--validate-regexp str)) + anzu--cached-count + (with-current-buffer buf + (save-excursion + (let* ((overlay-beg replace-beg) + (overlay-end (min replace-end overlay-limit))) + (goto-char overlay-beg) + (let ((count 0) + (overlayed 0) + (finish nil) + (case-fold-search (if case-sensitive + nil + (anzu--case-fold-search str)))) + (while (and (not finish) (re-search-forward str replace-end t)) + (cl-incf count) + (let ((beg (match-beginning 0)) + (end (match-end 0))) + (when (= beg end) + (if (eobp) + (setq finish t) + (forward-char 1))) + (when (and replace-end (> (point) replace-end)) + (setq finish t)) + (when (and (>= beg overlay-beg) (<= end overlay-end) (not finish)) + (cl-incf overlayed) + (anzu--add-overlay beg end)))) + (setq anzu--cached-count count) + overlayed)))))) + +(defun anzu--search-outside-visible (buf input beg end use-regexp) + (let ((searchfn (if use-regexp #'re-search-forward #'search-forward))) + (when (or (not use-regexp) (anzu--validate-regexp input)) + (with-selected-window (get-buffer-window buf) + (goto-char beg) + (when (funcall searchfn input end t) + (setq anzu--outside-point (match-beginning 0)) + (let ((overlay-limit (anzu--overlay-limit))) + (anzu--count-and-highlight-matched buf input beg end use-regexp + overlay-limit nil))))))) + +(defconst anzu--from-to-separator + (propertize + (or (ignore-errors + (if (char-displayable-p ?\u2192) " \u2192 " " -> ")) + " -> ") + 'face 'minibuffer-prompt)) + +(defsubst anzu--separator () + (propertize "\0" 'display anzu--from-to-separator 'separator t)) + +(defun anzu--check-minibuffer-input (buf beg end use-regexp overlay-limit) + (let* ((content (minibuffer-contents)) + (to (when (and (string-match (anzu--separator) content) + (get-text-property (match-beginning 0) 'separator content)) + (substring-no-properties content (match-end 0)))) + (from (or (and to (substring-no-properties content 0 (match-beginning 0))) + content)) + (empty-p (string= from "")) + (overlayed (if empty-p + (setq anzu--cached-count 0) + (anzu--count-and-highlight-matched buf from beg end use-regexp + overlay-limit nil)))) + (when anzu--outside-point + (setq anzu--outside-point nil) + (with-selected-window (get-buffer-window buf) + (goto-char beg))) + (when (and (not empty-p) (zerop overlayed)) + (anzu--search-outside-visible buf from beg end use-regexp)) + (when to + (setq anzu--last-replace-input "") + (anzu--append-replaced-string to buf beg end use-regexp overlay-limit from)) + (setq anzu--total-matched anzu--cached-count) + (force-mode-line-update))) + +(defun anzu--clear-overlays (buf beg end) + (with-current-buffer buf + (dolist (ov (overlays-in (or beg (point-min)) (or end (point-max)))) + (when (overlay-get ov 'anzu-overlay) + (delete-overlay ov))))) + +(defun anzu--transform-from-to-history () + (let ((separator (anzu--separator))) + (append (mapcar (lambda (from-to) + (concat (query-replace-descr (car from-to)) + separator + (query-replace-descr (cdr from-to)))) + anzu--query-defaults) + (symbol-value query-replace-from-history-variable)))) + +(defun anzu--read-from-string (prompt beg end use-regexp overlay-limit) + (let ((curbuf (current-buffer)) + (blink-matching-paren nil) + (anzu--history (anzu--transform-from-to-history)) + timer is-input) + (unwind-protect + (minibuffer-with-setup-hook + #'(lambda () + (setq timer (run-with-idle-timer + (max anzu-input-idle-delay 0.01) + 'repeat + (lambda () + (anzu--clear-overlays curbuf nil nil) + (with-selected-window (or (active-minibuffer-window) + (minibuffer-window)) + (anzu--check-minibuffer-input + curbuf beg end use-regexp overlay-limit)))))) + (prog1 (read-from-minibuffer (format "%s: " prompt) + nil nil nil 'anzu--history nil t) + (setq is-input t))) + (when timer + (cancel-timer timer) + (setq timer nil) + (unless is-input + (goto-char beg)))))) + +(defun anzu--query-validate-from-regexp (from) + (when (string-match "\\(?:\\`\\|[^\\]\\)\\(?:\\\\\\\\\\)*\\(\\\\[nt]\\)" from) + (let ((match (match-string 1 from))) + (cond + ((string= match "\\n") + (message "`\\n' here doesn't match a newline; type C-q C-j instead!!")) + ((string= match "\\t") + (message "\\t' here doesn't match a tab; to do that, just type TAB!!"))) + (sit-for 2)))) + +(defun anzu--query-from-string (prompt beg end use-regexp overlay-limit) + (let* ((from (anzu--read-from-string prompt beg end use-regexp overlay-limit)) + (is-empty (string= from ""))) + (when (and (not is-empty) (not anzu--query-defaults)) + (setq anzu--last-replaced-count anzu--total-matched)) + (if (and is-empty anzu--query-defaults) + (cons (query-replace-descr (caar anzu--query-defaults)) + (query-replace-compile-replacement + (query-replace-descr (cdar anzu--query-defaults)) use-regexp)) + (add-to-history query-replace-from-history-variable from nil t) + (when use-regexp + (unless (anzu--validate-regexp from) + (error "'%s' is invalid regexp." from)) + (anzu--query-validate-from-regexp from)) + from))) + +(defun anzu--compile-replace-text (str) + (let ((compiled (ignore-errors + (query-replace-compile-replacement str t)))) + (when compiled + (cond ((stringp compiled) compiled) + ((and (consp compiled) (functionp (car compiled))) + compiled) + ((and (consp compiled) (stringp (car compiled))) + (car compiled)))))) + +(defun anzu--evaluate-occurrence (ov to-regexp replacements fixed-case from-regexp) + (let ((from-string (overlay-get ov 'from-string)) + (compiled (anzu--compile-replace-text to-regexp))) + (if (not compiled) + "" + (with-temp-buffer + (insert from-string) + (goto-char (point-min)) + (when (re-search-forward from-regexp nil t) + (or (ignore-errors + (if (consp compiled) + (replace-match (funcall (car compiled) (cdr compiled) + replacements) fixed-case) + (replace-match compiled fixed-case)) + (buffer-substring (point-min) (point-max))) + "")))))) + +(defun anzu--overlay-sort (a b) + (< (overlay-start a) (overlay-start b))) + +(defsubst anzu--overlays-in-range (beg end) + (cl-loop for ov in (overlays-in beg end) + when (overlay-get ov 'anzu-replace) + collect ov into anzu-overlays + finally + return + (let ((sorted (sort anzu-overlays 'anzu--overlay-sort))) + (if anzu-replace-threshold + (cl-subseq sorted 0 (min (length sorted) anzu-replace-threshold)) + sorted)))) + +(defsubst anzu--propertize-to-string (str) + (let ((separator (or anzu-replace-to-string-separator ""))) + (propertize (concat separator str) 'face 'anzu-replace-to))) + +(defsubst anzu--replaced-literal-string (ov replaced from) + (let ((str (buffer-substring-no-properties + (overlay-start ov) (overlay-end ov)))) + (when (string-match (regexp-quote str) from) + (replace-match replaced (not case-fold-search) t str)))) + +(defun anzu--append-replaced-string (content buf beg end use-regexp overlay-limit from) + (let ((replacements 0)) + (unless (string= content anzu--last-replace-input) + (setq anzu--last-replace-input content) + (with-current-buffer buf + (let ((case-fold-search (anzu--case-fold-search from))) + (dolist (ov (anzu--overlays-in-range beg (min end overlay-limit))) + (let ((replace-evaled + (if (not use-regexp) + (anzu--replaced-literal-string ov content from) + (prog1 (anzu--evaluate-occurrence ov content replacements + (not case-fold-search) from) + (cl-incf replacements))))) + (overlay-put ov 'after-string (anzu--propertize-to-string replace-evaled))))))))) + +(defsubst anzu--outside-overlay-limit (orig-beg orig-limit) + (save-excursion + (goto-char (+ anzu--outside-point (- orig-limit orig-beg))) + (line-end-position))) + +(defun anzu--read-to-string (from prompt beg end use-regexp overlay-limit) + (let ((curbuf (current-buffer)) + (orig-beg beg) + (to-prompt (format "%s %s with: " prompt (query-replace-descr from))) + (history-add-new-input nil) + (blink-matching-paren nil) + timer is-input) + (setq anzu--last-replace-input "") + (when anzu--outside-point + (setq beg anzu--outside-point + overlay-limit (anzu--outside-overlay-limit orig-beg overlay-limit) + anzu--outside-point nil)) + (unwind-protect + (minibuffer-with-setup-hook + #'(lambda () + (setq timer (run-with-idle-timer + (max anzu-input-idle-delay 0.01) + 'repeat + (lambda () + (with-selected-window (or (active-minibuffer-window) + (minibuffer-window)) + (anzu--append-replaced-string + (minibuffer-contents) + curbuf beg end use-regexp overlay-limit from)))))) + (prog1 (read-from-minibuffer to-prompt + nil nil nil + query-replace-from-history-variable nil t) + (setq is-input t))) + (when timer + (cancel-timer timer) + (setq timer nil) + (unless is-input + (goto-char orig-beg)))))) + +(defun anzu--query-replace-read-to (from prompt beg end use-regexp overlay-limit) + (query-replace-compile-replacement + (let ((to (anzu--read-to-string from prompt beg end use-regexp overlay-limit))) + (add-to-history query-replace-to-history-variable to nil t) + (add-to-history 'anzu--query-defaults (cons from to) nil t) + to) + use-regexp)) + +(defun anzu--overlay-limit () + (save-excursion + (move-to-window-line -1) + (forward-line 1) + (point))) + +(defun anzu--query-from-at-cursor (buf beg end overlay-limit) + (let ((symbol (thing-at-point 'symbol))) + (unless symbol + (error "No symbol at cursor!!")) + (let ((symbol-regexp (concat "\\_<" (regexp-quote symbol) "\\_>"))) + (anzu--count-and-highlight-matched buf symbol-regexp beg end t overlay-limit t) + (setq anzu--total-matched anzu--cached-count) + (force-mode-line-update) + symbol-regexp))) + +(defun anzu--query-from-isearch-string (buf beg end use-regexp overlay-limit) + (anzu--count-and-highlight-matched buf isearch-string beg end use-regexp overlay-limit t) + (setq anzu--total-matched anzu--cached-count) + (force-mode-line-update) + (add-to-history query-replace-from-history-variable isearch-string nil t) + isearch-string) + +(defun anzu--thing-begin (thing) + (let ((bound (bounds-of-thing-at-point thing))) + (if bound + (car bound) + (let ((fallback-bound (bounds-of-thing-at-point 'symbol))) + (if fallback-bound + (car fallback-bound) + (point)))))) + +(defsubst anzu--thing-end (thing) + (let ((bound (bounds-of-thing-at-point thing))) + (if bound + (cdr bound) + (point-max)))) + +(defun anzu--region-begin (use-region thing backward) + (cond (use-region (region-beginning)) + (current-prefix-arg (line-beginning-position)) + (thing (anzu--thing-begin thing)) + (backward (point-min)) + (t (point)))) + +(defsubst anzu--line-end-position (num) + (save-excursion + (forward-line (1- num)) + (line-end-position))) + +(defun anzu--region-end (use-region thing) + (cond (use-region (region-end)) + (current-prefix-arg + (anzu--line-end-position (prefix-numeric-value current-prefix-arg))) + (thing (anzu--thing-end thing)) + (t (point-max)))) + +(defun anzu--begin-thing (at-cursor thing) + (cond ((and at-cursor thing) thing) + ((and at-cursor (not thing)) 'symbol) + (t nil))) + +(defun anzu--replace-backward-p (prefix) + ;; This variable is introduced at Emacs 24.4, I should fix this variable to + ;; version variable + (and (boundp 'list-matching-lines-prefix-face) + (and prefix (< prefix 0)))) + +(defun anzu--construct-perform-replace-arguments (from to delimited beg end backward query) + (if backward + (list from to query t delimited nil nil beg end backward) + (list from to query t delimited nil nil beg end))) + +(defun anzu--construct-query-replace-arguments (from to delimited beg end backward) + (if backward + (list from to delimited beg end backward) + (list from to delimited beg end))) + +(defsubst anzu--current-replaced-index (curpoint) + (cl-loop for m in anzu--replaced-markers + for i = 1 then (1+ i) + for pos = (marker-position m) + when (= pos curpoint) + return i)) + +(defadvice replace-highlight (before anzu-replace-highlight activate) + (when (and (eq anzu--state 'replace) anzu--replaced-markers) + (let ((index (anzu--current-replaced-index (ad-get-arg 0)))) + (when (or (not index) (/= index anzu--current-position)) + (force-mode-line-update) + (setq anzu--current-position (or index 1)))))) + +(defun anzu--set-replaced-markers (from beg end use-regexp) + (save-excursion + (goto-char beg) + (cl-loop with curbuf = (current-buffer) + with search-func = (if use-regexp #'re-search-forward #'search-forward) + while (funcall search-func from end t) + do + (progn + (anzu--set-marker (match-beginning 0) curbuf) + (when (= (match-beginning 0) (match-end 0)) + (if (eobp) + (cl-return nil) + (forward-char 1))) + (when (and end (> (point) end)) + (cl-return nil)))))) + +(cl-defun anzu--query-replace-common (use-regexp + &key at-cursor thing prefix-arg (query t) isearch-p) + (anzu--cons-mode-line 'replace-query) + (let* ((use-region (use-region-p)) + (orig-point (point)) + (backward (anzu--replace-backward-p prefix-arg)) + (overlay-limit (anzu--overlay-limit)) + (beg (anzu--region-begin use-region (anzu--begin-thing at-cursor thing) backward)) + (end (anzu--region-end use-region thing)) + (prompt (anzu--query-prompt use-region use-regexp at-cursor isearch-p)) + (delimited (and current-prefix-arg (not (eq current-prefix-arg '-)))) + (curbuf (current-buffer)) + (clear-overlay nil)) + (when (and anzu-deactivate-region use-region) + (deactivate-mark t)) + (unwind-protect + (let* ((from (cond ((and at-cursor beg) + (setq delimited nil) + (anzu--query-from-at-cursor curbuf beg end overlay-limit)) + (isearch-p + (anzu--query-from-isearch-string + curbuf beg end use-regexp overlay-limit)) + (t (anzu--query-from-string + prompt beg end use-regexp overlay-limit)))) + (to (cond ((consp from) + (prog1 (cdr from) + (setq from (car from) + anzu--total-matched anzu--last-replaced-count))) + ((string-match "\0" from) + (prog1 (substring-no-properties from (match-end 0)) + (setq from (substring-no-properties from 0 (match-beginning 0))))) + (t + (anzu--query-replace-read-to + from prompt beg end use-regexp overlay-limit))))) + (anzu--clear-overlays curbuf beg end) + (anzu--set-replaced-markers from beg end use-regexp) + (setq anzu--state 'replace anzu--current-position 0 + anzu--replaced-markers (reverse anzu--replaced-markers) + clear-overlay t) + (let ((case-fold-search (and case-fold-search (not at-cursor)))) + (if use-regexp + (apply #'perform-replace (anzu--construct-perform-replace-arguments + from to delimited beg end backward query)) + (apply #'query-replace (anzu--construct-query-replace-arguments + from to delimited beg end backward))))) + (progn + (unless clear-overlay + (anzu--clear-overlays curbuf beg end)) + (when (zerop anzu--current-position) + (goto-char orig-point)) + (anzu--cleanup-markers) + (anzu--reset-mode-line) + (force-mode-line-update))))) + +;;;###autoload +(defun anzu-query-replace-at-cursor () + (interactive) + (anzu--query-replace-common t :at-cursor t)) + +;;;###autoload +(defun anzu-query-replace-at-cursor-thing () + (interactive) + (anzu--query-replace-common t :at-cursor t :thing anzu-replace-at-cursor-thing)) + +;;;###autoload +(defun anzu-query-replace (arg) + (interactive "p") + (anzu--query-replace-common nil :prefix-arg arg)) + +;;;###autoload +(defun anzu-query-replace-regexp (arg) + (interactive "p") + (anzu--query-replace-common t :prefix-arg arg)) + +;;;###autoload +(defun anzu-replace-at-cursor-thing () + (interactive) + (let ((orig (point-marker))) + (anzu--query-replace-common t + :at-cursor t + :thing anzu-replace-at-cursor-thing + :query nil) + (goto-char (marker-position orig)) + (set-marker orig nil))) + +(defun anzu--isearch-query-replace-common (use-regexp arg) + (isearch-done nil t) + (isearch-clean-overlays) + (let ((isearch-recursive-edit nil) + (backward (< (prefix-numeric-value arg) 0))) + (when (and isearch-other-end + (if backward + (> isearch-other-end (point)) + (< isearch-other-end (point))) + (not (and transient-mark-mode mark-active + (if backward + (> (mark) (point)) + (< (mark) (point)))))) + (goto-char isearch-other-end)) + (anzu--query-replace-common use-regexp :prefix-arg arg :isearch-p t))) + +;;;###autoload +(defun anzu-isearch-query-replace (arg) + (interactive "p") + (anzu--isearch-query-replace-common nil arg)) + +;;;###autoload +(defun anzu-isearch-query-replace-regexp (arg) + (interactive "p") + (anzu--isearch-query-replace-common t arg)) + +(provide 'anzu) +;; Local Variables: +;; indent-tabs-mode: nil +;; End: +;;; anzu.el ends here diff --git a/.emacs.d/elpa/anzu-20160818.619/anzu.elc b/.emacs.d/elpa/anzu-20160818.619/anzu.elc new file mode 100644 index 0000000..f1a210c Binary files /dev/null and b/.emacs.d/elpa/anzu-20160818.619/anzu.elc differ diff --git a/.emacs.d/elpa/archives/gnu/archive-contents b/.emacs.d/elpa/archives/gnu/archive-contents new file mode 100644 index 0000000..5679cc6 --- /dev/null +++ b/.emacs.d/elpa/archives/gnu/archive-contents @@ -0,0 +1,983 @@ +(1 + (ace-window . + [(0 9 0) + ((avy + (0 2 0))) + "Quickly switch windows." single + ((:url . "https://github.com/abo-abo/ace-window") + (:keywords "window" "location"))]) + (ack . + [(1 5) + nil "interface to ack-like tools" tar + ((:keywords "tools" "processes" "convenience") + (:url . "https://github.com/leoliu/ack-el"))]) + (ada-mode . + [(5 2 0) + ((wisi + (1 1 3)) + (cl-lib + (0 4)) + (emacs + (24 2))) + "major-mode for editing Ada sources" tar + ((:keywords "languages" "ada") + (:url . "http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html"))]) + (ada-ref-man . + [(2012 0) + nil "Ada Reference Manual 2012" tar + ((:keywords "languages" "ada") + (:url . "http://stephe-leake.org/ada/arm.html"))]) + (adaptive-wrap . + [(0 5) + nil "Smart line-wrapping with wrap-prefix" single + ((:url . "http://elpa.gnu.org/packages/adaptive-wrap.html") + (:keywords))]) + (adjust-parens . + [(3 0) + nil "Indent and dedent Lisp code, automatically adjust close parens" tar + ((:url . "http://elpa.gnu.org/packages/adjust-parens.html"))]) + (aggressive-indent . + [(1 8 1) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "Minor mode to aggressively keep your code always indented" single + ((:url . "https://github.com/Malabarba/aggressive-indent-mode") + (:keywords "indent" "lisp" "maint" "tools"))]) + (ahungry-theme . + [(1 3 0) + ((emacs + (24))) + "Ahungry color theme for Emacs. Make sure to (load-theme 'ahungry)." tar + ((:keywords "ahungry" "palette" "color" "theme" "emacs" "color-theme" "deftheme") + (:url . "https://github.com/ahungry/color-theme-ahungry"))]) + (all . + [(1 0) + nil "Edit all lines matching a given regexp" single + ((:url . "http://elpa.gnu.org/packages/all.html") + (:keywords "matching"))]) + (ampc . + [(0 2) + nil "Asynchronous Music Player Controller" single + ((:url . "http://elpa.gnu.org/packages/ampc.html") + (:keywords "ampc" "mpc" "mpd"))]) + (arbitools . + [(0 71) + ((cl-lib + (0 5))) + "Package for chess tournaments administration" single + ((:url . "http://elpa.gnu.org/packages/arbitools.html") + (:keywords))]) + (ascii-art-to-unicode . + [(1 9) + nil "a small artist adjunct" single + ((:url . "http://www.gnuvola.org/software/aa2u/") + (:keywords "ascii" "unicode" "box-drawing"))]) + (async . + [(1 9) + nil "Asynchronous processing in Emacs" tar + ((:keywords "async") + (:url . "http://elpa.gnu.org/packages/async.html"))]) + (auctex . + [(11 89 5) + nil "Integrated environment for *TeX*" tar + ((:url . "http://www.gnu.org/software/auctex/"))]) + (aumix-mode . + [(7) + nil "run the aumix program in a buffer" single + ((:url . "http://user42.tuxfamily.org/aumix-mode/index.html") + (:keywords "multimedia" "mixer" "aumix"))]) + (auto-overlays . + [(0 10 9) + nil "Automatic regexp-delimited overlays" tar + ((:keywords "extensions") + (:url . "http://www.dr-qubit.org/emacs.php"))]) + (avy . + [(0 4 0) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "tree-based completion" tar + ((:keywords "point" "location") + (:url . "https://github.com/abo-abo/avy"))]) + (beacon . + [(1 3 1) + ((seq + (2 14))) + "Highlight the cursor whenever the window scrolls" single + ((:url . "https://github.com/Malabarba/beacon") + (:keywords "convenience"))]) + (bug-hunter . + [(1 3 1) + ((seq + (1 3)) + (cl-lib + (0 5))) + "Hunt down errors by bisecting elisp files" single + ((:url . "https://github.com/Malabarba/elisp-bug-hunter") + (:keywords "lisp"))]) + (caps-lock . + [(1 0) + nil "Caps-lock as a minor mode" single + ((:url . "http://elpa.gnu.org/packages/caps-lock.html") + (:keywords))]) + (chess . + [(2 0 4) + ((cl-lib + (0 5))) + "Play chess in GNU Emacs" tar + ((:keywords "games") + (:url . "http://elpa.gnu.org/packages/chess.html"))]) + (cl-generic . + [(0 3) + nil "Forward cl-generic compatibility for Emacs<25" single + ((:url . "http://elpa.gnu.org/packages/cl-generic.html") + (:keywords))]) + (cl-lib . + [(0 5) + nil "Properly prefixed CL functions and macros" single + ((:url . "http://elpa.gnu.org/packages/cl-lib.html") + (:keywords))]) + (coffee-mode . + [(0 4 1 1) + nil "Major mode for CoffeeScript files" single + ((:url . "http://github.com/defunkt/coffee-mode") + (:keywords "coffeescript" "major" "mode"))]) + (compact-docstrings . + [(0 1) + nil "Shrink blank lines in docstrings and doc comments" single + ((:url . "https://github.com/cpitclaudel/compact-docstrings") + (:keywords "convenience" "faces" "lisp" "maint" "c"))]) + (company . + [(0 9 0) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "Modular text completion framework" tar + ((:keywords "abbrev" "convenience" "matching") + (:url . "http://company-mode.github.io/"))]) + (company-math . + [(1 1) + ((company + (0 8 0)) + (math-symbol-lists + (1 0))) + "Completion backends for unicode math symbols and latex tags" tar + ((:keywords "unicode" "symbols" "completion") + (:url . "https://github.com/vspinu/company-math"))]) + (company-statistics . + [(0 2 2) + ((emacs + (24 3)) + (company + (0 8 5))) + "Sort candidates using completion history" tar + ((:keywords "abbrev" "convenience" "matching") + (:url . "https://github.com/company-mode/company-statistics"))]) + (context-coloring . + [(8 0 1) + ((emacs + (24 3))) + "Highlight by scope" tar + ((:keywords "convenience" "faces" "tools") + (:url . "https://github.com/jacksonrayhamilton/context-coloring"))]) + (crisp . + [(1 3 4) + nil "CRiSP/Brief Emacs emulator" single + ((:url . "http://elpa.gnu.org/packages/crisp.html") + (:keywords "emulations" "brief" "crisp"))]) + (csv-mode . + [(1 6) + nil "Major mode for editing comma/char separated values" single + ((:url . "http://elpa.gnu.org/packages/csv-mode.html") + (:keywords "convenience"))]) + (cycle-quotes . + [(0 1) + nil "Cycle between quote styles" tar + ((:keywords "convenience") + (:url . "http://elpa.gnu.org/packages/cycle-quotes.html"))]) + (darkroom . + [(0 1) + ((cl-lib + (0 5))) + "Remove visual distractions and focus on writing" single + ((:url . "http://elpa.gnu.org/packages/darkroom.html") + (:keywords "convenience" "emulations"))]) + (dash . + [(2 12 0) + nil "A modern list library for Emacs" tar + ((:keywords "lists") + (:url . "http://elpa.gnu.org/packages/dash.html"))]) + (dbus-codegen . + [(0 1) + ((cl-lib + (0 5))) + "Lisp code generation for D-Bus." single + ((:url . "http://elpa.gnu.org/packages/dbus-codegen.html") + (:keywords "comm" "dbus" "convenience"))]) + (debbugs . + [(0 10) + ((soap-client + (3 1 1)) + (cl-lib + (0 5))) + "SOAP library to access debbugs servers" tar + ((:keywords "comm" "hypermedia") + (:url . "http://elpa.gnu.org/packages/debbugs.html"))]) + (delight . + [(1 5) + nil "A dimmer switch for your lighter text." single + ((:url . "https://savannah.nongnu.org/projects/delight") + (:keywords "convenience"))]) + (dict-tree . + [(0 12 8) + ((trie + (0 2 5)) + (tNFA + (0 1 1)) + (heap + (0 3))) + "Dictionary data structure" single + ((:url . "http://www.dr-qubit.org/emacs.php") + (:keywords "extensions" "matching" "data structures trie" "tree" "dictionary" "completion" "regexp"))]) + (diff-hl . + [(1 8 4) + ((cl-lib + (0 2))) + "Highlight uncommitted changes using VC" tar + ((:keywords "vc" "diff") + (:url . "https://github.com/dgutov/diff-hl"))]) + (diffview . + [(1 0) + nil "View diffs in side-by-side format" single + ((:url . "https://github.com/mgalgs/diffview-mode") + (:keywords "convenience" "diff"))]) + (dismal . + [(1 5) + ((cl-lib + (0))) + "Dis Mode Ain't Lotus: Spreadsheet program Emacs" tar + ((:url . "http://elpa.gnu.org/packages/dismal.html"))]) + (djvu . + [(0 5) + nil "Edit and view Djvu files via djvused" single + ((:url . "http://elpa.gnu.org/packages/djvu.html") + (:keywords "files" "wp"))]) + (docbook . + [(0 1) + nil "Info-like viewer for DocBook" single + ((:url . "http://elpa.gnu.org/packages/docbook.html") + (:keywords "docs" "help"))]) + (dts-mode . + [(0 1 0) + nil "Major mode for Device Tree source files" single + ((:url . "http://elpa.gnu.org/packages/dts-mode.html") + (:keywords "languages"))]) + (easy-kill . + [(0 9 3) + ((emacs + (24)) + (cl-lib + (0 5))) + "kill & mark things easily" tar + ((:keywords "killing" "convenience") + (:url . "https://github.com/leoliu/easy-kill"))]) + (ediprolog . + [(1 1) + nil "Emacs Does Interactive Prolog" single + ((:url . "http://elpa.gnu.org/packages/ediprolog.html") + (:keywords "languages" "processes"))]) + (el-search . + [(0 2 3) + ((emacs + (25))) + "Expression based incremental search for emacs-lisp-mode" tar + ((:keywords "lisp") + (:url . "http://elpa.gnu.org/packages/el-search.html"))]) + (eldoc-eval . + [(0 1) + nil "Enable eldoc support when minibuffer is in use." single + ((:url . "http://elpa.gnu.org/packages/eldoc-eval.html") + (:keywords))]) + (electric-spacing . + [(5 0) + nil "Insert operators with surrounding spaces smartly" single + ((:url . "http://elpa.gnu.org/packages/electric-spacing.html") + (:keywords))]) + (enwc . + [(1 0) + nil "The Emacs Network Client" tar + ((:keywords "enwc" "network" "wicd" "manager" "nm") + (:url . "http://elpa.gnu.org/packages/enwc.html"))]) + (epoch-view . + [(0 0 1) + nil "Minor mode to visualize epoch timestamps" single + ((:url . "http://elpa.gnu.org/packages/epoch-view.html") + (:keywords "data" "timestamp" "epoch" "unix"))]) + (ergoemacs-mode . + [(5 14 7 3) + ((emacs + (24 1)) + (undo-tree + (0 6 5))) + "Emacs mode based on common modern interface and ergonomics." tar + ((:keywords "convenience") + (:url . "https://github.com/ergoemacs/ergoemacs-mode"))]) + (excorporate . + [(0 7 5) + ((emacs + (24 1)) + (fsm + (0 2)) + (soap-client + (3 1 1)) + (url-http-ntlm + (2 0 2))) + "Exchange integration" tar + ((:keywords "calendar") + (:url . "http://elpa.gnu.org/packages/excorporate.html"))]) + (exwm . + [(0 10) + ((xelb + (0 11))) + "Emacs X Window Manager" tar + ((:keywords "unix") + (:url . "https://github.com/ch11ng/exwm"))]) + (f90-interface-browser . + [(1 1) + nil "Parse and browse f90 interfaces" single + ((:url . "http://github.com/wence-/f90-iface/") + (:keywords))]) + (flylisp . + [(0 2) + ((emacs + (24 1)) + (cl-lib + (0 4))) + "Color unbalanced parentheses and parentheses inconsistent with indentation" single + ((:url . "http://elpa.gnu.org/packages/flylisp.html") + (:keywords))]) + (fsm . + [(0 2 1) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "state machine library" single + ((:url . "http://elpa.gnu.org/packages/fsm.html") + (:keywords "extensions"))]) + (ggtags . + [(0 8 11) + ((emacs + (24)) + (cl-lib + (0 5))) + "emacs frontend to GNU Global source code tagging system" single + ((:url . "https://github.com/leoliu/ggtags") + (:keywords "tools" "convenience"))]) + (gnome-c-style . + [(0 1) + nil "minor mode for editing GNOME-style C source code" tar + ((:keywords "gnome" "c" "coding style") + (:url . "http://elpa.gnu.org/packages/gnome-c-style.html"))]) + (gnorb . + [(1 1 2) + ((cl-lib + (0 5))) + "Glue code between Gnus, Org, and BBDB" tar + ((:keywords "mail" "org" "gnus" "bbdb" "todo" "task") + (:url . "https://github.com/girzel/gnorb"))]) + (gnugo . + [(3 0 0) + ((ascii-art-to-unicode + (1 5)) + (xpm + (1 0 1)) + (cl-lib + (0 5))) + "play GNU Go in a buffer" tar + ((:keywords "games" "processes") + (:url . "http://www.gnuvola.org/software/gnugo/"))]) + (heap . + [(0 3) + nil "Heap (a.k.a. priority queue) data structure" single + ((:url . "http://www.dr-qubit.org/emacs.php") + (:keywords "extensions" "data structures" "heap" "priority queue"))]) + (html5-schema . + [(0 1) + nil "Add HTML5 schemas for use by nXML" tar + ((:keywords "html" "xml") + (:url . "https://github.com/validator/validator"))]) + (hydra . + [(0 13 5) + ((cl-lib + (0 5))) + "Make bindings that stick around." tar + ((:keywords "bindings") + (:url . "https://github.com/abo-abo/hydra"))]) + (hyperbole . + [(6 0 2) + ((emacs + (24 4))) + "GNU Hyperbole: The Everyday Hypertextual Information Manager" tar + ((:keywords "comm" "convenience" "files" "frames" "hypermedia" "languages" "mail" "matching" "mouse" "multimedia" "outlines" "tools" "wp") + (:url . "http://www.gnu.org/software/hyperbole"))]) + (ioccur . + [(2 4) + nil "Incremental occur" single + ((:url . "http://elpa.gnu.org/packages/ioccur.html") + (:keywords))]) + (iterators . + [(0 1) + ((emacs + (25))) + "Functions for working with iterators" single + ((:url . "http://elpa.gnu.org/packages/iterators.html") + (:keywords "extensions" "elisp"))]) + (ivy . + [(0 8 0) + ((emacs + (24 1))) + "Incremental Vertical completYon" tar + ((:keywords "matching") + (:url . "https://github.com/abo-abo/swiper"))]) + (javaimp . + [(0 6) + nil "Add and reorder Java import statements in Maven projects" tar + ((:keywords "java" "maven" "programming") + (:url . "http://elpa.gnu.org/packages/javaimp.html"))]) + (jgraph-mode . + [(1 1) + ((cl-lib + (0 5))) + "Major mode for Jgraph files" single + ((:url . "http://elpa.gnu.org/packages/jgraph-mode.html") + (:keywords "tex" "wp"))]) + (js2-mode . + [(20160623) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "Improved JavaScript editing mode" tar + ((:keywords "languages" "javascript") + (:url . "https://github.com/mooz/js2-mode/"))]) + (jumpc . + [(3 0) + nil "jump to previous insertion points" single + ((:url . "http://elpa.gnu.org/packages/jumpc.html") + (:keywords))]) + (landmark . + [(1 0) + nil "Neural-network robot that learns landmarks" single + ((:url . "http://elpa.gnu.org/packages/landmark.html") + (:keywords "games" "neural network" "adaptive search" "chemotaxis"))]) + (let-alist . + [(1 0 4) + ((emacs + (24 1))) + "Easily let-bind values of an assoc-list by their names" single + ((:url . "http://elpa.gnu.org/packages/let-alist.html") + (:keywords "extensions" "lisp"))]) + (lex . + [(1 1) + nil "Lexical analyser construction" tar + ((:url . "http://elpa.gnu.org/packages/lex.html"))]) + (lmc . + [(1 4) + nil "Little Man Computer in Elisp" single + ((:url . "http://elpa.gnu.org/packages/lmc.html") + (:keywords))]) + (load-dir . + [(0 0 3) + nil "Load all Emacs Lisp files in a given directory" single + ((:url . "http://elpa.gnu.org/packages/load-dir.html") + (:keywords "lisp" "files" "convenience"))]) + (load-relative . + [(1 2) + nil "relative file load (within a multi-file Emacs package)" single + ((:url . "http://github.com/rocky/emacs-load-relative") + (:keywords "internal"))]) + (loc-changes . + [(1 2) + nil "keep track of positions even after buffer changes" single + ((:url . "http://github.com/rocky/emacs-loc-changes") + (:keywords))]) + (loccur . + [(1 2 2) + ((cl-lib + (0))) + "Perform an occur-like folding in current buffer" single + ((:url . "https://github.com/fourier/loccur") + (:keywords "matching"))]) + (markchars . + [(0 2 0) + nil "Mark chars fitting certain characteristics" single + ((:url . "http://elpa.gnu.org/packages/markchars.html") + (:keywords))]) + (math-symbol-lists . + [(1 1) + nil "Lists of Unicode math symbols and latex commands" tar + ((:keywords "unicode" "symbols" "mathematics") + (:url . "https://github.com/vspinu/math-symbol-lists"))]) + (memory-usage . + [(0 2) + nil "Analyze the memory usage of Emacs in various ways" single + ((:url . "http://elpa.gnu.org/packages/memory-usage.html") + (:keywords "maint"))]) + (metar . + [(0 2) + ((cl-lib + (0 5))) + "Retrieve and decode METAR weather information" single + ((:url . "http://elpa.gnu.org/packages/metar.html") + (:keywords "comm"))]) + (midi-kbd . + [(0 2) + ((emacs + (25))) + "Create keyboard events from Midi input" single + ((:url . "http://elpa.gnu.org/packages/midi-kbd.html") + (:keywords "convenience" "hardware" "multimedia"))]) + (minibuffer-line . + [(0 1) + nil "Display status info in the minibuffer window" single + ((:url . "http://elpa.gnu.org/packages/minibuffer-line.html") + (:keywords))]) + (minimap . + [(1 2) + nil "Sidebar showing a \"mini-map\" of a buffer" single + ((:url . "http://elpa.gnu.org/packages/minimap.html") + (:keywords))]) + (multishell . + [(1 1 5) + nil "Easily use multiple shell buffers, local and remote." tar + ((:keywords "processes") + (:url . "https://github.com/kenmanheimer/EmacsMultishell"))]) + (muse . + [(3 20) + nil "Authoring and publishing tool for Emacs" tar + ((:keywords "hypermedia") + (:url . "http://mwolson.org/projects/EmacsMuse.html"))]) + (myers . + [(0 1) + ((emacs + (25))) + "Random-access singly-linked lists" single + ((:url . "http://elpa.gnu.org/packages/myers.html") + (:keywords "list" "containers"))]) + (nameless . + [(1 0 1) + ((emacs + (24 4))) + "Hide package namespace in your emacs-lisp code" single + ((:url . "https://github.com/Malabarba/nameless") + (:keywords "convenience" "lisp"))]) + (names . + [(20151201 0) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "Namespaces for emacs-lisp. Avoid name clobbering without hiding symbols." tar + ((:keywords "extensions" "lisp") + (:url . "https://github.com/Malabarba/names"))]) + (nhexl-mode . + [(0 2) + ((emacs + (24)) + (cl-lib + (0 5))) + "Minor mode to edit files via hex-dump format" single + ((:url . "http://elpa.gnu.org/packages/nhexl-mode.html") + (:keywords "data"))]) + (nlinum . + [(1 6) + nil "Show line numbers in the margin" single + ((:url . "http://elpa.gnu.org/packages/nlinum.html") + (:keywords "convenience"))]) + (notes-mode . + [(1 30) + nil "Indexing system for on-line note-taking" tar + ((:url . "http://elpa.gnu.org/packages/notes-mode.html"))]) + (ntlm . + [(2 0 0) + nil "NTLM (NT LanManager) authentication support" single + ((:url . "http://elpa.gnu.org/packages/ntlm.html") + (:keywords "ntlm" "sasl" "comm"))]) + (num3-mode . + [(1 2) + nil "highlight groups of digits in long numbers" single + ((:url . "http://elpa.gnu.org/packages/num3-mode.html") + (:keywords "faces" "minor-mode"))]) + (oauth2 . + [(0 11) + nil "OAuth 2.0 Authorization Protocol" single + ((:url . "http://elpa.gnu.org/packages/oauth2.html") + (:keywords "comm"))]) + (omn-mode . + [(1 2) + nil "Support for OWL Manchester Notation" single + ((:url . "http://elpa.gnu.org/packages/omn-mode.html") + (:keywords))]) + (on-screen . + [(1 3 2) + ((cl-lib + (0))) + "guide your eyes while scrolling" single + ((:url . "https://github.com/michael-heerdegen/on-screen.el") + (:keywords "convenience"))]) + (org . + [(20160912) + nil "Outline-based notes management and organizer" tar nil]) + (osc . + [(0 1) + nil "Open Sound Control protocol library" single + ((:url . "http://elpa.gnu.org/packages/osc.html") + (:keywords "comm" "processes" "multimedia"))]) + (other-frame-window . + [(1 0 2) + ((emacs + (24 4))) + "Minor mode to enable global prefix keys for other frame/window buffer placement" single + ((:url . "http://elpa.gnu.org/packages/other-frame-window.html") + (:keywords "frame" "window"))]) + (pabbrev . + [(4 2 1) + nil "Predictive abbreviation expansion" single + ((:url . "http://elpa.gnu.org/packages/pabbrev.html") + (:keywords))]) + (pinentry . + [(0 1) + nil "GnuPG Pinentry server implementation" single + ((:url . "http://elpa.gnu.org/packages/pinentry.html") + (:keywords "gnupg"))]) + (poker . + [(0 2) + nil "Texas hold 'em poker" single + ((:url . "http://elpa.gnu.org/packages/poker.html") + (:keywords "games"))]) + (python . + [(0 25 2) + ((emacs + (24 1)) + (cl-lib + (1 0))) + "Python's flying circus support for Emacs" single + ((:url . "https://github.com/fgallina/python.el") + (:keywords "languages"))]) + (quarter-plane . + [(0 1) + nil "Minor mode for quarter-plane style editing" single + ((:url . "http://elpa.gnu.org/packages/quarter-plane.html") + (:keywords "convenience" "wp"))]) + (queue . + [(0 1 1) + nil "Queue data structure" single + ((:url . "http://www.dr-qubit.org/emacs.php") + (:keywords "extensions" "data structures" "queue"))]) + (rainbow-mode . + [(0 12) + nil "Colorize color names in buffers" single + ((:url . "http://elpa.gnu.org/packages/rainbow-mode.html") + (:keywords "faces"))]) + (realgud . + [(1 4 3) + ((load-relative + (1 2)) + (loc-changes + (1 2)) + (test-simple + (1 2 0)) + (cl-lib + (0 5)) + (emacs + (24))) + "A modular front-end for interacting with external debuggers" tar + ((:url . "http://github.com/realgud/realgud/"))]) + (register-list . + [(0 1) + nil "Interactively list/edit registers" single + ((:url . "http://elpa.gnu.org/packages/register-list.html") + (:keywords "register"))]) + (rich-minority . + [(1 0 1) + ((cl-lib + (0 5))) + "Clean-up and Beautify the list of minor-modes." single + ((:url . "https://github.com/Malabarba/rich-minority") + (:keywords "mode-line" "faces"))]) + (rnc-mode . + [(0 1) + nil "Emacs mode to edit Relax-NG Compact files" single + ((:url . "http://elpa.gnu.org/packages/rnc-mode.html") + (:keywords "xml" "relaxng"))]) + (rudel . + [(0 3) + ((emacs + (24)) + (cl-lib + (0 5)) + (cl-generic + (0 3))) + "A collaborative editing framework for Emacs" tar + ((:keywords "rudel" "collaboration") + (:url . "http://rudel.sourceforge.net/"))]) + (scroll-restore . + [(1 0) + nil "restore original position after scrolling" single + ((:url . "http://elpa.gnu.org/packages/scroll-restore.html") + (:keywords "scrolling"))]) + (sed-mode . + [(1 0) + nil "Major mode to edit sed scripts" single + ((:url . "http://elpa.gnu.org/packages/sed-mode.html") + (:keywords))]) + (seq . + [(2 16) + nil "Sequence manipulation functions" tar + ((:keywords "sequences") + (:url . "http://elpa.gnu.org/packages/seq.html"))]) + (shen-mode . + [(0 1) + nil "A major mode for editing shen source code" tar + ((:keywords "languages" "shen") + (:url . "http://elpa.gnu.org/packages/shen-mode.html"))]) + (sisu-mode . + [(7 1 8) + nil "Major mode for SiSU markup text" single + ((:url . "http://www.sisudoc.org/") + (:keywords "text" "syntax" "processes" "tools"))]) + (smart-yank . + [(0 1 1) + ((emacs + (24))) + "A different approach of yank pointer handling" single + ((:url . "http://elpa.gnu.org/packages/smart-yank.html") + (:keywords "convenience"))]) + (sml-mode . + [(6 7) + ((emacs + (24)) + (cl-lib + (0 5))) + "Major mode for editing (Standard) ML" single + ((:url . "http://elpa.gnu.org/packages/sml-mode.html") + (:keywords "sml"))]) + (soap-client . + [(3 1 1) + ((cl-lib + (0 5))) + "Access SOAP web services" tar + ((:keywords "soap" "web-services" "comm" "hypermedia") + (:url . "http://elpa.gnu.org/packages/soap-client.html"))]) + (sokoban . + [(1 4) + nil "Implementation of Sokoban for Emacs." tar + ((:keywords "games") + (:url . "http://elpa.gnu.org/packages/sokoban.html"))]) + (sotlisp . + [(1 5 2) + ((emacs + (24 1))) + "Write lisp at the speed of thought." single + ((:url . "https://github.com/Malabarba/speed-of-thought-lisp") + (:keywords "convenience" "lisp"))]) + (spinner . + [(1 7 1) + nil "Add spinners and progress-bars to the mode-line for ongoing operations" single + ((:url . "https://github.com/Malabarba/spinner.el") + (:keywords "processes" "mode-line"))]) + (stream . + [(2 2 1) + ((emacs + (25))) + "Implementation of streams" single + ((:url . "http://elpa.gnu.org/packages/stream.html") + (:keywords "stream" "laziness" "sequences"))]) + (svg . + [(0 1) + ((emacs + (25))) + "svg image creation functions" single + ((:url . "http://elpa.gnu.org/packages/svg.html") + (:keywords "image"))]) + (svg-clock . + [(1 0) + ((svg + (0 1)) + (emacs + (25 0))) + "Analog clock using Scalable Vector Graphics" single + ((:url . "http://elpa.gnu.org/packages/svg-clock.html") + (:keywords "demo" "svg" "clock"))]) + (tNFA . + [(0 1 1) + ((queue + (0 1))) + "Tagged non-deterministic finite-state automata" single + ((:url . "http://www.dr-qubit.org/emacs.php") + (:keywords "extensions" "matching" "data structures tnfa" "nfa" "dfa" "finite state automata" "automata" "regexp"))]) + (temp-buffer-browse . + [(1 5) + ((emacs + (24))) + "temp buffer browse mode" single + ((:url . "http://elpa.gnu.org/packages/temp-buffer-browse.html") + (:keywords "convenience"))]) + (test-simple . + [(1 2 0) + ((cl-lib + (0))) + "Simple Unit Test Framework for Emacs Lisp" single + ((:url . "http://github.com/rocky/emacs-test-simple") + (:keywords "unit-test"))]) + (timerfunctions . + [(1 4 2) + ((cl-lib + (0 5))) + "Enhanced versions of some timer.el functions" single + ((:url . "http://elpa.gnu.org/packages/timerfunctions.html") + (:keywords))]) + (tiny . + [(0 1 1) + nil "Quickly generate linear ranges in Emacs" tar + ((:keywords "convenience") + (:url . "https://github.com/abo-abo/tiny"))]) + (tramp-theme . + [(0 1 1) + ((emacs + (24 1))) + "Custom theme for remote buffers" single + ((:url . "http://elpa.gnu.org/packages/tramp-theme.html") + (:keywords "convenience" "faces"))]) + (transcribe . + [(1 5 2) + nil "Package for audio transcriptions" single + ((:url . "http://elpa.gnu.org/packages/transcribe.html") + (:keywords))]) + (trie . + [(0 2 6) + ((tNFA + (0 1 1)) + (heap + (0 3))) + "Trie data structure" single + ((:url . "http://www.dr-qubit.org/emacs.php") + (:keywords "extensions" "matching" "data structures trie" "ternary search tree" "tree" "completion" "regexp"))]) + (undo-tree . + [(0 6 5) + nil "Treat undo history as a tree" single + ((:url . "http://www.dr-qubit.org/emacs.php") + (:keywords "convenience" "files" "undo" "redo" "history" "tree"))]) + (uni-confusables . + [(0 1) + nil "Unicode confusables table" tar + ((:url . "http://elpa.gnu.org/packages/uni-confusables.html"))]) + (url-http-ntlm . + [(2 0 2) + ((cl-lib + (0 5)) + (ntlm + (2 0 0))) + "NTLM authentication for the url library" single + ((:url . "http://elpa.gnu.org/packages/url-http-ntlm.html") + (:keywords "comm" "data" "processes" "hypermedia"))]) + (validate . + [(0 5) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "Schema validation for Emacs-lisp" single + ((:url . "http://elpa.gnu.org/packages/validate.html") + (:keywords "lisp"))]) + (vlf . + [(1 7) + nil "View Large Files" tar + ((:keywords "large files" "utilities") + (:url . "https://github.com/m00natic/vlfi"))]) + (w3 . + [(4 0 49) + nil "Fully customizable, largely undocumented web browser for Emacs" tar + ((:keywords "faces" "help" "comm" "news" "mail" "processes" "mouse" "hypermedia") + (:url . "http://elpa.gnu.org/packages/w3.html"))]) + (wcheck-mode . + [(2016 1 30) + nil "General interface for text checkers" single + ((:url . "https://github.com/tlikonen/wcheck-mode") + (:keywords "text" "spell" "check" "languages" "ispell"))]) + (wconf . + [(0 2 0) + ((emacs + (24 4))) + "Minimal window layout manager" single + ((:url . "https://github.com/ilohmar/wconf") + (:keywords "windows" "frames" "layout"))]) + (web-server . + [(0 1 1) + ((emacs + (24 3))) + "Emacs Web Server" tar + ((:keywords "http" "server" "network") + (:url . "https://github.com/eschulte/emacs-web-server"))]) + (websocket . + [(1 6) + nil "Emacs WebSocket client and server" tar + ((:keywords "communication" "websocket" "server") + (:url . "http://elpa.gnu.org/packages/websocket.html"))]) + (windresize . + [(0 1) + nil "Resize windows interactively" single + ((:url . "http://elpa.gnu.org/packages/windresize.html") + (:keywords "window"))]) + (wisi . + [(1 1 3) + ((cl-lib + (0 4)) + (emacs + (24 2))) + "Utilities for implementing an indentation/navigation engine using a generalized LALR parser" tar + ((:keywords "parser" "indentation" "navigation") + (:url . "http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html"))]) + (wpuzzle . + [(1 1) + nil "find as many word in a given time" single + ((:url . "http://elpa.gnu.org/packages/wpuzzle.html") + (:keywords))]) + (xclip . + [(1 3) + nil "use xclip to copy&paste" single + ((:url . "http://elpa.gnu.org/packages/xclip.html") + (:keywords "convenience" "tools"))]) + (xelb . + [(0 11) + ((emacs + (24 4)) + (cl-generic + (0 2))) + "X protocol Emacs Lisp Binding" tar + ((:keywords "unix") + (:url . "https://github.com/ch11ng/xelb"))]) + (xpm . + [(1 0 3) + nil "edit XPM images" tar + ((:keywords "multimedia" "xpm") + (:url . "http://www.gnuvola.org/software/xpm/"))]) + (yasnippet . + [(0 10 0) + ((cl-lib + (0 5))) + "Yet another snippet extension for Emacs." tar + ((:keywords "convenience" "emulation") + (:url . "http://github.com/capitaomorte/yasnippet"))]) + (ztree . + [(1 0 3) + ((cl-lib + (0))) + "Text mode directory tree" tar + ((:keywords "files" "tools") + (:url . "https://github.com/fourier/ztree"))])) diff --git a/.emacs.d/elpa/archives/gnu/archive-contents.signed b/.emacs.d/elpa/archives/gnu/archive-contents.signed new file mode 100644 index 0000000..7ac62b4 --- /dev/null +++ b/.emacs.d/elpa/archives/gnu/archive-contents.signed @@ -0,0 +1 @@ +Good signature from 474F05837FBDEF9B GNU ELPA Signing Agent (trust undefined) created at 2016-09-13T23:05:01+0200 using DSA \ No newline at end of file diff --git a/.emacs.d/elpa/archives/melpa/archive-contents b/.emacs.d/elpa/archives/melpa/archive-contents new file mode 100644 index 0000000..f3a87ea --- /dev/null +++ b/.emacs.d/elpa/archives/melpa/archive-contents @@ -0,0 +1,2 @@ + +(1 (zzz-to-char . [(20160122 440) ((emacs (24 4)) (cl-lib (0 5)) (avy (0 3 0))) "Fancy version of `zap-to-char' command" single ((:url . "https://github.com/mrkkrp/zzz-to-char") (:keywords "convenience"))]) (zygospore . [(20140703 152) nil "reversible C-x 1 (delete-other-windows)" single ((:url . "https://github.com/louiskottmann/zygospore.el"))]) (ztree . [(20160127 1542) ((cl-lib (0))) "Text mode directory tree" tar ((:url . "https://github.com/fourier/ztree") (:keywords "files" "tools"))]) (zoutline . [(20160906 743) nil "Simple outline library." single ((:url . "https://github.com/abo-abo/zoutline") (:keywords "outline"))]) (zotxt . [(20160427 1922) ((request-deferred (0 2 0))) "Tools to integrate emacs with Zotero via the zotxt plugin." tar nil]) (zotelo . [(20160602 249) ((cl-lib (0 5))) "Manage Zotero collections from emacs" single ((:url . "https://github.com/vitoshka/zotelo") (:keywords "zotero" "emacs" "reftex" "bibtex" "mozrepl" "bibliography manager"))]) (zossima . [(20121123 1635) ((inf-ruby (2 2 3))) "Ruby from Emacs" tar ((:url . "https://github.com/technomancy/zossima") (:keywords "ruby" "convenience"))]) (zop-to-char . [(20160212 108) ((cl-lib (0 5))) "A replacement of zap-to-char." single ((:url . "https://github.com/thierryvolpiatto/zop-to-char"))]) (zoom-window . [(20160527 738) ((emacs (24)) (cl-lib (0 5))) "Zoom window like tmux" single ((:url . "https://github.com/syohex/emacs-zoom-window"))]) (zoom-frm . [(20160809 716) ((frame-fns (0)) (frame-cmds (0))) "Commands to zoom frame font size." single ((:url . "http://www.emacswiki.org/zoom-frm.el") (:keywords "frames" "extensions" "convenience"))]) (zonokai-theme . [(20160321 1925) nil "No description available." tar nil]) (zones . [(20160819 1426) nil "Zones of text - like multiple regions" single ((:url . "http://www.emacswiki.org/zones.el") (:keywords "narrow" "restriction" "widen" "region" "zone"))]) (zone-sl . [(20160201 410) ((emacs (24 3))) "Zone out with steam locomotives." single ((:url . "https://github.com/kawabata/zone-sl") (:keywords "games"))]) (zone-select . [(20160118 619) ((emacs (24 3)) (dash (2 8))) "Select zone programs." single ((:url . "https://github.com/kawabata/zone-select") (:keywords "games"))]) (zone-rainbow . [(20160120 534) ((emacs (24 3))) "Zone out with rainbow." single ((:url . "https://github.com/kawabata/zone-rainbow") (:keywords "games"))]) (zone-nyan . [(20160102 1456) ((esxml (0 3 1))) "Zone out with nyan cat" single ((:url . "https://github.com/wasamasa/zone-nyan") (:keywords "zone"))]) (zombie-trellys-mode . [(20150304 648) ((emacs (24)) (cl-lib (0 5)) (haskell-mode (1 5))) "A minor mode for interaction with Zombie Trellys" single ((:keywords "languages"))]) (zombie . [(20141222 816) nil "major mode for editing ZOMBIE programs" single ((:url . "http://hins11.yu-yake.com/"))]) (znc . [(20160627 1332) ((cl-lib (0 2))) "ZNC + ERC" single ((:url . "https://github.com/sshirokov/ZNC.el"))]) (zlc . [(20151010 1857) nil "Provides zsh like completion system to Emacs" single ((:keywords "matching" "convenience"))]) (zerodark-theme . [(20160909 729) nil "A dark, medium contrast theme for Emacs" single ((:url . "https://github.com/NicolasPetton/zerodark-theme") (:keywords "themes"))]) (zenity-color-picker . [(20160302 354) ((emacs (24 4))) "Insert and adjust colors using Zenity" single ((:url . "https://bitbucket.org/Soft/zenity-color-picker.el") (:keywords "colors"))]) (zencoding-mode . [(20140213 22) nil "Unfold CSS-selector-like expressions to markup" single ((:url . "https://github.com/rooney/zencoding") (:keywords "convenience"))]) (zenburn-theme . [(20160724 2141) nil "A low contrast color theme for Emacs." single ((:url . "http://github.com/bbatsov/zenburn-emacs"))]) (zen-and-art-theme . [(20120622 737) nil "zen and art color theme for GNU Emacs 24" single nil]) (zeitgeist . [(20131228 1009) nil "No description available." single nil]) (zeal-at-point . [(20160725 2044) nil "Search the word at point with Zeal" single ((:url . "https://github.com/jinzhu/zeal-at-point"))]) (z3-mode . [(20151120 1455) ((flycheck (0 23)) (emacs (24))) "A z3/SMTLIBv2 interactive development environment" single ((:url . "https://github.com/zv/z3-mode") (:keywords "z3" "yices" "mathsat" "smt" "beaver"))]) (youdao-dictionary . [(20150913 2344) ((popup (0 5 0)) (chinese-word-at-point (0 2)) (names (0 5)) (emacs (24))) "Youdao Dictionary interface for Emacs" single ((:url . "https://github.com/xuchunyang/youdao-dictionary.el") (:keywords "convenience" "chinese" "dictionary"))]) (yoshi-theme . [(20160608 1423) nil "Theme named after my cat" single ((:url . "http://projects.ryuslash.org/yoshi-theme/") (:keywords "faces"))]) (yesql-ghosts . [(20150220 437) ((s (1 9 0)) (dash (2 10 0)) (cider (0 8 0))) "Display ghostly yesql defqueries inline" single nil]) (ycmd . [(20160905 1720) ((emacs (24 3)) (dash (2 12 1)) (s (1 10 0)) (deferred (0 3 2)) (cl-lib (0 5)) (let-alist (1 0 4)) (request (0 2 0)) (request-deferred (0 2 0))) "emacs bindings to the ycmd completion server" tar ((:url . "https://github.com/abingham/emacs-ycmd"))]) (ycm . [(20150822 1136) nil "Emacs client for the YouCompleteMe auto-completion server." single ((:keywords "c" "abbrev"))]) (yaxception . [(20150105 652) nil "Provide framework about exception like Java for Elisp" single ((:url . "https://github.com/aki2o/yaxception") (:keywords "exception" "error" "signal"))]) (yatex . [(20160813 100) nil "Yet Another tex-mode for emacs //野鳥//" tar nil]) (yatemplate . [(20160719 1228) ((yasnippet (0 8 1))) "File templates with yasnippet" tar ((:url . "https://github.com/mineo/yatemplate") (:keywords "files" "convenience"))]) (yasnippet . [(20160801 1142) ((cl-lib (0 5))) "Yet another snippet extension for Emacs." tar ((:url . "http://github.com/capitaomorte/yasnippet") (:keywords "convenience" "emulation"))]) (yascroll . [(20150315 605) ((cl-lib (0 3))) "Yet Another Scroll Bar Mode" single ((:keywords "convenience"))]) (yari . [(20151127 2339) nil "Yet Another RI interface for Emacs" single ((:keywords "tools"))]) (yard-mode . [(20160310 850) nil "Minor mode for Ruby YARD comments" single ((:url . "https://github.com/pd/yard-mode.el"))]) (yara-mode . [(20160821 724) ((emacs (24))) "Major mode for editing yara rule file" single ((:url . "not distributed yet") (:keywords "yara"))]) (yapfify . [(20160822 1207) nil "(automatically) format python buffers using YAPF." single ((:url . "https://github.com/JorisE/yapfify"))]) (yaoddmuse . [(20160717 2212) nil "Major mode for EmacsWiki and other Oddmuse wikis" single ((:url . "http://www.emacswiki.org/emacs/download/yaoddmuse.el") (:keywords "yaoddmuse" "oddmuse"))]) (yankpad . [(20160903 1935) nil "Paste snippets from an org-mode file" single ((:url . "http://github.com/Kungsgeten/yankpad") (:keywords "abbrev" "convenience"))]) (yandex-weather . [(20160311 1237) nil "Fetch Yandex Weather forecasts." tar nil]) (yaml-tomato . [(20151122 2353) ((s (1 9))) "copy or show the yaml path currently under cursor." single ((:keywords "yaml"))]) (yaml-mode . [(20160902 1142) ((emacs (24 1))) "Major mode for editing YAML files" single ((:keywords "data" "yaml"))]) (yalinum . [(20130217 243) nil "yet another display line numbers." single ((:keywords "convenience" "tools"))]) (yahoo-weather . [(20160703 2008) ((emacs (24))) "Displays weather information in mode-line" single ((:url . "https://github.com/lujun9972/yahoo-weather-mode") (:keywords "weather" "mode-line"))]) (yagist . [(20160417 2208) ((cl-lib (0 3))) "Yet Another Emacs integration for gist.github.com" single ((:url . "https://github.com/mhayashi1120/yagist.el") (:keywords "tools"))]) (yafolding . [(20160814 1230) nil "Yet another folding extension for Emacs" single ((:keywords "folding"))]) (yabin . [(20140205 1951) nil "Yet Another Bignum package (A thin wrapper of calc.el)." single ((:keywords "data"))]) (xwidgete . [(20160719 324) ((emacs (25))) "enhances usability of current xwidget browser" single ((:url . "https://github.com/tuhdo/xwidgete") (:keywords "xwidgete" "tools"))]) (xtest . [(20141214 906) ((cl-lib (0 5))) "Simple Testing with Emacs & ERT" single ((:url . "https://github.com/promethial/xtest") (:keywords "testing" "ert"))]) (xterm-title . [(20091203 1023) nil "Update xterm titles" single nil]) (xterm-keybinder . [(20160522 1756) ((emacs (24 3)) (cl-lib (0 5)) (let-alist (1 0 1))) "Let you extra keybinds in xterm/urxvt" tar ((:keywords "convenient"))]) (xterm-frobs . [(20091211 1555) nil "manipulate xterm when running emacs in tty mode" single nil]) (xterm-color . [(20160802 1752) ((cl-lib (0 5))) "ANSI & XTERM 256 color support" single nil]) (xresources-theme . [(20160331 702) nil "Use your .Xresources as your emacs theme" single ((:keywords "xresources" "theme"))]) (xref-js2 . [(20160803 116) ((emacs (25)) (js2-mode (20150909))) "Jump to references/definitions using ag & js2-mode's AST" single ((:url . "https://github.com/NicolasPetton/xref-js2") (:keywords "javascript" "convenience" "tools"))]) (xquery-tool . [(20160823 902) nil "A simple interface to saxonb's xquery." single ((:url . "https://github.com/paddymcall/xquery-tool.el") (:keywords "xml" "xquery" "emacs"))]) (xquery-mode . [(20140121 943) nil "A simple mode for editing xquery programs" tar nil]) (xo . [(20160402 2346) nil "XO linter integration with compilation mode" single ((:keywords "processes"))]) (xmlunicode . [(20160319 912) nil "Unicode support for XML" tar ((:keywords "utf-8" "unicode" "xml" "characters"))]) (xmlgen . [(20160810 331) nil "A DSL for generating XML." single nil]) (xml-rpc . [(20160430 1458) nil "An elisp implementation of clientside XML-RPC" single ((:url . "http://github.com/hexmode/xml-rpc-el") (:keywords "xml" "rpc" "network"))]) (xml-quotes . [(20151230 1449) nil "read quotations from an XML document" tar ((:url . "https://github.com/ndw/xml-quotes") (:keywords "xml" "quotations"))]) (xml+ . [(20160210 1942) ((emacs (24 4)) (dash (2 12 0))) "Utilities for xml and html trees" single ((:url . "https://github.com/bddean/xml-plus") (:keywords "xml" "html"))]) (xkcd . [(20160419 430) ((json (1 3))) "View xkcd from Emacs" single ((:url . "https://github.com/vibhavp/emacs-xkcd") (:keywords "xkcd" "webcomic"))]) (xcscope . [(20160628 2324) nil "cscope interface for (X)Emacs" single ((:url . "https://github.com/dkogan/xcscope.el") (:keywords "languages" "c"))]) (xcode-mode . [(20160907 508) ((emacs (24 4)) (s (1 10 0)) (dash (2 11 0)) (multiple-cursors (1 0 0))) "A minor mode for emacs to perform Xcode like actions." single ((:keywords "conveniences"))]) (xbm-life . [(20160103 217) nil "A XBM version of Conway's Game of Life" single ((:url . "https://github.com/wasamasa/xbm-life") (:keywords "games"))]) (xahk-mode . [(20150504 1611) nil "Major mode for editing AutoHotkey scripts." single ((:url . "http://xahlee.info/mswin/emacs_autohotkey_mode.html") (:keywords "languages"))]) (xah-replace-pairs . [(20160713 1858) nil "Multi-pair find/replace in strings and region." single ((:url . "http://ergoemacs.org/emacs/elisp_replace_string_region.html") (:keywords "lisp" "tools" "find replace"))]) (xah-math-input . [(20160711 1326) nil "a minor mode for inputting math and Unicode symbols." single ((:url . "http://ergoemacs.org/emacs/xmsi-math-symbols-input.html") (:keywords "abbrev" "convenience" "unicode" "math" "latex"))]) (xah-lookup . [(20160711 1019) nil "look up word on internet" single ((:url . "http://ergoemacs.org/emacs/emacs_lookup_ref.html") (:keywords "help" "docs" "convenience"))]) (xah-get-thing . [(20150712 1430) nil "get thing or selection at point." single ((:url . "http://ergoemacs.org/emacs/elisp_get-selection-or-unit.html") (:keywords "extensions" "lisp" "tools"))]) (xah-fly-keys . [(20160911 2224) nil "A efficient modal keybinding set minor mode based on ergonomics." single ((:url . "http://ergoemacs.org/misc/ergoemacs_vi_mode.html") (:keywords "convenience" "emulations" "vim" "ergoemacs"))]) (xah-find . [(20160721 2030) nil "find replace in pure emacs lisp. Purpose similar to unix grep/sed." single ((:url . "http://ergoemacs.org/emacs/elisp-xah-find-text.html") (:keywords "convenience" "extensions" "files" "tools" "unix"))]) (xah-elisp-mode . [(20160903 1614) ((emacs (24 3))) "Major mode for editing emacs lisp." single ((:url . "http://ergoemacs.org/emacs/xah-elisp-mode.html") (:keywords "lisp" "languages"))]) (xah-css-mode . [(20160816 837) ((emacs (24 3))) "Major mode for editing CSS code." single ((:url . "http://ergoemacs.org/emacs/xah-css-mode.html") (:keywords "languages" "convenience" "css" "color"))]) (x86-lookup . [(20160624 1104) ((emacs (24 3)) (cl-lib (0 3))) "jump to x86 instruction documentation" single ((:url . "https://github.com/skeeto/x86-lookup"))]) (x-path-walker . [(20160822 1015) ((helm-core (1 9 2))) "Navigation feature for JSON/XML/HTML based on path (imenu like)" tar ((:keywords "convenience"))]) (x-dict . [(20091203 1023) nil "emacs interface for several online dictionaries" single nil]) (www-synonyms . [(20160812 1329) ((request (0 2 0)) (cl-lib (0 5))) "insert synonym for a word" single ((:keywords "lisp"))]) (wwtime . [(20151122 810) nil "Insert a time of day with appropriate world-wide localization" single ((:keywords "time"))]) (wttrin . [(20160414 837) ((emacs (24 4)) (xterm-color (1 0))) "Emacs frontend for weather web service wttr.in" single ((:url . "https://github.com/bcbcarl/emacs-wttrin") (:keywords "comm" "weather" "wttrin"))]) (wsd-mode . [(20160510 2251) nil "Emacs major-mode for www.websequencediagrams.com" tar ((:url . "https://github.com/josteink/wsd-mode") (:keywords "wsd" "diagrams" "design" "process" "modelling" "uml"))]) (ws-butler . [(20150126 759) nil "Unobtrusively remove trailing whitespace." single ((:url . "https://github.com/lewang/ws-butler"))]) (writeroom-mode . [(20160830 616) ((emacs (24 1)) (visual-fill-column (1 9))) "Minor mode for distraction-free writing" tar ((:keywords "text"))]) (writegood-mode . [(20160802 1405) nil "Polish up poor writing on the fly" single ((:url . "http://github.com/bnbeckwith/writegood-mode") (:keywords "writing" "weasel-words" "grammar"))]) (wrap-region . [(20140116 2320) ((dash (1 0 3))) "Wrap text with punctation or tag" single ((:url . "http://github.com/rejeep/wrap-region") (:keywords "speed" "convenience"))]) (world-time-mode . [(20140627 107) nil "show whole days of world-time diffs" single ((:keywords "tools" "calendar"))]) (workgroups2 . [(20141102 1122) ((cl-lib (0 4)) (dash (2 8 0)) (anaphora (1 0 0)) (f (0 17))) "New workspaces for Emacs" single ((:url . "https://github.com/pashinin/workgroups2") (:keywords "session" "management" "window-configuration" "persistence"))]) (workgroups . [(20110726 941) nil "workgroups for windows (for Emacs)" single ((:keywords "session" "management" "window-configuration" "persistence"))]) (worf . [(20160902 734) ((swiper (0 7 0)) (ace-link (0 1 0)) (hydra (0 13 0))) "A warrior does not press so many keys! (in org-mode)" tar ((:url . "https://github.com/abo-abo/worf") (:keywords "lisp"))]) (wordsmith-mode . [(20151117 236) nil "Syntax analysis and NLP text-processing in Emacs (OSX-only)" single nil]) (wordnut . [(20151002 1457) ((emacs (24 4))) "Major mode interface to WordNet" tar nil]) (wonderland . [(20130912 1819) ((dash (2 0 0)) (dash-functional (1 0 0)) (multi (2 0 0)) (emacs (24))) "declarative configuration for Emacsen" single ((:url . "http://github.com/kurisuwhyte/emacs-wonderland") (:keywords "configuration" "profile" "wonderland"))]) (wolfram-mode . [(20140118 757) ((emacs (24 3))) "Mathematica editing and inferior mode." single ((:url . "https://github.com/kawabata/wolfram-mode/") (:keywords "languages" "processes" "tools"))]) (wn-mode . [(20151109 2152) ((emacs (24))) "numeric window switching shortcuts" single ((:url . "https://github.com/luismbo/wn-mode") (:keywords "buffers" "windows" "switching-windows"))]) (with-namespace . [(20130407 1122) ((dash (1 1 0)) (loop (1 1))) "interoperable elisp namespaces" single ((:keywords "namespaces"))]) (with-editor . [(20160828 1025) ((emacs (24 4)) (async (1 9)) (dash (2 13 0))) "Use the Emacsclient as $EDITOR" tar ((:url . "https://github.com/magit/with-editor") (:keywords "tools"))]) (wispjs-mode . [(20140103 1432) ((clojure-mode (0))) "Major mode for Wisp code." single ((:url . "https://github.com/krisajenkins/wispjs-mode"))]) (wisp-mode . [(20160419 1232) nil "Tools for wisp: the Whitespace-to-Lisp preprocessor" single ((:keywords "languages" "lisp"))]) (winring . [(20150804 1108) nil "Window configuration rings" single ((:url . "https://gitlab.com/warsaw/winring") (:keywords "frames" "tools"))]) (winpoint . [(20131023 1013) nil "Remember buffer positions per-window, not per buffer" single ((:url . "https://github.com/jorgenschaefer/winpoint") (:keywords "convenience"))]) (windsize . [(20151121 540) nil "Simple, intuitive window resizing" single ((:url . "http://github.com/grammati/windsize") (:keywords "window" "resizing" "convenience"))]) (window-purpose . [(20160727 655) ((emacs (24)) (cl-lib (0 5)) (let-alist (1 0 3)) (imenu-list (0 1))) "Purpose-based window management for Emacs" tar ((:url . "https://github.com/bmag/emacs-purpose") (:keywords "frames"))]) (window-numbering . [(20160809 1110) nil "Numbered window shortcuts" single ((:url . "http://nschum.de/src/emacs/window-numbering-mode/") (:keywords "faces" "matching"))]) (window-number . [(20141106 1829) nil "Select windows by numbers." single ((:url . "https://github.com/nikolas/window-number") (:keywords "windows"))]) (window-layout . [(20150716 2207) nil "window layout manager" single ((:keywords "window" "layout"))]) (window-jump . [(20150213 1236) nil "Move left/right/up/down through your windows." single ((:url . "https://github.com/chumpage/chumpy-windows") (:keywords "frames" "convenience"))]) (window-end-visible . [(20140508 1341) nil "Find the last visible point in a window" single ((:url . "http://github.com/rolandwalker/window-end-visible") (:keywords "extensions"))]) (window+ . [(20151231 1624) nil "Extensions to `window.el'." single ((:url . "http://www.emacswiki.org/window%2b.el") (:keywords "internal" "window"))]) (windata . [(20080412 755) nil "convert window configuration to list" single ((:keywords "convenience" "frames"))]) (win-switch . [(20150208 1911) nil "fast, dynamic bindings for window-switching/resizing" single ((:url . "http://www.stat.cmu.edu/~genovese/emacs/win-switch/") (:keywords "window" "switch" "key bindings" "ergonomic" "efficient"))]) (wimpy-del . [(20151231 1623) nil "Require confirmation for large region deletion." single ((:url . "http://www.emacswiki.org/wimpy-del.el") (:keywords "region" "cut" "kill" "copy"))]) (wilt . [(20151105 518) ((emacs (24 3)) (dash (2 12 0)) (s (1 10 0))) "An extensions for calculating WILT in a buffer." single ((:url . "https://github.com/sixty-north/emacs-wilt"))]) (wiki-summary . [(20150408 1422) ((emacs (24))) "View Wikipedia summaries in Emacs easily." single ((:url . "https://github.com/jozefg/wiki-summary.el") (:keywords "wikipedia" "utility"))]) (wiki-nav . [(20150223 554) ((button-lock (1 0 2)) (nav-flash (1 0 0))) "Simple file navigation using [[WikiStrings]]" single ((:url . "http://github.com/rolandwalker/button-lock") (:keywords "mouse" "button" "hypermedia" "navigation"))]) (widgetjs . [(20160719 804) ((makey (0 3)) (js2-mode (20140114)) (js2-refactor (0 6 1)) (s (1 9 0))) "Widgetjs mode" single ((:keywords "help"))]) (widget-mvc . [(20150101 2006) nil "MVC framework for the emacs widgets" single ((:keywords "lisp" "widget"))]) (wide-column . [(20120814 112) nil "Calls functions dependant on column position." single ((:keywords "minor mode" "cursor colour" "column width"))]) (wid-edit+ . [(20151231 1622) nil "Extensions to standard library `wid-edit.el'." single ((:url . "http://www.emacswiki.org/wid-edit%2b.el") (:keywords "widget" "color"))]) (whole-line-or-region . [(20110901 130) nil "operate on current line if region undefined" single ((:keywords "kill" "yank" "cut" "copy" "paste" "whole" "lines"))]) (whitespace-cleanup-mode . [(20150603 447) nil "Intelligently call whitespace-cleanup on save" single ((:url . "https://github.com/purcell/whitespace-cleanup-mode") (:keywords "convenience"))]) (white-theme . [(20160909 1400) ((emacs (24))) "Minimalistic light color theme inspired by basic-theme" single ((:url . "http://github.com/anler/white-theme.el") (:keywords "color" "theme" "minimal" "basic" "simple" "white"))]) (white-sand-theme . [(20151117 848) ((emacs (24))) "Emacs theme with a light background." single nil]) (whitaker . [(20150814 422) ((dash (2 10 0))) "Comint interface for Whitaker's Words" single ((:keywords "processes"))]) (which-key . [(20160911 1302) ((emacs (24 3))) "Display available keybindings in popup" single ((:url . "https://github.com/justbur/emacs-which-key"))]) (what-the-commit . [(20150901 616) nil "Random commit message generator" single ((:url . "http://barbarito.me/") (:keywords "git" "commit" "message"))]) (wgrep-pt . [(20140510 1531) ((wgrep (2 1 5))) "Writable pt buffer and apply the changes to files" single ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-pt.el") (:keywords "grep" "edit" "extensions"))]) (wgrep-helm . [(20140528 1427) ((wgrep (2 1 1))) "Writable helm-grep-mode buffer and apply the changes to files" single ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-helm.el") (:keywords "grep" "edit" "extensions"))]) (wgrep-ag . [(20141012 311) ((wgrep (2 1 5))) "Writable ag buffer and apply the changes to files" single ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-ag.el") (:keywords "grep" "edit" "extensions"))]) (wgrep-ack . [(20141012 311) ((wgrep (2 1 1))) "Writable ack-and-a-half buffer and apply the changes to files" single ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-ack.el") (:keywords "grep" "edit" "extensions"))]) (wgrep . [(20141016 1656) nil "Writable grep buffer and apply the changes to files" single ((:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep.el") (:keywords "grep" "edit" "extensions"))]) (weibo . [(20150307 1442) ((cl-lib (0 5))) "Weibo client for Emacs" tar ((:url . "https://github.com/austin-----/weibo.emacs") (:keywords "weibo"))]) (weechat-alert . [(20160416 548) ((weechat (0 3 1)) (cl-lib (0 5)) (alert (1 2))) "Weechat notifier using alerts" single ((:url . "https://github.com/kungi/weechat-alert") (:keywords "irc" "chat" "network" "weechat"))]) (weechat . [(20160229 1248) ((s (1 3 1)) (cl-lib (0 2)) (emacs (24)) (tracking (1 2))) "Chat via WeeChat's relay protocol in Emacs" tar nil]) (wedge-ws . [(20140714 1449) nil "Wedge whitespace between columns in text" single ((:keywords "formatting" "indentation"))]) (websocket . [(20160720 2051) nil "Emacs WebSocket client and server" single ((:keywords "communication" "websocket" "server"))]) (weblogger . [(20110926 918) ((xml-rpc (1 6 8))) "Weblog maintenance via XML-RPC APIs" single ((:url . "http://launchpad.net/weblogger-el") (:keywords "weblog" "blogger" "cms" "movable" "type" "openweblog" "blog"))]) (web-server . [(20140905 1706) ((emacs (24 3))) "Emacs Web Server" tar ((:url . "https://github.com/eschulte/emacs-web-server") (:keywords "http" "server" "network"))]) (web-mode . [(20160904 1151) nil "major mode for editing web templates" single ((:url . "http://web-mode.org") (:keywords "languages"))]) (web-completion-data . [(20160318 148) nil "Shared completion data for ac-html and company-web" tar ((:url . "https://github.com/osv/web-completion-data") (:keywords "html" "auto-complete" "company"))]) (web-beautify . [(20160410 1005) nil "Format HTML, CSS and JavaScript/JSON by js-beautify" single ((:url . "https://github.com/yasuyk/web-beautify"))]) (web . [(20141231 1201) ((dash (2 9 0)) (s (1 5 0))) "useful HTTP client" single ((:url . "http://github.com/nicferrier/emacs-web") (:keywords "lisp" "http" "hypermedia"))]) (weather-metno . [(20150831 1807) ((emacs (24)) (cl-lib (0 3))) "Weather data from met.no in Emacs" tar nil]) (wcheck-mode . [(20160711 2213) nil "General interface for text checkers" tar nil]) (wc-mode . [(20131121 826) nil "Running word count with goals (minor mode)" single ((:url . "https://github.com/bnbeckwith/wc-mode"))]) (wc-goal-mode . [(20140829 659) nil "Running word count with goals (minor mode)" single ((:url . "https://github.com/bnbeckwith/wc-goal-mode"))]) (wavefront-obj-mode . [(20150501 1116) nil "Major mode for Wavefront obj files" single ((:url . "http://github.com/abend/wavefront-obj-mode"))]) (watch-buffer . [(20120331 1344) nil "run a shell command when saving a buffer" single ((:url . "https://github.com/mjsteger/watch-buffer") (:keywords "automation" "convenience"))]) (warm-night-theme . [(20150607 741) ((emacs (24))) "Emacs 24 theme with a dark background." single nil]) (wanderlust . [(20160912 242) ((semi (1 14 7))) "Yet Another Message Interface on Emacsen" tar nil]) (wandbox . [(20160418 1114) ((emacs (24)) (request (0 2 0)) (s (1 10 0))) "Wandbox API Library for Emacs" tar ((:url . "https://github.com/kosh04/emacs-wandbox") (:keywords "c" "programming" "tools"))]) (wand . [(20141104 1645) ((dash (2 5 0))) "Magic wand for Emacs - Selecting and executing" tar ((:url . "https://github.com/cmpitg/wand") (:keywords "extensions" "tools"))]) (wakatime-mode . [(20160417 109) nil "Automatic time tracking extension for WakaTime" single ((:keywords "calendar" "comm"))]) (waher-theme . [(20141115 430) ((emacs (24 1))) "Emacs 24 theme based on waher for st2 by dduckster" single ((:url . "https://github.com/jasonm23/emacs-waher-theme"))]) (wacspace . [(20140826 2232) ((dash (1 2 0)) (cl-lib (0 2))) "The WACky WorkSPACE manager for emACS" tar nil]) (w3m . [(20160908 1221) nil "an Emacs interface to w3m" tar ((:keywords "w3m" "www" "hypermedia"))]) (w32browser-dlgopen . [(20151231 1621) nil "Use w32browser with standard Windows Open File box." single ((:url . "http://www.emacswiki.org/w32browser-dlgopen.el") (:keywords "files" "extensions" "convenience" "dialog"))]) (w32-browser . [(20160814 1433) nil "Run Windows application associated with a file." single ((:url . "http://www.emacswiki.org/w32-browser.el") (:keywords "mouse" "dired" "w32" "explorer"))]) (vue-mode . [(20160411 2054) ((mmm-mode (0 5 4))) "Major mode for vue component based on web-mode and mmm-mode" single ((:keywords "languages"))]) (volume . [(20150718 1309) nil "tweak your sound card volume from Emacs" single ((:url . "http://www.brockman.se/software/volume-el/"))]) (volatile-highlights . [(20160611 1855) nil "Minor mode for visual feedback on some operations." single ((:url . "http://www.emacswiki.org/emacs/download/volatile-highlights.el") (:keywords "emulations" "convenience" "wp"))]) (voca-builder . [(20150625 1133) nil "No description available." single nil]) (vmd-mode . [(20160531 1719) ((emacs (24 3))) "Fast Github-flavored Markdown preview using a vmd subprocess." single ((:url . "https://github.com/blak3mill3r/vmd-mode") (:keywords "markdown" "preview" "live" "vmd"))]) (vline . [(20120108 445) nil "show vertical line (column highlighting) mode." single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/vline.el") (:keywords "faces" "editing" "emulating"))]) (vlf . [(20150101 718) nil "View Large Files" tar ((:url . "https://github.com/m00natic/vlfi") (:keywords "large files" "utilities"))]) (vkill . [(20091203 1022) nil "view and kill Unix processes from within Emacs" single nil]) (visual-regexp-steroids . [(20160516 1238) ((visual-regexp (1 0))) "Extends visual-regexp to support other regexp engines" tar ((:url . "https://github.com/benma/visual-regexp-steroids.el/") (:keywords "external" "foreign" "regexp" "replace" "python" "visual" "feedback"))]) (visual-regexp . [(20160806 610) ((cl-lib (0 2))) "A regexp/replace command for Emacs with interactive visual feedback" single ((:url . "https://github.com/benma/visual-regexp.el/") (:keywords "regexp" "replace" "visual" "feedback"))]) (visual-fill-column . [(20160804 1452) ((emacs (24 3))) "fill-column for visual-line-mode" single nil]) (visual-ascii-mode . [(20150129 246) nil "Visualize ascii code (small integer) on buffer." single ((:url . "https://github.com/Dewdrops/visual-ascii-mode") (:keywords "presentation"))]) (visible-mark . [(20150623 2150) nil "Make marks visible." single ((:url . "https://gitlab.com/iankelling/visible-mark") (:keywords "marking" "color" "faces"))]) (virtualenvwrapper . [(20151127 621) ((dash (1 5 0)) (s (1 6 1))) "a featureful virtualenv tool for Emacs" single ((:url . "http://github.com/porterjamesj/virtualenvwrapper.el") (:keywords "python" "virtualenv" "virtualenvwrapper"))]) (virtualenv . [(20140220 1501) nil "Virtualenv for Python" single ((:keywords "python" "virtualenv"))]) (vimrc-mode . [(20150607 913) nil "Major mode for vimrc files" single ((:url . "https://github.com/mcandre/vimrc-mode") (:keywords "languages" "vim"))]) (vimish-fold . [(20160718 126) ((emacs (24 4)) (cl-lib (0 5)) (f (0 18 0))) "Fold text like in Vim" single ((:url . "https://github.com/mrkkrp/vimish-fold") (:keywords "convenience"))]) (vimgolf . [(20140814 1448) nil "VimGolf interface for the One True Editor" single ((:keywords "games" "vimgolf" "vim"))]) (vim-region . [(20140329 924) ((expand-region (20140127))) "Select region as vim" single ((:url . "https://github.com/ongaeshi/emacs-vim-region"))]) (vim-empty-lines-mode . [(20150110 2026) ((emacs (23))) "Vim-like empty line indicator at end of files." single ((:url . "https://github.com/jmickelin/vim-empty-lines-mode") (:keywords "emulations"))]) (viking-mode . [(20160705 1327) nil "kill first, ask later" single ((:url . "https://github.com/tlinden/viking-mode") (:keywords "kill" "delete"))]) (viewer . [(20141021 1136) nil "View-mode extension" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/viewer.el") (:keywords "view" "extensions"))]) (vi-tilde-fringe . [(20141027 1942) ((emacs (24))) "Displays tildes in the fringe on empty lines a la Vi." single ((:url . "https://github.com/syl20bnr/vi-tilde-fringe") (:keywords "emulation"))]) (vhdl-tools . [(20160810 525) ((ggtags (0 8 11)) (emacs (24 5)) (outshine (2 0)) (helm (1 9 9))) "Utilities for navigating vhdl sources." single ((:url . "https://github.com/csantosb/vhdl-tools") (:keywords "vhdl"))]) (vhdl-capf . [(20160221 934) nil "Completion at point function (capf) for vhdl-mode." single ((:url . "https://github.com/sh-ow/vhdl-capf") (:keywords "convenience" "usability" "vhdl" "completion"))]) (vertigo . [(20160429 2105) ((dash (2 11 0))) "Jump across lines using the home row." single ((:url . "https://github.com/noctuid/vertigo.el") (:keywords "vim" "vertigo"))]) (vertica . [(20131217 711) ((sql (3 0))) "Vertica SQL mode extension" single ((:keywords "sql" "vertica"))]) (verify-url . [(20160426 528) ((cl-lib (0 5))) "find out invalid urls in the buffer or region" single ((:url . "https://github.com/lujun9972/verify-url") (:keywords "convenience" "usability" "url"))]) (vector-utils . [(20140508 1341) nil "Vector-manipulation utility functions" single ((:url . "http://github.com/rolandwalker/vector-utils") (:keywords "extensions"))]) (vdirel . [(20151215 2255) ((emacs (24 4)) (org-vcard (0 1 0)) (helm (1 7 0)) (seq (1 11))) "Manipulate vdir (i.e., vCard) repositories" single ((:keywords "vdirsyncer" "vdir" "vcard" "carddav" "contact" "addressbook" "helm"))]) (vdiff . [(20160803 1035) ((emacs (24 4)) (hydra (0 13 0))) "A diff tool similar to vimdiff" single ((:url . "https://github.com/justbur/emacs-vdiff") (:keywords "diff"))]) (vcomp . [(20140906 1508) nil "compare version strings" single ((:url . "https://github.com/tarsius/vcomp") (:keywords "versions"))]) (vcl-mode . [(20160613 746) nil "Syntax highlighting for Varnish Command Language" single nil]) (vc-osc . [(20120910 211) nil "non-resident support for osc version-control" single nil]) (vc-fossil . [(20160324 349) nil "VC backend for the fossil sofware configuraiton management system" tar nil]) (vc-darcs . [(20151225 1228) nil "a VC backend for darcs" single ((:keywords "vc"))]) (vc-check-status . [(20160108 216) nil "Warn you when quitting emacs and leaving repo dirty." tar ((:url . "https://github.com/thisirs/vc-check-status") (:keywords "vc" "convenience"))]) (vc-auto-commit . [(20160108 215) nil "Auto-committing feature for your repository" tar ((:url . "http://github.com/thisirs/vc-auto-commit.git") (:keywords "vc" "convenience"))]) (vbasense . [(20140221 1553) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 1))) "provide a environment like Visual Basic Editor." tar ((:url . "https://github.com/aki2o/emacs-vbasense") (:keywords "vba" "completion"))]) (vala-snippets . [(20150428 2052) ((yasnippet (0 8 0))) "Yasnippets for Vala" tar ((:url . "https://github.com/gopar/vala-snippets"))]) (vala-mode . [(20150324 1525) nil "Vala mode derived mode" single ((:keywords "vala" "languages" "oop"))]) (vagrant-tramp . [(20160427 1632) ((dash (2 12 0))) "Vagrant method for TRAMP" tar ((:url . "https://github.com/dougm/vagrant-tramp") (:keywords "vagrant"))]) (vagrant . [(20160505 130) nil "Manage a vagrant box from emacs" single ((:url . "https://github.com/ottbot/vagrant.el") (:keywords "vagrant" "chef"))]) (v2ex-mode . [(20160719 2045) ((cl-lib (0 5)) (request (0 2)) (let-alist (1 0 3))) "Major mode for visit http://v2ex.com/ site." single ((:url . "https://github.com/aborn/v2ex-mode") (:keywords "v2ex" "v2ex.com"))]) (uzumaki . [(20150119 1706) ((cl-lib (0 5))) "A simple buffer cycler" single ((:url . "http://github.com/geyslan/uzumaki") (:keywords "buffer" "convenience"))]) (uuidgen . [(20140918 1601) nil "Provides various UUID generating functions" single ((:keywords "extensions" "lisp" "tools"))]) (uuid . [(20120910 151) nil "UUID's for EmacsLisp" single ((:keywords "lisp"))]) (utop . [(20151105 247) ((emacs (24))) "Universal toplevel for OCaml" single ((:url . "https://github.com/diml/utop") (:keywords "ocaml" "languages"))]) (use-package-chords . [(20160530 1042) ((use-package (2 1)) (bind-key (1 0)) (bind-chord (0 2))) "key-chord keyword for use-package" single ((:url . "https://github.com/waymondo/use-package-chords") (:keywords "convenience" "tools" "extensions"))]) (use-package . [(20160815 1137) ((bind-key (1 0)) (diminish (0 44))) "A use-package declaration for simplifying your .emacs" single ((:url . "https://github.com/jwiegley/use-package") (:keywords "dotemacs" "startup" "speed" "config" "package"))]) (usage-memo . [(20110722 851) nil "integration of Emacs help system and memo" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/usage-memo.el") (:keywords "convenience" "languages" "lisp" "help" "tools" "docs"))]) (urlenc . [(20140116 656) nil "URL encoding/decoding utility for Emacs." single ((:url . "https://github.com/buzztaiki/urlenc-el") (:keywords "url"))]) (url-shortener . [(20160404 1959) nil "shorten long url and expand tinyurl" single ((:url . "https://github.com/yuyang0/url-shortener"))]) (unkillable-scratch . [(20160504 1903) nil "Disallow buffers from being killed by regexp -- default is *scratch* buffer" single ((:keywords "scratch"))]) (unison-mode . [(20160513 801) nil "Syntax highlighting for unison file synchronization program" single ((:url . "https://github.com/impaktor/unison-mode") (:keywords "symchronization" "unison"))]) (unison . [(20160704 40) ((emacs (24 1))) "sync with Unison" single ((:url . "http://github.com/unhammer/unison.el") (:keywords "sync"))]) (unipoint . [(20140113 1424) nil "a simple way to insert unicode characters by TeX name" single ((:url . "https://github.com/apgwoz/unipoint"))]) (unify-opening . [(20151116 1648) ((emacs (24 4))) "Make everything use the same mechanism to open files" single ((:url . "https://github.com/DamienCassou/unify-opening") (:keywords "dired" "org" "mu4e" "open" "runner" "extension" "file"))]) (unidecode . [(20140317 2118) ((cl-lib (0 4))) "Convert Unicode text into safe ASCII strings" tar nil]) (unicode-whitespace . [(20140508 1341) ((ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "teach whitespace-mode about fancy characters" single ((:url . "http://github.com/rolandwalker/unicode-whitespace") (:keywords "faces" "wp" "interface"))]) (unicode-troll-stopper . [(20151023 1831) nil "Minor mode for Highlighting Unicode homoglyphs" single ((:url . "https://github.com/camsaul/emacs-unicode-troll-stopper") (:keywords "unicode"))]) (unicode-progress-reporter . [(20140508 1341) ((emacs (24 1 0)) (ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Progress-reporter with fancy characters" single ((:url . "http://github.com/rolandwalker/unicode-progress-reporter") (:keywords "interface"))]) (unicode-input . [(20141218 2320) nil "Support for unicode character input" single ((:keywords "unicode" "input"))]) (unicode-fonts . [(20150826 1532) ((font-utils (0 7 8)) (ucs-utils (0 8 2)) (list-utils (0 4 2)) (persistent-soft (0 8 10)) (pcache (0 3 1))) "Configure Unicode fonts" single ((:url . "http://github.com/rolandwalker/unicode-fonts") (:keywords "i18n" "faces" "frames" "wp" "interface"))]) (unicode-escape . [(20160614 534) ((emacs (24)) (names (20151201 0)) (dash (2 12 1))) "Escape/Unescape unicode notations" single ((:url . "https://github.com/kosh04/unicode-escape.el") (:keywords "i18n" "unicode"))]) (unicode-enbox . [(20140508 1341) ((string-utils (0 3 2)) (ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Surround a string with box-drawing characters" single ((:url . "http://github.com/rolandwalker/unicode-enbox") (:keywords "extensions" "interface"))]) (unicode-emoticons . [(20150204 308) nil "Shortcuts for common unicode emoticons" single ((:url . "https://github.com/hagleitn/unicode-emoticons") (:keywords "games" "entertainment" "comms"))]) (unfill . [(20160816 2300) nil "Unfill paragraphs or regions, and toggle between filled & unfilled" single ((:url . "https://github.com/purcell/unfill") (:keywords "utilities"))]) (undohist . [(20150315 542) ((cl-lib (1 0))) "Persistent undo history for GNU Emacs" single ((:keywords "convenience"))]) (undo-tree . [(20140509 522) nil "Treat undo history as a tree" single ((:url . "http://www.dr-qubit.org/emacs.php") (:keywords "convenience" "files" "undo" "redo" "history" "tree"))]) (underwater-theme . [(20131117 1602) nil "A gentle, deep blue color theme" single ((:keywords "faces"))]) (undercover . [(20160329 737) ((emacs (24)) (dash (2 0 0)) (shut-up (0 3 2))) "Test coverage library for Emacs" single ((:url . "https://github.com/sviridov/undercover.el") (:keywords "lisp" "tests" "coverage" "tools"))]) (uncrustify-mode . [(20130707 659) nil "Minor mode to automatically uncrustify." single ((:keywords "uncrustify"))]) (unbound . [(20160505 2355) nil "Find convenient unbound keystrokes" single ((:keywords "keyboard"))]) (ukrainian-holidays . [(20130720 649) nil "Ukrainian holidays for Emacs calendar." single ((:url . "https://github.com/abo-abo/ukrainian-holidays"))]) (ujelly-theme . [(20160722 1850) nil "Ujelly theme for GNU Emacs 24 (deftheme)" single ((:url . "http://github.com/marktran/color-theme-ujelly"))]) (uimage . [(20160901 521) nil "An iimage like mode with the ability to display url images" single ((:keywords "lisp" "url" "image"))]) (ucs-utils . [(20150826 714) ((persistent-soft (0 8 8)) (pcache (0 2 3)) (list-utils (0 4 2))) "Utilities for Unicode characters" tar ((:url . "http://github.com/rolandwalker/ucs-utils") (:keywords "i18n" "extensions"))]) (ucs-cmds . [(20151231 1616) nil "Macro to create commands that insert Unicode chars." single ((:url . "http://www.emacswiki.org/ucs-cmds.el") (:keywords "unicode" "characters" "encoding" "commands" "ucs-names"))]) (ubuntu-theme . [(20150805 806) nil "A theme inspired by the default terminal colors in Ubuntu" single ((:url . "http://github.com/rocher/ubuntu-theme"))]) (typoscript-mode . [(20160719 212) nil "No description available." single nil]) (typo . [(20160121 330) nil "Minor mode for typographic editing" single ((:url . "https://github.com/jorgenschaefer/typoel") (:keywords "convenience" "wp"))]) (typit . [(20160531 931) ((emacs (24 4)) (f (0 18)) (mmt (0 1 1))) "Typing game similar to tests on 10 fast fingers" tar ((:url . "https://github.com/mrkkrp/typit") (:keywords "games"))]) (typing-game . [(20160426 520) nil "a simple typing game" single ((:keywords "lisp" "game"))]) (typing . [(20121026 1418) nil "The Typing Of Emacs" single ((:url . "http://www.emacswiki.org/emacs/TypingOfEmacs") (:keywords "games"))]) (typescript-mode . [(20160719 2353) nil "Major mode for editing typescript" single ((:url . "http://github.com/ananthakumaran/typescript.el") (:keywords "typescript" "languages"))]) (typed-clojure-mode . [(20151003 1122) ((clojure-mode (2 1 1)) (cider (0 10 0 -3))) "Typed Clojure minor mode for Emacs" tar ((:url . "https://github.com/typedclojure/typed-clojure-mode"))]) (twittering-mode . [(20160710 1017) nil "Major mode for Twitter" single ((:url . "http://twmode.sf.net/") (:keywords "twitter" "web"))]) (twilight-theme . [(20120412 603) nil "Twilight theme for GNU Emacs 24 (deftheme)" single nil]) (twilight-bright-theme . [(20130605 143) nil "A Emacs 24 faces port of the TextMate theme" single ((:url . "https://github.com/jimeh/twilight-bright-theme.el") (:keywords "themes"))]) (twilight-anti-bright-theme . [(20160622 148) nil "A soothing Emacs 24 light-on-dark theme" single ((:url . "https://github.com/jimeh/twilight-anti-bright-theme.el") (:keywords "themes"))]) (twig-mode . [(20130220 1050) nil "A major mode for twig" single nil]) (turnip . [(20150308 2329) ((dash (2 6 0)) (s (1 9 0))) "Interacting with tmux from Emacs" single ((:keywords "terminals" "tools"))]) (turkish . [(20160324 323) nil "Convert to Turkish characters on-the-fly" single ((:url . "http://www.denizyuret.com/2006/11/emacs-turkish-mode.html") (:keywords "turkish" "languages" "automatic" "conversion"))]) (tup-mode . [(20140410 914) nil "Major mode for editing files for Tup" single ((:url . "https://github.com/ejmr/tup-mode"))]) (tumblesocks . [(20140215 1247) ((htmlize (1 39)) (oauth (1 0 3)) (markdown-mode (1 8 1))) "An Emacs tumblr client." tar nil]) (tumble . [(20160111 2329) ((http-post-simple (0)) (cl-lib (0 5))) "an Tumblr mode for Emacs" single ((:keywords "tumblr"))]) (tuareg . [(20160710 1045) ((caml (3 12 0 1))) "OCaml mode for Emacs." tar ((:url . "https://github.com/ocaml/tuareg") (:keywords "ocaml" "languages"))]) (ttrss . [(20130409 1049) ((emacs (23 1))) "Tiny Tiny RSS elisp bindings" single ((:url . "https://github.com/pedros/ttrss.el") (:keywords "news" "local"))]) (ttl-mode . [(20160505 132) nil "mode for Turtle (and Notation 3)" single nil]) (tt-mode . [(20130804 410) nil "Emacs major mode for editing Template Toolkit files." single nil]) (tss . [(20150913 708) ((auto-complete (1 4 0)) (json-mode (1 1 0)) (log4e (0 2 0)) (yaxception (0 1))) "provide a interface for auto-complete.el/flymake.el on typescript-mode." tar ((:url . "https://github.com/aki2o/emacs-tss") (:keywords "typescript" "completion"))]) (try . [(20160226 730) ((emacs (24))) "Try out Emacs packages." single ((:url . "http://github.com/larstvei/try") (:keywords "packages"))]) (truthy . [(20140508 1341) ((list-utils (0 4 2))) "Test the content of a value" single ((:url . "http://github.com/rolandwalker/truthy") (:keywords "extensions"))]) (trr . [(20160620 1505) nil "a type-writing training program on GNU Emacs." tar ((:keywords "games" "faces"))]) (tronesque-theme . [(20150125 241) nil "Color Theme based on Tron universe." single ((:url . "https://github.com/aurelienbottazini/tronesque"))]) (trident-mode . [(20130726 1207) ((emacs (24)) (slime (20130526)) (skewer-mode (1 5 0)) (dash (1 0 3))) "Live Parenscript interaction" single ((:url . "https://github.com/johnmastro/trident-mode.el") (:keywords "languages" "lisp" "processes" "tools"))]) (tree-mode . [(20151104 531) nil "A mode to manage tree widgets" single ((:keywords "help" "convenience" "widget"))]) (travis . [(20150825 438) ((s (1 9 0)) (dash (2 9 0)) (pkg-info (0 5 0)) (request (0 1 0))) "Emacs client for Travis" tar ((:url . "https://github.com/nlamirault/emacs-travis") (:keywords "travis"))]) (transpose-mark . [(20150405 16) nil "Transpose data using the Emacs mark" single ((:keywords "transpose" "convenience"))]) (transpose-frame . [(20151126 626) nil "Transpose windows arrangement in a frame" single ((:keywords "window"))]) (transmission . [(20160731 1035) ((emacs (24 4)) (let-alist (1 0 3))) "Interface to a Transmission session" single ((:keywords "comm" "tools"))]) (transfer-sh . [(20160828 424) ((async (1 0))) "Simple interface for sending buffer contents to transfer.sh" single ((:keywords "cloud" "upload" "share"))]) (tramp-term . [(20141104 1345) nil "Automatic setup of directory tracking in ssh sessions." single ((:url . "https://github.com/randymorris/tramp-term.el") (:keywords "tramp" "ssh"))]) (tramp-hdfs . [(20151028 2036) nil "Tramp extension to access hadoop/hdfs file system in Emacs" single ((:keywords "tramp" "emacs" "hdfs" "hadoop" "webhdfs" "rest"))]) (tracwiki-mode . [(20150119 821) ((xml-rpc (1 6 8))) "Emacs Major mode for working with Trac" single ((:keywords "trac" "wiki" "tickets"))]) (tracking . [(20151129 319) nil "Buffer modification tracking" tar ((:url . "https://github.com/jorgenschaefer/circe/wiki/Tracking"))]) (traad . [(20151225 2334) ((deferred (0 3 2)) (popup (0 5 0)) (request (0 2 0)) (request-deferred (0 2 0)) (python-environment (0 0 2))) "emacs interface to the traad refactoring server." single ((:url . "https://github.com/abingham/traad"))]) (toxi-theme . [(20160424 1426) ((emacs (24))) "A dark color theme by toxi" single ((:url . "http://bitbucket.org/postspectacular/toxi-theme/"))]) (tox . [(20160810 855) nil "Launch current python test with tox" single ((:url . "https://github.com/chmouel/tox.el") (:keywords "convenience" "tox" "python" "tests"))]) (totd . [(20150519 740) ((s (1 9 0)) (cl-lib (0 5))) "Display a random daily emacs command." single ((:keywords "help"))]) (tornado-template-mode . [(20141128 208) nil "A major mode for editing tornado templates" single nil]) (top-mode . [(20130605 1039) nil "run \"top\" from emacs" single ((:keywords "extensions" "processes"))]) (tool-bar+ . [(20151231 1615) nil "Extensions to standard library tool-bar.el" single ((:url . "http://www.emacswiki.org/tool-bar%2b.el") (:keywords "tool-bar" "convenience" "mouse" "button" "frame"))]) (tommyh-theme . [(20131004 1630) nil "A bright, bold-colored theme for emacs" single nil]) (toml-mode . [(20160910 1810) nil "Major mode for editing TOML files" single ((:url . "https://github.com/dryman/toml-mode.el") (:keywords "data" "toml"))]) (toml . [(20130903 555) nil "TOML (Tom's Obvious, Minimal Language) parser" single ((:url . "https://github.com/gongo/emacs-toml") (:keywords "toml" "parser"))]) (tomatinho . [(20160531 1328) nil "Tomatinho" tar ((:keywords "time" "productivity" "pomodoro technique"))]) (toggle-window . [(20141207 748) nil "toggle current window size between half and full" single ((:url . "https://github.com/deadghost/toggle-window") (:keywords "hide" "window"))]) (toggle-test . [(20140722 2237) nil "Toggle between source and test files in various programming languages" single ((:url . "https://github.com/rags/toggle-test") (:keywords "tdd" "test" "toggle" "productivity"))]) (toggle-quotes . [(20140710 226) nil "Toggle between single and double quoted string" single ((:url . "https://github.com/toctan/toggle-quotes.el") (:keywords "convenience" "quotes"))]) (toggle . [(20160331 100) ((cl-lib (0 5))) "quickly open corresponding file (eg test vs impl)." single ((:keywords "files" "extensions" "convenience"))]) (togetherly . [(20150820 138) ((cl-lib (0 3))) "allow multiple clients to edit a single buffer online" single ((:url . "http://hins11.yu-yake.com/"))]) (todotxt-mode . [(20150424 704) nil "Major mode for editing todo.txt files" single ((:keywords "wp" "files"))]) (todotxt . [(20160913 1110) nil "A major mode for editing todo.txt files" single ((:url . "https://github.com/rpdillon/todotxt.el") (:keywords "todo.txt" "todotxt" "todotxt.el"))]) (todochiku . [(20150112 1254) nil "A mode for interfacing with Growl, Snarl, and the like." single nil]) (toc-org . [(20160711 25) nil "add table of contents to org-mode files (formerly, org-toc)" single ((:url . "https://github.com/snosov1/toc-org") (:keywords "org-mode" "org-toc" "toc-org" "org" "toc" "table" "of" "contents"))]) (tmmofl . [(20121025 401) nil "Calls functions dependant on font lock highlighting at point" single ((:keywords "minor mode" "font lock" "toggling."))]) (tldr . [(20160807 2022) ((emacs (24 3))) "tldr client for Emacs" single ((:url . "https://github.com/kuanyui/tldr.el") (:keywords "tools" "docs"))]) (tj-mode . [(20150826 851) ((emacs (24)) (tern (0 0 1)) (js2-mode (20150514))) "Highlight JavaScript with Tern" single ((:url . "https://github.com/katspaugh/tj-mode") (:keywords "languages" "javascript"))]) (tinysegmenter . [(20141124 213) ((cl-lib (0 5))) "Super compact Japanese tokenizer in Javascript ported to emacs lisp" single ((:url . "https://github.com/myuhe/tinysegmenter.el") (:keywords "convenience"))]) (tiny-menu . [(20160606 1711) ((emacs (24 4))) "Display tiny menus." single ((:url . "https://github.com/aaronbieber/tiny-menu.el") (:keywords "menu" "tools"))]) (tiny . [(20160811 246) nil "Quickly generate linear ranges in Emacs" single ((:url . "https://github.com/abo-abo/tiny") (:keywords "convenience"))]) (tinkerer . [(20150219 2249) ((s (1 2 0))) "Elisp wrapper for Tinkerer Blogging Engine." single ((:url . "https://github.com/yyr/tinkerer.el") (:keywords "tinkerer" "blog" "wrapper"))]) (timp . [(20160618 103) ((emacs (24 4)) (cl-lib (0 5)) (fifo-class (1 0)) (signal (1 0))) "Multithreading library" tar ((:url . "https://github.com/mola-T/timp") (:keywords "internal" "lisp" "processes" "tools"))]) (timesheet . [(20160530 1445) ((s (1)) (org (7)) (auctex (11))) "Timesheet management add-on for org-mode" tar ((:url . "https://github.com/tmarble/timesheet.el") (:keywords "org" "timesheet"))]) (timer-revert . [(20150122 1232) nil "minor mode to revert buffer for a given time interval." tar nil]) (timecop . [(20160520 352) ((cl-lib (0 5)) (datetime-format (0 0 1))) "Freeze Time for testing" single ((:url . "https://github.com/zonuexe/emacs-datetime") (:keywords "datetime" "testing"))]) (time-ext . [(20100515 1740) nil "No description available." single nil]) (tidy . [(20111222 956) nil "Interface to the HTML Tidy program" single ((:url . "http://www.emacswiki.org/elisp/tidy.el") (:keywords "languages"))]) (tide . [(20160911 2207) ((dash (2 10 0)) (flycheck (27)) (emacs (24 1)) (typescript-mode (0 1)) (cl-lib (0 5))) "Typescript Interactive Development Environment" tar ((:url . "http://github.com/ananthakumaran/tide") (:keywords "typescript"))]) (thumb-through . [(20120118 2134) nil "Plain text reader of HTML documents" single ((:keywords "html"))]) (thumb-frm . [(20151231 1612) ((frame-fns (0)) (frame-cmds (0))) "Commands for thumbnail frames." single ((:url . "http://www.emacswiki.org/thumb-frm.el") (:keywords "frame" "icon"))]) (thrift . [(20140312 1348) nil "Major mode for Apache Thrift files" single ((:keywords "files"))]) (threes . [(20160820 542) ((emacs (24)) (seq (1 11))) "A clone of Threes (a tiny puzzle game)" single ((:url . "https://github.com/xuchunyang/threes.el") (:keywords "games"))]) (thread-dump . [(20130323 1025) nil "Java thread dump viewer" single ((:url . "http://github.com/nd/thread-dump.el"))]) (thingopt . [(20160520 1618) nil "Thing at Point optional utilities" single ((:keywords "convenience"))]) (thingatpt+ . [(20160906 1018) nil "Extensions to `thingatpt.el'." single ((:url . "http://www.emacswiki.org/thingatpt%2b.el") (:keywords "extensions" "matching" "mouse"))]) (thing-cmds . [(20151231 1609) ((hide-comnt (0))) "Commands that use things, as defined by `thingatpt.el'." single ((:url . "http://www.emacswiki.org/thing-cmds.el") (:keywords "thingatpt" "thing" "region" "selection"))]) (thesaurus . [(20121125 1137) nil "replace a word with a synonym looked up in a web service." single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/thesaurus.el") (:keywords "thesaurus" "synonym"))]) (therapy . [(20151113 1153) ((emacs (24))) "Hooks for managing multiple Python major versions" single ((:url . "https://github.com/abingham/therapy"))]) (theme-looper . [(20150723 1104) ((cl-lib (0 5))) "Loop thru the available color-themes" single ((:url . "http://ismail.teamfluxion.com") (:keywords "convenience" "color-themes"))]) (theme-changer . [(20130725 1919) nil "Sunrise/Sunset Theme Changer for Emacs" single ((:url . "https://github.com/hadronzoo/theme-changer") (:keywords "color-theme" "deftheme" "solar" "sunrise" "sunset"))]) (tfs . [(20120508 1120) nil "MS Team Foundation Server commands for Emacs." single ((:url . "http://cheeso.members.winisp.net/srcview.aspx?dir=emacs&file=tfs.el"))]) (textmate-to-yas . [(20160409 1008) nil "Import Textmate macros into yasnippet syntax" tar ((:url . "https://github.com/mlf176f2/textmate-to-yas.el/") (:keywords "yasnippet" "textmate"))]) (textmate . [(20110816 1446) nil "TextMate minor mode for Emacs" single ((:keywords "textmate" "osx" "mac"))]) (textile-mode . [(20151203 53) nil "Textile markup editing major mode" single nil]) (tex-smart-umlauts . [(20160427 58) nil "Smart umlaut conversion for TeX." single ((:url . "http://hub.darcs.net/lyro/tex-smart-umlauts") (:keywords "tex" "wp"))]) (test-simple . [(20160303 36) ((cl-lib (0))) "Simple Unit Test Framework for Emacs Lisp" single ((:url . "http://github.com/rocky/emacs-test-simple") (:keywords "unit-test"))]) (test-kitchen . [(20160516 1348) nil "Run test-kitchen inside of emacs" single ((:url . "http://github.com/jjasghar/test-kitchen-el") (:keywords "chef" "ruby" "test-kitchen"))]) (test-case-mode . [(20130525 734) ((fringe-helper (0 1 1))) "unit test front-end" single ((:url . "http://nschum.de/src/emacs/test-case-mode/") (:keywords "tools"))]) (terraform-mode . [(20160823 31) ((hcl-mode (0 2)) (cl-lib (0 5))) "Major mode for terraform configuration file" single ((:url . "https://github.com/syohex/emacs-terraform-mode"))]) (tern-django . [(20160221 1123) ((emacs (24)) (tern (0 0 1)) (f (0 17 1))) "Create tern projects for django applications." tar ((:url . "https://github.com/proofit404/tern-django"))]) (tern-context-coloring . [(20160709 837) ((emacs (24 3)) (context-coloring (8 0 0)) (tern (0 0 1))) "Use Tern for context coloring" single ((:url . "https://github.com/jacksonrayhamilton/tern-context-coloring") (:keywords "convenience" "faces" "tools"))]) (tern-auto-complete . [(20160906 1204) ((tern (0 0 1)) (auto-complete (1 4)) (cl-lib (0 5)) (emacs (24))) "Tern Completion by auto-complete.el" single nil]) (tern . [(20160817 522) ((json (1 2)) (cl-lib (0 5)) (emacs (24))) "Tern-powered JavaScript integration" single ((:url . "http://ternjs.net/"))]) (termbright-theme . [(20151030 1935) ((emacs (24 1))) "a more usable theme for white-on-black terminals" single ((:url . "https://github.com/bmastenbrook/termbright-theme-el") (:keywords "themes"))]) (term-run . [(20151228 105) nil "Run arbitrary command in terminal buffer" single ((:url . "https://github.com/10sr/term-run-el") (:keywords "utility" "shell" "command" "term-mode"))]) (term-projectile . [(20160824 1049) ((term-manager (0 0 0)) (projectile (0 13 0)) (emacs (24))) "projectile terminal management" single ((:url . "https://www.github.com/IvanMalison/term-projectile") (:keywords "term" "manager" "projectile"))]) (term-manager . [(20160824 1049) ((dash (2 12 0)) (emacs (24 4))) "Contextual terminal management" tar ((:url . "https://www.github.com/IvanMalison/term-manager") (:keywords "term" "manager"))]) (term-cmd . [(20160517 345) ((emacs (24 0)) (dash (2 12 0)) (f (0 18 2))) "Send commands from programs running in term.el." tar nil]) (term-alert . [(20160517 348) ((emacs (24 0)) (term-cmd (1 1)) (alert (1 1)) (f (0 18 2))) "Notifications when commands complete in term.el." tar nil]) (term+mux . [(20140210 2349) ((term+ (0 1)) (tab-group (0 1))) "term+ terminal multiplexer and session management" single ((:url . "http://github.com/tarao/term+-el") (:keywords "terminal" "emulation"))]) (term+key-intercept . [(20140210 2350) ((term+ (0 1)) (key-intercept (0 1))) "term+ intercept key mapping" single ((:url . "http://github.com/tarao/term+-el") (:keywords "terminal" "emulation"))]) (term+ . [(20160404 355) nil "term-mode enhancement" tar ((:url . "https://github.com/tarao/term-plus-el") (:keywords "terminal" "emulation"))]) (ten-hundred-mode . [(20160409 551) ((cl-lib (0 5))) "use only the ten hundred most usual words" tar nil]) (telephone-line . [(20160302 1515) ((emacs (24 4)) (cl-lib (0 5)) (cl-generic (0 2)) (seq (1 8))) "Rewrite of Powerline" tar ((:url . "https://github.com/dbordak/telephone-line") (:keywords "mode-line"))]) (telepathy . [(20131209 458) nil "Access Telepathy from Emacs" single ((:keywords "telepathy" "tools"))]) (tea-time . [(20120331 120) nil "Simple timer package, useful to make perfect tea." single ((:keywords "timer" "tea-time"))]) (tdd-status-mode-line . [(20131123 916) nil "TDD status on the mode-line" single ((:url . "https://github.com/algernon/tdd-status-mode-line") (:keywords "faces" "tdd"))]) (tco . [(20160810 1712) ((dash (1 2 0)) (emacs (24))) "tail-call optimisation for Emacs lisp" single nil]) (tc . [(20150113 1926) nil "a Japanese input method with T-Code on Emacs" tar nil]) (tbx2org . [(20140224 759) ((dash (2 5 0)) (s (1 8 0)) (cl-lib (0 4))) "Tinderbox to org-mode conversion" single ((:url . "https://github.com/istib/tbx2org") (:keywords "org-mode"))]) (tawny-mode . [(20160504 1046) ((cider (0 12)) (emacs (25))) "Ontology Editing with Tawny-OWL" single nil]) (tao-theme . [(20160608 215) nil "Light & dark themes with greyscale palettes generated from the golden mean" tar nil]) (tangotango-theme . [(20150702 104) nil "Tango Palette color theme for Emacs 24." single ((:url . "https://github.com/juba/color-theme-tangotango") (:keywords "tango" "palette" "color" "theme" "emacs"))]) (tango-plus-theme . [(20140425 1511) nil "A color theme based on the tango palette" single ((:url . "https://github.com/tmalsburg/tango-plus-theme"))]) (tango-2-theme . [(20120312 1325) nil "Tango 2 color theme for GNU Emacs 24" single nil]) (take-off . [(20140531 217) ((emacs (24 3)) (web-server (0 1 0))) "Emacs remote web access" tar ((:url . "https://github.com/tburette/take-off"))]) (tagedit . [(20160516 754) ((s (1 3 1)) (dash (1 0 3))) "Some paredit-like features for html-mode" single ((:keywords "convenience"))]) (tabula-rasa . [(20141215 2147) ((emacs (24 4))) "Distraction free writing mode" single ((:url . "https://github.com/idomagal/Tabula-Rasa/blob/master/tabula-rasa.el") (:keywords "distraction free" "writing"))]) (tablist . [(20160424 235) ((emacs (24 3))) "Extended tabulated-list-mode" tar ((:keywords "extensions" "lisp"))]) (tabbar-ruler . [(20160801 2007) ((tabbar (2 0 1)) (powerline (2 3)) (mode-icons (0 4 0)) (cl-lib (0 5))) "Pretty tabbar, autohide, use both tabbar/ruler" tar ((:url . "http://github.com/mlf176f2/tabbar-ruler.el") (:keywords "tabbar" "ruler mode" "menu" "tool bar."))]) (tabbar . [(20160524 1401) nil "Display a tab bar in the header line" tar ((:keywords "convenience"))]) (tab-jump-out . [(20151005 1830) ((dash (2 10)) (emacs (24 4))) "Use tab to jump out of delimiter pairs." single ((:keywords "tab" "editing"))]) (tab-group . [(20140306 650) nil "Grouped tabs and their tabbar" single ((:url . "http://github.com/tarao/tab-group-el") (:keywords "convenience" "tabs"))]) (ta . [(20160619 945) ((emacs (24 3)) (cl-lib (0 5))) "A tool to deal with Chinese homophonic characters" single ((:url . "http://github.com/kuanyui/ta.el") (:keywords "tools"))]) (systemtap-mode . [(20151122 1140) nil "A mode for SystemTap" single ((:url . "https://github.com/ruediger/systemtap-mode") (:keywords "tools" "languages"))]) (systemd . [(20160731 1630) ((emacs (24 4))) "Major mode for editing systemd units" tar ((:keywords "tools" "unix"))]) (system-specific-settings . [(20140818 757) nil "Apply settings only on certain systems" single ((:url . "https://github.com/DarwinAwardWinner/emacs-system-specific-settings") (:keywords "configuration"))]) (system-packages . [(20160726 1344) ((cl-lib (0 5))) "functions to manage system packages" single ((:url . "https://github.com/jabranham/system-packages"))]) (syslog-mode . [(20160525 1914) ((hide-lines (20130623))) "Major-mode for viewing log files" single ((:url . "https://github.com/vapniks/syslog-mode") (:keywords "unix"))]) (syntax-subword . [(20160519 1205) nil "make operations on words more fine-grained" single nil]) (syntactic-sugar . [(20140508 1341) nil "Effect-free forms such as if/then/else" single ((:url . "http://github.com/rolandwalker/syntactic-sugar") (:keywords "extensions"))]) (synquid . [(20160617 2156) ((flycheck (27)) (emacs (24 3))) "Major mode for editing Synquid files" single ((:url . "https://github.com/cpitclaudel/synquid-mode") (:keywords "languages"))]) (synosaurus . [(20160812 723) ((cl-lib (0 5))) "An extensible thesaurus supporting lookup and substitution." tar ((:url . "https://github.com/rootzlevel/synosaurus"))]) (synonyms . [(20160328 654) nil "Look up synonyms for a word or phrase in a thesaurus." single ((:url . "http://www.emacswiki.org/synonyms.el") (:keywords "text" "dictionary" "thesaurus" "spelling" "apropos" "help"))]) (synonymous . [(20160721 2255) ((emacs (24)) (cl-lib (0 5)) (request (0 2 0))) "A thesaurus at your fingertips" single ((:url . "http://github.com/toroidal-code/synonymous.el") (:keywords "utility"))]) (syndicate . [(20160603 823) ((evil (1 0))) "evil keybindings for org-mode" single ((:url . "https://github.com/KNX32542/syndicate.git") (:keywords "evil" "org" "bindings"))]) (sync-recentf . [(20160326 1301) nil "Synchronize the recent files list between Emacs instances" single ((:url . "https://github.com/ffevotte/sync-recentf") (:keywords "recentf"))]) (symon-lingr . [(20150719 642) ((symon (1 1 2)) (cl-lib (0 5))) "A notification-based Lingr client powered by symon.el" single ((:url . "http://hins11.yu-yake.com/"))]) (symon . [(20160514 1904) nil "tiny graphical system monitor" single ((:url . "http://hins11.yu-yake.com/"))]) (sx . [(20160125 1601) ((emacs (24 1)) (cl-lib (0 5)) (json (1 3)) (markdown-mode (2 0)) (let-alist (1 0 3))) "StackExchange client. Ask and answer questions on Stack Overflow, Super User, and the likes" tar ((:url . "https://github.com/vermiculus/sx.el/") (:keywords "help" "hypermedia" "tools"))]) (sws-mode . [(20150317 1245) nil "(S)ignificant (W)hite(S)pace mode" single ((:url . "https://github.com/brianc/jade-mode"))]) (swoop . [(20160120 915) ((ht (2 0)) (pcre2el (1 5)) (async (1 1)) (emacs (24))) "Peculiar buffer navigation for Emacs" tar ((:url . "https://github.com/ShingoFukuyama/emacs-swoop") (:keywords "swoop" "inner" "buffer" "search" "navigation"))]) (switch-window . [(20160229 334) ((cl-lib (0 5))) "A *visual* way to choose a window to switch to" single ((:url . "https://github.com/dimitri/switch-window") (:keywords "window" "navigation"))]) (switch-buffer-functions . [(20160702 2157) nil "Hook run when current buffer changed" single ((:url . "https://github.com/10sr/switch-buffer-functions-el") (:keywords "hook" "utility"))]) (swiper-helm . [(20151116 330) ((emacs (24 1)) (swiper (0 1 0)) (helm (1 5 3))) "Helm version of Swiper." single ((:url . "https://github.com/abo-abo/swiper-helm") (:keywords "matching"))]) (swiper . [(20160905 940) ((emacs (24 1)) (ivy (0 8 0))) "Isearch with an overview. Oh, man!" single ((:url . "https://github.com/abo-abo/swiper") (:keywords "matching"))]) (swift3-mode . [(20160911 741) ((emacs (24 4))) "Major-mode for Apple's Swift programming language." tar ((:url . "https://github.com/taku0/swift3-mode") (:keywords "languages" "swift"))]) (swift-mode . [(20160124 236) ((emacs (24 4))) "Major-mode for Apple's Swift programming language." single ((:keywords "languages" "swift"))]) (sweetgreen . [(20151207 916) ((dash (2 12 1)) (helm (1 5 6)) (request (0 2 0)) (cl-lib (0 5))) "Order Salads from sweetgreen.com" single ((:url . "https://www.github.com/CestDiego/sweetgreen.el") (:keywords "salad" "food" "sweetgreen" "request"))]) (swbuff-x . [(20130607 314) ((swbuff (19991231 1800))) "Modifications to David Ponce's swbuff" single ((:url . "http://www.emacswiki.org/elisp/swbuff-x.el") (:keywords "files" "convenience"))]) (swbuff . [(20160824 707) nil "Quick switch between Emacs buffers." single ((:keywords "extensions" "convenience"))]) (swap-regions . [(20160413 1023) ((emacs (24 3))) "Swap two regions of text" single ((:url . "https://github.com/xuchunyang/swap-regions.el") (:keywords "convenience"))]) (swap-buffers . [(20150506 1439) nil "The quickest way to swap buffers between windows. Based on switch-window package." single ((:url . "https://github.com/ekazakov/swap-buffers") (:keywords "window" "swap" "buffer" "exchange"))]) (swagger-to-org . [(20160610 1756) ((emacs (24)) (cl-lib (0 5)) (json (1 4))) "Convert a swagger.json file into an org-mode file" single ((:url . "https://github.com/ahungry/swagger-to-org") (:keywords "ahungry" "emacs" "swagger" "openapi" "orgmode" "org" "export"))]) (svg-mode-line-themes . [(20150425 1306) ((xmlgen (0 4))) "SVG-based themes for mode-line" tar ((:url . "https://github.com/sabof/svg-mode-line-themes"))]) (suscolors-theme . [(20160605 206) nil "Colorful theme, inspired by Gruvbox." single ((:url . "https://github.com/TheSuspiciousWombat/SusColors-emacs"))]) (supergenpass . [(20130328 2248) nil "SuperGenPass for Emacs" single ((:keywords "supergenpass"))]) (super-save . [(20160426 729) ((emacs (24 4))) "Auto-save buffers, based on your activity." single ((:url . "https://github.com/bbatsov/super-save") (:keywords "convenience"))]) (suomalainen-kalenteri . [(20151129 304) nil "Finnish national and Christian holidays for calendar" tar nil]) (sunshine . [(20160410 1317) ((cl-lib (0 5))) "Provide weather and forecast information." single ((:url . "https://github.com/aaronbieber/sunshine.el") (:keywords "tools" "weather"))]) (sunny-day-theme . [(20140413 1425) nil "Emacs24 theme with a light background." single ((:url . "http://github.com/mswift42/sunny-day-theme"))]) (summarye . [(20130328 327) nil "list up matched strings from a buffer, and display them in summary buffer" single nil]) (suggest . [(20160907 1830) ((emacs (24 4)) (loop (1 3)) (dash (2 13 0)) (s (1 11 0)) (f (0 18 2))) "suggest elisp functions that give the output requested" single ((:keywords "convenience"))]) (sudo-ext . [(20110116 2310) nil "No description available." single nil]) (sudo-edit . [(20160908 2310) ((emacs (24)) (cl-lib (0 5))) "Open files as another user" single ((:url . "https://github.com/nflath/sudo-edit") (:keywords "convenience"))]) (sudden-death . [(20140829 538) nil "Totsuzen-no-Shi" single ((:url . "https://github.com/yewton/sudden-death.el"))]) (subshell-proc . [(20130122 1322) nil "Functions for working with comints" single ((:url . "https://github.com/andrewmains12/subshell-proc"))]) (subr+ . [(20151231 1607) nil "Extensions to standard library `subr.el'." single ((:url . "http://www.emacswiki.org/simple%2b.el") (:keywords "strings" "text"))]) (sublimity . [(20160822 1856) nil "smooth-scrolling, minimap and distraction-free mode" tar ((:url . "http://hins11.yu-yake.com/"))]) (sublime-themes . [(20160111 122) nil "A collection of themes based on Sublime Text" tar ((:keywords "faces"))]) (subemacs . [(20160105 359) nil "Evaluating expressions in a fresh Emacs subprocess" single ((:url . "https://github.com/kbauer/subemacs") (:keywords "extensions" "lisp" "multiprocessing"))]) (subatomic256-theme . [(20130620 1910) nil "Fork of subatomic-theme for terminals." single ((:url . "https://github.com/cryon/subatomic256"))]) (subatomic-theme . [(20160126 738) nil "Low contrast bluish color theme" single ((:url . "https://github.com/cryon/subatomic") (:keywords "color-theme" "blue" "low contrast"))]) (stylus-mode . [(20150313 812) ((sws-mode (0))) "Major mode for editing .jade files" single ((:url . "https://github.com/brianc/jade-mode"))]) (stupid-indent-mode . [(20130816 1354) nil "Plain stupid indentation minor mode" single nil]) (stumpwm-mode . [(20140130 1816) nil "special lisp mode for evaluating code into running stumpwm" single ((:keywords "comm" "lisp" "tools"))]) (stripe-buffer . [(20141208 708) ((cl-lib (1 0))) "Use a different background for even and odd lines" single ((:url . "https://github.com/sabof/stripe-buffer"))]) (strings . [(20151231 1607) nil "Miscellaneous string functions." single ((:url . "http://www.emacswiki.org/strings.el") (:keywords "internal" "strings" "text"))]) (string-utils . [(20140508 1341) ((list-utils (0 4 2))) "String-manipulation utilities" single ((:url . "http://github.com/rolandwalker/string-utils") (:keywords "extensions"))]) (string-inflection . [(20150805 256) nil "underscore -> UPCASE -> CamelCase -> lowerCamelCase conversion of names" single ((:keywords "elisp"))]) (string-edit . [(20160410 2356) ((dash (1 2 0))) "Avoid escape nightmares by editing string in separate buffer" single nil]) (strie . [(20160211 1422) ((cl-lib (0 5))) "A simple trie data structure implementation" single nil]) (strace-mode . [(20160710 2134) nil "strace output syntax highlighting" single ((:keywords "languages"))]) (stock-ticker . [(20150204 252) ((s (1 9 0)) (request (0 2 0))) "Show stock prices in mode line" single ((:url . "https://github.com/hagleitn/stock-ticker") (:keywords "comms"))]) (stickyfunc-enhance . [(20150429 1114) ((emacs (24 3))) "An enhancement to stock `semantic-stickyfunc-mode'" single ((:url . "https://github.com/tuhdo/semantic-stickyfunc-enhance") (:keywords "c" "languages" "tools"))]) (sticky . [(20101129 1852) nil "Sticky key for capital letters" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sticky.el") (:keywords "convenience"))]) (stgit . [(20140213 348) nil "major mode for StGit interaction" single ((:url . "http://www.procode.org/stgit"))]) (stem . [(20131102 409) nil "Routines for stemming" single ((:url . "https://github.com/yuutayamada/stem") (:keywords "stemming"))]) (stekene-theme . [(20141108 1211) ((emacs (24))) "Low-contrast (except for strings) theme, in light and dark versions." tar nil]) (steam . [(20160427 231) ((cl-lib (0 5))) "Organize and launch Steam games" single ((:url . "http://github.com/Kungsgeten/steam.el") (:keywords "games"))]) (status . [(20151230 608) nil "This package adds support for status icons to Emacs." tar nil]) (state . [(20160422 550) ((emacs (24))) "Quick navigation between workspaces" single ((:url . "https://github.com/thisirs/state.git") (:keywords "convenience" "workspaces"))]) (stash . [(20151117 627) nil "lightweight persistent caching" single ((:url . "https://www.github.com/vermiculus/stash.el/") (:keywords "extensions" "data" "internal" "lisp"))]) (start-menu . [(20160426 525) ((cl-lib (0 5)) (config-parser (0 1))) "start-menu for executing external program like in windows" single ((:url . "https://github.com/lujun9972/el-start-menu") (:keywords "convenience" "menu"))]) (standoff-mode . [(20150628 1642) nil "Create stand-off markup, also called external markup." tar nil]) (stan-snippets . [(20160626 1518) ((stan-mode (9 0 5)) (yasnippet (0 8 0))) "Yasnippets for Stan" tar ((:url . "http://github.com/stan-dev/stan-mode") (:keywords "snippets"))]) (stan-mode . [(20160626 1518) nil "Major mode for editing Stan files" tar ((:url . "http://github.com/stan-dev/stan-mode") (:keywords "languanges"))]) (stack-mode . [(20150923 823) ((haskell-mode (13 14)) (cl-lib (0 5)) (flycheck (0 23))) "A minor mode enabling various features based on stack-ide." tar ((:url . "https://github.com/commercialhaskell/stack-ide") (:keywords "haskell" "stack"))]) (ssh-tunnels . [(20141219 318) ((cl-lib (0 5)) (emacs (24))) "Manage SSH tunnels" single ((:url . "http://github.com/death/ssh-tunnels") (:keywords "tools" "convenience"))]) (ssh-deploy . [(20160831 2219) nil "Deployment via SSH, global or per directory." single ((:url . "https://github.com/cjohansson/emacs-ssh-deploy") (:keywords "tools" "convenience"))]) (ssh-config-mode . [(20160326 552) nil "Mode for fontification of ~/.ssh/config" single ((:url . "http://www.mahalito.net/~harley/elisp/ssh-config-mode.el") (:keywords "ssh" "config" "emacs"))]) (ssh-agency . [(20160101 1435) ((emacs (24 4)) (dash (2 10 0))) "use ssh-agent on win32 from Emacs" single ((:url . "https://github.com/magit/ssh-agency"))]) (ssh . [(20120904 1342) nil "Support for remote logins using ssh." single ((:keywords "unix" "comm"))]) (srefactor . [(20160420 33) ((emacs (24 4))) "A refactoring tool based on Semantic parser framework" tar ((:url . "https://github.com/tuhdo/semantic-refactor") (:keywords "c" "languages" "tools"))]) (sr-speedbar . [(20150804 951) nil "Same frame speedbar" single ((:url . "http://www.emacswiki.org/emacs/download/sr-speedbar.el") (:keywords "speedbar" "sr-speedbar.el"))]) (sqlup-mode . [(20160904 838) nil "Upcase SQL words for you" single ((:url . "https://github.com/trevoke/sqlup-mode.el") (:keywords "sql" "tools" "redis" "upcase"))]) (sqlplus . [(20141009 739) nil "User friendly interface to SQL*Plus and support for PL/SQL compilation" single ((:keywords "sql" "sqlplus" "oracle" "plsql"))]) (sqlite . [(20150416 2215) nil "use sqlite via elisp" single nil]) (sql-mssql . [(20160512 137) ((emacs (24 4))) "Connect Microsoft SQL Server with sql.el in Linux/Unix environment" single ((:url . "https://github.com/tumashu/sql-mssql"))]) (sql-indent . [(20150424 1716) nil "indentation of SQL statements" single ((:url . "https://github.com/bsvingen/sql-indent") (:keywords "languages"))]) (sql-impala . [(20160427 1658) nil "comint support for Cloudera Impala" single ((:url . "https://github.com/jterk/sql-impala") (:keywords "sql" "impala"))]) (spu . [(20160515 157) ((emacs (24 4)) (signal (1 0)) (timp (1 2 0))) "Silently upgrade package in the background" tar ((:url . "https://github.com/mola-T/spu") (:keywords "convenience" "package"))]) (sprunge . [(20160229 1843) ((request (0 2 0)) (cl-lib (0 5))) "Upload pastes to sprunge.us" single ((:keywords "tools"))]) (sproto-mode . [(20151115 1005) nil "Major mode for editing sproto." single ((:keywords "sproto"))]) (sprintly-mode . [(20121005 2234) ((furl (0 0 2))) "Major mode for dealing with sprint.ly" single ((:url . "https://github.com/sprintly/sprintly-mode"))]) (springboard . [(20160329 1109) ((helm (1 6 9))) "Temporarily change default-directory for one command" single ((:url . "https://github.com/jwiegley/springboard") (:keywords "helm"))]) (spray . [(20160304 1420) nil "a speed reading mode" single ((:url . "https://github.com/ian-kelling/spray") (:keywords "convenience"))]) (spotlight . [(20150929 55) ((emacs (24 1)) (swiper (0 6 0)) (counsel (0 6 0))) "search files with Mac OS X spotlight" single ((:url . "http://www.pragmaticemacs.com") (:keywords "search" "external"))]) (spotify . [(20160816 15) ((cl-lib (0 5))) "Control the spotify application from emacs" single ((:url . "https://github.com/remvee/spotify-el") (:keywords "convenience"))]) (splitter . [(20130705 50) nil "Manage window splits" single ((:url . "https://github.com/chumpage/chumpy-windows") (:keywords "frames" "convenience"))]) (splitjoin . [(20150505 732) ((cl-lib (0 5))) "Transition between multiline and single-line code" single ((:url . "https://github.com/syohex/emacs-splitjoin"))]) (spike-theme . [(20160530 733) nil "A light color theme with muted, autumnal colors." single ((:url . "https://github.com/m31271n/spike-theme") (:keywords "color" "theme" "green"))]) (spice-mode . [(20160818 1749) ((emacs (24 3))) "Major mode for SPICE" single ((:url . "http://spice-mode.4t.com/") (:keywords "spice" "spice2g6" "spice3" "eldo" "hspice" "layla" "mondriaan" "fasthenry" "cdl" "spectre compatibility" "netlist editing"))]) (sphinx-frontend . [(20160606 820) nil "Launch build process for rst documents via sphinx." single ((:url . "https://github.com/kostafey/sphinx-frontend") (:keywords "compile" "sphinx" "restructuredtext"))]) (sphinx-doc . [(20160116 317) ((s (1 9 0)) (cl-lib (0 5)) (dash (2 10 0))) "Sphinx friendly docstrings for Python functions" single ((:url . "https://github.com/naiquevin/sphinx-doc.el") (:keywords "sphinx" "python"))]) (speed-type . [(20150120 2034) ((cl-lib (0 3))) "Practice touch and speed typing" single ((:url . "https://github.com/hagleitn/speed-type") (:keywords "games"))]) (speechd-el . [(20160710 359) nil "Client to speech synthesizers and Braille displays." tar nil]) (speech-tagger . [(20160224 2) ((cl-lib (0 5))) "tag parts of speech using coreNLP" tar ((:url . "https://github.com/cosmicexplorer/speech-tagger") (:keywords "speech" "tag" "nlp" "language" "corenlp" "parsing" "natural"))]) (speck . [(20160717 951) nil "minor mode for spell checking" single ((:keywords "spell" "checking"))]) (sparql-mode . [(20160728 1000) ((cl-lib (0 5)) (async (1 6))) "Edit and interactively evaluate SPARQL queries." tar ((:url . "https://github.com/ljos/sparql-mode"))]) (sparkline . [(20150101 519) ((cl-lib (0 3))) "Make sparkline images from a list of numbers" single ((:keywords "extensions"))]) (spark . [(20160414 1901) ((emacs (24 3))) "sparkline generation" single ((:url . "https://github.com/alvinfrancis/spark") (:keywords "lisp" "data"))]) (spaces . [(20130610 49) nil "Create and switch between named window configurations." single ((:url . "https://github.com/chumpage/chumpy-windows") (:keywords "frames" "convenience"))]) (spacemacs-theme . [(20160909 445) nil "Color theme with a dark and light versions" tar ((:keywords "color" "theme") (:url . "https://github.com/nashamri/spacemacs-theme"))]) (spaceline . [(20160801 211) ((emacs (24 3)) (cl-lib (0 5)) (powerline (2 3)) (dash (2 11 0)) (s (1 10 0))) "Modeline configuration library for powerline" tar ((:url . "https://github.com/TheBB/spaceline") (:keywords "mode-line" "powerline" "spacemacs"))]) (spacegray-theme . [(20150719 1231) ((emacs (24 1))) "A Hyperminimal UI Theme" single ((:url . "http://github.com/bruce/emacs-spacegray-theme") (:keywords "themes"))]) (sourcetalk . [(20140823 739) ((request (0 2 0))) "SourceTalk (http://sourcetalk.net) plugin for Emacs" single ((:url . "https://github.com/malroc/sourcetalk_emacs") (:keywords "sourcetalk" "code" "discussion"))]) (sourcemap . [(20160511 2137) ((cl-lib (0 5)) (emacs (24))) "Sourcemap parser" single ((:url . "https://github.com/syohex/emacs-sourcemap"))]) (sourcekit . [(20160510 2017) ((emacs (24 3)) (dash (2 12 1)) (dash-functional (1 2 0))) "Library to interact with sourcekittendaemon" single ((:url . "https://github.com/nathankot/company-sourcekit") (:keywords "tools" "processes"))]) (soundklaus . [(20160314 531) ((dash (2 12 1)) (emacs (24)) (emms (4 0)) (s (1 11 0)) (pkg-info (0 4)) (cl-lib (0 5)) (request (0 2 0))) "Play music on SoundCloud with Emacs via EMMS" tar ((:url . "https://github.com/r0man/soundklaus.el") (:keywords "soundcloud" "music" "emms"))]) (soundcloud . [(20150501 2026) ((emms (20131016)) (json (1 2)) (deferred (0 3 1)) (string-utils (0 3 2)) (request (20140316 417)) (request-deferred (20130526 1015))) "a SoundCloud client for Emacs" single ((:keywords "soundcloud" "music" "audio"))]) (sound-wav . [(20160725 724) ((deferred (0 3 1)) (cl-lib (0 5))) "Play wav file" single ((:url . "https://github.com/syohex/emacs-sound-wav"))]) (sotlisp . [(20160509 1504) ((emacs (24 1))) "Write lisp at the speed of thought." single ((:url . "https://github.com/Malabarba/speed-of-thought-lisp") (:keywords "convenience" "lisp"))]) (sotclojure . [(20160421 1811) ((emacs (24 1)) (clojure-mode (4 0 0)) (cider (0 8)) (sotlisp (1 3))) "Write clojure at the speed of thought." single ((:url . "https://github.com/Malabarba/speed-of-thought-clojure") (:keywords "convenience" "clojure"))]) (sos . [(20141214 2003) ((org (7))) "StackOverflow Search" single ((:url . "https://github.com/omouse/emacs-sos") (:keywords "tools" "search" "questions"))]) (sort-words . [(20160909 358) nil "Sort words in a selected region" single ((:url . "http://github.org/dotemacs/sort-words.el") (:keywords "tools"))]) (soothe-theme . [(20141027 741) ((emacs (24 1))) "a dark colorful theme for Emacs24." single ((:url . "https://github.com/jasonm23/emacs-soothe-theme"))]) (sonic-pi . [(20150919 330) ((cl-lib (0 5)) (osc (0 1)) (dash (2 2 0)) (emacs (24))) "A Emacs client for SonicPi" tar ((:url . "http://www.github.com/repl-electric/sonic-pi.el") (:keywords "sonicpi" "ruby"))]) (solidity-mode . [(20160505 203) nil "Major mode for ethereum's solidity language" single ((:keywords "languages"))]) (solarized-theme . [(20160901 334) ((emacs (24 1)) (cl-lib (0 5)) (dash (2 6 0))) "The Solarized color theme, ported to Emacs." tar nil]) (soft-stone-theme . [(20140614 135) ((emacs (24))) "Emacs 24 theme with a light background." single ((:url . "http://github.com/mswift42/soft-stone-theme"))]) (soft-morning-theme . [(20150918 1341) nil "Emacs24 theme with a light background." single ((:url . "http://github.com/mswift42/soft-morning-theme"))]) (soft-charcoal-theme . [(20140420 943) nil "Dark charcoal theme with soft colors" single ((:url . "http://github.com/mswift42/soft-charcoal-theme"))]) (snippet . [(20130210 1515) nil "Insert snippets of text into a buffer" single nil]) (snapshot-timemachine . [(20160222 132) ((emacs (24 4)) (cl-lib (0 5))) "Step through (Btrfs, ZFS, ...) snapshots of files" single ((:url . "https://github.com/mrBliss/snapshot-timemachine"))]) (snakemake-mode . [(20160902 1855) ((emacs (24)) (cl-lib (0 5)) (magit-popup (2 4 0))) "Major mode for editing Snakemake files" tar ((:url . "https://github.com/kyleam/snakemake-mode") (:keywords "tools"))]) (smyx-theme . [(20141127 28) nil "smyx Color Theme" single ((:keywords "color" "theme" "smyx"))]) (smtpmail-multi . [(20160218 1549) nil "Use different smtp servers for sending mail" single ((:url . "https://github.com/vapniks/smtpmail-multi") (:keywords "comm"))]) (smotitah . [(20150218 230) nil "Modular emacs configuration framework" tar nil]) (smooth-scrolling . [(20160612 141) nil "Make emacs scroll smoothly" single ((:url . "http://github.com/aspiers/smooth-scrolling/") (:keywords "convenience"))]) (smooth-scroll . [(20130321 2114) nil "Minor mode for smooth scrolling and in-place scrolling." single ((:url . "http://www.emacswiki.org/emacs/download/smooth-scroll.el") (:keywords "convenience" "emulations" "frames"))]) (sml-modeline . [(20120110 1240) nil "Show position in a scrollbar like way in mode-line" single ((:url . "http://bazaar.launchpad.net/~nxhtml/nxhtml/main/annotate/head%3A/util/sml-modeline.el"))]) (smiles-mode . [(20160717 420) nil "Major mode for SMILES." single ((:keywords "smiles"))]) (smex . [(20151212 1409) ((emacs (24))) "M-x interface with Ido-style fuzzy matching." single ((:url . "http://github.com/nonsequitur/smex/") (:keywords "convenience" "usability"))]) (smeargle . [(20151013 2242) ((cl-lib (0 5)) (emacs (24))) "Highlighting region by last updated time" single ((:url . "https://github.com/syohex/emacs-smeargle"))]) (smblog . [(20160317 430) ((emacs (24 3))) "samba log viewer" single ((:url . "http://github.com/aaptel/smblog-mode"))]) (smbc . [(20160706 1522) nil "View SMBC from Emacs" single ((:url . "https://github.com/sakshamsharma/emacs-smbc") (:keywords "smbc" "webcomic"))]) (smarty-mode . [(20100703 458) nil "major mode for editing smarty templates" single ((:url . "none yet") (:keywords "smarty" "php" "languages" "templates"))]) (smartwin . [(20160513 56) ((emacs (24 4))) "A minor mode shows shell like buffers." single ((:url . "https://github.com/jerryxgh/smartwin") (:keywords "convenience"))]) (smartscan . [(20160705 138) nil "Jumps between other symbols found at point" single ((:keywords "extensions"))]) (smartrep . [(20150508 1930) nil "Support sequential operation which omitted prefix keys." single ((:url . "https://github.com/myuhe/smartrep.el") (:keywords "convenience"))]) (smartparens . [(20160828 1136) ((dash (2 12 1)) (cl-lib (0 3))) "Automatic insertion, wrapping and paredit-like navigation with user defined pairs." tar nil]) (smart-window . [(20160716 1830) ((cl-lib (0 5))) "vim-like window controlling plugin" single ((:url . "https://github.com/dryman/smart-window.el") (:keywords "window"))]) (smart-tabs-mode . [(20160629 752) nil "Intelligently indent with tabs, align with spaces!" single ((:url . "http://www.emacswiki.org/emacs/SmartTabs") (:keywords "languages"))]) (smart-tab . [(20150703 917) nil "Intelligent tab completion and indentation." single ((:url . "http://github.com/genehack/smart-tab/tree/master") (:keywords "extensions"))]) (smart-shift . [(20150202 2325) nil "Smart shift text left/right." single ((:url . "https://github.com/hbin/smart-shift") (:keywords "convenience" "tools"))]) (smart-region . [(20150903 703) ((emacs (24 4)) (expand-region (0 10 0)) (multiple-cursors (1 3 0)) (cl-lib (0 5))) "Smartly select region, rectangle, multi cursors" single ((:url . "https://github.com/uk-ar/smart-region") (:keywords "marking" "region"))]) (smart-newline . [(20131207 1940) nil "Provide smart newline for one keybind." single nil]) (smart-mode-line-powerline-theme . [(20160705 1738) ((emacs (24 3)) (powerline (2 2)) (smart-mode-line (2 5))) "smart-mode-line theme that mimics the powerline appearance." tar ((:url . "http://github.com/Bruce-Connor/smart-mode-line") (:keywords "mode-line" "faces" "themes"))]) (smart-mode-line . [(20160818 508) ((emacs (24 3)) (rich-minority (0 1 1))) "A color coded smart mode-line." tar ((:url . "http://github.com/Malabarba/smart-mode-line") (:keywords "mode-line" "faces" "themes"))]) (smart-mark . [(20150911 1910) nil "Restore point after C-g when mark" single ((:keywords "mark" "restore"))]) (smart-indent-rigidly . [(20141205 1615) nil "Smart rigid indenting" single ((:url . "https://github.com/re5et/smart-indent-rigidly") (:keywords "indenting" "coffee-mode" "haml-mode" "sass-mode"))]) (smart-forward . [(20140430 13) ((expand-region (0 8 0))) "Semantic navigation" single ((:keywords "navigation"))]) (smart-dash . [(20110130 1916) nil "Smart-Dash minor mode" single nil]) (smart-cursor-color . [(20141124 919) nil "Change cursor color dynamically" single ((:url . "https://github.com/7696122/smart-cursor-color/") (:keywords "cursor" "color" "face"))]) (smart-compile . [(20150519 947) nil "an interface to `compile'" single ((:keywords "tools" "unix"))]) (smart-comment . [(20160322 1139) nil "smarter commenting" single ((:keywords "lisp"))]) (smali-mode . [(20160406 1556) nil "Major mode for editing Smali/Baksmali files" single ((:keywords "languages" "smali"))]) (sly-repl-ansi-color . [(20160214 18) ((sly (0)) (cl-lib (0 5))) "Add ANSI colors support to the sly mrepl." single ((:url . "https://github.com/PuercoPop/sly-repl-ansi-color") (:keywords "sly"))]) (sly-quicklisp . [(20160204 815) ((sly (1 0 0 -2 2))) "A template SLY contrib" tar ((:url . "https://github.com/capitaomorte/sly-quicklisp") (:keywords "languages" "lisp" "sly"))]) (sly-named-readtables . [(20150817 816) ((sly (1 0 0 -2 2))) "Support named readtables in Common Lisp files" tar ((:url . "https://github.com/capitaomorte/sly-named-readtables") (:keywords "languages" "lisp" "sly"))]) (sly-macrostep . [(20160119 434) ((sly (1 0 0 -2 2)) (macrostep (0 9))) "fancy macro-expansion via macrostep.el" tar ((:url . "https://github.com/capitaomorte/sly-macrostep") (:keywords "languages" "lisp" "sly"))]) (sly-hello-world . [(20160119 636) ((sly (1 0 0 -2 2))) "A template SLY contrib" tar ((:url . "https://github.com/capitaomorte/sly-hello-world") (:keywords "languages" "lisp" "sly"))]) (sly-company . [(20160308 557) ((sly (1 0 0 -3)) (company (0 7)) (emacs (24 3))) "sly completion backend for company mode" single ((:keywords "convenience" "lisp" "abbrev"))]) (sly . [(20160829 847) ((emacs (24 3))) "Sylvester the Cat's Common Lisp IDE" tar ((:url . "https://github.com/joaotavora/sly") (:keywords "languages" "lisp" "sly"))]) (slovak-holidays . [(20150418 155) nil "Adds a list of slovak holidays to Emacs calendar" single ((:keywords "calendar"))]) (slirm . [(20160201 625) ((emacs (24 4))) "Systematic Literature Review Mode for Emacs." single ((:url . "http://github.com/fbie/slirm"))]) (slime-volleyball . [(20140717 2141) nil "An SVG Slime Volleyball Game" tar ((:keywords "games"))]) (slime-theme . [(20141115 2302) ((emacs (24 0))) "an Emacs 24 theme based on Slime (tmTheme)" single ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (slime-ritz . [(20130218 1537) nil "slime extensions for ritz" single ((:url . "https://github.com/pallet/ritz") (:keywords "languages" "lisp" "slime"))]) (slime-docker . [(20160817 2344) ((emacs (24)) (slime (2 16)) (docker-tramp (0 1)) (cl-lib (0 5))) "Integration of SLIME with Docker containers." tar ((:url . "https://github.com/daewok/slime-docker") (:keywords "docker" "lisp" "slime"))]) (slime-company . [(20151210 614) ((slime (2 13)) (company (0 9 0))) "slime completion backend for company mode" single ((:keywords "convenience" "lisp" "abbrev"))]) (slime-annot . [(20131230 1908) ((slime (0))) "cl-annot support for SLIME" single ((:url . "https://github.com/arielnetworks/cl-annot"))]) (slime . [(20160907 602) ((cl-lib (0 5)) (macrostep (0 9))) "Superior Lisp Interaction Mode for Emacs" tar ((:url . "https://github.com/slime/slime") (:keywords "languages" "lisp" "slime"))]) (slim-mode . [(20140611 950) nil "Major mode for editing Slim files" single ((:url . "http://github.com/slim-template/emacs-slim") (:keywords "markup" "language"))]) (slideview . [(20150324 1540) ((cl-lib (0 3))) "File slideshow" single ((:url . "https://github.com/mhayashi1120/Emacs-slideview") (:keywords "files"))]) (slamhound . [(20140506 1618) nil "Rip Clojure namespaces apart and rebuild them." single ((:url . "https://github.com/technomancy/slamhound") (:keywords "tools" "lisp"))]) (slack . [(20160805 614) ((websocket (1 5)) (request (0 2 0)) (oauth2 (0 10)) (circe (2 2)) (alert (1 2)) (emojify (0 2))) "Slack client for Emacs" tar ((:url . "https://github.com/yuya373/emacs-slack"))]) (sl . [(20160729 2101) ((emacs (24)) (cl-lib (0 5))) "Clone of sl(1)" tar ((:url . "https://github.com/xuchunyang/sl.el"))]) (skype . [(20160711 124) nil "skype UI for emacs users.." tar ((:keywords "skype" "chat"))]) (skewer-reload-stylesheets . [(20160725 520) ((skewer-mode (1 5 3))) "live-edit CSS, SCSS, Less, and friends." tar nil]) (skewer-mode . [(20150914 1304) ((simple-httpd (1 4 0)) (js2-mode (20090723)) (emacs (24))) "live browser JavaScript, CSS, and HTML interaction" tar nil]) (skewer-less . [(20160828 1321) ((skewer-mode (1 5 3))) "Skewer support for live LESS stylesheet updates" single ((:keywords "languages" "tools"))]) (skeletor . [(20151220 2054) ((s (1 7 0)) (f (0 14 0)) (dash (2 2 0)) (cl-lib (0 3)) (let-alist (1 0 3)) (emacs (24 1))) "Provides project skeletons for Emacs" tar nil]) (simplezen . [(20130421 300) ((s (1 4 0)) (dash (1 1 0))) "A simple subset of zencoding-mode for Emacs." single nil]) (simplenote2 . [(20160318 603) ((request-deferred (0 2 0))) "Interact with simple-note.appspot.com" single ((:keywords "simplenote"))]) (simplenote . [(20141118 640) nil "Interact with simple-note.appspot.com" single ((:keywords "simplenote"))]) (simpleclip . [(20150804 1010) nil "Simplified access to the system clipboard" single ((:url . "http://github.com/rolandwalker/simpleclip") (:keywords "convenience"))]) (simple-screen . [(20141023 758) nil "Simple screen configuration manager" single ((:url . "https://github.com/wachikun/simple-screen") (:keywords "tools"))]) (simple-rtm . [(20160222 734) ((rtm (0 1)) (dash (2 0 0))) "Interactive Emacs mode for Remember The Milk" single ((:keywords "remember" "the" "milk" "productivity" "todo"))]) (simple-mpc . [(20160716 343) ((s (1 10 0))) "provides a simple interface to mpc" tar ((:keywords "multimedia" "mpd" "mpc"))]) (simple-httpd . [(20160902 1800) ((cl-lib (0 3))) "pure elisp HTTP server" single ((:url . "https://github.com/skeeto/emacs-http-server"))]) (simple-call-tree . [(20160609 1108) ((emacs (24 3)) (anaphora (1 0 0))) "analyze source code based on font-lock text-properties" single ((:url . "http://www.emacswiki.org/emacs/download/simple-call-tree.el") (:keywords "programming"))]) (simple-bookmarks . [(20160804 701) ((cl-lib (0 5))) "Bookmark / functioncall manager" tar ((:url . "https://github.com/jtkDvlp/simple-bookmarks") (:keywords "bookmark" "functioncall"))]) (simple+ . [(20151231 1600) ((strings (0))) "Extensions to standard library `simple.el'." single ((:url . "http://www.emacswiki.org/simple%2b.el") (:keywords "internal" "lisp" "extensions" "abbrev"))]) (simp . [(20160315 924) nil "Simple project definition, chiefly for file finding, and grepping" tar ((:url . "https://github.com/re5et/simp") (:keywords "project" "grep" "find"))]) (silkworm-theme . [(20160217 509) ((emacs (24))) "Light theme with pleasant, low contrast colors." single nil]) (signature . [(20140730 1249) nil "Signature Survey" tar nil]) (signal . [(20160816 738) ((emacs (24)) (cl-lib (0 5))) "Advanced hook" single ((:url . "https://github.com/mola-T/signal") (:keywords "internal" "lisp" "processes" "tools"))]) (sift . [(20160107 215) nil "Front-end for sift, a fast and powerful grep alternative" single ((:url . "https://github.com/nlamirault/sift.el") (:keywords "sift" "ack" "pt" "ag" "grep" "search"))]) (sicp . [(20151130 757) nil "Structure and Interpretation of Computer Programs in info format" tar ((:url . "https://mitpress.mit.edu/sicp"))]) (sibilant-mode . [(20151119 1345) nil "Support for the Sibilant programming language" single ((:url . "http://sibilantjs.info") (:keywords "languages"))]) (shut-up . [(20150423 522) ((cl-lib (0 3)) (emacs (24))) "Shut up would you!" single ((:url . "http://github.com/rejeep/shut-up.el"))]) (shrink-whitespace . [(20150916 1215) nil "Whitespace removal DWIM key" single ((:url . "https://github.com/jcpetkovich/shrink-whitespace.el") (:keywords "editing"))]) (shpec-mode . [(20150530 222) nil "Minor mode for shpec specification" single ((:url . "http://github.com/shpec/shpec-mode") (:keywords "languages" "tools"))]) (showtip . [(20080329 1959) nil "Show tip at cursor" single ((:keywords "help"))]) (showkey . [(20160816 2247) nil "Show keys as you use them." single ((:url . "http://www.emacswiki.org/showkey.el") (:keywords "help" "keys" "mouse"))]) (show-marks . [(20130805 749) ((fm (1 0))) "Navigate and visualize the mark-ring" single ((:url . "https://github.com/vapniks/mark") (:keywords "convenience"))]) (show-css . [(20160210 608) ((doom (1 3)) (s (1 10 0))) "Show the css of the html attribute the cursor is on" tar ((:url . "https://github.com/smmcg/showcss-mode") (:keywords "hypermedia"))]) (shoulda . [(20140616 1133) ((cl-lib (0 5))) "Shoulda test support for ruby" single ((:keywords "ruby" "tests" "shoulda"))]) (shm . [(20160615 31) nil "Structured Haskell Mode" tar ((:keywords "development" "haskell" "structured"))]) (shimbun . [(20160908 1156) nil "interfacing with web newspapers" tar ((:keywords "news"))]) (shift-text . [(20130831 955) ((cl-lib (1 0)) (es-lib (0 3))) "Move the region in 4 directions, in a way similar to Eclipse's" single ((:url . "https://github.com/sabof/shift-text"))]) (shift-number . [(20160419 1257) nil "Increase/decrease the number at point" single ((:url . "https://github.com/alezost/shift-number.el") (:keywords "convenience"))]) (shen-elisp . [(20160624 340) ((emacs (24 4))) "Shen implementation in Elisp" tar ((:keywords "shen" "elisp") (:url . "http://github.com/deech/shen-elisp"))]) (shelltest-mode . [(20141227 248) nil "Major mode for shelltestrunner" single ((:url . "https://github.com/rtrn/shelltest-mode") (:keywords "languages"))]) (shelldoc . [(20151114 1925) ((cl-lib (0 3)) (s (1 9 0))) "shell command editing support with man page." single ((:url . "http://github.com/mhayashi1120/Emacs-shelldoc") (:keywords "applications"))]) (shell-toggle . [(20150226 611) nil "Toggle to and from the shell buffer" single ((:url . "https://github.com/knu/shell-toggle.el") (:keywords "processes"))]) (shell-switcher . [(20160111 2335) ((emacs (24))) "Provide fast switching between shell buffers." tar nil]) (shell-split-string . [(20151224 208) nil "Split strings using shell-like syntax" single ((:url . "https://github.com/10sr/shell-split-string-el") (:keywords "utility" "library" "shell" "string"))]) (shell-pop . [(20160611 540) ((emacs (24))) "helps you to use shell easily on Emacs. Only one key action to work." single ((:url . "http://github.com/kyagi/shell-pop-el") (:keywords "shell" "terminal" "tools"))]) (shell-history . [(20100504 150) nil "integration with shell history" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/shell-history.el") (:keywords "processes" "convenience"))]) (shell-here . [(20150728 1004) nil "Open a shell relative to the working directory" single ((:keywords "unix" "tools" "processes"))]) (shell-current-directory . [(20140101 1554) nil "create new shell based on buffer directory" single ((:keywords "shell" "comint"))]) (shell-command . [(20090621 632) nil "enables tab-completion for `shell-command'" single ((:keywords "shell"))]) (shampoo . [(20131230 219) nil "A remote Smalltalk development mode" tar nil]) (shakespeare-mode . [(20160908 1511) nil "A major mode for editing Shakespearean templates." single ((:url . "http://github.com/CodyReichert/shakespeare-mode") (:keywords "shakespeare" "hamlet" "lucius" "julius" "mode"))]) (shader-mode . [(20151030 704) ((emacs (24))) "Major mode for shader" single ((:url . "https://github.com/midnightSuyama/shader-mode"))]) (shadchen . [(20141102 1039) nil "pattern matching for elisp" single nil]) (shackle . [(20160830 2343) ((cl-lib (0 5))) "Enforce rules for popups" single ((:url . "https://github.com/wasamasa/shackle") (:keywords "convenience"))]) (sexp-move . [(20150915 1030) nil "Improved S-Expression Movement" single ((:url . "https://gitlab.com/elzair/sexp-move") (:keywords "sexp"))]) (seti-theme . [(20150314 122) nil "A dark colored theme, inspired by Seti Atom Theme" single ((:url . "https://github.com/caisah/seti-theme") (:keywords "themes"))]) (session . [(20120510 1700) nil "use variables, registers and buffer places across sessions" single ((:url . "http://emacs-session.sourceforge.net/") (:keywords "session" "session management" "desktop" "data" "tools"))]) (serverspec . [(20150623 455) ((dash (2 6 0)) (s (1 9 0)) (f (0 16 2)) (helm (1 6 1))) "Serverspec minor mode" tar ((:url . "http://101000lab.org"))]) (servant . [(20140216 419) ((s (1 8 0)) (dash (2 2 0)) (f (0 11 0)) (ansi (0 3 0)) (commander (0 5 0)) (epl (0 2)) (shut-up (0 2 1)) (web-server (0 0 1))) "ELPA server written in Emacs Lisp" tar ((:url . "http://github.com/rejeep/servant.el") (:keywords "elpa" "server"))]) (sequential-command . [(20151207 1403) nil "Many commands into one command" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sequential-command.el") (:keywords "convenience" "lisp"))]) (sequences . [(20130908 1122) ((emacs (24))) "Ports of some Clojure sequence functions." single ((:keywords "convenience"))]) (seoul256-theme . [(20150714 1535) nil "No description available." single nil]) (sentence-navigation . [(20160830 1840) ((ample-regexps (0 1)) (cl-lib (0 5)) (emacs (24 4))) "Commands to navigate one-spaced sentences." single ((:url . "https://github.com/noctuid/emacs-sentence-navigation") (:keywords "sentence" "evil"))]) (sentence-highlight . [(20121026 750) nil "highlight the current sentence" single ((:keywords "plain text" "writing" "highlight" "editing" "focus"))]) (sensitive . [(20131015 635) ((emacs (24)) (sequences (0 1 0))) "A dead simple way to load sensitive information" single ((:keywords "convenience"))]) (sendto . [(20160425 550) ((emacs (24 4))) "send the region content to a function" single ((:url . "https://github.com/lujun9972/sendto.el") (:keywords "convenience" "region"))]) (semi . [(20160816 239) ((flim (1 14 9))) "A library to provide MIME features." tar nil]) (selectric-mode . [(20160824 1522) nil "IBM Selectric mode for Emacs" tar ((:keywords "multimedia" "convenience" "typewriter" "selectric"))]) (selected . [(20160428 37) nil "Keymap for when region is active" single ((:url . "http://github.com/Kungsgeten/selected.el") (:keywords "convenience"))]) (select-themes . [(20160220 1706) nil "Color theme selection with completing-read" single ((:url . "https://github.com/jasonm23/emacs-select-themes"))]) (sekka . [(20150708 459) ((cl-lib (0 3)) (concurrent (0 3 1)) (popup (0 5 2))) "A client for Sekka IME server" single ((:url . "https://github.com/kiyoka/sekka") (:keywords "ime" "skk" "japanese"))]) (seethru . [(20150218 1029) ((shadchen (1 4))) "Easily change Emacs' transparency" single ((:url . "http://github.com/benaiah/seethru") (:keywords "lisp" "tools" "alpha" "transparency"))]) (seeing-is-believing . [(20160602 718) nil "minor mode for running the seeing-is-believing ruby gem" single nil]) (second-sel . [(20151231 1553) nil "Secondary selection commands" single ((:url . "http://www.emacswiki.org/second-sel.el") (:keywords "region" "selection" "yank" "paste" "edit"))]) (seclusion-mode . [(20121118 1553) nil "Edit in seclusion. A Dark Room mode." single ((:url . "http://github.com/dleslie/seclusion-mode"))]) (searchq . [(20150829 511) ((emacs (24 3))) "Framework of queued search tasks using GREP, ACK, AG and more." tar nil]) (search-web . [(20150312 403) nil "Post web search queries using `browse-url'." single nil]) (scss-mode . [(20150107 1400) nil "Major mode for editing SCSS files" single ((:url . "https://github.com/antonj/scss-mode") (:keywords "scss" "css" "mode"))]) (scrooge . [(20160718 1735) ((emacs (24)) (thrift (0 9 3))) "Major mode for Twitter Scrooge files" single ((:keywords "scrooge" "thrift"))]) (scribble-mode . [(20160124 1528) ((emacs (24))) "Major mode for editing Scribble documents" single ((:url . "https://github.com/emacs-pe/scribble-mode") (:keywords "convenience"))]) (screenshot . [(20120509 405) nil "Take a screenshot in Emacs" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/screenshot.el") (:keywords "images" "hypermedia"))]) (scratches . [(20151005 2116) ((dash (2 11 0)) (f (0 17 0))) "Multiple scratches in any language" single ((:keywords "scratch"))]) (scratch-pop . [(20150820 139) ((popwin (0 7 0 -3))) "Generate, popup (& optionally backup) scratch buffer(s)." single ((:url . "http://hins11.yu-yake.com/"))]) (scratch-palette . [(20150225 42) ((popwin (0 7 0 -3))) "make scratch buffer for each files" single ((:url . "http://hins11.yu-yake.com/"))]) (scratch-message . [(20160825 644) nil "Changing message in your scratch buffer" single ((:url . "https://github.com/thisirs/scratch-message.git") (:keywords "util" "scratch"))]) (scratch-log . [(20141114 2343) nil "Utility for *scratch* buffer." single nil]) (scratch-ext . [(20140103 2116) nil "Extensions for *scratch*" single ((:url . "https://github.com/kyanagi/scratch-ext-el"))]) (scratch . [(20120830 1028) nil "Mode-specific scratch buffers" tar ((:keywords "editing"))]) (scpaste . [(20160613 1943) ((htmlize (1 39))) "Paste to the web via scp." single ((:url . "https://github.com/technomancy/scpaste") (:keywords "convenience" "hypermedia"))]) (sclang-snippets . [(20130513 51) ((yasnippet (0 8 0))) "Snippets for the SuperCollider Emacs mode" tar ((:keywords "snippets"))]) (sclang-extensions . [(20160508 2038) ((auto-complete (1 4 0)) (s (1 3 1)) (dash (1 2 0)) (emacs (24 1))) "Extensions for the SuperCollider Emacs mode." tar ((:keywords "sclang" "supercollider" "languages" "tools"))]) (scion . [(20130315 555) nil "Haskell Minor Mode for Interacting with the Scion Library" single ((:url . "https://code.google.com/p/scion-lib/"))]) (scheme-here . [(20141028 18) nil "cmuscheme extension for multiple inferior processes" single ((:url . "https://github.com/kaihaosw/scheme-here") (:keywords "scheme"))]) (scheme-complete . [(20160604 533) nil "Smart tab completion for Scheme in Emacs" single nil]) (scf-mode . [(20151121 1848) nil "shorten file-names in compilation type buffers" single ((:url . "https://github.com/lewang/scf-mode") (:keywords "compilation"))]) (scala-mode . [(20160902 525) nil "Major mode for editing Scala" tar ((:url . "https://github.com/ensime/emacs-scala-mode") (:keywords "languages"))]) (scad-preview . [(20160206 536) ((scad-mode (91 0))) "Preview SCAD models in real-time within Emacs" single ((:url . "http://hins11.yu-yake.com/"))]) (scad-mode . [(20160205 1043) nil "A major mode for editing OpenSCAD code" single ((:url . "https://raw.github.com/openscad/openscad/master/contrib/scad-mode.el") (:keywords "languages"))]) (sbt-mode . [(20160816 1353) nil "Interactive support for sbt projects" tar ((:url . "https://github.com/ensime/emacs-sbt-mode") (:keywords "languages"))]) (say-what-im-doing . [(20160706 1231) nil "dictate what you're doing with text to speech" single ((:url . "http://github.com/benaiah/say-what-im-doing") (:keywords "text to speech" "dumb" "funny"))]) (savekill . [(20140417 1929) nil "Save kill ring to disk" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/savekill.el") (:keywords "tools"))]) (save-visited-files . [(20151021 1043) nil "save opened files across sessions" single ((:url . "http://github.com/nflath/save-visited-files"))]) (save-load-path . [(20140206 414) nil "save load-path and reuse it to test" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/save-load-path.el") (:keywords "lisp"))]) (sauron . [(20160501 1045) nil "Track (erc/org/dbus/...) events and react to them." tar nil]) (sass-mode . [(20160506 2045) ((haml-mode (3 0 15)) (cl-lib (0 5))) "Major mode for editing Sass files" single ((:url . "http://github.com/nex3/haml/tree/master") (:keywords "markup" "language" "css"))]) (sane-term . [(20160620 647) ((emacs (24 1))) "Multi Term is crazy. This is not." single ((:url . "http://github.com/adamrt/sane-term"))]) (salt-mode . [(20150904 1113) ((yaml-mode (0 0 12)) (mmm-mode (0 5 4)) (mmm-jinja2 (0 0 1))) "Major mode for Salt States" single ((:url . "https://github.com/beardedprojamz/salt-mode") (:keywords "languages"))]) (salesforce-utils . [(20160813 1854) ((cl-lib (0 5))) "simple utilities for Salesforce" single ((:url . "https://github.com/grimnebulin/emacs-salesforce"))]) (sage-shell-mode . [(20160909 111) ((cl-lib (0 5)) (deferred (0 3 1)) (emacs (24))) "A front-end for Sage Math" tar ((:url . "https://github.com/stakemori/sage-shell-mode") (:keywords "sage" "math"))]) (sackspace . [(20130719 256) nil "A better backspace" single ((:url . "http://github.com/cofi/sackspace.el") (:keywords "delete" "convenience"))]) (s-buffer . [(20130605 1424) ((s (1 6 0)) (noflet (0 0 3))) "s operations for buffers" single ((:url . "http://github.com/nicferrier/emacs-s-buffer") (:keywords "lisp"))]) (s . [(20160711 525) nil "The long lost Emacs string manipulation library." single ((:keywords "strings"))]) (rvm . [(20150402 742) nil "Emacs integration for rvm" single ((:url . "http://www.emacswiki.org/emacs/RvmEl") (:keywords "ruby" "rvm"))]) (rustfmt . [(20160217 542) ((emacs (24))) "Format rust code using rustfmt" single ((:url . "https://github.com/fbergroth/emacs-rustfmt") (:keywords "convenience"))]) (rust-mode . [(20160909 935) ((emacs (24 0))) "A major emacs mode for editing Rust source code" single ((:url . "https://github.com/rust-lang/rust-mode") (:keywords "languages"))]) (runtests . [(20150807 131) nil "Run unit tests from Emacs" single ((:url . "https://github.com/sunesimonsen/emacs-runtests") (:keywords "test"))]) (runner . [(20160524 43) nil "Improved \"open with\" suggestions for dired" single ((:url . "https://github.com/thamer/runner") (:keywords "shell command" "dired" "file extension" "open with"))]) (ruby-tools . [(20151209 815) nil "Collection of handy functions for ruby-mode." tar nil]) (ruby-test-mode . [(20160711 335) ((ruby-mode (1 0)) (pcre2el (1 8))) "Minor mode for Behaviour and Test Driven" single ((:keywords "ruby" "unit" "test" "rspec"))]) (ruby-refactor . [(20160214 850) ((ruby-mode (1 2))) "A minor mode which presents various Ruby refactoring helpers." single ((:url . "https://github.com/ajvargo/ruby-refactor") (:keywords "refactor" "ruby"))]) (ruby-interpolation . [(20131112 852) nil "Ruby string interpolation helpers" single ((:url . "http://github.com/leoc/ruby-interpolation.el"))]) (ruby-hash-syntax . [(20141010 839) nil "Toggle ruby hash syntax between classic and 1.9 styles" single ((:url . "https://github.com/purcell/ruby-hash-syntax") (:keywords "languages"))]) (ruby-guard . [(20160131 1752) nil "Launching guard directly inside emacs." single ((:url . "https://github.com/cheunghy/ruby-guard") (:keywords "ruby" "guard" "rails"))]) (ruby-factory . [(20160101 2321) ((inflections (1 1))) "Minor mode for Ruby test object generation libraries" tar ((:url . "http://github.com/sshaw/ruby-factory-mode") (:keywords "ruby" "rails" "convenience"))]) (ruby-end . [(20141215 423) nil "Automatic insertion of end blocks for Ruby" single ((:url . "http://github.com/rejeep/ruby-end") (:keywords "speed" "convenience" "ruby"))]) (ruby-electric . [(20150424 752) nil "Minor mode for electrically editing ruby code" single ((:url . "https://github.com/knu/ruby-electric.el") (:keywords "languages" "ruby"))]) (ruby-dev . [(20130811 151) nil "Interactive developement environment for Ruby." tar nil]) (ruby-compilation . [(20150708 2340) ((inf-ruby (2 2 1))) "run a ruby process in a compilation buffer" single ((:url . "https://github.com/eschulte/rinari") (:keywords "test" "convenience"))]) (ruby-block . [(20131210 1931) nil "highlight matching block" single ((:keywords "languages" "faces" "ruby"))]) (ruby-additional . [(20160911 333) ((emacs (24 3)) (ruby-mode (1 2))) "ruby-mode extensions yet to be merged into Emacs" tar ((:url . "https://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/misc/") (:keywords "ruby" "languages"))]) (rubocop . [(20151123 2137) ((dash (1 0 0)) (emacs (24))) "An Emacs interface for RuboCop" single ((:url . "https://github.com/bbatsov/rubocop-emacs") (:keywords "project" "convenience"))]) (rtm . [(20160116 927) ((cl-lib (1 0))) "An elisp implementation of the Remember The Milk API" single ((:url . "https://github.com/pmiddend/emacs-rtm") (:keywords "remember" "the" "milk" "productivity" "todo"))]) (rtags . [(20160904 1233) nil "A front-end for rtags" tar ((:url . "http://rtags.net"))]) (rspec-mode . [(20160715 509) ((ruby-mode (1 0)) (cl-lib (0 4))) "Enhance ruby-mode for RSpec" tar ((:url . "http://github.com/pezra/rspec-mode") (:keywords "rspec" "ruby"))]) (rsense . [(20100510 2105) nil "RSense client for Emacs" single ((:keywords "convenience"))]) (rpn-calc . [(20150302 534) ((popup (0 4))) "quick RPN calculator for hackers" single ((:url . "http://hins11.yu-yake.com/"))]) (rpm-spec-mode . [(20160710 436) nil "RPM spec file editing commands for Emacs/XEmacs" single ((:keywords "unix" "languages"))]) (roy-mode . [(20121208 358) nil "Roy major mode" single ((:url . "https://github.com/folone/roy-mode") (:keywords "extensions"))]) (rotate . [(20160909 136) nil "Rotate the layout of emacs" single ((:url . "https://github.com/daichirata/emacs-rotate") (:keywords "window" "layout"))]) (rope-read-mode . [(20160603 9) nil "Rearrange lines to read text smoothly" single ((:url . "https://github.com/marcowahl/rope-read-mode") (:keywords "reading" "convenience" "chill"))]) (roguel-ike . [(20160119 1902) ((popup (0 5 0))) "A coffee-break roguelike" tar nil]) (robots-txt-mode . [(20160820 202) nil "Major mode for editing robots.txt" single ((:keywords "web"))]) (robe . [(20160518 259) ((inf-ruby (2 3 0))) "Code navigation, documentation lookup and completion for Ruby" tar ((:url . "https://github.com/dgutov/robe") (:keywords "ruby" "convenience" "rails"))]) (rings . [(20160531 1327) nil "Buffer rings. Like tabs, but better." single ((:url . "http://github.com/konr/rings") (:keywords "utilities" "productivity"))]) (rinari . [(20150708 2340) ((ruby-mode (1 0)) (inf-ruby (2 2 5)) (ruby-compilation (0 16)) (jump (2 0))) "Rinari Is Not A Rails IDE" single ((:url . "https://github.com/eschulte/rinari") (:keywords "ruby" "rails" "project" "convenience" "web"))]) (rigid-tabs . [(20150807 856) ((emacs (24 3))) "Rigidify and adjust the visual alignment of TABs" single ((:url . "https://github.com/wavexx/rigid-tabs.el") (:keywords "diff" "whitespace" "version control" "magit"))]) (rich-minority . [(20160725 1255) ((cl-lib (0 5))) "Clean-up and Beautify the list of minor-modes." single ((:url . "https://github.com/Malabarba/rich-minority") (:keywords "mode-line" "faces"))]) (rhtml-mode . [(20130422 611) nil "major mode for editing RHTML files" tar nil]) (rfringe . [(20110405 820) nil "display the relative location of the region, in the fringe." single ((:url . "http://www.emacswiki.org/emacs/rfringe.el") (:keywords "fringe" "bitmap"))]) (reykjavik-theme . [(20160109 0) ((emacs (24))) "Theme with a dark background." single nil]) (revive . [(20150417 1555) nil "Resume Emacs" single nil]) (review-mode . [(20160825 1846) nil "major mode for ReVIEW" single ((:url . "https://github.com/kmuto/review-el"))]) (reverse-theme . [(20141204 1745) nil "Reverse theme for Emacs" single ((:url . "https://github.com/syohex/emacs-reverse-theme"))]) (reverse-im . [(20160813 208) ((emacs (24 4))) "Reverse mapping for keyboard layouts other than english" single ((:url . "https://github.com/a13/reverse-im.el") (:keywords "input" "method"))]) (reveal-next . [(20151231 1550) nil "Progressively reveal text after the cursor." single ((:url . "http://www.emacswiki.org/reveal-next.el") (:keywords "hide" "show" "invisible" "learning"))]) (reveal-in-osx-finder . [(20150802 957) nil "Reveal file associated with buffer in OS X Finder" single ((:url . "https://github.com/kaz-yos/reveal-in-osx-finder") (:keywords "os x" "finder"))]) (restclient-test . [(20160618 315) ((emacs (24 4)) (restclient (0))) "Run tests with restclient.el" single ((:url . "https://github.com/simenheg/restclient-test.el"))]) (restclient-helm . [(20160407 249) ((restclient (0)) (helm (1 9 4))) "helm interface for restclient.el" single ((:keywords "http" "helm"))]) (restclient . [(20160801 707) nil "An interactive HTTP client for Emacs" single ((:keywords "http"))]) (restart-emacs . [(20160530 622) nil "Restart emacs from within emacs" single ((:url . "https://github.com/iqbalansari/restart-emacs") (:keywords "convenience"))]) (resize-window . [(20160511 2005) ((emacs (24))) "easily resize windows" single ((:url . "https://github.com/dpsutton/resize-mode") (:keywords "window" "resize"))]) (requirejs-mode . [(20130215 1304) nil "Improved AMD module management" single ((:keywords "javascript" "amd" "requirejs"))]) (requirejs . [(20151203 2319) ((js2-mode (20150713)) (popup (0 5 3)) (s (1 9 0)) (cl-lib (0 5)) (yasnippet (20151011 1823))) "Requirejs import manipulation and source traversal." tar ((:url . "https://github.com/joeheyming/requirejs-emacs") (:keywords "javascript" "requirejs"))]) (request-deferred . [(20160419 1605) ((deferred (0 3 1)) (request (0 2 0))) "Wrap request.el by deferred" single nil]) (request . [(20160822 1659) ((emacs (24)) (cl-lib (0 5))) "Compatible layer for URL request in Emacs" single nil]) (req-package . [(20160603 401) ((use-package (1 0)) (dash (2 7 0)) (log4e (0 2 0)) (ht (0))) "A use-package wrapper for package runtime dependencies management" tar ((:url . "https://github.com/edvorg/req-package") (:keywords "dotemacs" "startup" "speed" "config" "package"))]) (repo . [(20160114 1114) ((emacs (24 3))) "Running repo from Emacs" single ((:url . "https://github.com/canatella/repo-el") (:keywords "convenience"))]) (replace-symbol . [(20160517 1712) nil "Rename symbols in expressions or buffers" single ((:url . "https://github.com/bmastenbrook/replace-symbol-el"))]) (replace-pairs . [(20160207 451) ((emacs (24 4))) "Query-replace pairs of things" single ((:url . "https://github.com/davidshepherd7/replace-pairs"))]) (replace-from-region . [(20150406 1729) nil "Replace commands whose query is from region" single ((:url . "http://www.emacswiki.org/emacs/download/replace-from-region.el") (:keywords "replace" "search" "region"))]) (replace+ . [(20160508 843) nil "Extensions to `replace.el'." single ((:url . "http://www.emacswiki.org/replace%2b.el") (:keywords "matching" "help" "internal" "tools" "local"))]) (repl-toggle . [(20160119 421) ((fullframe (0 0 5))) "Switch to/from repl buffer for current major-mode" single ((:keywords "repl" "buffers" "toggle"))]) (repeatable-motion . [(20150629 1112) ((emacs (24))) "Make repeatable versions of motions" tar ((:url . "https://github.com/willghatch/emacs-repeatable-motion") (:keywords "motion" "repeatable"))]) (remark-mode . [(20151004 955) ((markdown-mode (2 0))) "Major mode for the remark slideshow tool" tar ((:keywords "remark" "slideshow" "markdown"))]) (relax . [(20131029 1434) ((json (1 2))) "For browsing and interacting with CouchDB" single ((:url . "http://github.com/technomancy/relax.el") (:keywords "database" "http"))]) (relative-line-numbers . [(20151006 1446) ((emacs (24))) "Display relative line numbers on the margin" single ((:url . "https://github.com/Fanael/relative-line-numbers"))]) (relative-buffers . [(20160221 1123) ((cl-lib (0 5)) (dash (2 6 0)) (s (1 9 0)) (f (0 16 2))) "Emacs buffers naming convention" single ((:url . "https://github.com/proofit404/relative-buffers"))]) (related . [(20160601 2254) ((cl-lib (0 5))) "Switch back and forth between similarly named buffers." single ((:url . "https://bitbucket.org/lyude/related/raw/master/related.el") (:keywords "file" "buffer" "switch" "selection" "matching" "convenience"))]) (register-channel . [(20150513 2059) nil "Jump around fast using registers" single ((:keywords "convenience"))]) (region-state . [(20151128 238) nil "Show the number of chars/lines or rows/columns in the region" single ((:url . "https://github.com/xuchunyang/region-state.el") (:keywords "convenience"))]) (region-bindings-mode . [(20140407 1514) nil "Enable custom bindings when mark is active." single ((:url . "https://github.com/fgallina/region-bindings-mode") (:keywords "convenience"))]) (regex-tool . [(20160907 2129) nil "A regular expression evaluation tool for programmers" single ((:url . "http://www.newartisans.com/") (:keywords "regex" "languages" "programming" "development"))]) (regex-dsl . [(20100124 228) nil "lisp syntax for regexps" single nil]) (refine . [(20160726 2025) ((emacs (24 3)) (s (1 11 0)) (dash (2 12 0)) (list-utils (0 4 4)) (loop (1 2))) "interactive value editing" single ((:keywords "convenience"))]) (refheap . [(20140902 1402) ((json (1 2))) "A library for pasting to https://refheap.com" single ((:url . "https://github.com/Raynes/refheap.el"))]) (redtick . [(20160516 1416) ((emacs (24))) "Smallest pomodoro timer (1 char)" tar ((:url . "http://github.com/ferfebles/redtick") (:keywords "pomodoro" "timer"))]) (redshank . [(20120510 1230) nil "No description available." tar nil]) (redprl . [(20160912 1847) ((emacs (24 3))) "Major mode for editing RedPRL proofs and interacting with RedPRL" single ((:keywords "languages"))]) (redpen-paragraph . [(20160625 350) ((emacs (24)) (cl-lib (0 5)) (json (1 4))) "RedPen interface." single ((:url . "https://github.com/karronoli/redpen-paragraph.el") (:keywords "document" "proofreading" "help"))]) (redo+ . [(20131117 351) nil "Redo/undo system for Emacs" single ((:keywords "lisp" "extensions"))]) (redis . [(20150531 1248) ((emacs (24)) (cl-lib (0 5))) "Redis integration" single ((:url . "https://github.com/emacs-pe/redis.el") (:keywords "convenience"))]) (recursive-narrow . [(20140902 1027) nil "narrow-to-region that operates recursively" single ((:url . "http://github.com/nflath/recursive-narrow"))]) (rectangle-utils . [(20160427 1024) ((emacs (24)) (cl-lib (0 5))) "Some useful rectangle functions." single ((:url . "https://github.com/thierryvolpiatto/rectangle-utils"))]) (rect+ . [(20150620 1744) nil "Extensions to rect.el" single ((:url . "https://github.com/mhayashi1120/Emacs-rectplus") (:keywords "extensions" "data" "tools"))]) (recover-buffers . [(20150812 5) nil "revisit all buffers from an auto-save file" tar nil]) (recompile-on-save . [(20151126 646) ((dash (1 1 0)) (cl-lib (0 5))) "Trigger recompilation on file save." single ((:url . "https://github.com/maio/recompile-on-save.el") (:keywords "convenience" "files" "processes" "tools"))]) (recentf-ext . [(20130130 1350) nil "Recentf extensions" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/recentf-ext.el") (:keywords "convenience" "files"))]) (rebox2 . [(20121113 500) nil "Handling of comment boxes in various styles." single ((:url . "https://github.com/lewang/rebox2"))]) (realgud-rdb2 . [(20160303 43) ((realgud (1 3))) "realgud front-end for interacting with Ruby debugger2" tar ((:url . "http://github.com/rocky/realgud-ruby-debugger2"))]) (realgud-pry . [(20160805 745) ((realgud (1 4 3)) (cl-lib (0 5)) (emacs (24))) "realgud front-end to the Ruby pry debugger" tar ((:url . "http://github.com/rocky/realgud-pry"))]) (realgud-old-debuggers . [(20160805 713) ((realgud (1 4 3)) (cl-lib (0 5)) (emacs (24))) "realgud front-end to older lesser-used debuggers" tar ((:url . "http://github.com/rocky/realgud-old-debuggers"))]) (realgud-byebug . [(20160805 732) ((realgud (1 4 3)) (cl-lib (0 5)) (emacs (24))) "realgud front-end to the Ruby byebug debugger" tar ((:url . "http://github.com/rocky/realgud-byebug"))]) (realgud . [(20160829 1821) ((load-relative (1 2)) (loc-changes (1 2)) (test-simple (1 2 0)) (cl-lib (0 5)) (emacs (24))) "A modular front-end for interacting with external debuggers" tar ((:url . "http://github.com/realgud/realgud/"))]) (real-auto-save . [(20150701 815) nil "Automatically save your all your buffers/files at regular intervals." single nil]) (readline-complete . [(20150708 737) nil "offers completions in shell mode" single nil]) (readability . [(20140715 1727) ((oauth (1 4)) (ov (1 0)) (emacs (24 3))) "Read articles from Readability in Emacs" single ((:url . "https://github.com/ShingoFukuyama/emacs-readability") (:keywords "readability" "oauth"))]) (read-aloud . [(20160815 928) ((emacs (24 4))) "A simple interface to TTS engines" single ((:url . "https://github.com/gromnitsky/read-aloud.el") (:keywords "multimedia"))]) (react-snippets . [(20160712 1521) ((yasnippet (0 7 0))) "Yasnippets for React" tar nil]) (rdp . [(20120928 1854) nil "Recursive Descent Parser library" single ((:url . "https://github.com/skeeto/rdp"))]) (rdf-prefix . [(20160813 829) nil "Prefix lookup for RDF" single ((:url . "https://github.com/simenheg/rdf-prefix") (:keywords "convenience" "abbrev"))]) (rcirc-styles . [(20160206 1850) ((cl-lib (0 5))) "support mIRC-style color and attribute codes" single nil]) (rcirc-notify . [(20150219 1404) nil "libnotify popups" single ((:keywords "lisp" "rcirc" "irc" "notify" "growl"))]) (rcirc-groups . [(20160115 431) nil "an emacs buffer in rcirc-groups major mode" single ((:url . "http://tapoueh.org/emacs/rcirc-groups.html") (:keywords "comm" "convenience"))]) (rcirc-color . [(20151130 758) nil "color nicks" single ((:keywords "comm"))]) (rcirc-alertify . [(20140406 1819) ((alert (20140406 1353))) "Cross platform notifications for rcirc" single ((:keywords "comm" "convenience"))]) (rcirc-alert . [(20141127 247) nil "Configurable alert messages on top of RCIRC" tar ((:keywords "lisp" "rcirc" "irc" "alert" "awesome"))]) (rc-mode . [(20160913 1218) nil "Major mode for the Plan9 rc shell" single ((:url . "https://github.com/mrhmouse/rc-mode.el") (:keywords "rc" "plan9" "shell"))]) (rbt . [(20160129 1051) nil "No description available." single nil]) (rbenv . [(20141119 2349) nil "Emacs integration for rbenv" single ((:url . "https://github.com/senny/rbenv.el") (:keywords "ruby" "rbenv"))]) (rats . [(20160315 1145) ((s (1 10 0)) (go-mode (1 3 1)) (cl-lib (0 5))) "Rapid testing suite for Go" single ((:keywords "go"))]) (rase . [(20120928 1345) nil "Run At Sun Event daemon" single ((:url . "https://github.com/m00natic/rase/") (:keywords "solar" "sunrise" "sunset" "midday" "midnight"))]) (ranger . [(20160823 1611) ((emacs (24 4))) "Make dired more like ranger" single ((:url . "https://github.com/ralesi/ranger") (:keywords "files" "convenience"))]) (random-splash-image . [(20151002 1830) nil "Randomly sets splash image to *GNU Emacs* buffer on startup." single ((:url . "https://github.com/kakakaya/random-splash-image") (:keywords "games"))]) (rand-theme . [(20151219 1535) ((cl-lib (0 5))) "Random Emacs theme at start-up!" single ((:url . "https://github.com/gopar/rand-theme"))]) (rally-mode . [(20160326 902) ((popwin (1 0 0))) "a mode to interact with the Rally Software web site." single ((:url . "https://pragcraft.wordpress.com/") (:keywords "rally" "ca" "agile"))]) (rake . [(20160830 245) ((f (0 13 0)) (dash (1 5 0)) (cl-lib (0 5))) "Run rake commands" single ((:url . "https://github.com/asok/rake.el") (:keywords "rake" "ruby"))]) (rainbow-identifiers . [(20141102 726) ((emacs (24))) "Highlight identifiers according to their names" single ((:url . "https://github.com/Fanael/rainbow-identifiers"))]) (rainbow-delimiters . [(20160430 2358) nil "Highlight brackets according to their depth" single ((:url . "https://github.com/Fanael/rainbow-delimiters") (:keywords "faces" "convenience" "lisp" "tools"))]) (rainbow-blocks . [(20140306 1033) nil "Block syntax highlighting for lisp code" single ((:url . "https://github.com/istib/rainbow-blocks"))]) (railscasts-theme . [(20150219 725) nil "Railscasts color theme for GNU Emacs." single ((:url . "https://github.com/mikenichols/railscasts-theme") (:keywords "railscasts" "color" "theme"))]) (rails-new . [(20141221 49) nil "Handy emacs command for generating rails application." single ((:url . "https://github.com/cheunghy/rails-new") (:keywords "rails" "ruby"))]) (rails-log-mode . [(20140407 2125) nil "Major mode for viewing Rails log files" single ((:keywords "rails" "log"))]) (railgun . [(20121016 2257) nil "No description available." single nil]) (racket-mode . [(20160829 846) ((emacs (24 3)) (faceup (0 0 2)) (s (1 9 0))) "Major mode for Racket language." tar ((:url . "https://github.com/greghendershott/racket-mode"))]) (racer . [(20160829 2022) ((emacs (24 3)) (rust-mode (0 2 0)) (dash (2 11 0)) (s (1 10 0)) (f (0 18 2))) "The official Emacs package for Racer" single ((:url . "https://github.com/racer-rust/emacs-racer") (:keywords "abbrev" "convenience" "matching" "rust" "tools"))]) (r-autoyas . [(20140101 710) ((ess (0)) (yasnippet (0 8 0))) "Provides automatically created yasnippets for R function argument lists." tar ((:url . "https://github.com/mlf176f2/r-autoyas.el") (:keywords "r" "yasnippet"))]) (quiet . [(20160508 556) nil "disconnect from the online world for a while" single ((:url . "https://github.com/zzkt/quiet") (:keywords "quiet" "distraction" "network" "detachment" "offline"))]) (quickrun . [(20160808 1753) ((emacs (24)) (cl-lib (0 5))) "Run commands quickly" single ((:url . "https://github.com/syohex/emacs-quickrun"))]) (quickref . [(20160326 936) ((dash (1 0 3)) (s (1 0 0))) "Display relevant notes-to-self in the echo area" single ((:url . "https://github.com/pd/quickref.el"))]) (quick-preview . [(20150828 2139) nil "quick preview using GNOME sushi, gloobus or quick look" single ((:url . "https://github.com/myuhe/quick-preview.el") (:keywords "files" "hypermedia"))]) (quick-buffer-switch . [(20151007 1508) nil "Quick switch to file or dir buffers." single ((:keywords "emacs" "configuration"))]) (quelpa-use-package . [(20150805 328) ((emacs (24 3)) (quelpa (0)) (use-package (2))) "quelpa handler for use-package" single ((:url . "https://github.com/quelpa/quelpa-use-package") (:keywords "package" "management" "elpa" "use-package"))]) (quelpa . [(20160818 2249) ((package-build (0)) (emacs (24 3))) "Emacs Lisp packages built directly from source" tar ((:url . "https://github.com/quelpa/quelpa") (:keywords "package" "management" "build" "source" "elpa"))]) (quasi-monochrome-theme . [(20160913 638) nil "High contrast quasi monochrome color theme" single ((:url . "https://github.com/lbolla/emacs-quasi-monochrome") (:keywords "color-theme" "monochrome" "high contrast"))]) (quack . [(20160410 207) nil "enhanced support for editing and running Scheme code" single nil]) (qml-mode . [(20160108 704) nil "Major mode for editing QT Declarative (QML) code." single ((:url . "https://github.com/coldnew/qml-mode") (:keywords "qml" "qt" "qt declarative"))]) (qiita . [(20140118 44) ((helm (1 5 9)) (markdown-mode (2 0))) "Qiita API Library for emacs" single ((:url . "https://github.com/gongo/qiita-el") (:keywords "qiita"))]) (pyvenv . [(20160527 442) nil "Python virtual environment interface" single ((:url . "http://github.com/jorgenschaefer/pyvenv") (:keywords "python" "virtualenv" "tools"))]) (pythonic . [(20160221 1123) ((emacs (24)) (cl-lib (0 5)) (dash (2 11)) (s (1 9)) (f (0 17 2))) "Utility functions for writing pythonic emacs package." single ((:url . "https://github.com/proofit404/pythonic"))]) (python-x . [(20160313 636) ((python (0 24)) (folding (0)) (cl-lib (0 5))) "python.el extras for interactive evaluation" tar ((:keywords "python" "eval" "folding") (:url . "https://github.com/wavexx/python-x.el") (:author . "Yuri D'Elia "))]) (python-test . [(20160801 1224) ((emacs (24 3))) "Python testing integration" single ((:url . "https://github.com/emacs-pe/python-test.el") (:keywords "convenience"))]) (python-mode . [(20160911 1032) nil "Python major mode" tar nil]) (python-info . [(20151228 1052) nil "Python info manual for Emacs" tar nil]) (python-environment . [(20150310 153) ((deferred (0 3 1))) "virtualenv API for Emacs Lisp" tar ((:keywords "applications" "tools"))]) (python-docstring . [(20160509 315) nil "Smart Python docstring formatting" tar nil]) (python-django . [(20150821 2104) nil "A Jazzy package for managing Django projects" single ((:url . "https://github.com/fgallina/python-django.el") (:keywords "languages"))]) (python-cell . [(20131029 1616) nil "Support for MATLAB-like cells in python mode" single ((:keywords "python" "matlab" "cell"))]) (pytest . [(20160330 647) ((s (1 9 0))) "Easy Python test running in Emacs" single ((:url . "https://github.com/ionrock/pytest-el") (:keywords "pytest" "python" "testing"))]) (pylint . [(20160728 1033) nil "minor mode for running `pylint'" single ((:keywords "languages" "python"))]) (pyimpsort . [(20160129 2053) ((emacs (24 3))) "Sort python imports." tar ((:url . "https://github.com/emacs-pe/pyimpsort.el") (:keywords "convenience"))]) (pyimport . [(20160705 1444) ((dash (2 8 0)) (s (1 9 0))) "Manage Python imports!" single nil]) (pyfmt . [(20150521 1356) nil "Emacs interface to pyfmt" single ((:url . "https://github.com/aheaume/pyfmt.el") (:keywords "tools"))]) (pyenv-mode-auto . [(20160122 2341) ((pyenv-mode (0 1 0)) (s (1 11 0)) (f (0 17 0))) "Automatically activates pyenv version if .python-version file exists." single ((:url . "https://github.com/ssbb/pyenv-mode-auto") (:keywords "python" "pyenv"))]) (pyenv-mode . [(20160221 1123) ((pythonic (0 1 0))) "Integrate pyenv with python-mode" single ((:url . "https://github.com/proofit404/pyenv-mode"))]) (pydoc-info . [(20110301 34) nil "Better Python support for info-lookup-symbol." tar nil]) (pydoc . [(20160529 1639) nil "functional, syntax highlighted pydoc navigation" single ((:url . "https://github.com/statmobile/pydoc") (:keywords "pydoc" "python"))]) (pycoverage . [(20160324 1812) ((emacs (24 3))) "Support for coverage stats on Python 2.X and 3" tar ((:url . "https://github.com/mattharrison/pycoverage.el") (:keywords "project" "convenience"))]) (pycarddavel . [(20150831 516) ((helm (1 7 0)) (emacs (24 0))) "Integrate pycarddav" single ((:keywords "helm" "pyccarddav" "carddav" "message" "mu4e" "contacts"))]) (py-yapf . [(20160101 412) nil "Use yapf to beautify a Python buffer" single ((:url . "https://github.com/paetzke/py-yapf.el"))]) (py-test . [(20151116 2222) ((dash (2 9 0)) (f (0 17)) (emacs (24 4))) "A test runner for Python code." single ((:url . "https://github.com/Bogdanp/py-test.el") (:keywords "python" "testing" "py.test"))]) (py-smart-operator . [(20150824 1910) ((s (1 9 0))) "smart-operator for python-mode" single ((:keywords "python" "convenience" "smart-operator"))]) (py-isort . [(20150422 839) nil "Use isort to sort the imports in a Python buffer" single ((:url . "http://paetzke.me/project/py-isort.el"))]) (py-import-check . [(20130802 411) nil "Finds the unused python imports using importchecker" single ((:url . "https://github.com/psibi/emacs-py-import-check") (:keywords "python" "import" "check"))]) (py-gnitset . [(20140224 2010) nil "Run your Python tests any way you'd like" single ((:url . "https://www.github.com/quodlibetor/py-gnitset"))]) (py-autopep8 . [(20151231 614) nil "Use autopep8 to beautify a Python buffer" single ((:url . "http://paetzke.me/project/py-autopep8.el"))]) (px . [(20141006 548) nil "preview inline latex in any mode" single ((:url . "http://github.com/aaptel/preview-latex"))]) (pushover . [(20160718 857) ((cl-lib (0 5))) "Pushover API Access" single ((:url . "http://github.com/swflint/pushover.el") (:keywords "notifications"))]) (pushbullet . [(20140809 532) ((grapnel (0 5 2)) (json (1 2))) "Emacs client for the PushBullet Android app" single ((:url . "http://www.github.com/theanalyst/revolver") (:keywords "convenience"))]) (purty-mode . [(20131004 1559) nil "Safely pretty-print greek letters, mathematical symbols, or anything else." single nil]) (purple-haze-theme . [(20141014 1929) ((emacs (24 0))) "an overtly purple color theme for Emacs24." single ((:url . "https://github.com/jasonm23/emacs-purple-haze-theme"))]) (purescript-mode . [(20150316 1828) nil "A PureScript editing mode" tar nil]) (puppet-mode . [(20160416 936) ((emacs (24 1)) (pkg-info (0 4))) "Major mode for Puppet manifests" single ((:url . "https://github.com/lunaryorn/puppet-mode") (:keywords "languages"))]) (punpun-theme . [(20160527 230) nil "A bleak theme" tar nil]) (pungi . [(20150222 446) ((jedi (0 2 0 -3 2)) (pyvenv (1 5))) "Integrates jedi with virtualenv and buildout python environments" single ((:keywords "convenience"))]) (punctuality-logger . [(20141120 1231) nil "Punctuality logger for Emacs" single ((:url . "https://gitlab.com/elzair/punctuality-logger") (:keywords "reminder" "calendar"))]) (puml-mode . [(20160719 36) ((emacs (24))) "Major mode for PlantUML" single ((:keywords "uml" "plantuml" "ascii"))]) (pug-mode . [(20160723 2236) ((cl-lib (0 5))) "Major mode for jade/pug template files" single ((:url . "https://github.com/hlissner/pug-mode") (:keywords "markup" "language" "jade" "pug"))]) (pt . [(20160119 817) nil "A front-end for pt, The Platinum Searcher." single ((:url . "https://github.com/bling/pt.el") (:keywords "pt" "ack" "ag" "grep" "search"))]) (psysh . [(20160711 1048) nil "PsySH, PHP interactive shell (REPL)" single ((:url . "https://github.com/zonuexe/psysh.el") (:keywords "process" "php"))]) (psvn . [(20151103 1042) nil "Subversion interface for emacs" single nil]) (psession . [(20160514 2359) ((emacs (24)) (cl-lib (0 5))) "Persistent save of elisp objects." single ((:url . "https://github.com/thierryvolpiatto/psession"))]) (psci . [(20160717 1125) ((purescript-mode (13 10)) (dash (2 9 0)) (s (1 9 0)) (f (0 17 1))) "Major mode for purescript repl psci" tar ((:url . "https://github.com/ardumont/emacs-psci") (:keywords "purescript" "psci" "repl" "major" "mode"))]) (psc-ide . [(20160911 544) ((dash (2 12 1)) (dash-functional (1 2 0)) (company (0 8 7)) (cl-lib (0 5)) (s (1 10 0))) "Minor mode for PureScript's psc-ide tool." tar ((:url . "https://github.com/epost/psc-ide-emacs") (:keywords "languages"))]) (protobuf-mode . [(20160805 1045) nil "major mode for editing protocol buffers." single ((:keywords "google" "protobuf" "languages"))]) (prosjekt . [(20151127 616) ((dash (2 8 0))) "a software project tool for emacs" tar ((:url . "https://github.com/abingham/prosjekt"))]) (propfont-mixed . [(20150113 1411) ((emacs (24)) (cl-lib (0 5))) "Use proportional fonts with space-based indentation." single ((:url . "https://github.com/ikirill/propfont-mixed") (:keywords "faces"))]) (prop-menu . [(20150728 418) ((emacs (24 3)) (cl-lib (0 5))) "Create and display a context menu based on text and overlay properties" single ((:url . "https://github.com/david-christiansen/prop-menu-el") (:keywords "convenience"))]) (prompt-text . [(20160106 609) nil "Various information in minibuffer prompt" single ((:url . "https://github.com/10sr/prompt-text-el") (:keywords "utility" "minibuffer"))]) (projmake-mode . [(20150619 1420) ((dash (20150611 922)) (indicators (20130217 1405))) "Project oriented automatic builder and error highlighter, flymake for projects" tar nil]) (projekt . [(20150324 148) ((emacs (24))) "some kind of staging for CVS" single nil]) (projector . [(20160822 948) ((alert (1 1)) (projectile (0 11 0)) (cl-lib (0 5))) "Lightweight library for managing project-aware shell and command buffers" single ((:url . "https://github.com/waymondo/projector"))]) (projectile-variable . [(20160910 1005) ((emacs (24)) (cl-lib (0 5)) (projectile (0 14 0))) "Store project local variables." single ((:url . "https://github.com/zonuexe/projectile-variable") (:keywords "project" "convenience"))]) (projectile-speedbar . [(20160630 947) nil "No description available." single nil]) (projectile-sift . [(20160107 215) ((sift (0 2 0)) (projectile (0 13 0))) "Run a sift with Projectile" single ((:url . "https://github.com/nlamirault/sift.el") (:keywords "sift" "projectile"))]) (projectile-rails . [(20160830 858) ((emacs (24 3)) (projectile (0 12 0)) (inflections (1 1)) (inf-ruby (2 2 6)) (f (0 13 0)) (rake (0 3 2))) "Minor mode for Rails projects based on projectile-mode" single ((:url . "https://github.com/asok/projectile-rails") (:keywords "rails" "projectile"))]) (projectile-hanami . [(20160505 611) ((emacs (24 3)) (projectile (0 12 0)) (rake (0 3 2)) (inf-ruby (2 2 6))) "Minor mode for Hanami projects based on projectile" single ((:url . "https://github.com/avdgaag/projectile-hanami") (:keywords "hanami" "ruby" "projectile"))]) (projectile-direnv . [(20160305 1738) ((emacs (24)) (s (1 11 0)) (dash (2 12 0)) (projectile (0 13 0))) "Set environment variables from .envrc" single ((:url . "https://github.com/christianromney/projectile-direnv") (:keywords "convenience"))]) (projectile-codesearch . [(20151228 20) ((codesearch (20141019 625)) (projectile (20150405 126))) "Integration of codesearch into projectile" single ((:url . "https://github.com/abingham/codesearch.el") (:keywords "tools" "development" "search"))]) (projectile . [(20160830 138) ((pkg-info (0 4))) "Manage and navigate projects in Emacs easily" single ((:url . "https://github.com/bbatsov/projectile") (:keywords "project" "convenience"))]) (project-root . [(20110206 1230) nil "Define a project root and take actions based upon it." single nil]) (project-persist-drawer . [(20151108 422) ((project-persist (0 3))) "Use a project drawer with project-persist." tar nil]) (project-persist . [(20150519 1324) nil "A minor mode to allow loading and saving of project settings." tar nil]) (project-local-variables . [(20080502 952) nil "Set project-local variables from a file." single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/ProjectLocalVariables") (:keywords "project" "convenience"))]) (project-explorer . [(20150503 1714) ((cl-lib (0 3)) (es-lib (0 3)) (es-windows (0 1)) (emacs (24))) "A project explorer sidebar" single ((:url . "https://github.com/sabof/project-explorer"))]) (programmer-dvorak . [(20150426 1837) nil "Input method for Programmer Dvorak." single ((:url . "https://github.com/yangchenyun/programmer-dvorak") (:keywords "dvorak" "programmer-dvorak" "input-method"))]) (prognth . [(20130920 1059) nil "Extend prog1 to arbitrary index" single ((:keywords "lisp"))]) (professional-theme . [(20150315 400) nil "Emacs port of Vim's professional theme" single ((:url . "https://github.com/juanjux/emacs-professional-theme") (:keywords "theme" "light" "professional"))]) (prodigy . [(20160815 1255) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (emacs (24))) "Manage external services from within Emacs" single ((:url . "http://github.com/rejeep/prodigy.el"))]) (processing-snippets . [(20140426 728) ((yasnippet (0 8 0))) "Snippets for processing-mode" tar nil]) (processing-mode . [(20150217 432) nil "Major mode for Processing 2.0" single ((:url . "https://github.com/ptrv/processing2-emacs") (:keywords "languages" "snippets"))]) (proc-net . [(20130321 1712) nil "network process tools" single ((:url . "http://github.com/nicferrier/emacs-procnet") (:keywords "processes"))]) (private-diary . [(20151216 857) ((emacs (24 0))) "maintain a private diary in Emacs" single ((:url . "https://github.com/cacology/private-diary") (:keywords "diary" "encryption"))]) (private . [(20150121 1757) ((aes (0 6))) "take care of your private configuration files." single ((:url . "https://github.com/cheunghy/private") (:keywords "private" "configuration" "backup" "recover"))]) (pretty-symbols . [(20140814 259) nil "Draw tokens as Unicode glyphs." single ((:url . "http://github.com/drothlis/pretty-symbols") (:keywords "faces"))]) (pretty-sha-path . [(20141105 1026) nil "Prettify Guix/Nix store paths" single ((:url . "https://gitorious.org/alezost-emacs/pretty-sha-path") (:keywords "faces" "convenience"))]) (pretty-mode . [(20160614 1146) nil "Redisplay parts of the buffer as pretty Unicode symbols." single ((:url . "https://github.com/akatov/pretty-mode") (:keywords "pretty" "unicode" "symbols"))]) (pretty-lambdada . [(20151231 1548) nil "Show the word `lambda' as the Greek letter." single ((:url . "http://www.emacswiki.org/pretty-lambdada.el") (:keywords "convenience" "display"))]) (prettify-greek . [(20160603 208) nil "Greek letters for prettify-symbols" single ((:url . "https://gitlab.com/fommil/emacs-prettify-greek") (:keywords "faces"))]) (preseed-generic-mode . [(20150119 1241) nil "Debian preseed file major mode" single ((:url . "https://github.com/suntong001/preseed-generic-mode"))]) (preproc-font-lock . [(20151107 1218) nil "Highlight C-style preprocessor directives." single ((:url . "https://github.com/Lindydancer/preproc-font-lock") (:keywords "c" "languages" "faces"))]) (ppd-sr-speedbar . [(20151108 424) ((sr-speedbar (20140914 2339)) (project-persist-drawer (0 0 4))) "Sr Speedbar adaptor for project-persist-drawer." tar nil]) (pp-c-l . [(20151231 1547) nil "Display Control-l characters in a pretty way" single ((:url . "http://www.emacswiki.org/pp-c-l.el") (:keywords "display" "convenience" "faces"))]) (pp+ . [(20160523 1439) nil "Extensions to `pp.el'." single ((:url . "http://www.emacswiki.org/pp%2b.el") (:keywords "lisp"))]) (powershell . [(20160210 1858) ((emacs (24))) "Mode for editing Powershell scripts" single ((:url . "http://github.com/jschaf/powershell.el") (:keywords "powershell" "languages"))]) (powerline-evil . [(20151112 710) ((evil (1 0 8)) (powerline (2 3))) "Utilities for better Evil support for Powerline" tar ((:url . "http://github.com/raugturi/powerline-evil/") (:keywords "evil" "mode-line" "powerline"))]) (powerline . [(20160702 1931) ((cl-lib (0 2))) "Rewrite of Powerline" tar ((:url . "http://github.com/milkypostman/powerline/") (:keywords "mode-line"))]) (pow . [(20140420 106) ((emacs (24)) (cl-lib (0 5))) "pow (http://pow.cx/) manager for emacs" tar ((:url . "http://github.com/yukihr/emacs-pow") (:keywords "develop" "web" "pow"))]) (pov-mode . [(20120825 716) nil "Major mode for editing POV-Ray scene files." tar nil]) (pos-tip . [(20150318 813) nil "Show tooltip at point" single ((:keywords "tooltip"))]) (portage-navi . [(20141208 555) ((concurrent (0 3 1)) (ctable (0 1 2))) "portage viewer" single ((:url . "https://github.com/kiwanami/emacs-portage-navi") (:keywords "tools" "gentoo"))]) (popwin . [(20150315 600) nil "Popup Window Manager." single ((:keywords "convenience"))]) (popup-switcher . [(20160622 1024) ((cl-lib (0 3)) (popup (0 5 3))) "switch to other buffers and files via popup." single ((:url . "https://github.com/kostafey/popup-switcher") (:keywords "popup" "switch" "buffers" "functions"))]) (popup-kill-ring . [(20131020 1154) ((popup (0 4)) (pos-tip (0 4))) "interactively insert item from kill-ring" single ((:url . "https://github.com/waymondo/popup-kill-ring") (:keywords "popup" "kill-ring" "pos-tip"))]) (popup-imenu . [(20160409 510) ((dash (2 12 1)) (popup (0 5 3)) (flx-ido (0 6 1))) "imenu index popup" single ((:url . "https://github.com/ancane/popup-imenu") (:keywords "popup" "imenu"))]) (popup-complete . [(20141108 1908) ((popup (0 5 0))) "completion with popup" single ((:url . "https://github.com/syohex/emacs-popup-complete"))]) (popup . [(20160709 729) ((cl-lib (0 5))) "Visual Popup User Interface" single ((:keywords "lisp"))]) (poporg . [(20150603 1847) nil "Pop a comment or string to an empty buffer for text editing" single ((:url . "https://github.com/QBobWatson/poporg") (:keywords "outlines" "tools"))]) (pophint . [(20150930 1034) ((popup (0 5 0)) (log4e (0 2 0)) (yaxception (0 1))) "Provide navigation using pop-up tips, like Firefox's Vimperator Hint Mode" tar ((:url . "https://github.com/aki2o/emacs-pophint") (:keywords "popup"))]) (ponylang-mode . [(20160527 541) ((dash (2 10 0))) "Major mode for Pony code" single ((:url . "https://github.com/seantallen/ponylang-mode") (:keywords "languages" "programming"))]) (pony-snippets . [(20160204 2011) ((yasnippet (0 8 0))) "Yasnippets for Pony" tar ((:url . "https://github.com/seantallen/pony-snippets") (:keywords "snippets" "pony"))]) (pony-mode . [(20151028 302) nil "Minor mode for working with Django Projects" tar nil]) (pomodoro . [(20150716 1046) nil "A timer for the Pomodoro Technique" single nil]) (polymode . [(20160805 448) ((emacs (24))) "Versatile multiple modes with extensive literate programming support" tar ((:url . "https://github.com/vitoshka/polymode"))]) (pollen-mode . [(20160808 2000) ((emacs (24 3)) (cl-lib (0 5))) "major mode for editing pollen files" single ((:url . "https://github.com/lijunsong/pollen-mode") (:keywords "languages" "pollen" "pollenpub"))]) (pointback . [(20100210 752) nil "Restore window points when returning to buffers" single ((:keywords "convenience"))]) (point-undo . [(20100504 129) nil "undo/redo position" single nil]) (point-stack . [(20141225 2110) nil "Back and forward navigation through buffer locations" single nil]) (pocket-api . [(20160530 738) ((emacs (24 4)) (request (0 2))) "another pocket api" single ((:url . "https://github.com/lujun9972/pocket-api.el") (:keywords "convenience" "pocket"))]) (po-mode . [(20160827 857) nil "major mode for GNU gettext PO files" single ((:keywords "i18n" "gettext"))]) (pmdm . [(20151109 1036) nil "poor man's desktop-mode alternative." single ((:url . "https://bitbucket.com/inigoserna/pmdm.el"))]) (plur . [(20160504 224) ((emacs (24 4))) "Easily search and replace multiple variants of a word" single ((:url . "https://github.com/xuchunyang/plur"))]) (plsql . [(20121115 243) nil "Programming support for PL/SQL code" single ((:url . "http://www.emacswiki.org/elisp/plsql.el") (:keywords "languages"))]) (plsense-direx . [(20140520 1308) ((direx (0 1 -3)) (plsense (0 3 2)) (log4e (0 2 0)) (yaxception (0 3 2))) "Perl Package Explorer" single ((:url . "https://github.com/aki2o/plsense-direx") (:keywords "perl" "convenience"))]) (plsense . [(20151104 645) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 2 0))) "provide interface for PlSense that is a development tool for Perl." single ((:url . "https://github.com/aki2o/emacs-plsense") (:keywords "perl" "completion"))]) (plim-mode . [(20140812 1713) nil "Major mode for editing Plim files" single ((:url . "http://github.com/dongweiming/plim-mode") (:keywords "markup" "language"))]) (plenv . [(20130706 2316) nil "A plenv wrapper for Emacs" single ((:keywords "emacs" "perl"))]) (play-routes-mode . [(20160615 2053) nil "Play Framework Routes File Support" single ((:url . "https://github.com/brocode/play-routes-mode/") (:keywords "play" "scala"))]) (platformio-mode . [(20160327 1820) ((projectile (0 13 0))) "PlatformIO integration" single ((:url . "https://github.com/zachmassia/platformio-mode"))]) (plantuml-mode . [(20150531 2331) nil "No description available." single nil]) (planet-theme . [(20160821 717) ((emacs (24))) "A dark theme inspired by Gmail's 'Planets' theme of yore" single ((:url . "https://github.com/cmack/emacs-planet-theme") (:keywords "themes"))]) (plan9-theme . [(20160620 109) nil "A color theme for Emacs based on Plan9" single ((:url . "https://github.com/john2x/plan9-theme.el"))]) (plain-theme . [(20160903 1029) nil "Black and white theme without syntax highlighting" single ((:url . "https://github.com/yegortimoshenko/plain-theme"))]) (pkgbuild-mode . [(20151010 736) nil "Interface to the ArchLinux package manager" single nil]) (pkg-info . [(20150517 443) ((epl (0 8))) "Information about packages" single ((:url . "https://github.com/lunaryorn/pkg-info.el") (:keywords "convenience"))]) (pixiv-novel-mode . [(20160220 621) nil "Major mode for pixiv novel" single ((:keywords "novel" "pixiv"))]) (pixie-mode . [(20150121 2124) ((clojure-mode (3 0 1)) (inf-clojure (1 0 0))) "Major mode for Pixie-lang" single ((:url . "https://github.com/johnwalker/pixie-mode"))]) (pivotal-tracker . [(20151203 1150) nil "Interact with Pivotal Tracker through its API" single ((:url . "http://github.com/jxa/pivotal-tracker"))]) (pip-requirements . [(20160131 926) ((dash (2 8 0))) "A major mode for editing pip requirements files." single nil]) (pinyinlib . [(20160505 1248) nil "Convert first letter of Pinyin to Simplified/Traditional Chinese characters" single ((:keywords "extensions"))]) (pinyin-search . [(20160514 2058) ((pinyinlib (0 1 0))) "Search Chinese by Pinyin" single ((:url . "https://github.com/xuchunyang/pinyin-search.el") (:keywords "chinese" "search"))]) (pinot . [(20140211 1226) nil "Emacs interface to pinot-search" tar nil]) (pinboard-api . [(20140324 448) nil "Rudimentary http://pinboard.in integration" single ((:url . "https://github.com/danieroux/pinboard-api-el") (:keywords "pinboard" "www"))]) (pillar . [(20141112 1011) ((makey (0 3))) "Major mode for editing Pillar files" tar ((:url . "http://github.com/DamienCassou/pillar-mode") (:keywords "markup" "major-mode"))]) (pig-snippets . [(20130912 2324) ((yasnippet (0 8 0))) "Snippets for pig-mode" tar nil]) (pig-mode . [(20140617 1058) nil "Major mode for Pig files" single nil]) (picolisp-mode . [(20150516 155) nil "Major mode for PicoLisp programming." single ((:url . "https://github.com/flexibeast/picolisp-mode") (:keywords "picolisp" "lisp" "programming"))]) (pianobar . [(20120128 1301) nil "thin wrapper for Pianobar, a Pandora Radio client" single ((:url . "http://github.com/agrif/pianobar.el"))]) (phpunit . [(20160808 212) ((s (1 9 0)) (f (0 16 0)) (pkg-info (0 5)) (cl-lib (0 5)) (emacs (24 3))) "Launch PHP unit tests using phpunit" tar ((:url . "https://github.com/nlamirault/phpunit.el") (:keywords "php" "tests" "phpunit"))]) (phpcbf . [(20150302 528) ((s (1 9 0))) "Format PHP code in Emacs using PHP_CodeSniffer's phpcbf" single ((:url . "https://github.com/nishimaki10/emacs-phpcbf") (:keywords "tools" "php"))]) (php-scratch . [(20160730 115) ((emacs (24 3)) (s (1 11 0)) (php-mode (1 17 0))) "A scratch buffer to interactively evaluate php code" single nil]) (php-refactor-mode . [(20160417 1446) nil "Minor mode to quickly and safely perform common refactorings" single ((:url . "https://github.com/keelerm84/php-refactor-mode.el") (:keywords "php" "refactor"))]) (php-mode . [(20160910 1801) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing PHP code" tar ((:url . "https://github.com/ejmr/php-mode"))]) (php-eldoc . [(20140202 1141) nil "eldoc backend for php" tar ((:url . "https://github.com/sabof/php-eldoc"))]) (php-boris-minor-mode . [(20140209 1035) ((php-boris (0 0 1)) (highlight (0))) "a minor mode to evaluate PHP code in the Boris repl" single ((:url . "https://github.com/steckerhalter/php-boris-minor-mode") (:keywords "php" "repl" "eval"))]) (php-boris . [(20130527 121) nil "Run boris php REPL" single ((:keywords "php" "commint" "repl" "boris"))]) (php-auto-yasnippets . [(20141128 1411) ((php-mode (1 11)) (yasnippet (0 8 0))) "Creates snippets for PHP functions" tar ((:url . "https://github.com/ejmr/php-auto-yasnippets"))]) (php+-mode . [(20121129 1252) nil "A better PHP mode with Zend Framework 1 support." tar nil]) (phoenix-dark-pink-theme . [(20150406 2002) nil "Port of the Sublime Text 2 theme of the same name" single ((:url . "http://github.com/j0ni/phoenix-dark-pink"))]) (phoenix-dark-mono-theme . [(20130306 1215) nil "Monochromatic version of the Phoenix theme" single ((:url . "http://github.com/j0ni/phoenix-dark-mono"))]) (phi-search-migemo . [(20150116 506) ((phi-search (2 2 0)) (migemo (1 9 1))) "migemo extension for phi-search" single ((:url . "http://hins11.yu-yake.com/"))]) (phi-search-mc . [(20160324 803) ((phi-search (2 0 0)) (multiple-cursors (1 2 1))) "multiple-cursors extension for phi-search" single ((:url . "https://github.com/knu/phi-search-mc.el") (:keywords "search" "cursors"))]) (phi-search-dired . [(20150405 14) ((phi-search (2 2 0))) "interactive filtering for dired powered by phi-search" single ((:url . "http://hins11.yu-yake.com/"))]) (phi-search . [(20150807 112) nil "another incremental search & replace, compatible with \"multiple-cursors\"" tar ((:url . "http://hins11.yu-yake.com/"))]) (phi-rectangle . [(20151207 2254) nil "another rectangle-mark command (rewrite of rect-mark)" single ((:url . "http://hins11.yu-yake.com/"))]) (phi-grep . [(20150212 724) ((cl-lib (0 1))) "Interactively-editable recursive grep implementation in elisp" single ((:url . "http://hins11.yu-yake.com/"))]) (phi-autopair . [(20150527 223) ((paredit (20))) "another simple-minded autopair implementation" single ((:url . "http://hins11.yu-yake.com/"))]) (phabricator . [(20160510 725) ((emacs (24 4)) (dash (1 0)) (projectile (0 13 0)) (s (1 10 0)) (f (0 17 2))) "Phabricator/Arcanist helpers for Emacs." single ((:url . "https://github.com/ajtulloch/phabricator.el") (:keywords "phabricator" "arcanist" "diffusion"))]) (ph . [(20130312 1137) ((emacs (24 3))) "A global minor mode for managing multiple projects." tar nil]) (pgdevenv . [(20150105 1436) nil "Manage your PostgreSQL development envs" tar ((:keywords "emacs" "postgresql" "development" "environment" "shell" "debug" "gdb"))]) (pg . [(20130731 1442) nil "Emacs Lisp interface to the PostgreSQL RDBMS" single ((:keywords "data" "comm" "database" "postgresql"))]) (perspective . [(20160609 1444) ((cl-lib (0 5))) "switch between named \"perspectives\" of the editor" single ((:url . "http://github.com/nex3/perspective-el") (:keywords "workspace" "convenience" "frames"))]) (persp-projectile . [(20160709 2317) ((perspective (1 9)) (projectile (0 11 0)) (cl-lib (0 3))) "Perspective integration with Projectile" single ((:keywords "project" "convenience"))]) (persp-mode . [(20160830 228) nil "windows/buffers sets shared among frames + save/load." single ((:url . "https://github.com/Bad-ptr/persp-mode.el") (:keywords "perspectives" "session" "workspace" "persistence" "windows" "buffers" "convenience"))]) (persistent-soft . [(20150223 1053) ((pcache (0 3 1)) (list-utils (0 4 2))) "Persistent storage, returning nil on failure" single ((:url . "http://github.com/rolandwalker/persistent-soft") (:keywords "data" "extensions"))]) (persistent-scratch . [(20160404 915) ((emacs (24))) "Preserve the scratch buffer across Emacs sessions" single ((:url . "https://github.com/Fanael/persistent-scratch"))]) (persistent-overlays . [(20160426 1221) nil "Minor mode to store selected overlays to be loaded later" tar ((:url . "https://github.com/mneilly/Emacs-Persistent-Overlays") (:keywords "overlays" "persistent"))]) (perlbrew . [(20130127 324) nil "A perlbrew wrapper for Emacs" single ((:keywords "emacs" "perl"))]) (perl6-mode . [(20160730 1455) ((emacs (24 4)) (pkg-info (0 1))) "Major mode for editing Perl 6 code" tar ((:url . "https://github.com/hinrik/perl6-mode") (:keywords "languages"))]) (perl-completion . [(20090527 2336) nil "No description available." single nil]) (per-buffer-theme . [(20160318 1501) ((cl-lib (0 5))) "Change theme according to buffer name or major mode." single ((:url . "https://bitbucket.com/inigoserna/per-buffer-theme.el") (:keywords "themes"))]) (peg . [(20150707 2341) nil "Parsing Expression Grammars in Emacs Lisp" single nil]) (peep-dired . [(20160321 1537) nil "Peep at files in another window from dired buffers" single ((:keywords "files" "convenience"))]) (peek-mode . [(20130620 1246) ((elnode (0 9 8 1))) "Serve buffers live over HTTP with elnode backend" tar ((:url . "https://github.com/erikriverson/peek-mode"))]) (peacock-theme . [(20141115 2302) ((emacs (24 0))) "an Emacs 24 theme based on Peacock (tmTheme)" single ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (pdf-tools . [(20160525 920) ((emacs (24 3)) (tablist (0 70)) (let-alist (1 0 4))) "Support library for PDF documents." tar ((:keywords "files" "multimedia"))]) (pdb-mode . [(20150128 951) nil "Major mode for editing Protein Data Bank files" single ((:url . "http://bondxray.org/software/pdb-mode/") (:keywords "data" "pdb"))]) (pcsv . [(20150220 331) nil "Parser of csv" single ((:url . "https://github.com/mhayashi1120/Emacs-pcsv/raw/master/pcsv.el") (:keywords "data"))]) (pcre2el . [(20151213 234) ((emacs (24)) (cl-lib (0 3))) "regexp syntax converter" single ((:url . "https://github.com/joddie/pcre2el"))]) (pcomplete-extension . [(20140604 947) ((emacs (24)) (cl-lib (0 5))) "additional completion for pcomplete" single ((:url . "https://github.com/thierryvolpiatto/pcomplete-extension"))]) (pcmpl-pip . [(20141024 148) nil "pcomplete for pip" single ((:keywords "pcomplete" "pip" "python" "tools"))]) (pcmpl-homebrew . [(20160725 1939) nil "pcomplete for homebrew" single ((:keywords "pcomplete" "homebrew" "tools"))]) (pcmpl-git . [(20160110 2255) nil "pcomplete for git" tar ((:keywords "tools"))]) (pcmpl-args . [(20120911 2224) nil "Enhanced shell command completion" single ((:url . "https://github.com/JonWaltman/pcmpl-args.el") (:keywords "abbrev" "completion" "convenience" "processes" "terminals" "unix"))]) (pcap-mode . [(20160830 1322) ((emacs (24 3))) "Major mode for working with PCAP files" single ((:keywords "pcap" "packets" "tcpdump" "wireshark" "tshark"))]) (pcache . [(20160724 1929) ((eieio (1 3))) "persistent caching for Emacs." single nil]) (pc-bufsw . [(20150923 13) nil "PC style quick buffer switcher" single ((:url . "https://github.com/ibukanov/pc-bufsw") (:keywords "buffer"))]) (pbcopy . [(20150224 2059) nil "Emacs Interface to pbcopy" single ((:url . "https://github.com/jkp/pbcopy.el") (:keywords "mac" "osx" "pbcopy"))]) (paxedit . [(20160730 1027) ((cl-lib (0 5)) (paredit (23))) "Structured, Context Driven LISP Editing and Refactoring" single ((:url . "https://github.com/promethial/paxedit") (:keywords "lisp" "refactoring" "context"))]) (pathify . [(20160423 146) nil "Symlink your scripts into a PATH directory" single ((:url . "https://gitlab.com/alezost-emacs/pathify") (:keywords "convenience"))]) (path-headerline-mode . [(20140423 632) nil "Displaying file path on headerline." single ((:url . "https://github.com/7696122/path-headerline-mode") (:keywords "headerline"))]) (pastels-on-dark-theme . [(20120304 1022) nil "Pastels on Dark theme for Emacs 24" single ((:url . "http://gist.github.com/1906662") (:keywords "theme" "color"))]) (pastelmac-theme . [(20151030 1936) ((emacs (24 1))) "a soothing theme with a pastel color palette" single ((:url . "https://github.com/bmastenbrook/pastelmac-theme-el") (:keywords "themes"))]) (pastehub . [(20140614 2320) nil "A client for the PasteHub cloud service" single ((:url . "https://github.com/kiyoka/pastehub"))]) (pastebin . [(20101125 1202) nil "A simple interface to the www.pastebin.com webservice" single nil]) (password-vault . [(20160126 1020) ((cl-lib (0 2)) (emacs (24))) "A Password manager for Emacs." single ((:url . "http://github.com/PuercoPop/password-vault") (:keywords "password" "productivity"))]) (password-store . [(20151027 1449) ((f (0 11 0)) (s (1 9 0))) "Password store (pass) support" single ((:keywords "pass"))]) (password-generator . [(20150222 1240) nil "Password generator for humans. Good, Bad, Phonetic passwords included." single ((:url . "http://github.com/zargener/emacs-password-genarator"))]) (passthword . [(20141201 123) ((cl-lib (0 5))) "Simple password manager" single nil]) (pass . [(20160821 1136) ((emacs (24)) (password-store (0 1)) (f (0 17))) "Major mode for password-store.el" single ((:keywords "password-store" "password" "keychain"))]) (parsec . [(20160714 1524) ((emacs (24)) (cl-lib (0 5))) "Parser combinator library" single ((:keywords "extensions"))]) (parsebib . [(20151006 232) ((emacs (24 3))) "A library for parsing bib files" single ((:keywords "text" "bibtex"))]) (parse-csv . [(20160512 1023) nil "Parse strings with CSV fields into s-expressions" single ((:url . "https://github.com/mrc/el-csv") (:keywords "csv"))]) (parent-mode . [(20150824 1600) nil "get major mode's parent modes" single ((:url . "https://github.com/Fanael/parent-mode"))]) (paren-face . [(20160521 755) nil "a face for parentheses in lisp modes" single ((:url . "http://github.com/tarsius/paren-face"))]) (paren-completer . [(20160501 352) ((emacs (24 3))) "Automatically, language agnostically, fill in delimiters." single ((:url . "https://github.com/MatthewBregg/paren-completer") (:keywords "convenience"))]) (paredit-menu . [(20160128 933) ((paredit (25))) "Adds a menu to paredit.el as memory aid" single ((:keywords "paredit"))]) (paredit-everywhere . [(20150821 2144) ((paredit (22))) "Enable some paredit features in non-lisp buffers" single ((:keywords "languages" "convenience"))]) (paredit . [(20160615 1325) nil "minor mode for editing parentheses" single ((:keywords "lisp"))]) (paradox . [(20160525 736) ((emacs (24 4)) (seq (1 7)) (let-alist (1 0 3)) (spinner (1 4)) (hydra (0 13 2))) "A modern Packages Menu. Colored, with package ratings, and customizable." tar ((:url . "https://github.com/Malabarba/paradox") (:keywords "package" "packages"))]) (paper-theme . [(20151231 932) ((emacs (24)) (hexrgb (0))) "A minimal Emacs colour theme." single ((:url . "http://gkayaalp.com/emacs.html#paper") (:keywords "theme" "paper"))]) (pangu-spacing . [(20150927 24) nil "Minor-mode to add space between Chinese and English characters." single ((:url . "http://github.com/coldnew/pangu-spacing"))]) (pandoc-mode . [(20160902 126) ((hydra (0 10 0)) (dash (2 10 0))) "Minor mode for interacting with Pandoc" tar ((:keywords "text" "pandoc"))]) (pandoc . [(20160607 1010) ((emacs (24 4))) "Pandoc interface" single ((:url . "https://github.com/zonuexe/pandoc.el") (:keywords "documentation" "markup" "converter"))]) (pallet . [(20150512 2) ((dash (2 10 0)) (s (1 9 0)) (f (0 17 1)) (cask (0 7))) "A package management tool for Emacs, using Cask." tar nil]) (palimpsest . [(20130731 821) nil "Various deletion strategies when editing" single nil]) (palette . [(20151231 1545) ((hexrgb (0))) "Color palette useful with RGB, HSV, and color names" single ((:url . "http://www.emacswiki.org/palette.el") (:keywords "color" "rgb" "hsv" "hexadecimal" "face" "frame"))]) (pager-default-keybindings . [(20130719 1357) ((pager (1 0))) "Add the default keybindings suggested for pager.el" single ((:url . "http://github.com/nflath/pager-default-keybindings"))]) (pager . [(20100330 1131) nil "windows-scroll commands" single nil]) (page-break-lines . [(20160617 2100) nil "Display ugly ^L page breaks as tidy horizontal lines" single ((:url . "https://github.com/purcell/page-break-lines") (:keywords "convenience" "faces"))]) (paganini-theme . [(20160612 337) ((emacs (24 0))) "A colorful, dark and warm theme." single ((:url . "https://github.com/onurtemizkan/paganini"))]) (pacmacs . [(20160131 32) ((emacs (24 4)) (dash (2 11 0)) (dash-functional (1 2 0)) (cl-lib (0 5)) (f (0 18 0))) "Pacman for Emacs" tar ((:url . "http://github.com/codingteam/pacmacs.el"))]) (packed . [(20160523 600) ((emacs (24 3)) (dash (2 12 1))) "package manager agnostic Emacs Lisp package utilities" single ((:url . "https://github.com/tarsius/packed") (:keywords "compile" "convenience" "lisp" "package" "library"))]) (package-utils . [(20160627 909) ((epl (0 8)) (async (1 6))) "Extensions for package.el" single ((:url . "https://github.com/Silex/package-utils") (:keywords "package" "convenience"))]) (package-safe-delete . [(20150116 807) ((emacs (24)) (epl (0 7 -3))) "Safely delete package.el packages" single ((:url . "https://github.com/Fanael/package-safe-delete"))]) (package-filter . [(20140105 1426) nil "special handling for package.el" single ((:url . "https://github.com/milkypostman/package-filter"))]) (package-build . [(20160903 1832) ((cl-lib (0 5))) "Tools for assembling a package archive" single ((:keywords "tools"))]) (package+ . [(20150319 1455) nil "Extensions for the package library." single ((:url . "TBA") (:keywords "extensions" "tools"))]) (pabbrev . [(20160320 1401) nil "Predictive abbreviation expansion" single nil]) (p4 . [(20150721 1237) nil "Simple Perforce-Emacs Integration" single ((:url . "https://github.com/gareth-rees/p4.el"))]) (ox-twiki . [(20160306 915) ((org (8)) (cl-lib (0 5))) "org Twiki and Foswiki export" single ((:url . "https://github.com/dfeich/org8-wikiexporters") (:keywords "org"))]) (ox-twbs . [(20160820 604) nil "Bootstrap compatible HTML Back-End for Org" single ((:url . "https://github.com/marsmining/ox-twbs") (:keywords "org" "html" "publish" "twitter" "bootstrap"))]) (ox-tufte . [(20160906 1801) ((org (8 2)) (emacs (24))) "Tufte HTML org-mode export backend" single ((:url . "https://github.com/dakrone/ox-tufte") (:keywords "org" "tufte" "html"))]) (ox-trac . [(20151102 955) ((org (8 0))) "Org Export Backend to Trac WikiFormat" single ((:url . "https://github.com/JalapenoGremlin/ox-trac") (:keywords "org-mode" "trac"))]) (ox-tiddly . [(20151206 240) ((org (8)) (cl-lib (0 5))) "org TiddlyWiki exporter" single ((:url . "https://github.com/dfeich/org8-wikiexporters") (:keywords "org"))]) (ox-textile . [(20151114 2025) ((org (8 1))) "Textile Back-End for Org Export Engine" single ((:url . "https://github.com/yashi/org-textile") (:keywords "org" "textile"))]) (ox-rst . [(20160607 1017) ((emacs (24 4)) (org (8 2 4))) "Export reStructuredText using org-mode." single ((:url . "https://github.com/masayuko/ox-rst") (:keywords "org" "rst" "rest" "restructuredtext"))]) (ox-reveal . [(20160719 28) ((org (20150330))) "reveal.js Presentation Back-End for Org Export Engine" single ((:keywords "outlines" "hypermedia" "slideshow" "presentation"))]) (ox-qmd . [(20160606 504) ((org (8 0))) "Qiita Markdown Back-End for Org Export Engine" single ((:url . "https://github.com/0x60df/ox-qmd") (:keywords "org" "wp" "markdown" "qiita"))]) (ox-pukiwiki . [(20150124 916) ((org (8 1))) "Pukiwiki Back-End for Org Export Engine" single ((:url . "https://github.com/yashi/org-pukiwiki") (:keywords "org" "pukiwiki"))]) (ox-pandoc . [(20160702 145) ((org (8 2)) (emacs (24)) (dash (2 8)) (ht (2 0))) "org exporter for pandoc." single ((:url . "https://github.com/kawabata/ox-pandoc") (:keywords "tools"))]) (ox-nikola . [(20151114 316) ((emacs (24 4)) (org (8 2 4)) (ox-rst (0 2))) "Export Nikola articles using org-mode." single ((:url . "https://github.com/masayuko/ox-nikola") (:keywords "org" "nikola"))]) (ox-mediawiki . [(20150923 902) ((cl-lib (0 5)) (s (1 9 0))) "Mediawiki Back-End for Org Export Engine" single ((:url . "https://github.com/tomalexander/orgmode-mediawiki") (:keywords "org" "wp" "mediawiki"))]) (ox-latex-chinese . [(20160513 1728) ((emacs (24 4))) "An example org latex exporter configure for Chinese users" single ((:url . "https://github.com/tumashu/ox-latex-chinese"))]) (ox-jira . [(20160426 553) ((org (8 0))) "JIRA Backend for Org Export Engine" single ((:url . "https://github.com/stig/ox-jira.el") (:keywords "outlines" "hypermedia" "wp"))]) (ox-ioslide . [(20160120 805) ((emacs (24 1)) (org (8 0)) (cl-lib (0 5)) (f (0 17 2)) (makey (0 3))) "Export org-mode to Google I/O HTML5 slide." tar ((:url . "http://github.com/coldnew/org-ioslide") (:keywords "html" "presentation"))]) (ox-impress-js . [(20150412 1016) ((org (8))) "impress.js Back-End for Org Export Engine" tar ((:url . "https://github.com/kinjo/org-impress-js.el") (:keywords "outlines" "hypermedia" "calendar" "wp"))]) (ox-html5slide . [(20131227 2206) ((org (8 0))) "Export org-mode to HTML5 slide." single ((:url . "http://github.com/coldnew/org-html5slide") (:keywords "html" "presentation"))]) (ox-gfm . [(20160906 1035) nil "Github Flavored Markdown Back-End for Org Export Engine" single ((:keywords "org" "wp" "markdown" "github"))]) (ox-clip . [(20160816 507) ((org (8 2)) (htmlize (0))) "Cross-platform Formatted copy commands for org-mode" single ((:url . "https://github.com/jkitchin/scimax/ox-clip.el") (:keywords "org-mode"))]) (ox-bibtex-chinese . [(20160510 506) ((emacs (24 4))) "Let ox-bibtex work well for Chinese users" single ((:url . "https://github.com/tumashu/ox-bibtex-chinese.git"))]) (ox-asciidoc . [(20160120 523) ((org (8 1))) "AsciiDoc Back-End for Org Export Engine" single ((:url . "https://github.com/yashi/org-asciidoc") (:keywords "org" "asciidoc"))]) (owdriver . [(20141011 738) ((smartrep (0 0 3)) (log4e (0 2 0)) (yaxception (0 2 0))) "Quickly perform various actions on other windows" single ((:url . "https://github.com/aki2o/owdriver") (:keywords "convenience"))]) (overseer . [(20160517 2343) ((emacs (24)) (dash (2 10 0)) (pkg-info (0 4)) (f (0 18 1))) "Ert-runner Integration Into Emacs" single ((:url . "http://www.github.com/tonini/overseer.el"))]) (ov . [(20150311 2228) ((emacs (24 3))) "Overlay library for Emacs Lisp" single ((:url . "https://github.com/ShingoFukuyama/ov.el") (:keywords "overlay"))]) (outshine . [(20160416 846) ((outorg (2 0)) (cl-lib (0 5))) "outline with outshine outshines outline" tar ((:url . "https://github.com/tj64/outshine"))]) (outorg . [(20160327 132) nil "Org-style comment editing" single ((:url . "https://github.com/tj64/outorg"))]) (outlined-elisp-mode . [(20131108 327) nil "outline-minor-mode settings for emacs lisp" single ((:url . "http://hins11.yu-yake.com/"))]) (outline-magic . [(20150209 1426) nil "outline mode extensions for Emacs" single ((:keywords "outlines"))]) (otama . [(20160404 332) nil "Org-table Manipulator" single ((:keywords "database" "org-mode"))]) (osx-trash . [(20160520 600) ((emacs (24 1))) "System trash for OS X" tar ((:url . "https://github.com/lunaryorn/osx-trash.el") (:keywords "files" "convenience" "tools" "unix"))]) (osx-pseudo-daemon . [(20131026 1730) nil "Daemon mode that plays nice with OSX." single ((:url . "https://github.com/DarwinAwardWinner/osx-pseudo-daemon") (:keywords "convenience" "osx"))]) (osx-plist . [(20101130 448) nil "Apple plist file parser" single ((:keywords "convenience"))]) (osx-org-clock-menubar . [(20150205 1311) nil "simple menubar integration for org-clock" tar ((:url . "https://github.com/jordonbiondo/osx-org-clock-menubar") (:keywords "org" "osx"))]) (osx-location . [(20150613 217) nil "Watch and respond to changes in geographical location on OS X" tar nil]) (osx-lib . [(20160912 956) ((emacs (24 4))) "Basic function for Apple/OSX." single ((:keywords "apple" "applescript" "osx" "finder" "emacs" "elisp" "vpn" "speech"))]) (osx-dictionary . [(20160628 111) ((cl-lib (0 5))) "Interface for OSX Dictionary.app" tar ((:url . "https://github.com/xuchunyang/osx-dictionary.el") (:keywords "mac" "dictionary"))]) (osx-clipboard . [(20141012 17) nil "Use the OS X clipboard from terminal Emacs" single ((:url . "https://github.com/joddie/osx-clipboard-mode"))]) (osx-browse . [(20140508 1341) ((string-utils (0 3 2)) (browse-url-dwim (0 6 6))) "Web browsing helpers for OS X" single ((:url . "http://github.com/rolandwalker/osx-browse") (:keywords "hypermedia" "external"))]) (origami . [(20160710 958) ((s (1 9 0)) (dash (2 5 0)) (emacs (24))) "Flexible text folding" tar ((:url . "https://github.com/gregsexton/origami.el") (:keywords "folding"))]) (orgtbl-show-header . [(20141023 137) nil "Show the header of the current column in the minibuffer" single nil]) (orgtbl-join . [(20150121 1446) ((cl-lib (0 5))) "join columns from another table" tar ((:keywords "org" "table" "join" "filtering"))]) (orgtbl-ascii-plot . [(20151215 1351) nil "ascii-art bar plots in org-mode tables" single ((:keywords "org" "table" "ascii" "plot"))]) (orgtbl-aggregate . [(20160421 726) nil "Create an aggregated Org table from another one" tar ((:keywords "org" "table" "aggregation" "filtering"))]) (orglue . [(20150430 513) ((org (8 1)) (epic (0 2)) (org-mac-link (1 2))) "more functionality to org-mode." tar ((:keywords "org"))]) (orglink . [(20160606 407) ((emacs (24 3)) (dash (2 12 1)) (org (8 3))) "use Org Mode links in other modes" single ((:url . "http://github.com/tarsius/orglink") (:keywords "hypertext"))]) (orgit . [(20160801 715) ((emacs (24 4)) (dash (2 12 1)) (magit (2 4 1)) (org (8 3 3))) "support for Org links to Magit buffers" single ((:url . "https://github.com/magit/orgit"))]) (orgbox . [(20140528 1826) ((org (8 0)) (cl-lib (0 5))) "Mailbox-like task scheduling Org." single ((:url . "https://github.com/yasuhito/orgbox") (:keywords "org"))]) (organic-green-theme . [(20160811 1539) nil "Low-contrast green color theme." single nil]) (org2jekyll . [(20160519 1004) ((dash-functional (2 11 0)) (s (1 9 0)) (deferred (0 3 1)) (kv (0 0 19))) "Minor mode to publish org-mode post to jekyll without specific yaml" tar ((:url . "https://github.com/ardumont/org2jekyll") (:keywords "org-mode" "jekyll" "blog" "publish"))]) (org2issue . [(20160426 1818) ((org (8 0)) (emacs (24 4)) (ox-gfm (0 1)) (gh (0 1)) (s (20160405 920))) "export org to github issue" single ((:url . "https://github.com/lujun9972/org2issue") (:keywords "convenience" "github" "org"))]) (org2elcomment . [(20160712 2026) ((org (8 3 4))) "Convert Org file to Elisp comments" single ((:keywords "extensions"))]) (org2blog . [(20160502 1821) ((org (8 1)) (xml-rpc (1 6 8)) (metaweblog (0 1))) "Blog from Org mode to wordpress" tar nil]) (org-wunderlist . [(20150817 1913) ((request-deferred (0 2 0)) (alert (1 1)) (emacs (24)) (cl-lib (0 5)) (org (8 2 4)) (s (1 9 0))) "Org sync with Wunderlist" single ((:url . "https://github.com/myuhe/org-wunderlist.el") (:keywords "convenience"))]) (org-webpage . [(20160904 122) ((cl-lib (1 0)) (ht (1 5)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0)) (simple-httpd (0 1))) "A static site generator based on org mode." tar nil]) (org-wc . [(20160204 1715) nil "Count words in org mode trees." single nil]) (org-vcard . [(20151213 2222) nil "org-mode support for vCard export and import." tar ((:url . "https://github.com/flexibeast/org-vcard") (:keywords "outlines" "org" "vcard"))]) (org-trello . [(20160604 645) ((request-deferred (0 2 0)) (deferred (0 4 0)) (s (1 11 0)) (dash-functional (2 12 1)) (dash (2 12 1)) (emacs (24))) "Minor mode to synchronize org-mode buffer and trello board" tar nil]) (org-tree-slide . [(20160513 2325) nil "A presentation tool for org-mode" single ((:keywords "org-mode" "presentation" "narrowing"))]) (org-transform-tree-table . [(20150110 633) ((dash (2 10 0)) (s (1 3 0))) "Transform org-mode tree with properties to a table, and the other way around" single ((:url . "https://github.com/jplindstrom/emacs-org-transform-tree-table") (:keywords "org-mode" "table" "org-table" "tree" "csv" "convert"))]) (org-tracktable . [(20160621 1127) ((emacs (24)) (cl-lib (0 5))) "Track your writing progress in an org-table" single ((:url . "https://github.com/tty-tourist/org-tracktable") (:keywords "org" "writing"))]) (org-toodledo . [(20150301 313) ((request-deferred (0 2 0)) (emacs (24)) (cl-lib (0 5))) "Toodledo integration for Emacs Org mode" tar ((:keywords "outlines" "data"))]) (org-time-budgets . [(20151111 1) ((alert (0 5 10)) (cl-lib (0 5))) "Define time budgets and display clocked time." single nil]) (org-themis . [(20160121 2004) ((cl-lib (0 4))) "Experimental project management mode for org-mode" single ((:url . "http://github.com/zellio/org-themis") (:keywords "org-mode" "elisp" "project"))]) (org-tfl . [(20160407 1440) ((org (0 16 2)) (cl-lib (0 5)) (emacs (24 1))) "Transport for London meets Orgmode" tar ((:url . "https://github.com/storax/org-tfl") (:keywords "org" "tfl"))]) (org-table-comment . [(20120209 1051) nil "Org table comment modes." single ((:url . "http://github.com/mlf176f2/org-table-comment.el") (:keywords "org-mode" "orgtbl"))]) (org-sync . [(20150817 754) ((cl-lib (0 5)) (org (8 2)) (emacs (24))) "Synchronize Org documents with External Issue Trackers" tar ((:url . "https://github.com/arbox/org-sync") (:keywords "org" "synchronization" "issue tracking" "github" "redmine"))]) (org-rtm . [(20160214 436) ((rtm (0 1))) "Simple import/export from rememberthemilk to org-mode" single ((:url . "https://github.com/pmiddend/org-rtm") (:keywords "outlines" "data"))]) (org-review . [(20160906 2237) nil "schedule reviews for Org entries" single ((:url . "https://github.com/brabalan/org-review") (:keywords "org" "review"))]) (org-repo-todo . [(20160307 1029) nil "Simple repository todo management with org-mode" single ((:url . "https://github.com/waymondo/org-repo-todo") (:keywords "convenience"))]) (org-ref . [(20160912 941) ((dash (2 11 0)) (helm (1 5 5)) (helm-bibtex (2 0 0)) (ivy (0 8 0)) (hydra (0 13 2)) (key-chord (0)) (s (1 10 0)) (f (0 18 0)) (emacs (24 4))) "citations, cross-references and bibliographies in org-mode" tar ((:url . "https://github.com/jkitchin/org-ref") (:keywords "org-mode" "cite" "ref" "label"))]) (org-redmine . [(20160711 414) nil "Redmine tools using Emacs OrgMode" single ((:url . "https://github.com/gongo/org-redmine") (:keywords "redmine" "org"))]) (org-readme . [(20151204 417) ((http-post-simple (1 0)) (yaoddmuse (0 1 1)) (header2 (21 0)) (lib-requires (21 0)) (cl-lib (0 5))) "Integrates Readme.org and Commentary/Change-logs." tar ((:url . "https://github.com/mlf176f2/org-readme") (:keywords "header2" "readme.org" "emacswiki" "git"))]) (org-random-todo . [(20160208 426) ((emacs (24 3)) (alert (1 2))) "notify of random TODO's" single ((:keywords "org" "todo" "notification"))]) (org-protocol-jekyll . [(20151119 838) ((cl-lib (0 5))) "Jekyll's handler for org-protocol" single nil]) (org-projectile . [(20160822 2123) ((projectile (0 11 0)) (dash (2 10 0)) (emacs (24))) "Repository todo management for org-mode" single ((:url . "https://github.com/IvanMalison/org-projectile") (:keywords "org" "projectile" "todo"))]) (org-preview-html . [(20160913 526) ((org (8 0)) (emacs (24 4))) "automatically use eww to preview the current org file on save" single ((:url . "https://github.com/lujun9972/org-preview-html") (:keywords "convenience" "eww" "org"))]) (org-present . [(20141109 1756) ((org (7))) "Minimalist presentation minor-mode for Emacs org-mode." single ((:url . "https://github.com/rlister/org-present"))]) (org-pomodoro . [(20160725 349) ((alert (0 5 10)) (cl-lib (0 5))) "Pomodoro implementation for org-mode." tar ((:url . "https://github.com/lolownia/org-pomodoro"))]) (org-pdfview . [(20160125 1254) ((org (6 1)) (pdf-tools (0 40))) "Support for links to documents in pdfview mode" single ((:keywords "org" "pdf-view" "pdf-tools"))]) (org-password-manager . [(20160430 1851) ((org (8 2 10)) (s (1 9 0))) "Minimal password manager for Emacs Org Mode." single ((:url . "https://git.leafac.com/leafac/org-password-manager") (:keywords "password"))]) (org-pandoc . [(20130729 1850) nil "Export from Org using Pandoc" tar nil]) (org-page . [(20160626 108) ((ht (1 5)) (simple-httpd (1 4 6)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0)) (cl-lib (0 5)) (git (0 1 1))) "a static site generator based on org mode" tar nil]) (org-outlook . [(20160705 638) nil "Outlook org" tar ((:url . "https://github.com/mlf176f2/org-outlook.el") (:keywords "org-outlook"))]) (org-octopress . [(20150826 416) ((org (8 0)) (orglue (0 1)) (ctable (0 1 1))) "Compose octopress articles using org-mode." tar ((:keywords "org" "jekyll" "octopress" "blog"))]) (org-multiple-keymap . [(20150328 1806) ((org (8 2 4)) (emacs (24)) (cl-lib (0 5))) "Set keymap to elements, such as timestamp and priority." single ((:url . "https://github.com/myuhe/org-multiple-keymap.el") (:keywords "convenience" "org-mode"))]) (org-mobile-sync . [(20160629 1307) ((emacs (24 3 50)) (org (8 0))) "automatically sync org-mobile on changes" single ((:url . "https://github.com/steckerhalter/org-mobile-sync") (:keywords "org-mode" "org" "mobile" "sync" "todo"))]) (org-mac-link . [(20160808 220) nil "Insert org-mode links to items selected in various Mac apps" single ((:keywords "org" "mac" "hyperlink"))]) (org-mac-iCal . [(20140107 519) nil "Imports events from iCal.app to the Emacs diary" single ((:keywords "outlines" "calendar"))]) (org-linkany . [(20160206 2011) ((log4e (0 2 0)) (yaxception (0 1))) "Insert link using anything.el/helm.el on org-mode" single ((:url . "https://github.com/aki2o/org-linkany") (:keywords "org" "completion"))]) (org-link-travis . [(20140405 1627) ((org (7))) "Insert/Export the link of Travis CI on org-mode" single ((:url . "https://github.com/aki2o/org-link-travis") (:keywords "org"))]) (org-journal . [(20160907 621) nil "a simple org-mode based journaling mode" single ((:url . "http://github.com/bastibe/org-journal"))]) (org-jira . [(20160821 1939) nil "Syncing between Jira and Org-mode." tar ((:url . "https://github.com/baohaojun/org-jira"))]) (org-jekyll . [(20130508 239) ((org (8 0))) "Export jekyll-ready posts form org-mode entries" single ((:url . "http://juanreyero.com/open/org-jekyll/") (:keywords "hypermedia"))]) (org-iv . [(20160609 1854) ((impatient-mode (1 0 0)) (org (8 0)) (cl-lib (0 5))) "a tool used to view html (in browser) generated by org-file once the org-file changes" tar nil]) (org-if . [(20150920 813) nil "Interactive Fiction Authoring System for Org-Mode." tar nil]) (org-grep . [(20151202 429) ((cl-lib (0 5))) "Kind of M-x rgrep adapted for Org mode." single ((:url . "https://github.com/pinard/org-grep"))]) (org-gnome . [(20150614 757) ((alert (1 2)) (telepathy (0 1)) (gnome-calendar (0 1))) "Orgmode integration with the GNOME desktop" single ((:keywords "org" "gnome"))]) (org-gcal . [(20160805 2144) ((request-deferred (0 2 0)) (alert (1 1)) (emacs (24)) (cl-lib (0 5)) (org (8 2 4))) "Org sync with Google Calendar" single ((:url . "https://github.com/myuhe/org-gcal.el") (:keywords "convenience"))]) (org-fstree . [(20090723 819) nil "include a filesystem subtree into an org file" single ((:url . "http://www.burtzlaff.de/org-fstree/org-fstree.el") (:keywords "org-mode" "filesystem" "tree"))]) (org-elisp-help . [(20130423 1545) ((cl-lib (0 2)) (org (8 0))) "org links to emacs-lisp documentation" single ((:url . "https://github.com/tarsius/org-elisp-help") (:keywords "org" "remember" "lisp"))]) (org-ehtml . [(20150506 1658) ((web-server (20140109 2200)) (emacs (24 3))) "Export Org-mode files as editable web pages" tar nil]) (org-dropbox . [(20150113 2109) ((dash (2 2)) (names (20150000)) (emacs (24))) "move Dropbox notes from phone into org-mode datetree" single ((:url . "https://github.com/heikkil/org-dropbox") (:keywords "dropbox" "android" "notes" "org-mode"))]) (org-drill-table . [(20140117 137) ((s (1 7 0)) (dash (2 2 0)) (cl-lib (0 3)) (org-plus-contrib (8 2)) (emacs (24 1))) "Generate drill cards from org tables" single nil]) (org-dp . [(20160326 603) ((cl-lib (0 5))) "Declarative Local Programming with Org Elements" tar ((:url . "https://github.com/tj64/org-dp"))]) (org-download . [(20160907 1021) ((async (1 2))) "Image drag-and-drop for Emacs org-mode" single ((:url . "https://github.com/abo-abo/org-download") (:keywords "images" "screenshots" "download"))]) (org-dotemacs . [(20151119 1022) ((org (7 9 3)) (cl-lib (1 0))) "Store your emacs config as an org file, and choose which bits to load." single ((:url . "https://github.com/vapniks/org-dotemacs") (:keywords "local"))]) (org-doing . [(20160705 851) nil "Keep track of what you're doing" tar ((:url . "https://github.com/omouse/org-doing") (:keywords "tools" "org"))]) (org-dashboard . [(20150812 302) ((cl-lib (0 5))) "Visually summarize progress in org files" single ((:url . "http://github.com/bard/org-dashboard") (:keywords "outlines" "calendar"))]) (org-cua-dwim . [(20120202 2134) nil "Org-mode and Cua mode compatibility layer" single ((:keywords "org-mode" "cua-mode"))]) (org-context . [(20160108 214) nil "Contextual capture and agenda commands for Org-mode" single ((:url . "https://github.com/thisirs/org-context") (:keywords "org" "capture" "agenda" "convenience"))]) (org-commentary . [(20160801 2337) ((dash (2 0)) (emacs (24 4)) (org (8 0))) "generate or update conventional library headers using Org mode files" tar ((:url . "https://github.com/smaximov/org-commentary") (:keywords "convenience" "docs" "tools"))]) (org-clock-csv . [(20160906 1047) nil "Export `org-mode' clock entries to CSV format." single ((:url . "https://github.com/atheriel/org-clock-csv") (:keywords "org"))]) (org-clock-convenience . [(20160830 1156) ((cl-lib (0 5)) (org (8)) (emacs (24 3))) "convenience functions for org time tracking" single ((:url . "https://github.com/dfeich/org-clock-convenience") (:keywords "org"))]) (org-cliplink . [(20160819 900) ((emacs (24 4))) "insert org-mode links from the clipboard" tar ((:url . "http://github.com/rexim/org-cliplink"))]) (org-chinese-utils . [(20160811 217) nil "A org-mode utils manager for Chinese users" single ((:url . "https://github.com/tumashu/org-chinese-utils.git"))]) (org-capture-pop-frame . [(20160518 308) ((emacs (24 4))) "Run org-capture in a new pop frame" single ((:url . "https://github.com/tumashu/org-capture-pop-frame.git"))]) (org-caldav . [(20160614 1342) ((org (7))) "Sync org files with external calendar through CalDAV" single ((:keywords "calendar" "caldav"))]) (org-bullets . [(20140918 1137) nil "Show bullets in org-mode as UTF-8 characters" single ((:url . "https://github.com/sabof/org-bullets"))]) (org-bookmark-heading . [(20160325 2359) ((emacs (24 4))) "Emacs bookmark support for org-mode" single ((:url . "http://github.com/alphapapa/org-bookmark-heading") (:keywords "hypermedia" "outlines"))]) (org-beautify-theme . [(20160829 2146) nil "A sub-theme to make org-mode more beautiful." single ((:keywords "org" "theme"))]) (org-autolist . [(20150922 705) nil "Improved list management in org-mode" single ((:url . "https://github.com/calvinwyoung/org-autolist") (:keywords "lists" "checklists" "org-mode"))]) (org-attach-screenshot . [(20160529 737) nil "screenshots integrated with org attachment dirs" single ((:url . "https://github.com/dfeich/org-screenshot") (:keywords "org"))]) (org-alert . [(20160701 1900) ((s (1 10 0)) (dash (2 12 0)) (alert (1 2))) "Notify org deadlines via notify-send" single ((:url . "https://github.com/groksteve/org-alert") (:keywords "org" "org-mode" "notify" "notifications"))]) (org-agenda-property . [(20140626 1416) ((emacs (24 2))) "Display org properties in the agenda buffer." single ((:url . "http://github.com/Bruce-Connor/org-agenda-property") (:keywords "calendar"))]) (org-ac . [(20140302 413) ((auto-complete-pcmp (0 0 1)) (log4e (0 2 0)) (yaxception (0 1))) "Some auto-complete sources for org-mode" single ((:url . "https://github.com/aki2o/org-ac") (:keywords "org" "completion"))]) (operate-on-number . [(20150706 2323) nil "Operate on number at point with arithmetic functions" single ((:url . "https://github.com/knu/operate-on-number.el") (:keywords "editing"))]) (openwith . [(20120531 1436) nil "Open files with external programs" single ((:url . "https://bitbucket.org/jpkotta/openwith") (:keywords "files" "processes"))]) (openstack-cgit-browse-file . [(20130819 227) nil "Browse the current file in OpenStack cgit" single ((:url . "https://github.com/chmouel/openstack-cgit-browse-file") (:keywords "convenience" "vc" "git" "cgit" "gerrit" "openstack"))]) (opensource . [(20160802 303) ((s (1 11 0)) (dash (2 12 1)) (pkg-info (0 6 0)) (request (0 2 0))) "Client for Opensource API" tar ((:url . "https://github.com/nlamirault/opensource.el") (:keywords "opensource"))]) (opencl-mode . [(20160220 909) nil "Syntax coloring for opencl kernels" single ((:url . "https://github.com/salmanebah/opencl-mode") (:keywords "c" "opencl"))]) (open-junk-file . [(20160912 1859) nil "Open a junk (memo) file to try-and-error" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/open-junk-file.el") (:keywords "convenience" "tools"))]) (opam . [(20150719 520) ((emacs (24 1))) "OPAM tools" single ((:url . "https://github.com/lunaryorn/opam.el") (:keywords "convenience"))]) (oneonone . [(20151231 1541) ((hexrgb (0))) "Frame configuration that uses one frame per window." single ((:url . "http://www.emacswiki.org/oneonone.el") (:keywords "local" "frames"))]) (one-time-pad-encrypt . [(20160329 813) nil "One time pad encryption within file" single ((:url . "https://github.com/garvinguan/emacs-one-time-pad/") (:keywords "convenience"))]) (on-screen . [(20160302 150) ((cl-lib (0))) "guide your eyes while scrolling" single ((:url . "https://github.com/michael-heerdegen/on-screen.el") (:keywords "convenience"))]) (on-parens . [(20150702 1506) ((dash (2 10 0)) (emacs (24)) (evil (1 1 6)) (smartparens (1 6 3))) "smartparens wrapper to fit with evil-mode/vim normal-state" single ((:keywords "evil" "smartparens"))]) (omtose-phellack-theme . [(20160909 505) nil "A dark theme, with cold bluish touch." tar nil]) (omnisharp . [(20151210 1114) ((json (1 2)) (flycheck (0 25 1)) (dash (20141201 2206)) (auto-complete (1 4)) (popup (0 5 1)) (csharp-mode (0 8 7)) (cl-lib (0 5)) (s (1 9 0))) "Omnicompletion (intellisense) and more for C#" tar ((:url . "https://github.com/sp3ctum/omnisharp-emacs") (:keywords "csharp" "c#" "ide" "auto-complete" "intellisense"))]) (omniref . [(20160225 1424) nil "Omniref Ruby documentation search engine interface" single ((:url . "http://github.org/dotemacs/omniref.el") (:keywords "docs" "help" "tools"))]) (omni-tags . [(20150513 1053) ((pcre2el (1 7)) (cl-lib (0 5))) "Highlight and Actions for 'Tags'" tar ((:url . "http://github.com/AdrieanKhisbe/omni-tags.el") (:keywords "convenience"))]) (omni-scratch . [(20151211 859) nil "Easy and mode-specific draft buffers" single ((:url . "https://github.com/AdrieanKhisbe/omni-scratch.el") (:keywords "convenience" "languages" "tools"))]) (omni-quotes . [(20150604 1057) ((dash (2 8)) (omni-log (0 1 2))) "Random quotes displayer" tar ((:url . "https://github.com/AdrieanKhisbe/omni-quotes.el") (:keywords "convenience"))]) (omni-log . [(20150604 1038) ((emacs (24)) (ht (2 0)) (s (1 6 1)) (dash (1 8 0))) "Logging utilities" tar ((:url . "https://github.com/AdrieanKhisbe/omni-log.el") (:keywords "convenience" "languages" "tools"))]) (omni-kill . [(20150526 2349) nil "Kill all the things" single ((:keywords "convenience" "editing" "tools"))]) (om-mode . [(20140915 1410) nil "Insert Om component template with life cycle." single ((:keywords "clojurescript"))]) (olivetti . [(20160912 1758) nil "Minor mode for a nice writing environment" single ((:keywords "wp"))]) (oldlace-theme . [(20150705 600) ((emacs (24))) "Emacs 24 theme with an 'oldlace' background." single nil]) (offlineimap . [(20150916 458) nil "Run OfflineIMAP from Emacs" single ((:url . "http://julien.danjou.info/offlineimap-el.html"))]) (octopress . [(20160731 1150) nil "A lightweight wrapper for Jekyll and Octopress." tar ((:url . "https://github.com/aaronbieber/octopress.el") (:keywords "octopress" "blog"))]) (octicons . [(20151031 2040) ((cl-lib (0 5))) "octicons utility" tar ((:url . "https://github.com/syohex/emacs-octicons"))]) (ocp-indent . [(20160428 2334) nil "automatic indentation with ocp-indent" single ((:url . "http://www.typerex.org/ocp-indent.html") (:keywords "ocaml" "languages"))]) (ocodo-svg-modelines . [(20150516 719) ((svg-mode-line-themes (0))) "A collection of beautiful SVG modelines" tar nil]) (occur-x . [(20130610 643) nil "Extra functionality for occur" single ((:keywords "occur" "search" "convenience"))]) (occur-context-resize . [(20151227 2002) nil "dynamically resize context around matches in occur-mode" single ((:url . "https://github.com/dgtized/occur-context-resize.el") (:keywords "matching"))]) (occidental-theme . [(20130312 1258) nil "Custom theme for faces based on Adwaita" single ((:url . "http://github.com/olcai/occidental-theme"))]) (obsidian-theme . [(20140420 943) nil "port of the eclipse obsidian theme" single ((:url . "http://github.com/mswift42/obsidian-theme"))]) (objc-font-lock . [(20141021 1122) nil "Highlight Objective-C method calls." single ((:url . "https://github.com/Lindydancer/objc-font-lock") (:keywords "languages" "faces"))]) (oberon . [(20120715 209) nil "Major mode for editing Oberon/Oberon-2 program texts" single ((:keywords "oberon" "oberon-2" "languages" "oop"))]) (ob-typescript . [(20150804 530) ((emacs (24)) (org (8 0))) "org-babel functions for typescript evaluation" single ((:url . "https://github.com/lurdan/ob-typescript") (:keywords "literate programming" "reproducible research" "typescript"))]) (ob-translate . [(20160411 124) ((google-translate (0 11)) (org (8))) "Translation of text blocks in org-mode." single ((:url . "https://github.com/krisajenkins/ob-translate") (:keywords "org" "babel" "translate" "translation"))]) (ob-swift . [(20151204 2311) ((org (8))) "org-babel functions for swift evaluation" single ((:url . "http://github.com/zweifisch/ob-swift") (:keywords "org" "babel" "swift"))]) (ob-spice . [(20160815 2249) ((spice-mode (0 0 1)) (org (8))) "org-babel functions for spice evaluation" single ((:url . "http://tiagoweber.github.io"))]) (ob-sml . [(20130829 1143) ((sml-mode (6 4))) "org-babel functions for template evaluation" single ((:url . "http://orgmode.org") (:keywords "literate programming" "reproducible research"))]) (ob-smiles . [(20160717 421) ((smiles-mode (0 0 1)) (org (8))) "Org-mode Babel support for SMILES." single ((:keywords "org" "babel" "smiles"))]) (ob-sagemath . [(20160903 25) ((sage-shell-mode (0 0 8)) (s (1 8 0)) (emacs (24))) "org-babel functions for SageMath evaluation" tar ((:url . "https://github.com/stakemori/ob-sagemath") (:keywords "sagemath" "org-babel"))]) (ob-restclient . [(20160323 2305) ((restclient (0))) "org-babel functions for restclient-mode" single ((:url . "http://orgmode.org") (:keywords "literate programming" "reproducible research"))]) (ob-redis . [(20160411 2013) ((org (8))) "Execute Redis queries within org-mode blocks." single ((:url . "https://github.com/stardiviner/ob-redis") (:keywords "org" "babel" "redis"))]) (ob-prolog . [(20150530 937) nil "org-babel functions for prolog evaluation." single ((:url . "https://github.com/ljos/ob-prolog") (:keywords "literate programming" "reproducible research"))]) (ob-php . [(20160505 219) ((org (8))) "Execute PHP within org-mode blocks." single ((:url . "https://github.com/stardiviner/ob-php") (:keywords "org" "babel" "php"))]) (ob-nim . [(20160830 220) ((cl-lib (0 5))) "Babel Functions for nim" single ((:keywords "literate programming" "reproducible research"))]) (ob-mongo . [(20160504 1434) ((org (8))) "Execute mongodb queries within org-mode blocks." single ((:url . "https://github.com/krisajenkins/ob-mongo") (:keywords "org" "babel" "mongo" "mongodb"))]) (ob-ml-marklogic . [(20160508 932) nil "org-babel functions for MarkLogic evaluation" tar ((:url . "http://github.com/ndw/ob-ml-marklogic") (:keywords "marklogic" "xquery" "javascript" "sparql"))]) (ob-lfe . [(20150701 655) ((org (8))) "org-babel functions for lfe evaluation" single ((:url . "http://github.com/zweifisch/ob-lfe") (:keywords "org" "babel" "lfe" "lisp" "erlang"))]) (ob-kotlin . [(20150312 614) ((org (8))) "org-babel functions for kotlin evaluation" single ((:url . "http://github.com/zweifisch/ob-kotlin") (:keywords "org" "babel" "kotlin"))]) (ob-ipython . [(20160703 639) ((s (1 9 0)) (dash (2 10 0)) (dash-functional (1 2 0)) (f (0 17 2)) (emacs (24))) "org-babel functions for IPython evaluation" tar ((:url . "http://www.gregsexton.org") (:keywords "literate programming" "reproducible research"))]) (ob-http . [(20160709 224) ((s (1 9 0)) (cl-lib (0 5))) "http request in org-mode babel" tar ((:url . "http://github.com/zweifisch/ob-http"))]) (ob-go . [(20160711 1606) nil "org-babel functions for go evaluation" tar ((:url . "http://orgmode.org") (:keywords "golang" "go" "literate programming" "reproducible research"))]) (ob-elixir . [(20151021 447) ((org (8))) "org-babel functions for elixir evaluation" single ((:url . "http://github.com/zweifisch/ob-elixir") (:keywords "org" "babel" "elixir"))]) (ob-diagrams . [(20160407 537) nil "org-babel functions for diagrams evaluation" single ((:url . "http://orgmode.org") (:keywords "literate programming" "reproducible research"))]) (ob-dart . [(20160707 2040) nil "org-babel functions for Dart evaluation" single ((:url . "http://github.org/mzimmerm/ob-dart") (:keywords "literate programming" "reproducible research" "emacs" "org" "babel" "dart"))]) (ob-cypher . [(20150224 1837) ((s (1 9 0)) (cypher-mode (0 0 6)) (dash (2 10 0)) (dash-functional (1 2 0))) "query neo4j using cypher in org-mode blocks" single ((:url . "http://github.com/zweifisch/ob-cypher") (:keywords "org" "babel" "cypher" "neo4j"))]) (ob-coffee . [(20160415 2036) ((org (8))) "org-babel functions for coffee-script evaluation" tar ((:url . "http://github.com/zweifisch/ob-coffee") (:keywords "org" "babel" "coffee-script"))]) (ob-browser . [(20150101 710) ((org (8))) "Render HTML in org-mode blocks." tar ((:url . "https://github.com/krisajenkins/ob-browser") (:keywords "org" "babel" "browser" "phantomjs"))]) (ob-axiom . [(20160310 1353) ((emacs (24 2)) (axiom-environment (20150801))) "org-babel for the axiom-environment system" single ((:keywords "axiom" "openaxiom" "fricas"))]) (oauth . [(20130127 1751) nil "Oauth library." tar ((:keywords "comm"))]) (o-blog . [(20151202 1539) nil "Standalone orgmode blog exporter" tar ((:keywords "emacs"))]) (nyan-prompt . [(20140809 2208) nil "Nyan Cat on the eshell prompt." tar ((:url . "http://github.com/PuercoPop/nyan-prompt") (:keywords "nyan" "cat" "lulz" "eshell" "rainbow dependencies ((rx 0))"))]) (nyan-mode . [(20160429 1323) nil "Nyan Cat shows position in current buffer in mode-line." tar ((:url . "https://github.com/TeMPOraL/nyan-mode/") (:keywords "nyan" "cat" "lulz" "scrolling" "pop tart cat" "build something amazing"))]) (nvm . [(20151113 55) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (dash-functional (2 4 0))) "Manage Node versions within Emacs" single ((:url . "http://github.com/rejeep/nvm.el") (:keywords "node" "nvm"))]) (nummm-mode . [(20131117 214) nil "Display the number of minor modes instead of their names" single ((:url . "http://github.com/agpchil/nummm-mode"))]) (number-lock . [(20160829 1900) nil "Enter symbols on your number keys without pressing shift" single ((:url . "https://github.com/Liu233w/number-lock.el") (:keywords "convenience"))]) (number . [(20141127 1004) nil "Working with numbers at point." single nil]) (nu-mode . [(20160520 614) ((undo-tree (0 6 5)) (transpose-frame (0)) (helm (20140902 1005))) "Modern Emacs Prompts Based Keybinding." tar nil]) (nsis-mode . [(20150914 546) nil "NSIS-mode" tar ((:url . "http://github.com/mlf176f2/nsis-mode") (:keywords "nsis"))]) (nrepl-sync . [(20140807 854) ((cider (0 6))) "connect to nrepl port and eval .sync.clj." single ((:url . "https://github.com/phillord/lein-sync"))]) (nrepl-eval-sexp-fu . [(20140311 341) ((highlight (0 0 0)) (smartparens (0 0 0)) (thingatpt (0 0 0))) "Tiny functionality enhancements for evaluating sexps." single ((:keywords "lisp" "highlight" "convenience"))]) (npm-mode . [(20160706 1129) ((emacs (24 1))) "minor mode for working with npm projects" single ((:url . "https://github.com/mojochao/npm-mode") (:keywords "convenience" "project" "javascript" "node" "npm"))]) (noxml-fold . [(20160707 847) nil "Fold away XML things." single ((:url . "https://github.com/paddymcall/noxml-fold") (:keywords "xml" "folding"))]) (novice+ . [(20151231 1540) nil "Extensions to `novice.el'." single ((:url . "http://www.emacswiki.org/novice+.el") (:keywords "internal" "help"))]) (notmuch-labeler . [(20131230 919) ((notmuch (0))) "Improve notmuch way of displaying labels" tar ((:url . "https://github.com/DamienCassou/notmuch-labeler") (:keywords "emacs" "package" "elisp" "notmuch" "emails"))]) (notmuch . [(20160912 412) nil "run notmuch within emacs" tar ((:url . "https://notmuchmail.org/"))]) (nose . [(20140520 948) nil "Easy Python test running in Emacs" single ((:keywords "nose" "python" "testing"))]) (noflet . [(20141102 654) nil "locally override functions" single ((:url . "https://github.com/nicferrier/emacs-noflet") (:keywords "lisp"))]) (nodejs-repl . [(20151229 603) nil "Run Node.js REPL" single nil]) (node-resolver . [(20140930 1023) ((cl-lib (0 5))) "hook to install node modules in background" single ((:url . "https://github.com/meandavejustice/node-resolver.el") (:keywords "convenience" "nodejs" "javascript" "npm"))]) (noctilux-theme . [(20150723 747) nil "Dark theme inspired by LightTable" tar nil]) (noccur . [(20150514 1420) nil "Run multi-occur on project/dired files" single ((:keywords "convenience"))]) (no-littering . [(20160828 458) ((cl-lib (0 5))) "help keeping ~/.emacs.d clean" single ((:url . "http://github.com/tarsius/no-littering"))]) (nnir-est . [(20140301 602) nil "Gnus nnir interface for HyperEstraier" single ((:url . "https://github.com/kawabata/nnir-est") (:keywords "mail"))]) (nm . [(20151110 1110) ((notmuch (0 21)) (peg (0 6)) (company (0)) (emacs (24 3))) "NEVERMORE: an email interface for Notmuch" tar ((:url . "https://github.com/tjim/nevermore"))]) (nlinum-relative . [(20160526 8) ((emacs (24 4)) (nlinum (1 5))) "Relative line number with nlinum" single ((:keywords "convenience"))]) (nixos-options . [(20160209 1041) ((emacs (24))) "Interface for browsing and completing NixOS options." single ((:url . "http://www.github.com/travisbhartwell/nix-emacs/") (:keywords "unix"))]) (nix-sandbox . [(20160223 553) ((dash (2 12 1)) (s (1 10 0))) "Utility functions to work with nix-shell sandboxes" single ((:url . "https://github.com/travisbhartwell/nix-emacs"))]) (nix-mode . [(20160502 637) nil "Major mode for editing Nix expressions" single ((:url . "https://github.com/NixOS/nix/tree/master/misc/emacs"))]) (nix-buffer . [(20160906 251) ((f (0 17 3)) (emacs (24 4))) "Set up buffer environments with nix" single ((:url . "https://github.com/shlevy/nix-buffer/tree/master/"))]) (ninja-mode . [(20141203 2159) ((emacs (24))) "Major mode for editing .ninja files" single nil]) (nim-mode . [(20160912 2126) ((emacs (24 4)) (epc (0 1 1)) (let-alist (1 0 1)) (commenter (0 5 1)) (flycheck (28))) "A major mode for the Nim programming language" tar ((:keywords "nim" "languages"))]) (niflheim-theme . [(20150630 821) nil "A port of the Nifleim theme to Emacs" single ((:url . "https://github.com/niflheim-theme/emacs") (:keywords "themes"))]) (niconama . [(20160703 802) ((emacs (24)) (request (0 2 0)) (cl-lib (0 5))) "Tools for Niconico Live Broadcast" single ((:url . "https://github.com/NOBUTOKA/niconama.el") (:keywords "comm"))]) (niceify-info . [(20160416 544) nil "improve usability of Info pages" single nil]) (nginx-mode . [(20150824 1411) nil "major mode for editing nginx config files" single ((:keywords "nginx"))]) (ng2-mode . [(20160910 820) ((typescript-mode (0 1))) "Major modes for editing Angular 2" tar ((:url . "http://github.com/AdamNiederer/ng2-mode") (:keywords "typescript" "angular" "angular2" "template"))]) (nexus . [(20140114 505) nil "REST Client for Nexus Maven Repository servers" tar ((:keywords "comm"))]) (newlisp-mode . [(20160226 745) nil "newLISP editing mode for Emacs" single ((:url . "https://github.com/kosh04/newlisp-mode") (:keywords "language" "lisp" "newlisp"))]) (never-comment . [(20140104 1407) nil "Never blocks are comment" single ((:url . "http://stackoverflow.com/a/4554658/89376"))]) (netrunner . [(20160910 1632) ((popup (0 5 3)) (company (0 9 0)) (helm (1 9 5))) "Create Android: Netrunner decklists using Company, Helm and org-mode" single ((:url . "http://github.com/Kungsgeten/netrunner") (:keywords "games"))]) (netherlands-holidays . [(20150202 817) nil "Netherlands holidays for Emacs calendar." single ((:url . "https://github.com/abo-abo/netherlands-holidays") (:keywords "calendar"))]) (neotree . [(20160910 1959) nil "A tree plugin like NerdTree for Vim" tar ((:url . "https://github.com/jaypei/emacs-neotree"))]) (neon-mode . [(20160811 216) nil "Simple major mode for editing neon files" single ((:keywords "conf"))]) (nemerle . [(20130328 746) nil "major mode for editing nemerle programs" single ((:keywords "nemerle" "mode" "languages"))]) (nclip . [(20130617 1315) nil "Network (HTTP) Clipboard" tar ((:url . "http://www.github.com/maio/nclip.el") (:keywords "nclip" "clipboard" "network"))]) (ncl-mode . [(20150525 929) ((emacs (24))) "Major Mode for editing NCL scripts and other goodies" tar nil]) (navorski . [(20141203 1024) ((s (1 9 0)) (dash (1 5 0)) (multi-term (0 8 14))) "Helping you live in the terminal, like Viktor did." single ((:keywords "terminal"))]) (navi2ch . [(20150329 1916) nil "Navigator for 2ch for Emacsen" tar ((:keywords "network" "2ch"))]) (navi-mode . [(20160327 134) ((outshine (2 0)) (outorg (2 0))) "major-mode for easy buffer-navigation" single ((:url . "https://github.com/tj64/navi"))]) (nav-flash . [(20140508 1341) nil "Briefly highlight the current line" single ((:url . "http://github.com/rolandwalker/nav-flash") (:keywords "extensions" "navigation" "interface"))]) (nav . [(20120507 7) nil "Emacs mode for filesystem navigation" tar nil]) (nasm-mode . [(20160525 1826) ((emacs (24 3))) "NASM x86 assembly major mode" single ((:url . "https://github.com/skeeto/nasm-mode"))]) (nash-mode . [(20160830 512) nil "Nash major mode" single ((:url . "https://github.com/tiago4orion/nash-mode.el") (:keywords "nash" "languages"))]) (narrowed-page-navigation . [(20150108 2119) ((emacs (24)) (cl-lib (0 5))) "A minor mode for showing one page at a time" single ((:keywords "outlines"))]) (narrow-reindent . [(20150722 1206) ((emacs (24 4))) "Defines a minor mode to left-align narrowed regions." single ((:url . "https://github.com/emallson/narrow-reindent.el"))]) (narrow-indirect . [(20151231 1539) nil "Narrow using an indirect buffer that is a clone" single ((:url . "http://www.emacswiki.org/narrow-indirect.el") (:keywords "narrow" "indirect" "buffer" "clone" "view" "multiple-modes"))]) (naquadah-theme . [(20160819 121) nil "A theme based on Tango color set" single nil]) (nanowrimo . [(20151104 1828) nil "Track progress for nanowrimo" single ((:url . "https://bitbucket.org/gvol/nanowrimo-mode"))]) (nand2tetris-assembler . [(20151027 1436) ((names (0 3 0)) (nand2tetris (0 0 1))) "Assembler For the Nand2tetris Course" single ((:url . "http://www.github.com/CestDiego/nand2tetris-assembler.el/") (:keywords "nand2tetris-assembler" "hdl"))]) (nand2tetris . [(20151027 1451) ((names (0 3 0))) "Major mode for HDL files in the nand2tetris course" tar ((:url . "http://www.github.com/CestDiego/nand2tetris.el/") (:keywords "nand2tetris" "hdl"))]) (namespaces . [(20130326 1550) nil "An implementation of namespaces for Elisp, with an emphasis on immutabilty." single ((:url . "https://github.com/chrisbarrett/elisp-namespaces"))]) (names . [(20151201 404) ((emacs (24 1)) (cl-lib (0 5))) "Namespaces for emacs-lisp. Avoid name clobbering without hiding symbols." tar ((:url . "https://github.com/Malabarba/names") (:keywords "extensions" "lisp"))]) (nameless . [(20160403 1113) ((emacs (24 4))) "Hide package namespace in your emacs-lisp code" single ((:url . "https://github.com/Malabarba/nameless") (:keywords "convenience" "lisp"))]) (nameframe-projectile . [(20151018 207) ((nameframe (0 4 0 -2)) (projectile (0 13 0))) "Nameframe integration with Projectile" single ((:url . "https://github.com/john2x/nameframe"))]) (nameframe-perspective . [(20151018 207) ((nameframe (0 4 0 -2)) (perspective (1 12))) "Nameframe integration with perspective.el" single ((:url . "https://github.com/john2x/nameframe"))]) (nameframe . [(20151017 2119) nil "Manage frames by name." single ((:url . "https://github.com/john2x/nameframe"))]) (name-this-color . [(20151014 1330) ((emacs (24)) (cl-lib (0 5)) (dash (2 11 0))) "Match RGB codes to names easily and precisely" single ((:url . "https://github.com/knl/name-this-color.el") (:keywords "lisp" "color" "hex" "rgb" "shade" "name"))]) (naked . [(20151231 1527) nil "Provide for naked key descriptions: no angle brackets." single ((:url . "http://www.emacswiki.org/naked.el") (:keywords "lisp" "key" "print" "format" "help"))]) (n4js . [(20150713 1931) ((emacs (24)) (cypher-mode (0))) "Neo4j Shell" single ((:url . "https://github.com/tmtxt/n4js.el") (:keywords "neo4j" "shell" "comint"))]) (n3-mode . [(20141027 1057) nil "mode for Notation 3" single nil]) (myterminal-controls . [(20160119 2030) ((emacs (24)) (cl-lib (0 5))) "Quick toggle controls at a key-stroke" single ((:url . "http://ismail.teamfluxion.com") (:keywords "convenience" "shortcuts"))]) (mysql2sqlite . [(20151123 1339) nil "Convert mysql databases into sqlite databases." single nil]) (mysql-to-org . [(20160901 2358) ((emacs (24 3)) (s (1 11 0))) "Minor mode to output the results of mysql queries to org tables" single nil]) (mynt-mode . [(20150512 1349) ((virtualenvwrapper (20131514))) "Minor mode to work with the mynt static site generator" single ((:url . "https://github.com/crshd/mynt-mode") (:keywords "convenience"))]) (mykie . [(20150808 1505) ((emacs (24 3)) (cl-lib (0 5))) "Command multiplexer: Register multiple functions to a keybind" tar ((:url . "https://github.com/yuutayamada/mykie-el") (:keywords "emacs" "configuration" "keybind"))]) (myanmar-input-methods . [(20160106 737) nil "Emacs Input Method for Myanmar" single ((:url . "http://github.com/yelinkyaw/emacs-myanmar-input-methods") (:keywords "myanmar" "unicode" "keyboard"))]) (mwim . [(20160720 1210) nil "Move to the beginning/end of line or code" single ((:url . "https://github.com/alezost/mwim.el") (:keywords "convenience"))]) (mwe-log-commands . [(20100703 541) nil "log keyboard commands to buffer" single ((:keywords "help"))]) (mvn . [(20160211 743) nil "helpers for compiling with maven" single ((:url . "https://github.com/apgwoz/mvn-el") (:keywords "compilation" "maven" "java"))]) (muttrc-mode . [(20090804 1552) nil "Major mode to edit muttrc under Emacs" single nil]) (mutant . [(20160124 553) ((emacs (24 4)) (dash (2 1 0))) "An interface for the Mutant testing tool" single ((:url . "http://github.com/p-lambert/mutant.el") (:keywords "mutant" "testing"))]) (mustard-theme . [(20141115 2302) ((emacs (24 0))) "an Emacs 24 theme based on Mustard (tmTheme)" single ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (mustang-theme . [(20141017 1623) nil "port of vim's mustang theme" single ((:url . "http://github.com/mswift42/mustang-theme"))]) (mustache-mode . [(20141024 732) nil "A major mode for editing Mustache files." single nil]) (mustache . [(20131117 1407) ((ht (0 9)) (s (1 3 0)) (dash (1 2 0))) "a mustache templating library in emacs lisp" tar nil]) (multiple-cursors . [(20160719 216) ((cl-lib (0 5))) "Multiple cursors for Emacs." tar nil]) (multifiles . [(20130615 1433) nil "View and edit parts of multiple files in one buffer" single ((:keywords "multiple" "files"))]) (multicolumn . [(20150202 1451) nil "Creating and managing multiple side-by-side windows." single ((:url . "https://github.com/Lindydancer/multicolumn"))]) (multi-web-mode . [(20130823 2054) nil "multiple major mode support for web editing" tar ((:url . "https://github.com/fgallina/multi-web-mode") (:keywords "convenience" "languages" "wp"))]) (multi-term . [(20160619 233) nil "Managing multiple terminal buffers in Emacs." single ((:url . "http://www.emacswiki.org/emacs/download/multi-term.el") (:keywords "term" "terminal" "multiple buffer"))]) (multi-project . [(20150314 744) nil "Easily work with multiple projects." single ((:url . "https://bitbucket.org/ellisvelo/multi-project/overview") (:keywords "project" "management"))]) (multi-line . [(20160908 1139) ((emacs (24)) (s (1 9 0)) (cl-lib (0 5)) (dash (2 12 0)) (shut-up (0 3 2))) "multi-line statements" tar ((:url . "https://github.com/IvanMalison/multi-line") (:keywords "multi" "line" "length" "whitespace" "programming"))]) (multi-eshell . [(20120608 1135) nil "Create and manage multiple shells within Emacs" single ((:url . "http://cims.nyu.edu/~stucchio"))]) (multi-compile . [(20160306 1423) ((emacs (24)) (dash (2 12 1))) "Multi target interface to compile." single ((:url . "https://github.com/ReanGD/emacs-multi-compile") (:keywords "tools" "compile" "build"))]) (multi . [(20131013 844) ((emacs (24))) "Clojure-style multi-methods for emacs lisp" single ((:url . "http://github.com/kurisuwhyte/emacs-multi") (:keywords "multimethod" "generic" "predicate" "dispatch"))]) (mu4e-maildirs-extension . [(20160911 41) ((dash (0 0 0))) "Show mu4e maildirs summary in mu4e-main-view" single ((:url . "http://github.com/agpchil/mu4e-maildirs-extension"))]) (mu4e-alert . [(20160909 918) ((alert (1 2)) (s (1 10 0)) (ht (2 0)) (emacs (24 1))) "Desktop notification for mu4e" single ((:url . "https://github.com/iqbalansari/mu4e-alert") (:keywords "mail" "convenience"))]) (mu-cite . [(20160130 300) ((flim (1 14 9))) "A library to provide MIME features." tar nil]) (msvc . [(20150530 151) ((emacs (24)) (cl-lib (0 5)) (cedet (1 0)) (ac-clang (1 2 0))) "Microsoft Visual C/C++ mode" tar ((:url . "https://github.com/yaruopooner/msvc") (:keywords "languages" "completion" "syntax check" "mode" "intellisense"))]) (mpv . [(20150218 118) ((cl-lib (0 5)) (emacs (24)) (json (1 3)) (names (0 5 4)) (org (8 0))) "control mpv for easy note-taking" single ((:url . "https://github.com/kljohann/mpv.el") (:keywords "tools" "multimedia"))]) (mpg123 . [(20151214 1150) nil "A front-end program to mpg123/ogg123" single nil]) (mpages . [(20150710 704) nil "An Emacs buffer for quickly writing your Morning Pages" single ((:url . "https://github.com/slevin/mpages"))]) (mozc-temp . [(20160228 40) ((emacs (24)) (dash (2 10 0)) (mozc (0))) "Use mozc temporarily" single ((:url . "https://github.com/HKey/mozc-temp"))]) (mozc-popup . [(20150223 1634) ((popup (0 5 2)) (mozc (0))) "Mozc with popup" single ((:keywords "i18n" "extentions"))]) (mozc-im . [(20160411 1722) ((mozc (0))) "Mozc with input-method-function interface." single ((:keywords "i18n" "extentions"))]) (mozc . [(20160102 1506) nil "minor mode to input Japanese with Mozc" single ((:keywords "mule" "multilingual" "input method"))]) (moz-controller . [(20151208 1806) ((moz (0))) "Control Firefox from Emacs" single ((:url . "https://github.com/RenWenshan/emacs-moz-controller"))]) (moz . [(20150805 1006) nil "Lets current buffer interact with inferior mozilla." single ((:url . "http://github.com/bard/mozrepl/raw/master/chrome/content/moz.el"))]) (mowedline . [(20150601 1009) nil "elisp utilities for using mowedline" single nil]) (move-text . [(20160430 1730) nil "Move current line or region with M-up or M-down." single ((:keywords "edit"))]) (move-dup . [(20140925 808) nil "Eclipse-like moving and duplicating lines or rectangles." single ((:keywords "convenience" "wp"))]) (mouse3 . [(20151231 1526) nil "Customizable behavior for `mouse-3'." single ((:url . "http://www.emacswiki.org/mouse3.el") (:keywords "mouse" "menu" "keymap" "kill" "rectangle" "region"))]) (mouse-slider-mode . [(20150910 1400) ((emacs (24 3)) (cl-lib (0 3))) "scale numbers dragged under the mouse" single ((:url . "https://github.com/skeeto/mouse-slider-mode"))]) (mouse+ . [(20151231 1525) nil "Extensions to `mouse.el'." single ((:url . "http://www.emacswiki.org/mouse+.el") (:keywords "mouse"))]) (motion-mode . [(20140919 1856) ((flymake-easy (0 7)) (flymake-cursor (1 0 2))) "major mode for RubyMotion enviroment" tar ((:url . "https://github.com/ainame/motion-mode"))]) (mote-mode . [(20160122 1629) ((ruby-mode (1 1))) "Mote minor mode" single ((:url . "http://inkel.github.com/mote-mode/"))]) (morlock . [(20160521 730) nil "more font-lock keywords for elisp" single ((:url . "http://github.com/tarsius/morlock") (:keywords "convenience"))]) (moonscript . [(20160503 631) ((cl-lib (0 5)) (emacs (24))) "Major mode for editing MoonScript code" tar nil]) (monroe . [(20160808 654) nil "Yet another client for nREPL" single ((:url . "http://www.github.com/sanel/monroe") (:keywords "languages" "clojure" "nrepl" "lisp"))]) (monokai-theme . [(20160902 1417) nil "A fruity color theme for Emacs." single ((:url . "http://github.com/oneKelvinSmith/monokai-emacs"))]) (monochrome-theme . [(20140326 350) nil "A dark Emacs 24 theme for your focused hacking sessions" tar nil]) (monky . [(20160315 2051) nil "Control Hg from Emacs." tar nil]) (monitor . [(20160912 555) ((dash (2 13 0))) "Utilities for monitoring expressions." single ((:url . "https://github.com/guiltydolphin/monitor") (:keywords "lisp" "monitor" "utility"))]) (mongo . [(20150315 519) nil "MongoDB driver for Emacs Lisp" tar ((:keywords "convenience"))]) (molokai-theme . [(20151016 845) nil "molokai theme with Emacs theme engine" single ((:url . "https://github.com/alloy-d/color-theme-molokai"))]) (moe-theme . [(20160907 727) nil "A colorful eye-candy theme. Moe, moe, kyun!" tar ((:url . "https://github.com/kuanyui/moe-theme.el"))]) (modtime-skip-mode . [(20140128 1401) nil "Minor mode for disabling modtime and supersession checks on files." single ((:url . "http://www.github.com/jordonbiondo/modtime-skip-mode"))]) (modern-cpp-font-lock . [(20160622 1321) nil "Font-locking for \"Modern C++\"" single ((:url . "https://github.com/ludwigpacifici/modern-cpp-font-lock") (:keywords "languages" "c++" "cpp" "font-lock"))]) (modeline-posn . [(20160112 649) nil "Set up `mode-line-position'." single ((:url . "http://www.emacswiki.org/modeline-posn.el") (:keywords "mode-line" "region" "column"))]) (modeline-char . [(20160523 1520) nil "In the mode-line, show the value of the character after point." single ((:url . "http://www.emacswiki.org/modeline-char.el") (:keywords "mode-line" "character"))]) (mode-line-debug . [(20150307 512) nil "show status of `debug-on-error' in the mode-line" single ((:url . "https://github.com/tarsius/mode-line-debug") (:keywords "convenience" "lisp"))]) (mode-icons . [(20160808 525) ((emacs (24)) (cl-lib (0 5))) "Show icons for modes" tar ((:url . "http://ryuslash.org/projects/mode-icons.html") (:keywords "multimedia"))]) (modalka . [(20160531 912) ((emacs (24 4))) "Easily introduce native modal editing of your own design" single ((:url . "https://github.com/mrkkrp/modalka") (:keywords "modal" "editing"))]) (mocker . [(20150916 1854) ((eieio (1 3)) (el-x (0 2 4))) "mocking framework for emacs" single ((:keywords "lisp" "testing"))]) (mocha-snippets . [(20160912 514) ((yasnippet (0 8 0))) "Yasnippets for the Mocha JS Testing Framework" tar ((:keywords "test" "javascript"))]) (mocha . [(20160818 1456) ((js2-mode (20150909)) (f (0 18))) "Run Mocha or Jasmine tests" single ((:url . "http://github.com/scottaj/mocha.el") (:keywords "javascript" "mocha" "jasmine"))]) (mobdebug-mode . [(20140109 1946) ((lua-mode (20130419)) (emacs (24))) "Major mode for MobDebug" single ((:url . "https://github.com/deftsp/mobdebug-mode"))]) (mo-vi-ment-mode . [(20131028 2333) nil "Provide vi-like cursor movement that's easy on the fingers" single ((:keywords "convenience"))]) (mo-git-blame . [(20160129 959) nil "An interactive, iterative 'git blame' mode for Emacs" single ((:keywords "tools"))]) (mmt . [(20150906 959) ((emacs (24 1)) (cl-lib (0 3))) "Missing macro tools for Emacs Lisp" single ((:url . "https://github.com/mrkkrp/mmt") (:keywords "macro" "emacs-lisp"))]) (mmm-mode . [(20150828 1716) nil "Allow Multiple Major Modes in a buffer" tar ((:url . "https://github.com/purcell/mmm-mode") (:keywords "convenience" "faces" "languages" "tools"))]) (mmm-mako . [(20121019 2351) ((mmm-mode (0 4 8))) "MMM submode class for Mako Templates" single ((:url . "https://bitbucket.org/pjenvey/mmm-mako"))]) (mmm-jinja2 . [(20150904 1134) ((mmm-mode (0 5 4))) "MMM submode class for Jinja2 Templates" single ((:url . "https://github.com/beardedprojamz/mmm-jinja2"))]) (mkdown . [(20140517 718) ((markdown-mode (2 0))) "Pretty Markdown previews based on mkdown.com" tar ((:url . "https://github.com/ajtulloch/mkdown.el") (:keywords "markdown"))]) (misc-fns . [(20160529 1452) nil "Miscellaneous non-interactive functions." single ((:url . "http://www.emacswiki.org/misc-fns.el") (:keywords "internal" "unix" "lisp" "extensions" "local"))]) (misc-cmds . [(20160719 1606) nil "Miscellaneous commands (interactive functions)." single ((:url . "http://www.emacswiki.org/misc-cmds.el") (:keywords "internal" "unix" "extensions" "maint" "local"))]) (mips-mode . [(20160910 15) nil "Major-mode for MIPS assembly" single ((:url . "https://github.com/hlissner/emacs-mips-mode") (:keywords "mips" "assembly"))]) (mip-mode . [(20151126 2217) nil "virtual projects for emacs." single ((:keywords "workspaces" "workspace" "project" "projects" "mip-mode"))]) (minor-mode-hack . [(20141226 1220) nil "Change priority of minor-mode keymaps" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/minor-mode-hack.el") (:keywords "lisp"))]) (minizinc-mode . [(20151214 558) ((emacs (24 1))) "Major mode for MiniZinc code" single ((:url . "http://github.com/m00nlight/minizinc-mode") (:keywords "languages" "minizinc"))]) (minitest . [(20160628 1120) ((dash (1 0 0))) "An Emacs mode for ruby minitest files" tar ((:url . "https://github.com/arthurnn/minitest-emacs"))]) (minimal-theme . [(20160608 322) nil "A light/dark minimalistic Emacs 24 theme." tar ((:url . "http://github.com/ikame/minimal-theme") (:keywords "color" "theme" "minimal"))]) (minimal-session-saver . [(20140508 1341) nil "Very lean session saver" single ((:url . "http://github.com/rolandwalker/minimal-session-saver") (:keywords "tools" "frames" "project"))]) (miniedit . [(20100419 1045) nil "Enhanced editing for minibuffer fields." single nil]) (minibuffer-cua . [(20130906 434) nil "Make CUA mode's S-up/S-down work in minibuffer" single ((:url . "https://github.com/knu/minibuffer-cua.el") (:keywords "completion" "editing"))]) (minibuffer-complete-cycle . [(20130813 945) nil "Cycle through the *Completions* buffer" single ((:url . "https://github.com/knu/minibuffer-complete-cycle") (:keywords "completion"))]) (minibuf-isearch . [(20151226 1143) nil "incremental search on minibuffer history" single ((:keywords "minibuffer" "history" "incremental search"))]) (mini-header-line . [(20160616 327) ((emacs (24 4))) "a minimal header-line" single ((:url . "https://github.com/ksjogo/mini-header-line") (:keywords "header-line" "mode-line"))]) (mingus . [(20160321 917) ((libmpdee (2 1))) "MPD Interface" tar ((:url . "https://github.com/pft/mingus") (:keywords "multimedia" "elisp" "music" "mpd"))]) (minesweeper . [(20150413 2222) nil "play minesweeper in Emacs" single ((:url . "https://bitbucket.org/zck/minesweeper.el") (:keywords "game" "fun" "minesweeper" "inane" "diversion"))]) (milkode . [(20140926 2229) nil "Command line search and direct jump with Milkode" single ((:keywords "milkode" "search" "grep" "jump" "keyword"))]) (migemo . [(20150412 741) ((cl-lib (0 5))) "Japanese incremental search through dynamic pattern expansion" single ((:url . "https://github.com/emacs-jp/migemo"))]) (midje-mode . [(20150921 1750) ((cider (0 1 4)) (clojure-mode (1 0))) "Minor mode for running Midje tests in emacs" tar nil]) (micgoline . [(20160414 2026) ((emacs (24 3)) (powerline (2 3))) "powerline mode, color schemes from microsoft and google's logo." single ((:url . "https://github.com/yzprofile/micgoline") (:keywords "mode-line" "powerline" "theme"))]) (mic-paren . [(20150110 1816) nil "advanced highlighting of matching parentheses" single ((:keywords "languages" "faces" "parenthesis" "matching"))]) (mhc . [(20160526 18) ((calfw (20150703))) "Message Harmonized Calendaring system." tar ((:url . "http://www.quickhack.net/mhc") (:keywords "calendar"))]) (mexican-holidays . [(20160109 1342) nil "Mexico holidays for Emacs calendar." single ((:url . "https://github.com/shopClerk/mexican-holidays") (:keywords "calendar"))]) (mew . [(20160904 1829) nil "Messaging in the Emacs World" tar nil]) (metaweblog . [(20141130 605) ((xml-rpc (1 6 8))) "An emacs library to access metaweblog based weblogs" tar nil]) (metascript-mode . [(20150708 1757) ((emacs (24 3))) "Major mode for the Metascript programming language" single ((:url . "http://github.com/metascript/metascript-mode") (:keywords "languages" "metascript" "mjs"))]) (metalheart-theme . [(20160709 2341) ((emacs (24))) "Low-contrast theme with a dark blue-green background." single nil]) (metafmt . [(20160221 855) nil "Run metafmt on buffers when saving them" single ((:url . "https://github.com/lvillani/metafmt") (:keywords "languages" "tools"))]) (meta-presenter . [(20150501 410) nil "A simple multi-file presentation tool for Emacs" single ((:url . "http://ismail.teamfluxion.com") (:keywords "productivity" "presentation"))]) (message-x . [(20151029 718) nil "customizable completion in message headers" single ((:keywords "news" "mail" "compose" "completion"))]) (merlin . [(20160627 1923) nil "Mode for Merlin, an assistant for OCaml." tar ((:url . "https://github.com/the-lambda-church/merlin") (:keywords "ocaml" "languages"))]) (menu-bar+ . [(20160831 748) nil "Extensions to `menu-bar.el'." single ((:url . "http://www.emacswiki.org/menu-bar+.el") (:keywords "internal" "local" "convenience"))]) (mentor . [(20140904 1710) ((xml-rpc (1 6 9))) "Frontend for the rTorrent bittorrent client" tar ((:keywords "bittorrent" "rtorrent"))]) (memolist . [(20150804 1021) ((markdown-mode (22 0)) (ag (0 45))) "memolist.el is Emacs port of memolist.vim." single ((:url . "http://github.com/mikanfactory/emacs-memolist") (:keywords "markdown" "memo"))]) (memoize . [(20130421 1234) nil "Memoization functions" single ((:url . "https://github.com/skeeto/emacs-memoize"))]) (memento . [(20150823 339) nil "maintaining daily journals when the day ends." single ((:keywords "journal" "log" "diary"))]) (melpa-upstream-visit . [(20130720 333) ((s (1 6 0))) "A set of kludges to visit a melpa-hosted package's homepage" single ((:keywords "convenience"))]) (mellow-theme . [(20141115 2302) ((emacs (24 0))) "an Emacs 24 theme based on Mellow (tmTheme)" single ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (mediawiki . [(20160902 827) nil "mediawiki frontend" single ((:url . "http://github.com/hexmode/mediawiki-el") (:keywords "mediawiki" "wikipedia" "network" "wiki"))]) (meacupla-theme . [(20151027 1517) nil "meacupla theme for emacs" single ((:url . "https://gitlab.com/jtecca/meacupla-theme") (:keywords "color" "theme" "meacupla" "faces"))]) (md-readme . [(20160811 946) nil "Markdown-formatted READMEs for your ELisp" tar ((:url . "http://github.com/thomas11/md-readme/tree/master") (:keywords "lisp" "help" "readme" "markdown" "header" "documentation" "github"))]) (mc-extras . [(20150218 234) ((multiple-cursors (1 2 1))) "Extra functions for multiple-cursors mode." tar ((:url . "https://github.com/knu/mc-extras.el") (:keywords "editing" "cursors"))]) (mbo70s-theme . [(20141122 642) ((emacs (24 0))) "70s style palette, with similarities to mbo theme" single ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (mbe . [(20151126 334) ((emacs (24)) (cl-lib (0 5))) "Macros by Example" single ((:url . "https://github.com/ijp/mbe.el") (:keywords "tools" "macros"))]) (mb-url . [(20160724 725) ((cl-lib (0))) "Multiple Backends for Emacs URL package." tar ((:url . "https://github.com/dochang/mb-url") (:keywords "url"))]) (mb-depth+ . [(20151231 1421) nil "Indicate minibuffer-depth in prompt" single ((:url . "http://www.emacswiki.org/mb-depth+.el") (:keywords "convenience"))]) (maxframe . [(20140916 754) nil "maximize the emacs frame based on display size" single ((:keywords "display" "frame" "window" "maximize"))]) (maven-test-mode . [(20141219 2157) ((s (1 9)) (emacs (24))) "Utilities for navigating test files and running maven test tasks." single ((:url . "http://github.com/rranelli/maven-test-mode") (:keywords "java" "maven" "test"))]) (maude-mode . [(20160222 807) nil "Emacs mode for the programming language Maude" single ((:keywords "maude"))]) (matrix-client . [(20160806 2045) ((json (1 4)) (request (0 2 0))) "A minimal chat client for the Matrix.org RPC" tar ((:url . "http://doc.rix.si/matrix.html") (:keywords "web"))]) (matlab-mode . [(20160902 459) nil "Major mode for MATLAB(R) dot-m files" tar ((:url . "http://sourceforge.net/projects/matlab-emacs/") (:keywords "matlab" "programming" "language" "(X)emacs"))]) (math-symbols . [(20151121 1642) ((helm (1 0))) "Math Symbol Input methods and conversion tools" tar ((:url . "https://github.com/kawabata/math-symbols") (:keywords "math symbols" "tex" "latex"))]) (math-symbol-lists . [(20160302 1431) nil "Lists of Unicode math symbols and latex commands" tar ((:url . "https://github.com/vspinu/math-symbol-lists") (:keywords "unicode" "symbols" "mathematics"))]) (material-theme . [(20160908 1538) ((emacs (24 1))) "A Theme based on the colors of the Google Material Design" tar ((:url . "http://github.com/cpaulik/emacs-material-theme") (:keywords "themes"))]) (maruo-macro-mode . [(20160616 649) ((emacs (24 3))) "Major mode for editing Hidemaru/Maruo macro script" single ((:keywords "programming" "editor" "macro"))]) (marshal . [(20160807 1954) ((eieio (1 4)) (json (1 3)) (ht (2 1))) "eieio extension for automatic (un)marshalling" single ((:url . "https://github.com/sigma/marshal.el") (:keywords "eieio"))]) (marmalade-client . [(20141231 1207) ((web (0 5 2)) (kv (0 0 19)) (gh (0 8 0))) "client for marmalade API from emacs" tar ((:url . "https://github.com/nicferrier/emacs-marmalade-upload") (:keywords "lisp"))]) (marmalade . [(20110602 1622) ((furl (0 0 2))) "Elisp interface for the Emacs Lisp package server." single ((:url . "http://code.google.com/p/marmalade"))]) (markup-faces . [(20141110 17) nil "collection of faces for markup language modes" single ((:url . "https://github.com/sensorflo/markup-faces") (:keywords "wp" "faces"))]) (markup . [(20130207 1309) nil "Simple markup generation helpers." single ((:url . "http://github.com/leoc/markup.el") (:keywords "convenience" "markup" "html"))]) (markdownfmt . [(20160609 541) ((emacs (24))) "Format markdown using markdownfmt" single ((:url . "https://github.com/nlamirault/emacs-markdownfmt") (:keywords "markdown"))]) (markdown-toc . [(20160727 908) ((s (1 9 0)) (dash (2 11 0)) (markdown-mode (2 1))) "A simple TOC generator for markdown file" tar nil]) (markdown-preview-mode . [(20160830 219) ((websocket (1 6)) (markdown-mode (2 1)) (cl-lib (0 5))) "markdown realtime preview minor mode." tar ((:url . "https://github.com/ancane/markdown-preview-mode") (:keywords "markdown" "preview"))]) (markdown-preview-eww . [(20160111 702) ((emacs (24 4))) "Realtime preview by eww" single ((:url . "https://github.com/niku/markdown-preview-eww"))]) (markdown-mode . [(20160830 820) ((emacs (24)) (cl-lib (0 5))) "Major mode for Markdown-formatted text" single ((:url . "http://jblevins.org/projects/markdown-mode/") (:keywords "markdown" "github flavored markdown" "itex"))]) (markdown-mode+ . [(20120829 510) ((markdown-mode (20111229))) "extra functions for markdown-mode" tar ((:url . "http://github.com/milkypostman/markdown-mode+.el") (:keywords "markdown" "latex" "osx" "rtf"))]) (mark-tools . [(20130614 325) nil "Some simple tools to access the mark-ring in Emacs" single ((:url . "https://github.com/stsquad/emacs-mark-tools"))]) (mark-multiple . [(20121118 754) nil "Sorta lets you mark several regions at once." tar nil]) (marcopolo . [(20160421 304) ((s (1 9 0)) (dash (2 9 0)) (pkg-info (0 5 0)) (request (0 1 0))) "Emacs client to the Docker HUB/Registry API" tar ((:url . "https://github.com/nlamirault/marcopolo") (:keywords "docker"))]) (map-regexp . [(20130522 1403) ((cl-lib (0 2))) "map over matches of a regular expression" single ((:url . "https://github.com/tarsius/map-regexp") (:keywords "convenience"))]) (map-progress . [(20140310 1432) nil "mapping macros that report progress" single ((:url . "https://github.com/tarsius/map-progress/") (:keywords "convenience"))]) (mandoku . [(20160626 1924) ((org (8 0)) (magit (20151028)) (github-clone (20150705)) (git (20140128))) "A tool to access repositories of premodern Chinese texts" tar nil]) (manage-minor-mode . [(20140310 900) ((emacs (24 3))) "Manage your minor-modes easily" single ((:url . "https://github.com/ShingoFukuyama/manage-minor-mode") (:keywords "minor-mode" "manage" "emacs"))]) (man-commands . [(20151221 1421) ((cl-lib (0 5))) "Add interactive commands for every manpages installed in your computer." single ((:url . "http://github.com/nflath/man-commands"))]) (mallard-snippets . [(20131023 1151) ((yasnippet (0 8 0)) (mallard-mode (0 1 1))) "Yasnippets for Mallard" tar ((:url . "https://github.com/jhradilek/emacs-mallard-snippets") (:keywords "snippets" "mallard"))]) (mallard-mode . [(20131203 2025) nil "Major mode for editing Mallard files" tar ((:url . "https://github.com/jhradilek/emacs-mallard-mode") (:keywords "xml" "mallard"))]) (malinka . [(20160615 1348) ((s (1 9 0)) (dash (2 4 0)) (f (0 11 0)) (cl-lib (0 3)) (rtags (0 0)) (projectile (0 11 0))) "A C/C++ project configuration package for Emacs" single ((:url . "https://github.com/LefterisJP/malinka") (:keywords "c" "c++" "project-management"))]) (malabar-mode . [(20150720 1055) ((fringe-helper (1 0 1)) (groovy-mode (0))) "JVM Integration mode for EMACS" tar ((:url . "http://www.github.com/m0smith/malabar-mode") (:keywords "java" "maven" "groovy" "language" "malabar"))]) (makey . [(20131231 630) ((cl-lib (0 2))) "interactive commandline mode" single nil]) (maker-mode . [(20150116 354) ((s (1 3 0)) (dash (2 8 0))) "Emacs mode for maker (scala build tool)" single ((:url . "https://github.com/fommil/maker-mode") (:keywords "processes" "tools"))]) (make-it-so . [(20160818 58) ((swiper (0 8 0)) (emacs (24))) "Transform files with Makefile recipes." tar ((:url . "https://github.com/abo-abo/make-it-so") (:keywords "make" "dired"))]) (make-color . [(20140625 450) nil "Alternative to picking color - update fg/bg color by pressing r/g/b/... keys" single ((:url . "https://github.com/alezost/make-color.el") (:keywords "color"))]) (majapahit-theme . [(20160817 1148) nil "Color theme with a dark and light versions" tar ((:keywords "color" "theme") (:url . "https://gitlab.com/franksn/majapahit-theme"))]) (main-line . [(20151120 1806) ((cl-lib (0 5))) "modeline replacement forked from an early version of powerline.el" single ((:url . "https://github.com/jasonm23/emacs-mainline") (:keywords "statusline" "/" "modeline"))]) (magnatune . [(20151030 1235) ((dash (2 9 0)) (s (1 9 0))) "browse magnatune's music catalog" tar nil]) (magma-mode . [(20160304 408) ((cl-lib (0 3)) (dash (2 6 0)) (f (0 17 1))) "Magma mode for Emacs" tar ((:url . "https://github.com/ThibautVerron/magma-mode"))]) (magit-topgit . [(20160313 1254) ((emacs (24 4)) (magit (2 1 0))) "TopGit extension for Magit" single ((:keywords "vc" "tools"))]) (magit-svn . [(20151219 547) ((emacs (24 4)) (magit (2 1 0))) "Git-Svn extension for Magit" single ((:keywords "vc" "tools"))]) (magit-stgit . [(20160224 703) ((emacs (24 4)) (magit (2 1 0))) "StGit extension for Magit" single ((:keywords "vc" "tools"))]) (magit-rockstar . [(20160517 651) ((dash (2 12 1)) (magit (2 6 1))) "commit like a rockstar" single ((:url . "http://github.com/tarsius/magit-rockstar") (:keywords "convenience"))]) (magit-popup . [(20160821 1338) ((emacs (24 4)) (async (20160711 223)) (dash (20160820 501))) "Define prefix-infix-suffix command combos" tar ((:url . "https://github.com/magit/magit") (:keywords "bindings"))]) (magit-p4 . [(20160627 447) ((magit (2 1)) (magit-popup (2 1)) (p4 (12 0)) (cl-lib (0 5))) "git-p4 plug-in for Magit" single ((:url . "https://github.com/qoocku/magit-p4") (:keywords "vc" "tools"))]) (magit-gitflow . [(20160809 1335) ((magit (2 1 0)) (magit-popup (2 2 0))) "gitflow extension for magit" single ((:url . "https://github.com/jtatarik/magit-gitflow") (:keywords "vc" "tools"))]) (magit-gh-pulls . [(20160513 310) ((emacs (24)) (gh (0 9 1)) (magit (2 1 0)) (pcache (0 2 3)) (s (1 6 1))) "GitHub pull requests extension for Magit" single ((:url . "https://github.com/sigma/magit-gh-pulls") (:keywords "git" "tools"))]) (magit-gerrit . [(20160226 130) ((magit (2 3 1))) "Magit plugin for Gerrit Code Review" single ((:url . "https://github.com/terranpro/magit-gerrit"))]) (magit-find-file . [(20150702 130) ((magit (2 1 0)) (dash (2 8 0))) "completing-read over all files in Git" single ((:url . "https://github.com/bradleywright/magit-find-file.el") (:keywords "git"))]) (magit-filenotify . [(20151116 1540) ((magit (1 3 0)) (emacs (24 4))) "Refresh status buffer when git tree changes" single ((:keywords "tools"))]) (magit-annex . [(20160624 2254) ((cl-lib (0 3)) (magit (2 3 0))) "Control git-annex from Magit" single ((:url . "https://github.com/kyleam/magit-annex") (:keywords "vc" "tools"))]) (magit . [(20160907 945) ((emacs (24 4)) (async (20160711 223)) (dash (20160820 501)) (with-editor (20160812 1457)) (git-commit (20160519 950)) (magit-popup (20160813 642))) "A Git porcelain inside Emacs" tar ((:url . "https://github.com/magit/magit") (:keywords "git" "tools" "vc"))]) (magic-latex-buffer . [(20160212 603) ((cl-lib (0 5)) (emacs (24 3))) "Magically enhance LaTeX-mode font-locking for semi-WYSIWYG editing" single ((:url . "http://hins11.yu-yake.com/"))]) (magic-filetype . [(20160522 729) ((emacs (24)) (s (1 9 0))) "Enhance filetype major mode" single ((:url . "https://github.com/zonuexe/magic-filetype.el") (:keywords "vim" "ft" "file" "magic-mode"))]) (mag-menu . [(20150505 1150) ((splitter (0 1 0))) "Intuitive keyboard-centric menu system" single ((:url . "https://github.com/chumpage/mag-menu") (:keywords "convenience"))]) (macrostep . [(20151213 145) ((cl-lib (0 5))) "interactive macro expander" tar ((:url . "https://github.com/joddie/macrostep") (:keywords "lisp" "languages" "macro" "debugging"))]) (macros+ . [(20151231 1419) nil "Extensions to `macros.el'." single ((:url . "http://www.emacswiki.org/macros+.el") (:keywords "abbrev" "local"))]) (macro-math . [(20130328 904) nil "in-buffer mathematical operations" single ((:url . "http://nschum.de/src/emacs/macro-math/") (:keywords "convenience"))]) (m-buffer . [(20160721 1539) ((emacs (25 0))) "List-Oriented, Functional Buffer Manipulation" tar nil]) (lyrics . [(20160803 1106) ((emacs (25)) (seq (2 15))) "Show lyrics" single ((:url . "https://github.com/emacs-pe/lyrics.el") (:keywords "convenience"))]) (lxc . [(20140410 1322) nil "lxc integration with Emacs" single ((:url . "https://github.com/nicferrier/emacs-lxc") (:keywords "processes"))]) (lusty-explorer . [(20150508 1557) nil "Dynamic filesystem explorer and buffer switcher" single ((:keywords "convenience" "files" "matching"))]) (lush-theme . [(20141107 806) ((emacs (24))) "A dark theme with strong colors" single ((:url . "https://github.com/andre-richter/emacs-lush-theme") (:keywords "theme" "dark" "strong colors"))]) (lua-mode . [(20160821 1216) nil "a major-mode for editing Lua scripts" tar ((:url . "http://immerrr.github.com/lua-mode") (:keywords "languages" "processes" "tools"))]) (love-minor-mode . [(20130429 1459) ((lua-mode (20130419))) "Minor mode for working on LÖVE projects" single ((:url . "https://github.com/ejmr/love-minor-mode"))]) (lorem-ipsum . [(20140911 1408) nil "Insert dummy pseudo Latin text." single ((:keywords "tools" "language" "convenience"))]) (loop . [(20160813 707) nil "friendly imperative loop structures" single ((:keywords "loop" "while" "for each" "break" "continue"))]) (look-mode . [(20151211 1026) nil "quick file viewer for image and text file browsing" single nil]) (look-dired . [(20160729 1623) ((look-mode (1 0))) "Extensions to look-mode for dired buffers" single ((:url . "https://github.com/vapniks/look-dired") (:keywords "convenience"))]) (lolcode-mode . [(20111002 147) nil "Major mode for editing LOLCODE" single ((:url . "http://github.com/bodil/lolcode-mode") (:keywords "lolcode" "major" "mode"))]) (logview . [(20160720 1501) ((emacs (24 1)) (datetime (0 1))) "Major mode for viewing log files" single ((:url . "https://github.com/doublep/logview") (:keywords "files" "tools"))]) (logstash-conf . [(20150308 518) nil "basic mode for editing logstash configuration" single nil]) (logito . [(20120225 1255) ((eieio (1 3))) "logging library for Emacs" single ((:keywords "lisp" "tool"))]) (logalimacs . [(20131021 1129) ((popwin (0 6 2)) (popup (0 5 0)) (stem (20130120))) "Front-end to logaling-command for Ruby gems" single ((:url . "https://github.com/logaling/logalimacs") (:keywords "translation" "logaling-command"))]) (log4j-mode . [(20160108 1118) nil "major mode for viewing log files" single ((:url . "http://log4j-mode.sourceforge.net") (:keywords "tools"))]) (log4e . [(20150105 505) nil "provide logging framework for elisp" single ((:url . "https://github.com/aki2o/log4e") (:keywords "log"))]) (lodgeit . [(20150312 649) nil "Paste to a lodgeit powered pastebin" single ((:url . "https://github.com/ionrock/lodgeit-el") (:keywords "pastebin" "lodgeit"))]) (loccur . [(20160129 1222) ((cl-lib (0))) "Perform an occur-like folding in current buffer" single ((:url . "https://github.com/fourier/loccur") (:keywords "matching"))]) (loc-changes . [(20160801 1008) nil "keep track of positions even after buffer changes" single ((:url . "http://github.com/rocky/emacs-loc-changes"))]) (load-theme-buffer-local . [(20120702 1336) nil "Install emacs24 color themes by buffer." single ((:url . "http://github.com/vic/color-theme-buffer-local") (:keywords "faces"))]) (load-relative . [(20160716 438) nil "relative file load (within a multi-file Emacs package)" tar ((:url . "http://github.com/rocky/emacs-load-relative") (:keywords "internal"))]) (llvm-mode . [(20160617 2215) nil "Major mode for the LLVM assembler language." tar nil]) (livid-mode . [(20131116 544) ((skewer-mode (1 5 3)) (s (1 8 0))) "Live browser eval of JavaScript every time a buffer changes" single ((:url . "https://github.com/pandeiro/livid-mode"))]) (livescript-mode . [(20140612 2121) nil "Major mode for editing LiveScript files" single ((:url . "https://github.com/yhisamatsu/livescript-mode") (:keywords "languages" "livescript"))]) (lively . [(20160208 1035) nil "interactively updating text" single nil]) (live-py-mode . [(20160521 1130) ((emacs (24 1))) "Live Coding in Python" tar ((:url . "http://donkirkby.github.io/live-py-plugin/") (:keywords "live" "coding"))]) (live-code-talks . [(20150115 1423) ((emacs (24)) (cl-lib (0 5)) (narrowed-page-navigation (0 1))) "Support for slides with live code in them" single ((:keywords "docs" "multimedia"))]) (literate-starter-kit . [(20150730 1154) ((emacs (24 3))) "A literate starter kit to configure Emacs using Org-mode files." tar nil]) (literate-coffee-mode . [(20160114 434) ((coffee-mode (0 5 0))) "major-mode for Literate CoffeeScript" single ((:url . "https://github.com/syohex/emacs-literate-coffee-mode"))]) (litecoin-ticker . [(20160611 1711) ((json (1 2))) "litecoin price in modeline" single nil]) (litable . [(20150908 709) ((dash (2 6 0))) "dynamic evaluation replacement with emacs" single ((:keywords "lisp"))]) (lit-mode . [(20141123 936) nil "Major mode for lit" single ((:keywords "languages" "tools"))]) (list-utils . [(20160414 702) nil "List-manipulation utility functions" single ((:url . "http://github.com/rolandwalker/list-utils") (:keywords "extensions"))]) (list-unicode-display . [(20150219 101) ((cl-lib (0 5))) "Search for and list unicode characters by name" single ((:keywords "convenience"))]) (list-register . [(20091203 1015) nil "List register" single nil]) (list-processes+ . [(20131117 1135) nil "Add process management to `list-processes'" single ((:url . "not distributed yet"))]) (list-packages-ext . [(20151115 916) ((s (1 6 0)) (ht (1 5 0)) (persistent-soft (0 8 6))) "Extras for list-packages" single ((:keywords "convenience" "tools"))]) (list-environment . [(20151226 1856) nil "A tabulated process environment editor" single ((:keywords "processes" "unix"))]) (lispyville . [(20160816 1536) ((lispy (0)) (evil (1 2 12)) (cl-lib (0 5)) (emacs (24 4))) "A minor mode for integrating evil with lispy." single ((:url . "https://github.com/noctuid/lispyville") (:keywords "vim" "evil" "lispy" "lisp" "parentheses"))]) (lispyscript-mode . [(20130828 719) nil "Major mode for LispyScript code." single ((:url . "https://github.com/krisajenkins/lispyscript-mode") (:keywords "lisp" "languages"))]) (lispy . [(20160906 743) ((emacs (24 1)) (ace-window (0 9 0)) (iedit (0 9 9)) (swiper (0 7 0)) (hydra (0 13 4)) (zoutline (0 1 0))) "vi-like Paredit" tar nil]) (lispxmp . [(20130824 507) nil "Automagic emacs lisp code annotation" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/lispxmp.el") (:keywords "lisp" "convenience"))]) (lisp-extra-font-lock . [(20160507 1502) nil "Highlight bound variables and quoted exprs." single ((:url . "https://github.com/Lindydancer/lisp-extra-font-lock") (:keywords "languages" "faces"))]) (liso-theme . [(20160410 1329) nil "Eclectic Dark Theme for GNU Emacs" single ((:url . "https://github.com/caisah/liso-theme") (:keywords "theme" "themes"))]) (liquid-types . [(20151201 2335) ((flycheck (0 13)) (dash (1 2)) (emacs (24 1)) (popup (0 5 2)) (pos-tip (0 5 0)) (flycheck-liquidhs (0 0 1)) (button-lock (1 0 2))) "show inferred liquid-types" single nil]) (linum-relative . [(20160510 118) nil "display relative line number in emacs." single ((:url . "http://github.com/coldnew/linum-relative") (:keywords "converience"))]) (linum-off . [(20160217 1337) nil "Provides an interface for turning line-numbering off" single ((:url . "http://www.emacswiki.org/emacs/auto-indent-mode.el ") (:keywords "line" "numbering"))]) (linphone . [(20130524 409) nil "Emacs interface to Linphone" tar ((:url . "https://github.com/zabbal/emacs-linphone") (:keywords "comm"))]) (link-hint . [(20160412 2218) ((avy (0 3 0)) (emacs (24 1)) (cl-lib (0 5))) "Use avy to open or copy visible urls." single ((:url . "https://github.com/noctuid/link-hint.el") (:keywords "url"))]) (link . [(20140717 2029) nil "Hypertext links in text buffers" single ((:keywords "interface" "hypermedia"))]) (lingr . [(20100807 1031) nil "Lingr Client for GNU Emacs" single ((:url . "http://github.com/lugecy/lingr-el") (:keywords "chat" "client" "internet"))]) (light-soap-theme . [(20150607 745) ((emacs (24))) "Emacs 24 theme with a light background." single nil]) (lice . [(20151225 1022) nil "License And Header Template" tar ((:url . "https://github.com/buzztaiki/lice-el") (:keywords "template" "license" "tools"))]) (libmpdee . [(20160117 1501) nil "Client end library for mpd, a music playing daemon" single ((:keywords "music" "mpd"))]) (lib-requires . [(20151231 1410) nil "Commands to list Emacs Lisp library dependencies." single ((:url . "http://www.emacswiki.org/lib-requires.el") (:keywords "libraries" "files"))]) (lfe-mode . [(20160810 1940) nil "Lisp Flavoured Erlang mode" tar nil]) (lexbind-mode . [(20141027 729) nil "Puts the value of lexical-binding in the mode line" single ((:url . "https://github.com/spacebat/lexbind-mode") (:keywords "convenience" "lisp"))]) (levenshtein . [(20051013 1056) nil "Edit distance between two strings." single ((:keywords "lisp"))]) (leuven-theme . [(20160909 1600) nil "Awesome Emacs color theme on white background" single ((:url . "https://github.com/fniessen/emacs-leuven-theme") (:keywords "color" "theme"))]) (letcheck . [(20160202 1148) nil "Check the erroneous assignments in let forms" single ((:url . "https://github.com/Fuco1/letcheck") (:keywords "convenience"))]) (less-css-mode . [(20160819 9) nil "Major mode for editing LESS CSS files (lesscss.org)" single ((:url . "https://github.com/purcell/less-css-mode") (:keywords "less" "css" "mode"))]) (lentic-server . [(20160717 1352) ((lentic (0 8)) (web-server (0 1 1))) "Web Server for Emacs Literate Source" single nil]) (lentic . [(20160721 1552) ((emacs (24 4)) (m-buffer (0 13)) (dash (2 5 0)) (f (0 17 2)) (s (1 9 0))) "One buffer as a view of another" tar nil]) (lenlen-theme . [(20150307 11) ((color-theme-solarized (20150110))) "a solarized-based kawaii light theme" single ((:url . "http://hins11.yu-yake.com/"))]) (lemon-mode . [(20130216 504) nil "A major mode for editing lemon grammar files" single ((:keywords "lemon"))]) (legalese . [(20150820 1024) nil "Add legalese to your program files" single ((:url . "https://github.com/jorgenschaefer/legalese") (:keywords "convenience"))]) (leerzeichen . [(20151105 2228) nil "Minor mode to display whitespace characters." single ((:url . "http://github.com/fgeller/leerzeichen.el") (:keywords "whitespace" "characters"))]) (ledger-mode . [(20160716 1259) nil "Helper code for use with the \"ledger\" command-line tool" tar nil]) (leanote . [(20160905 1849) ((emacs (24 4)) (cl-lib (0 5)) (request (0 2)) (let-alist (1 0 3)) (pcache (0 4 0)) (s (1 10 0)) (async (1 9))) "A minor mode writing markdown leanote" single ((:url . "https://github.com/aborn/leanote-emacs") (:keywords "leanote" "note" "markdown"))]) (ldap-mode . [(20091203 1015) nil "major modes for editing LDAP schema and LDIF files" single ((:url . "http://www.loveshack.ukfsn.org/emacs") (:keywords "data"))]) (lcb-mode . [(20160815 2240) ((emacs (24))) "LiveCode Builder major mode" single ((:url . "https://github.com/peter-b/lcb-mode") (:keywords "languages"))]) (lavender-theme . [(20141115 2302) ((emacs (24 0))) "an Emacs 24 theme based on Lavender (tmTheme)" single ((:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (launchctl . [(20150518 609) ((emacs (24 1))) "Interface to launchctl on Mac OS X." single ((:url . "http://github.com/pekingduck/launchctl-el") (:keywords "tools" "convenience"))]) (launch . [(20130619 1504) nil "launch files with OS-standard associated applications." single ((:url . "https://github.com/sfllaw/emacs-launch") (:keywords "convenience" "processes"))]) (latex-unicode-math-mode . [(20160708 902) nil "Input method for Unicode math symbols" tar ((:url . "https://github.com/Christoph-D/latex-unicode-math-mode"))]) (latex-preview-pane . [(20151023 1303) nil "Makes LaTeX editing less painful by providing a updatable preview pane" tar nil]) (latex-pretty-symbols . [(20151112 244) nil "Display many latex symbols as their unicode counterparts" single ((:url . "https://bitbucket.org/mortiferus/latex-pretty-symbols.el") (:keywords "convenience" "display"))]) (latex-math-preview . [(20160321 2159) nil "preview LaTeX mathematical expressions." single ((:url . "https://gitlab.com/latex-math-preview/latex-math-preview") (:keywords "latex" "tex"))]) (latex-extra . [(20160328 1721) ((auctex (11 86 1)) (cl-lib (0 5))) "Adds several useful functionalities to LaTeX-mode." single ((:url . "http://github.com/Malabarba/latex-extra") (:keywords "tex"))]) (latest-clojure-libraries . [(20140314 617) nil "Clojure dependency resolver" single ((:url . "http://github.com/AdamClements/latest-clojure-libraries/"))]) (langtool . [(20160116 1654) ((cl-lib (0 3))) "Grammar check utility using LanguageTool" single ((:url . "https://github.com/mhayashi1120/Emacs-langtool") (:keywords "docs"))]) (langdoc . [(20150217 2245) ((cl-lib (0 2))) "Help to define help document mode for various languages" single ((:url . "https://github.com/tom-tan/langdoc/") (:keywords "convenience" "eldoc"))]) (lang-refactor-perl . [(20131122 1327) nil "Simple refactorings, primarily for Perl" single ((:url . "https://github.com/jplindstrom/emacs-lang-refactor-perl") (:keywords "languages" "refactoring" "perl"))]) (lacarte . [(20151231 1409) nil "Execute menu items as commands, with completion." single ((:url . "http://www.emacswiki.org/lacarte.el") (:keywords "menu-bar" "menu" "command" "help" "abbrev" "minibuffer" "keys" "completion" "matching" "local" "internal" "extensions"))]) (labburn-theme . [(20160801 753) nil "A lab color space zenburn theme." single ((:url . "https://github.com/ksjogo/labburn-theme") (:keywords "theme" "zenburn"))]) (kwin . [(20150308 1112) nil "communicatewith the KWin window manager" single ((:url . "http://github.com/reactormonk/kwin-minor-mode"))]) (kv . [(20140108 734) nil "key/value data structure functions" single ((:keywords "lisp"))]) (kurecolor . [(20150423 2122) ((emacs (24 1)) (s (1 0))) "color editing goodies for Emacs" single nil]) (ksp-cfg-mode . [(20160521 1333) ((cl-lib (0 5))) "major mode for editing KSP CFG files" single ((:url . "http://github.com/lashtear/ksp-cfg-mode") (:keywords "data"))]) (kroman . [(20150827 1640) nil "Korean hangul romanization" single ((:keywords "korean" "roman"))]) (kpm-list . [(20160310 1050) nil "An emacs buffer list that tries to intelligently group together buffers." single ((:url . "https://github.com/KMahoney/kpm-list/"))]) (kotlin-mode . [(20160720 1339) ((emacs (24 3))) "Major mode for kotlin" single ((:keywords "languages"))]) (kosmos-theme . [(20160829 2135) ((emacs (24))) "Black and lightgray theme with not so much syntax highlighting." single ((:url . "https://github.com/habamax/kosmos-theme"))]) (kooten-theme . [(20160214 451) ((emacs (24 1))) "Dark color theme" single ((:url . "http://github.com/kootenpv/emacs-kooten-theme") (:keywords "themes"))]) (kolon-mode . [(20140122 334) nil "Syntax highlighting for Text::Xslate's Kolon syntax" single ((:url . "https://github.com/samvtran/kolon-mode") (:keywords "xslate" "perl"))]) (kodi-remote . [(20160712 1652) ((request (0 2 0))) "functions to remote control a kodi instance" single ((:url . "http://github.com/spiderbit/kodi-remote.el"))]) (know-your-http-well . [(20160208 1504) nil "Look up the meaning of HTTP headers, methods, relations, status codes" tar nil]) (kixtart-mode . [(20150611 904) ((emacs (24))) "major mode for Kixtart scripting files" single ((:url . "https://github.com/ryrun/kixtart-mode") (:keywords "languages"))]) (kiwix . [(20160902 759) ((emacs (24 3)) (cl-lib (0 5))) "Kiwix interface and support." single ((:url . "https://github.com/stardiviner/kiwix.el") (:keywords "kiwix" "wikipedia"))]) (kivy-mode . [(20160902 1041) nil "Emacs major mode for editing Kivy files" single nil]) (kite-mini . [(20160508 406) ((dash (2 11 0)) (websocket (1 5))) "Remotely evaluate JavaScript in the WebKit debugger" tar ((:url . "https://github.com/tungd/kite-mini.el") (:keywords "webkit"))]) (kite . [(20130201 1138) ((json (1 2)) (websocket (0 93 1))) "WebKit inspector front-end" tar ((:keywords "tools"))]) (killer . [(20120808 422) nil "kill and delete text" single ((:url . "http://github.com/tarsius/killer") (:keywords "convenience"))]) (kill-ring-search . [(20140422 855) nil "incremental search for the kill ring" single ((:url . "http://nschum.de/src/emacs/kill-ring-search/") (:keywords "convenience" "matching"))]) (kill-or-bury-alive . [(20160531 908) ((emacs (24 4)) (cl-lib (0 5))) "Precise control over buffer killing in Emacs" single ((:url . "https://github.com/mrkkrp/kill-or-bury-alive") (:keywords "buffer" "killing" "convenience"))]) (kibit-helper . [(20150508 833) ((s (0 8)) (emacs (24))) "Conveniently use the Kibit Leiningen plugin from Emacs" single ((:url . "http://www.github.com/brunchboy/kibit-helper") (:keywords "languages" "clojure" "kibit"))]) (kfg . [(20140908 2238) ((f (0 17 1))) "an emacs configuration system" single ((:url . "https://github.com/abingham/kfg"))]) (keyword-search . [(20160607 2238) nil "browser keyword search from Emacs" tar ((:url . "https://github.com/juhp/keyword-search") (:keywords "web" "search" "keyword"))]) (keyswap . [(20160813 257) ((emacs (24 3))) "swap bindings between key pairs" single ((:url . "http://github.com/hardenedapple/keyswap.el") (:keywords "convenience"))]) (keyset . [(20150219 2130) ((dash (2 8 0)) (cl-lib (0 5))) "A small library for structuring key bindings." single ((:url . "https://github.com/HKey/keyset"))]) (keymap-utils . [(20160902 513) ((cl-lib (0 3))) "keymap utilities" single ((:url . "https://github.com/tarsius/keymap-utils") (:keywords "convenience" "extensions"))]) (keyfreq . [(20160516 716) ((cl-lib (0 5))) "track command frequencies" single nil]) (keydef . [(20090428 1231) nil "a simpler way to define keys, with kbd syntax" single ((:keywords "convenience" "lisp" "customization" "keyboard" "keys"))]) (keychain-environment . [(20160424 446) nil "load keychain environment variables" single ((:url . "https://github.com/tarsius/keychain-environment") (:keywords "gnupg" "pgp" "ssh"))]) (key-seq . [(20150907 56) ((key-chord (0 6))) "map pairs of sequentially pressed keys to commands" single ((:url . "http://github.com/vlevit/key-seq.el") (:keywords "convenience" "keyboard" "keybindings"))]) (key-leap . [(20160831 747) ((emacs (24 3))) "Leap between lines by typing keywords" single ((:url . "https://github.com/MartinRykfors/key-leap") (:keywords "point" "convenience"))]) (key-intercept . [(20140210 2349) nil "Intercept prefix keys" single ((:url . "http://github.com/tarao/key-intercept-el") (:keywords "keyboard"))]) (key-combo . [(20150324 739) nil "map key sequence to commands" single ((:url . "https://github.com/uk-ar/key-combo") (:keywords "keyboard" "input"))]) (key-chord . [(20160227 438) nil "map pairs of simultaneously pressed keys to commands" single ((:keywords "keyboard" "chord" "input"))]) (kerl . [(20150424 1305) nil "Emacs integration for kerl" single ((:url . "http://github.com/correl/kerl.el/") (:keywords "tools"))]) (karma . [(20160220 445) ((pkg-info (0 4)) (emacs (24))) "Karma Test Runner Emacs Integration" single ((:url . "http://github.com/tonini/karma.el") (:keywords "language" "javascript" "js" "karma" "testing"))]) (kaomoji . [(20160218 20) ((emacs (24 3)) (helm-core (1 9 1))) "Input kaomoji superb easily" tar ((:url . "https://github.com/kuanyui/kaomoji.el") (:keywords "tools" "fun"))]) (kanji-mode . [(20160826 439) nil "View stroke order for kanji characters at cursor" tar ((:url . "http://github.com/wsgac/kanji-mode "))]) (kanban . [(20150930 917) nil "Parse org-todo headlines to use org-tables as Kanban tables" single ((:keywords "outlines" "convenience"))]) (kakapo-mode . [(20160727 2136) ((cl-lib (0 5))) "TABS (hard or soft) for indentation (leading whitespace), and SPACES for alignment." single ((:url . "https://github.com/listx/kakapo-mode") (:keywords "indentation"))]) (kaesar-mode . [(20160128 208) ((kaesar (0 1 4)) (cl-lib (0 3))) "Encrypt/Decrypt buffer by AES with password." single ((:url . "https://github.com/mhayashi1120/Emacs-kaesar") (:keywords "data" "convenience"))]) (kaesar-file . [(20160128 208) ((kaesar (0 1 1))) "Encrypt/Decrypt file by AES with password." single ((:url . "https://github.com/mhayashi1120/Emacs-kaesar") (:keywords "data" "files"))]) (kaesar . [(20160128 208) ((cl-lib (0 3))) "Another AES algorithm encrypt/decrypt string with password." single ((:url . "https://github.com/mhayashi1120/Emacs-kaesar") (:keywords "data"))]) (jvm-mode . [(20150422 8) ((dash (2 6 0)) (emacs (24))) "Monitor and manage your JVMs" single ((:url . "https://github.com/martintrojer/jvm-mode.el") (:keywords "convenience"))]) (jumplist . [(20151119 1945) ((cl-lib (0 5))) "Jump like vim jumplist or ex jumplist" single ((:url . "https://github.com/ganmacs/jumplist") (:keywords "jumplist" "vim"))]) (jump-to-line . [(20130122 853) nil "Jump to line number at point." single ((:keywords "jump" "line" "back" "file" "ruby" "csharp" "python" "perl"))]) (jump-char . [(20160505 851) nil "navigation by char" single ((:url . "https://github.com/lewang/jump-char"))]) (jump . [(20151009 129) ((findr (0 7)) (inflections (1 1))) "build functions which contextually jump between files" single ((:url . "http://github.com/eschulte/jump.el/tree/master") (:keywords "project" "convenience" "navigation"))]) (jumblr . [(20140908 1352) ((s (1 8 0)) (dash (2 2 0))) "an anagram game for emacs" tar ((:url . "https://github.com/mkmcc/jumblr") (:keywords "anagram" "word game" "games"))]) (julia-shell . [(20160514 728) ((julia-mode (0 3))) "Major mode for an inferior Julia shell" tar nil]) (julia-mode . [(20160803 1643) nil "Major mode for editing Julia source code" single ((:url . "https://github.com/JuliaLang/julia") (:keywords "languages"))]) (judge-indent . [(20160609 622) nil "detect indent style (indent and tab widths) and change behavior of Emacs" single ((:keywords "indent" "tab"))]) (jtags . [(20160211 1229) nil "enhanced tags functionality for Java development" tar ((:url . "http://jtags.sourceforge.net") (:keywords "languages" "tools"))]) (jsx-mode . [(20130908 1024) nil "major mode for JSX" single ((:url . "https://github.com/jsx/jsx-mode.el"))]) (jst . [(20150604 438) ((s (1 9)) (f (0 17)) (dash (2 10)) (pcache (0 3)) (emacs (24 4))) "JS test mode" single ((:url . "https://github.com/cheunghy/jst-mode") (:keywords "js" "javascript" "jasmine" "coffee" "coffeescript"))]) (jss . [(20130508 723) ((emacs (24 1)) (websocket (0)) (js2-mode (0))) "An emacs interface to webkit and mozilla debuggers" tar ((:keywords "languages"))]) (json-snatcher . [(20150511 2047) ((emacs (24))) "Grabs the path to JSON values in a JSON file" single ((:url . "http://github.com/sterlingg/json-snatcher"))]) (json-rpc . [(20160427 807) ((emacs (24 1)) (cl-lib (0 5))) "JSON-RPC library" single ((:url . "https://github.com/skeeto/elisp-json-rpc"))]) (json-reformat . [(20160212 53) nil "Reformatting tool for JSON" single ((:url . "https://github.com/gongo/json-reformat") (:keywords "json"))]) (json-mode . [(20160803 1606) ((json-reformat (0 0 5)) (json-snatcher (1 0 0))) "Major mode for editing JSON files" single ((:url . "https://github.com/joshwnj/json-mode"))]) (jsfmt . [(20150727 1525) nil "Interface to jsfmt command for javascript files" single ((:url . "https://github.com/brettlangdon/jsfmt.el"))]) (jscs . [(20151015 1049) ((emacs (24 1)) (cl-lib (0 5))) "Consistent JavaScript editing using JSCS" single ((:url . "https://github.com/papaeye/emacs-jscs") (:keywords "languages" "convenience"))]) (js3-mode . [(20160515 850) nil "An improved JavaScript editing mode" tar ((:keywords "javascript" "languages"))]) (js2-refactor . [(20160525 113) ((js2-mode (20101228)) (s (1 9 0)) (multiple-cursors (1 0 0)) (dash (1 0 0)) (s (1 0 0)) (yasnippet (0 9 0 1))) "A JavaScript refactoring library for emacs." tar nil]) (js2-mode . [(20160904 1234) ((emacs (24 1)) (cl-lib (0 5))) "Improved JavaScript editing mode" tar ((:url . "https://github.com/mooz/js2-mode/") (:keywords "languages" "javascript"))]) (js2-highlight-vars . [(20150914 108) ((js2-mode (20150908))) "highlight occurrences of the variable under cursor" single ((:url . "http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode/js2-highlight-vars-mode"))]) (js2-closure . [(20160715 1536) ((js2-mode (20150909))) "Google Closure dependency manager" single ((:url . "http://github.com/jart/js2-closure"))]) (js-doc . [(20160714 2134) nil "Insert JsDoc style comment easily" single ((:url . "https://github.com/mooz/js-doc") (:keywords "document" "comment"))]) (js-comint . [(20160907 1705) nil "Run a JavaScript interpreter in an inferior process window." single ((:url . "https://github.com/redguardtoo/js-comint") (:keywords "javascript" "node" "inferior-mode" "convenience"))]) (jquery-doc . [(20150812 58) nil "jQuery api documentation interface for emacs" tar ((:keywords "docs" "jquery"))]) (jq-mode . [(20160222 440) ((emacs (24 3))) "Edit jq scripts." tar ((:url . "https://github.com/ljos/jq-mode"))]) (jpop . [(20160816 348) ((emacs (24)) (dash (2 11 0)) (cl-lib (0 5))) "Lightweight project caching and navigation framework" tar ((:url . "https://github.com/domtronn/jpop") (:keywords "project" "convenience"))]) (jonprl-mode . [(20160818 1759) ((emacs (24 3)) (cl-lib (0 5)) (yasnippet (0 8 0))) "A major mode for editing JonPRL files" tar ((:keywords "languages"))]) (jknav . [(20121006 1325) nil "Automatically enable j/k keys for line-based navigation" single ((:keywords "keyboard" "navigation"))]) (jist . [(20160803 1758) ((emacs (24 4)) (pkg-info (0 4)) (dash (2 12 0)) (let-alist (1 0 4)) (magit (2 1 0)) (request (0 2 0))) "Gist integration" single ((:url . "https://github.com/emacs-pe/jist.el") (:keywords "convenience"))]) (jira-markup-mode . [(20150601 1409) nil "Emacs Major mode for JIRA-markup-formatted text files" single ((:url . "https://github.com/mnuessler/jira-markup-mode") (:keywords "jira" "markup"))]) (jira . [(20131210 1022) nil "Connect to JIRA issue tracking software" single nil]) (jinja2-mode . [(20141128 207) nil "A major mode for jinja2" single nil]) (jg-quicknav . [(20160216 2035) ((s (1 9 0)) (cl-lib (0 5))) "Quickly navigate the file system to find a file." single ((:url . "https://github.com/jeffgran/jg-quicknav") (:keywords "navigation"))]) (jenkins-watch . [(20121004 1626) nil "Watch continuous integration build status" single ((:url . "https://github.com/ataylor284/jenkins-watch"))]) (jenkins . [(20160903 1556) ((dash (2 12)) (emacs (24 3)) (json (1 4))) "Minimalistic Jenkins client for Emacs" single ((:keywords "jenkins" "convenience"))]) (jekyll-modes . [(20141117 514) ((polymode (0 2))) "Major modes (markdown and HTML) for authoring Jekyll content" single ((:url . "https://github.com/fred-o/jekyll-modes") (:keywords "docs"))]) (jedi-direx . [(20140310 236) ((jedi (0 1 2)) (direx (0 1 -3))) "Tree style source code viewer for Python buffer" single nil]) (jedi-core . [(20160709 722) ((emacs (24)) (epc (0 1 0)) (python-environment (0 0 2)) (cl-lib (0 5))) "Common code of jedi.el and company-jedi.el" tar nil]) (jedi . [(20160425 2156) ((emacs (24)) (jedi-core (0 2 2)) (auto-complete (1 4))) "a Python auto-completion for Emacs" single nil]) (jdee . [(20160728 1152) ((emacs (24 3))) "Java Development Environment for Emacs" tar ((:url . "http://github.com/jdee-emacs/jdee") (:keywords "java" "tools"))]) (jbeans-theme . [(20160406 1257) ((emacs (24))) "Jbeans theme for GNU Emacs 24 (deftheme)" single ((:url . "https://github.com/synic/jbeans-emacs"))]) (jazz-theme . [(20160715 829) nil "A warm color theme for Emacs 24." single ((:url . "https://github.com/donderom/jazz-theme"))]) (jaword . [(20150325 718) ((tinysegmenter (0 1))) "Minor-mode for handling Japanese words better" single ((:url . "http://hins11.yu-yake.com/"))]) (javap-mode . [(20120223 1408) nil "Javap major mode" single ((:url . "http://github.com/hiredman/javap-mode"))]) (javadoc-lookup . [(20160213 1631) ((cl-lib (0 3))) "Javadoc Emacs integration with Maven" tar ((:url . "https://github.com/skeeto/javadoc-lookup"))]) (java-snippets . [(20160626 1952) ((yasnippet (0 8 0))) "Yasnippets for Java" tar ((:url . "https://github.com/nekop/yasnippet-java-mode"))]) (java-imports . [(20160311 1515) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 2))) "Code for dealing with Java imports" single ((:url . "http://www.github.com/dakrone/emacs-java-imports") (:keywords "java"))]) (jaunte . [(20130413 219) nil "Emacs Hit a Hint" single nil]) (jasminejs-mode . [(20150526 1705) nil "A minor mode for manipulating jasmine test files" tar ((:url . "https://github.com/stoltene2/jasminejs-mode") (:keywords "javascript" "jasmine"))]) (jar-manifest-mode . [(20160430 1726) nil "Major mode to edit JAR manifest files" single ((:url . "http://github.com/omajid/jar-manifest-mode") (:keywords "convenience" "languages"))]) (jape-mode . [(20140903 806) nil "An Emacs editing mode mode for GATE's JAPE files" single ((:url . "http://github.com/tanzoniteblack/jape-mode") (:keywords "languages" "jape" "gate"))]) (japanlaw . [(20160129 20) ((cl-lib (0 5))) "Japan law from law.e-gov.go.jp" single ((:keywords "docs" "help"))]) (japanese-holidays . [(20150208 1737) ((cl-lib (0 3))) "calendar functions for the Japanese calendar" single ((:url . "https://github.com/emacs-jp/japanese-holidays") (:keywords "calendar"))]) (jammer . [(20160310 59) nil "Punish yourself for using Emacs inefficiently" single ((:url . "https://github.com/wasamasa/jammer") (:keywords "games"))]) (jade-mode . [(20160525 741) nil "Major mode for editing .jade files" single ((:url . "https://github.com/brianc/jade-mode"))]) (jade . [(20160913 816) ((emacs (25)) (seq (2 16)) (js2-mode (20140114)) (company (0 9 0)) (websocket (1 6))) "JavaScript Awesome Development Environment" tar ((:url . "https://github.com/NicolasPetton/jade") (:keywords "tools" "javascript"))]) (jack-connect . [(20141207 407) nil "Manage jack connections within Emacs" single nil]) (jabber-otr . [(20150918 444) ((emacs (24)) (jabber (0 8 92))) "Off-The-Record messaging for jabber.el" tar ((:url . "https://github.com/legoscia/emacs-jabber-otr/") (:keywords "comm"))]) (jabber . [(20160124 552) ((fsm (0 2))) "A Jabber client for Emacs." tar nil]) (j-mode . [(20140702 809) nil "Major mode for editing J programs" tar ((:url . "http://github.com/zellio/j-mode") (:keywords "j" "langauges"))]) (iy-go-to-char . [(20141029 846) nil "Go to next CHAR which is similar to \"f\" and \"t\" in vim" single ((:url . "https://github.com/doitian/iy-go-to-char") (:keywords "navigation" "search"))]) (ix . [(20131027 929) ((grapnel (0 5 3))) "Emacs client for http://ix.io pastebin" single ((:url . "http://www.github.com/theanalyst/ix.el"))]) (ivy-purpose . [(20160724 303) ((emacs (24)) (ivy (0 8)) (window-purpose (1 5))) "Ivy Interface for Purpose" single ((:url . "https://github.com/bmag/ivy-purpose"))]) (ivy-pages . [(20160728 1220) ((emacs (24 1)) (ivy (0 8 0))) "Complete current buffer's pages with Ivy" single ((:url . "https://github.com/igorepst/ivy-pages") (:keywords "convenience" "matching"))]) (ivy-hydra . [(20160517 1349) ((emacs (24 1)) (ivy (0 8 0)) (hydra (0 13 4))) "Additional key bindings for Ivy" single ((:url . "https://github.com/abo-abo/swiper") (:keywords "completion" "matching" "bindings"))]) (ivy-gitlab . [(20160519 312) ((s (1 9 0)) (dash (2 9 0)) (ivy (0 8 0)) (gitlab (0 8))) "Ivy interface to Gitlab" single ((:url . "https://github.com/nlamirault/emacs-gitlab") (:keywords "gitlab" "ivy"))]) (ivy-erlang-complete . [(20160905 353) ((erlang (20151013 157)) (s (1 11 0)) (dash (2 12 1)) (counsel (0 8 0)) (ivy (0 8 0)) (async (20160711 2235)) (emacs (24 4))) "Erlang completion at point using ivy." tar nil]) (ivy-bibtex . [(20160823 900) ((swiper (0 7 0)) (parsebib (1 0)) (s (1 9 0)) (dash (2 6 0)) (f (0 16 2)) (cl-lib (0 5)) (biblio (0 2))) "A BibTeX bibliography manager based on Ivy" tar nil]) (ivy . [(20160913 535) ((emacs (24 1))) "Incremental Vertical completYon" tar ((:url . "https://github.com/abo-abo/swiper") (:keywords "matching"))]) (ivs-edit . [(20140720 346) ((emacs (24 3)) (dash (2 6 0)) (cl-lib (1 0))) "IVS (Ideographic Variation Sequence) editing tool" tar ((:url . "http://github.com/kawabata/ivs-edit") (:keywords "text"))]) (ivariants . [(20140720 2127) ((emacs (24 3)) (ivs-edit (1 0))) "Ideographic variants editor and browser" tar ((:url . "http://github.com/kawabata/ivariants") (:keywords "i18n" "languages"))]) (iterator . [(20160406 1206) ((emacs (24)) (cl-lib (0 5))) "A library to create and use elisp iterators objects." single ((:url . "https://github.com/thierryvolpiatto/iterator"))]) (itasca . [(20160406 542) ((emacs (24 3))) "Major modes for Itasca software data files." tar ((:url . "http://github.com/jkfurtney/itasca-emacs/") (:keywords "itasca" "flac" "3dec" "udec" "flac3d" "pfc" "pfc2d" "pfc3d" "fish"))]) (itail . [(20151113 835) nil "An interactive tail mode" single ((:url . "https://github.com/re5et/itail") (:keywords "tail"))]) (iss-mode . [(20141001 1213) nil "Mode for InnoSetup install scripts" single nil]) (isgd . [(20150414 236) nil "Shorten URLs using the isgd.com shortener service" single ((:url . "https://github.com/chmouel/isgd.el"))]) (isend-mode . [(20130419 258) nil "Interactively send parts of an Emacs buffer to an interpreter" single ((:url . "https://github.com/ffevotte/isend-mode.el"))]) (isearch-symbol-at-point . [(20130728 1521) nil "Use isearch to search for the symbol at point" single ((:url . "https://github.com/re5et/isearch-symbol-at-point") (:keywords "isearch"))]) (isearch-prop . [(20160827 922) nil "Search text-property or overlay-property contexts." single ((:url . "http://www.emacswiki.org/isearch-prop.el") (:keywords "search" "matching" "invisible" "thing" "help"))]) (isearch-dabbrev . [(20141223 2222) ((cl-lib (0 5))) "Use dabbrev in isearch" single ((:url . "https://github.com/Dewdrops/isearch-dabbrev") (:keywords "dabbrev" "isearch"))]) (isearch+ . [(20160704 805) nil "Extensions to `isearch.el' (incremental search)." single ((:url . "http://www.emacswiki.org/isearch+.el") (:keywords "help" "matching" "internal" "local"))]) (irony-eldoc . [(20141226 2219) ((emacs (24)) (cl-lib (0 5)) (irony (0 1))) "irony-mode support for eldoc-mode" single ((:url . "https://github.com/ikirill/irony-eldoc") (:keywords "c" "c++" "objc" "convenience" "tools"))]) (irony . [(20160912 904) ((cl-lib (0 5)) (json (1 2))) "C/C++ minor mode powered by libclang" tar ((:url . "https://github.com/Sarcasm/irony-mode") (:keywords "c" "convenience" "tools"))]) (irfc . [(20130824 507) nil "Interface for IETF RFC document." single ((:url . "http://www.emacswiki.org/emacs/download/irfc.el") (:keywords "rfc" "ietf"))]) (iregister . [(20150515 1407) nil "Interactive register commands for Emacs." tar ((:url . "https://github.com/atykhonov/iregister.el") (:keywords "convenience"))]) (ir-black-theme . [(20130302 2355) nil "Port of ir-black theme" single ((:keywords "faces"))]) (ipretty . [(20140406 2220) nil "Interactive Emacs Lisp pretty-printing" single ((:url . "https://github.com/steckerhalter/ipretty") (:keywords "pretty-print" "elisp" "buffer"))]) (iplayer . [(20150101 255) nil "Browse and download BBC TV/radio shows" single ((:url . "https://github.com/csrhodes/iplayer-el") (:keywords "multimedia" "bbc"))]) (iodine-theme . [(20151031 939) ((emacs (24))) "A light emacs color theme" single ((:url . "https://github.com/srdja/iodine-theme") (:keywords "themes"))]) (ioccur . [(20130821 2248) nil "Incremental occur" single ((:url . "https://github.com/thierryvolpiatto/ioccur"))]) (io-mode-inf . [(20140128 1134) nil "Interaction with an Io interpreter." single ((:url . "https://github.com/slackorama/io-emacs") (:keywords "io" "languages"))]) (io-mode . [(20140814 321) nil "Major mode to edit Io language files in Emacs" single ((:url . "https://github.com/superbobry/io-mode") (:keywords "languages" "io"))]) (interval-tree . [(20130325 707) ((dash (1 1 0))) "Interval tree data structure for 1D range queries" single ((:url . "https://github.com/Fuco1/interval-tree") (:keywords "extensions" "data structure"))]) (interval-list . [(20150327 1018) ((dash (2 4 0)) (cl-lib (0 5)) (emacs (24 4))) "Interval list data structure for 1D selections" single ((:url . "https://github.com/Fuco1/interval-list") (:keywords "extensions" "data structure"))]) (intero . [(20160907 748) ((flycheck (0 25)) (company (0 8)) (emacs (24 3)) (haskell-mode (13 0))) "Complete development mode for Haskell" single ((:url . "https://github.com/commercialhaskell/intero") (:keywords "haskell" "tools"))]) (interleave . [(20160825 953) nil "Interleaving text books since 2015" single ((:url . "https://github.com/rudolfochrist/interleave"))]) (interaction-log . [(20160305 501) ((cl-lib (0))) "exhaustive log of interactions with Emacs" single ((:url . "https://github.com/michael-heerdegen/interaction-log.el") (:keywords "convenience"))]) (instapaper . [(20130104 621) nil "add URLs to instapaper from emacs" single ((:url . "htts://bitbucket.org/jfm/emacs-instapaper"))]) (insfactor . [(20141116 1602) nil "Client for a Clojure project with insfactor in it" single ((:url . "http://github.com/duelinmarkers/insfactor.el") (:keywords "clojure"))]) (insert-shebang . [(20160626 409) nil "Insert shebang line automatically." single ((:url . "http://github.com/psachin/insert-shebang") (:keywords "shebang" "tool" "convenience"))]) (inlineR . [(20120520 732) nil "insert Tag for inline image of R graphics" single ((:url . "https://github.com/myuhe/inlineR.el") (:keywords "convenience" "iimage.el" "cacoo.el"))]) (inline-crypt . [(20130409 507) nil "Simple inline encryption via openssl" tar nil]) (inkpot-theme . [(20120505 708) nil "port of vim's inkpot theme" single ((:url . "http://github.com/siovan/emacs24-inkpot.git"))]) (ink-mode . [(20160814 416) ((emacs (24 3))) "Major mode for writing interactive fiction in Ink" single ((:url . "http://github.com/Kungsgeten/ink-mode") (:keywords "languages"))]) (initsplit . [(20160113 653) nil "code to split customizations into different files" single ((:url . "http://www.gci-net.com/users/j/johnw/emacs.html") (:keywords "lisp"))]) (init-open-recentf . [(20160822 701) ((emacs (24 4))) "Open recentf immediately after Emacs is started" single ((:keywords "file" "recentf" "after-init-hook"))]) (init-loader . [(20160528 615) nil "Loader for configuration files" single ((:url . "https://github.com/emacs-jp/init-loader/"))]) (inherit-local . [(20160909 755) ((emacs (24 3))) "Inherited buffer-local variables" single ((:url . "https://github.com/shlevy/inherit-local/tree-master/"))]) (inform7-mode . [(20131009 2354) ((sws-mode (0 1))) "Major mode for editing Inform 7 source files" single ((:keywords "inform" "inform7" "interactive fiction"))]) (info+ . [(20160702 1343) nil "Extensions to `info.el'." single ((:url . "http://www.emacswiki.org/info+.el") (:keywords "help" "docs" "internal"))]) (inflections . [(20121016 157) nil "convert english words between singular and plural" single ((:url . "https://github.com/eschulte/jump.el") (:keywords "ruby" "rails" "languages" "oop"))]) (inferior-spim . [(20160826 646) nil "inferior mode for spim." single ((:keywords "spim" "inferior" "mips"))]) (inf-ruby . [(20160617 551) nil "Run a Ruby process in a buffer" single ((:url . "http://github.com/nonsequitur/inf-ruby") (:keywords "languages" "ruby"))]) (inf-php . [(20130414 21) ((php-mode (1 5 0))) "Run a php interactive shell in a buffer" single ((:url . "https://github.com/taksatou/inf-php") (:keywords "languages" "php"))]) (inf-mongo . [(20160815 216) nil "Run a MongoDB shell process in a buffer" single ((:url . "http://github.com/endofunky/inf-mongo") (:keywords "databases" "mongodb"))]) (inf-clojure . [(20160404 2138) ((emacs (24 3)) (clojure-mode (5 3))) "Run an external Clojure process in an Emacs buffer" single ((:url . "http://github.com/clojure-emacs/inf-clojure") (:keywords "processes" "clojure"))]) (indy . [(20150610 1006) nil "A minor mode and EDSL to manage your mode's indentation rules." single ((:keywords "convenience" "matching" "tools"))]) (indicators . [(20130217 1405) nil "Display the buffer relative location of line in the fringe." single ((:url . "https://github.com/Fuco1/indicators.el") (:keywords "fringe" "frames"))]) (indent-guide . [(20160606 2318) nil "show vertical lines to guide indentation" single ((:url . "http://hins11.yu-yake.com/"))]) (import-popwin . [(20150716 233) ((popwin (0 6)) (cl-lib (0 5))) "popwin buffer near by import statements with popwin" single ((:url . "https://github.com/syohex/emacs-import-popwin"))]) (import-js . [(20160504 2210) ((emacs (24))) "Import Javascript dependencies" single ((:url . "http://github.com/trotzig/import-js/") (:keywords "javascript"))]) (impatient-mode . [(20150501 247) ((cl-lib (0 3)) (simple-httpd (1 4 0)) (htmlize (1 40))) "Serve buffers live over HTTP" tar ((:url . "https://github.com/netguy204/imp.el"))]) (immutant-server . [(20140311 1508) nil "Run your Immutant server in Emacs" single ((:url . "http://www.github.com/leathekd/immutant-server.el"))]) (immortal-scratch . [(20160517 1418) nil "respawn the scratch buffer when it's killed" single nil]) (imgur . [(20120307 225) ((anything (1 287))) "imgur client for Emacs" single ((:keywords "multimedia" "convenience"))]) (imgix . [(20141226 1332) ((json (1 2)) (ht (2 0)) (s (1 9 0)) (dash (2 9 0)) (cl-lib (0 5))) "Major mode for editing images in emacs via imgix" tar ((:keywords "images" "image processing" "image editing" "sepia" "blur"))]) (imenus . [(20160220 1332) ((cl-lib (0 5))) "Imenu for multiple buffers and without subgroups" single ((:url . "https://github.com/alezost/imenus.el") (:keywords "tools" "convenience"))]) (imenu-list . [(20160211 341) ((cl-lib (0 5))) "Show imenu entries in a seperate buffer" single ((:url . "https://github.com/bmag/imenu-list"))]) (imenu-anywhere . [(20160831 356) ((cl-lib (0 5))) "ido/ivy/helm imenu across same mode/project/etc buffers" single ((:url . "https://github.com/vitoshka/imenu-anywhere") (:keywords "ido" "imenu" "tags"))]) (imenu+ . [(20151231 1401) nil "Extensions to `imenu.el'." single ((:url . "http://www.emacswiki.org/imenu+.el") (:keywords "tools" "menus"))]) (imapfilter . [(20160419 246) nil "run the imapfilter executable" single ((:url . "http://github.com/tarsius/imapfilter") (:keywords "mail"))]) (imakado . [(20141024 223) nil "imakado's usefull macros and functions" single ((:url . "https://github.com/imakado/emacs-imakado") (:keywords "convenience"))]) (image-dired+ . [(20150429 2244) ((cl-lib (0 3))) "Image-dired extensions" single ((:url . "https://github.com/mhayashi1120/Emacs-image-diredx") (:keywords "extensions" "multimedia"))]) (image-archive . [(20150620 1832) ((emacs (24)) (cl-lib (0 5))) "Image thumbnails in archive file with non-blocking" single ((:url . "https://github.com/mhayashi1120/Emacs-image-archive") (:keywords "multimedia"))]) (image+ . [(20150707 916) ((cl-lib (0 3))) "Image manipulate extensions for Emacs" single ((:url . "https://github.com/mhayashi1120/Emacs-imagex") (:keywords "multimedia" "extensions"))]) (igv . [(20141210 427) nil "Control Integrative Genomic Viewer within Emacs" single nil]) (igrep . [(20130824 507) nil "An improved interface to `grep` and `find`" single ((:keywords "tools" "processes" "search"))]) (ignoramus . [(20160414 709) nil "Ignore backups, build files, et al." single ((:url . "http://github.com/rolandwalker/ignoramus") (:keywords "convenience" "tools"))]) (iflipb . [(20141123 1316) nil "interactively flip between recently visited buffers" single ((:url . "http://git.rosdahl.net/?p=joel/iflipb.git"))]) (ietf-docs . [(20150928 257) nil "Fetch, Cache and Load IETF documents" single ((:url . "https://github.com/choppsv1/ietf-docs") (:keywords "ietf" "rfc"))]) (iedit . [(20160728 1951) nil "Edit multiple regions in the same way simultaneously." tar ((:url . "http://www.emacswiki.org/emacs/Iedit") (:keywords "occurrence" "region" "simultaneous" "refactoring"))]) (ids-edit . [(20160324 1522) ((emacs (24 3))) "IDS (Ideographic Description Sequence) editing tool" tar ((:url . "http://github.com/kawabata/ids-edit") (:keywords "text"))]) (idris-mode . [(20160302 635) ((emacs (24)) (prop-menu (0 1)) (cl-lib (0 5))) "Major mode for editing Idris code" tar ((:url . "https://github.com/idris-hackers/idris-mode") (:keywords "languages"))]) (idomenu . [(20141123 1320) nil "imenu tag selection a la ido" single nil]) (ido-yes-or-no . [(20160217 1617) ((ido-completing-read+ (0))) "Use Ido to answer yes-or-no questions" single ((:url . "https://github.com/DarwinAwardWinner/ido-yes-or-no"))]) (ido-vertical-mode . [(20160429 1037) nil "Makes ido-mode display vertically." single ((:url . "https://github.com/creichert/ido-vertical-mode.el") (:keywords "convenience"))]) (ido-ubiquitous . [(20160623 815) ((emacs (24 1)) (ido-completing-read+ (3 15)) (cl-lib (0 5))) "Use ido (nearly) everywhere." single ((:url . "https://github.com/DarwinAwardWinner/ido-ubiquitous") (:keywords "convenience" "completion" "ido"))]) (ido-springboard . [(20150505 1011) nil "Temporarily change default-directory for one command" single ((:url . "https://github.com/jwiegley/springboard") (:keywords "ido"))]) (ido-sort-mtime . [(20131117 530) nil "Sort Ido's file list by modification time" single ((:keywords "convenience" "files"))]) (ido-skk . [(20151111 150) ((emacs (24 4)) (ddskk (20150912 1820))) "ido interface for skk henkan" single ((:url . "https://github.com/tsukimizake/ido-skk") (:keywords "languages"))]) (ido-select-window . [(20131220 1247) ((emacs (24 1))) "Select a window using ido and buffer names" single ((:url . "https://github.com/pjones/ido-select-window"))]) (ido-occur . [(20160820 740) ((dash (2 13 0))) "Yet another `occur' with `ido'." single ((:url . "https://github.com/danil/ido-occur") (:keywords "inner" "buffer" "search"))]) (ido-occasional . [(20150214 448) ((emacs (24 1))) "Use ido where you choose." single ((:url . "https://github.com/abo-abo/ido-occasional") (:keywords "completion"))]) (ido-migemo . [(20150921 1544) ((migemo (1 9 1))) "Migemo plug-in for Ido" single ((:url . "https://github.com/myuhe/ido-migemo.el") (:keywords "files"))]) (ido-load-library . [(20140611 900) ((persistent-soft (0 8 8)) (pcache (0 2 3))) "Load-library alternative using ido-completing-read" single ((:url . "http://github.com/rolandwalker/ido-load-library") (:keywords "maint" "completion"))]) (ido-hacks . [(20150331 1209) nil "Put more IDO in your IDO" single ((:keywords "convenience"))]) (ido-grid-mode . [(20160122 339) ((emacs (24 4))) "Display ido-prospects in the minibuffer in a grid." single ((:url . "https://github.com/larkery/ido-grid-mode.el") (:keywords "convenience"))]) (ido-gnus . [(20140216 846) ((gnus (5 13))) "Access gnus groups or servers using ido" single ((:url . "https://github.com/vapniks/ido-gnus") (:keywords "comm"))]) (ido-exit-target . [(20150904 737) ((emacs (24 4))) "Commands and keys for selecting other window and frame targets within ido" single ((:url . "https://github.com/waymondo/ido-exit-target") (:keywords "convenience" "tools" "extensions"))]) (ido-describe-bindings . [(20160105 53) ((dash (2 11 0))) "Yet another `describe-bindings' with `ido'." single ((:url . "https://github.com/danil/ido-describe-bindings") (:keywords "help"))]) (ido-completing-read+ . [(20160623 815) ((emacs (24 1)) (cl-lib (0 5))) "A completing-read-function using ido" single ((:url . "https://github.com/DarwinAwardWinner/ido-ubiquitous") (:keywords "ido" "completion" "convenience"))]) (ido-complete-space-or-hyphen . [(20130228 208) nil "Complete SPACE or HYPHEN when type SPACE in ido" single ((:url . "https://github.com/doitian/ido-complete-space-or-hyphen") (:keywords "ido" "completion"))]) (ido-clever-match . [(20151011 1026) ((emacs (24 4)) (cl-lib (0 5))) "Alternative matcher for ido." single ((:url . "https://github.com/Bogdanp/ido-clever-match") (:keywords "ido" "flex"))]) (ido-at-point . [(20151021 57) ((emacs (24))) "ido-style completion-at-point" single ((:url . "https://github.com/katspaugh/ido-at-point") (:keywords "convenience" "abbrev"))]) (idle-require . [(20090715 1503) nil "load elisp libraries while Emacs is idle" single ((:url . "http://nschum.de/src/emacs/idle-require/") (:keywords "internal"))]) (idle-highlight-mode . [(20120920 948) nil "highlight the word the point is on" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/IdleHighlight") (:keywords "convenience"))]) (identica-mode . [(20130204 1453) nil "Major mode API client for status.net open microblogging" tar ((:url . "http://blog.gabrielsaldana.org/identica-mode-for-emacs/") (:keywords "identica" "web"))]) (idea-darkula-theme . [(20160416 1603) ((emacs (24 1))) "Color theme based on IntelliJ IDEA Darkula color theme" single ((:url . "http://github.com/fourier/idea-darkula-theme") (:keywords "themes"))]) (id-manager . [(20160425 216) nil "id-password management" single ((:keywords "password" "convenience"))]) (icomplete+ . [(20160704 1959) nil "Extensions to `icomplete.el'." single ((:url . "http://www.emacswiki.org/icomplete+.el") (:keywords "help" "abbrev" "internal" "extensions" "local" "completion" "matching"))]) (icicles . [(20160831 954) nil "Minibuffer input completion and cycling." tar ((:url . "http://www.emacswiki.org/icicles.el") (:keywords "extensions" "help" "abbrev" "local" "minibuffer" "projects" "keys" "apropos" "completion" "matching" "regexp" "command"))]) (ibuffer-vc . [(20150714 1320) ((cl-lib (0 2))) "Group ibuffer's list by VC project, or show VC status" single ((:url . "http://github.com/purcell/ibuffer-vc") (:keywords "themes"))]) (ibuffer-tramp . [(20151118 939) nil "Group ibuffer's list by TRAMP connection" single ((:url . "http://github.com/svend/ibuffer-tramp") (:keywords "convenience"))]) (ibuffer-rcirc . [(20150215 1318) ((cl-lib (0 2))) "Ibuffer integration for rcirc" single ((:url . "https://github.com/fgallina/ibuffer-rcirc") (:keywords "buffer" "convenience" "comm"))]) (ibuffer-projectile . [(20150121 837) ((projectile (0 11 0))) "Group ibuffer's list by projectile root" single ((:url . "http://github.com/purcell/ibuffer-projectile") (:keywords "themes"))]) (ibuffer-git . [(20110508 31) nil "show git status in ibuffer column" single ((:keywords "convenience"))]) (iasm-mode . [(20131004 1644) nil "interactive assembly major mode." single ((:url . "https://github.com/RAttab/iasm-mode") (:keywords ":" "tools"))]) (i2b2-mode . [(20140709 1804) nil "Highlights corresponding PHI data in the text portion of an i2b2 XML Document." single ((:keywords "xml" "phi" "i2b2" "deidi2b2"))]) (hydra . [(20160913 216) ((cl-lib (0 5))) "Make bindings that stick around." tar ((:url . "https://github.com/abo-abo/hydra") (:keywords "bindings"))]) (hyde . [(20160507 2008) nil "Major mode to help create and manage Jekyll blogs" tar nil]) (hydandata-light-theme . [(20160815 2118) nil "A light color theme that is easy on your eyes" single ((:keywords "color-theme" "theme"))]) (hyai . [(20160319 1835) ((cl-lib (0 5)) (emacs (24))) "Haskell Yet Another Indentation" single ((:url . "https://github.com/iquiw/hyai"))]) (hy-mode . [(20151025 543) nil "Major mode for Hy code" single ((:url . "http://github.com/hylang/hy-mode") (:keywords "languages" "lisp"))]) (hungry-delete . [(20151203 1314) nil "hungry delete minor mode" single ((:url . "http://github.com/nflath/hungry-delete"))]) (httprepl . [(20141101 1034) ((s (1 9 0)) (dash (2 5 0)) (emacs (24))) "An HTTP REPL" single ((:url . "https://github.com/gregsexton/httprepl.el") (:keywords "http" "repl"))]) (httpcode . [(20121001 2045) nil "explains the meaning of an HTTP status code" single ((:url . "http://github.com/rspivak/httpcode.el"))]) (http-twiddle . [(20160801 1211) nil "send & twiddle & resend HTTP requests" single ((:url . "https://github.com/hassy/http-twiddle/blob/master/http-twiddle.el") (:keywords "http" "rest" "soap"))]) (http-post-simple . [(20131010 2058) nil "HTTP POST requests using the url library" single ((:keywords "comm" "data" "processes" "hypermedia"))]) (http . [(20160701 2025) ((emacs (24 4)) (request (0 2 0))) "Yet another HTTP client" single ((:url . "https://github.com/emacs-pe/http.el") (:keywords "convenience"))]) (htmlize . [(20130207 1202) nil "Convert buffer text and decorations to HTML." single ((:keywords "hypermedia" "extensions"))]) (html-to-markdown . [(20151105 40) ((cl-lib (0 5))) "HTML to Markdown converter written in Emacs-lisp." single ((:url . "http://github.com/Bruce-Connor/html-to-markdown") (:keywords "tools" "wp" "languages"))]) (html-script-src . [(20120403 1115) nil "Insert